activity_special.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  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. // UpdateCygxActivitySpecialSignupNum()
  14. //}
  15. //修改专项调研,用户与公司的参与数量
  16. func UpdateCygxActivitySpecialSignupNum(cont context.Context) (err error) {
  17. defer func() {
  18. if err != nil {
  19. fmt.Println(err)
  20. go utils.SendAlarmMsg("修改活动状态至进行中失败"+err.Error(), 2)
  21. go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "修改活动状态至进行中失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
  22. }
  23. }()
  24. //根据手机号分组获取列表以及数量
  25. var condition string
  26. var pars []interface{}
  27. condition += ` AND s.create_time < ? `
  28. pars = append(pars, time.Now().Format(utils.FormatDate))
  29. listSpecial, err := models.GetActivityListSpecialGroupByMobile(condition, pars)
  30. if err != nil {
  31. return err
  32. }
  33. var mapMobile []string
  34. for _, v := range listSpecial {
  35. mapMobile = append(mapMobile, v.Mobile)
  36. }
  37. //根据手机号获取这些用户的信息
  38. userList, err := models.GetWxUserByMobiles(mapMobile)
  39. if err != nil {
  40. return err
  41. }
  42. //更改这些手机对应的关注关注数量
  43. err = models.UpdateActivitySpecialSignupNumMulti(listSpecial)
  44. if err != nil {
  45. return err
  46. }
  47. //更改这些手机对应的公司ID
  48. err = models.UpdateActivitySpecialSignupCompanyIdMulti(userList)
  49. if err != nil {
  50. return err
  51. }
  52. //根据CompanyId分组获取列表以及数量
  53. listSpecialByCompanyId, err := models.GetActivityListSpecialGroupByCompanyId(condition, pars)
  54. if err != nil {
  55. return err
  56. }
  57. //更改这些公司对应的关注关注数量
  58. err = models.UpdateActivitySpecialSignupCompanyNumMulti(listSpecialByCompanyId)
  59. if err != nil {
  60. return err
  61. }
  62. fmt.Println("UpdateCygxActivitySpecialSignupNum end")
  63. return
  64. }
  65. //处理专项调研的展示
  66. func GetActivityLabelSpecialList(userType, isPower int, chartPermissionIds, scale, permissionNameStr string) (item *models.ActivityTypeHome, err error) {
  67. var condition string
  68. var pars []interface{}
  69. condition = ` AND art.publish_status = 1 AND art.label != '' `
  70. //行业名称
  71. if isPower == 1 {
  72. condition += ` AND art.chart_permission_name IN (` + permissionNameStr + `) `
  73. }
  74. if chartPermissionIds != "" {
  75. condition += ` AND art.chart_permission_id IN (` + chartPermissionIds + `) `
  76. }
  77. var conditionOr string
  78. if scale != "" {
  79. conditionOr += ` OR ( art.scale LIKE '%` + scale + `%' ` + condition + `) `
  80. }
  81. condition += ` AND art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%'` + conditionOr
  82. specialList, err := models.GetActivityLabelSpecialListAll(condition, pars, 0, 8)
  83. if err != nil {
  84. return
  85. }
  86. for k2, v2 := range specialList {
  87. specialList[k2].KeyWord = LabelStrV5(v2.KeyWord, v2.IsShowSubjectName, v2.TemporaryLabel)
  88. specialList[k2].ImgUrlBg = "https://hzstatic.hzinsights.com/static/temp/20220426202204/20220426/XDLLsjC9XAAy8LIzQr7GsjrBbtX6.png"
  89. specialList[k2].ImgUrlBg = utils.ACTIVITY_ZXDY_ImgUrl3
  90. }
  91. itemList := new(models.ActivityTypeHome)
  92. itemList.ActivityTypeName = "专项产业调研"
  93. itemList.Resource = 2
  94. itemList.List = specialList
  95. itemList.ActivityTypeId = 7
  96. itemList.ImgUrl = utils.ACTIVITY_ZXDY_ImgUrl1
  97. itemList.ImgUrlBg = utils.ACTIVITY_ZXDY_ImgUrl2
  98. item = itemList
  99. return
  100. }
  101. //HandleActivityLabelSpecialPermission 处理专项产业调研的查询权限sql
  102. func HandleActivityLabelSpecialPermission(user *models.WxUserItem) (condition string, err error) {
  103. userType, permissionStr, err := GetUserType(user.CompanyId)
  104. if err != nil {
  105. return
  106. }
  107. slicePer := strings.Split(permissionStr, ",")
  108. var permissionSqlStr string
  109. for _, v := range slicePer {
  110. if userType == 1 {
  111. if !strings.Contains(v, "研选") {
  112. permissionSqlStr += "'" + v + "',"
  113. }
  114. } else {
  115. permissionSqlStr += "'" + v + "',"
  116. }
  117. }
  118. permissionSqlStr = strings.TrimRight(permissionSqlStr, ",")
  119. permissionSqlStr = strings.Replace(permissionSqlStr, "(主观)", "", -1)
  120. permissionSqlStr = strings.Replace(permissionSqlStr, "(客观)", "", -1)
  121. condition = ` AND art.publish_status = 1 AND art.label != '' AND art.is_offline = 0 `
  122. condition += ` AND art.chart_permission_name IN (` + permissionSqlStr + `) `
  123. condition += ` AND art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' `
  124. return
  125. }
  126. //获取预报名列表
  127. func GetActivitySpecialPrepareList(user *models.WxUserItem, startSize, pageSize int, keywords string) (list []*models.CygxActivitySpecialDetail, totalPrepare int, err error) {
  128. condition, e := HandleActivityLabelSpecialPermission(user)
  129. if e != nil {
  130. err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
  131. return
  132. }
  133. var pars []interface{}
  134. condition += ` AND art.days = 0 AND art.publish_status = 1 AND art.is_offline = 0 `
  135. if keywords != "" {
  136. keywords = "%" + keywords + "%"
  137. condition += ` AND art.research_theme LIKE ? `
  138. pars = append(pars, keywords)
  139. }
  140. totalPrepare, e = models.GetActivitySpecialCount(condition, pars)
  141. if e != nil {
  142. err = errors.New("GetActivitySpecialCount, Err: " + e.Error())
  143. return
  144. }
  145. condition += ` ORDER BY art.last_updated_time DESC `
  146. list, e = models.GetCygxActivitySpecialDetailList(condition, pars, user.UserId, startSize, pageSize)
  147. if e != nil {
  148. err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error())
  149. return
  150. }
  151. return
  152. }
  153. /*
  154. 确定行程的查询 GetActivityLabelSpecialConfirmList
  155. state 进行状态 1:未开始,2:进行中,3:已结束 不传默认查询全部items []*CygxActivitySpecialDetail
  156. */
  157. func GetActivityLabelSpecialConfirmList(user *models.WxUserItem, startSize, pageSize, state int, keywords string) (list []*models.CygxActivitySpecialDetail, totalConfirm int, err error) {
  158. //var condition string
  159. condition, e := HandleActivityLabelSpecialPermission(user)
  160. if e != nil {
  161. err = errors.New("HandleActivityLabelSpecialPermission, Err: " + e.Error())
  162. return
  163. }
  164. var pars []interface{}
  165. condition += ` AND art.days >0 `
  166. if state == 1 {
  167. condition += ` AND art.activity_time > ? `
  168. pars = append(pars, time.Now())
  169. }
  170. if state == 2 {
  171. condition += ` AND art.activity_time < ? `
  172. pars = append(pars, time.Now())
  173. condition += ` AND art.activity_time_end > ? `
  174. pars = append(pars, time.Now())
  175. }
  176. if state == 3 {
  177. condition += ` AND art.activity_time_end < ? `
  178. pars = append(pars, time.Now())
  179. }
  180. if keywords != "" {
  181. keywords = "%" + keywords + "%"
  182. condition += ` AND art.research_theme LIKE ? `
  183. pars = append(pars, keywords)
  184. }
  185. totalConfirm, e = models.GetActivitySpecialCount(condition, pars)
  186. if e != nil {
  187. err = errors.New("GetActivitySpecialCount, Err: " + e.Error())
  188. return
  189. }
  190. condition += ` ORDER BY art.activity_time DESC `
  191. list, e = models.GetCygxActivitySpecialDetailList(condition, pars, user.UserId, startSize, pageSize)
  192. if e != nil {
  193. err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error())
  194. return
  195. }
  196. var activityIds []int
  197. for k, v := range list {
  198. resultTimeStart := utils.StrTimeToTime(v.ActivityTime) //时间字符串格式转时间格式
  199. resultTimeEnd := utils.StrTimeToTime(v.ActivityTimeEnd) //时间字符串格式转时间格式
  200. if resultTimeStart.After(time.Now()) {
  201. list[k].ActiveState = 1
  202. } else if time.Now().After(resultTimeEnd) {
  203. list[k].ActiveState = 3
  204. } else {
  205. list[k].ActiveState = 2
  206. }
  207. if list[k].Days == 0 {
  208. list[k].TripStatus = 1
  209. } else {
  210. list[k].TripStatus = 2
  211. }
  212. activityIds = append(activityIds, v.ActivityId)
  213. }
  214. //处理用户已经报名了的行程
  215. UserMap, e := GetSpecialTripUserMap(activityIds, user.UserId)
  216. if e != nil {
  217. err = errors.New("GetSpecialTripUserMap, Err: " + e.Error())
  218. return
  219. }
  220. for k, v := range list {
  221. if _, ok := UserMap[v.ActivityId]; ok {
  222. list[k].IsTrip = 1
  223. }
  224. }
  225. return
  226. }
  227. //获取用户已经报名的活动
  228. func GetSpecialTripUserMap(activityIds []int, userId int) (mapUserId map[int]int, err error) {
  229. var condition string
  230. var pars []interface{}
  231. activityIdsLen := len(activityIds)
  232. if activityIdsLen > 0 {
  233. condition += ` AND activity_id IN (` + utils.GetOrmInReplace(activityIdsLen) + `)`
  234. pars = append(pars, activityIds)
  235. }
  236. condition += ` AND user_id = ? AND is_cancel = 0 `
  237. pars = append(pars, userId)
  238. list, e := models.GetCygxActivitySpecialTripList(condition, pars)
  239. if e != nil {
  240. err = errors.New("GetCygxActivitySpecialTripList, Err: " + e.Error())
  241. return
  242. }
  243. mapUid := make(map[int]int)
  244. for _, v := range list {
  245. mapUid[v.UserId] = v.UserId
  246. }
  247. mapUserId = mapUid
  248. return
  249. }
  250. //GetActivitySpecialList 获取专项调研列表
  251. func GetActivitySpecialList(user *models.WxUserItem, currentIndex, pageSize int, keywords string) (list []*models.CygxActivitySpecialDetail, total int, err error) {
  252. listConfirm, totalConfirm, e := GetActivityLabelSpecialConfirmList(user, (currentIndex-1)*pageSize, pageSize, 1, keywords)
  253. if e != nil {
  254. err = errors.New("GetActivityLabelSpecialConfirmList, Err: " + e.Error())
  255. return
  256. }
  257. if currentIndex == 1 && len(listConfirm) > 0 {
  258. listConfirm[0].Explain = "此类调研时间安排已经确定,点击报名后按人次扣除对应机构的服务点数。由于每场活动人数有限,如果不能参加请提前48小时取消,未及时取消导致影响其他客户报名将会维持扣点。"
  259. }
  260. list = listConfirm
  261. total = totalConfirm
  262. var startSizePrepare, pageSizePrepare int
  263. //全是确定行程的查询数据
  264. if totalConfirm >= currentIndex*pageSize {
  265. total = totalConfirm
  266. startSizePrepare = 0
  267. pageSizePrepare = 0
  268. return
  269. } else if totalConfirm > (currentIndex-1)*pageSize && totalConfirm < currentIndex*pageSize {
  270. //一半确认行程一半预报名
  271. startSizePrepare = 0
  272. pageSizePrepare = pageSize - len(listConfirm)
  273. } else {
  274. //全是预报名
  275. startSizePrepare = (currentIndex-1)*pageSize - totalConfirm
  276. pageSizePrepare = pageSize - len(listConfirm)
  277. }
  278. listPrepare, totalPrepare, e := GetActivitySpecialPrepareList(user, startSizePrepare, pageSizePrepare, keywords)
  279. if e != nil {
  280. err = errors.New("GetActivityLabelSpecialConfirmList, Err: " + e.Error())
  281. return
  282. }
  283. if len(listPrepare) > 0 {
  284. for _, v := range listPrepare {
  285. list = append(list, v)
  286. }
  287. if startSizePrepare == 0 {
  288. listPrepare[0].Explain = "此类调研具体行程尚未确认,待预报名人数满10人后弘则会确定行程并推送给您活动日期,只有在确认行程中再次报名才完成占位。"
  289. }
  290. }
  291. total = totalConfirm + totalPrepare
  292. //处理封面图片
  293. detail, e := models.GetConfigByCode("city_img_url")
  294. if e != nil {
  295. err = errors.New("GetConfigByCode, Err: " + e.Error())
  296. return
  297. }
  298. detailChart, e := models.GetConfigByCode("chart_img_url")
  299. if e != nil {
  300. err = errors.New("GetConfigByCode, Err: " + e.Error())
  301. return
  302. }
  303. addressList := strings.Split(detail.ConfigValue, "{|}")
  304. mapAddress := make(map[string]string)
  305. chartList := strings.Split(detailChart.ConfigValue, "{|}")
  306. mapChart := make(map[string]string)
  307. var cityName string
  308. var chartName string
  309. var imgUrl string
  310. var imgUrlChart string
  311. for _, v := range addressList {
  312. vslice := strings.Split(v, "_")
  313. cityName = vslice[0]
  314. imgUrl = vslice[len(vslice)-1]
  315. mapAddress[cityName] = imgUrl
  316. }
  317. for _, v := range chartList {
  318. vslice := strings.Split(v, "_")
  319. chartName = vslice[0]
  320. imgUrlChart = vslice[len(vslice)-1]
  321. mapChart[chartName] = imgUrlChart
  322. }
  323. for k, v := range list {
  324. list[k].ImgUrlText = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211221/bIdfv8t86xrFRpDOeGGHXOmKEuKl.png"
  325. if mapChart[v.ChartPermissionName] != "" {
  326. list[k].ImgUrl = mapChart[v.ChartPermissionName]
  327. }
  328. list[k].ActivityTypeName = "专项调研"
  329. }
  330. return
  331. }
  332. //HandleActivitySpecialShow 处理活动的状态
  333. func HandleActivitySpecialShow(activityDetail *models.CygxActivitySpecialDetail, user *models.WxUserItem) (item *models.CygxActivitySpecialDetail, err error) {
  334. var activityIds []int
  335. resultTimeStart := utils.StrTimeToTime(activityDetail.ActivityTime) //时间字符串格式转时间格式
  336. resultTimeEnd := utils.StrTimeToTime(activityDetail.ActivityTimeEnd) //时间字符串格式转时间格式
  337. if resultTimeStart.After(time.Now()) {
  338. activityDetail.ActiveState = 1
  339. } else if time.Now().After(resultTimeEnd) {
  340. activityDetail.ActiveState = 3
  341. } else {
  342. activityDetail.ActiveState = 2
  343. }
  344. activityIds = append(activityIds, activityDetail.ActivityId)
  345. //处理用户已经报名了的行程
  346. UserMap, e := GetSpecialTripUserMap(activityIds, user.UserId)
  347. if e != nil {
  348. err = errors.New("GetSpecialTripUserMap, Err: " + e.Error())
  349. return
  350. }
  351. if activityDetail.Days == 0 {
  352. activityDetail.TripStatus = 1
  353. } else {
  354. activityDetail.TripStatus = 2
  355. }
  356. if _, ok := UserMap[activityDetail.ActivityId]; ok {
  357. activityDetail.IsTrip = 1
  358. }
  359. item = activityDetail
  360. return
  361. }