rai_serve_count.go 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323
  1. package services
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "hongze/hongze_cygx/models"
  8. "hongze/hongze_cygx/models/company"
  9. "hongze/hongze_cygx/models/rai_serve"
  10. "hongze/hongze_cygx/models/roadshow"
  11. "hongze/hongze_cygx/utils"
  12. "strings"
  13. "time"
  14. )
  15. //权益服务统计
  16. //上线跑的脚本
  17. //func initJob() {
  18. // UpdateRaiServeCompany() //1
  19. // UpdateCygxRaiServeBillByCompanyIds() //2
  20. // UpdateCygxRaiServeBillWeek() // 3
  21. // UpdateWeekAvg() // 4
  22. //}
  23. //func init() {
  24. // UpdateWeekAvg() //1
  25. //}
  26. //func init() {
  27. // //UpdateRaiServeCompany() //1
  28. // //UpdateCygxRaiServeBillByCompanyIds() //2
  29. // //UpdateCygxRaiServeBillWeekTask() // 3
  30. // //UpdateWeekAvg() // 4
  31. //}
  32. // 定时任务处理权益服务公司
  33. func UpdateRaiServeCompanyDate(cont context.Context) (err error) {
  34. defer func() {
  35. if err != nil {
  36. fmt.Println(err)
  37. go utils.SendAlarmMsg(fmt.Sprint("定时任务处理权益服务公司 失败 UpdateRaiServeCompanyDate ,err:", err.Error()), 2)
  38. }
  39. }()
  40. err = UpdateRaiServeCompany()
  41. return
  42. }
  43. // 定时任务处理权益服务记录明细
  44. func UpdateRaiServeBillDate(cont context.Context) (err error) {
  45. //func UpdateRaiServeBillDate() (err error) {
  46. defer func() {
  47. if err != nil {
  48. fmt.Println(err)
  49. go utils.SendAlarmMsg(fmt.Sprint("定时任务处理权益服务公司 失败 UpdateRaiServeBillDate ,err:", err.Error()), 2)
  50. }
  51. }()
  52. err = UpdateCygxRaiServeBillByCompanyIds() // 处理个人流水记录
  53. if err != nil {
  54. return
  55. }
  56. err = UpdateCygxRaiServeBillWeekTask() // 更新周度服务明细
  57. if err != nil {
  58. return
  59. }
  60. err = UpdateWeekAvg() //更新最近四周平均覆盖率,是否标红,权限,时间,金额
  61. if err != nil {
  62. return
  63. }
  64. return
  65. }
  66. // 更新现有的权益服务客户数据
  67. func UpdateRaiServeCompany() (err error) {
  68. defer func() {
  69. if err != nil {
  70. fmt.Println(err)
  71. go utils.SendAlarmMsg("更新现有的权益服务客户数据失败 UpdateRaiServeCompany:"+err.Error(), 2)
  72. }
  73. }()
  74. var condition string
  75. var pars []interface{}
  76. condition = ` AND p.product_id = 2 AND (p.group_id = ? OR p.share_group_id = ?) `
  77. pars = append(pars, utils.RAI_SERVE_GROUP_ID, utils.RAI_SERVE_GROUP_ID)
  78. listCompanyProduct, e := company.GetCompanyProductAndCompanyListByCondition(condition, pars)
  79. if e != nil {
  80. err = errors.New("GetCompanyProductListByCondition, Err: " + e.Error())
  81. return
  82. }
  83. var items []*rai_serve.CygxRaiServeCompany
  84. for _, v := range listCompanyProduct {
  85. //mapNewCompanyId[v.CompanyId] = true
  86. //if mapOldCompanyId[v.CompanyId] {
  87. // continue
  88. //}
  89. item := new(rai_serve.CygxRaiServeCompany)
  90. item.CompanyId = v.CompanyId
  91. item.CompanyName = v.CompanyName
  92. item.CreateTime = time.Now()
  93. item.SellerId = v.SellerId
  94. item.SellerName = v.SellerName
  95. item.StartDate = v.StartDate
  96. item.EndDate = v.EndDate
  97. item.ShareSeller = v.ShareSeller
  98. item.ShareSellerId = v.ShareSellerId
  99. item.Status = v.Status
  100. item.GroupId = v.GroupId
  101. item.ShareGroupId = v.ShareGroupId
  102. items = append(items, item)
  103. }
  104. //先删除老的再添加新的
  105. e = rai_serve.AddCygxRaiServeCompanyMulti(items)
  106. if e != nil {
  107. err = errors.New("AddCygxRaiServeCompanyMulti, Err: " + e.Error())
  108. return
  109. }
  110. return
  111. }
  112. // GetCompanyContractPermissionNameMapById 获取合并之后的合同所对应的权限种类名称
  113. func GetCompanyContractPermissionNameMapById(companyContractIds []int) (mapContractResp map[int]string, err error) {
  114. //return
  115. lenArr := len(companyContractIds)
  116. if lenArr == 0 {
  117. return
  118. }
  119. var condition string
  120. var pars []interface{}
  121. condition += " AND company_contract_id IN (" + utils.GetOrmInReplace(lenArr) + ")"
  122. pars = append(pars, companyContractIds)
  123. //companyContractList, e := company.GetCompanyContractList(condition, pars)
  124. //if e != nil && e.Error() != utils.ErrNoRow() {
  125. // err = errors.New("GetCompanyContractList, Err: " + e.Error())
  126. // return
  127. //}
  128. permissionList, e := models.GetChartPermissionList()
  129. if e != nil && e.Error() != utils.ErrNoRow() {
  130. err = errors.New("GetChartPermissionList, Err: " + e.Error())
  131. return
  132. }
  133. mappermissionName := make(map[int]string)
  134. for _, v := range permissionList {
  135. if v.ProductId == 2 {
  136. mappermissionName[v.ChartPermissionId] = v.Remark
  137. }
  138. }
  139. mapContractIdPerssion := make(map[int]string) //单个合同ID所对应的套餐或者权限名称
  140. //for _, v := range companyContractList {
  141. // if v.RaiPackageType == 1 {
  142. // mapContractIdPerssion[v.CompanyContractId] = "70w套餐,"
  143. // }
  144. // if v.RaiPackageType == 2 {
  145. // mapContractIdPerssion[v.CompanyContractId] = "45w套餐,"
  146. // }
  147. //}
  148. companyContractPermissionList, e := company.GetCompanyContractPermissionList(condition, pars)
  149. if e != nil && e.Error() != utils.ErrNoRow() {
  150. err = errors.New("GetCompanyContractPermissionList, Err: " + e.Error())
  151. return
  152. }
  153. mapIsUpgrade := make(map[string]bool) //合同ID对应的行业是否有升级
  154. for _, v := range companyContractPermissionList {
  155. //如果开通的不是整个套餐,那么就做单独的子权限处理
  156. if strings.Count(mapContractIdPerssion[(v.CompanyContractId)], "w套餐") == 0 {
  157. if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  158. if v.ExpensiveYx == 1 {
  159. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
  160. } else if v.ExpensiveYx == 2 {
  161. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
  162. } else {
  163. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
  164. }
  165. } else {
  166. mapContractIdPerssion[(v.CompanyContractId)] += mappermissionName[v.ChartPermissionId] + ","
  167. if v.IsUpgrade == 1 {
  168. //合同ID,权限名称形成唯一的主键索引
  169. perssionName := mappermissionName[v.ChartPermissionId]
  170. perssionName = strings.Replace(perssionName, "(客观)", "", -1)
  171. perssionName = strings.Replace(perssionName, "(主观)", "", -1)
  172. mapIsUpgrade[fmt.Sprint(v.CompanyContractId, "perssionName", perssionName)] = true
  173. }
  174. }
  175. } else {
  176. if v.ChartPermissionId == utils.ZHUAN_JIA_ID {
  177. mapContractIdPerssion[(v.CompanyContractId)] += utils.ZHUAN_JIA_NAME + ","
  178. }
  179. if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  180. if v.ExpensiveYx == 1 {
  181. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
  182. } else if v.ExpensiveYx == 2 {
  183. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
  184. } else {
  185. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
  186. }
  187. }
  188. if v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
  189. mapContractIdPerssion[(v.CompanyContractId)] += utils.YAN_XUAN_KOU_DIAN_BAO_NAME + ","
  190. }
  191. }
  192. }
  193. //合并客观权限
  194. for k, v := range mapContractIdPerssion {
  195. perssionName := v
  196. if strings.Count(v, utils.YI_YAO_NAME) == 2 {
  197. perssionName = strings.Replace(perssionName, "医药(主观)", "医药", -1)
  198. perssionName = strings.Replace(perssionName, "医药(客观)", "", -1)
  199. }
  200. if strings.Count(v, utils.XIAO_FEI_NAME) == 2 {
  201. perssionName = strings.Replace(perssionName, "消费(主观)", "消费", -1)
  202. perssionName = strings.Replace(perssionName, "消费(客观)", "", -1)
  203. }
  204. if strings.Count(v, utils.KE_JI_NAME) == 2 {
  205. perssionName = strings.Replace(perssionName, "科技(主观)", "科技", -1)
  206. perssionName = strings.Replace(perssionName, "科技(客观)", "", -1)
  207. }
  208. if strings.Count(v, utils.ZHI_ZAO_NAME) == 2 {
  209. perssionName = strings.Replace(perssionName, "智造(主观)", "智造", -1)
  210. perssionName = strings.Replace(perssionName, "智造(客观)", "", -1)
  211. }
  212. perssionName = strings.TrimRight(perssionName, ",")
  213. mapContractIdPerssion[k] = perssionName
  214. }
  215. mapContractResp = make(map[int]string, 0)
  216. //过滤多余的","
  217. for k, v := range mapContractIdPerssion {
  218. sliceName := strings.Split(v, ",")
  219. var nameArr []string
  220. for _, vName := range sliceName {
  221. if vName == "" {
  222. continue
  223. }
  224. if mapIsUpgrade[fmt.Sprint(k, "perssionName", vName)] {
  225. vName += "(升级)"
  226. }
  227. nameArr = append(nameArr, vName)
  228. }
  229. mapContractResp[k] = strings.Join(nameArr, ",")
  230. }
  231. return
  232. }
  233. // 根据公司ID获取目前行业所对应的正式权限
  234. func GetCompanyReportPermissionNameMapByCompanyId(companyIds []int) (mapContractResp map[int]string, err error) {
  235. lenArr := len(companyIds)
  236. if lenArr == 0 {
  237. return
  238. }
  239. var condition string
  240. var pars []interface{}
  241. condition += " AND company_id IN (" + utils.GetOrmInReplace(lenArr) + ") AND product_id = 2 AND status = '正式' "
  242. pars = append(pars, companyIds)
  243. permissionList, e := models.GetChartPermissionList()
  244. if e != nil && e.Error() != utils.ErrNoRow() {
  245. err = errors.New("GetChartPermissionList, Err: " + e.Error())
  246. return
  247. }
  248. mappermissionName := make(map[int]string)
  249. for _, v := range permissionList {
  250. if v.ProductId == 2 {
  251. mappermissionName[v.ChartPermissionId] = v.Remark
  252. }
  253. }
  254. mapContractIdPerssion := make(map[int]string) //单个合同ID所对应的套餐或者权限名称
  255. companyReportPermissionList, e := models.GetCompanyReportPermissionList(condition, pars)
  256. if e != nil && e.Error() != utils.ErrNoRow() {
  257. err = errors.New("GetCompanyReportPermissionList, Err: " + e.Error())
  258. return
  259. }
  260. mapIsUpgrade := make(map[string]bool) //合同ID对应的行业是否有升级
  261. for _, v := range companyReportPermissionList {
  262. //如果开通的不是整个套餐,那么就做单独的子权限处理
  263. if strings.Count(mapContractIdPerssion[(v.CompanyId)], "w套餐") == 0 {
  264. if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  265. if v.ExpensiveYx == 1 {
  266. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
  267. } else if v.ExpensiveYx == 2 {
  268. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
  269. } else {
  270. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
  271. }
  272. } else {
  273. mapContractIdPerssion[(v.CompanyId)] += mappermissionName[v.ChartPermissionId] + ","
  274. if v.IsUpgrade == 1 {
  275. //合同ID,权限名称形成唯一的主键索引
  276. perssionName := mappermissionName[v.ChartPermissionId]
  277. perssionName = strings.Replace(perssionName, "(客观)", "", -1)
  278. perssionName = strings.Replace(perssionName, "(主观)", "", -1)
  279. mapIsUpgrade[fmt.Sprint(v.CompanyId, "perssionName", perssionName)] = true
  280. }
  281. }
  282. } else {
  283. if v.ChartPermissionId == utils.ZHUAN_JIA_ID {
  284. mapContractIdPerssion[(v.CompanyId)] += utils.ZHUAN_JIA_NAME + ","
  285. }
  286. if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  287. if v.ExpensiveYx == 1 {
  288. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
  289. } else if v.ExpensiveYx == 2 {
  290. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
  291. } else {
  292. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
  293. }
  294. }
  295. if v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
  296. mapContractIdPerssion[(v.CompanyId)] += utils.YAN_XUAN_KOU_DIAN_BAO_NAME + ","
  297. }
  298. }
  299. }
  300. //合并客观权限
  301. for k, v := range mapContractIdPerssion {
  302. perssionName := v
  303. if strings.Count(v, utils.YI_YAO_NAME) == 2 {
  304. perssionName = strings.Replace(perssionName, "医药(主观)", "医药", -1)
  305. perssionName = strings.Replace(perssionName, "医药(客观)", "", -1)
  306. }
  307. if strings.Count(v, utils.XIAO_FEI_NAME) == 2 {
  308. perssionName = strings.Replace(perssionName, "消费(主观)", "消费", -1)
  309. perssionName = strings.Replace(perssionName, "消费(客观)", "", -1)
  310. }
  311. if strings.Count(v, utils.KE_JI_NAME) == 2 {
  312. perssionName = strings.Replace(perssionName, "科技(主观)", "科技", -1)
  313. perssionName = strings.Replace(perssionName, "科技(客观)", "", -1)
  314. }
  315. if strings.Count(v, utils.ZHI_ZAO_NAME) == 2 {
  316. perssionName = strings.Replace(perssionName, "智造(主观)", "智造", -1)
  317. perssionName = strings.Replace(perssionName, "智造(客观)", "", -1)
  318. }
  319. perssionName = strings.TrimRight(perssionName, ",")
  320. mapContractIdPerssion[k] = perssionName
  321. }
  322. mapContractResp = make(map[int]string, 0)
  323. //过滤多余的","
  324. for k, v := range mapContractIdPerssion {
  325. sliceName := strings.Split(v, ",")
  326. var nameArr []string
  327. for _, vName := range sliceName {
  328. if vName == "" {
  329. continue
  330. }
  331. if mapIsUpgrade[fmt.Sprint(k, "perssionName", vName)] {
  332. vName += "(升级)"
  333. }
  334. nameArr = append(nameArr, vName)
  335. }
  336. mapContractResp[k] = strings.Join(nameArr, ",")
  337. }
  338. return
  339. }
  340. // Redis对列消息中的结构体
  341. type RaiServeBillRedis struct {
  342. Content string `comment:"服务内容说明"`
  343. UserId int `comment:"用户ID"`
  344. ComapnyId int `comment:"公司ID"`
  345. SourceId int `comment:"来源ID"`
  346. Source string `comment:"来源"`
  347. RegisterPlatform int `comment:"来源 1小程序,2:网页"`
  348. ViewTime time.Time `comment:"浏览时间"`
  349. }
  350. // 批量更新企业服务明细记录
  351. func UpdateCygxRaiServeBillByCompanyIds() (err error) {
  352. defer func() {
  353. if err != nil {
  354. fmt.Println(err)
  355. go utils.SendAlarmMsg("批量更新企业服务明细记录失败: UpdateCygxRaiServeBillByCompanyIds Err"+err.Error(), 2)
  356. }
  357. }()
  358. fmt.Println("UpdateCygxRaiServeBillByCompanyIds start")
  359. companyList, e := rai_serve.GetCygxRaiServeCompanyAllList()
  360. if e != nil {
  361. err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
  362. return
  363. }
  364. var companyIds []int
  365. var items []*rai_serve.CygxRaiServeBill
  366. for _, v := range companyList {
  367. companyIds = append(companyIds, v.CompanyId)
  368. }
  369. lencompanyId := len(companyIds)
  370. listisMakeruser, e := models.GetWxUserisMakerByCompanyIds(companyIds)
  371. if e != nil {
  372. err = errors.New("GetWxUserisMakerByCompanyIds, Err: " + e.Error())
  373. return
  374. }
  375. mapUserMaker := make(map[int]bool)
  376. for _, v := range listisMakeruser {
  377. mapUserMaker[v.UserId] = true
  378. }
  379. var condition string
  380. var pars []interface{}
  381. createTime := time.Now().AddDate(0, 0, -80) // 查询12周以内的数据
  382. condition = " AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND create_time > ? "
  383. pars = append(pars, companyIds, createTime)
  384. //研选专栏阅读记录内容
  385. {
  386. listYanxuanSpecialRecord, e := models.GetCygxYanxuanSpecialRecordRespListAll(condition+" GROUP BY user_id, yanxuan_special_id ORDER BY create_time ASC ", pars)
  387. if e != nil {
  388. err = errors.New("GetCygxYanxuanSpecialRecordRespListAll, Err: " + e.Error())
  389. return
  390. }
  391. var yanxuanspecialIds []int
  392. for _, v := range listYanxuanSpecialRecord {
  393. yanxuanspecialIds = append(yanxuanspecialIds, v.YanxuanSpecialId)
  394. }
  395. var conditionYanxuanSpecial string
  396. var parsYanxuanSpecial []interface{}
  397. conditionYanxuanSpecial += ` AND id IN (` + utils.GetOrmInReplace(len(yanxuanspecialIds)) + `) `
  398. parsYanxuanSpecial = append(parsYanxuanSpecial, yanxuanspecialIds)
  399. listYanxuanSpecial, e := models.GetYanxuanSpecialListBycondition(conditionYanxuanSpecial, parsYanxuanSpecial, 0, len(yanxuanspecialIds))
  400. if e != nil && e.Error() != utils.ErrNoRow() {
  401. err = errors.New("GetYanxuanSpecialListBycondition, Err: " + e.Error())
  402. return
  403. }
  404. mapYanxuanSpecialTitle := make(map[int]string)
  405. for _, v := range listYanxuanSpecial {
  406. mapYanxuanSpecialTitle[v.Id] = v.Title
  407. }
  408. //研选阅读明细
  409. var conditionBill string
  410. var parsBill []interface{}
  411. conditionBill = " AND source = 'yanxuanspecial' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  412. parsBill = append(parsBill, companyIds, createTime)
  413. listBillByYanxuanspecial, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  414. if e != nil {
  415. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  416. return
  417. }
  418. mapYanxuanspecialBill := make(map[string]bool)
  419. for _, v := range listBillByYanxuanspecial {
  420. mapYanxuanspecialBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  421. }
  422. for _, v := range listYanxuanSpecialRecord {
  423. if mapYanxuanspecialBill[fmt.Sprint("UID_", v.UserId, "SID_", v.YanxuanSpecialId)] { // 如果内容存在就不插入
  424. continue
  425. }
  426. item := new(rai_serve.CygxRaiServeBill)
  427. item.Content = mapYanxuanSpecialTitle[v.YanxuanSpecialId]
  428. item.ServeTypeId = 5
  429. item.ServeTypeName = "阅读uv"
  430. item.UserId = v.UserId
  431. item.Mobile = v.Mobile
  432. item.Email = v.Email
  433. item.CompanyId = v.CompanyId
  434. item.CompanyName = v.CompanyName
  435. item.RealName = v.RealName
  436. item.RegisterPlatform = v.RegisterPlatform
  437. item.ServeCount = 0.5
  438. if mapUserMaker[v.UserId] {
  439. item.IsKp = 1
  440. item.ServeCount = item.ServeCount * 3
  441. }
  442. item.SourceId = v.YanxuanSpecialId
  443. item.Source = utils.CYGX_OBJ_YANXUANSPECIAL
  444. item.CreateTime = time.Now()
  445. item.ViewTime = v.CreateTime
  446. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  447. items = append(items, item)
  448. }
  449. }
  450. //研选专栏阅读记录内容end
  451. //文章阅读记录内容
  452. {
  453. listArticleRecord, e := models.GetCygxArticleHistoryRecordAllListNoLimit(condition+" GROUP BY user_id, article_id ORDER BY create_time ASC ", pars)
  454. if e != nil {
  455. err = errors.New("GetCygxArticleHistoryRecordAllListNoLimit, Err: " + e.Error())
  456. return
  457. }
  458. //文章阅读明细
  459. var conditionBill string
  460. var parsBill []interface{}
  461. conditionBill = " AND source = 'article' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  462. parsBill = append(parsBill, companyIds, createTime)
  463. listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  464. if e != nil {
  465. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  466. return
  467. }
  468. mapArticleBill := make(map[string]bool)
  469. for _, v := range listBillByArticle {
  470. mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  471. }
  472. //部分数据来源没有存用户姓名,重新查一下
  473. var userIds []int
  474. for _, v := range listArticleRecord {
  475. userIds = append(userIds, v.UserId)
  476. }
  477. ListUser, e := models.GetWxUserListByUserIdsArr(userIds)
  478. if e != nil {
  479. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  480. return
  481. }
  482. mapUserName := make(map[int]string)
  483. for _, v := range ListUser {
  484. mapUserName[v.UserId] = v.RealName
  485. }
  486. for _, v := range listArticleRecord {
  487. if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ArticleId)] { // 如果内容存在就不插入
  488. continue
  489. }
  490. item := new(rai_serve.CygxRaiServeBill)
  491. item.Content = v.Title
  492. item.ServeTypeId = 5
  493. item.ServeTypeName = "阅读uv"
  494. item.UserId = v.UserId
  495. item.Mobile = v.Mobile
  496. item.Email = v.Email
  497. item.CompanyId = v.CompanyId
  498. item.CompanyName = v.CompanyName
  499. item.RealName = mapUserName[v.UserId]
  500. item.RegisterPlatform = v.RegisterPlatform
  501. item.ServeCount = 0.5
  502. if mapUserMaker[v.UserId] {
  503. item.IsKp = 1
  504. item.ServeCount = item.ServeCount * 3
  505. }
  506. item.SourceId = v.ArticleId
  507. item.Source = utils.CYGX_OBJ_ARTICLE
  508. item.CreateTime = time.Now()
  509. item.ViewTime = v.CreateTime
  510. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  511. if strings.Contains(v.CategoryName, "固收") {
  512. item.ChartPermissionName = utils.GU_SHOU_NAME
  513. item.ChartPermissionId = utils.GU_SHOU_ID_CHART
  514. }
  515. if strings.Contains(v.CategoryName, "策略") {
  516. item.ChartPermissionName = utils.CE_LUE_NAME
  517. item.ChartPermissionId = utils.CE_LUE_ID
  518. }
  519. items = append(items, item)
  520. }
  521. }
  522. //文章阅读记录内容 end
  523. //活动记录内容
  524. {
  525. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND a.activity_time > ? "
  526. signUpDetailList, e := models.GetSignupDetailBySignupjoinactivity(condition+" ORDER BY a.activity_time ASC ", pars)
  527. if e != nil {
  528. err = errors.New("GetSignupDetailBySignupjoinactivity, Err: " + e.Error())
  529. return
  530. }
  531. //文章阅读明细
  532. var conditionBill string
  533. var parsBill []interface{}
  534. conditionBill = " AND source = 'activity' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  535. parsBill = append(parsBill, companyIds, createTime)
  536. listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  537. if e != nil {
  538. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  539. return
  540. }
  541. mapArticleBill := make(map[string]bool)
  542. for _, v := range listBillByArticle {
  543. mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  544. }
  545. for _, v := range signUpDetailList {
  546. if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
  547. continue
  548. }
  549. item := new(rai_serve.CygxRaiServeBill)
  550. item.Content = v.ActivityName
  551. if v.ActivityType == 1 {
  552. item.ServeTypeId = 1
  553. item.ServeTypeName = "线上活动"
  554. } else {
  555. item.ServeTypeId = 2
  556. item.ServeTypeName = "线下活动"
  557. }
  558. item.UserId = v.UserId
  559. item.Mobile = v.Mobile
  560. item.Email = v.Email
  561. item.CompanyId = v.CompanyId
  562. item.CompanyName = v.CompanyName
  563. item.RealName = v.RealName
  564. //item.RegisterPlatform = v.RegisterPlatform
  565. item.ServeCount = 1
  566. if mapUserMaker[v.UserId] {
  567. item.IsKp = 1
  568. item.ServeCount = item.ServeCount * 3
  569. }
  570. item.SourceId = v.ActivityId
  571. item.Source = utils.CYGX_OBJ_ACTIVITY
  572. item.CreateTime = time.Now()
  573. item.ViewTime = v.ActivityTime
  574. item.ChartPermissionName = v.ChartPermissionName
  575. item.ChartPermissionId = v.ChartPermissionId
  576. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  577. items = append(items, item)
  578. }
  579. }
  580. //活动记录内容 end
  581. //专项调研活动记录内容
  582. {
  583. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND a.activity_time > ? "
  584. activitySpecialList, e := models.GetCygxActivitySpecialMeetingDetailList(condition+" ORDER BY a.activity_time ASC ", pars)
  585. if e != nil {
  586. err = errors.New("GetCygxActivitySpecialMeetingDetailList, Err: " + e.Error())
  587. return
  588. }
  589. //专项调研活动明细
  590. var conditionBill string
  591. var parsBill []interface{}
  592. conditionBill = " AND source = 'activityspecial' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  593. parsBill = append(parsBill, companyIds, createTime)
  594. listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  595. if e != nil {
  596. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  597. return
  598. }
  599. mapArticleBill := make(map[string]bool)
  600. for _, v := range listBillByArticle {
  601. mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  602. }
  603. for _, v := range activitySpecialList {
  604. if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
  605. continue
  606. }
  607. item := new(rai_serve.CygxRaiServeBill)
  608. item.Content = v.ResearchTheme
  609. item.ServeTypeId = 3
  610. item.ServeTypeName = "专项调研"
  611. item.UserId = v.UserId
  612. item.Mobile = v.Mobile
  613. item.Email = v.Email
  614. item.CompanyId = v.CompanyId
  615. item.CompanyName = v.CompanyName
  616. item.RealName = v.RealName
  617. //item.RegisterPlatform = v.RegisterPlatform
  618. item.ServeCount = 1
  619. if mapUserMaker[v.UserId] {
  620. item.IsKp = 1
  621. item.ServeCount = item.ServeCount * 3
  622. }
  623. item.SourceId = v.ActivityId
  624. item.Source = utils.CYGX_OBJ_ACTIVITYSPECIAL
  625. item.CreateTime = time.Now()
  626. item.ViewTime = v.ActivityTime
  627. item.ChartPermissionName = v.ChartPermissionName
  628. item.ChartPermissionId = v.ChartPermissionId
  629. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  630. items = append(items, item)
  631. }
  632. }
  633. //专项调研活动记录内容 end
  634. //1v1路演
  635. {
  636. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND rs.start_date > ? "
  637. calendarMeetingUserList, e := roadshow.GetRsCalendarMeetingUserList(condition+" ORDER BY rs.start_date ASC ", pars)
  638. if e != nil {
  639. err = errors.New("GetRsCalendarMeetingUserList, Err: " + e.Error())
  640. return
  641. }
  642. var rsCalendarIds []int
  643. for _, v := range calendarMeetingUserList {
  644. rsCalendarIds = append(rsCalendarIds, v.RsCalendarId)
  645. }
  646. //获取研究员信息
  647. researchers, e := roadshow.GetRsCalendarResearcherListByIds(rsCalendarIds)
  648. if e != nil {
  649. err = errors.New("GetRsCalendarResearcherListByIds, Err: " + e.Error())
  650. return
  651. }
  652. mapResearcherName := make(map[int][]string)
  653. for _, v := range researchers {
  654. mapResearcherName[v.RsCalendarId] = append(mapResearcherName[v.RsCalendarId], v.ResearcherName)
  655. }
  656. listEmail, e := models.GetAskEmail()
  657. if e != nil {
  658. err = errors.New("GetAskEmail, Err: " + e.Error())
  659. return
  660. }
  661. var ceLueResearcherName []string
  662. var guShouResearcherName []string
  663. for _, v := range listEmail {
  664. if v.ChartPermissionName == utils.CE_LUE_NAME {
  665. ceLueResearcherName = append(ceLueResearcherName, v.Name)
  666. }
  667. if v.ChartPermissionName == utils.GU_SHOU_NAME {
  668. guShouResearcherName = append(guShouResearcherName, v.Name)
  669. }
  670. }
  671. //专项调研活动明细
  672. var conditionBill string
  673. var parsBill []interface{}
  674. conditionBill = " AND source = 'rscalendar' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  675. parsBill = append(parsBill, companyIds, createTime)
  676. listBillByRscalendar, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  677. if e != nil {
  678. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  679. return
  680. }
  681. mapRscalendarBill := make(map[string]bool)
  682. for _, v := range listBillByRscalendar {
  683. mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  684. }
  685. for _, v := range calendarMeetingUserList {
  686. if mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RsCalendarId)] { // 如果内容存在就不插入
  687. continue
  688. }
  689. item := new(rai_serve.CygxRaiServeBill)
  690. item.Content = strings.Join(mapResearcherName[v.RsCalendarId], ",")
  691. item.ServeTypeId = 4
  692. item.ServeTypeName = "一对一路演"
  693. item.UserId = v.UserId
  694. item.Mobile = v.Mobile
  695. item.Email = v.Email
  696. item.CompanyId = v.CompanyId
  697. item.CompanyName = v.CompanyName
  698. item.RealName = v.RealName
  699. //item.RegisterPlatform = v.RegisterPlatform
  700. item.ServeCount = 1.5
  701. if mapUserMaker[v.UserId] {
  702. item.IsKp = 1
  703. item.ServeCount = item.ServeCount * 3
  704. }
  705. item.SourceId = v.RsCalendarId
  706. item.Source = utils.CYGX_OBJ_RS_CALENDAR
  707. item.CreateTime = time.Now()
  708. item.ViewTime = v.StartDate + " " + v.StartTime
  709. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  710. if utils.InArrayByStr(guShouResearcherName, item.Content) {
  711. item.ChartPermissionName = utils.GU_SHOU_NAME
  712. item.ChartPermissionId = utils.GU_SHOU_ID_CHART
  713. }
  714. if utils.InArrayByStr(ceLueResearcherName, item.Content) {
  715. item.ChartPermissionName = utils.CE_LUE_NAME
  716. item.ChartPermissionId = utils.CE_LUE_ID
  717. }
  718. items = append(items, item)
  719. }
  720. }
  721. //1v1路演 end
  722. //交流反馈
  723. {
  724. condition = " AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND create_time > ? "
  725. userFeedbackList, e := rai_serve.GetCygxUserFeedbackList(condition+" ORDER BY user_feedback_id ASC ", pars)
  726. if e != nil {
  727. err = errors.New("GetCygxUserFeedbackList, Err: " + e.Error())
  728. return
  729. }
  730. //交流反馈明细
  731. var conditionBill string
  732. var parsBill []interface{}
  733. conditionBill = " AND source = 'userfeedback' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  734. parsBill = append(parsBill, companyIds, createTime)
  735. listBillByuserFeedback, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  736. if e != nil {
  737. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  738. return
  739. }
  740. mapRscalendarBill := make(map[string]bool)
  741. for _, v := range listBillByuserFeedback {
  742. mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  743. }
  744. for _, v := range userFeedbackList {
  745. if mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.UserFeedbackId)] { // 如果内容存在就不插入
  746. continue
  747. }
  748. item := new(rai_serve.CygxRaiServeBill)
  749. item.Content = v.Content
  750. item.ServeTypeId = 6
  751. item.ServeTypeName = "交流反馈"
  752. item.UserId = v.UserId
  753. item.Mobile = v.Mobile
  754. item.Email = v.Email
  755. item.CompanyId = v.CompanyId
  756. item.CompanyName = v.CompanyName
  757. item.RealName = v.RealName
  758. item.ServeCount = 1
  759. if mapUserMaker[v.UserId] {
  760. item.IsKp = 1
  761. item.ServeCount = item.ServeCount * 3
  762. }
  763. item.SourceId = v.UserFeedbackId
  764. item.Source = utils.CYGX_OBJ_USER_FEEDBACK
  765. item.CreateTime = time.Now()
  766. item.ViewTime = v.CreateTime
  767. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  768. items = append(items, item)
  769. }
  770. }
  771. //交流反馈 end
  772. e = rai_serve.AddCygxRaiServeBillMulti(items)
  773. if e != nil {
  774. err = errors.New("AddCygxRaiServeBillMulti, Err: " + e.Error())
  775. return
  776. }
  777. fmt.Println("UpdateCygxRaiServeBillByCompanyIds end")
  778. return
  779. }
  780. // 更新周度服务明细
  781. func UpdateCygxRaiServeBillWeek() (err error) {
  782. defer func() {
  783. if err != nil {
  784. fmt.Println(err)
  785. go utils.SendAlarmMsg("批量更新企业服务明细记录失败: UpdateCygxRaiServeBillByCompanyIds Err"+err.Error(), 2)
  786. }
  787. }()
  788. now := time.Now()
  789. weeks := 12
  790. companyList, e := rai_serve.GetCygxRaiServeCompanyAllList()
  791. if e != nil {
  792. err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
  793. return
  794. }
  795. var companyIds []int
  796. for _, v := range companyList {
  797. companyIds = append(companyIds, v.CompanyId)
  798. }
  799. listCompanyUserNum, e := models.GetWxUserNumByCompanyIds(companyIds)
  800. if e != nil {
  801. err = errors.New("GetWxUserisMakerByCompanyIds, Err: " + e.Error())
  802. return
  803. }
  804. mapCompanyUserNum := make(map[int]int) //企业对应的用户数量
  805. for _, v := range listCompanyUserNum {
  806. mapCompanyUserNum[v.CompanyId] = v.UserNum
  807. }
  808. lencompanyId := len(companyIds)
  809. //研选阅读明细
  810. var conditionBill string
  811. var parsBill []interface{}
  812. conditionBill = " AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  813. parsBill = append(parsBill, companyIds, time.Now().AddDate(0, 0, -80))
  814. listBillByYanxuanspecial, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  815. if e != nil {
  816. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  817. return
  818. }
  819. mapWeekServeCount := make(map[string]float64)
  820. for _, v := range listBillByYanxuanspecial {
  821. mapWeekServeCount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", v.WeekStartDate)] += v.ServeCount
  822. }
  823. fmt.Println(companyIds)
  824. var items []*rai_serve.CygxRaiServeWeekBill
  825. for _, v := range companyList {
  826. for i := 0; i < weeks; i++ {
  827. item := new(rai_serve.CygxRaiServeWeekBill)
  828. // 计算当前周的周一
  829. monday := now.AddDate(0, 0, -int(now.Weekday()-time.Monday)-i*7)
  830. // 计算当前周的周日
  831. sunday := monday.AddDate(0, 0, 6)
  832. item.WeekStartDate = monday.Format(utils.FormatDate)
  833. item.WeekEndDate = sunday.Format(utils.FormatDate)
  834. item.CompanyId = v.CompanyId
  835. item.CompanyName = v.CompanyName
  836. item.UserTotal = mapCompanyUserNum[v.CompanyId]
  837. item.WeekServeCount = mapWeekServeCount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", item.WeekStartDate)]
  838. if mapCompanyUserNum[v.CompanyId] > 0 {
  839. item.CoverageRate = item.WeekServeCount / float64(mapCompanyUserNum[v.CompanyId]) * 100
  840. }
  841. item.CreateTime = time.Now()
  842. item.ModifyTime = time.Now()
  843. items = append(items, item)
  844. }
  845. }
  846. e = rai_serve.AddCygxRaiServeWeekBillMulti(items)
  847. if e != nil {
  848. err = errors.New("AddCygxRaiServeWeekBillMulti, Err: " + e.Error())
  849. return
  850. }
  851. return
  852. }
  853. func UpdateCygxRaiServeBillWeekTask() (err error) {
  854. defer func() {
  855. if err != nil {
  856. fmt.Println(err)
  857. go utils.SendAlarmMsg("批量更新企业服务明细记录失败: UpdateCygxRaiServeBillByCompanyIds Err"+err.Error(), 2)
  858. }
  859. }()
  860. fmt.Println("UpdateCygxRaiServeBillWeekTask start")
  861. now := time.Now()
  862. weeks := 12
  863. companyList, e := rai_serve.GetCygxRaiServeCompanyAllList()
  864. if e != nil {
  865. err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
  866. return
  867. }
  868. var companyIds []int
  869. for _, v := range companyList {
  870. companyIds = append(companyIds, v.CompanyId)
  871. }
  872. listCompanyUserNum, e := models.GetWxUserNumByCompanyIds(companyIds)
  873. if e != nil {
  874. err = errors.New("GetWxUserisMakerByCompanyIds, Err: " + e.Error())
  875. return
  876. }
  877. mapCompanyUserNum := make(map[int]int) //企业对应的用户数量
  878. for _, v := range listCompanyUserNum {
  879. mapCompanyUserNum[v.CompanyId] = v.UserNum
  880. }
  881. lencompanyId := len(companyIds)
  882. if lencompanyId == 0 {
  883. return
  884. }
  885. //明细
  886. startDate := time.Now().AddDate(0, 0, -80)
  887. var conditionBill string
  888. var parsBill []interface{}
  889. conditionBill = " AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  890. parsBill = append(parsBill, companyIds, startDate)
  891. listBill, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  892. if e != nil {
  893. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  894. return
  895. }
  896. mapWeekServeCount := make(map[string]float64)
  897. for _, v := range listBill {
  898. mapWeekServeCount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", v.WeekStartDate)] += v.ServeCount
  899. }
  900. var conditionWeek string
  901. var parsWeek []interface{}
  902. conditionWeek = ` AND week_start_date >= ? `
  903. parsWeek = append(parsWeek, startDate)
  904. listWeekBill, e := rai_serve.GetCygxRaiServeWeekBillListAll(conditionWeek, parsWeek)
  905. if e != nil {
  906. err = errors.New("GetCygxRaiServeWeekBillListAll, Err: " + e.Error())
  907. return
  908. }
  909. mapWeekbill := make(map[string]bool)
  910. mapWeekbillUserTotal := make(map[string]int)
  911. mapWeekbillWeekServeCount := make(map[string]float64)
  912. mapWeekbillWeekCoverageRate := make(map[string]float64)
  913. for _, v := range listWeekBill {
  914. mapWeekbill[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", v.WeekStartDate)] = true
  915. mapWeekbillUserTotal[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", v.WeekStartDate)] = v.UserTotal
  916. mapWeekbillWeekServeCount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", v.WeekStartDate)] = v.WeekServeCount
  917. mapWeekbillWeekCoverageRate[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", v.WeekStartDate)] = v.CoverageRate
  918. }
  919. var items []*rai_serve.CygxRaiServeWeekBill
  920. var itemsUpdate []*rai_serve.CygxRaiServeWeekBill
  921. for _, v := range companyList {
  922. for i := 0; i < weeks; i++ {
  923. item := new(rai_serve.CygxRaiServeWeekBill)
  924. // 计算当前周的周一
  925. monday := now.AddDate(0, 0, -int(now.Weekday()-time.Monday)-i*7)
  926. // 计算当前周的周日
  927. sunday := monday.AddDate(0, 0, 6)
  928. item.WeekStartDate = monday.Format(utils.FormatDate)
  929. item.WeekEndDate = sunday.Format(utils.FormatDate)
  930. item.CompanyId = v.CompanyId
  931. item.CompanyName = v.CompanyName
  932. //超过本周的,互动总人数不做修改
  933. if i > 0 && mapWeekbillUserTotal[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", item.WeekStartDate)] > 0 {
  934. item.UserTotal = mapWeekbillUserTotal[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", item.WeekStartDate)]
  935. } else {
  936. item.UserTotal = mapCompanyUserNum[v.CompanyId]
  937. }
  938. item.WeekServeCount = mapWeekServeCount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", item.WeekStartDate)]
  939. if mapCompanyUserNum[v.CompanyId] > 0 {
  940. item.CoverageRate = item.WeekServeCount / float64(mapCompanyUserNum[v.CompanyId]) * 100
  941. }
  942. item.CreateTime = time.Now()
  943. item.ModifyTime = time.Now()
  944. if mapWeekbill[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", item.WeekStartDate)] {
  945. if mapWeekbillUserTotal[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", item.WeekStartDate)] == item.UserTotal && mapWeekbillWeekServeCount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", item.WeekStartDate)] == item.WeekServeCount && mapWeekbillWeekCoverageRate[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", item.WeekStartDate)] == item.CoverageRate {
  946. continue // 如果互动量相等,且人数相等,就不修改
  947. }
  948. itemsUpdate = append(itemsUpdate, item)
  949. } else {
  950. items = append(items, item)
  951. }
  952. }
  953. }
  954. if len(items) > 0 {
  955. e = rai_serve.AddCygxRaiServeWeekBillMulti(items)
  956. if e != nil {
  957. err = errors.New("AddCygxRaiServeWeekBillMulti, Err: " + e.Error())
  958. return
  959. }
  960. }
  961. fmt.Println("itemsUpdate", len(itemsUpdate))
  962. if len(itemsUpdate) > 0 {
  963. e = rai_serve.UpdateCygxRaiServeWeekBillMulti(itemsUpdate)
  964. if e != nil {
  965. err = errors.New("AddCygxRaiServeWeekBillMulti, Err: " + e.Error())
  966. return
  967. }
  968. }
  969. fmt.Println("UpdateCygxRaiServeBillWeekTask end")
  970. return
  971. }
  972. // 更新最近四周平均覆盖率,是否标红,权限,时间,金额
  973. func UpdateWeekAvg() (err error) {
  974. defer func() {
  975. if err != nil {
  976. fmt.Println(err)
  977. go utils.SendAlarmMsg("批量更新企业服务明细记录失败: UpdateCygxRaiServeBillByCompanyIds Err"+err.Error(), 2)
  978. }
  979. }()
  980. fmt.Println(" UpdateWeekAvg start")
  981. now := time.Now()
  982. weeks := 3
  983. monday := now.AddDate(0, 0, -int(now.Weekday()-time.Monday)-weeks*7)
  984. startDate := monday.Format(utils.FormatDate)
  985. var condition string
  986. var pars []interface{}
  987. condition = ` AND week_start_date >= ? `
  988. pars = append(pars, startDate)
  989. listWeekBill, e := rai_serve.GetCygxRaiServeWeekBillListAll(condition, pars)
  990. if e != nil {
  991. err = errors.New("GetCygxRaiServeWeekBillListAll, Err: " + e.Error())
  992. return
  993. }
  994. mapWeekServeCount := make(map[int]float64) //四周平均率总合
  995. for _, v := range listWeekBill {
  996. mapWeekServeCount[v.CompanyId] += v.CoverageRate
  997. }
  998. //获取近四周含有Kp 的公司
  999. condition = ""
  1000. pars = make([]interface{}, 0)
  1001. condition += ` AND week_start_date >= ? AND is_kp = 1 GROUP BY company_id `
  1002. pars = append(pars, startDate)
  1003. listIsKpWeekBill, e := rai_serve.GetCygxRaiServeBillListAll(condition, pars)
  1004. if e != nil {
  1005. err = errors.New("GetCygxRaiServeWeekBillListAll, Err: " + e.Error())
  1006. return
  1007. }
  1008. mapWeekIsKp := make(map[int]bool) //最近四周是否包含KP
  1009. for _, v := range listIsKpWeekBill {
  1010. mapWeekIsKp[v.CompanyId] = true
  1011. }
  1012. companyList, e := rai_serve.GetCygxRaiServeCompanyAllList()
  1013. if e != nil {
  1014. err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
  1015. return
  1016. }
  1017. var formalCompanyIds []int // 当前正式客户ID
  1018. var formalNoCompanyIds []int // 当前非正式客户ID
  1019. for _, v := range companyList {
  1020. if v.Status == "正式" {
  1021. formalCompanyIds = append(formalCompanyIds, v.CompanyId)
  1022. } else {
  1023. formalNoCompanyIds = append(formalNoCompanyIds, v.CompanyId)
  1024. }
  1025. }
  1026. var itemsUpdate []*rai_serve.CygxRaiServeCompany
  1027. if len(formalCompanyIds) > 0 { //正式客户信息
  1028. condition = ""
  1029. pars = make([]interface{}, 0)
  1030. condition = ` AND product_id = 2 AND company_id IN (` + utils.GetOrmInReplace(len(formalCompanyIds)) + `) AND status = 1 AND end_date > ? `
  1031. pars = append(pars, formalCompanyIds, time.Now())
  1032. listCompanyContract, e := company.GetCompanyContractList(condition, pars)
  1033. if e != nil {
  1034. err = errors.New("GetCompanyContractList, Err: " + e.Error())
  1035. return
  1036. }
  1037. companyMoney := make(map[int]float64)
  1038. for _, v := range listCompanyContract {
  1039. companyMoney[v.CompanyId] += v.Money
  1040. }
  1041. permissionNameMapByCompanyId, e := GetCompanyReportPermissionNameMapByCompanyId(formalCompanyIds)
  1042. if e != nil {
  1043. err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
  1044. return
  1045. }
  1046. for _, v := range formalCompanyIds {
  1047. item := new(rai_serve.CygxRaiServeCompany)
  1048. item.CompanyId = v
  1049. item.Money = companyMoney[v]
  1050. item.PermissionName = permissionNameMapByCompanyId[v]
  1051. item.ServeCoverageRate = utils.SubFloatToString(mapWeekServeCount[v]/4, 2)
  1052. if mapWeekIsKp[v] {
  1053. item.IsUserMaker = 1
  1054. }
  1055. itemsUpdate = append(itemsUpdate, item)
  1056. }
  1057. }
  1058. //正式客户数据修改
  1059. e = rai_serve.UpdateCygxRaiServeCompanyMulti(itemsUpdate)
  1060. if e != nil {
  1061. err = errors.New("UpdateCygxRaiServeCompanyMulti, Err: " + e.Error())
  1062. return
  1063. }
  1064. //非正式客户数据修改
  1065. var itemsUpdateFormalNo []*rai_serve.CygxRaiServeCompany
  1066. if len(formalNoCompanyIds) > 0 { //非正式客户信息
  1067. condition = ""
  1068. pars = make([]interface{}, 0)
  1069. condition = ` AND product_id = 2 AND company_id IN (` + utils.GetOrmInReplace(len(formalNoCompanyIds)) + `) AND status = 1 AND end_date < ? GROUP BY company_id ORDER BY company_contract_id DESC `
  1070. pars = append(pars, formalNoCompanyIds, time.Now())
  1071. listCompanyContractLastId, e := company.GetCompanyContractLastList(condition, pars) //获取关联的最后一笔合同信息
  1072. if e != nil {
  1073. err = errors.New("GetCompanyContractLastList, Err: " + e.Error())
  1074. return
  1075. }
  1076. var companyContractIds []int
  1077. for _, v := range listCompanyContractLastId {
  1078. companyContractIds = append(companyContractIds, v.CompanyContractId)
  1079. }
  1080. condition = ""
  1081. pars = make([]interface{}, 0)
  1082. condition = ` AND product_id = 2 AND company_id IN (` + utils.GetOrmInReplace(len(formalNoCompanyIds)) + `) AND status = 1 AND company_contract_id IN (` + utils.GetOrmInReplace(len(companyContractIds)) + `) AND end_date < ? GROUP BY company_id ORDER BY company_contract_id DESC `
  1083. pars = append(pars, formalNoCompanyIds, companyContractIds, time.Now())
  1084. listCompanyContractLast, e := company.GetCompanyContractList(condition, pars)
  1085. if e != nil {
  1086. err = errors.New("GetCompanyContractList, Err: " + e.Error())
  1087. return
  1088. }
  1089. permissionNameMapByContractId, e := GetCompanyContractPermissionNameMapById(companyContractIds)
  1090. if e != nil {
  1091. err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
  1092. return
  1093. }
  1094. for _, v := range listCompanyContractLast {
  1095. item := new(rai_serve.CygxRaiServeCompany)
  1096. item.CompanyId = v.CompanyId
  1097. item.Money = v.Money
  1098. item.StartDate = v.StartDate
  1099. item.EndDate = v.EndDate
  1100. item.ServeCoverageRate = utils.SubFloatToString(mapWeekServeCount[v.CompanyId]/4, 2)
  1101. if mapWeekIsKp[v.CompanyId] {
  1102. item.IsUserMaker = 1
  1103. }
  1104. item.PermissionName = permissionNameMapByContractId[v.CompanyContractId]
  1105. itemsUpdateFormalNo = append(itemsUpdateFormalNo, item)
  1106. }
  1107. }
  1108. e = rai_serve.UpdateCygxRaiServeCompanyFormalNoMulti(itemsUpdateFormalNo)
  1109. if e != nil {
  1110. err = errors.New("UpdateCygxRaiServeCompanyFormalNoMulti, Err: " + e.Error())
  1111. return
  1112. }
  1113. fmt.Println(" UpdateWeekAvg end")
  1114. return
  1115. }
  1116. // 权益服务统计添加到Redis队列中
  1117. func CygxRaiServeBillRedisAdd(content, source string, userId, comapnyId, sourceId, registerPlatform int, viewTime time.Time) (err error) {
  1118. defer func() {
  1119. if err != nil {
  1120. fmt.Println(err)
  1121. msg := fmt.Sprint("source:", source, "userId:", userId, "sourceId", sourceId)
  1122. go utils.SendAlarmMsg("权益服务统计添加到Redis队列中,写入Redis队列消息失败 CygxRaiServeBillRedisAdd:"+err.Error()+msg, 2)
  1123. }
  1124. }()
  1125. log := &rai_serve.RaiServeBillRedis{Content: content, Source: source, UserId: userId, ComapnyId: comapnyId, SourceId: sourceId, RegisterPlatform: registerPlatform, ViewTime: viewTime}
  1126. if utils.Re == nil {
  1127. err := utils.Rc.LPush(utils.CYGX_RAI_SERVE_BILL_KEY, log)
  1128. if err != nil {
  1129. fmt.Println("RaiServeBillRedis LPush Err:" + err.Error())
  1130. }
  1131. }
  1132. return
  1133. }
  1134. // CygxRaiServeBillRedisAddReduce 处理权益服务统计
  1135. func CygxRaiServeBillRedisAddReduce() (err error) {
  1136. for {
  1137. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  1138. utils.Rc.Brpop(utils.CYGX_RAI_SERVE_BILL_KEY, func(b []byte) {
  1139. var log rai_serve.RaiServeBillRedis
  1140. if err := json.Unmarshal(b, &log); err != nil {
  1141. fmt.Println("json unmarshal wrong!")
  1142. go utils.SendAlarmMsg("处理权益服务统计Redis队列消息失败:"+err.Error()+string(b), 2)
  1143. }
  1144. //如果不是共享给 权益服务组的,则不处理
  1145. taotalRaiServe, err := company.GetCompanyProductAaiServeCount(log.ComapnyId, utils.RAI_SERVE_GROUP_ID)
  1146. if err != nil {
  1147. go utils.SendAlarmMsg("处理权益服务统计Redis队列消息失败:GetCompanyProductAaiServeCount"+err.Error()+string(b), 2)
  1148. }
  1149. fmt.Println("taotaRaiServe", taotalRaiServe)
  1150. if taotalRaiServe == 0 {
  1151. return
  1152. }
  1153. //如果已经有记录了就不处理
  1154. taotalSource, err := rai_serve.GetCygxRaiServeBillCountByUserAndSource(log.UserId, log.SourceId, log.Source)
  1155. if err != nil {
  1156. go utils.SendAlarmMsg("处理权益服务统计Redis队列消息失败:GetCygxRaiServeBillCountByUserAndSource"+err.Error()+string(b), 2)
  1157. }
  1158. if taotalSource > 0 {
  1159. return
  1160. }
  1161. switch log.Source {
  1162. case utils.CYGX_OBJ_YANXUANSPECIAL: //研选专栏阅读记录处理
  1163. go RaiServeBillRedisAddReduceByYanxuanspecial(log)
  1164. fmt.Println("研选专栏阅读记录处理")
  1165. break
  1166. default:
  1167. fmt.Println(string(b))
  1168. go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+string(b), 2)
  1169. }
  1170. })
  1171. }
  1172. }
  1173. // 处理权益服务统计->研选阅读记录
  1174. func RaiServeBillRedisAddReduceByYanxuanspecial(log rai_serve.RaiServeBillRedis) (err error) {
  1175. source := log.Source
  1176. userId := log.UserId
  1177. sourceId := log.SourceId
  1178. defer func() {
  1179. if err != nil {
  1180. go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("source:", source, "userId:", userId, "sourceId", sourceId), 2)
  1181. }
  1182. }()
  1183. wxUser, e := models.GetWxUserItemByUserId(userId)
  1184. if e != nil {
  1185. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  1186. return
  1187. }
  1188. item := new(rai_serve.CygxRaiServeBill)
  1189. item.Content = log.Content
  1190. item.ServeTypeId = 5
  1191. item.ServeTypeName = "阅读uv"
  1192. item.UserId = wxUser.UserId
  1193. item.Mobile = wxUser.Mobile
  1194. item.Email = wxUser.Email
  1195. item.CompanyId = wxUser.CompanyId
  1196. item.CompanyName = wxUser.CompanyName
  1197. item.RealName = wxUser.RealName
  1198. item.RegisterPlatform = log.RegisterPlatform
  1199. item.ServeCount = 0.5
  1200. if wxUser.IsMaker == 1 {
  1201. item.IsKp = wxUser.IsMaker
  1202. item.ServeCount = item.ServeCount * 3
  1203. }
  1204. item.SourceId = log.SourceId
  1205. item.Source = log.Source
  1206. item.CreateTime = time.Now()
  1207. item.ViewTime = log.ViewTime.Format(utils.FormatDateTime)
  1208. err = rai_serve.AddCygxRaiServeBill(item)
  1209. return
  1210. }