activity_meeting.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. package services
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_cygx/models"
  7. "hongze/hongze_cygx/utils"
  8. "strconv"
  9. "strings"
  10. "time"
  11. )
  12. //func init() {
  13. // fmt.Println(strings.Contains("渠道新声第583期运动服饰渠道调研更新反馈", "运动服饰渠道调研更新反馈"))
  14. // fmt.Println(len("反馈"))
  15. // GroupingActivityToJmcj()
  16. // GetActivityMeetingByJmcj()
  17. //}
  18. // GroupingActivityToJmcj 建立与进门财经的活动关联
  19. func GroupingActivityToJmcj(cont context.Context) (err error) {
  20. //func GroupingActivityToJmcj() (err error) {
  21. defer func() {
  22. if err != nil {
  23. fmt.Println(err)
  24. go utils.SendAlarmMsg("建立与进门财经的活动关联失败"+err.Error(), 2)
  25. }
  26. }()
  27. dateTime := time.Now().AddDate(0, 0, -7).Format(utils.FormatDate)
  28. dateNow := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
  29. startDate := dateTime + " 00:00:00"
  30. endDate := dateNow + " 23:59:59"
  31. var condition string
  32. var pars []interface{}
  33. condition = " AND roadshow_begin_time BETWEEN ? AND ? "
  34. //condition += " AND roadshow_id = 95871 "
  35. pars = append(pars, startDate, endDate)
  36. condition += ` GROUP BY roadshow_id `
  37. listJmcj, e := models.GetJmcjRoadshowDataList(condition, pars)
  38. if e != nil {
  39. err = errors.New("GetJmcjRoadshowDataList, Err: " + e.Error())
  40. return
  41. }
  42. textLen := 15
  43. pars = make([]interface{}, 0)
  44. condition = " AND activity_time BETWEEN ? AND ? AND publish_status = 1 AND jmcj_activity_id = '' "
  45. //condition += " AND activity_id = 1339 "
  46. pars = append(pars, startDate, endDate)
  47. listHz, e := models.GetActivityListByCondition(condition, pars)
  48. if e != nil {
  49. err = errors.New("GetActivityListByCondition, Err: " + e.Error())
  50. return
  51. }
  52. mapGroupActivityid := make(map[int]string)
  53. //通过进门财经匹配弘则
  54. for _, vJmcj := range listJmcj {
  55. var roadshowTitle, roadshowTitle1, roadshowTitle2, roadshowTitle3, roadshowTitle4 string
  56. roadshowTitle = vJmcj.RoadshowTitle
  57. roadshowTitle = strings.Replace(roadshowTitle, " ", "", -1)
  58. roadshowBeginTime := utils.TimeRemoveHms2(vJmcj.RoadshowBeginTime)
  59. nameSlice1 := strings.Split(roadshowTitle, "|")
  60. nameSlice2 := strings.Split(roadshowTitle, ":")
  61. nameSlice3 := strings.Split(roadshowTitle, "】")
  62. nameSlice4 := strings.Split(roadshowTitle, "-")
  63. if len(nameSlice1) >= 1 {
  64. roadshowTitle1 = nameSlice1[len(nameSlice1)-1]
  65. }
  66. if len(nameSlice2) >= 1 {
  67. roadshowTitle2 = nameSlice2[len(nameSlice2)-1]
  68. }
  69. if len(nameSlice3) >= 1 {
  70. roadshowTitle3 = nameSlice3[len(nameSlice3)-1]
  71. }
  72. if len(nameSlice4) >= 1 {
  73. roadshowTitle4 = nameSlice4[len(nameSlice4)-1]
  74. }
  75. if roadshowTitle == "" {
  76. continue
  77. }
  78. //fmt.Println(roadshowTitle1)
  79. //fmt.Println(roadshowTitle2)
  80. //fmt.Println(roadshowTitle3)
  81. //fmt.Println(roadshowTitle4)
  82. for _, vHz := range listHz {
  83. //如果同一时间标题匹配就建立匹配关系
  84. if roadshowBeginTime == utils.TimeRemoveHms2(vHz.ActivityTime) {
  85. if strings.Contains(vHz.ActivityNameTask, roadshowTitle) || strings.Contains(vHz.JmcjRoadshowTitle, roadshowTitle) {
  86. mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
  87. break
  88. }
  89. //去掉空格标识,完全等于时候的匹配
  90. if strings.Replace(vHz.ActivityName, " ", "", -1) == strings.Replace(vJmcj.RoadshowTitle, " ", "", -1) {
  91. mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
  92. break
  93. }
  94. if len(roadshowTitle1) > textLen {
  95. if strings.Contains(vHz.ActivityNameTask, roadshowTitle1) || strings.Contains(vHz.JmcjRoadshowTitle, roadshowTitle1) {
  96. mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
  97. break
  98. }
  99. }
  100. if len(roadshowTitle2) > textLen {
  101. if strings.Contains(vHz.ActivityNameTask, roadshowTitle2) || strings.Contains(vHz.JmcjRoadshowTitle, roadshowTitle2) {
  102. mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
  103. break
  104. }
  105. }
  106. if len(roadshowTitle3) > textLen {
  107. if strings.Contains(vHz.ActivityNameTask, roadshowTitle3) || strings.Contains(vHz.JmcjRoadshowTitle, roadshowTitle3) {
  108. mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
  109. break
  110. }
  111. }
  112. if len(roadshowTitle4) > textLen {
  113. if strings.Contains(vHz.ActivityNameTask, roadshowTitle4) || strings.Contains(vHz.JmcjRoadshowTitle, roadshowTitle4) {
  114. mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
  115. break
  116. }
  117. }
  118. }
  119. }
  120. }
  121. //通过弘则匹配进门财经
  122. for _, vHz := range listHz {
  123. if mapGroupActivityid[vHz.ActivityId] != "" {
  124. continue
  125. }
  126. var roadshowTitle string
  127. roadshowTitle = vHz.ActivityName
  128. nameSlice := strings.Split(roadshowTitle, "】")
  129. if len(nameSlice) >= 1 {
  130. roadshowTitle = nameSlice[len(nameSlice)-1]
  131. if len(roadshowTitle) > textLen {
  132. vHz.ActivityTime = utils.TimeRemoveHms2(vHz.ActivityTime)
  133. for _, vJmcj := range listJmcj {
  134. //如果同一时间标题匹配就建立匹配关系
  135. if vHz.ActivityTime == utils.TimeRemoveHms2(vJmcj.RoadshowBeginTime) {
  136. if strings.Contains(vJmcj.RoadshowTitle, roadshowTitle) {
  137. mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
  138. break
  139. }
  140. if strings.Contains(vJmcj.RoadshowTitle, vHz.JmcjRoadshowTitle) && vHz.JmcjRoadshowTitle != "" {
  141. mapGroupActivityid[vHz.ActivityId] = vJmcj.RoadshowId
  142. break
  143. }
  144. }
  145. }
  146. }
  147. }
  148. }
  149. if len(mapGroupActivityid) > 0 {
  150. e = models.UpdateJmcjActivityIdGroup(mapGroupActivityid)
  151. if e != nil {
  152. err = errors.New("UpdateJmcjActivityIdGroup, Err: " + e.Error())
  153. }
  154. }
  155. return
  156. }
  157. // GetActivityMeetingByJmcj 同步进门财经到会信息,并处理爽约记录
  158. func GetActivityMeetingByJmcj(cont context.Context) (err error) {
  159. defer func() {
  160. if err != nil {
  161. fmt.Println(err)
  162. go utils.SendAlarmMsg("获取进门财经的到会信息失败,Err"+err.Error(), 2)
  163. }
  164. }()
  165. //获取需要一直同步的活动信息
  166. configCode := "jin_meng_activity_id"
  167. detail, e := models.GetConfigByCode(configCode)
  168. if e != nil {
  169. err = errors.New("GetConfigByCode, Err: " + e.Error())
  170. return
  171. }
  172. mapActivityIdlLongTime := make(map[string]string)
  173. sliceValue := strings.Split(detail.ConfigValue, ",")
  174. for _, v := range sliceValue {
  175. mapActivityIdlLongTime[v] = v
  176. }
  177. dateTime := time.Now().AddDate(0, 0, 14).Format(utils.FormatDate)
  178. dateNow := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
  179. startDate := dateTime + " 00:00:00"
  180. endDate := dateNow + " 23:59:59"
  181. var condition string
  182. var pars []interface{}
  183. //获取弘则要同步到会信息的活动
  184. condition = ` AND activity_time BETWEEN ? AND ? AND publish_status = 1 AND jmcj_activity_id != '' OR ( activity_id IN (` + detail.ConfigValue + `) AND publish_status = 1 AND jmcj_activity_id != '' ) `
  185. pars = append(pars, startDate, endDate)
  186. listHz, e := models.GetActivityListByCondition(condition, pars)
  187. if e != nil && e.Error() != utils.ErrNoRow() {
  188. err = errors.New("GetActivityListByCondition, Err: " + e.Error())
  189. return
  190. }
  191. var jmcjActivityIds []string
  192. var activityIds []int
  193. mapGroupActivityid := make(map[string]int)
  194. mapGroupActivityTime := make(map[string]string)
  195. for _, v := range listHz {
  196. jmcjActivityIds = append(jmcjActivityIds, v.JmcjActivityId)
  197. activityIds = append(activityIds, v.ActivityId)
  198. mapGroupActivityid[v.JmcjActivityId] = v.ActivityId
  199. mapGroupActivityTime[v.JmcjActivityId] = v.ActivityTime
  200. }
  201. //return
  202. lenjmcjActivityIds := len(jmcjActivityIds)
  203. if lenjmcjActivityIds == 0 {
  204. return
  205. }
  206. //获取进门财经对应的路演ID的到会列表
  207. pars = make([]interface{}, 0)
  208. condition = ` AND roadshow_id IN (` + utils.GetOrmInReplace(lenjmcjActivityIds) + `)`
  209. pars = append(pars, jmcjActivityIds)
  210. listJmcj, e := models.GetJmcjRoadshowDataList(condition, pars)
  211. if e != nil {
  212. err = errors.New("GetJmcjRoadshowDataList, Err: " + e.Error())
  213. return
  214. }
  215. //获取已经写入到会信息的参会人员
  216. lenactivityIds := len(activityIds)
  217. pars = make([]interface{}, 0)
  218. condition = ` AND activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
  219. pars = append(pars, activityIds)
  220. attendanceDetailList, e := models.GetActivityAttendanceDetailListCondition(condition, pars)
  221. if e != nil {
  222. err = errors.New("GetActivityAttendanceDetailListCondition, Err: " + e.Error())
  223. return
  224. }
  225. mapAttendanceDetail := make(map[string]int)
  226. for _, v := range attendanceDetailList {
  227. mapAttendanceDetail[fmt.Sprint("ActivityId:", v.ActivityId, "Mobile:", v.Mobile)] = v.ActivityId
  228. }
  229. var mobiles []string
  230. var mobileMap = make(map[string]string)
  231. //var isPlayback bool // 是否包含回放
  232. var isPlaybackMap = make(map[int]bool) // 是否包含回放map
  233. var activityIdsLongTime string //包含回放的活动ID
  234. needAddAttendanc := make([]*models.CygxActivityAttendanceDetail, 0)
  235. for _, v := range listJmcj {
  236. if v.UserPhone == "" {
  237. continue
  238. }
  239. if mapGroupActivityid[v.RoadshowId] == 0 {
  240. continue
  241. }
  242. //如果数据已经存在了那么就不做数据更新
  243. if mapAttendanceDetail[fmt.Sprint("ActivityId:", mapGroupActivityid[v.RoadshowId], "Mobile:", v.UserPhone)] > 0 {
  244. continue
  245. }
  246. item := new(models.CygxActivityAttendanceDetail)
  247. item.ActivityId = mapGroupActivityid[v.RoadshowId]
  248. item.RealName = v.UserName
  249. item.Mobile = v.UserPhone
  250. item.CompanyName = v.Company
  251. item.FirstMeetingTime = v.FirstWatchTime
  252. item.LastMeetingTime = v.LastWatchTime
  253. item.IsMeetingStr = 1
  254. item.Duration = utils.GetAttendanceDetailSeconds(v.JoinTime)
  255. if v.JoinType == 1 {
  256. item.MeetingTypeStr = "网络"
  257. } else {
  258. item.MeetingTypeStr = "电话"
  259. }
  260. item.MeetingAuthentication = v.AuthInfo
  261. if v.DataType == 1 {
  262. item.MeetingStatusStr = "直播"
  263. } else {
  264. item.MeetingStatusStr = "回放"
  265. if !isPlaybackMap[item.ActivityId] && mapActivityIdlLongTime[strconv.Itoa(item.ActivityId)] == "" {
  266. activityIdsLongTime += strconv.Itoa(item.ActivityId) + ","
  267. }
  268. isPlaybackMap[item.ActivityId] = true
  269. }
  270. item.Position = v.Occupation
  271. item.UseridEntity = v.UseridEntity
  272. item.ActivityTime = mapGroupActivityTime[v.RoadshowId]
  273. item.CrmCompanyMapStatusId = v.CrmCompanyMapStatusId
  274. item.CreateTime = time.Now()
  275. needAddAttendanc = append(needAddAttendanc, item)
  276. if mobileMap[v.UserPhone] == "" {
  277. mobiles = append(mobiles, v.UserPhone)
  278. mobileMap[v.UserPhone] = v.UserPhone
  279. }
  280. }
  281. if len(needAddAttendanc) == 0 {
  282. return
  283. }
  284. //根据手机号获取这些用户的信息
  285. listUser, e := models.GetWxUserOutboundMobiles(mobiles)
  286. if e != nil {
  287. err = errors.New("GetWxUserOutboundMobiles, Err: " + e.Error())
  288. return
  289. }
  290. mapUser := make(map[string]*models.WxUserOutboundMobile)
  291. for _, v := range listUser {
  292. mapUser[v.Mobile] = v
  293. mapUser[v.OutboundMobile] = v
  294. }
  295. var updateActivityIds []int // 需要更新的活动ID
  296. var updateActivityIdsMap = make(map[int]bool) // 需要更新的活动ID
  297. for k, v := range needAddAttendanc {
  298. if needAddAttendanc[k].CompanyId == 0 && mapUser[v.Mobile] != nil {
  299. needAddAttendanc[k].CompanyId = mapUser[v.Mobile].CompanyId
  300. needAddAttendanc[k].SellerName = mapUser[v.Mobile].SellerName
  301. needAddAttendanc[k].CompanyName = mapUser[v.Mobile].CompanyName
  302. needAddAttendanc[k].IsMeetingStr = 1
  303. }
  304. if !updateActivityIdsMap[v.ActivityId] {
  305. updateActivityIds = append(updateActivityIds, v.ActivityId)
  306. updateActivityIdsMap[v.ActivityId] = true
  307. }
  308. attendanceDetailList = append(attendanceDetailList, v)
  309. }
  310. if len(updateActivityIds) == 0 {
  311. return
  312. }
  313. // 更新需要长时间同步到会信息的活动
  314. if activityIdsLongTime != "" {
  315. activityIdsLongTime = strings.TrimRight(activityIdsLongTime, ",")
  316. activityIdsLongTime = detail.ConfigValue + "," + activityIdsLongTime
  317. e = models.UpdateConfigByCode(activityIdsLongTime, configCode)
  318. if e != nil {
  319. err = errors.New("UpdateConfigByCode, Err: " + e.Error())
  320. return
  321. }
  322. }
  323. //return
  324. {
  325. //参会记录
  326. e = models.AddAttendancDetailNew(needAddAttendanc, updateActivityIds)
  327. if e != nil {
  328. err = errors.New("AddAttendancDetailNew, Err: " + e.Error())
  329. return err
  330. }
  331. }
  332. {
  333. //标记到会信息
  334. e = models.UpdateCygxActivitySignupIsMeeting(needAddAttendanc)
  335. if e != nil {
  336. err = errors.New("UpdateCygxActivitySignupIsMeeting, Err: " + e.Error())
  337. return err
  338. }
  339. }
  340. {
  341. //处理是否限制报名
  342. AddCygxActivityRestrictSignupByAdminNew(updateActivityIds)
  343. }
  344. {
  345. //通过进门财经添加用户参数信息
  346. AddctivitySignupDetailByJmcjNew(needAddAttendanc, updateActivityIds)
  347. }
  348. {
  349. //添加报名日志 (对个人以及机构互动数量进行排序下载使用)
  350. CygxActivityMeetSort(needAddAttendanc, updateActivityIds)
  351. }
  352. return
  353. }
  354. // 查研观向处理活动用户限制报名
  355. func AddCygxActivityRestrictSignupByAdminNew(activityIds []int) (err error) {
  356. defer func() {
  357. if err != nil {
  358. fmt.Println("err:", err)
  359. go utils.SendAlarmMsg("查研观向处理活动用户限制报名失败,AddCygxActivityRestrictSignupByAdminNew,Err:"+err.Error()+"activityIds"+fmt.Sprint(activityIds), 3)
  360. }
  361. }()
  362. var condition string
  363. var pars []interface{}
  364. lenactivityIds := len(activityIds)
  365. if lenactivityIds == 0 {
  366. return
  367. }
  368. condition = ` AND is_meeting = 1 AND activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
  369. pars = append(pars, activityIds)
  370. //获取到会了的人员
  371. meetingList, e := models.GetActivitySignupList(condition, pars)
  372. if e != nil {
  373. err = errors.New("GetActivitySignupList" + e.Error())
  374. return
  375. }
  376. var userIdArr []int
  377. if len(meetingList) > 0 {
  378. for _, v := range meetingList {
  379. userIdArr = append(userIdArr, v.UserId)
  380. }
  381. lenuserIdArr := len(userIdArr)
  382. var condition string
  383. var pars []interface{}
  384. condition = ` AND user_id IN (` + utils.GetOrmInReplace(lenuserIdArr) + `)`
  385. pars = append(pars, userIdArr)
  386. restrictSignupList, e := models.GetCygxActivityRestrictSignupList(condition, pars, 0, 9999)
  387. if e != nil {
  388. err = errors.New("GetCygxActivityRestrictSignupList" + e.Error())
  389. return
  390. }
  391. //获取这些用户是否被加入到限制报名了
  392. maptotalRestrict := make(map[int]bool)
  393. for _, v := range restrictSignupList {
  394. maptotalRestrict[v.UserId] = true
  395. }
  396. pars = make([]interface{}, 0)
  397. condition = ` AND a.is_limit_people = 1 AND v.is_meeting = 0 AND v.do_fail_type = 0 AND v.user_id IN (` + utils.GetOrmInReplace(lenuserIdArr) + `) AND a.activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
  398. pars = append(pars, userIdArr, activityIds)
  399. listSignup, e := models.GetActivitySignupInnerActivityList(condition, pars)
  400. if e != nil && e.Error() != utils.ErrNoRow() {
  401. err = errors.New("GetActivitySignupInnerActivityList" + e.Error())
  402. return
  403. }
  404. mapNomeet := make(map[int]int)
  405. if len(listSignup) > 0 {
  406. for _, v := range listSignup {
  407. mapNomeet[v.UserId]++
  408. }
  409. }
  410. var userIdDelArr []int
  411. for _, v := range meetingList {
  412. //如果加入了爽约限制但是爽约次数少于3条就删除爽约记录
  413. if maptotalRestrict[v.UserId] && mapNomeet[v.UserId] < 3 {
  414. userIdDelArr = append(userIdDelArr, v.UserId)
  415. }
  416. }
  417. //if len(userIdDelArr) > 0 {
  418. // e = models.DeleteCygxActivityRestrictSignupByUserIds(userIdDelArr)
  419. // if e != nil {
  420. // err = errors.New("DeleteCygxActivityRestrictSignupByUserIds" + e.Error())
  421. // return
  422. // }
  423. //}
  424. }
  425. //获取未到会的人员
  426. pars = make([]interface{}, 0)
  427. condition = ` AND v.is_meeting = 0 AND v.do_fail_type = 0 AND v.activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
  428. pars = append(pars, activityIds)
  429. nomeetingListlist, e := models.GetActivitySignupInnerActivityList(condition, pars)
  430. if e != nil {
  431. err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
  432. return
  433. }
  434. var userIdSiginArr []int
  435. var items []*models.CygxActivitySignupBreak
  436. for _, v := range nomeetingListlist {
  437. userIdSiginArr = append(userIdSiginArr, v.UserId)
  438. //添加爽约记录
  439. item := new(models.CygxActivitySignupBreak)
  440. item.UserId = v.UserId
  441. item.ActivityId = v.ActivityId
  442. item.CreateTime = time.Now()
  443. item.Mobile = v.Mobile
  444. item.Email = v.Email
  445. item.CompanyId = v.CompanyId
  446. item.CompanyName = v.CompanyName
  447. item.RealName = v.RealName
  448. item.SellerName = v.SellerName
  449. items = append(items, item)
  450. }
  451. lenuserIdSiginArr := len(userIdSiginArr)
  452. if lenuserIdSiginArr == 0 {
  453. return
  454. }
  455. var itemsRestrict []*models.CygxActivityRestrictSignup
  456. maptotalRestrict := make(map[int]bool)
  457. //var condition string
  458. pars = make([]interface{}, 0)
  459. condition = ""
  460. restrictSignupList, e := models.GetCygxActivityRestrictSignupList(condition, pars, 0, 9999)
  461. if e != nil {
  462. err = errors.New("GetCygxActivityRestrictSignupList" + e.Error())
  463. return
  464. }
  465. //获取这些用户是否被加入到限制报名了
  466. for _, v := range restrictSignupList {
  467. maptotalRestrict[v.UserId] = true
  468. }
  469. pars = make([]interface{}, 0)
  470. condition = ` AND a.is_limit_people = 1 AND v.is_meeting = 0 AND v.do_fail_type = 0 AND user_id IN (` + utils.GetOrmInReplace(lenuserIdSiginArr) + `)`
  471. pars = append(pars, userIdSiginArr)
  472. listSignup, e := models.GetActivitySignupInnerActivityList(condition, pars)
  473. if e != nil && e.Error() != utils.ErrNoRow() {
  474. err = errors.New("GetActivitySignupInnerActivityList" + e.Error())
  475. return
  476. }
  477. mapNomeet := make(map[int]int)
  478. if len(listSignup) > 0 {
  479. for _, v := range listSignup {
  480. mapNomeet[v.UserId]++
  481. }
  482. }
  483. for _, v := range meetingList {
  484. //如果加入了爽约限制但是爽约次数少于3条就删除爽约记录
  485. if !maptotalRestrict[v.UserId] && mapNomeet[v.UserId] >= 3 {
  486. itemRestrict := new(models.CygxActivityRestrictSignup)
  487. itemRestrict.UserId = v.UserId
  488. itemRestrict.CreateTime = time.Now()
  489. itemRestrict.Mobile = v.Mobile
  490. itemRestrict.Email = v.Email
  491. itemRestrict.CompanyId = v.CompanyId
  492. itemRestrict.CompanyName = v.CompanyName
  493. itemRestrict.IsRestrict = 1
  494. itemsRestrict = append(itemsRestrict, itemRestrict)
  495. maptotalRestrict[v.UserId] = true
  496. }
  497. }
  498. e = models.DeleteCygxActivitySignupBreakByIds(activityIds)
  499. if e != nil {
  500. err = errors.New("DeleteCygxActivitySignupBreakById" + e.Error())
  501. return
  502. }
  503. //添加爽约记录
  504. if len(items) > 0 {
  505. _, e = models.AddCygxActivitySignupBreakList(items)
  506. if e != nil {
  507. err = errors.New("AddCygxActivitySignupBreakList, Err: " + e.Error())
  508. return
  509. }
  510. }
  511. //添加报名限制
  512. if len(itemsRestrict) > 0 {
  513. _, e = models.AddCygxActivityRestrictSignupList(itemsRestrict)
  514. if e != nil {
  515. err = errors.New("AddCygxActivityRestrictSignupList, Err: " + e.Error())
  516. return
  517. }
  518. }
  519. return
  520. }
  521. // 对个人以及机构互动数量进行排序下载使用
  522. func CygxActivityMeetSort(list []*models.CygxActivityAttendanceDetail, activityIds []int) (err error) {
  523. defer func() {
  524. if err != nil {
  525. fmt.Println("err:", err)
  526. go utils.SendAlarmMsg("查研观向处理活动用户限制报名失败,AddCygxActivityRestrictSignupByAdminNew,Err:"+err.Error()+"activityIds"+fmt.Sprint(activityIds), 3)
  527. }
  528. }()
  529. var items []*models.CygxActivityMeetDetailLog
  530. var condition string
  531. var pars []interface{}
  532. lenactivityIds := len(activityIds)
  533. if lenactivityIds == 0 {
  534. return
  535. }
  536. //获取已经写入到会信息的参会人员
  537. pars = make([]interface{}, 0)
  538. condition = ` AND activity_id IN (` + utils.GetOrmInReplace(lenactivityIds) + `)`
  539. pars = append(pars, activityIds)
  540. activityMeetDetailLogList, e := models.GetCygxActivityMeetDetailLogList(condition, pars)
  541. if e != nil {
  542. err = errors.New("GetCygxActivityMeetDetailLogList, Err: " + e.Error())
  543. return
  544. }
  545. mapActivityMeetDetailL := make(map[string]int)
  546. for _, v := range activityMeetDetailLogList {
  547. mapActivityMeetDetailL[fmt.Sprint("ActivityId:", v.ActivityId, "Mobile:", v.Mobile)] = v.ActivityId
  548. }
  549. var companyIds []int
  550. var companyIdsMap = make(map[int]bool)
  551. var mobiles []string
  552. var mobilesMap = make(map[string]bool)
  553. for _, v := range list {
  554. if mapActivityMeetDetailL[fmt.Sprint("ActivityId:", v.ActivityId, "Mobile:", v.Mobile)] > 0 {
  555. continue
  556. }
  557. item := new(models.CygxActivityMeetDetailLog)
  558. item.ActivityId = v.ActivityId
  559. item.Mobile = v.Mobile
  560. item.CompanyName = v.CompanyName
  561. item.CompanyId = v.CompanyId
  562. item.ActivityTime = v.ActivityTime
  563. item.CreateTime = v.CreateTime
  564. if !companyIdsMap[v.CompanyId] {
  565. companyIds = append(companyIds, v.CompanyId)
  566. }
  567. if !mobilesMap[v.Mobile] {
  568. mobiles = append(mobiles, v.Mobile)
  569. }
  570. items = append(items, item)
  571. }
  572. //插入
  573. e = models.AddCygxActivityMeetDetailLogMulti(items)
  574. if e != nil {
  575. err = errors.New("AddCygxActivityMeetDetailLogMulti, Err: " + e.Error())
  576. return
  577. }
  578. {
  579. //批量修改个人参会数量
  580. listMobileCount, e := models.GetActivityMeetDetailLogCountMobile(mobiles)
  581. if e != nil {
  582. err = errors.New("GetActivityMeetDetailLogCountCompany, Err: " + e.Error())
  583. return
  584. }
  585. if len(listMobileCount) > 0 {
  586. e = models.UpdateCygxActivityMeetDetailLogMobileNumMulti(listMobileCount)
  587. if e != nil {
  588. err = errors.New("UpdateCygxActivityMeetDetailLogMobileNumMulti, Err: " + e.Error())
  589. return
  590. }
  591. }
  592. }
  593. {
  594. //批量修改机构参会数量
  595. listCompanyCount, e := models.GetActivityMeetDetailLogCountCompany(companyIds)
  596. if e != nil {
  597. err = errors.New("GetActivityMeetDetailLogCountCompany, Err: " + e.Error())
  598. return
  599. }
  600. if len(listCompanyCount) > 0 {
  601. e = models.UpdateCygxActivityMeetDetailLogCompanyNumMulti(listCompanyCount)
  602. if e != nil {
  603. err = errors.New("UpdateCygxActivityMeetDetailLogCompanyNumMulti, Err: " + e.Error())
  604. return
  605. }
  606. }
  607. }
  608. return
  609. }