activity_points.go 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_mfyx/models"
  7. "hongze/hongze_mfyx/models/company"
  8. "hongze/hongze_mfyx/utils"
  9. "strconv"
  10. "time"
  11. )
  12. // GetActivityPointsByUserAllMap 获取所有针对用户扣点的活动
  13. func GetActivityPointsByUserAllMap() (mapResp map[int]bool) {
  14. var err error
  15. defer func() {
  16. if err != nil {
  17. fmt.Println(err)
  18. go utils.SendAlarmMsg("GetActivityPointsByUserAllMap,Err:"+err.Error(), 2)
  19. }
  20. }()
  21. var condition string
  22. var pars []interface{}
  23. //获取所有研选类型的活动
  24. condition = ` AND chart_permission_id = ` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN)
  25. listActivity, e := models.GetActivityListByCondition(condition, pars)
  26. if e != nil {
  27. err = errors.New("GetActivityListByCondition, Err: " + e.Error())
  28. return
  29. }
  30. var activityIds []int
  31. condition = ""
  32. pars = make([]interface{}, 0)
  33. for _, v := range listActivity {
  34. activityIds = append(activityIds, v.ActivityId)
  35. }
  36. condition += ` AND points_object IN (1,3) `
  37. condition += ` AND activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `) `
  38. pars = append(pars, activityIds)
  39. list, e := models.GetCygxActivityPointsSetList(condition, pars, 0, 0)
  40. if e != nil {
  41. err = errors.New("GetCygxActivityPointsSetList, Err: " + e.Error())
  42. return
  43. }
  44. mapResp = make(map[int]bool, 0)
  45. for _, v := range list {
  46. mapResp[v.ActivityId] = true
  47. }
  48. return
  49. }
  50. // GetActivityPointsAll 获取所有带有扣点的活动
  51. func GetActivityPointsAll() (mapResp map[int]bool, err error) {
  52. defer func() {
  53. if err != nil {
  54. fmt.Println(err)
  55. go utils.SendAlarmMsg("获取所有带有扣点的活动失败"+err.Error(), 2)
  56. }
  57. }()
  58. var condition string
  59. var pars []interface{}
  60. mapResp = make(map[int]bool, 0)
  61. list, e := models.GetCygxActivityPointsSetList(condition, pars, 0, 0)
  62. if e != nil && e.Error() != utils.ErrNoRow() {
  63. err = errors.New("GetCygxActivityPointsSetList,Err: " + e.Error())
  64. return
  65. }
  66. for _, v := range list {
  67. mapResp[v.ActivityId] = true
  68. }
  69. return
  70. }
  71. // 用户报名添加到处理研选扣点
  72. func YanXuanActivityPointsBillSignupAdd(activityId, uid int) (err error) {
  73. defer func() {
  74. if err != nil {
  75. fmt.Println(err)
  76. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  77. go utils.SendAlarmMsg("用户报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  78. }
  79. }()
  80. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  81. log := &models.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 1, RegisterPlatform: utils.REGISTER_PLATFORM, Source: 1, CreateTime: time.Now()}
  82. if utils.Re == nil {
  83. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  84. if err != nil {
  85. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  86. }
  87. }
  88. return
  89. }
  90. // 用户取消报名添加到处理研选扣点
  91. func YanXuanActivityPointsBillSignupCancel(activityId, uid int) (err error) {
  92. defer func() {
  93. if err != nil {
  94. fmt.Println(err)
  95. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  96. go utils.SendAlarmMsg("用户取消报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  97. }
  98. }()
  99. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  100. log := &models.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 2, RegisterPlatform: utils.REGISTER_PLATFORM, Source: 1, CreateTime: time.Now()}
  101. if utils.Re == nil {
  102. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  103. if err != nil {
  104. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  105. }
  106. }
  107. return
  108. }
  109. // 5 活动到会研选扣点处理
  110. func YanXuanActivityPointsBillSubmitMeeting(activityId, adminId int) (err error) {
  111. defer func() {
  112. if err != nil {
  113. fmt.Println(err)
  114. msg := fmt.Sprint("activityId:", activityId)
  115. go utils.SendAlarmMsg("活动到会研选扣点处理,写入Redis队列消息失败:"+err.Error()+msg, 2)
  116. }
  117. }()
  118. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。6:研选审批通过的时候研选扣点更新、 7:正式专试用定时任务更新研选扣点"`
  119. log := &models.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 5, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  120. if utils.Re == nil {
  121. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  122. if err != nil {
  123. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  124. }
  125. }
  126. return
  127. }
  128. // YanXuanActivityPointsBillReduce 处理研选活动扣点
  129. func YanXuanActivityPointsBillReduce() (err error) {
  130. for {
  131. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  132. utils.Rc.Brpop(utils.CYGX_YANXUAN_POINTS_KEY, func(b []byte) {
  133. var log models.YanXuanActivityPointsRedis
  134. if err := json.Unmarshal(b, &log); err != nil {
  135. fmt.Println("json unmarshal wrong!")
  136. go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+err.Error()+string(b), 2)
  137. }
  138. switch log.SourceType {
  139. case 1:
  140. go YanXuanActivityPointsBillSignupAddReduce(log)
  141. fmt.Println("1:报名")
  142. break
  143. case 2:
  144. go YanXuanActivityPointsBillSignupCancelReduce(log)
  145. fmt.Println(" 2:取消报名")
  146. break
  147. case 3:
  148. go YanXuanActivityPointsBillActivityEditReduce(log)
  149. fmt.Println("3:活动编辑")
  150. break
  151. case 4:
  152. go YanXuanActivityPointsBillActivityPublishAndCancelReduce(log)
  153. fmt.Println("4:活动发布、取消发布")
  154. break
  155. case 5:
  156. go YanXuanActivityPointsBillSubmitMeetingReduce(log)
  157. fmt.Println("5:活动到会研选扣点处理。")
  158. case 6:
  159. go YanXuanCompanyApprovalReduce(log)
  160. fmt.Println("6:研选审批通过的时候研选扣点更新。")
  161. break
  162. case 7:
  163. go YanXuanCompanyCompanyTryOutReduce(log)
  164. fmt.Println("7:正式专试用定时任务更新研选扣点。")
  165. break
  166. default:
  167. fmt.Println(string(b))
  168. go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+string(b), 2)
  169. }
  170. })
  171. }
  172. }
  173. // 1:用户报名
  174. func YanXuanActivityPointsBillSignupAddReduce(log models.YanXuanActivityPointsRedis) (err error) {
  175. defer func() {
  176. if err != nil {
  177. fmt.Println(err)
  178. go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
  179. }
  180. }()
  181. //加2000毫秒的延迟
  182. time.Sleep(2 * time.Second)
  183. activityId := log.ActivityId
  184. userId := log.UserId
  185. //获取活动是否扣点以及扣点规则明细
  186. activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
  187. if e != nil && e.Error() != utils.ErrNoRow() {
  188. err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
  189. return
  190. }
  191. if activityPointsSetDetail == nil {
  192. return
  193. }
  194. if activityPointsSetDetail.UserPointsNum == 0 || activityPointsSetDetail.PointsType != 1 {
  195. return // 如果不是报名即扣点的这种形式,那么就不做任何处理
  196. }
  197. activityInfo, e := models.GetAddActivityInfoById(activityId)
  198. if e != nil {
  199. err = errors.New("GetAddActivityInfoById" + e.Error())
  200. return
  201. }
  202. user, e := models.GetWxUserItemByUserId(userId)
  203. if e != nil {
  204. err = errors.New("GetWxUserItemByUserId" + e.Error())
  205. return
  206. }
  207. // 获取用户所在公司剩余的点
  208. companyPointsNum, e := models.GetCompanyPoints(user.CompanyId)
  209. if e != nil && e.Error() != utils.ErrNoRow() {
  210. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  211. return
  212. }
  213. //获取需要添加的流水信息
  214. var items []*models.CygxActivityPointsBill
  215. item := new(models.CygxActivityPointsBill)
  216. item.UserId = user.UserId
  217. item.ActivityId = activityId
  218. item.CreateTime = time.Now()
  219. item.Mobile = user.Mobile
  220. item.Email = user.Email
  221. item.CompanyId = user.CompanyId
  222. item.CompanyName = user.CompanyName
  223. item.RealName = user.RealName
  224. item.BillDetailed = -activityPointsSetDetail.UserPointsNum
  225. item.RegisterPlatform = log.RegisterPlatform
  226. item.AdminId = log.AdminId
  227. item.Source = log.Source
  228. item.ChartPermissionId = activityInfo.ChartPermissionId
  229. item.DoType = 1
  230. item.Content = activityInfo.ActivityName + "--报名"
  231. item.Points = companyPointsNum - activityPointsSetDetail.UserPointsNum
  232. items = append(items, item)
  233. //更新对应机构的剩余点数
  234. var itemCompanys []*models.CygxActivityPointsCompany
  235. itemCompany := new(models.CygxActivityPointsCompany)
  236. itemCompany.CompanyId = user.CompanyId
  237. itemCompany.Points = item.Points
  238. itemCompany.ModifyTime = time.Now()
  239. itemCompanys = append(itemCompanys, itemCompany)
  240. err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  241. return
  242. }
  243. // 2:用户取消报名
  244. func YanXuanActivityPointsBillSignupCancelReduce(log models.YanXuanActivityPointsRedis) (err error) {
  245. defer func() {
  246. if err != nil {
  247. fmt.Println(err)
  248. go utils.SendAlarmMsg("用户取消报名扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
  249. }
  250. }()
  251. activityId := log.ActivityId
  252. userId := log.UserId
  253. //获取活动是否扣点以及扣点规则明细
  254. activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
  255. if e != nil && e.Error() != utils.ErrNoRow() {
  256. err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
  257. return
  258. }
  259. if activityPointsSetDetail == nil {
  260. return
  261. }
  262. if activityPointsSetDetail.UserPointsNum == 0 || activityPointsSetDetail.PointsType != 1 {
  263. return // 如果不是报名即扣点的这种形式,那么就不做任何处理
  264. }
  265. activityInfo, e := models.GetAddActivityInfoById(activityId)
  266. if e != nil {
  267. err = errors.New("GetAddActivityInfoById" + e.Error())
  268. return
  269. }
  270. user, e := models.GetWxUserItemByUserId(userId)
  271. if e != nil {
  272. err = errors.New("GetWxUserItemByUserId" + e.Error())
  273. return
  274. }
  275. // 获取用户所在公司剩余的点
  276. companyPointsNum, e := models.GetCompanyPoints(user.CompanyId)
  277. if e != nil && e.Error() != utils.ErrNoRow() {
  278. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  279. return
  280. }
  281. //查询最新的一条针对这个用户的扣点记录
  282. var condition string
  283. var pars []interface{}
  284. condition += ` AND activity_id = ? AND user_id = ? AND bill_detailed < 0 ORDER BY id DESC LIMIT 1 `
  285. pars = append(pars, activityId, userId)
  286. activityPointsBillDetail, e := models.GetCygxActivityPointsBillDetailByCondition(condition, pars)
  287. if e != nil {
  288. err = errors.New("activityPointsBillDetail" + e.Error())
  289. return
  290. }
  291. //获取需要添加的流水信息
  292. var items []*models.CygxActivityPointsBill
  293. item := new(models.CygxActivityPointsBill)
  294. item.UserId = user.UserId
  295. item.ActivityId = activityId
  296. item.CreateTime = time.Now()
  297. item.Mobile = user.Mobile
  298. item.Email = user.Email
  299. item.CompanyId = user.CompanyId
  300. item.CompanyName = user.CompanyName
  301. item.RealName = user.RealName
  302. item.BillDetailed = -activityPointsBillDetail.BillDetailed
  303. item.RegisterPlatform = log.RegisterPlatform
  304. item.AdminId = log.AdminId
  305. item.Source = log.Source
  306. item.ChartPermissionId = activityInfo.ChartPermissionId
  307. item.DoType = 2
  308. item.Content = activityInfo.ActivityName + "--取消报名"
  309. item.Points = companyPointsNum - activityPointsBillDetail.BillDetailed
  310. items = append(items, item)
  311. //更新对应机构的剩余点数
  312. var itemCompanys []*models.CygxActivityPointsCompany
  313. itemCompany := new(models.CygxActivityPointsCompany)
  314. itemCompany.CompanyId = user.CompanyId
  315. itemCompany.Points = item.Points
  316. itemCompany.ModifyTime = time.Now()
  317. itemCompanys = append(itemCompanys, itemCompany)
  318. err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  319. return
  320. }
  321. // 3:活动编辑
  322. func YanXuanActivityPointsBillActivityEditReduce(log models.YanXuanActivityPointsRedis) (err error) {
  323. defer func() {
  324. if err != nil {
  325. fmt.Println(err)
  326. go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
  327. }
  328. }()
  329. activityId := log.ActivityId
  330. //获取活动是否扣点以及扣点规则明细
  331. activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
  332. if e != nil && e.Error() != utils.ErrNoRow() {
  333. err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
  334. return
  335. }
  336. if activityPointsSetDetail == nil {
  337. return
  338. }
  339. if activityPointsSetDetail.CompanyPointsNum == 0 {
  340. return // 如果不是办会人,即扣点的这种形式,那么就不做任何处理
  341. }
  342. comapnyId := activityPointsSetDetail.CompanyId
  343. activityInfo, e := models.GetAddActivityInfoByActivityId(activityId)
  344. if e != nil {
  345. err = errors.New("GetAddActivityInfoByActivityId" + e.Error())
  346. return
  347. }
  348. if activityInfo.PublishStatus == 0 {
  349. return // 未发布的活动不做处理
  350. }
  351. comapny, e := models.GetCompanyById(comapnyId)
  352. if e != nil {
  353. err = errors.New("GetCompanyById" + e.Error())
  354. return
  355. }
  356. // 获取用户所在公司剩余的点
  357. companyPointsNum, e := models.GetCompanyPoints(comapny.CompanyId)
  358. if e != nil && e.Error() != utils.ErrNoRow() {
  359. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  360. return
  361. }
  362. //查询最新的一条针对这个公司的扣点记录
  363. var condition string
  364. var pars []interface{}
  365. condition += ` AND activity_id = ? AND company_id = ? AND mobile = '' AND bill_detailed < 0 ORDER BY id DESC LIMIT 1 `
  366. pars = append(pars, activityId, comapnyId)
  367. activityPointsBillDetail, e := models.GetCygxActivityPointsBillDetailByCondition(condition, pars)
  368. if e != nil && e.Error() != utils.ErrNoRow() {
  369. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  370. return
  371. }
  372. var items []*models.CygxActivityPointsBill
  373. item := new(models.CygxActivityPointsBill)
  374. var itemCompanys []*models.CygxActivityPointsCompany
  375. itemCompany := new(models.CygxActivityPointsCompany)
  376. if activityPointsBillDetail == nil { //如果是空的就添加
  377. //获取需要添加的流水信息
  378. //item.UserId = user.UserId
  379. item.ActivityId = activityId
  380. item.CreateTime = time.Now()
  381. //item.Mobile = user.Mobile
  382. //item.Email = user.Email
  383. item.CompanyId = comapny.CompanyId
  384. item.CompanyName = comapny.CompanyName
  385. //item.RealName = user.RealName
  386. item.BillDetailed = -activityPointsSetDetail.CompanyPointsNum
  387. item.RegisterPlatform = log.RegisterPlatform
  388. item.AdminId = log.AdminId
  389. item.Source = log.Source
  390. item.ChartPermissionId = activityInfo.ChartPermissionId
  391. item.DoType = 1
  392. item.Content = activityInfo.ActivityName + "--办会"
  393. item.Points = companyPointsNum - activityPointsSetDetail.CompanyPointsNum
  394. items = append(items, item)
  395. //更新对应机构的剩余点数
  396. itemCompany.CompanyId = comapny.CompanyId
  397. itemCompany.Points = item.Points
  398. itemCompany.ModifyTime = time.Now()
  399. itemCompanys = append(itemCompanys, itemCompany)
  400. e = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  401. if e != nil && e.Error() != utils.ErrNoRow() {
  402. err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
  403. return
  404. }
  405. } else {
  406. //如果存在就进行对比修改
  407. if activityPointsSetDetail.CompanyPointsNum != -activityPointsBillDetail.BillDetailed {
  408. item.Id = activityPointsBillDetail.Id
  409. item.BillDetailed = -activityPointsSetDetail.CompanyPointsNum
  410. item.Points = companyPointsNum - activityPointsBillDetail.BillDetailed - activityPointsSetDetail.CompanyPointsNum
  411. items = append(items, item)
  412. //更新对应机构的剩余点数
  413. itemCompany.CompanyId = comapny.CompanyId
  414. itemCompany.Points = item.Points
  415. itemCompany.ModifyTime = time.Now()
  416. itemCompanys = append(itemCompanys, itemCompany)
  417. e = models.UpdateCygxActivityPointsBillMulti(items, itemCompanys)
  418. if e != nil && e.Error() != utils.ErrNoRow() {
  419. err = errors.New("UpdateCygxActivityPointsBillMulti, Err: " + e.Error())
  420. return
  421. }
  422. }
  423. }
  424. return
  425. }
  426. // 4:活动发布取消发布
  427. func YanXuanActivityPointsBillActivityPublishAndCancelReduce(log models.YanXuanActivityPointsRedis) (err error) {
  428. defer func() {
  429. if err != nil {
  430. fmt.Println(err)
  431. go utils.SendAlarmMsg("活动发布扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
  432. }
  433. }()
  434. activityId := log.ActivityId
  435. publishStatus := log.PublishStatus
  436. //comapnyId := log.ComapnyId
  437. //获取活动是否扣点以及扣点规则明细
  438. activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
  439. if e != nil && e.Error() != utils.ErrNoRow() {
  440. err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
  441. return
  442. }
  443. if activityPointsSetDetail == nil {
  444. return
  445. }
  446. if activityPointsSetDetail.CompanyPointsNum == 0 && activityPointsSetDetail.PointsType == 2 {
  447. //if activityPointsSetDetail.CompanyPointsNum == 0 {
  448. return // 如果不是办会人扣点,且对用户是到会扣点的这种形式,那么就不做任何处理
  449. }
  450. activityInfo, e := models.GetAddActivityInfoByActivityId(activityId)
  451. if e != nil {
  452. err = errors.New("GetAddActivityInfoByActivityId" + e.Error())
  453. return
  454. }
  455. comapnyId := activityPointsSetDetail.CompanyId
  456. var items []*models.CygxActivityPointsBill
  457. var itemCompanys []*models.CygxActivityPointsCompany
  458. mapCompanyPoints := make(map[int]float64) //一组公司的剩余点数
  459. if publishStatus == 1 {
  460. fmt.Println("//活动发布")
  461. if comapnyId > 0 {
  462. comapny, e := models.GetCompanyById(comapnyId)
  463. if e != nil {
  464. err = errors.New("GetCompanyById" + e.Error())
  465. return
  466. }
  467. // 获取用户所在公司剩余的点
  468. companyPointsNum, e := models.GetCompanyPoints(comapny.CompanyId)
  469. if e != nil && e.Error() != utils.ErrNoRow() {
  470. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  471. return
  472. }
  473. item := new(models.CygxActivityPointsBill)
  474. item.ActivityId = activityId
  475. item.CreateTime = time.Now()
  476. //item.Mobile = user.Mobile
  477. //item.Email = user.Email
  478. item.CompanyId = comapny.CompanyId
  479. item.CompanyName = comapny.CompanyName
  480. //item.RealName = user.RealName
  481. item.BillDetailed = -activityPointsSetDetail.CompanyPointsNum
  482. item.RegisterPlatform = log.RegisterPlatform
  483. item.AdminId = log.AdminId
  484. item.Source = log.Source
  485. item.ChartPermissionId = activityInfo.ChartPermissionId
  486. item.DoType = 1
  487. item.Content = activityInfo.ActivityName + "--办会"
  488. item.Points = companyPointsNum - activityPointsSetDetail.CompanyPointsNum
  489. items = append(items, item)
  490. //更新对应机构的剩余点数
  491. itemCompany := new(models.CygxActivityPointsCompany)
  492. itemCompany.CompanyId = comapny.CompanyId
  493. itemCompany.Points = item.Points
  494. itemCompany.ModifyTime = time.Now()
  495. itemCompanys = append(itemCompanys, itemCompany)
  496. mapCompanyPoints[comapnyId] = item.Points
  497. }
  498. if activityPointsSetDetail.UserPointsNum > 0 && activityPointsSetDetail.PointsType == 1 {
  499. //如果扣点形式选的是报名即扣点,那么就对已经报名的用户所在机构进行扣点
  500. var condition string
  501. var pars []interface{}
  502. condition = ` AND do_fail_type = 0 AND activity_id = ?`
  503. pars = append(pars, activityId)
  504. listSignup, e := models.GetActivitySignupList(condition, pars)
  505. if e != nil && e.Error() != utils.ErrNoRow() {
  506. err = errors.New("GetActivitySignupList, Err: " + e.Error())
  507. return
  508. }
  509. var companyIds []int
  510. if len(listSignup) > 0 {
  511. for _, v := range listSignup {
  512. companyIds = append(companyIds, v.CompanyId)
  513. }
  514. pars = make([]interface{}, 0)
  515. condition = ` AND company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
  516. pars = append(pars, companyIds)
  517. //获取这些公司剩余的点数
  518. conpanyList, e := models.GetCygxActivityPointsCompanyList(condition, pars)
  519. if e != nil && e.Error() != utils.ErrNoRow() {
  520. err = errors.New("GetCygxActivityPointsCompanyList, Err: " + e.Error())
  521. return
  522. }
  523. for _, v := range conpanyList {
  524. if mapCompanyPoints[v.CompanyId] == 0 {
  525. mapCompanyPoints[v.CompanyId] = v.Points
  526. }
  527. }
  528. for _, user := range listSignup {
  529. item := new(models.CygxActivityPointsBill)
  530. item.ActivityId = activityId
  531. item.CreateTime = time.Now()
  532. item.Mobile = user.Mobile
  533. item.UserId = user.UserId
  534. item.Email = user.Email
  535. item.CompanyId = user.CompanyId
  536. item.CompanyName = user.CompanyName
  537. item.RealName = user.RealName
  538. item.BillDetailed = -activityPointsSetDetail.UserPointsNum
  539. item.RegisterPlatform = log.RegisterPlatform
  540. item.AdminId = log.AdminId
  541. item.Source = log.Source
  542. item.ChartPermissionId = activityInfo.ChartPermissionId
  543. item.DoType = 1
  544. item.Content = activityInfo.ActivityName + "--发布活动"
  545. mapCompanyPoints[user.CompanyId] -= activityPointsSetDetail.UserPointsNum //通过map处理机构剩余点数
  546. item.Points = mapCompanyPoints[user.CompanyId]
  547. items = append(items, item)
  548. //更新对应机构的剩余点数
  549. itemCompany := new(models.CygxActivityPointsCompany)
  550. itemCompany.CompanyId = user.CompanyId
  551. itemCompany.Points = item.Points
  552. itemCompany.ModifyTime = time.Now()
  553. itemCompanys = append(itemCompanys, itemCompany)
  554. mapCompanyPoints[user.CompanyId] = item.Points
  555. }
  556. }
  557. }
  558. } else {
  559. fmt.Println("//活动取消发布")
  560. //活动取消发布
  561. if comapnyId > 0 {
  562. comapny, e := models.GetCompanyById(comapnyId)
  563. if e != nil {
  564. err = errors.New("GetCompanyById" + e.Error())
  565. return
  566. }
  567. // 获取用户所在公司剩余的点
  568. companyPointsNum, e := models.GetCompanyPoints(comapny.CompanyId)
  569. if e != nil && e.Error() != utils.ErrNoRow() {
  570. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  571. return
  572. }
  573. item := new(models.CygxActivityPointsBill)
  574. item.ActivityId = activityId
  575. item.CreateTime = time.Now()
  576. //item.Mobile = user.Mobile
  577. //item.Email = user.Email
  578. item.CompanyId = comapny.CompanyId
  579. item.CompanyName = comapny.CompanyName
  580. //item.RealName = user.RealName
  581. item.BillDetailed = activityPointsSetDetail.CompanyPointsNum
  582. item.RegisterPlatform = log.RegisterPlatform
  583. item.AdminId = log.AdminId
  584. item.Source = log.Source
  585. item.ChartPermissionId = activityInfo.ChartPermissionId
  586. item.DoType = 2
  587. item.Content = activityInfo.ActivityName + "--取消办会"
  588. item.Points = companyPointsNum + activityPointsSetDetail.CompanyPointsNum
  589. items = append(items, item)
  590. //更新对应机构的剩余点数
  591. itemCompany := new(models.CygxActivityPointsCompany)
  592. itemCompany.CompanyId = comapny.CompanyId
  593. itemCompany.Points = item.Points
  594. itemCompany.ModifyTime = time.Now()
  595. itemCompanys = append(itemCompanys, itemCompany)
  596. mapCompanyPoints[comapnyId] = item.Points
  597. }
  598. if activityPointsSetDetail.UserPointsNum > 0 && activityPointsSetDetail.PointsType == 1 {
  599. //如果扣点形式选的是报名即扣点,那么就对已经报名的用户所在机构进行返点
  600. var condition string
  601. var pars []interface{}
  602. condition = ` AND do_fail_type = 0 AND activity_id = ?`
  603. pars = append(pars, activityId)
  604. listSignup, e := models.GetActivitySignupList(condition, pars)
  605. if e != nil && e.Error() != utils.ErrNoRow() {
  606. err = errors.New("GetActivitySignupList, Err: " + e.Error())
  607. return
  608. }
  609. var companyIds []int
  610. if len(listSignup) > 0 {
  611. for _, v := range listSignup {
  612. companyIds = append(companyIds, v.CompanyId)
  613. }
  614. pars = make([]interface{}, 0)
  615. condition = ` AND company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
  616. pars = append(pars, companyIds)
  617. //获取这些公司剩余的点数
  618. conpanyList, e := models.GetCygxActivityPointsCompanyList(condition, pars)
  619. if e != nil && e.Error() != utils.ErrNoRow() {
  620. err = errors.New("GetCygxActivityPointsCompanyList, Err: " + e.Error())
  621. return
  622. }
  623. for _, v := range conpanyList {
  624. if mapCompanyPoints[v.CompanyId] == 0 {
  625. mapCompanyPoints[v.CompanyId] = v.Points
  626. }
  627. }
  628. pars = make([]interface{}, 0)
  629. condition = ` AND activity_id = ? `
  630. pars = append(pars, activityId)
  631. //获取扣点的流水记录
  632. activityPointsBillList, e := models.GetCygxActivityPointsBillList(condition, pars)
  633. if e != nil && e.Error() != utils.ErrNoRow() {
  634. err = errors.New("GetCygxActivityPointsBillList" + e.Error())
  635. return
  636. }
  637. mapUserBill := make(map[int]bool)
  638. for _, v := range activityPointsBillList {
  639. mapUserBill[v.UserId] = true
  640. }
  641. for _, user := range listSignup {
  642. if !mapUserBill[user.UserId] {
  643. continue // 如果用户的扣点记录不存在,那么就不进行返点处理
  644. }
  645. item := new(models.CygxActivityPointsBill)
  646. item.ActivityId = activityId
  647. item.CreateTime = time.Now()
  648. item.Mobile = user.Mobile
  649. item.UserId = user.UserId
  650. item.Email = user.Email
  651. item.CompanyId = user.CompanyId
  652. item.CompanyName = user.CompanyName
  653. item.RealName = user.RealName
  654. item.BillDetailed = activityPointsSetDetail.UserPointsNum
  655. item.RegisterPlatform = log.RegisterPlatform
  656. item.AdminId = log.AdminId
  657. item.Source = log.Source
  658. item.ChartPermissionId = activityInfo.ChartPermissionId
  659. item.DoType = 2
  660. item.Content = activityInfo.ActivityName + "--取消活动"
  661. mapCompanyPoints[user.CompanyId] += activityPointsSetDetail.UserPointsNum //通过map处理机构剩余点数
  662. item.Points = mapCompanyPoints[user.CompanyId]
  663. items = append(items, item)
  664. //更新对应机构的剩余点数
  665. itemCompany := new(models.CygxActivityPointsCompany)
  666. itemCompany.CompanyId = user.CompanyId
  667. itemCompany.Points = item.Points
  668. itemCompany.ModifyTime = time.Now()
  669. itemCompanys = append(itemCompanys, itemCompany)
  670. mapCompanyPoints[user.CompanyId] = item.Points
  671. }
  672. }
  673. }
  674. }
  675. e = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  676. if e != nil && e.Error() != utils.ErrNoRow() {
  677. err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
  678. return
  679. }
  680. return
  681. }
  682. //func init() {
  683. // log := models.YanXuanActivityPointsRedis{ActivityId: 2385, SourceType: 5, RegisterPlatform: utils.REGISTER_PLATFORM, Source: 4, CreateTime: time.Now()}
  684. // YanXuanActivityPointsBillSubmitMeetingReduce(log)
  685. //}
  686. // 5:活动到会研选扣点处理
  687. func YanXuanActivityPointsBillSubmitMeetingReduce(log models.YanXuanActivityPointsRedis) (err error) {
  688. //func YanXuanActivityPointsBillSubmitMeetingReduce(activityId int) (err error) {
  689. defer func() {
  690. if err != nil {
  691. fmt.Println(err)
  692. go utils.SendAlarmMsg("活动到会研选扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "adminId", log.AdminId), 2)
  693. }
  694. }()
  695. activityId := log.ActivityId
  696. //获取活动是否扣点以及扣点规则明细
  697. activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
  698. if e != nil && e.Error() != utils.ErrNoRow() {
  699. err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
  700. return
  701. }
  702. if activityPointsSetDetail == nil {
  703. return
  704. }
  705. if activityPointsSetDetail.PointsType != 2 {
  706. return // 如果不是到会即扣点,的这种形式,那么就不做任何处理
  707. }
  708. activityInfo, e := models.GetAddActivityInfoByActivityId(activityId)
  709. if e != nil {
  710. err = errors.New("GetAddActivityInfoByActivityId" + e.Error())
  711. return
  712. }
  713. var companyIds []int
  714. mapCompanyPoints := make(map[int]float64) //一组公司的剩余点数
  715. var condition string
  716. var pars []interface{}
  717. condition += ` AND activity_id = ? AND is_meeting = 1 `
  718. pars = append(pars, activityId)
  719. //获取提交到会的人员信息
  720. signUpDetailList, e := models.GetSignupDetailList(condition, pars)
  721. if e != nil && e.Error() != utils.ErrNoRow() {
  722. err = errors.New("GetSignupDetailList" + e.Error())
  723. return
  724. }
  725. if len(signUpDetailList) == 0 {
  726. return
  727. }
  728. for _, v := range signUpDetailList {
  729. companyIds = append(companyIds, v.CompanyId)
  730. }
  731. //return
  732. pars = make([]interface{}, 0)
  733. condition = ` AND company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
  734. pars = append(pars, companyIds)
  735. //获取这些公司剩余的点数
  736. conpanyList, e := models.GetCygxActivityPointsCompanyList(condition, pars)
  737. if e != nil && e.Error() != utils.ErrNoRow() {
  738. err = errors.New("GetCygxActivityPointsCompanyList, Err: " + e.Error())
  739. return
  740. }
  741. pars = make([]interface{}, 0)
  742. condition = ` AND activity_id = ? AND mobile != '' `
  743. pars = append(pars, activityId)
  744. //获取扣点的流水记录
  745. activityPointsBillList, e := models.GetCygxActivityPointsBillList(condition, pars)
  746. if e != nil && e.Error() != utils.ErrNoRow() {
  747. err = errors.New("GetCygxActivityPointsBillList" + e.Error())
  748. return
  749. }
  750. mapActivityPointsBill := make(map[string]*models.CygxActivityPointsBill)
  751. for _, v := range activityPointsBillList {
  752. mapActivityPointsBill[v.Mobile] = v
  753. }
  754. //return
  755. for _, v := range conpanyList {
  756. if v.CompanyId != 0 {
  757. mapCompanyPoints[v.CompanyId] = v.Points
  758. }
  759. }
  760. //return
  761. var items []*models.CygxActivityPointsBill
  762. var itemCompanys []*models.CygxActivityPointsCompany
  763. for _, user := range signUpDetailList {
  764. item := new(models.CygxActivityPointsBill)
  765. item.ActivityId = activityId
  766. item.CreateTime = time.Now()
  767. item.UserId = user.UserId
  768. item.Mobile = user.Mobile
  769. item.Email = user.Email
  770. item.CompanyId = user.CompanyId
  771. item.CompanyName = user.CompanyName
  772. item.RealName = user.RealName
  773. item.RegisterPlatform = log.RegisterPlatform
  774. item.AdminId = log.AdminId
  775. item.Source = log.Source
  776. item.ChartPermissionId = activityInfo.ChartPermissionId
  777. //如果没有扣点记录就对他们进行扣点处理
  778. if mapActivityPointsBill[user.Mobile] == nil {
  779. item.BillDetailed = -activityPointsSetDetail.UserPointsNum
  780. item.DoType = 1
  781. item.Content = activityInfo.ActivityName + "--活动到会"
  782. item.Points = mapCompanyPoints[user.CompanyId] - activityPointsSetDetail.UserPointsNum
  783. items = append(items, item)
  784. //更新对应机构的剩余点数
  785. itemCompany := new(models.CygxActivityPointsCompany)
  786. itemCompany.CompanyId = user.CompanyId
  787. itemCompany.Points = item.Points
  788. itemCompany.ModifyTime = time.Now()
  789. itemCompanys = append(itemCompanys, itemCompany)
  790. mapCompanyPoints[user.CompanyId] = item.Points
  791. } else {
  792. //第二次提交改成未到会的,对其进行返点处理
  793. if mapActivityPointsBill[user.Mobile].BillDetailed < 0 {
  794. item.BillDetailed = activityPointsSetDetail.UserPointsNum
  795. item.DoType = 2
  796. item.Content = activityInfo.ActivityName + "--活动取消到会"
  797. item.Points = mapCompanyPoints[user.CompanyId] + activityPointsSetDetail.UserPointsNum
  798. items = append(items, item)
  799. //更新对应机构的剩余点数
  800. itemCompany := new(models.CygxActivityPointsCompany)
  801. itemCompany.CompanyId = user.CompanyId
  802. itemCompany.Points = item.Points
  803. itemCompany.ModifyTime = time.Now()
  804. itemCompanys = append(itemCompanys, itemCompany)
  805. mapCompanyPoints[user.CompanyId] = item.Points
  806. }
  807. }
  808. }
  809. e = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  810. if e != nil && e.Error() != utils.ErrNoRow() {
  811. err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
  812. return
  813. }
  814. return
  815. }
  816. // 6:研选审批通过的时候研选扣点更新
  817. func YanXuanCompanyApprovalReduce(log models.YanXuanActivityPointsRedis) (err error) {
  818. time.Sleep(5 * time.Second) // 延迟5秒处理
  819. defer func() {
  820. if err != nil {
  821. fmt.Println(err)
  822. go utils.SendAlarmMsg("研选审批通过的时候研选扣点更新,处理Redis队列消息失败:"+err.Error()+fmt.Sprint(log), 2)
  823. }
  824. }()
  825. comapnyId := log.ComapnyId
  826. comapnyDetail, e := models.GetCompanyById(comapnyId)
  827. if e != nil {
  828. err = errors.New("GetCompanyById" + e.Error())
  829. return
  830. }
  831. total, e := models.GetCygxActivityPointsCompanyCountByCompanyId(comapnyId)
  832. if e != nil {
  833. err = errors.New("GetCygxActivityPointsCompanyCountByCompanyId, Err: " + e.Error())
  834. return
  835. }
  836. //查询研选的权限状态
  837. var condition string
  838. var pars []interface{}
  839. condition += " AND company_id = ? AND status = ? AND chart_permission_id = ? ORDER BY company_report_permission_id DESC LIMIT 1 "
  840. pars = append(pars, comapnyId, "正式", utils.CHART_PERMISSION_ID_YANXUAN)
  841. companyReportPermissionDetail, e := models.GetCompanyReportPermissionDetailByCondition(condition, pars)
  842. if e != nil && e.Error() != utils.ErrNoRow() {
  843. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  844. return
  845. }
  846. if companyReportPermissionDetail == nil {
  847. return // 如果不存在就不做研选扣点处理
  848. }
  849. //获取最近的一条审批合同信息
  850. newCompanyApprovalDetail, e := company.GetCompanyApprovalById(comapnyId)
  851. if e != nil && e.Error() != utils.ErrNoRow() {
  852. err = errors.New("GetCompanyApprovalById, Err: " + e.Error())
  853. return
  854. }
  855. if newCompanyApprovalDetail == nil {
  856. return
  857. }
  858. companyContractId := newCompanyApprovalDetail.CompanyContractId
  859. totalYxPerminssion, e := company.GetCompanyContractPermissionCheck(companyContractId, utils.CHART_PERMISSION_ID_YANXUAN)
  860. if e != nil {
  861. err = errors.New("GetCompanyContractPermissionCheck, Err: " + e.Error())
  862. return
  863. }
  864. // 如果最新的审批合同里没有研选的权限,那么就不做处理
  865. if totalYxPerminssion == 0 {
  866. return
  867. }
  868. var billDetailed float64
  869. var content string
  870. //ExpensiveYx int `description:"权益研选: 0->3w; 1->5w;2->10W"` 3W3次、5W 15次,20w:40次 ,
  871. if companyReportPermissionDetail.ExpensiveYx == 1 {
  872. billDetailed = 15
  873. content = "买方研选(5W)转正"
  874. } else if companyReportPermissionDetail.ExpensiveYx == 2 {
  875. billDetailed = 40
  876. content = "买方研选(10w)转正"
  877. } else {
  878. billDetailed = 3
  879. content = "买方研选(3W)转正"
  880. }
  881. //获取需要添加的流水信息
  882. var items []*models.CygxActivityPointsBill
  883. item := new(models.CygxActivityPointsBill)
  884. //item.UserId = user.UserId
  885. //item.ActivityId = activityId
  886. item.CreateTime = time.Now()
  887. //item.Mobile = user.Mobile
  888. //item.Email = user.Email
  889. item.CompanyId = comapnyDetail.CompanyId
  890. item.CompanyName = comapnyDetail.CompanyName
  891. //item.RealName = user.RealName
  892. item.BillDetailed = billDetailed
  893. item.RegisterPlatform = log.RegisterPlatform
  894. item.AdminId = log.AdminId
  895. item.Source = log.Source
  896. //item.ChartPermissionId = activityInfo.ChartPermissionId
  897. item.DoType = 2
  898. item.Content = content
  899. item.Points = billDetailed
  900. items = append(items, item)
  901. //更新对应机构的剩余点数
  902. var itemCompanys []*models.CygxActivityPointsCompany
  903. itemCompany := new(models.CygxActivityPointsCompany)
  904. itemCompany.CompanyId = comapnyDetail.CompanyId
  905. itemCompany.CompanyName = comapnyDetail.CompanyName
  906. itemCompany.Points = item.Points
  907. itemCompany.CreateTime = time.Now()
  908. itemCompany.ModifyTime = time.Now()
  909. itemCompanys = append(itemCompanys, itemCompany)
  910. //判断是否存在记录,如果有就一个新增一个修改,如果没有就同时新增
  911. if total == 0 {
  912. err = models.AddCygxActivityPointsBillAndCompanyMulti(items, itemCompanys)
  913. } else {
  914. err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  915. }
  916. return
  917. }
  918. // 7:正式专试用定时任务更新研选扣点
  919. func YanXuanCompanyCompanyTryOutReduce(log models.YanXuanActivityPointsRedis) (err error) {
  920. defer func() {
  921. if err != nil {
  922. fmt.Println(err)
  923. go utils.SendAlarmMsg("正式专试用定时任务更新研选扣点更新,处理Redis队列消息失败:"+err.Error()+fmt.Sprint(log), 2)
  924. }
  925. }()
  926. comapnyId := log.ComapnyId
  927. comapny, e := models.GetCompanyById(comapnyId)
  928. if e != nil {
  929. err = errors.New("GetCompanyById" + e.Error())
  930. return
  931. }
  932. // 获取用户所在公司剩余的点
  933. companyPointsNum, e := models.GetCompanyPoints(comapnyId)
  934. if e != nil && e.Error() != utils.ErrNoRow() {
  935. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  936. return
  937. }
  938. if companyPointsNum <= 0 {
  939. return
  940. }
  941. //获取需要添加的流水信息
  942. var items []*models.CygxActivityPointsBill
  943. item := new(models.CygxActivityPointsBill)
  944. //item.UserId = user.UserId
  945. //item.ActivityId = activityId
  946. item.CreateTime = time.Now()
  947. //item.Mobile = user.Mobile
  948. //item.Email = user.Email
  949. item.CompanyId = comapny.CompanyId
  950. item.CompanyName = comapny.CompanyName
  951. //item.RealName = user.RealName
  952. item.BillDetailed = -companyPointsNum
  953. item.RegisterPlatform = log.RegisterPlatform
  954. item.AdminId = log.AdminId
  955. item.Source = log.Source
  956. //item.ChartPermissionId = activityInfo.ChartPermissionId
  957. item.DoType = 2
  958. item.Content = "到期清零"
  959. item.Points = 0
  960. items = append(items, item)
  961. //更新对应机构的剩余点数
  962. var itemCompanys []*models.CygxActivityPointsCompany
  963. itemCompany := new(models.CygxActivityPointsCompany)
  964. itemCompany.CompanyId = comapny.CompanyId
  965. itemCompany.Points = 0
  966. itemCompany.CreateTime = time.Now()
  967. itemCompany.ModifyTime = time.Now()
  968. itemCompanys = append(itemCompanys, itemCompany)
  969. err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  970. return
  971. }