activity_points.go 35 KB

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