rai_serve_count.go 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_cygx/models"
  7. "hongze/hongze_cygx/models/company"
  8. "hongze/hongze_cygx/models/rai_serve"
  9. "hongze/hongze_cygx/utils"
  10. "strings"
  11. "time"
  12. )
  13. //权益服务统计
  14. //func init() {
  15. // UpdateRaiServeCompany()
  16. //}
  17. // 更新现有的权益服务客户数据
  18. func UpdateRaiServeCompany() (err error) {
  19. defer func() {
  20. if err != nil {
  21. fmt.Println(err)
  22. go utils.SendAlarmMsg("更新现有的权益服务客户数据失败 UpdateRaiServeCompany:"+err.Error(), 2)
  23. }
  24. }()
  25. //获取当前所有的权益服务客户ID
  26. //listRaiServeCompanyId, e := rai_serve.GetCygxRaiServeCompanyAllList()
  27. //if e != nil {
  28. // err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
  29. // return
  30. //}
  31. //mapOldCompanyId := make(map[int]bool) //原来的所属机构
  32. //mapNewCompanyId := make(map[int]bool) // 现有的所属机构
  33. //var deleteCompanyIds []int // 需要删除的机构
  34. //for _, v := range listRaiServeCompanyId {
  35. // mapOldCompanyId[v.CompanyId] = true
  36. //}
  37. var condition string
  38. var pars []interface{}
  39. condition = ` AND p.product_id = 2 AND (p.group_id = ? OR p.share_group_id = ?) `
  40. pars = append(pars, utils.RAI_SERVE_GROUP_ID, utils.RAI_SERVE_GROUP_ID)
  41. listCompanyProduct, e := company.GetCompanyProductAndCompanyListByCondition(condition, pars)
  42. if e != nil {
  43. err = errors.New("GetCompanyProductListByCondition, Err: " + e.Error())
  44. return
  45. }
  46. var items []*rai_serve.CygxRaiServeCompany
  47. for _, v := range listCompanyProduct {
  48. //mapNewCompanyId[v.CompanyId] = true
  49. //if mapOldCompanyId[v.CompanyId] {
  50. // continue
  51. //}
  52. item := new(rai_serve.CygxRaiServeCompany)
  53. item.CompanyId = v.CompanyId
  54. item.CompanyName = v.CompanyName
  55. item.CreateTime = time.Now()
  56. //item.Money = 100
  57. //item.ServeCoverageRate = "66.66%"
  58. item.SellerId = v.SellerId
  59. item.SellerName = v.SellerName
  60. item.StartDate = v.StartDate
  61. item.EndDate = v.EndDate
  62. item.ShareSeller = v.ShareSeller
  63. item.ShareSellerId = v.ShareSellerId
  64. item.Status = v.Status
  65. //item.PermissionName = "科技"
  66. items = append(items, item)
  67. }
  68. //for _, v := range listRaiServeCompanyId {
  69. // if !mapNewCompanyId[v.CompanyId] {
  70. // deleteCompanyIds = append(deleteCompanyIds, v.CompanyId)
  71. // }
  72. //}
  73. //先删除老的再添加新的
  74. e = rai_serve.AddCygxRaiServeCompanyMulti(items)
  75. if e != nil {
  76. err = errors.New("AddCygxRaiServeCompanyMulti, Err: " + e.Error())
  77. return
  78. }
  79. //listRaiServeCompanyNow, e := rai_serve.GetCygxRaiServeCompanyAllList()
  80. //if e != nil {
  81. // err = errors.New("GetCygxRaiServeCompanyAllList_Now, Err: " + e.Error())
  82. // return
  83. //}
  84. var formalCompanyIds []int // 当前正式客户ID
  85. var formalNoCompanyIds []int // 当前非正式客户ID
  86. for _, v := range listCompanyProduct {
  87. if v.Status == "正式" {
  88. formalCompanyIds = append(formalCompanyIds, v.CompanyId)
  89. } else {
  90. formalNoCompanyIds = append(formalNoCompanyIds, v.CompanyId)
  91. }
  92. }
  93. var itemsUpdate []*rai_serve.CygxRaiServeCompany
  94. if len(formalCompanyIds) > 0 { //正式客户信息
  95. condition = ""
  96. pars = make([]interface{}, 0)
  97. condition = ` AND product_id = 2 AND company_id IN (` + utils.GetOrmInReplace(len(formalCompanyIds)) + `) AND status = 1 AND end_date > ? `
  98. pars = append(pars, formalCompanyIds, time.Now())
  99. listCompanyContract, e := company.GetCompanyContractList(condition, pars)
  100. if e != nil {
  101. err = errors.New("GetCompanyContractList, Err: " + e.Error())
  102. return
  103. }
  104. companyMoney := make(map[int]float64)
  105. for _, v := range listCompanyContract {
  106. companyMoney[v.CompanyId] += v.Money
  107. }
  108. permissionNameMapByCompanyId, e := GetCompanyReportPermissionNameMapByCompanyId(formalCompanyIds)
  109. if e != nil {
  110. err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
  111. return
  112. }
  113. for _, v := range formalCompanyIds {
  114. item := new(rai_serve.CygxRaiServeCompany)
  115. item.CompanyId = v
  116. item.Money = companyMoney[v]
  117. item.PermissionName = permissionNameMapByCompanyId[v]
  118. item.ServeCoverageRate = "61.8"
  119. itemsUpdate = append(itemsUpdate, item)
  120. }
  121. fmt.Println(companyMoney)
  122. }
  123. //正式客户数据修改
  124. e = rai_serve.UpdateCygxRaiServeCompanyMulti(itemsUpdate)
  125. if e != nil {
  126. err = errors.New("UpdateCygxRaiServeCompanyMulti, Err: " + e.Error())
  127. return
  128. }
  129. //非正式客户数据修改
  130. var itemsUpdateFormalNo []*rai_serve.CygxRaiServeCompany
  131. if len(formalNoCompanyIds) > 0 { //非正式客户信息
  132. condition = ""
  133. pars = make([]interface{}, 0)
  134. 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 `
  135. pars = append(pars, formalNoCompanyIds, time.Now())
  136. listCompanyContractLastId, e := company.GetCompanyContractLastList(condition, pars) //获取关联的最后一笔合同信息
  137. if e != nil {
  138. err = errors.New("GetCompanyContractLastList, Err: " + e.Error())
  139. return
  140. }
  141. var companyContractIds []int
  142. for _, v := range listCompanyContractLastId {
  143. companyContractIds = append(companyContractIds, v.CompanyContractId)
  144. }
  145. condition = ""
  146. pars = make([]interface{}, 0)
  147. 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 `
  148. pars = append(pars, formalNoCompanyIds, companyContractIds, time.Now())
  149. listCompanyContractLast, e := company.GetCompanyContractList(condition, pars)
  150. if e != nil {
  151. err = errors.New("GetCompanyContractList, Err: " + e.Error())
  152. return
  153. }
  154. permissionNameMapByContractId, e := GetCompanyContractPermissionNameMapById(companyContractIds)
  155. if e != nil {
  156. err = errors.New("GetCompanyReportPermissionNameMapByCompanyId, Err: " + e.Error())
  157. return
  158. }
  159. fmt.Println("permissionNameMapByContractId", permissionNameMapByContractId)
  160. for _, v := range listCompanyContractLast {
  161. item := new(rai_serve.CygxRaiServeCompany)
  162. item.CompanyId = v.CompanyId
  163. item.Money = v.Money
  164. item.StartDate = v.StartDate
  165. item.EndDate = v.EndDate
  166. item.ServeCoverageRate = " 61.8"
  167. item.PermissionName = permissionNameMapByContractId[v.CompanyContractId]
  168. itemsUpdateFormalNo = append(itemsUpdateFormalNo, item)
  169. }
  170. }
  171. e = rai_serve.UpdateCygxRaiServeCompanyFormalNoMulti(itemsUpdateFormalNo)
  172. if e != nil {
  173. err = errors.New("UpdateCygxRaiServeCompanyFormalNoMulti, Err: " + e.Error())
  174. return
  175. }
  176. return
  177. }
  178. // GetCompanyContractPermissionNameMapById 获取合并之后的合同所对应的权限种类名称
  179. func GetCompanyContractPermissionNameMapById(companyContractIds []int) (mapContractResp map[int]string, err error) {
  180. //return
  181. lenArr := len(companyContractIds)
  182. if lenArr == 0 {
  183. return
  184. }
  185. var condition string
  186. var pars []interface{}
  187. condition += " AND company_contract_id IN (" + utils.GetOrmInReplace(lenArr) + ")"
  188. pars = append(pars, companyContractIds)
  189. //companyContractList, e := company.GetCompanyContractList(condition, pars)
  190. //if e != nil && e.Error() != utils.ErrNoRow() {
  191. // err = errors.New("GetCompanyContractList, Err: " + e.Error())
  192. // return
  193. //}
  194. permissionList, e := models.GetChartPermissionList()
  195. if e != nil && e.Error() != utils.ErrNoRow() {
  196. err = errors.New("GetChartPermissionList, Err: " + e.Error())
  197. return
  198. }
  199. mappermissionName := make(map[int]string)
  200. for _, v := range permissionList {
  201. if v.ProductId == 2 {
  202. mappermissionName[v.ChartPermissionId] = v.Remark
  203. }
  204. }
  205. mapContractIdPerssion := make(map[int]string) //单个合同ID所对应的套餐或者权限名称
  206. //for _, v := range companyContractList {
  207. // if v.RaiPackageType == 1 {
  208. // mapContractIdPerssion[v.CompanyContractId] = "70w套餐,"
  209. // }
  210. // if v.RaiPackageType == 2 {
  211. // mapContractIdPerssion[v.CompanyContractId] = "45w套餐,"
  212. // }
  213. //}
  214. companyContractPermissionList, e := company.GetCompanyContractPermissionList(condition, pars)
  215. if e != nil && e.Error() != utils.ErrNoRow() {
  216. err = errors.New("GetCompanyContractPermissionList, Err: " + e.Error())
  217. return
  218. }
  219. mapIsUpgrade := make(map[string]bool) //合同ID对应的行业是否有升级
  220. for _, v := range companyContractPermissionList {
  221. //如果开通的不是整个套餐,那么就做单独的子权限处理
  222. if strings.Count(mapContractIdPerssion[(v.CompanyContractId)], "w套餐") == 0 {
  223. if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  224. if v.ExpensiveYx == 1 {
  225. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
  226. } else if v.ExpensiveYx == 2 {
  227. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
  228. } else {
  229. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
  230. }
  231. } else {
  232. mapContractIdPerssion[(v.CompanyContractId)] += mappermissionName[v.ChartPermissionId] + ","
  233. if v.IsUpgrade == 1 {
  234. //合同ID,权限名称形成唯一的主键索引
  235. perssionName := mappermissionName[v.ChartPermissionId]
  236. perssionName = strings.Replace(perssionName, "(客观)", "", -1)
  237. perssionName = strings.Replace(perssionName, "(主观)", "", -1)
  238. mapIsUpgrade[fmt.Sprint(v.CompanyContractId, "perssionName", perssionName)] = true
  239. }
  240. }
  241. } else {
  242. if v.ChartPermissionId == utils.ZHUAN_JIA_ID {
  243. mapContractIdPerssion[(v.CompanyContractId)] += utils.ZHUAN_JIA_NAME + ","
  244. }
  245. if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  246. if v.ExpensiveYx == 1 {
  247. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
  248. } else if v.ExpensiveYx == 2 {
  249. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
  250. } else {
  251. mapContractIdPerssion[(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
  252. }
  253. }
  254. if v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
  255. mapContractIdPerssion[(v.CompanyContractId)] += utils.YAN_XUAN_KOU_DIAN_BAO_NAME + ","
  256. }
  257. }
  258. }
  259. //合并客观权限
  260. for k, v := range mapContractIdPerssion {
  261. perssionName := v
  262. if strings.Count(v, utils.YI_YAO_NAME) == 2 {
  263. perssionName = strings.Replace(perssionName, "医药(主观)", "医药", -1)
  264. perssionName = strings.Replace(perssionName, "医药(客观)", "", -1)
  265. }
  266. if strings.Count(v, utils.XIAO_FEI_NAME) == 2 {
  267. perssionName = strings.Replace(perssionName, "消费(主观)", "消费", -1)
  268. perssionName = strings.Replace(perssionName, "消费(客观)", "", -1)
  269. }
  270. if strings.Count(v, utils.KE_JI_NAME) == 2 {
  271. perssionName = strings.Replace(perssionName, "科技(主观)", "科技", -1)
  272. perssionName = strings.Replace(perssionName, "科技(客观)", "", -1)
  273. }
  274. if strings.Count(v, utils.ZHI_ZAO_NAME) == 2 {
  275. perssionName = strings.Replace(perssionName, "智造(主观)", "智造", -1)
  276. perssionName = strings.Replace(perssionName, "智造(客观)", "", -1)
  277. }
  278. perssionName = strings.TrimRight(perssionName, ",")
  279. mapContractIdPerssion[k] = perssionName
  280. }
  281. mapContractResp = make(map[int]string, 0)
  282. //过滤多余的","
  283. for k, v := range mapContractIdPerssion {
  284. sliceName := strings.Split(v, ",")
  285. var nameArr []string
  286. for _, vName := range sliceName {
  287. if vName == "" {
  288. continue
  289. }
  290. if mapIsUpgrade[fmt.Sprint(k, "perssionName", vName)] {
  291. vName += "(升级)"
  292. }
  293. nameArr = append(nameArr, vName)
  294. }
  295. mapContractResp[k] = strings.Join(nameArr, ",")
  296. }
  297. return
  298. }
  299. // 根据公司ID获取目前行业所对应的正式权限
  300. func GetCompanyReportPermissionNameMapByCompanyId(companyIds []int) (mapContractResp map[int]string, err error) {
  301. lenArr := len(companyIds)
  302. if lenArr == 0 {
  303. return
  304. }
  305. var condition string
  306. var pars []interface{}
  307. condition += " AND company_id IN (" + utils.GetOrmInReplace(lenArr) + ") AND product_id = 2 AND status = '正式' "
  308. pars = append(pars, companyIds)
  309. permissionList, e := models.GetChartPermissionList()
  310. if e != nil && e.Error() != utils.ErrNoRow() {
  311. err = errors.New("GetChartPermissionList, Err: " + e.Error())
  312. return
  313. }
  314. mappermissionName := make(map[int]string)
  315. for _, v := range permissionList {
  316. if v.ProductId == 2 {
  317. mappermissionName[v.ChartPermissionId] = v.Remark
  318. }
  319. }
  320. mapContractIdPerssion := make(map[int]string) //单个合同ID所对应的套餐或者权限名称
  321. companyReportPermissionList, e := models.GetCompanyReportPermissionList(condition, pars)
  322. if e != nil && e.Error() != utils.ErrNoRow() {
  323. err = errors.New("GetCompanyReportPermissionList, Err: " + e.Error())
  324. return
  325. }
  326. mapIsUpgrade := make(map[string]bool) //合同ID对应的行业是否有升级
  327. for _, v := range companyReportPermissionList {
  328. //如果开通的不是整个套餐,那么就做单独的子权限处理
  329. if strings.Count(mapContractIdPerssion[(v.CompanyId)], "w套餐") == 0 {
  330. if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  331. if v.ExpensiveYx == 1 {
  332. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
  333. } else if v.ExpensiveYx == 2 {
  334. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
  335. } else {
  336. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
  337. }
  338. } else {
  339. mapContractIdPerssion[(v.CompanyId)] += mappermissionName[v.ChartPermissionId] + ","
  340. if v.IsUpgrade == 1 {
  341. //合同ID,权限名称形成唯一的主键索引
  342. perssionName := mappermissionName[v.ChartPermissionId]
  343. perssionName = strings.Replace(perssionName, "(客观)", "", -1)
  344. perssionName = strings.Replace(perssionName, "(主观)", "", -1)
  345. mapIsUpgrade[fmt.Sprint(v.CompanyId, "perssionName", perssionName)] = true
  346. }
  347. }
  348. } else {
  349. if v.ChartPermissionId == utils.ZHUAN_JIA_ID {
  350. mapContractIdPerssion[(v.CompanyId)] += utils.ZHUAN_JIA_NAME + ","
  351. }
  352. if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  353. if v.ExpensiveYx == 1 {
  354. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
  355. } else if v.ExpensiveYx == 2 {
  356. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(10w),"
  357. } else {
  358. mapContractIdPerssion[(v.CompanyId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + ","
  359. }
  360. }
  361. if v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
  362. mapContractIdPerssion[(v.CompanyId)] += utils.YAN_XUAN_KOU_DIAN_BAO_NAME + ","
  363. }
  364. }
  365. }
  366. //合并客观权限
  367. for k, v := range mapContractIdPerssion {
  368. perssionName := v
  369. if strings.Count(v, utils.YI_YAO_NAME) == 2 {
  370. perssionName = strings.Replace(perssionName, "医药(主观)", "医药", -1)
  371. perssionName = strings.Replace(perssionName, "医药(客观)", "", -1)
  372. }
  373. if strings.Count(v, utils.XIAO_FEI_NAME) == 2 {
  374. perssionName = strings.Replace(perssionName, "消费(主观)", "消费", -1)
  375. perssionName = strings.Replace(perssionName, "消费(客观)", "", -1)
  376. }
  377. if strings.Count(v, utils.KE_JI_NAME) == 2 {
  378. perssionName = strings.Replace(perssionName, "科技(主观)", "科技", -1)
  379. perssionName = strings.Replace(perssionName, "科技(客观)", "", -1)
  380. }
  381. if strings.Count(v, utils.ZHI_ZAO_NAME) == 2 {
  382. perssionName = strings.Replace(perssionName, "智造(主观)", "智造", -1)
  383. perssionName = strings.Replace(perssionName, "智造(客观)", "", -1)
  384. }
  385. perssionName = strings.TrimRight(perssionName, ",")
  386. mapContractIdPerssion[k] = perssionName
  387. }
  388. mapContractResp = make(map[int]string, 0)
  389. //过滤多余的","
  390. for k, v := range mapContractIdPerssion {
  391. sliceName := strings.Split(v, ",")
  392. var nameArr []string
  393. for _, vName := range sliceName {
  394. if vName == "" {
  395. continue
  396. }
  397. if mapIsUpgrade[fmt.Sprint(k, "perssionName", vName)] {
  398. vName += "(升级)"
  399. }
  400. nameArr = append(nameArr, vName)
  401. }
  402. mapContractResp[k] = strings.Join(nameArr, ",")
  403. }
  404. return
  405. }
  406. // Redis对列消息中的结构体
  407. type RaiServeBillRedis struct {
  408. Content string `comment:"服务内容说明"`
  409. UserId int `comment:"用户ID"`
  410. ComapnyId int `comment:"公司ID"`
  411. SourceId int `comment:"来源ID"`
  412. Source string `comment:"来源"`
  413. RegisterPlatform int `comment:"来源 1小程序,2:网页"`
  414. ViewTime time.Time `comment:"浏览时间"`
  415. }
  416. // 权益服务统计添加到Redis队列中
  417. func CygxRaiServeBillRedisAdd(content, source string, userId, comapnyId, sourceId, registerPlatform int, viewTime time.Time) (err error) {
  418. defer func() {
  419. if err != nil {
  420. fmt.Println(err)
  421. msg := fmt.Sprint("source:", source, "userId:", userId, "sourceId", sourceId)
  422. go utils.SendAlarmMsg("权益服务统计添加到Redis队列中,写入Redis队列消息失败 CygxRaiServeBillRedisAdd:"+err.Error()+msg, 2)
  423. }
  424. }()
  425. log := &rai_serve.RaiServeBillRedis{Content: content, Source: source, UserId: userId, ComapnyId: comapnyId, SourceId: sourceId, RegisterPlatform: registerPlatform, ViewTime: viewTime}
  426. if utils.Re == nil {
  427. err := utils.Rc.LPush(utils.CYGX_RAI_SERVE_BILL_KEY, log)
  428. if err != nil {
  429. fmt.Println("RaiServeBillRedis LPush Err:" + err.Error())
  430. }
  431. }
  432. return
  433. }
  434. //func init() {
  435. // CygxRaiServeBillRedisAddReduce()
  436. //}
  437. // CygxRaiServeBillRedisAddReduce 处理权益服务统计
  438. func CygxRaiServeBillRedisAddReduce() (err error) {
  439. for {
  440. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  441. utils.Rc.Brpop(utils.CYGX_RAI_SERVE_BILL_KEY, func(b []byte) {
  442. var log rai_serve.RaiServeBillRedis
  443. if err := json.Unmarshal(b, &log); err != nil {
  444. fmt.Println("json unmarshal wrong!")
  445. go utils.SendAlarmMsg("处理权益服务统计Redis队列消息失败:"+err.Error()+string(b), 2)
  446. }
  447. //如果不是共享给 权益服务组的,则不处理
  448. taotalRaiServe, err := company.GetCompanyProductAaiServeCount(log.ComapnyId, utils.RAI_SERVE_GROUP_ID)
  449. if err != nil {
  450. go utils.SendAlarmMsg("处理权益服务统计Redis队列消息失败:GetCompanyProductAaiServeCount"+err.Error()+string(b), 2)
  451. }
  452. fmt.Println("taotaRaiServe", taotalRaiServe)
  453. if taotalRaiServe == 0 {
  454. return
  455. }
  456. //如果已经有记录了就不处理
  457. taotalSource, err := rai_serve.GetCygxRaiServeBillCountByUserAndSource(log.UserId, log.SourceId, log.Source)
  458. if err != nil {
  459. go utils.SendAlarmMsg("处理权益服务统计Redis队列消息失败:GetCygxRaiServeBillCountByUserAndSource"+err.Error()+string(b), 2)
  460. }
  461. if taotalSource > 0 {
  462. return
  463. }
  464. switch log.Source {
  465. case utils.CYGX_OBJ_YANXUANSPECIAL: //研选专栏阅读记录处理
  466. go RaiServeBillRedisAddReduceByYanxuanspecial(log)
  467. fmt.Println("研选专栏阅读记录处理")
  468. break
  469. default:
  470. fmt.Println(string(b))
  471. go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+string(b), 2)
  472. }
  473. })
  474. }
  475. }
  476. // 处理权益服务统计->研选阅读记录
  477. func RaiServeBillRedisAddReduceByYanxuanspecial(log rai_serve.RaiServeBillRedis) (err error) {
  478. source := log.Source
  479. userId := log.UserId
  480. sourceId := log.SourceId
  481. defer func() {
  482. if err != nil {
  483. go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("source:", source, "userId:", userId, "sourceId", sourceId), 2)
  484. }
  485. }()
  486. wxUser, e := models.GetWxUserItemByUserId(userId)
  487. if e != nil {
  488. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  489. return
  490. }
  491. item := new(rai_serve.CygxRaiServeBill)
  492. item.Content = log.Content
  493. item.ServeTypeId = 5
  494. item.ServeTypeName = "阅读uv"
  495. item.UserId = wxUser.UserId
  496. item.Mobile = wxUser.Mobile
  497. item.Email = wxUser.Email
  498. item.CompanyId = wxUser.CompanyId
  499. item.CompanyName = wxUser.CompanyName
  500. item.RealName = wxUser.RealName
  501. item.RegisterPlatform = log.RegisterPlatform
  502. item.ServeCount = 0.5
  503. if wxUser.IsMaker == 1 {
  504. item.IsKp = wxUser.IsMaker
  505. item.ServeCount = item.ServeCount * 3
  506. }
  507. item.SourceId = log.SourceId
  508. item.Source = log.Source
  509. item.CreateTime = time.Now()
  510. item.ViewTime = log.ViewTime.Format(utils.FormatDateTime)
  511. err = rai_serve.AddCygxRaiServeBill(item)
  512. return
  513. }
  514. func init() {
  515. UpdateCygxRaiServeBillByCompanyIds()
  516. }
  517. // 批量更新企业服务明细记录
  518. func UpdateCygxRaiServeBillByCompanyIds() (err error) {
  519. defer func() {
  520. if err != nil {
  521. fmt.Println(err)
  522. go utils.SendAlarmMsg("批量更新企业服务明细记录失败: UpdateCygxRaiServeBillByCompanyIds Err"+err.Error(), 2)
  523. }
  524. }()
  525. companyList, e := rai_serve.GetCygxRaiServeCompanyAllList()
  526. if e != nil {
  527. err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
  528. return
  529. }
  530. var companyIds []int
  531. var items []*rai_serve.CygxRaiServeBill
  532. for _, v := range companyList {
  533. companyIds = append(companyIds, v.CompanyId)
  534. }
  535. lencompanyId := len(companyIds)
  536. listisMakeruser, e := models.GetWxUserisMakerByCompanyIds(companyIds)
  537. if e != nil {
  538. err = errors.New("GetWxUserisMakerByCompanyIds, Err: " + e.Error())
  539. return
  540. }
  541. mapUserMaker := make(map[int]bool)
  542. for _, v := range listisMakeruser {
  543. mapUserMaker[v.UserId] = true
  544. }
  545. fmt.Println(mapUserMaker)
  546. var condition string
  547. var pars []interface{}
  548. createTime := time.Now().AddDate(0, 0, -80) // 查询12周以内的数据
  549. condition = " AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND create_time > ? "
  550. pars = append(pars, companyIds, createTime)
  551. //研选专栏阅读记录内容
  552. {
  553. listYanxuanSpecialRecord, e := models.GetCygxYanxuanSpecialRecordRespListAll(condition+" GROUP BY user_id, yanxuan_special_id ORDER BY create_time ASC ", pars)
  554. if e != nil {
  555. err = errors.New("GetCygxYanxuanSpecialRecordRespListAll, Err: " + e.Error())
  556. return
  557. }
  558. var yanxuanspecialIds []int
  559. for _, v := range listYanxuanSpecialRecord {
  560. yanxuanspecialIds = append(yanxuanspecialIds, v.YanxuanSpecialId)
  561. }
  562. var conditionYanxuanSpecial string
  563. var parsYanxuanSpecial []interface{}
  564. conditionYanxuanSpecial += ` AND id IN (` + utils.GetOrmInReplace(len(yanxuanspecialIds)) + `) `
  565. parsYanxuanSpecial = append(parsYanxuanSpecial, yanxuanspecialIds)
  566. listYanxuanSpecial, e := models.GetYanxuanSpecialListBycondition(conditionYanxuanSpecial, parsYanxuanSpecial, 0, len(yanxuanspecialIds))
  567. if e != nil && e.Error() != utils.ErrNoRow() {
  568. err = errors.New("GetYanxuanSpecialListBycondition, Err: " + e.Error())
  569. return
  570. }
  571. mapYanxuanSpecialTitle := make(map[int]string)
  572. for _, v := range listYanxuanSpecial {
  573. mapYanxuanSpecialTitle[v.Id] = v.Title
  574. }
  575. //研选阅读明细
  576. var conditionBill string
  577. var parsBill []interface{}
  578. conditionBill = " AND source = 'yanxuanspecial' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  579. parsBill = append(parsBill, companyIds, createTime)
  580. listBillByYanxuanspecial, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  581. if e != nil {
  582. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  583. return
  584. }
  585. mapYanxuanspecialBill := make(map[string]bool)
  586. for _, v := range listBillByYanxuanspecial {
  587. mapYanxuanspecialBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  588. }
  589. for _, v := range listYanxuanSpecialRecord {
  590. if mapYanxuanspecialBill[fmt.Sprint("UID_", v.UserId, "SID_", v.YanxuanSpecialId)] { // 如果内容存在就不插入
  591. continue
  592. }
  593. item := new(rai_serve.CygxRaiServeBill)
  594. item.Content = mapYanxuanSpecialTitle[v.YanxuanSpecialId]
  595. item.ServeTypeId = 5
  596. item.ServeTypeName = "阅读uv"
  597. item.UserId = v.UserId
  598. item.Mobile = v.Mobile
  599. item.Email = v.Email
  600. item.CompanyId = v.CompanyId
  601. item.CompanyName = v.CompanyName
  602. item.RealName = v.RealName
  603. item.RegisterPlatform = v.RegisterPlatform
  604. item.ServeCount = 0.5
  605. if mapUserMaker[v.UserId] {
  606. item.IsKp = 1
  607. item.ServeCount = item.ServeCount * 3
  608. }
  609. item.SourceId = v.YanxuanSpecialId
  610. item.Source = utils.CYGX_OBJ_YANXUANSPECIAL
  611. item.CreateTime = time.Now()
  612. item.ViewTime = v.CreateTime
  613. items = append(items, item)
  614. }
  615. }
  616. //研选专栏阅读记录内容end
  617. //文章阅读记录内容
  618. {
  619. listArticleRecord, e := models.GetCygxArticleHistoryRecordAllListNoLimit(condition+" GROUP BY user_id, article_id ORDER BY create_time ASC ", pars)
  620. if e != nil {
  621. err = errors.New("GetCygxArticleHistoryRecordAllListNoLimit, Err: " + e.Error())
  622. return
  623. }
  624. //return
  625. var articleIds []int
  626. for _, v := range listArticleRecord {
  627. articleIds = append(articleIds, v.ArticleId)
  628. }
  629. var conditionArticle string
  630. var parsArticle []interface{}
  631. conditionArticle += ` AND article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `) `
  632. parsArticle = append(parsArticle, articleIds)
  633. listArticle, e := models.GetCygxCygxArticleList(conditionArticle, parsArticle, 0, len(articleIds))
  634. if e != nil && e.Error() != utils.ErrNoRow() {
  635. err = errors.New("GetCygxCygxArticleList, Err: " + e.Error())
  636. return
  637. }
  638. mapArticleTitle := make(map[int]string)
  639. for _, v := range listArticle {
  640. mapArticleTitle[v.ArticleId] = v.Title
  641. }
  642. fmt.Println(mapArticleTitle[10080])
  643. //return
  644. //文章阅读明细
  645. var conditionBill string
  646. var parsBill []interface{}
  647. conditionBill = " AND source = 'article' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  648. parsBill = append(parsBill, companyIds, createTime)
  649. listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  650. if e != nil {
  651. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  652. return
  653. }
  654. mapArticleBill := make(map[string]bool)
  655. for _, v := range listBillByArticle {
  656. mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  657. }
  658. for _, v := range listArticleRecord {
  659. if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ArticleId)] { // 如果内容存在就不插入
  660. continue
  661. }
  662. item := new(rai_serve.CygxRaiServeBill)
  663. item.Content = mapArticleTitle[v.ArticleId]
  664. item.ServeTypeId = 5
  665. item.ServeTypeName = "阅读uv"
  666. item.UserId = v.UserId
  667. item.Mobile = v.Mobile
  668. item.Email = v.Email
  669. item.CompanyId = v.CompanyId
  670. item.CompanyName = v.CompanyName
  671. item.RealName = v.RealName
  672. item.RegisterPlatform = v.RegisterPlatform
  673. item.ServeCount = 0.5
  674. if mapUserMaker[v.UserId] {
  675. item.IsKp = 1
  676. item.ServeCount = item.ServeCount * 3
  677. }
  678. item.SourceId = v.ArticleId
  679. item.Source = utils.CYGX_OBJ_ARTICLE
  680. item.CreateTime = time.Now()
  681. item.ViewTime = v.CreateTime
  682. items = append(items, item)
  683. }
  684. }
  685. //文章阅读记录内容 end
  686. //活动记录内容
  687. {
  688. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND a.activity_time > ? "
  689. signUpDetailList, e := models.GetSignupDetailBySignupjoinactivity(condition+" ORDER BY a.activity_time ASC ", pars)
  690. if e != nil {
  691. err = errors.New("GetSignupDetailBySignupjoinactivity, Err: " + e.Error())
  692. return
  693. }
  694. //文章阅读明细
  695. var conditionBill string
  696. var parsBill []interface{}
  697. conditionBill = " AND source = 'activity' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  698. parsBill = append(parsBill, companyIds, createTime)
  699. listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  700. if e != nil {
  701. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  702. return
  703. }
  704. mapArticleBill := make(map[string]bool)
  705. for _, v := range listBillByArticle {
  706. mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  707. }
  708. for _, v := range signUpDetailList {
  709. if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
  710. continue
  711. }
  712. item := new(rai_serve.CygxRaiServeBill)
  713. item.Content = v.ActivityName
  714. if v.ActivityType == 1 {
  715. item.ServeTypeId = 1
  716. item.ServeTypeName = "线上活动"
  717. } else {
  718. item.ServeTypeId = 2
  719. item.ServeTypeName = "线下活动"
  720. }
  721. item.UserId = v.UserId
  722. item.Mobile = v.Mobile
  723. item.Email = v.Email
  724. item.CompanyId = v.CompanyId
  725. item.CompanyName = v.CompanyName
  726. item.RealName = v.RealName
  727. //item.RegisterPlatform = v.RegisterPlatform
  728. item.ServeCount = 1
  729. if mapUserMaker[v.UserId] {
  730. item.IsKp = 1
  731. item.ServeCount = item.ServeCount * 3
  732. }
  733. item.SourceId = v.ActivityId
  734. item.Source = utils.CYGX_OBJ_ACTIVITY
  735. item.CreateTime = time.Now()
  736. item.ViewTime = v.ActivityTime
  737. items = append(items, item)
  738. }
  739. }
  740. //活动记录内容 end
  741. //专项调研活动记录内容
  742. {
  743. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND a.activity_time > ? "
  744. activitySpecialList, e := models.GetCygxActivitySpecialMeetingDetailList(condition+" ORDER BY a.activity_time ASC ", pars)
  745. if e != nil {
  746. err = errors.New("GetCygxActivitySpecialMeetingDetailList, Err: " + e.Error())
  747. return
  748. }
  749. //专项调研活动明细
  750. var conditionBill string
  751. var parsBill []interface{}
  752. conditionBill = " AND source = 'activityspecial' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  753. parsBill = append(parsBill, companyIds, createTime)
  754. listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  755. if e != nil {
  756. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  757. return
  758. }
  759. mapArticleBill := make(map[string]bool)
  760. for _, v := range listBillByArticle {
  761. mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  762. }
  763. for _, v := range activitySpecialList {
  764. if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
  765. continue
  766. }
  767. item := new(rai_serve.CygxRaiServeBill)
  768. item.Content = v.ResearchTheme
  769. item.ServeTypeId = 3
  770. item.ServeTypeName = "专项调研"
  771. item.UserId = v.UserId
  772. item.Mobile = v.Mobile
  773. item.Email = v.Email
  774. item.CompanyId = v.CompanyId
  775. item.CompanyName = v.CompanyName
  776. item.RealName = v.RealName
  777. //item.RegisterPlatform = v.RegisterPlatform
  778. item.ServeCount = 1
  779. if mapUserMaker[v.UserId] {
  780. item.IsKp = 1
  781. item.ServeCount = item.ServeCount * 3
  782. }
  783. item.SourceId = v.ActivityId
  784. item.Source = utils.CYGX_OBJ_ACTIVITYSPECIAL
  785. item.CreateTime = time.Now()
  786. item.ViewTime = v.ActivityTime
  787. items = append(items, item)
  788. }
  789. }
  790. //专项调研活动记录内容 end
  791. //1v1路演
  792. {
  793. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND a.activity_time > ? "
  794. activitySpecialList, e := models.GetCygxActivitySpecialMeetingDetailList(condition+" ORDER BY a.activity_time ASC ", pars)
  795. if e != nil {
  796. err = errors.New("GetCygxActivitySpecialMeetingDetailList, Err: " + e.Error())
  797. return
  798. }
  799. //专项调研活动明细
  800. var conditionBill string
  801. var parsBill []interface{}
  802. conditionBill = " AND source = 'activityspecial' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  803. parsBill = append(parsBill, companyIds, createTime)
  804. listBillByArticle, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  805. if e != nil {
  806. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  807. return
  808. }
  809. mapArticleBill := make(map[string]bool)
  810. for _, v := range listBillByArticle {
  811. mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  812. }
  813. for _, v := range activitySpecialList {
  814. if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
  815. continue
  816. }
  817. item := new(rai_serve.CygxRaiServeBill)
  818. item.Content = v.ResearchTheme
  819. item.ServeTypeId = 3
  820. item.ServeTypeName = "专项调研"
  821. item.UserId = v.UserId
  822. item.Mobile = v.Mobile
  823. item.Email = v.Email
  824. item.CompanyId = v.CompanyId
  825. item.CompanyName = v.CompanyName
  826. item.RealName = v.RealName
  827. //item.RegisterPlatform = v.RegisterPlatform
  828. item.ServeCount = 1
  829. if mapUserMaker[v.UserId] {
  830. item.IsKp = 1
  831. item.ServeCount = item.ServeCount * 3
  832. }
  833. item.SourceId = v.ActivityId
  834. item.Source = utils.CYGX_OBJ_ACTIVITYSPECIAL
  835. item.CreateTime = time.Now()
  836. item.ViewTime = v.ActivityTime
  837. items = append(items, item)
  838. }
  839. }
  840. //1v1路演 end
  841. fmt.Println(len(items))
  842. e = rai_serve.AddCygxRaiServeBillMulti(items)
  843. if e != nil {
  844. err = errors.New("AddCygxRaiServeBillMulti, Err: " + e.Error())
  845. return
  846. }
  847. return
  848. }