rai_serve_count.go 39 KB

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