activity_special_trip.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  1. package services
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_cygx/models"
  6. "hongze/hongze_cygx/models/company"
  7. "hongze/hongze_cygx/utils"
  8. "strconv"
  9. "strings"
  10. "time"
  11. )
  12. func SpecialTripPopupMsg(activityInfo *models.CygxActivitySpecialDetail, user *models.WxUserItem) (signupStatus int, popupMsg, popupMsg2 string, err error) {
  13. //SignupStatus int `description:"返回状态:1:成功 、2 :人数已满 、3:调研次数已用完、 4:超时"`
  14. signupStatus = 1
  15. resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式
  16. if time.Now().After(resultTime.Add(-time.Minute * 60)) {
  17. signupStatus = 4
  18. popupMsg = "活动开始前1小时内无法报名,请联系对口销售处理"
  19. return
  20. }
  21. errMsg, e := CheckTripRemainingtimesBycompany(user, activityInfo)
  22. if e != nil {
  23. err = errors.New("获取客户剩余报名次数失败 GetActivitySpecialUserType, Err: " + e.Error())
  24. return
  25. }
  26. if errMsg != "" {
  27. popupMsg = errMsg
  28. signupStatus = 3
  29. return
  30. }
  31. var condition string
  32. var pars []interface{}
  33. condition += ` AND activity_id = ? AND is_cancel = 0 `
  34. pars = append(pars, activityInfo.ActivityId)
  35. tripTota, e := models.GetActivitySpecialTripCountByActivityId(condition, pars)
  36. if e != nil {
  37. err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error())
  38. return
  39. }
  40. if activityInfo.LimitPeopleNum-tripTota < 1 {
  41. signupStatus = 2
  42. popupMsg = "此活动报名人数已满,请留意下期活动"
  43. return
  44. }
  45. //signupStatus = 4
  46. popupMsg = "感谢参与,本次报名会扣除一次贵司在弘则的调研点数。"
  47. popupMsg2 = "由于每场活动人数有限,如果不能参加请提前48小时取消,未及时取消导致影响其他客户报名将会维持扣点。"
  48. return
  49. }
  50. // 获取用户剩余报名次数
  51. //func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (errMsg string, tripRemaining int, err error) {
  52. //
  53. // //获取 专项调研客户类型 //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户;6、冻结客户;7、流失客户 8:行业升级套餐客户
  54. // msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
  55. // //var tripTota int
  56. // //var airborneTota int
  57. // //userType, _, e := GetActivitySpecialUserType(user.CompanyId)
  58. // userType, _, e := GetUserType(user.CompanyId)
  59. // if e != nil {
  60. // err = errors.New("获取客户身份信息失败 GetActivitySpecialUserType, Err: " + e.Error())
  61. // return
  62. // }
  63. // if userType == 0 {
  64. // errMsg = msgTemplate
  65. // return
  66. // } else if userType == 1 {
  67. // tripRemaining = 999
  68. // return
  69. // } else if userType == 2 {
  70. // var condition string
  71. // var pars []interface{}
  72. //
  73. // condition += ` AND company_id = ? `
  74. // pars = append(pars, user.CompanyId)
  75. //
  76. // //airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
  77. // //if e != nil {
  78. // // err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
  79. // // return
  80. // //}
  81. // //condition += ` AND is_valid = 1 `
  82. // //查询当年的数据
  83. // condition += ` AND create_time >= ? `
  84. // pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
  85. // listTripBill, e := models.GetCygxActivitySpecialTripBill(condition, pars)
  86. // if e != nil {
  87. // err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
  88. // return
  89. // }
  90. // var TripBillNum int
  91. // for _, v := range listTripBill {
  92. // TripBillNum += v.BillDetailed
  93. // }
  94. // var packageType int
  95. // //大套餐客户,数据库添加标识,
  96. // companyUserTypeDetail, errs := models.GetCygxCompanyUserType(user.CompanyId)
  97. // if errs != nil && errs.Error() != utils.ErrNoRow() {
  98. // err = errs
  99. // return
  100. // }
  101. // if companyUserTypeDetail != nil {
  102. // packageType = companyUserTypeDetail.PackageType
  103. // if companyUserTypeDetail.CustomerTypeId != 0 {
  104. // userType = companyUserTypeDetail.CustomerTypeId
  105. // return
  106. // }
  107. // }
  108. //
  109. // packageTypeMap := map[int]int{1: 16, 2: 10}
  110. // totalTrip := packageTypeMap[packageType]
  111. // //tripRemaining = 10 - airborneTota + TripBillNum
  112. // tripRemaining = totalTrip + TripBillNum
  113. // if tripRemaining <= 0 {
  114. // errMsg = msgTemplate
  115. // return
  116. // }
  117. // //tripRemaining = 12 - tripTota
  118. // } else {
  119. // var condition string
  120. // var pars []interface{}
  121. //
  122. // condition += ` AND company_id = ? `
  123. // pars = append(pars, user.CompanyId)
  124. //
  125. // condition += ` AND chart_permission_id = ? `
  126. // pars = append(pars, activityInfo.ChartPermissionId)
  127. //
  128. // //airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
  129. // //if e != nil {
  130. // // err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
  131. // // return
  132. // //}
  133. // //查询当年的数据
  134. // condition += ` AND create_time >= ? `
  135. // pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
  136. // listTripBill, e := models.GetCygxActivitySpecialTripBill(condition, pars)
  137. // if e != nil {
  138. // err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
  139. // return
  140. // }
  141. // var TripBillNum int
  142. // for _, v := range listTripBill {
  143. // TripBillNum += v.BillDetailed
  144. // }
  145. // //tripRemaining = 5 - airborneTota + TripBillNum
  146. // tripRemaining = 5 + TripBillNum
  147. // if tripRemaining <= 0 {
  148. // errMsg = msgTemplate
  149. // return
  150. // }
  151. // }
  152. // return
  153. //}
  154. // 校验是否还有剩余次数
  155. func CheckTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (errMsg string, err error) {
  156. msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
  157. companyId := user.CompanyId
  158. chartPermissionName := activityInfo.ChartPermissionName
  159. companyDetail, e := models.GetCompanyDetailByIdGroup(companyId)
  160. if e != nil {
  161. err = errors.New("GetCompanyDetailByIdGroup, Err:" + e.Error())
  162. return
  163. }
  164. //永续客户不限制次数
  165. if companyDetail.Status == utils.COMPANY_STATUS_FOREVER {
  166. return
  167. }
  168. var condition string
  169. var pars []interface{}
  170. condition = " AND company_id = ? AND points > 0 ORDER BY chart_permission_id DESC "
  171. pars = append(pars, companyId)
  172. activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
  173. if e != nil && e.Error() != utils.ErrNoRow() {
  174. err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
  175. return
  176. }
  177. //如果没有剩余的点数,就返回
  178. if len(activitySpecialPermissionPointsList) == 0 {
  179. errMsg = msgTemplate
  180. return
  181. }
  182. //判断是不是策略行业的活动,策略的任何一个行业有剩余点数都能参加
  183. if chartPermissionName == utils.CE_LUE_NAME {
  184. return
  185. } else {
  186. for _, v := range activitySpecialPermissionPointsList {
  187. if v.ChartPermissionName == chartPermissionName || v.ChartPermissionId == 0 {
  188. return
  189. } // 如果对应行业有剩余次数,或者是属于大套餐且有次数,那么校验也通过
  190. }
  191. }
  192. return
  193. }
  194. // GetSpecialBillMaxChartPermissionId 获取专项调研剩余点数最多的行业
  195. func GetSpecialBillMaxChartPermissionId(user *models.WxUserItem) (maxChartPermissionId int, maxChartPermissionName string, err error) {
  196. companyId := user.CompanyId
  197. var condition string
  198. var pars []interface{}
  199. condition = " AND company_id = ? AND points > 0 ORDER BY points DESC LIMIT 1 "
  200. pars = append(pars, companyId)
  201. activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
  202. if e != nil && e.Error() != utils.ErrNoRow() {
  203. err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
  204. return
  205. }
  206. for _, v := range activitySpecialPermissionPointsList {
  207. maxChartPermissionId = v.ChartPermissionId
  208. maxChartPermissionName = v.ChartPermissionName
  209. }
  210. return
  211. }
  212. // DeductTripRemainingtimesByUser 扣除用户专项调研剩余次数
  213. func DeductTripRemainingtimesByUser(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (err error) {
  214. msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
  215. companyId := user.CompanyId
  216. chartPermissionName := activityInfo.ChartPermissionName
  217. companyProduct, e := company.GetCompanyProductByCompanyIdAndProductId(companyId, utils.COMPANY_PRODUCT_RAI_ID)
  218. if e != nil {
  219. err = errors.New("GetCompanyProductByCompanyIdAndProductId, Err:" + e.Error())
  220. return
  221. }
  222. var condition string
  223. var pars []interface{}
  224. var maxChartPermissionId int // 剩余点数最多的行业
  225. var points int // 剩余点数
  226. var activitySpecialPermissionPointsList []*models.CygxActivitySpecialPermissionPoints
  227. //永续客户不限次数需要单独处理
  228. if companyProduct.Status == utils.COMPANY_STATUS_FOREVER {
  229. condition = " AND company_id = ? ORDER BY points DESC LIMIT 1 "
  230. pars = append(pars, companyId)
  231. activitySpecialPermissionPointsList, e = models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
  232. if e != nil && e.Error() != utils.ErrNoRow() {
  233. err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
  234. return
  235. }
  236. //如果永续客户不存在单独的行业剩余点数记录,那么就添加一条 -1 的记录作为初始化数据
  237. if len(activitySpecialPermissionPointsList) == 0 {
  238. item := new(models.CygxActivitySpecialPermissionPoints)
  239. item.CompanyId = companyProduct.CompanyId
  240. item.Points = -1
  241. item.CompanyName = companyProduct.CompanyName
  242. //item.ChartPermissionId = activityInfo.ChartPermissionId
  243. //item.ChartPermissionName = activityInfo.ChartPermissionName
  244. item.CreateTime = time.Now()
  245. item.ModifyTime = time.Now()
  246. e = models.AddCygxActivitySpecialPermissionPoints(item)
  247. if e != nil {
  248. err = errors.New("AddCygxActivitySpecialPermissionPoints, Err:" + e.Error())
  249. return
  250. }
  251. return
  252. }
  253. } else {
  254. condition = " AND company_id = ? AND points > 0 ORDER BY points DESC LIMIT 1 "
  255. pars = append(pars, companyId)
  256. //判断是不是策略、固收行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
  257. if chartPermissionName != utils.CE_LUE_NAME && chartPermissionName != utils.GU_SHOU_NAME {
  258. pars = make([]interface{}, 0)
  259. condition = " AND company_id = ? AND ( chart_permission_id = ? OR chart_permission_id =0 ) AND points > 0 ORDER BY points DESC LIMIT 1 "
  260. pars = append(pars, companyId, activityInfo.ChartPermissionId)
  261. }
  262. activitySpecialPermissionPointsList, e = models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
  263. if e != nil && e.Error() != utils.ErrNoRow() {
  264. err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
  265. return
  266. }
  267. }
  268. //如果没有剩余的点数,就返回
  269. if len(activitySpecialPermissionPointsList) == 0 {
  270. err = errors.New(msgTemplate)
  271. return
  272. }
  273. for _, v := range activitySpecialPermissionPointsList {
  274. maxChartPermissionId = v.ChartPermissionId
  275. points = v.Points - 1
  276. }
  277. //更新对应行业剩余点数
  278. e = models.UpdateCygxActivitySpecialPermissionPoints(points, companyId, maxChartPermissionId)
  279. if e != nil {
  280. err = errors.New("UpdateCygxActivitySpecialPermissionPoints, Err:" + e.Error())
  281. return
  282. }
  283. return
  284. }
  285. // RebateTripRemainingtimesByUser 返点用户专项调研剩余次数
  286. func RebateTripRemainingtimesByUser(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (err error) {
  287. companyId := user.CompanyId
  288. chartPermissionName := activityInfo.ChartPermissionName
  289. var condition string
  290. var pars []interface{}
  291. condition = " AND company_id = ? ORDER BY points DESC LIMIT 1 "
  292. pars = append(pars, companyId)
  293. //判断是不是策略、固收行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
  294. if chartPermissionName != utils.CE_LUE_NAME && chartPermissionName != utils.GU_SHOU_NAME {
  295. pars = make([]interface{}, 0)
  296. condition = " AND company_id = ? AND (chart_permission_id = ? OR chart_permission_id = 0 ) LIMIT 1 "
  297. pars = append(pars, companyId, activityInfo.ChartPermissionId)
  298. } else {
  299. lastTripBill, e := models.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, user.UserId)
  300. if e != nil {
  301. err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
  302. return
  303. }
  304. pars = make([]interface{}, 0)
  305. condition = " AND company_id = ? AND (chart_permission_id = ? OR chart_permission_id = 0 ) LIMIT 1 "
  306. pars = append(pars, companyId, lastTripBill.ChartPermissionId)
  307. }
  308. activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
  309. if e != nil && e.Error() != utils.ErrNoRow() {
  310. err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
  311. return
  312. }
  313. var maxChartPermissionId int // 剩余点数最多的行业(返点行业)
  314. var points int // 剩余点数
  315. for _, v := range activitySpecialPermissionPointsList {
  316. maxChartPermissionId = v.ChartPermissionId
  317. points = v.Points + 1
  318. }
  319. //更新对应行业剩余点数
  320. e = models.UpdateCygxActivitySpecialPermissionPoints(points, companyId, maxChartPermissionId)
  321. if e != nil {
  322. err = errors.New("UpdateCygxActivitySpecialPermissionPoints, Err:" + e.Error())
  323. return
  324. }
  325. return
  326. }
  327. // 预处理专项调研流水明细表描述内容
  328. func HandleActivitySpecialTripBillTotalText(companyId int) (totalText string, err error) {
  329. //companyId := user.CompanyId
  330. companyDetail, e := models.GetCompanyDetailByIdGroup(companyId)
  331. if e != nil {
  332. err = errors.New("GetCompanyDetailByIdGroup, Err:" + e.Error())
  333. return
  334. }
  335. var condition string
  336. var pars []interface{}
  337. pars = make([]interface{}, 0)
  338. condition = " AND company_id = ? AND points != 0 ORDER BY chart_permission_id DESC "
  339. pars = append(pars, companyId)
  340. activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
  341. if e != nil && e.Error() != utils.ErrNoRow() {
  342. err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
  343. return
  344. }
  345. //永续客户次数累加
  346. if companyDetail.Status == utils.COMPANY_STATUS_FOREVER {
  347. var points int
  348. for _, v := range activitySpecialPermissionPointsList {
  349. points += v.Points
  350. }
  351. totalText = fmt.Sprint(points, "次") //追加永续客户展示规则(2024-02-23)
  352. return
  353. }
  354. var itemBillTotal []string
  355. itemBillTotalMap := make(map[string]string)
  356. for _, v := range activitySpecialPermissionPointsList {
  357. if v.ChartPermissionId > 0 {
  358. itemBillTotal = append(itemBillTotal, fmt.Sprint(v.ChartPermissionName, v.Points, "次")) // 行业套餐客户展示规则
  359. itemBillTotalMap[v.ChartPermissionName] = fmt.Sprint(v.ChartPermissionName, v.Points, "次")
  360. }
  361. if v.ChartPermissionId == 0 {
  362. totalText = fmt.Sprint(v.Points, "次") // 大套餐客户展示规则,
  363. }
  364. }
  365. if len(itemBillTotal) > 0 {
  366. permissionNameSlice := []string{"医药", "消费", "科技", "智造"}
  367. var itemBillTotalNew []string
  368. for _, v := range permissionNameSlice {
  369. if itemBillTotalMap[v] == "" {
  370. itemBillTotalNew = append(itemBillTotalNew, fmt.Sprint(v, "0次"))
  371. } else {
  372. itemBillTotalNew = append(itemBillTotalNew, itemBillTotalMap[v])
  373. }
  374. }
  375. totalText = strings.Join(itemBillTotalNew, "+")
  376. }
  377. return
  378. }
  379. // 用户搜专项调研操作操作行为,模板消息推送
  380. func ActivitySpecialUserRmind(user *models.WxUserItem, activityId, TripStatus int) (err error) {
  381. defer func() {
  382. if err != nil {
  383. go utils.SendAlarmMsg("用户搜专项调研操作操作行为,模板消息推送失败"+err.Error(), 2)
  384. }
  385. }()
  386. countUser, err := models.GetUserRemind(user.UserId)
  387. if err != nil {
  388. return err
  389. }
  390. if countUser == 0 {
  391. return err
  392. }
  393. var first string
  394. var keyword1 string
  395. var keyword2 string
  396. var keyword3 string
  397. var keyword4 string
  398. var remark string
  399. //获取销售手机号
  400. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  401. if err != nil && err.Error() != utils.ErrNoRow() {
  402. return err
  403. }
  404. if sellerItemQy != nil {
  405. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  406. if e != nil {
  407. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  408. return
  409. }
  410. activityInfo, e := models.GetCygxActivitySpecialDetailById(user.UserId, activityId)
  411. if e != nil {
  412. err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
  413. return
  414. }
  415. if activityInfo == nil {
  416. return
  417. }
  418. //TripStatus int `description:"行程进行状态 1:预报名,2:确定行程"`
  419. if TripStatus == 1 {
  420. keyword2 = fmt.Sprint("互动:专项调研预报名,", user.RealName, "--", user.CompanyName)
  421. } else {
  422. keyword2 = fmt.Sprint("互动:活动报名,", user.RealName, "--", user.CompanyName)
  423. }
  424. keyword1 = activityInfo.ResearchTheme
  425. //keyword2 = "__"
  426. remark = "点击查看活动详情"
  427. openIdArr := make([]string, 0)
  428. for _, v := range openIdList {
  429. openIdArr = append(openIdArr, v.OpenId)
  430. }
  431. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)
  432. sendInfo := new(SendWxTemplate)
  433. sendInfo.First = first
  434. sendInfo.Keyword1 = keyword1
  435. sendInfo.Keyword2 = keyword2
  436. sendInfo.Keyword3 = keyword3
  437. sendInfo.Keyword4 = keyword4
  438. sendInfo.Remark = remark
  439. sendInfo.TemplateId = utils.WxMsgTemplateIdArticleUserRemind
  440. sendInfo.RedirectUrl = redirectUrl
  441. sendInfo.RedirectTarget = 3
  442. sendInfo.Resource = strconv.Itoa(activityId)
  443. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  444. sendInfo.OpenIdArr = openIdArr
  445. err = PublicSendTemplateMsg(sendInfo)
  446. if err != nil {
  447. return
  448. }
  449. }
  450. return
  451. }
  452. // 确定行程用户报名模版消息推送
  453. func ActivitySpecialUserAddTrip(user *models.WxUserItem, activityId int) (err error) {
  454. defer func() {
  455. if err != nil {
  456. go utils.SendAlarmMsg("确定行程用户报名模版消息推送,模板消息推送失败"+err.Error(), 2)
  457. }
  458. }()
  459. var first string
  460. var keyword1 string
  461. var keyword2 string
  462. var keyword3 string
  463. var keyword4 string
  464. var remark string
  465. //获取销售手机号
  466. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  467. if err != nil && err.Error() != utils.ErrNoRow() {
  468. return err
  469. }
  470. cnf, _ := models.GetConfigByCode("tpl_msg")
  471. if cnf != nil && sellerItemQy != nil {
  472. openIdList, e := models.GetWxOpenIdByMobileList(cnf.ConfigValue + "," + sellerItemQy.Mobile)
  473. if e != nil {
  474. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  475. return
  476. }
  477. activityInfo, e := models.GetCygxActivitySpecialDetailById(user.UserId, activityId)
  478. if e != nil {
  479. err = errors.New("GetCygxActivitySpecialDetailById, Err: " + e.Error())
  480. return
  481. }
  482. if activityInfo == nil {
  483. return
  484. }
  485. keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, "(所属销售:", sellerItemQy.RealName, ")")
  486. keyword2 = user.Mobile
  487. keyword3 = time.Now().Format(utils.FormatDateTime)
  488. keyword4 = "报名专项调研【" + activityInfo.ResearchTheme + "】 "
  489. remark = ""
  490. openIdArr := make([]string, 0)
  491. for _, v := range openIdList {
  492. openIdArr = append(openIdArr, v.OpenId)
  493. }
  494. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)
  495. sendInfo := new(SendWxTemplate)
  496. sendInfo.First = first
  497. sendInfo.Keyword1 = keyword1
  498. sendInfo.Keyword2 = keyword2
  499. sendInfo.Keyword3 = keyword3
  500. sendInfo.Keyword4 = keyword4
  501. sendInfo.Remark = remark
  502. sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
  503. sendInfo.RedirectUrl = redirectUrl
  504. sendInfo.RedirectTarget = 3
  505. sendInfo.Resource = strconv.Itoa(activityId)
  506. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  507. sendInfo.OpenIdArr = openIdArr
  508. err = PublicSendTemplateMsg(sendInfo)
  509. if err != nil {
  510. return
  511. }
  512. }
  513. return
  514. }