activity_meet.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  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. )
  10. // 获取线上活动到会更新时间
  11. func GetActivityMeetUpdateTime(activityIdS []int) (mapResp map[int]string, err error) {
  12. defer func() {
  13. if err != nil {
  14. fmt.Println("err:", err)
  15. go alarm_msg.SendAlarmMsg("获取线上活动到会更新时间失败,Err:"+err.Error()+fmt.Sprint(activityIdS), 3)
  16. }
  17. }()
  18. lenNum := len(activityIdS)
  19. if lenNum == 0 {
  20. return
  21. }
  22. var condition string
  23. var pars []interface{}
  24. condition = ` AND a.activity_id IN (` + utils.GetOrmInReplace(lenNum) + `)`
  25. pars = append(pars, activityIdS)
  26. condition += ` GROUP BY a.activity_id `
  27. list, e := cygx.GetCygxActivityAttendanceDetailList(condition, pars, 0, lenNum)
  28. if e != nil {
  29. err = errors.New("GetCygxActivityAttendanceDetailList,Err" + e.Error())
  30. return
  31. }
  32. mapResp = make(map[int]string, 0)
  33. for _, v := range list {
  34. mapResp[v.ActivityId] = v.CreateTime.Format(utils.FormatDateTime)
  35. }
  36. return
  37. }
  38. func AddCygxActivityMeetDetailLogOffline(meetingUids string, activityId int) (err error) {
  39. defer func() {
  40. if err != nil {
  41. fmt.Println("err:", err)
  42. go alarm_msg.SendAlarmMsg("添加线下到会记录失败,Err:"+err.Error()+fmt.Sprint(activityId), 3)
  43. }
  44. }()
  45. if meetingUids == "" {
  46. return
  47. }
  48. list, e := cygx.GetOfflineMeetingListByUser(meetingUids, activityId)
  49. if e != nil {
  50. err = errors.New("GetOfflineMeetingListByUser" + e.Error())
  51. return
  52. }
  53. var companyIdArr []int
  54. var mobileArr []string
  55. var items []*cygx.CygxActivityMeetDetailLog
  56. if err != nil {
  57. return
  58. }
  59. //插入新的数据
  60. for _, v := range list {
  61. item := new(cygx.CygxActivityMeetDetailLog)
  62. item.ActivityId = v.ActivityId
  63. item.Mobile = v.Mobile
  64. item.CompanyName = v.CompanyName
  65. item.CompanyId = v.CompanyId
  66. item.CreateTime = v.CreateTime
  67. if v.Mobile != "" {
  68. mobileArr = append(mobileArr, v.Mobile)
  69. }
  70. if v.CompanyId > 0 {
  71. companyIdArr = append(companyIdArr, v.CompanyId)
  72. }
  73. items = append(items, item)
  74. }
  75. var condition string
  76. var pars []interface{}
  77. var itemsUpdateCompany []*cygx.MeetDetailLoggGroupCount
  78. lencompanyIdArr := len(companyIdArr)
  79. if lencompanyIdArr > 0 {
  80. condition = ` AND company_id IN (` + utils.GetOrmInReplace(lencompanyIdArr) + `) GROUP BY company_id `
  81. pars = append(pars, companyIdArr)
  82. listCompanyIdCount, e := cygx.GetMeetDetailLogGroupCount(condition, pars)
  83. if e != nil {
  84. err = errors.New("GetMeetDetailLogGroupCount" + e.Error())
  85. return
  86. }
  87. for _, v := range listCompanyIdCount {
  88. item := new(cygx.MeetDetailLoggGroupCount)
  89. item.CompanyId = v.CompanyId
  90. item.Count = v.Count
  91. itemsUpdateCompany = append(itemsUpdateCompany, item)
  92. }
  93. }
  94. fmt.Println(111)
  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. return err
  209. }
  210. // AddctivitySignupDetailListByHand 手动匹配进门财经信息
  211. func AddctivitySignupDetailListByHand(itemsDetail []*cygx.CygxActivityAttendanceDetail, activityId int) (err error) {
  212. defer func() {
  213. if err != nil {
  214. fmt.Println(err)
  215. go alarm_msg.SendAlarmMsg("通过进门财经添加用户参数信息失败 ErrMsg:"+err.Error(), 2)
  216. }
  217. }()
  218. activityIds := make([]int, 0)
  219. activityIds = append(activityIds, activityId)
  220. actLen := len(activityIds)
  221. var condition string
  222. var pars []interface{}
  223. if actLen > 0 {
  224. condition += ` AND activity_id IN (` + utils.GetOrmInReplace(actLen) + `)`
  225. pars = append(pars, activityIds)
  226. }
  227. signUpDetailList, err := cygx.GetSignupDetailList(condition, pars)
  228. if err != nil && err.Error() != utils.ErrNoRow() {
  229. return err
  230. }
  231. mapsignUpDetai := make(map[string]string)
  232. if len(signUpDetailList) > 0 {
  233. for _, v := range signUpDetailList {
  234. mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", v.Mobile)] = v.Mobile
  235. }
  236. }
  237. //获取当天已经结束了 活动的报名人数
  238. signUpList, err := cygx.GetSignupDetailBySignup(condition, pars)
  239. if err != nil && err.Error() != utils.ErrNoRow() {
  240. return err
  241. }
  242. //建立外呼号与手机号的绑定
  243. mapsignUp := make(map[string]string)
  244. if len(signUpList) > 0 {
  245. for _, v := range signUpList {
  246. mapsignUp[fmt.Sprint(v.OutboundMobile)] = v.Mobile
  247. }
  248. }
  249. var itemsAdd []*cygx.CygxActivitySignupDetail
  250. var itemsUpdate []*cygx.CygxActivitySignupDetail
  251. var mobiles []string
  252. mobileMap := make(map[string]bool)
  253. mobileUserMap := make(map[string]int)
  254. for _, v := range itemsDetail {
  255. if !mobileMap[v.Mobile] {
  256. mobiles = append(mobiles, v.Mobile)
  257. }
  258. mobileMap[v.Mobile] = true
  259. }
  260. //根据手机号获取这些用户的信息
  261. listUser, e := models.GetWxUserByOutboundMobiles(mobiles)
  262. if e != nil {
  263. err = errors.New("GetWxUserOutboundMobiles, Err: " + e.Error())
  264. return
  265. }
  266. for _, v := range listUser {
  267. mobileUserMap[v.Mobile] = int(v.UserId)
  268. }
  269. for _, v := range itemsDetail {
  270. var item = new(cygx.CygxActivitySignupDetail)
  271. item.ActivityId = v.ActivityId
  272. //item.RealName = v.RealName
  273. //如果手机号存在那么就是报名的,不存在就是直接参与的
  274. if _, ok := mapsignUp[v.Mobile]; ok {
  275. item.Mobile = mapsignUp[v.Mobile]
  276. } else {
  277. item.Mobile = v.Mobile
  278. }
  279. item.UserId = mobileUserMap[v.Mobile]
  280. item.RealName = v.RealName
  281. item.OutboundMobile = v.Mobile
  282. item.CompanyName = v.CompanyName
  283. item.CompanyId = v.CompanyId
  284. item.SellerName = v.SellerName
  285. item.FirstMeetingTime = v.FirstMeetingTime
  286. item.LastMeetingTime = v.LastMeetingTime
  287. item.Duration = v.Duration
  288. item.MeetingTypeStr = v.MeetingTypeStr
  289. item.MeetingAuthentication = v.MeetingAuthentication
  290. item.MeetingStatusStr = v.MeetingStatusStr
  291. item.CreateTime = v.CreateTime
  292. item.Position = v.Position
  293. item.IsMeeting = 1
  294. item.UseridEntity = v.UseridEntity
  295. item.ActivityTime = v.ActivityTime
  296. item.CrmCompanyMapStatusId = v.CrmCompanyMapStatusId
  297. if _, ok := mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", item.Mobile)]; !ok {
  298. itemsAdd = append(itemsAdd, item)
  299. } else {
  300. itemsUpdate = append(itemsUpdate, item)
  301. }
  302. }
  303. //return err
  304. if len(itemsAdd) > 0 {
  305. err = cygx.AddCygxActivitySignupDetail(itemsAdd)
  306. if err != nil {
  307. return
  308. }
  309. }
  310. if len(itemsUpdate) > 0 {
  311. err = cygx.UpdateActivitySignupDetailMulti(itemsUpdate)
  312. if err != nil {
  313. return
  314. }
  315. }
  316. return err
  317. }
  318. // AddctivitySignupDetailListByAdminSignup 已结束的活动,管理员手动添加报名,把信息写入到联系人列表参会信息中
  319. func AddctivitySignupDetailListByAdminSignup(activityIdsStr string) (err error) {
  320. defer func() {
  321. if err != nil {
  322. fmt.Println(err)
  323. go alarm_msg.SendAlarmMsg(fmt.Sprint("已结束的活动,管理员手动添加报名,把信息写入到联系人列表参会信息中 ErrMsg:"+err.Error(), "activityIds:", activityIdsStr), 2)
  324. }
  325. }()
  326. var condition string
  327. var pars []interface{}
  328. condition = ` AND active_state = 3 AND activity_id IN (` + activityIdsStr + `) `
  329. list, e := cygx.GetActivityListAll(condition, pars, 0, 9999)
  330. if e != nil && e.Error() != utils.ErrNoRow() {
  331. err = errors.New("GetWxUserOutboundMobiles, Err: " + e.Error())
  332. return
  333. }
  334. if len(list) == 0 {
  335. return
  336. }
  337. var activityIds []int
  338. for _, v := range list {
  339. activityIds = append(activityIds, v.ActivityId)
  340. }
  341. actLen := len(activityIds)
  342. condition = ` AND activity_id IN (` + utils.GetOrmInReplace(actLen) + `)`
  343. pars = append(pars, activityIds)
  344. //获取已经写入的信息,并建立map
  345. signUpDetailList, err := cygx.GetSignupDetailList(condition, pars)
  346. if err != nil && err.Error() != utils.ErrNoRow() {
  347. return err
  348. }
  349. mapsignUpDetai := make(map[string]string)
  350. if len(signUpDetailList) > 0 {
  351. for _, v := range signUpDetailList {
  352. mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", v.Mobile)] = v.Mobile
  353. }
  354. }
  355. pars = make([]interface{}, 0)
  356. condition = ` AND activity_id IN (` + utils.GetOrmInReplace(actLen) + `) AND do_fail_type = 0`
  357. pars = append(pars, activityIds)
  358. //获取成功报名的人员信息
  359. signUpList, err := cygx.GetSignupDetailBySignup(condition, pars)
  360. if err != nil && err.Error() != utils.ErrNoRow() {
  361. return err
  362. }
  363. //建立外呼号与手机号的绑定
  364. mapsignUp := make(map[string]string)
  365. if len(signUpList) > 0 {
  366. for _, v := range signUpList {
  367. mapsignUp[fmt.Sprint(v.OutboundMobile)] = v.Mobile
  368. }
  369. }
  370. var items []*cygx.CygxActivitySignupDetail
  371. if len(signUpList) > 0 {
  372. for _, v := range signUpList {
  373. if _, ok := mapsignUpDetai[fmt.Sprint("ActivityId", v.ActivityId, "Mobile", v.Mobile)]; !ok {
  374. item := new(cygx.CygxActivitySignupDetail)
  375. item.UserId = v.UserId
  376. item.RealName = v.RealName
  377. item.SellerName = v.SellerName
  378. item.ActivityId = v.ActivityId
  379. item.CreateTime = v.CreateTime
  380. item.Mobile = v.Mobile
  381. item.OutboundMobile = v.OutboundMobile
  382. item.Email = v.Email
  383. item.CompanyId = v.CompanyId
  384. item.CompanyName = v.CompanyName
  385. item.SignupType = v.SignupType
  386. item.FailType = v.FailType
  387. item.DoFailType = v.DoFailType
  388. items = append(items, item)
  389. }
  390. }
  391. }
  392. if len(items) > 0 {
  393. e = cygx.AddCygxActivitySignupDetail(items)
  394. if e != nil {
  395. err = errors.New("AddCygxActivitySignupDetail, Err: " + e.Error())
  396. return
  397. }
  398. }
  399. return err
  400. }