rai_serve.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762
  1. package cygx
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "hongze/hz_crm_api/controllers"
  7. "hongze/hz_crm_api/models"
  8. "hongze/hz_crm_api/models/cygx"
  9. "hongze/hz_crm_api/models/roadshow"
  10. cygxService "hongze/hz_crm_api/services/cygx"
  11. "hongze/hz_crm_api/utils"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // 权益服务类型
  17. type RaiServeCoAntroller struct {
  18. controllers.BaseAuthController
  19. }
  20. // @Title 服务类型列表
  21. // @Description 服务类型列表接口
  22. // @Success 200 {object} cygx.RaiServeTypeListResp
  23. // @router /rai_serve/type_list [get]
  24. func (this *RaiServeCoAntroller) TypeList() {
  25. br := new(models.BaseResponse).Init()
  26. defer func() {
  27. this.Data["json"] = br
  28. this.ServeJSON()
  29. }()
  30. sysUser := this.SysUser
  31. if sysUser == nil {
  32. br.Msg = "请登录"
  33. br.ErrMsg = "请登录,SysUser Is Empty"
  34. br.Ret = 408
  35. return
  36. }
  37. resp := new(cygx.RaiServeTypeListResp)
  38. var condition string
  39. list, err := cygx.GetRaiServeTypeRespList(condition)
  40. if err != nil {
  41. br.Msg = "获取失败"
  42. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  43. return
  44. }
  45. resp.List = list
  46. br.Ret = 200
  47. br.Success = true
  48. br.Msg = "获取成功"
  49. br.Data = resp
  50. }
  51. // @Title 标签搜索
  52. // @Description 标签搜索接口
  53. // @Param KeyWord query string false "搜索关键词"
  54. // @Success 200 {object} cygx.RaiServeTagListResp
  55. // @router /rai_serve/search_tag [get]
  56. func (this *RaiServeCoAntroller) SearchTag() {
  57. br := new(models.BaseResponse).Init()
  58. defer func() {
  59. this.Data["json"] = br
  60. this.ServeJSON()
  61. }()
  62. sysUser := this.SysUser
  63. if sysUser == nil {
  64. br.Msg = "请登录"
  65. br.ErrMsg = "请登录,SysUser Is Empty"
  66. br.Ret = 408
  67. return
  68. }
  69. keyWord := this.GetString("KeyWord")
  70. if keyWord == "" {
  71. br.Msg = "请输入搜索关键词"
  72. return
  73. }
  74. //keyWordSlice := strings.Split(keyWord, ",")
  75. //var conditionindustrial string
  76. //var conditionsubject string
  77. //for _, v := range keyWordSlice {
  78. // conditionindustrial += ` OR i.industry_name LIKE '%` + v + `%' `
  79. // conditionsubject += ` OR s.subject_name LIKE '%` + v + `%' `
  80. //}
  81. resp := new(cygx.RaiServeTagListResp)
  82. list, err := cygx.GetRaiServeSearchTagRespList(keyWord)
  83. if err != nil {
  84. br.Msg = "获取失败"
  85. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  86. return
  87. }
  88. //如果有固收或者策略就去查询行业表
  89. if strings.Contains("固收", keyWord) || strings.Contains("策略", keyWord) {
  90. var condition string
  91. var pars []interface{}
  92. keyWord = "%" + keyWord + "%"
  93. condition = ` AND product_id = 2 AND permission_name IN ('策略','固收') AND permission_name LIKE ? `
  94. pars = append(pars, keyWord)
  95. listChartPermission, err := models.GetChartPermissionListByCondition(condition, pars)
  96. if err != nil {
  97. br.Msg = "获取失败"
  98. br.ErrMsg = "获取数据失败,GetChartPermissionListByCondition Err:" + err.Error()
  99. return
  100. }
  101. for _, v := range listChartPermission {
  102. item := new(cygx.RaiServeTagResp)
  103. item.TagType = 3
  104. item.TagId = v.ChartPermissionId
  105. item.TagName = v.PermissionName
  106. list = append(list, item)
  107. }
  108. }
  109. if len(list) == 0 {
  110. list = make([]*cygx.RaiServeTagResp, 0)
  111. } else {
  112. for _, v := range list {
  113. v.Md5Key = utils.MD5(fmt.Sprintf("K_", v.TagType, "V_", v.TagId))
  114. }
  115. }
  116. resp.List = list
  117. br.Ret = 200
  118. br.Success = true
  119. br.Msg = "获取成功"
  120. br.Data = resp
  121. }
  122. // @Title 标签搜索(研究员日历添加到会信息)
  123. // @Description 标签搜索接口
  124. // @Param KeyWord query string false "搜索关键词"
  125. // @Param ResearcherId query int false "研究员ID"
  126. // @Success 200 {object} cygx.RaiServeTagListResp
  127. // @router /rai_serve/search_tag_by_calendar [get]
  128. func (this *RaiServeCoAntroller) SearchTagCalendar() {
  129. br := new(models.BaseResponse).Init()
  130. defer func() {
  131. this.Data["json"] = br
  132. this.ServeJSON()
  133. }()
  134. sysUser := this.SysUser
  135. if sysUser == nil {
  136. br.Msg = "请登录"
  137. br.ErrMsg = "请登录,SysUser Is Empty"
  138. br.Ret = 408
  139. return
  140. }
  141. keyWord := this.GetString("KeyWord")
  142. researcherId := this.GetString("ResearcherId")
  143. askEmailList, err := cygx.GetAskEmailListByAdminIds(researcherId)
  144. if err != nil {
  145. br.Msg = "获取失败"
  146. br.ErrMsg = "GetAskEmailCountByCelue,Err:" + err.Error()
  147. return
  148. }
  149. var hasCelue bool
  150. var permissionName []string
  151. for _, v := range askEmailList {
  152. permissionName = append(permissionName, v.ChartPermissionName)
  153. if v.ChartPermissionName == "策略" || v.ChartPermissionName == "固收" {
  154. hasCelue = true
  155. }
  156. }
  157. var permissionNameSql []string
  158. for _, v := range permissionName {
  159. permissionNameSql = append(permissionNameSql, "'"+v+"'")
  160. }
  161. chartList, err := models.GetChartPermissionByNamesByRai(permissionNameSql)
  162. if err != nil {
  163. br.Msg = "获取失败"
  164. br.ErrMsg = "获取数据失败,GetChartPermissionByNames Err:" + err.Error()
  165. return
  166. }
  167. var list []*cygx.RaiServeTagResp
  168. resp := new(cygx.RaiServeTagListResp)
  169. if hasCelue {
  170. for _, v := range chartList {
  171. item := new(cygx.RaiServeTagResp)
  172. item.TagType = 3
  173. item.TagId = v.ChartPermissionId
  174. item.TagName = v.PermissionName
  175. list = append(list, item)
  176. }
  177. } else {
  178. if keyWord == "" {
  179. br.Msg = "请输入搜索关键词"
  180. return
  181. }
  182. keyWordSlice := strings.Split(keyWord, ",")
  183. var conditionindustrial string
  184. var conditionsubject string
  185. for _, v := range keyWordSlice {
  186. conditionindustrial += ` OR i.industry_name LIKE '%` + v + `%' `
  187. conditionsubject += ` OR s.subject_name LIKE '%` + v + `%' `
  188. }
  189. var permissionId []string
  190. for _, v := range chartList {
  191. permissionId = append(permissionId, strconv.Itoa(v.ChartPermissionId))
  192. }
  193. list, err = cygx.GetRaiServeSearchTagRespListBycharId(keyWord, strings.Join(permissionId, ","), conditionindustrial, conditionsubject)
  194. if err != nil {
  195. br.Msg = "获取失败"
  196. br.ErrMsg = "获取数据失败,GetRaiServeSearchTagRespListBycharId Err:" + err.Error()
  197. return
  198. }
  199. }
  200. if len(list) == 0 {
  201. list = make([]*cygx.RaiServeTagResp, 0)
  202. } else {
  203. for _, v := range list {
  204. v.Md5Key = utils.MD5(fmt.Sprintf("K_", v.TagType, "V_", v.TagId))
  205. }
  206. }
  207. resp.List = list
  208. br.Ret = 200
  209. br.Success = true
  210. br.Msg = "获取成功"
  211. br.Data = resp
  212. }
  213. // @Title 校验是否属于策略固收
  214. // @Description 校验是否属于策略固收接口
  215. // @Param ResearcherId query int false "研究员ID"
  216. // @Success 200 {object} cygx.RaiServeTagListResp
  217. // @router /rai_serve/chcck_PermissionName [get]
  218. func (this *RaiServeCoAntroller) ChcckPermissionName() {
  219. br := new(models.BaseResponse).Init()
  220. defer func() {
  221. this.Data["json"] = br
  222. this.ServeJSON()
  223. }()
  224. sysUser := this.SysUser
  225. if sysUser == nil {
  226. br.Msg = "请登录"
  227. br.ErrMsg = "请登录,SysUser Is Empty"
  228. br.Ret = 408
  229. return
  230. }
  231. researcherId := this.GetString("ResearcherId")
  232. askEmailList, err := cygx.GetAskEmailListByAdminIds(researcherId)
  233. if err != nil {
  234. br.Msg = "获取失败"
  235. br.ErrMsg = "GetAskEmailCountByCelue,Err:" + err.Error()
  236. return
  237. }
  238. var belong bool
  239. var permissionNameResp []string
  240. var permissionNames []string
  241. for _, v := range askEmailList {
  242. permissionNames = append(permissionNames, v.ChartPermissionName)
  243. if v.ChartPermissionName == "策略" || v.ChartPermissionName == "固收" {
  244. belong = true
  245. permissionNameResp = append(permissionNameResp, v.ChartPermissionName)
  246. }
  247. }
  248. resp := new(cygx.ChekChartPermissionNameResp)
  249. resp.Belong = belong
  250. resp.ChartPermissionName = strings.Join(permissionNameResp, ",")
  251. br.Ret = 200
  252. br.Success = true
  253. br.Msg = "获取成功"
  254. br.Data = resp
  255. }
  256. // @Title 权益服务统计列表
  257. // @Description 权益服务统计列表接口
  258. // @Param PageSize query int true "每页数据条数"
  259. // @Param CurrentIndex query int true "当前页页码,从1开始"
  260. // @Param SellerId query string false "销售id"
  261. // @Param ShareSellerId query string false "共享销售ID"
  262. // @Param ServeTypeId int int false "服务类型ID"
  263. // @Param TagType int string false "标签类型"
  264. // @Param TagId int string false "标签ID"
  265. // @Param Status query string false "客户状态,正式、未续约(除了正式之外的所有)"
  266. // @Param SortType query string true "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
  267. // @Param IsExport query bool false "是否导出excel,默认是false"
  268. // @Success 200 {object} cygx.RaiServeTagListResp
  269. // @router /rai_serve/list [get]
  270. func (this *RaiServeCoAntroller) List() {
  271. br := new(models.BaseResponse).Init()
  272. defer func() {
  273. this.Data["json"] = br
  274. this.ServeJSON()
  275. }()
  276. sysUser := this.SysUser
  277. if sysUser == nil {
  278. br.Msg = "请登录"
  279. br.ErrMsg = "请登录,SysUser Is Empty"
  280. br.Ret = 408
  281. return
  282. }
  283. pageSize, _ := this.GetInt("PageSize")
  284. currentIndex, _ := this.GetInt("CurrentIndex")
  285. status := this.GetString("Status")
  286. sellerId := this.GetString("SellerId")
  287. shareSellerId := this.GetString("ShareSellerId")
  288. sortType := this.GetString("SortType")
  289. tagType, _ := this.GetInt("TagType")
  290. tagId, _ := this.GetInt("TagId")
  291. serveTypeId, _ := this.GetInt("ServeTypeId")
  292. isExport, _ := this.GetBool("IsExport")
  293. resp := new(cygx.CygxRaiServeCompanyListResp)
  294. var startSize int
  295. if pageSize <= 0 {
  296. pageSize = utils.PageSize20
  297. }
  298. if currentIndex <= 0 {
  299. currentIndex = 1
  300. }
  301. startSize = utils.StartIndex(currentIndex, pageSize)
  302. var condition string
  303. var sortStr string
  304. var pars []interface{}
  305. if status != "" {
  306. if status == "正式" {
  307. condition = " AND status = '正式' "
  308. } else {
  309. condition = " AND status != '正式' "
  310. }
  311. }
  312. if sellerId != "" {
  313. condition = " AND seller_id IN (?) "
  314. pars = append(pars, sellerId)
  315. }
  316. if shareSellerId != "" {
  317. condition = " AND share_seller_id IN (?) "
  318. pars = append(pars, shareSellerId)
  319. }
  320. if sortType != "" {
  321. if sortType == "asc" {
  322. sortStr = " ORDER BY money ASC "
  323. } else if sortType == "desc" {
  324. sortStr = " ORDER BY money DESC "
  325. }
  326. } else {
  327. sortStr = " ORDER BY end_date DESC "
  328. }
  329. //如果不是权益管理员和admin、财务,就做可见权限限制
  330. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_RESEARCHR {
  331. if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER {
  332. condition = " AND (seller_id = ? OR share_seller_id = ? ) "
  333. pars = append(pars, sysUser.AdminId, sysUser.AdminId)
  334. }
  335. if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
  336. condition = " AND ( seller_id = ? OR share_seller_id = ? OR group_id = ? OR share_group_id = ? ) "
  337. pars = append(pars, sysUser.AdminId, sysUser.AdminId, sysUser.GroupId, sysUser.GroupId)
  338. }
  339. }
  340. total, err := cygx.GetCygxRaiServeCompanyCount(condition, pars)
  341. if err != nil {
  342. br.Msg = "获取失败"
  343. br.ErrMsg = "获取失败,GetCygxRaiServeCompanyCountErr:" + err.Error()
  344. return
  345. }
  346. listRaiServeCompany, err := cygx.GetCygxRaiServeCompanyList(condition+sortStr, pars, startSize, pageSize)
  347. if err != nil {
  348. br.Msg = "获取失败"
  349. br.ErrMsg = "获取失败,Err:" + err.Error()
  350. return
  351. }
  352. var companyIds []int
  353. for _, v := range listRaiServeCompany {
  354. companyIds = append(companyIds, v.CompanyId)
  355. }
  356. mapWeekAmount := make(map[string]float64) //周度服务量
  357. lencompanyIds := len(companyIds)
  358. if lencompanyIds > 0 {
  359. var conditionBill string
  360. var parsBill []interface{}
  361. conditionBill, parsBill, err = getServeBillTag(tagType, tagId) // 标签ID搜索语句处理
  362. if err != nil {
  363. br.Msg = "获取信息失败!"
  364. br.ErrMsg = "获取用户信息失败-getServeBillTag!Err:" + err.Error()
  365. return
  366. }
  367. //服务类型筛选
  368. if serveTypeId > 0 {
  369. conditionBill += ` AND serve_type_id = ? `
  370. parsBill = append(parsBill, serveTypeId)
  371. }
  372. conditionBill += " AND company_id IN (" + utils.GetOrmInReplace(lencompanyIds) + ") "
  373. parsBill = append(parsBill, companyIds)
  374. listBill, err := cygx.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  375. if err != nil {
  376. br.Msg = "获取信息失败!"
  377. br.ErrMsg = "获取用户信息失败-GetCygxRaiServeBillListAll!Err:" + err.Error()
  378. return
  379. }
  380. now := time.Now()
  381. weeks := 4
  382. for _, v := range listBill {
  383. for i := 0; i < weeks; i++ {
  384. // 计算当前周的周一
  385. monday := now.AddDate(0, 0, -int(now.Weekday()-time.Monday)-i*7)
  386. weekmonday := monday.Format(utils.FormatDate)
  387. if v.WeekStartDate == weekmonday {
  388. mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", i)] += v.ServeCount
  389. }
  390. }
  391. }
  392. }
  393. if isExport {
  394. }
  395. for _, v := range listRaiServeCompany {
  396. item := new(cygx.CygxRaiServeCompanyResp)
  397. item.CompanyId = v.CompanyId
  398. item.CompanyName = v.CompanyName
  399. item.Money = v.Money
  400. item.ServeCoverageRate = v.ServeCoverageRate + "%"
  401. item.SellerId = v.SellerId
  402. item.SellerName = v.SellerName
  403. item.StartDate = v.StartDate
  404. item.StartDate = v.StartDate
  405. item.EndDate = v.EndDate
  406. item.ShareSeller = v.ShareSeller
  407. item.ShareSellerId = v.ShareSellerId
  408. item.Status = v.Status
  409. item.PermissionName = v.PermissionName
  410. item.ThisWeekAmount = mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", 0)]
  411. item.LastWeekAmount = mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", 1)]
  412. item.TwoWeekAmount = mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", 2)]
  413. item.ThreeWeekAmount = mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", 3)]
  414. resp.List = append(resp.List, item)
  415. }
  416. page := paging.GetPaging(currentIndex, pageSize, total)
  417. resp.Paging = page
  418. br.Ret = 200
  419. br.Success = true
  420. br.Msg = "获取成功"
  421. br.Data = resp
  422. }
  423. // 标签搜索语句筛选
  424. func getServeBillTag(tagType, tagId int) (conditionBill string, parsBill []interface{}, err error) {
  425. var activityIds []int
  426. var activitySpecialIds []int
  427. var articleIds []int
  428. var rsCalendarIds []int
  429. switch tagType {
  430. case 1:
  431. listGroupActivity, e := cygx.GetIndustrialActivityGroupManagementListByIndustriaId(tagId, 1) // 关联的活动
  432. if e != nil {
  433. err = errors.New("GetIndustrialActivityGroupManagementListByIndustriaId, Err: " + e.Error())
  434. return
  435. }
  436. for _, v := range listGroupActivity {
  437. activityIds = append(activityIds, v.ActivityId)
  438. }
  439. listGroupActivitySpecial, e := cygx.GetIndustrialActivityGroupManagementListByIndustriaId(tagId, 2) // 关联的产业
  440. if e != nil {
  441. err = errors.New("GetIndustrialActivityGroupManagementListByIndustriaId, Err: " + e.Error())
  442. return
  443. }
  444. for _, v := range listGroupActivitySpecial {
  445. activitySpecialIds = append(activitySpecialIds, v.ActivityId)
  446. }
  447. listGroupArticle, e := cygx.GetIndustrialArticleGroupManagementListByindustrialId(tagId) // 关联的产业
  448. if e != nil {
  449. err = errors.New("GetIndustrialArticleGroupManagementListByindustrialId, Err: " + e.Error())
  450. return
  451. }
  452. for _, v := range listGroupArticle {
  453. articleIds = append(articleIds, v.ArticleId)
  454. }
  455. listGroupRsCalendar, e := roadshow.GetRsCalendarMeetingLabelGroupDetailByTag(tagType, tagId)
  456. if e != nil {
  457. err = errors.New("GetRsCalendarMeetingLabelGroupDetailByTag, Err: " + e.Error())
  458. return
  459. }
  460. for _, v := range listGroupRsCalendar {
  461. rsCalendarIds = append(rsCalendarIds, v.RsCalendarId)
  462. }
  463. case 2:
  464. listGroupActivity, e := cygx.GetSubjectActivityGroupManagementListBySubjectId(tagId, 1) // 关联的活动
  465. if e != nil {
  466. err = errors.New("GetSubjectActivityGroupManagementListBySubjectId, Err: " + e.Error())
  467. return
  468. }
  469. for _, v := range listGroupActivity {
  470. activityIds = append(activityIds, v.ActivityId)
  471. }
  472. listGroupActivitySpecial, e := cygx.GetSubjectActivityGroupManagementListBySubjectId(tagId, 2) // 关联的产业
  473. if e != nil {
  474. err = errors.New("GetSubjectActivityGroupManagementListBySubjectId, Err: " + e.Error())
  475. return
  476. }
  477. for _, v := range listGroupActivitySpecial {
  478. activitySpecialIds = append(activitySpecialIds, v.ActivityId)
  479. }
  480. listGroupArticle, e := cygx.GetSubjectArticleGroupManagementListBysubjectId(tagId) // 关联的产业
  481. if e != nil {
  482. err = errors.New("GetSubjectArticleGroupManagementListBysubjectId, Err: " + e.Error())
  483. return
  484. }
  485. for _, v := range listGroupArticle {
  486. articleIds = append(articleIds, v.ArticleId)
  487. }
  488. listGroupRsCalendar, e := roadshow.GetRsCalendarMeetingLabelGroupDetailByTag(tagType, tagId)
  489. if e != nil {
  490. err = errors.New("GetRsCalendarMeetingLabelGroupDetailByTag, Err: " + e.Error())
  491. return
  492. }
  493. for _, v := range listGroupRsCalendar {
  494. rsCalendarIds = append(rsCalendarIds, v.RsCalendarId)
  495. }
  496. case 3:
  497. conditionBill += " AND chart_permission_id = ? "
  498. parsBill = append(parsBill, tagId)
  499. }
  500. lenactivityIds := len(activityIds)
  501. if lenactivityIds > 0 {
  502. conditionBill += ` AND IF ( source = 'activity', source_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `) , 1 = 1 ) `
  503. parsBill = append(parsBill, activityIds)
  504. }
  505. lenactivitySpecialIds := len(activitySpecialIds)
  506. if lenactivitySpecialIds > 0 {
  507. conditionBill += ` AND IF ( source = 'activityspecial', source_id IN (` + utils.GetOrmInReplace(lenactivitySpecialIds) + `) , 1 = 1 ) `
  508. parsBill = append(parsBill, activitySpecialIds)
  509. }
  510. lenarticleIds := len(articleIds)
  511. if lenarticleIds > 0 {
  512. conditionBill += ` AND IF ( source = 'article', source_id IN (` + utils.GetOrmInReplace(lenarticleIds) + `) , 1 = 1 ) `
  513. parsBill = append(parsBill, articleIds)
  514. }
  515. lenrsCalendarIds := len(rsCalendarIds)
  516. if lenrsCalendarIds > 0 {
  517. conditionBill += ` AND IF ( source = 'rscalendar', source_id IN (` + utils.GetOrmInReplace(lenrsCalendarIds) + `) , 1 = 1 ) `
  518. parsBill = append(parsBill, rsCalendarIds)
  519. }
  520. return
  521. }
  522. // @Title 近四周覆盖率
  523. // @Description 近四周覆盖率接口
  524. // @Param CompanyId query int false "公司ID"
  525. // @Success 200 {object} cygx.RaiServeTagListResp
  526. // @router /rai_serve/coverage_rate [get]
  527. func (this *RaiServeCoAntroller) CoverageRate() {
  528. br := new(models.BaseResponse).Init()
  529. defer func() {
  530. this.Data["json"] = br
  531. this.ServeJSON()
  532. }()
  533. sysUser := this.SysUser
  534. if sysUser == nil {
  535. br.Msg = "请登录"
  536. br.ErrMsg = "请登录,SysUser Is Empty"
  537. br.Ret = 408
  538. return
  539. }
  540. companyId, _ := this.GetInt("CompanyId")
  541. listWeekBill, err := cygx.GetCygxRaiServeBillListWeek4(companyId)
  542. if err != nil {
  543. br.Msg = "获取信息失败!"
  544. br.ErrMsg = "获取用户信息失败-GetCygxRaiServeBillListWeek4!Err:" + err.Error()
  545. return
  546. }
  547. mapWeek := make(map[int]string)
  548. for k, v := range listWeekBill {
  549. mapWeek[k] = v.CoverageRate
  550. }
  551. resp := new(cygx.RaiServeCoverageRateResp)
  552. resp.ThisWeekAmount = mapWeek[0] + "%"
  553. resp.LastWeekAmount = mapWeek[1] + "%"
  554. resp.TwoWeekAmount = mapWeek[2] + "%"
  555. resp.ThreeWeekAmount = mapWeek[3] + "%"
  556. br.Ret = 200
  557. br.Success = true
  558. br.Msg = "获取成功"
  559. br.Data = resp
  560. }
  561. // @Title 明细列表
  562. // @Description 明细列表接口
  563. // @Param PageSize query int true "每页数据条数"
  564. // @Param CurrentIndex query int true "当前页页码,从1开始"
  565. // @Param CompanyId query int false "公司ID"
  566. // @Param TagType query int false "标签类型"
  567. // @Param TagId query int false "标签ID"
  568. // @Param ServeTypeId int int false "服务类型ID"
  569. // @Param WhatWeek query int false "哪一周 ,1:本周、2:上周、3:上上周、4上三周"
  570. // @Success 200 {object} cygx.RaiServeTagListResp
  571. // @router /rai_serve/bill_list [get]
  572. func (this *RaiServeCoAntroller) BillList() {
  573. br := new(models.BaseResponse).Init()
  574. defer func() {
  575. this.Data["json"] = br
  576. this.ServeJSON()
  577. }()
  578. sysUser := this.SysUser
  579. if sysUser == nil {
  580. br.Msg = "请登录"
  581. br.ErrMsg = "请登录,SysUser Is Empty"
  582. br.Ret = 408
  583. return
  584. }
  585. pageSize, _ := this.GetInt("PageSize")
  586. currentIndex, _ := this.GetInt("CurrentIndex")
  587. companyId, _ := this.GetInt("CompanyId")
  588. tagType, _ := this.GetInt("TagType")
  589. tagId, _ := this.GetInt("TagId")
  590. serveTypeId, _ := this.GetInt("ServeTypeId")
  591. whatWeek, _ := this.GetInt("WhatWeek")
  592. var startSize int
  593. if pageSize <= 0 {
  594. pageSize = utils.PageSize20
  595. }
  596. if currentIndex <= 0 {
  597. currentIndex = 1
  598. }
  599. startSize = utils.StartIndex(currentIndex, pageSize)
  600. if companyId == 0 {
  601. br.Msg = "请选择对应公司ID"
  602. return
  603. }
  604. var condition string
  605. var pars []interface{}
  606. var err error
  607. condition, pars, err = getServeBillTag(tagType, tagId) // 标签ID搜索语句处理
  608. if err != nil {
  609. br.Msg = "获取信息失败!"
  610. br.ErrMsg = "获取用户信息失败-getServeBillTag!Err:" + err.Error()
  611. return
  612. }
  613. if whatWeek > 0 {
  614. now := time.Now()
  615. // 计算所选周的周一
  616. monday := now.AddDate(0, 0, -int(now.Weekday()-time.Monday)-(whatWeek-1)*7)
  617. condition += " AND week_start_date = ? "
  618. pars = append(pars, monday.Format(utils.FormatDate))
  619. }
  620. condition += " AND company_id = ? "
  621. pars = append(pars, companyId)
  622. if serveTypeId > 0 {
  623. condition += " AND serve_type_id = ? "
  624. pars = append(pars, serveTypeId)
  625. }
  626. total, err := cygx.GetCygxRaiServeBillCount(condition, pars)
  627. if err != nil {
  628. br.Msg = "获取失败"
  629. br.ErrMsg = "获取失败,GetCygxRaiServeBillCount:" + err.Error()
  630. return
  631. }
  632. list, err := cygx.GetCygxRaiServeBillRespList(condition, pars, startSize, pageSize)
  633. if err != nil {
  634. br.Msg = "获取失败"
  635. br.ErrMsg = "获取失败,GetCygxRaiServeBillRespList:" + err.Error()
  636. return
  637. }
  638. page := paging.GetPaging(currentIndex, pageSize, total)
  639. resp := new(cygx.CygxRaiServeBillListResp)
  640. resp.Paging = page
  641. if len(list) == 0 {
  642. resp.List = make([]*cygx.CygxRaiServeBillResp, 0)
  643. } else {
  644. var activityIds []int
  645. var activitySpecialIds []int
  646. var articleIds []int
  647. var rsCalendarIds []int
  648. for _, v := range list {
  649. switch v.Source {
  650. case utils.CYGX_OBJ_ARTICLE:
  651. articleIds = append(articleIds, v.SourceId)
  652. case utils.CYGX_OBJ_ACTIVITY:
  653. activityIds = append(activityIds, v.SourceId)
  654. case utils.CYGX_OBJ_ACTIVITYSPECIAL:
  655. activitySpecialIds = append(activitySpecialIds, v.SourceId)
  656. case utils.CYGX_OBJ_RS_CALENDAR:
  657. rsCalendarIds = append(rsCalendarIds, v.SourceId)
  658. }
  659. }
  660. maparticleIndustrialLabel := make(map[int][]string) //文章产业标签
  661. maparticleSubjectLabel := make(map[int][]string) // 文章行业标签
  662. if len(articleIds) > 0 {
  663. maparticleIndustrialLabel = cygxService.GetArticleIndustrialLabelByArticleId(articleIds) // 关联产业
  664. maparticleSubjectLabel = cygxService.GetArticleSubjectLabelByArticleId(articleIds) // 关联标的
  665. }
  666. mapActivityIndustrialLabel := make(map[int][]string) //活动产业标签
  667. mapActivitySubjectLabel := make(map[int][]string) //活动标的标签
  668. mapActivityIndustrialLabel = cygxService.GetActivityIndustrialLabelByActivityIds(activityIds, 1)
  669. mapActivitySubjectLabel = cygxService.GetActivitySubjectLabelByActivityIds(activityIds, 1)
  670. mapActivitySpeicalIndustrialLabel := make(map[int][]string) //活动产业标签
  671. mapActivitySpeicalSubjectLabel := make(map[int][]string) //活动标的标签
  672. mapActivitySpeicalIndustrialLabel = cygxService.GetActivityIndustrialLabelByActivityIds(activityIds, 2)
  673. mapActivitySpeicalSubjectLabel = cygxService.GetActivitySubjectLabelByActivityIds(activityIds, 2)
  674. mapRsCalendarLabel := make(map[int][]string) //1v1 路演标签
  675. mapRsCalendarLabel = cygxService.GetRsCalendarLabelByRsCalendarIds(rsCalendarIds)
  676. for _, v := range list {
  677. switch v.Source {
  678. case utils.CYGX_OBJ_ARTICLE:
  679. v.Tag = strings.Join(maparticleIndustrialLabel[v.SourceId], ",")
  680. if len(maparticleSubjectLabel[v.SourceId]) > 0 {
  681. v.Tag += "," + strings.Join(maparticleSubjectLabel[v.SourceId], ",")
  682. }
  683. case utils.CYGX_OBJ_ACTIVITY:
  684. v.Tag = strings.Join(mapActivityIndustrialLabel[v.SourceId], ",")
  685. if len(mapActivitySubjectLabel[v.SourceId]) > 0 {
  686. v.Tag += "," + strings.Join(mapActivitySubjectLabel[v.SourceId], ",")
  687. }
  688. case utils.CYGX_OBJ_ACTIVITYSPECIAL:
  689. v.Tag = strings.Join(mapActivitySpeicalIndustrialLabel[v.SourceId], ",")
  690. if len(mapActivitySpeicalSubjectLabel[v.SourceId]) > 0 {
  691. v.Tag += "," + strings.Join(mapActivitySpeicalSubjectLabel[v.SourceId], ",")
  692. }
  693. case utils.CYGX_OBJ_RS_CALENDAR:
  694. v.Tag = strings.Join(mapRsCalendarLabel[v.SourceId], ",")
  695. }
  696. }
  697. resp.List = list
  698. }
  699. br.Ret = 200
  700. br.Success = true
  701. br.Msg = "获取成功"
  702. br.Data = resp
  703. }