rai_company_user_bill.go 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969
  1. package services
  2. import (
  3. "context"
  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. //func init() {
  15. // UpdateCygxRaiCompanyUserBill()
  16. //}
  17. // 权益正式,试用客户近四周互动记录
  18. func UpdateCygxRaiCompanyUserBillDate(cont context.Context) (err error) {
  19. //func UpdateCygxRaiCompanyUserBillDate() (err error) {
  20. defer func() {
  21. if err != nil {
  22. fmt.Println(err)
  23. go utils.SendAlarmMsg(fmt.Sprint("定时任务处理权权益正式,试用客户近四周互动记录 失败 UpdateCygxRaiCompanyUserBillDate ,err:", err.Error()), 2)
  24. }
  25. }()
  26. err = UpdateCygxRaiCompanyUserBill() // 处理共享机构信息
  27. if err != nil {
  28. return
  29. }
  30. err = UpdateCompanyProductIsUserMaker() // 处理个人流水记录
  31. if err != nil {
  32. return
  33. }
  34. return
  35. }
  36. // 批量更新权益正式,试用客户近四周互动记录
  37. func UpdateCygxRaiCompanyUserBill() (err error) {
  38. defer func() {
  39. if err != nil {
  40. fmt.Println(err)
  41. go utils.SendAlarmMsg("批量更新权益正式,试用客户近四周互动记录 失败: UpdateCygxRaiCompanyUserBill Err"+err.Error(), 2)
  42. }
  43. }()
  44. var delBillIds []int
  45. var startWeekDate = time.Now().AddDate(0, 0, -28).Format(utils.FormatDate) + " 23:59:59"
  46. fmt.Println("UpdateCygxRaiCompanyUserBill start")
  47. companyList, e := company.GetRaiCompanyProductCompanyids()
  48. if e != nil {
  49. err = errors.New("GetCygxRaiServeCompanyAllList, Err: " + e.Error())
  50. return
  51. }
  52. var companyIds []int
  53. var items []*rai_serve.CygxRaiCompanyUserBill
  54. for _, v := range companyList {
  55. companyIds = append(companyIds, v.CompanyId)
  56. }
  57. lencompanyId := len(companyIds)
  58. listisMakeruser, e := models.GetWxUserisMakerByCompanyIds(companyIds)
  59. if e != nil {
  60. err = errors.New("GetWxUserisMakerByCompanyIds, Err: " + e.Error())
  61. return
  62. }
  63. mapUserMaker := make(map[int]bool)
  64. mapUserMobileUserId := make(map[string]int)
  65. for _, v := range listisMakeruser {
  66. mapUserMaker[v.UserId] = true
  67. mapUserMobileUserId[v.Mobile] = v.UserId
  68. }
  69. var condition string
  70. var pars []interface{}
  71. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND art.create_time > ? "
  72. pars = append(pars, companyIds, startWeekDate)
  73. fmt.Println("startWeekDate", startWeekDate)
  74. //研选专栏阅读记录内容
  75. {
  76. listYanxuanSpecialRecord, e := models.GetCygxYanxuanSpecialRecordRespListAll(condition+" GROUP BY user_id, yanxuan_special_id ORDER BY create_time ASC ", pars)
  77. if e != nil {
  78. err = errors.New("GetCygxYanxuanSpecialRecordRespListAll, Err: " + e.Error())
  79. return
  80. }
  81. var yanxuanspecialIds []int
  82. for _, v := range listYanxuanSpecialRecord {
  83. yanxuanspecialIds = append(yanxuanspecialIds, v.YanxuanSpecialId)
  84. }
  85. yanxuanspecialIds = append(yanxuanspecialIds, 0)
  86. var conditionYanxuanSpecial string
  87. var parsYanxuanSpecial []interface{}
  88. conditionYanxuanSpecial += ` AND id IN (` + utils.GetOrmInReplace(len(yanxuanspecialIds)) + `) `
  89. parsYanxuanSpecial = append(parsYanxuanSpecial, yanxuanspecialIds)
  90. listYanxuanSpecial, e := models.GetYanxuanSpecialListBycondition(conditionYanxuanSpecial, parsYanxuanSpecial, 0, len(yanxuanspecialIds))
  91. if e != nil && e.Error() != utils.ErrNoRow() {
  92. err = errors.New("GetYanxuanSpecialListBycondition, Err: " + e.Error())
  93. return
  94. }
  95. mapYanxuanSpecialTitle := make(map[int]string)
  96. for _, v := range listYanxuanSpecial {
  97. mapYanxuanSpecialTitle[v.Id] = v.Title
  98. }
  99. //研选阅读明细
  100. var conditionBill string
  101. var parsBill []interface{}
  102. conditionBill = " AND source = 'yanxuanspecial' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  103. parsBill = append(parsBill, companyIds, startWeekDate)
  104. listBillByYanxuanspecial, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  105. if e != nil {
  106. err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
  107. return
  108. }
  109. mapYanxuanspecialBill := make(map[string]bool)
  110. for _, v := range listBillByYanxuanspecial {
  111. mapYanxuanspecialBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  112. }
  113. for _, v := range listYanxuanSpecialRecord {
  114. if mapYanxuanspecialBill[fmt.Sprint("UID_", v.UserId, "SID_", v.YanxuanSpecialId)] { // 如果内容存在就不插入
  115. continue
  116. }
  117. item := new(rai_serve.CygxRaiCompanyUserBill)
  118. item.Content = mapYanxuanSpecialTitle[v.YanxuanSpecialId]
  119. item.ServeTypeId = 5
  120. item.ServeTypeName = "阅读uv"
  121. item.UserId = v.UserId
  122. item.Mobile = v.Mobile
  123. item.Email = v.Email
  124. item.CompanyId = v.CompanyId
  125. item.CompanyName = v.CompanyName
  126. item.RealName = v.RealName
  127. item.RegisterPlatform = v.RegisterPlatform
  128. item.ServeCount = 0.5
  129. if mapUserMaker[v.UserId] {
  130. item.IsKp = 1
  131. item.ServeCount = item.ServeCount * 3
  132. }
  133. item.SourceId = v.YanxuanSpecialId
  134. item.Source = utils.CYGX_OBJ_YANXUANSPECIAL
  135. item.CreateTime = time.Now()
  136. item.ViewTime = v.CreateTime
  137. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  138. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  139. items = append(items, item)
  140. }
  141. }
  142. //研选专栏阅读记录内容end
  143. //文章阅读记录内容
  144. {
  145. listArticleRecord, e := models.GetCygxArticleHistoryRecordAllListNoLimit(condition+" GROUP BY art.user_id, art.article_id ORDER BY art.create_time ASC ", pars)
  146. if e != nil {
  147. err = errors.New("GetCygxArticleHistoryRecordAllListNoLimit, Err: " + e.Error())
  148. return
  149. }
  150. //文章阅读明细
  151. var conditionBill string
  152. var parsBill []interface{}
  153. conditionBill = " AND source = 'article' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  154. parsBill = append(parsBill, companyIds, startWeekDate)
  155. listBillByArticle, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  156. if e != nil {
  157. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  158. return
  159. }
  160. mapArticleBill := make(map[string]bool)
  161. for _, v := range listBillByArticle {
  162. mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  163. }
  164. //部分数据来源没有存用户姓名,重新查一下
  165. var userIds []int
  166. for _, v := range listArticleRecord {
  167. userIds = append(userIds, v.UserId)
  168. }
  169. ListUser, e := models.GetWxUserListByUserIdsArr(userIds)
  170. if e != nil {
  171. err = errors.New("GetWxUserListByUserIdsArr, Err: " + e.Error())
  172. return
  173. }
  174. mapUserName := make(map[int]string)
  175. for _, v := range ListUser {
  176. mapUserName[v.UserId] = v.RealName
  177. }
  178. for _, v := range listArticleRecord {
  179. if mapArticleBill[fmt.Sprint("UID_", v.UserId, "SID_", v.ArticleId)] { // 如果内容存在就不插入
  180. continue
  181. }
  182. item := new(rai_serve.CygxRaiCompanyUserBill)
  183. item.Content = v.Title
  184. item.ServeTypeId = 5
  185. item.ServeTypeName = "阅读uv"
  186. item.UserId = v.UserId
  187. item.Mobile = v.Mobile
  188. item.Email = v.Email
  189. item.CompanyId = v.CompanyId
  190. item.CompanyName = v.CompanyName
  191. item.RealName = mapUserName[v.UserId]
  192. item.RegisterPlatform = v.RegisterPlatform
  193. item.ServeCount = 0.5
  194. if mapUserMaker[v.UserId] {
  195. item.IsKp = 1
  196. item.ServeCount = item.ServeCount * 3
  197. }
  198. item.SourceId = v.ArticleId
  199. item.Source = utils.CYGX_OBJ_ARTICLE
  200. item.CreateTime = time.Now()
  201. item.ViewTime = v.CreateTime
  202. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  203. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  204. if strings.Contains(v.CategoryName, "固收") {
  205. item.ChartPermissionName = utils.GU_SHOU_NAME
  206. item.ChartPermissionId = utils.GU_SHOU_ID_CHART
  207. }
  208. if strings.Contains(v.CategoryName, "策略") {
  209. item.ChartPermissionName = utils.CE_LUE_NAME
  210. item.ChartPermissionId = utils.CE_LUE_ID
  211. }
  212. items = append(items, item)
  213. }
  214. }
  215. //文章阅读记录内容 end
  216. //活动记录内容
  217. {
  218. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND a.activity_time > ? "
  219. signUpDetailList, e := models.GetSignupDetailBySignupjoinactivity(condition+" ORDER BY a.activity_time ASC ", pars)
  220. if e != nil {
  221. err = errors.New("GetSignupDetailBySignupjoinactivity, Err: " + e.Error())
  222. return
  223. }
  224. //文章阅读明细
  225. var conditionBill string
  226. var parsBill []interface{}
  227. conditionBill = " AND source = 'activity' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  228. parsBill = append(parsBill, companyIds, startWeekDate)
  229. listBillByActivity, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  230. if e != nil {
  231. err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
  232. return
  233. }
  234. mapActivityeBill := make(map[string]bool)
  235. for _, v := range listBillByActivity {
  236. mapActivityeBill[fmt.Sprint("UID_", v.Mobile, "SID_", v.SourceId)] = true
  237. }
  238. mapArticleBillDel := make(map[string]bool)
  239. for _, v := range signUpDetailList {
  240. mapArticleBillDel[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] = true
  241. }
  242. mapDelActivityBillDel := make(map[string]bool)
  243. for _, v := range signUpDetailList {
  244. mapDelActivityBillDel[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] = true
  245. }
  246. for _, v := range listBillByActivity {
  247. if !mapDelActivityBillDel[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] { // 如果内容存在就插入删除ID中
  248. delBillIds = append(delBillIds, v.BillId)
  249. }
  250. }
  251. for _, v := range signUpDetailList {
  252. if mapActivityeBill[fmt.Sprint("UID_", v.Mobile, "SID_", v.ActivityId)] { // 如果内容存在就不插入
  253. continue
  254. }
  255. item := new(rai_serve.CygxRaiCompanyUserBill)
  256. item.Content = v.ActivityName
  257. if v.ActivityType == 1 {
  258. item.ServeTypeId = 1
  259. item.ServeTypeName = "线上活动"
  260. } else {
  261. item.ServeTypeId = 2
  262. item.ServeTypeName = "线下活动"
  263. }
  264. if v.UserId == 0 && v.Mobile != "" {
  265. v.UserId = mapUserMobileUserId[v.Mobile] // 空降的部分联系人 userid 为0这里做一下修复
  266. }
  267. item.UserId = v.UserId
  268. item.Mobile = v.Mobile
  269. item.Email = v.Email
  270. item.CompanyId = v.CompanyId
  271. item.CompanyName = v.CompanyName
  272. item.RealName = v.RealName
  273. //item.RegisterPlatform = v.RegisterPlatform
  274. item.ServeCount = 1
  275. if mapUserMaker[v.UserId] {
  276. item.IsKp = 1
  277. item.ServeCount = item.ServeCount * 3
  278. }
  279. item.SourceId = v.ActivityId
  280. item.Source = utils.CYGX_OBJ_ACTIVITY
  281. item.CreateTime = time.Now()
  282. item.ViewTime = v.ActivityTime
  283. item.ChartPermissionName = v.ChartPermissionName
  284. item.ChartPermissionId = v.ChartPermissionId
  285. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  286. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  287. items = append(items, item)
  288. }
  289. }
  290. //活动记录内容 end
  291. //专项调研活动记录内容
  292. {
  293. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND a.activity_time > ? "
  294. activitySpecialList, e := models.GetCygxActivitySpecialMeetingDetailList(condition+" ORDER BY a.activity_time ASC ", pars)
  295. if e != nil {
  296. err = errors.New("GetCygxActivitySpecialMeetingDetailList, Err: " + e.Error())
  297. return
  298. }
  299. //专项调研活动明细
  300. var conditionBill string
  301. var parsBill []interface{}
  302. conditionBill = " AND source = 'activityspecial' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  303. parsBill = append(parsBill, companyIds, startWeekDate)
  304. listBillByActivitySpecial, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  305. if e != nil {
  306. err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
  307. return
  308. }
  309. mapActivitySpecial := make(map[string]bool)
  310. for _, v := range listBillByActivitySpecial {
  311. mapActivitySpecial[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  312. }
  313. mapDelActivitySpecial := make(map[string]bool)
  314. for _, v := range activitySpecialList {
  315. mapDelActivitySpecial[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] = true
  316. }
  317. for _, v := range listBillByActivitySpecial {
  318. if !mapDelActivitySpecial[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] { // 如果内容存在就插入删除ID中
  319. delBillIds = append(delBillIds, v.BillId)
  320. }
  321. }
  322. for _, v := range activitySpecialList {
  323. if mapActivitySpecial[fmt.Sprint("UID_", v.UserId, "SID_", v.ActivityId)] { // 如果内容存在就不插入
  324. continue
  325. }
  326. item := new(rai_serve.CygxRaiCompanyUserBill)
  327. item.Content = v.ResearchTheme
  328. item.ServeTypeId = 3
  329. item.ServeTypeName = "专项调研"
  330. item.UserId = v.UserId
  331. item.Mobile = v.Mobile
  332. item.Email = v.Email
  333. item.CompanyId = v.CompanyId
  334. item.CompanyName = v.CompanyName
  335. item.RealName = v.RealName
  336. //item.RegisterPlatform = v.RegisterPlatform
  337. item.ServeCount = 1
  338. if mapUserMaker[v.UserId] {
  339. item.IsKp = 1
  340. item.ServeCount = item.ServeCount * 3
  341. }
  342. item.SourceId = v.ActivityId
  343. item.Source = utils.CYGX_OBJ_ACTIVITYSPECIAL
  344. item.CreateTime = time.Now()
  345. item.ViewTime = v.ActivityTime
  346. item.ChartPermissionName = v.ChartPermissionName
  347. item.ChartPermissionId = v.ChartPermissionId
  348. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  349. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  350. items = append(items, item)
  351. }
  352. }
  353. //专项调研活动记录内容 end
  354. //1v1路演
  355. {
  356. condition = " AND art.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND rs.start_date > ? "
  357. calendarMeetingUserList, e := roadshow.GetRsCalendarMeetingUserList(condition+" ORDER BY rs.start_date ASC ", pars)
  358. if e != nil {
  359. err = errors.New("GetRsCalendarMeetingUserList, Err: " + e.Error())
  360. return
  361. }
  362. var rsCalendarIds []int
  363. for _, v := range calendarMeetingUserList {
  364. rsCalendarIds = append(rsCalendarIds, v.RsCalendarId)
  365. }
  366. //获取研究员信息
  367. researchers, e := roadshow.GetRsCalendarResearcherListByIds(rsCalendarIds)
  368. if e != nil {
  369. err = errors.New("GetRsCalendarResearcherListByIds, Err: " + e.Error())
  370. return
  371. }
  372. mapResearcherName := make(map[int][]string)
  373. for _, v := range researchers {
  374. mapResearcherName[v.RsCalendarId] = append(mapResearcherName[v.RsCalendarId], v.ResearcherName)
  375. }
  376. listEmail, e := models.GetAskEmail()
  377. if e != nil {
  378. err = errors.New("GetAskEmail, Err: " + e.Error())
  379. return
  380. }
  381. var ceLueResearcherName []string
  382. var guShouResearcherName []string
  383. for _, v := range listEmail {
  384. if v.ChartPermissionName == utils.CE_LUE_NAME {
  385. ceLueResearcherName = append(ceLueResearcherName, v.Name)
  386. }
  387. if v.ChartPermissionName == utils.GU_SHOU_NAME {
  388. guShouResearcherName = append(guShouResearcherName, v.Name)
  389. }
  390. }
  391. //专项调研活动明细
  392. var conditionBill string
  393. var parsBill []interface{}
  394. conditionBill = " AND source = 'rscalendar' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  395. parsBill = append(parsBill, companyIds, startWeekDate)
  396. listBillByRscalendar, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  397. if e != nil {
  398. err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
  399. return
  400. }
  401. mapRscalendarBill := make(map[string]bool)
  402. for _, v := range listBillByRscalendar {
  403. mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  404. }
  405. mapDelRscalendarBill := make(map[string]bool)
  406. for _, v := range calendarMeetingUserList {
  407. mapDelRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RsCalendarId)] = true
  408. }
  409. for _, v := range listBillByRscalendar {
  410. if !mapDelRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] { // 如果内容存在就插入删除ID中
  411. delBillIds = append(delBillIds, v.BillId)
  412. }
  413. }
  414. for _, v := range calendarMeetingUserList {
  415. if mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RsCalendarId)] { // 如果内容存在就不插入
  416. continue
  417. }
  418. item := new(rai_serve.CygxRaiCompanyUserBill)
  419. item.Content = strings.Join(mapResearcherName[v.RsCalendarId], ",")
  420. item.ServeTypeId = 4
  421. item.ServeTypeName = "一对一路演"
  422. item.UserId = v.UserId
  423. item.Mobile = v.Mobile
  424. item.Email = v.Email
  425. item.CompanyId = v.CompanyId
  426. item.CompanyName = v.CompanyName
  427. item.RealName = v.RealName
  428. //item.RegisterPlatform = v.RegisterPlatform
  429. item.ServeCount = 1.5
  430. if mapUserMaker[v.UserId] {
  431. item.IsKp = 1
  432. item.ServeCount = item.ServeCount * 3
  433. }
  434. item.SourceId = v.RsCalendarId
  435. item.Source = utils.CYGX_OBJ_RS_CALENDAR
  436. item.CreateTime = time.Now()
  437. item.ViewTime = v.StartDate + " " + v.StartTime
  438. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  439. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  440. if utils.InArrayByStr(guShouResearcherName, item.Content) {
  441. item.ChartPermissionName = utils.GU_SHOU_NAME
  442. item.ChartPermissionId = utils.GU_SHOU_ID_CHART
  443. }
  444. if utils.InArrayByStr(ceLueResearcherName, item.Content) {
  445. item.ChartPermissionName = utils.CE_LUE_NAME
  446. item.ChartPermissionId = utils.CE_LUE_ID
  447. }
  448. items = append(items, item)
  449. }
  450. }
  451. //1v1路演 end
  452. //交流反馈
  453. {
  454. condition = " AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND create_time > ? "
  455. userFeedbackList, e := rai_serve.GetCygxUserFeedbackList(condition+" ORDER BY user_feedback_id ASC ", pars)
  456. if e != nil {
  457. err = errors.New("GetCygxUserFeedbackList, Err: " + e.Error())
  458. return
  459. }
  460. //交流反馈明细
  461. var conditionBill string
  462. var parsBill []interface{}
  463. conditionBill = " AND source = 'userfeedback' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  464. parsBill = append(parsBill, companyIds, startWeekDate)
  465. listBillByuserFeedback, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  466. if e != nil {
  467. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  468. return
  469. }
  470. mapRscalendarBill := make(map[string]bool)
  471. for _, v := range listBillByuserFeedback {
  472. mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] = true
  473. }
  474. mapDelRscalendarBill := make(map[string]bool)
  475. for _, v := range userFeedbackList {
  476. mapDelRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.UserFeedbackId)] = true
  477. }
  478. for _, v := range listBillByuserFeedback {
  479. if !mapDelRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.SourceId)] { // 如果内容存在就插入删除ID中
  480. delBillIds = append(delBillIds, v.BillId)
  481. }
  482. }
  483. for _, v := range userFeedbackList {
  484. if mapRscalendarBill[fmt.Sprint("UID_", v.UserId, "SID_", v.UserFeedbackId)] { // 如果内容存在就不插入
  485. continue
  486. }
  487. item := new(rai_serve.CygxRaiCompanyUserBill)
  488. item.Content = v.Content
  489. item.ServeTypeId = 6
  490. item.ServeTypeName = "交流反馈"
  491. item.UserId = v.UserId
  492. item.Mobile = v.Mobile
  493. item.Email = v.Email
  494. item.CompanyId = v.CompanyId
  495. item.CompanyName = v.CompanyName
  496. item.RealName = v.RealName
  497. item.ServeCount = 1
  498. if mapUserMaker[v.UserId] {
  499. item.IsKp = 1
  500. item.ServeCount = item.ServeCount * 3
  501. }
  502. item.SourceId = v.UserFeedbackId
  503. item.Source = utils.CYGX_OBJ_USER_FEEDBACK
  504. item.CreateTime = time.Now()
  505. item.ViewTime = v.CreateTime
  506. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  507. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  508. items = append(items, item)
  509. }
  510. }
  511. //交流反馈 end
  512. //图表浏览记录
  513. {
  514. condition = " AND b.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND b.create_time > ? GROUP BY b.record_id "
  515. userChartRecordList, e := models.GetCygxChartRecordListNoLimit(condition, pars)
  516. if e != nil {
  517. err = errors.New("GetCygxChartRecordListNoLimit, Err: " + e.Error())
  518. return
  519. }
  520. //图表浏览记录明细
  521. var conditionBill string
  522. var parsBill []interface{}
  523. conditionBill = " AND source = 'newchart' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  524. parsBill = append(parsBill, companyIds, startWeekDate)
  525. listBillByChart, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  526. if e != nil {
  527. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  528. return
  529. }
  530. mapChartBill := make(map[string]bool)
  531. for _, v := range listBillByChart {
  532. mapChartBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] = true
  533. }
  534. for _, v := range userChartRecordList {
  535. if mapChartBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] { // 如果内容存在就不插入
  536. continue
  537. }
  538. item := new(rai_serve.CygxRaiCompanyUserBill)
  539. item.Content = v.Title
  540. item.ServeTypeId = 7
  541. item.ServeTypeName = "图表阅读uv"
  542. item.UserId = v.UserId
  543. item.Mobile = v.Mobile
  544. item.Email = v.Email
  545. item.CompanyId = v.CompanyId
  546. item.CompanyName = v.CompanyName
  547. item.RealName = v.RealName
  548. item.ServeCount = 0.5
  549. if mapUserMaker[v.UserId] {
  550. item.IsKp = 1
  551. item.ServeCount = item.ServeCount * 3
  552. }
  553. item.SourceId = v.ChartId
  554. item.RecordId = v.RecordId
  555. item.Source = utils.CYGX_OBJ_NEWCHART
  556. item.CreateTime = time.Now()
  557. item.ViewTime = v.CreateTime
  558. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  559. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  560. items = append(items, item)
  561. }
  562. }
  563. //图表浏览记录 end
  564. //活动音频记录
  565. {
  566. condition = " AND b.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND b.create_time > ? GROUP BY b.id "
  567. userActivityVoiceList, e := models.GetCygxActivityVoiceHistoryListNoLimit(condition, pars)
  568. if e != nil {
  569. err = errors.New("GetCygxActivityVoiceHistoryListNoLimit, Err: " + e.Error())
  570. return
  571. }
  572. //活动音频记录 明细
  573. var conditionBill string
  574. var parsBill []interface{}
  575. conditionBill = " AND source = 'activityvoice' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  576. parsBill = append(parsBill, companyIds, startWeekDate)
  577. listBillActivityVoice, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  578. if e != nil {
  579. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  580. return
  581. }
  582. mapActivityVoiceBill := make(map[string]bool)
  583. for _, v := range listBillActivityVoice {
  584. mapActivityVoiceBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] = true
  585. }
  586. for _, v := range userActivityVoiceList {
  587. if mapActivityVoiceBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] { // 如果内容存在就不插入
  588. continue
  589. }
  590. item := new(rai_serve.CygxRaiCompanyUserBill)
  591. item.Content = v.VoiceName
  592. item.ServeTypeId = 8
  593. item.ServeTypeName = "路演回放"
  594. item.UserId = v.UserId
  595. item.Mobile = v.Mobile
  596. item.Email = v.Email
  597. item.CompanyId = v.CompanyId
  598. item.CompanyName = v.CompanyName
  599. item.RealName = v.RealName
  600. item.ServeCount = 0.5
  601. if mapUserMaker[v.UserId] {
  602. item.IsKp = 1
  603. item.ServeCount = item.ServeCount * 3
  604. }
  605. item.SourceId = v.ActivityVoiceId
  606. item.RecordId = v.RecordId
  607. item.ActivityId = v.ActivityId
  608. item.Source = utils.CYGX_OBJ_ACTIVITYVOICE
  609. item.CreateTime = time.Now()
  610. item.ViewTime = v.CreateTime
  611. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  612. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  613. items = append(items, item)
  614. }
  615. }
  616. //活动音频记录 end
  617. //活动视频记录
  618. {
  619. condition = " AND b.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND b.create_time > ? GROUP BY b.id "
  620. userActivityVideoList, e := models.GetCygxActivityVideoHistoryListNoLimit(condition, pars)
  621. if e != nil {
  622. err = errors.New("GetCygxChartRecordListNoLimit, Err: " + e.Error())
  623. return
  624. }
  625. //活动视频记录 明细
  626. var conditionBill string
  627. var parsBill []interface{}
  628. conditionBill = " AND source = 'activityvideo' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  629. parsBill = append(parsBill, companyIds, startWeekDate)
  630. listBillActivityVideo, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  631. if e != nil {
  632. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  633. return
  634. }
  635. mapActivityVideoBill := make(map[string]bool)
  636. for _, v := range listBillActivityVideo {
  637. mapActivityVideoBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] = true
  638. }
  639. for _, v := range userActivityVideoList {
  640. if mapActivityVideoBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] { // 如果内容存在就不插入
  641. continue
  642. }
  643. item := new(rai_serve.CygxRaiCompanyUserBill)
  644. item.Content = v.VideoName
  645. item.ServeTypeId = 8
  646. item.ServeTypeName = "路演回放"
  647. item.UserId = v.UserId
  648. item.Mobile = v.Mobile
  649. item.Email = v.Email
  650. item.CompanyId = v.CompanyId
  651. item.CompanyName = v.CompanyName
  652. item.RealName = v.RealName
  653. item.ServeCount = 0.5
  654. if mapUserMaker[v.UserId] {
  655. item.IsKp = 1
  656. item.ServeCount = item.ServeCount * 3
  657. }
  658. item.SourceId = v.VideoId
  659. item.RecordId = v.RecordId
  660. item.ActivityId = v.ActivityId
  661. item.Source = utils.CYGX_OBJ_ACTIVITYVIDEO
  662. item.CreateTime = time.Now()
  663. item.ViewTime = v.CreateTime
  664. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  665. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  666. items = append(items, item)
  667. }
  668. }
  669. //活动视频记录 end
  670. //报告精选阅读记录
  671. {
  672. condition = " AND b.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND b.create_time > ? GROUP BY b.id "
  673. userReportSelectionList, e := models.GetCygxReportSelectionHistoryRecordRespLimit(condition, pars)
  674. if e != nil {
  675. err = errors.New("GetCygxChartRecordListNoLimit, Err: " + e.Error())
  676. return
  677. }
  678. //报告精选阅读记录 明细
  679. var conditionBill string
  680. var parsBill []interface{}
  681. conditionBill = " AND source = 'reportselection' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  682. parsBill = append(parsBill, companyIds, startWeekDate)
  683. listBillReportSelection, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  684. if e != nil {
  685. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  686. return
  687. }
  688. mapReportSelectionBill := make(map[string]bool)
  689. for _, v := range listBillReportSelection {
  690. mapReportSelectionBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] = true
  691. }
  692. for _, v := range userReportSelectionList {
  693. if mapReportSelectionBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] { // 如果内容存在就不插入
  694. continue
  695. }
  696. item := new(rai_serve.CygxRaiCompanyUserBill)
  697. item.Content = "重点公司"
  698. item.ServeTypeId = 5
  699. item.ServeTypeName = "阅读uv"
  700. item.UserId = v.UserId
  701. item.Mobile = v.Mobile
  702. item.Email = v.Email
  703. item.CompanyId = v.CompanyId
  704. item.CompanyName = v.CompanyName
  705. item.RealName = v.RealName
  706. item.ServeCount = 0.5
  707. if mapUserMaker[v.UserId] {
  708. item.IsKp = 1
  709. item.ServeCount = item.ServeCount * 3
  710. }
  711. item.SourceId = v.ArticleId
  712. item.RecordId = v.RecordId
  713. item.Source = utils.CYGX_OBJ_REPORTSELECTION
  714. item.CreateTime = time.Now()
  715. item.ViewTime = v.CreateTime
  716. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  717. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  718. items = append(items, item)
  719. }
  720. }
  721. //报告精选阅读记录 end
  722. //产品内测阅读记录
  723. {
  724. condition = " AND b.company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND b.create_time > ? GROUP BY b.id "
  725. userProductInteriorList, e := models.GetCygxProductInteriorHistoryListData(condition, pars)
  726. if e != nil {
  727. err = errors.New("GetCygxChartRecordListNoLimit, Err: " + e.Error())
  728. return
  729. }
  730. //产品内测阅读记录 明细
  731. var conditionBill string
  732. var parsBill []interface{}
  733. conditionBill = " AND source = 'productinterior' AND company_id IN (" + utils.GetOrmInReplace(lencompanyId) + ") AND view_time > ? "
  734. parsBill = append(parsBill, companyIds, startWeekDate)
  735. listBillProductInterior, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  736. if e != nil {
  737. err = errors.New("GetCygxRaiServeBillListAll, Err: " + e.Error())
  738. return
  739. }
  740. mapProductInteriorBill := make(map[string]bool)
  741. for _, v := range listBillProductInterior {
  742. mapProductInteriorBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] = true
  743. }
  744. for _, v := range userProductInteriorList {
  745. if mapProductInteriorBill[fmt.Sprint("UID_", v.UserId, "SID_", v.RecordId)] { // 如果内容存在就不插入
  746. continue
  747. }
  748. item := new(rai_serve.CygxRaiCompanyUserBill)
  749. item.Content = v.Title
  750. item.ServeTypeId = 5
  751. item.ServeTypeName = "阅读uv"
  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 = 0.5
  759. if mapUserMaker[v.UserId] {
  760. item.IsKp = 1
  761. item.ServeCount = item.ServeCount * 3
  762. }
  763. item.SourceId = v.ProductInteriorId
  764. item.RecordId = v.RecordId
  765. item.Source = utils.CYGX_OBJ_PRODUCTINTERIOR
  766. item.CreateTime = time.Now()
  767. item.ViewTime = v.CreateTime
  768. item.WeekStartDate, item.WeekEndDate = utils.GetMondayAndSundayByTimeString(item.ViewTime)
  769. item.MonthStartDate, item.MonthEndDate = utils.GetFirstAndLastDayOfMonth(item.ViewTime)
  770. items = append(items, item)
  771. }
  772. }
  773. //产品内测阅读记录 end
  774. //fmt.Println("items", len(items))
  775. //return
  776. if len(items) > 0 {
  777. var itemsAdd []*rai_serve.CygxRaiCompanyUserBill
  778. for k, v := range items {
  779. itemsAdd = append(itemsAdd, v)
  780. if len(itemsAdd)%2000 == 0 {
  781. fmt.Println(k)
  782. e = rai_serve.AddCygxRaiCompanyUserBilllMulti(itemsAdd)
  783. if e != nil {
  784. err = errors.New("AddCygxRaiServeBillMulti, Err: " + e.Error())
  785. return
  786. }
  787. itemsAdd = make([]*rai_serve.CygxRaiCompanyUserBill, 0)
  788. }
  789. }
  790. e = rai_serve.AddCygxRaiCompanyUserBilllMulti(itemsAdd)
  791. if e != nil {
  792. err = errors.New("AddCygxRaiCompanyUserBilllMulti, Err: " + e.Error())
  793. return
  794. }
  795. }
  796. fmt.Println("delBillIds", (delBillIds))
  797. fmt.Println("UpdateCygxRaiCompanyUserBill end")
  798. return
  799. }
  800. // 更新权益客户最近四周是否有决策人互动记录
  801. func UpdateCompanyProductIsUserMaker() (err error) {
  802. defer func() {
  803. if err != nil {
  804. fmt.Println(err)
  805. go utils.SendAlarmMsg("更新权益客户最近四周是否有决策人互动记录 失败: UpdateCompanyProductIsUserMaker Err"+err.Error(), 2)
  806. }
  807. }()
  808. fmt.Println(" UpdateCompanyProductIsUserMaker start")
  809. now := time.Now()
  810. weeks := 3
  811. monday := now.AddDate(0, 0, -int(now.Weekday()-time.Monday)-weeks*7)
  812. startDate := monday.Format(utils.FormatDate)
  813. var condition string
  814. var pars []interface{}
  815. condition = ` AND week_start_date >= ? AND is_kp = 1 GROUP BY company_id `
  816. pars = append(pars, startDate)
  817. //获取近四周之内含有KP的公司
  818. listKpCompanyId, e := rai_serve.GetCygxRaiCompanyUserBillListAll(condition, pars)
  819. if e != nil {
  820. err = errors.New("GetCygxRaiCompanyUserBillListAll, Err: " + e.Error())
  821. return
  822. }
  823. var companyIds []int
  824. for _, v := range listKpCompanyId {
  825. companyIds = append(companyIds, v.CompanyId)
  826. }
  827. companyIds = append(companyIds, 0)
  828. //if len(companyIds) == 0 {
  829. // return
  830. //}
  831. //fmt.Println(len(companyIds))
  832. e = company.UpdateRaiCompanyProductIsUserMakerByCompanyids(companyIds)
  833. if e != nil {
  834. err = errors.New("UpdateRaiCompanyProductIsUserMakerByCompanyids, Err: " + e.Error())
  835. return
  836. }
  837. fmt.Println(" UpdateCompanyProductIsUserMaker end")
  838. return
  839. }
  840. //func init() {
  841. // initCRm_16_9_v2()
  842. //}
  843. func initCRm_16_9() {
  844. var conditionBill string
  845. var parsBill []interface{}
  846. conditionBill = " AND month_start_date = '' LIMIT 10000 "
  847. listBillByYanxuanspecial, e := rai_serve.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  848. if e != nil {
  849. fmt.Println(e)
  850. return
  851. }
  852. for _, v := range listBillByYanxuanspecial {
  853. v.MonthStartDate, v.MonthEndDate = utils.GetFirstAndLastDayOfMonth(v.ViewTime)
  854. }
  855. e = rai_serve.UpdateCygxRaiCompanyUserBillMulti(listBillByYanxuanspecial)
  856. if e != nil {
  857. fmt.Println(e)
  858. return
  859. }
  860. fmt.Println("end")
  861. }
  862. func initCRm_16_9_v2() {
  863. var conditionBill string
  864. var parsBill []interface{}
  865. conditionBill = " AND month_start_date = '' LIMIT 10000 "
  866. listBillByYanxuanspecial, e := rai_serve.GetCygxRaiServeBillListAll(conditionBill, parsBill)
  867. if e != nil {
  868. fmt.Println(e)
  869. return
  870. }
  871. for _, v := range listBillByYanxuanspecial {
  872. v.MonthStartDate, v.MonthEndDate = utils.GetFirstAndLastDayOfMonth(v.ViewTime)
  873. }
  874. e = rai_serve.UpdateCygxRaiServeBillMulti(listBillByYanxuanspecial)
  875. if e != nil {
  876. fmt.Println(e)
  877. return
  878. }
  879. fmt.Println("end")
  880. }