activity_points.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_cygx/models"
  7. "hongze/hongze_cygx/utils"
  8. "time"
  9. )
  10. //func init() {
  11. // GetActivityPointsAll()
  12. //}
  13. // GetActivityPointsAll 获取所有带有扣点的活动
  14. //func GetActivityPointsAll() (listxActivity []*models.CygxActivity, err error) {
  15. // defer func() {
  16. // if err != nil {
  17. // fmt.Println(err)
  18. // go utils.SendAlarmMsg("获取所有带有扣点的活动失败"+err.Error(), 2)
  19. // }
  20. // }()
  21. // var condition string
  22. // var pars []interface{}
  23. // listxActivity = make([]*models.CygxActivity, 0)
  24. // list, e := models.GetCygxActivityPointsSetList(condition, pars, 0, 0)
  25. // if e != nil && e.Error() != utils.ErrNoRow() {
  26. // err = errors.New("GetCygxActivityPointsSetList,Err: " + e.Error())
  27. // return
  28. // }
  29. // var activityIds []int
  30. // for _, v := range list {
  31. // activityIds = append(activityIds, v.ActivityId)
  32. // }
  33. // lenArr := len(activityIds)
  34. // if lenArr == 0 {
  35. // return
  36. // }
  37. // condition = ` AND art.activity_id IN (` + utils.GetOrmInReplace(lenArr) + `)`
  38. // pars = append(pars, activityIds)
  39. // listxActivity, e = models.GetCygxActivityList(condition, pars, 0, lenArr)
  40. // if e != nil && e.Error() != utils.ErrNoRow() {
  41. // err = errors.New("GetCygxActivityList,Err: " + e.Error())
  42. // return
  43. // }
  44. // for _, v := range listxActivity {
  45. // fmt.Println(v)
  46. // }
  47. // return
  48. //}
  49. // 用户报名添加到处理研选扣点
  50. func YanXuanActivityPointsBillSignupAdd(activityId, uid int) (err error) {
  51. defer func() {
  52. if err != nil {
  53. fmt.Println(err)
  54. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  55. go utils.SendAlarmMsg("用户报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  56. }
  57. }()
  58. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  59. log := &models.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 1, RegisterPlatform: utils.REGISTER_PLATFORM, Source: 1, CreateTime: time.Now()}
  60. if utils.Re == nil {
  61. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  62. if err != nil {
  63. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  64. }
  65. }
  66. return
  67. }
  68. // 用户取消报名添加到处理研选扣点
  69. func YanXuanActivityPointsBillSignupCancel(activityId, uid int) (err error) {
  70. defer func() {
  71. if err != nil {
  72. fmt.Println(err)
  73. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  74. go utils.SendAlarmMsg("用户取消报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  75. }
  76. }()
  77. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  78. log := &models.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 2, RegisterPlatform: utils.REGISTER_PLATFORM, Source: 1, CreateTime: time.Now()}
  79. if utils.Re == nil {
  80. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  81. if err != nil {
  82. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  83. }
  84. }
  85. return
  86. }
  87. // YanXuanActivityPointsBillReduce 处理研选活动扣点
  88. func YanXuanActivityPointsBillReduce() (err error) {
  89. for {
  90. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  91. utils.Rc.Brpop(utils.CYGX_YANXUAN_POINTS_KEY, func(b []byte) {
  92. var log models.YanXuanActivityPointsRedis
  93. if err := json.Unmarshal(b, &log); err != nil {
  94. fmt.Println("json unmarshal wrong!")
  95. go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+err.Error()+string(b), 2)
  96. }
  97. switch log.SourceType {
  98. case 1:
  99. go YanXuanActivityPointsBillSignupAddReduce(log)
  100. fmt.Println("1:报名")
  101. break
  102. case 2:
  103. go YanXuanActivityPointsBillSignupCancelReduce(log)
  104. fmt.Println(" 2:取消报名")
  105. break
  106. case 3:
  107. go YanXuanActivityPointsBillActivityEditReduce(log)
  108. fmt.Println("3:活动编辑")
  109. break
  110. case 4:
  111. go YanXuanActivityPointsBillActivityPublishAndCancelReduce(log)
  112. fmt.Println("4:活动发布、取消发布")
  113. break
  114. case 5:
  115. //go YanXuanActivityPointsBillActivityCancelReduce(log)
  116. fmt.Println("5:活动取消发布。")
  117. case 6:
  118. go YanXuanCompanyApprovalReduce(log)
  119. fmt.Println("6:研选审批通过的时候研选扣点更新。")
  120. break
  121. case 7:
  122. go YanXuanCompanyCompanyTryOutReduce(log)
  123. fmt.Println("7:正式专试用定时任务更新研选扣点。")
  124. break
  125. default:
  126. fmt.Println(string(b))
  127. go utils.SendAlarmMsg("处理研选活动扣点处理Redis队列消息失败:"+string(b), 2)
  128. }
  129. })
  130. }
  131. }
  132. // 1:用户报名
  133. func YanXuanActivityPointsBillSignupAddReduce(log models.YanXuanActivityPointsRedis) (err error) {
  134. defer func() {
  135. if err != nil {
  136. fmt.Println(err)
  137. go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
  138. }
  139. }()
  140. activityId := log.ActivityId
  141. userId := log.UserId
  142. //获取活动是否扣点以及扣点规则明细
  143. activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
  144. if e != nil && e.Error() != utils.ErrNoRow() {
  145. err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
  146. return
  147. }
  148. if activityPointsSetDetail == nil {
  149. return
  150. }
  151. if activityPointsSetDetail.UserPointsNum == 0 || activityPointsSetDetail.PointsType != 1 {
  152. return // 如果不是报名即扣点的这种形式,那么就不做任何处理
  153. }
  154. activityInfo, e := models.GetAddActivityInfoById(activityId)
  155. if e != nil {
  156. err = errors.New("GetAddActivityInfoById" + e.Error())
  157. return
  158. }
  159. user, e := models.GetWxUserItemByUserId(userId)
  160. if e != nil {
  161. err = errors.New("GetWxUserItemByUserId" + e.Error())
  162. return
  163. }
  164. // 获取用户所在公司剩余的点
  165. companyPointsNum, e := models.GetCompanyPoints(user.CompanyId)
  166. if e != nil && e.Error() != utils.ErrNoRow() {
  167. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  168. return
  169. }
  170. //获取需要添加的流水信息
  171. var items []*models.CygxActivityPointsBill
  172. item := new(models.CygxActivityPointsBill)
  173. item.UserId = user.UserId
  174. item.ActivityId = activityId
  175. item.CreateTime = time.Now()
  176. item.Mobile = user.Mobile
  177. item.Email = user.Email
  178. item.CompanyId = user.CompanyId
  179. item.CompanyName = user.CompanyName
  180. item.RealName = user.RealName
  181. item.BillDetailed = -activityPointsSetDetail.UserPointsNum
  182. item.RegisterPlatform = log.RegisterPlatform
  183. item.AdminId = log.AdminId
  184. item.Source = log.Source
  185. item.ChartPermissionId = activityInfo.ChartPermissionId
  186. item.DoType = 1
  187. item.Content = activityInfo.ActivityName + "--报名"
  188. item.Points = companyPointsNum - activityPointsSetDetail.UserPointsNum
  189. items = append(items, item)
  190. //更新对应机构的剩余点数
  191. var itemCompanys []*models.CygxActivityPointsCompany
  192. itemCompany := new(models.CygxActivityPointsCompany)
  193. itemCompany.CompanyId = user.CompanyId
  194. itemCompany.Points = item.Points
  195. itemCompany.ModifyTime = time.Now()
  196. itemCompanys = append(itemCompanys, itemCompany)
  197. err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  198. return
  199. }
  200. // 2:用户取消报名
  201. func YanXuanActivityPointsBillSignupCancelReduce(log models.YanXuanActivityPointsRedis) (err error) {
  202. defer func() {
  203. if err != nil {
  204. fmt.Println(err)
  205. go utils.SendAlarmMsg("用户取消报名扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
  206. }
  207. }()
  208. activityId := log.ActivityId
  209. userId := log.UserId
  210. //获取活动是否扣点以及扣点规则明细
  211. activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
  212. if e != nil && e.Error() != utils.ErrNoRow() {
  213. err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
  214. return
  215. }
  216. if activityPointsSetDetail == nil {
  217. return
  218. }
  219. if activityPointsSetDetail.UserPointsNum == 0 || activityPointsSetDetail.PointsType != 1 {
  220. return // 如果不是报名即扣点的这种形式,那么就不做任何处理
  221. }
  222. activityInfo, e := models.GetAddActivityInfoById(activityId)
  223. if e != nil {
  224. err = errors.New("GetAddActivityInfoById" + e.Error())
  225. return
  226. }
  227. user, e := models.GetWxUserItemByUserId(userId)
  228. if e != nil {
  229. err = errors.New("GetWxUserItemByUserId" + e.Error())
  230. return
  231. }
  232. // 获取用户所在公司剩余的点
  233. companyPointsNum, e := models.GetCompanyPoints(user.CompanyId)
  234. if e != nil && e.Error() != utils.ErrNoRow() {
  235. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  236. return
  237. }
  238. //获取需要添加的流水信息
  239. var items []*models.CygxActivityPointsBill
  240. item := new(models.CygxActivityPointsBill)
  241. item.UserId = user.UserId
  242. item.ActivityId = activityId
  243. item.CreateTime = time.Now()
  244. item.Mobile = user.Mobile
  245. item.Email = user.Email
  246. item.CompanyId = user.CompanyId
  247. item.CompanyName = user.CompanyName
  248. item.RealName = user.RealName
  249. item.BillDetailed = activityPointsSetDetail.UserPointsNum
  250. item.RegisterPlatform = log.RegisterPlatform
  251. item.AdminId = log.AdminId
  252. item.Source = log.Source
  253. item.ChartPermissionId = activityInfo.ChartPermissionId
  254. item.DoType = 2
  255. item.Content = activityInfo.ActivityName + "--取消报名"
  256. item.Points = companyPointsNum + activityPointsSetDetail.UserPointsNum
  257. items = append(items, item)
  258. //更新对应机构的剩余点数
  259. var itemCompanys []*models.CygxActivityPointsCompany
  260. itemCompany := new(models.CygxActivityPointsCompany)
  261. itemCompany.CompanyId = user.CompanyId
  262. itemCompany.Points = item.Points
  263. itemCompany.ModifyTime = time.Now()
  264. itemCompanys = append(itemCompanys, itemCompany)
  265. err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  266. return
  267. }
  268. // 3:活动编辑
  269. func YanXuanActivityPointsBillActivityEditReduce(log models.YanXuanActivityPointsRedis) (err error) {
  270. defer func() {
  271. if err != nil {
  272. fmt.Println(err)
  273. go utils.SendAlarmMsg("用户报名活动扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
  274. }
  275. }()
  276. activityId := log.ActivityId
  277. comapnyId := log.ComapnyId
  278. //获取活动是否扣点以及扣点规则明细
  279. activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
  280. if e != nil && e.Error() != utils.ErrNoRow() {
  281. err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
  282. return
  283. }
  284. if activityPointsSetDetail == nil {
  285. return
  286. }
  287. if activityPointsSetDetail.CompanyPointsNum == 0 {
  288. return // 如果不是办会人,即扣点的这种形式,那么就不做任何处理
  289. }
  290. activityInfo, e := models.GetAddActivityInfoById(activityId)
  291. if e != nil {
  292. err = errors.New("GetAddActivityInfoById" + e.Error())
  293. return
  294. }
  295. if activityInfo.PublishStatus == 0 {
  296. return // 未发布的活动不做处理
  297. }
  298. comapny, e := models.GetCompanyById(comapnyId)
  299. if e != nil {
  300. err = errors.New("GetCompanyById" + e.Error())
  301. return
  302. }
  303. // 获取用户所在公司剩余的点
  304. companyPointsNum, e := models.GetCompanyPoints(comapny.CompanyId)
  305. if e != nil && e.Error() != utils.ErrNoRow() {
  306. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  307. return
  308. }
  309. //查询最新的一条针对这个公司的扣点记录
  310. var condition string
  311. var pars []interface{}
  312. condition += ` AND activity_id = ? AND company_id = ? AND user_id = 0 ORDER BY id DESC LIMIT 1 `
  313. pars = append(pars, activityId)
  314. activityPointsBillDetail, e := models.GetCygxActivityPointsBillDetailByCondition(condition, pars)
  315. if e != nil && e.Error() != utils.ErrNoRow() {
  316. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  317. return
  318. }
  319. var items []*models.CygxActivityPointsBill
  320. item := new(models.CygxActivityPointsBill)
  321. var itemCompanys []*models.CygxActivityPointsCompany
  322. itemCompany := new(models.CygxActivityPointsCompany)
  323. if activityPointsBillDetail == nil { //如果是空的就添加
  324. //获取需要添加的流水信息
  325. //item.UserId = user.UserId
  326. item.ActivityId = activityId
  327. item.CreateTime = time.Now()
  328. //item.Mobile = user.Mobile
  329. //item.Email = user.Email
  330. item.CompanyId = comapny.CompanyId
  331. item.CompanyName = comapny.CompanyName
  332. //item.RealName = user.RealName
  333. item.BillDetailed = -activityPointsSetDetail.CompanyPointsNum
  334. item.RegisterPlatform = log.RegisterPlatform
  335. item.AdminId = log.AdminId
  336. item.Source = log.Source
  337. item.ChartPermissionId = activityInfo.ChartPermissionId
  338. item.DoType = 1
  339. item.Content = activityInfo.ActivityName + "--办会"
  340. item.Points = companyPointsNum - activityPointsSetDetail.CompanyPointsNum
  341. items = append(items, item)
  342. //更新对应机构的剩余点数
  343. itemCompany.CompanyId = comapny.CompanyId
  344. itemCompany.Points = item.Points
  345. itemCompany.ModifyTime = time.Now()
  346. itemCompanys = append(itemCompanys, itemCompany)
  347. e = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  348. if e != nil && e.Error() != utils.ErrNoRow() {
  349. err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
  350. return
  351. }
  352. } else {
  353. //如果存在就进行对比修改
  354. if activityPointsSetDetail.CompanyPointsNum != activityPointsBillDetail.BillDetailed {
  355. item.Id = activityPointsBillDetail.Id
  356. item.BillDetailed = -activityPointsSetDetail.CompanyPointsNum
  357. item.Points = companyPointsNum - activityPointsBillDetail.BillDetailed - activityPointsSetDetail.CompanyPointsNum
  358. items = append(items, item)
  359. //更新对应机构的剩余点数
  360. itemCompany.CompanyId = comapny.CompanyId
  361. itemCompany.Points = item.Points
  362. itemCompany.ModifyTime = time.Now()
  363. itemCompanys = append(itemCompanys, itemCompany)
  364. e = models.UpdateCygxActivityPointsBillMulti(items, itemCompanys)
  365. if e != nil && e.Error() != utils.ErrNoRow() {
  366. err = errors.New("UpdateCygxActivityPointsBillMulti, Err: " + e.Error())
  367. return
  368. }
  369. }
  370. }
  371. return
  372. }
  373. // 4:活动发布取消发布
  374. func YanXuanActivityPointsBillActivityPublishAndCancelReduce(log models.YanXuanActivityPointsRedis) (err error) {
  375. defer func() {
  376. if err != nil {
  377. fmt.Println(err)
  378. go utils.SendAlarmMsg("活动发布扣点,处理Redis队列消息失败:"+err.Error()+fmt.Sprint("ActivityId", log.ActivityId, "userId", log.UserId), 2)
  379. }
  380. }()
  381. activityId := log.ActivityId
  382. publishStatus := log.PublishStatus
  383. //comapnyId := log.ComapnyId
  384. //获取活动是否扣点以及扣点规则明细
  385. activityPointsSetDetail, e := models.GetCygxActivityPointsSetDetail(activityId)
  386. if e != nil && e.Error() != utils.ErrNoRow() {
  387. err = errors.New("GetCygxActivityPointsSetDetail" + e.Error())
  388. return
  389. }
  390. if activityPointsSetDetail == nil {
  391. return
  392. }
  393. if activityPointsSetDetail.CompanyPointsNum == 0 {
  394. return // 如果不是办会人,即扣点的这种形式,那么就不做任何处理
  395. }
  396. activityInfo, e := models.GetAddActivityInfoByActivityId(activityId)
  397. if e != nil {
  398. err = errors.New("GetAddActivityInfoByActivityId" + e.Error())
  399. return
  400. }
  401. comapnyId := activityPointsSetDetail.CompanyId
  402. var items []*models.CygxActivityPointsBill
  403. var itemCompanys []*models.CygxActivityPointsCompany
  404. if publishStatus == 1 {
  405. fmt.Println("//活动发布")
  406. if comapnyId > 0 {
  407. comapny, e := models.GetCompanyById(comapnyId)
  408. if e != nil {
  409. err = errors.New("GetCompanyById" + e.Error())
  410. return
  411. }
  412. // 获取用户所在公司剩余的点
  413. companyPointsNum, e := models.GetCompanyPoints(comapny.CompanyId)
  414. if e != nil && e.Error() != utils.ErrNoRow() {
  415. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  416. return
  417. }
  418. item := new(models.CygxActivityPointsBill)
  419. item.ActivityId = activityId
  420. item.CreateTime = time.Now()
  421. //item.Mobile = user.Mobile
  422. //item.Email = user.Email
  423. item.CompanyId = comapny.CompanyId
  424. item.CompanyName = comapny.CompanyName
  425. //item.RealName = user.RealName
  426. item.BillDetailed = -activityPointsSetDetail.CompanyPointsNum
  427. item.RegisterPlatform = log.RegisterPlatform
  428. item.AdminId = log.AdminId
  429. item.Source = log.Source
  430. item.ChartPermissionId = activityInfo.ChartPermissionId
  431. item.DoType = 1
  432. item.Content = activityInfo.ActivityName + "--办会"
  433. item.Points = companyPointsNum - activityPointsSetDetail.CompanyPointsNum
  434. items = append(items, item)
  435. //更新对应机构的剩余点数
  436. itemCompany := new(models.CygxActivityPointsCompany)
  437. itemCompany.CompanyId = comapny.CompanyId
  438. itemCompany.Points = item.Points
  439. itemCompany.ModifyTime = time.Now()
  440. itemCompanys = append(itemCompanys, itemCompany)
  441. }
  442. } else {
  443. fmt.Println("//活动取消发布")
  444. //活动取消发布
  445. mapCompanyPoints := make(map[int]float64) //一组公司的剩余点数
  446. if comapnyId > 0 {
  447. comapny, e := models.GetCompanyById(comapnyId)
  448. if e != nil {
  449. err = errors.New("GetCompanyById" + e.Error())
  450. return
  451. }
  452. // 获取用户所在公司剩余的点
  453. companyPointsNum, e := models.GetCompanyPoints(comapny.CompanyId)
  454. if e != nil && e.Error() != utils.ErrNoRow() {
  455. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  456. return
  457. }
  458. item := new(models.CygxActivityPointsBill)
  459. item.ActivityId = activityId
  460. item.CreateTime = time.Now()
  461. //item.Mobile = user.Mobile
  462. //item.Email = user.Email
  463. item.CompanyId = comapny.CompanyId
  464. item.CompanyName = comapny.CompanyName
  465. //item.RealName = user.RealName
  466. item.BillDetailed = activityPointsSetDetail.CompanyPointsNum
  467. item.RegisterPlatform = log.RegisterPlatform
  468. item.AdminId = log.AdminId
  469. item.Source = log.Source
  470. item.ChartPermissionId = activityInfo.ChartPermissionId
  471. item.DoType = 2
  472. item.Content = activityInfo.ActivityName + "--取消办会"
  473. item.Points = companyPointsNum + activityPointsSetDetail.CompanyPointsNum
  474. items = append(items, item)
  475. //更新对应机构的剩余点数
  476. itemCompany := new(models.CygxActivityPointsCompany)
  477. itemCompany.CompanyId = comapny.CompanyId
  478. itemCompany.Points = item.Points
  479. itemCompany.ModifyTime = time.Now()
  480. itemCompanys = append(itemCompanys, itemCompany)
  481. mapCompanyPoints[comapnyId] = item.Points
  482. }
  483. if activityPointsSetDetail.UserPointsNum > 0 && activityPointsSetDetail.PointsType == 1 {
  484. //如果扣点形式选的是报名即扣点,那么就对已经报名的用户所在机构进行返点
  485. var condition string
  486. var pars []interface{}
  487. condition = ` AND do_fail_type = 0 AND activity_id = ?`
  488. pars = append(pars, activityId)
  489. listSignup, e := models.GetActivitySignupList(condition, pars)
  490. if e != nil && e.Error() != utils.ErrNoRow() {
  491. err = errors.New("GetActivitySignupList, Err: " + e.Error())
  492. return
  493. }
  494. var companyIds []int
  495. if len(listSignup) > 0 {
  496. for _, v := range listSignup {
  497. companyIds = append(companyIds, v.CompanyId)
  498. }
  499. pars = make([]interface{}, 0)
  500. condition = ` AND company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
  501. pars = append(pars, companyIds)
  502. //获取这些公司剩余的点数
  503. conpanyList, e := models.GetCygxActivityPointsCompanyList(condition, pars)
  504. if e != nil && e.Error() != utils.ErrNoRow() {
  505. err = errors.New("GetCygxActivityPointsCompanyList, Err: " + e.Error())
  506. return
  507. }
  508. for _, v := range conpanyList {
  509. if mapCompanyPoints[comapnyId] != 0 {
  510. mapCompanyPoints[comapnyId] = v.Points
  511. }
  512. }
  513. for _, user := range listSignup {
  514. item := new(models.CygxActivityPointsBill)
  515. item.ActivityId = activityId
  516. item.CreateTime = time.Now()
  517. item.Mobile = user.Mobile
  518. item.Email = user.Email
  519. item.CompanyId = user.CompanyId
  520. item.CompanyName = user.CompanyName
  521. item.RealName = user.RealName
  522. item.BillDetailed = activityPointsSetDetail.UserPointsNum
  523. item.RegisterPlatform = log.RegisterPlatform
  524. item.AdminId = log.AdminId
  525. item.Source = log.Source
  526. item.ChartPermissionId = activityInfo.ChartPermissionId
  527. item.DoType = 2
  528. item.Content = activityInfo.ActivityName + "--取消活动"
  529. mapCompanyPoints[comapnyId] += activityPointsSetDetail.UserPointsNum //通过map处理机构剩余点数
  530. item.Points = mapCompanyPoints[comapnyId]
  531. items = append(items, item)
  532. //更新对应机构的剩余点数
  533. itemCompany := new(models.CygxActivityPointsCompany)
  534. itemCompany.CompanyId = user.CompanyId
  535. itemCompany.Points = item.Points
  536. itemCompany.ModifyTime = time.Now()
  537. itemCompanys = append(itemCompanys, itemCompany)
  538. mapCompanyPoints[comapnyId] = item.Points
  539. }
  540. }
  541. }
  542. }
  543. e = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  544. if e != nil && e.Error() != utils.ErrNoRow() {
  545. err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
  546. return
  547. }
  548. return
  549. }
  550. // 6:研选审批通过的时候研选扣点更新
  551. func YanXuanCompanyApprovalReduce(log models.YanXuanActivityPointsRedis) (err error) {
  552. defer func() {
  553. if err != nil {
  554. fmt.Println(err)
  555. go utils.SendAlarmMsg("研选审批通过的时候研选扣点更新,处理Redis队列消息失败:"+err.Error()+fmt.Sprint(log), 2)
  556. }
  557. }()
  558. comapnyId := log.ComapnyId
  559. comapny, e := models.GetCompanyById(comapnyId)
  560. if e != nil {
  561. err = errors.New("GetCompanyById" + e.Error())
  562. return
  563. }
  564. total, e := models.GetCygxActivityPointsCompanyCountByCompanyId(comapnyId)
  565. if e != nil {
  566. err = errors.New("GetCygxActivityPointsCompanyCountByCompanyId, Err: " + e.Error())
  567. return
  568. }
  569. //查询研选的权限状态
  570. var condition string
  571. var pars []interface{}
  572. condition += " AND company_id = ? AND status = ? AND chart_permission_id = ? ORDER BY company_report_permission_id DESC LIMIT 1 "
  573. pars = append(pars, comapnyId, "正式", utils.CHART_PERMISSION_ID_YANXUAN)
  574. companyReportPermissionDetail, e := models.GetCompanyReportPermissionDetailByCondition(condition, pars)
  575. if e != nil && e.Error() != utils.ErrNoRow() {
  576. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  577. return
  578. }
  579. if companyReportPermissionDetail == nil {
  580. return // 如果不存在就不做研选扣点处理
  581. }
  582. var billDetailed float64
  583. var content string
  584. //ExpensiveYx int `description:"权益研选: 0-3w; 1-5w"` 3W3次、5W 15次
  585. if companyReportPermissionDetail.ExpensiveYx == 1 {
  586. billDetailed = 15
  587. content = "买方研选plus转正"
  588. } else {
  589. billDetailed = 3
  590. content = "买方研选转正"
  591. }
  592. //获取需要添加的流水信息
  593. var items []*models.CygxActivityPointsBill
  594. item := new(models.CygxActivityPointsBill)
  595. //item.UserId = user.UserId
  596. //item.ActivityId = activityId
  597. item.CreateTime = time.Now()
  598. //item.Mobile = user.Mobile
  599. //item.Email = user.Email
  600. item.CompanyId = comapny.CompanyId
  601. item.CompanyName = comapny.CompanyName
  602. //item.RealName = user.RealName
  603. item.BillDetailed = billDetailed
  604. item.RegisterPlatform = log.RegisterPlatform
  605. item.AdminId = log.AdminId
  606. item.Source = log.Source
  607. //item.ChartPermissionId = activityInfo.ChartPermissionId
  608. item.DoType = 2
  609. item.Content = content
  610. item.Points = billDetailed
  611. items = append(items, item)
  612. //更新对应机构的剩余点数
  613. var itemCompanys []*models.CygxActivityPointsCompany
  614. itemCompany := new(models.CygxActivityPointsCompany)
  615. itemCompany.CompanyId = comapny.CompanyId
  616. itemCompany.Points = item.Points
  617. itemCompany.CreateTime = time.Now()
  618. itemCompany.ModifyTime = time.Now()
  619. itemCompanys = append(itemCompanys, itemCompany)
  620. //判断是否存在记录,如果有就一个新增一个修改,如果没有就同时新增
  621. if total == 0 {
  622. err = models.AddCygxActivityPointsBillAndCompanyMulti(items, itemCompanys)
  623. } else {
  624. err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  625. }
  626. return
  627. }
  628. // 7:正式专试用定时任务更新研选扣点
  629. func YanXuanCompanyCompanyTryOutReduce(log models.YanXuanActivityPointsRedis) (err error) {
  630. defer func() {
  631. if err != nil {
  632. fmt.Println(err)
  633. go utils.SendAlarmMsg("正式专试用定时任务更新研选扣点更新,处理Redis队列消息失败:"+err.Error()+fmt.Sprint(log), 2)
  634. }
  635. }()
  636. comapnyId := log.ComapnyId
  637. comapny, e := models.GetCompanyById(comapnyId)
  638. if e != nil {
  639. err = errors.New("GetCompanyById" + e.Error())
  640. return
  641. }
  642. // 获取用户所在公司剩余的点
  643. companyPointsNum, e := models.GetCompanyPoints(comapnyId)
  644. if e != nil && e.Error() != utils.ErrNoRow() {
  645. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  646. return
  647. }
  648. //获取需要添加的流水信息
  649. var items []*models.CygxActivityPointsBill
  650. item := new(models.CygxActivityPointsBill)
  651. //item.UserId = user.UserId
  652. //item.ActivityId = activityId
  653. item.CreateTime = time.Now()
  654. //item.Mobile = user.Mobile
  655. //item.Email = user.Email
  656. item.CompanyId = comapny.CompanyId
  657. item.CompanyName = comapny.CompanyName
  658. //item.RealName = user.RealName
  659. item.BillDetailed = -companyPointsNum
  660. item.RegisterPlatform = log.RegisterPlatform
  661. item.AdminId = log.AdminId
  662. item.Source = log.Source
  663. //item.ChartPermissionId = activityInfo.ChartPermissionId
  664. item.DoType = 2
  665. item.Content = "到期清零"
  666. item.Points = 0
  667. items = append(items, item)
  668. //更新对应机构的剩余点数
  669. var itemCompanys []*models.CygxActivityPointsCompany
  670. itemCompany := new(models.CygxActivityPointsCompany)
  671. itemCompany.CompanyId = comapny.CompanyId
  672. itemCompany.Points = 0
  673. itemCompany.CreateTime = time.Now()
  674. itemCompany.ModifyTime = time.Now()
  675. itemCompanys = append(itemCompanys, itemCompany)
  676. err = models.AddCygxActivityPointsBillMulti(items, itemCompanys)
  677. return
  678. }