activity_meet.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. package cygx
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hz_crm_api/models"
  6. "hongze/hz_crm_api/models/cygx"
  7. "hongze/hz_crm_api/services/alarm_msg"
  8. "hongze/hz_crm_api/utils"
  9. "strconv"
  10. )
  11. // 获取线上活动到会更新时间
  12. func GetActivityMeetUpdateTime(activityIdS []int) (mapResp map[int]string, err error) {
  13. defer func() {
  14. if err != nil {
  15. fmt.Println("err:", err)
  16. go alarm_msg.SendAlarmMsg("获取线上活动到会更新时间失败,Err:"+err.Error()+fmt.Sprint(activityIdS), 3)
  17. }
  18. }()
  19. lenNum := len(activityIdS)
  20. if lenNum == 0 {
  21. return
  22. }
  23. var condition string
  24. var pars []interface{}
  25. condition = ` AND a.activity_id IN (` + utils.GetOrmInReplace(lenNum) + `)`
  26. pars = append(pars, activityIdS)
  27. condition += ` GROUP BY a.activity_id `
  28. list, e := cygx.GetCygxActivityAttendanceDetailList(condition, pars, 0, lenNum)
  29. if e != nil {
  30. err = errors.New("GetCygxActivityAttendanceDetailList,Err" + e.Error())
  31. return
  32. }
  33. mapResp = make(map[int]string, 0)
  34. for _, v := range list {
  35. mapResp[v.ActivityId] = v.CreateTime.Format(utils.FormatDateTime)
  36. }
  37. return
  38. }
  39. func AddCygxActivityMeetDetailLogOffline(meetingUids string, activityId int) (err error) {
  40. defer func() {
  41. if err != nil {
  42. fmt.Println("err:", err)
  43. go alarm_msg.SendAlarmMsg("添加线下到会记录失败,Err:"+err.Error()+fmt.Sprint(activityId), 3)
  44. }
  45. }()
  46. if meetingUids == "" {
  47. return
  48. }
  49. list, e := cygx.GetOfflineMeetingListByUser(meetingUids, activityId)
  50. if e != nil {
  51. err = errors.New("GetOfflineMeetingListByUser" + e.Error())
  52. return
  53. }
  54. var companyIdArr []int
  55. var mobileArr []string
  56. var items []*cygx.CygxActivityMeetDetailLog
  57. if err != nil {
  58. return
  59. }
  60. //插入新的数据
  61. for _, v := range list {
  62. item := new(cygx.CygxActivityMeetDetailLog)
  63. item.ActivityId = v.ActivityId
  64. item.Mobile = v.Mobile
  65. item.CompanyName = v.CompanyName
  66. item.CompanyId = v.CompanyId
  67. item.CreateTime = v.CreateTime
  68. if v.Mobile != "" {
  69. mobileArr = append(mobileArr, v.Mobile)
  70. }
  71. if v.CompanyId > 0 {
  72. companyIdArr = append(companyIdArr, v.CompanyId)
  73. }
  74. items = append(items, item)
  75. }
  76. var condition string
  77. var pars []interface{}
  78. var itemsUpdateCompany []*cygx.MeetDetailLoggGroupCount
  79. lencompanyIdArr := len(companyIdArr)
  80. if lencompanyIdArr > 0 {
  81. condition = ` AND company_id IN (` + utils.GetOrmInReplace(lencompanyIdArr) + `) GROUP BY company_id `
  82. pars = append(pars, companyIdArr)
  83. listCompanyIdCount, e := cygx.GetMeetDetailLogGroupCount(condition, pars)
  84. if e != nil {
  85. err = errors.New("GetMeetDetailLogGroupCount" + e.Error())
  86. return
  87. }
  88. for _, v := range listCompanyIdCount {
  89. item := new(cygx.MeetDetailLoggGroupCount)
  90. item.CompanyId = v.CompanyId
  91. item.Count = v.Count
  92. itemsUpdateCompany = append(itemsUpdateCompany, item)
  93. }
  94. }
  95. var itemsUpdateMobile []*cygx.MeetDetailLoggGroupCount
  96. lenmobileArr := len(mobileArr)
  97. if lenmobileArr > 0 {
  98. pars = make([]interface{}, 0)
  99. condition = ` AND mobile IN (` + utils.GetOrmInReplace(lenmobileArr) + `) GROUP BY mobile `
  100. pars = append(pars, mobileArr)
  101. listMobileCount, e := cygx.GetMeetDetailLogGroupCount(condition, pars)
  102. if e != nil {
  103. err = errors.New("GetMeetDetailLogGroupCount" + e.Error())
  104. return
  105. }
  106. for _, v := range listMobileCount {
  107. item := new(cygx.MeetDetailLoggGroupCount)
  108. item.Mobile = v.Mobile
  109. item.Count = v.Count
  110. itemsUpdateMobile = append(itemsUpdateMobile, item)
  111. }
  112. }
  113. e = cygx.UpdatecygxActivityMeetDetailLogOffline(items, itemsUpdateCompany, itemsUpdateMobile, activityId)
  114. if e != nil {
  115. err = errors.New("UpdatecygxActivityMeetDetailLogOffline" + e.Error())
  116. return
  117. }
  118. return
  119. }
  120. // AddctivitySignupDetailList
  121. func AddctivitySignupDetailList(itemsDetail []*cygx.CygxActivitySignupDetail, activityId int) (err error) {
  122. defer func() {
  123. if err != nil {
  124. fmt.Println(err)
  125. go alarm_msg.SendAlarmMsg("通过进门财经添加用户参数信息失败 ErrMsg:"+err.Error(), 2)
  126. }
  127. }()
  128. activityIds := make([]int, 0)
  129. activityIds = append(activityIds, activityId)
  130. actLen := len(activityIds)
  131. var condition string
  132. var pars []interface{}
  133. if actLen > 0 {
  134. condition += ` AND activity_id IN (` + utils.GetOrmInReplace(actLen) + `)`
  135. pars = append(pars, activityIds)
  136. }
  137. signUpDetailList, err := cygx.GetSignupDetailList(condition, pars)
  138. if err != nil && err.Error() != utils.ErrNoRow() {
  139. return err
  140. }
  141. mapsignUpDetai := make(map[string]string)
  142. if len(signUpDetailList) > 0 {
  143. for _, v := range signUpDetailList {
  144. mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", v.Mobile)] = v.Mobile
  145. }
  146. }
  147. //获取当天已经结束了 活动的报名人数
  148. signUpList, err := cygx.GetSignupDetailBySignup(condition, pars)
  149. if err != nil && err.Error() != utils.ErrNoRow() {
  150. return err
  151. }
  152. //建立外呼号与手机号的绑定
  153. mapsignUp := make(map[string]string)
  154. if len(signUpList) > 0 {
  155. for _, v := range signUpList {
  156. mapsignUp[fmt.Sprint(v.OutboundMobile)] = v.Mobile
  157. }
  158. }
  159. var itemsAdd []*cygx.CygxActivitySignupDetail
  160. var itemsUpdate []*cygx.CygxActivitySignupDetail
  161. for _, v := range itemsDetail {
  162. var item = new(cygx.CygxActivitySignupDetail)
  163. item.ActivityId = v.ActivityId
  164. //item.RealName = v.RealName
  165. //如果手机号存在那么就是报名的,不存在就是直接参与的
  166. if _, ok := mapsignUp[v.Mobile]; ok {
  167. item.Mobile = mapsignUp[v.Mobile]
  168. } else {
  169. item.Mobile = v.Mobile
  170. }
  171. item.UserId = v.UserId
  172. item.RealName = v.RealName
  173. item.OutboundMobile = v.Mobile
  174. item.CompanyName = v.CompanyName
  175. item.CompanyId = v.CompanyId
  176. item.SellerName = v.SellerName
  177. item.FirstMeetingTime = v.FirstMeetingTime
  178. item.LastMeetingTime = v.LastMeetingTime
  179. item.Duration = v.Duration
  180. item.MeetingTypeStr = v.MeetingTypeStr
  181. item.MeetingAuthentication = v.MeetingAuthentication
  182. item.MeetingStatusStr = v.MeetingStatusStr
  183. item.CreateTime = v.CreateTime
  184. item.Position = v.Position
  185. item.IsMeeting = v.IsMeeting
  186. item.UseridEntity = v.UseridEntity
  187. item.ActivityTime = v.ActivityTime
  188. item.CrmCompanyMapStatusId = v.CrmCompanyMapStatusId
  189. if _, ok := mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", item.Mobile)]; !ok {
  190. itemsAdd = append(itemsAdd, item)
  191. } else {
  192. itemsUpdate = append(itemsUpdate, item)
  193. }
  194. }
  195. //return err
  196. if len(itemsAdd) > 0 {
  197. err = cygx.AddCygxActivitySignupDetail(itemsAdd)
  198. if err != nil {
  199. return
  200. }
  201. }
  202. if len(itemsUpdate) > 0 {
  203. err = cygx.UpdateActivitySignupDetailMulti(itemsUpdate)
  204. if err != nil {
  205. return
  206. }
  207. }
  208. //添加到Redis队列消息中,处理用户标签
  209. for _, v := range itemsAdd {
  210. if v.UserId > 0 {
  211. ActivityWxUserRaiLabelRedisAdd(v.ActivityId, v.UserId, v.CreateTime)
  212. }
  213. }
  214. return err
  215. }
  216. // AddctivitySignupDetailListByHand 手动匹配进门财经信息
  217. func AddctivitySignupDetailListByHand(itemsDetail []*cygx.CygxActivityAttendanceDetail, activityId int) (err error) {
  218. defer func() {
  219. if err != nil {
  220. fmt.Println(err)
  221. go alarm_msg.SendAlarmMsg("通过进门财经添加用户参数信息失败 ErrMsg:"+err.Error(), 2)
  222. }
  223. }()
  224. activityIds := make([]int, 0)
  225. activityIds = append(activityIds, activityId)
  226. actLen := len(activityIds)
  227. var condition string
  228. var pars []interface{}
  229. if actLen > 0 {
  230. condition += ` AND activity_id IN (` + utils.GetOrmInReplace(actLen) + `)`
  231. pars = append(pars, activityIds)
  232. }
  233. signUpDetailList, err := cygx.GetSignupDetailList(condition, pars)
  234. if err != nil && err.Error() != utils.ErrNoRow() {
  235. return err
  236. }
  237. mapsignUpDetai := make(map[string]string)
  238. if len(signUpDetailList) > 0 {
  239. for _, v := range signUpDetailList {
  240. mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", v.Mobile)] = v.Mobile
  241. }
  242. }
  243. //获取当天已经结束了 活动的报名人数
  244. signUpList, err := cygx.GetSignupDetailBySignup(condition, pars)
  245. if err != nil && err.Error() != utils.ErrNoRow() {
  246. return err
  247. }
  248. //建立外呼号与手机号的绑定
  249. mapsignUp := make(map[string]string)
  250. if len(signUpList) > 0 {
  251. for _, v := range signUpList {
  252. mapsignUp[fmt.Sprint(v.OutboundMobile)] = v.Mobile
  253. }
  254. }
  255. var itemsAdd []*cygx.CygxActivitySignupDetail
  256. var itemsUpdate []*cygx.CygxActivitySignupDetail
  257. var mobiles []string
  258. mobileMap := make(map[string]bool)
  259. mobileUserMap := make(map[string]int)
  260. for _, v := range itemsDetail {
  261. if !mobileMap[v.Mobile] {
  262. mobiles = append(mobiles, v.Mobile)
  263. }
  264. mobileMap[v.Mobile] = true
  265. }
  266. //根据手机号获取这些用户的信息
  267. listUser, e := models.GetWxUserByOutboundMobiles(mobiles)
  268. if e != nil {
  269. err = errors.New("GetWxUserOutboundMobiles, Err: " + e.Error())
  270. return
  271. }
  272. for _, v := range listUser {
  273. mobileUserMap[v.Mobile] = int(v.UserId)
  274. }
  275. for _, v := range itemsDetail {
  276. var item = new(cygx.CygxActivitySignupDetail)
  277. item.ActivityId = v.ActivityId
  278. //item.RealName = v.RealName
  279. //如果手机号存在那么就是报名的,不存在就是直接参与的
  280. if _, ok := mapsignUp[v.Mobile]; ok {
  281. item.Mobile = mapsignUp[v.Mobile]
  282. } else {
  283. item.Mobile = v.Mobile
  284. }
  285. item.UserId = mobileUserMap[v.Mobile]
  286. item.RealName = v.RealName
  287. item.OutboundMobile = v.Mobile
  288. item.CompanyName = v.CompanyName
  289. item.CompanyId = v.CompanyId
  290. item.SellerName = v.SellerName
  291. item.FirstMeetingTime = v.FirstMeetingTime
  292. item.LastMeetingTime = v.LastMeetingTime
  293. item.Duration = v.Duration
  294. item.MeetingTypeStr = v.MeetingTypeStr
  295. item.MeetingAuthentication = v.MeetingAuthentication
  296. item.MeetingStatusStr = v.MeetingStatusStr
  297. item.CreateTime = v.CreateTime
  298. item.Position = v.Position
  299. item.IsMeeting = 1
  300. item.UseridEntity = v.UseridEntity
  301. item.ActivityTime = v.ActivityTime
  302. item.CrmCompanyMapStatusId = v.CrmCompanyMapStatusId
  303. if _, ok := mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", item.Mobile)]; !ok {
  304. itemsAdd = append(itemsAdd, item)
  305. } else {
  306. itemsUpdate = append(itemsUpdate, item)
  307. }
  308. }
  309. //return err
  310. if len(itemsAdd) > 0 {
  311. err = cygx.AddCygxActivitySignupDetail(itemsAdd)
  312. if err != nil {
  313. return
  314. }
  315. }
  316. if len(itemsUpdate) > 0 {
  317. err = cygx.UpdateActivitySignupDetailMulti(itemsUpdate)
  318. if err != nil {
  319. return
  320. }
  321. }
  322. //添加到Redis队列消息中,处理用户标签
  323. for _, v := range itemsAdd {
  324. if v.UserId > 0 {
  325. ActivityWxUserRaiLabelRedisAdd(v.ActivityId, v.UserId, v.CreateTime)
  326. }
  327. }
  328. return err
  329. }
  330. // AddctivitySignupDetailListByAdminSignup 已结束的活动,管理员手动添加报名,把信息写入到联系人列表参会信息中
  331. func AddctivitySignupDetailListByAdminSignup(activityIdsStr string) (err error) {
  332. defer func() {
  333. if err != nil {
  334. fmt.Println(err)
  335. go alarm_msg.SendAlarmMsg(fmt.Sprint("已结束的活动,管理员手动添加报名,把信息写入到联系人列表参会信息中 ErrMsg:"+err.Error(), "activityIds:", activityIdsStr), 2)
  336. }
  337. }()
  338. var condition string
  339. var pars []interface{}
  340. condition = ` AND active_state = 3 AND activity_id IN (` + activityIdsStr + `) `
  341. list, e := cygx.GetActivityListAll(condition, pars, 0, 9999)
  342. if e != nil && e.Error() != utils.ErrNoRow() {
  343. err = errors.New("GetWxUserOutboundMobiles, Err: " + e.Error())
  344. return
  345. }
  346. if len(list) == 0 {
  347. return
  348. }
  349. var activityIds []int
  350. for _, v := range list {
  351. activityIds = append(activityIds, v.ActivityId)
  352. }
  353. actLen := len(activityIds)
  354. condition = ` AND activity_id IN (` + utils.GetOrmInReplace(actLen) + `)`
  355. pars = append(pars, activityIds)
  356. //获取已经写入的信息,并建立map
  357. signUpDetailList, err := cygx.GetSignupDetailList(condition, pars)
  358. if err != nil && err.Error() != utils.ErrNoRow() {
  359. return err
  360. }
  361. mapsignUpDetai := make(map[string]string)
  362. if len(signUpDetailList) > 0 {
  363. for _, v := range signUpDetailList {
  364. mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", v.Mobile)] = v.Mobile
  365. }
  366. }
  367. pars = make([]interface{}, 0)
  368. condition = ` AND activity_id IN (` + utils.GetOrmInReplace(actLen) + `) AND do_fail_type = 0`
  369. pars = append(pars, activityIds)
  370. //获取成功报名的人员信息
  371. signUpList, err := cygx.GetSignupDetailBySignup(condition, pars)
  372. if err != nil && err.Error() != utils.ErrNoRow() {
  373. return err
  374. }
  375. //建立外呼号与手机号的绑定
  376. mapsignUp := make(map[string]string)
  377. if len(signUpList) > 0 {
  378. for _, v := range signUpList {
  379. mapsignUp[fmt.Sprint(v.OutboundMobile)] = v.Mobile
  380. }
  381. }
  382. var items []*cygx.CygxActivitySignupDetail
  383. if len(signUpList) > 0 {
  384. for _, v := range signUpList {
  385. if _, ok := mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", v.Mobile)]; !ok {
  386. item := new(cygx.CygxActivitySignupDetail)
  387. item.UserId = v.UserId
  388. item.RealName = v.RealName
  389. item.SellerName = v.SellerName
  390. item.ActivityId = v.ActivityId
  391. item.CreateTime = v.CreateTime
  392. item.Mobile = v.Mobile
  393. item.OutboundMobile = v.OutboundMobile
  394. item.Email = v.Email
  395. item.CompanyId = v.CompanyId
  396. item.CompanyName = v.CompanyName
  397. item.SignupType = v.SignupType
  398. item.FailType = v.FailType
  399. item.DoFailType = v.DoFailType
  400. items = append(items, item)
  401. }
  402. }
  403. }
  404. if len(items) > 0 {
  405. e = cygx.AddCygxActivitySignupDetail(items)
  406. if e != nil {
  407. err = errors.New("AddCygxActivitySignupDetail, Err: " + e.Error())
  408. return
  409. }
  410. //添加到Redis队列消息中,处理用户标签
  411. for _, v := range items {
  412. if v.UserId > 0 {
  413. ActivityWxUserRaiLabelRedisAdd(v.ActivityId, v.UserId, v.CreateTime)
  414. }
  415. }
  416. }
  417. return err
  418. }
  419. func init77777() {
  420. var condition string
  421. var pars []interface{}
  422. listAct, errList := cygx.GetActivityListAll(condition+"AND active_state = 3 AND activity_id > 3000 AND publish_status = 1 ", pars, 0, 9999)
  423. if errList != nil {
  424. fmt.Println(errList)
  425. return
  426. }
  427. fmt.Println(len(listAct))
  428. for _, v := range listAct {
  429. condition = ` AND a.activity_id = ` + strconv.Itoa(v.ActivityId)
  430. //pars = append(pars)
  431. list, e := cygx.GetCygxActivityAttendanceDetailList(condition, pars, 0, 999)
  432. if e != nil {
  433. fmt.Println(e)
  434. return
  435. }
  436. fmt.Println("ActivityId", v.ActivityId, "list", len(list))
  437. AddctivitySignupDetailListByHand(list, v.ActivityId)
  438. }
  439. }