activity_points_set.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. package cygx
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/tealeg/xlsx"
  6. "hongze/hz_crm_api/models/company"
  7. "hongze/hz_crm_api/models/cygx"
  8. "hongze/hz_crm_api/services/alarm_msg"
  9. "hongze/hz_crm_api/utils"
  10. "strconv"
  11. "time"
  12. )
  13. // 获取公司剩余点数
  14. func GetCygxActivityPointsCompanyByCompanyId(companyId int) (points string) {
  15. var err error
  16. defer func() {
  17. if err != nil {
  18. go alarm_msg.SendAlarmMsg("获取公司剩余点数失败:"+err.Error(), 2)
  19. }
  20. }()
  21. pointsCompany, e := cygx.GetCygxActivityPointsCompanyByCompanyId(companyId)
  22. if e != nil && e.Error() != utils.ErrNoRow() {
  23. err = errors.New("GetCygxActivityPointsCompanyByCompanyId,Err" + e.Error())
  24. return
  25. }
  26. if pointsCompany == nil {
  27. return
  28. }
  29. //转字符串
  30. points = fmt.Sprint(pointsCompany.Points)
  31. return
  32. }
  33. // CheckActivityPointsSet 校验研选扣点内容
  34. func CheckActivityPointsSet(pointsSet *cygx.CygxActivityPointsSetRsq, activityId int) (errMsg string, itemResp *cygx.CygxActivityPointsSet, err error) {
  35. //校验研选扣点内容
  36. if pointsSet == nil {
  37. return
  38. }
  39. switch pointsSet.PointsObject {
  40. case "":
  41. errMsg = "请选择扣点对象"
  42. case "1":
  43. if pointsSet.UserPointsNum == "" {
  44. errMsg = "参会人扣点数量不能为空"
  45. }
  46. case "2":
  47. if pointsSet.CompanyPointsNum == "" {
  48. errMsg = "办会人扣点数量不能为空"
  49. }
  50. if pointsSet.CompanyId == 0 {
  51. errMsg = "请选择对应公司"
  52. }
  53. case "3":
  54. if pointsSet.UserPointsNum == "" {
  55. errMsg = "参会人扣点数量不能为空"
  56. }
  57. if pointsSet.CompanyPointsNum == "" {
  58. errMsg = "办会人扣点数量不能为空"
  59. }
  60. if pointsSet.CompanyId == 0 {
  61. errMsg = "请选择对应公司"
  62. }
  63. }
  64. companyId := pointsSet.CompanyId
  65. if companyId > 0 {
  66. pointsCompany, e := cygx.GetCygxActivityPointsCompanyByCompanyId(companyId)
  67. if e != nil && e.Error() != utils.ErrNoRow() {
  68. err = errors.New("GetCygxActivityPointsCompanyByCompanyId,Err" + e.Error())
  69. return
  70. }
  71. if pointsCompany == nil {
  72. errMsg = "公司剩余点数不足"
  73. return
  74. }
  75. companyPointsNum, _ := strconv.ParseFloat(pointsSet.CompanyPointsNum, 2)
  76. if companyPointsNum == 0 {
  77. errMsg = "办会人扣点数量设置有误" + pointsSet.CompanyPointsNum
  78. }
  79. if activityId == 0 {
  80. if companyPointsNum > pointsCompany.Points {
  81. errMsg = "公司剩余点数不足"
  82. }
  83. } else {
  84. pointsSetDetail, e := cygx.GetCygxActivityPointsSetDetail(activityId)
  85. if e != nil && e.Error() != utils.ErrNoRow() {
  86. err = errors.New("GetCygxActivityPointsSetDetail, Err: " + e.Error())
  87. return
  88. }
  89. if pointsSetDetail != nil {
  90. if pointsSetDetail.CompanyId != companyId {
  91. if companyPointsNum > pointsCompany.Points {
  92. errMsg = "公司剩余点数不足"
  93. }
  94. } else {
  95. //查询最新的一条针对这个公司的扣点记录
  96. var condition string
  97. var pars []interface{}
  98. condition += ` AND activity_id = ? AND company_id = ? AND mobile = '' ORDER BY id DESC LIMIT 1 `
  99. pars = append(pars, activityId, companyId)
  100. activityPointsBillDetail, e := cygx.GetCygxActivityPointsBillDetailByCondition(condition, pars)
  101. if e != nil && e.Error() != utils.ErrNoRow() {
  102. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  103. return
  104. }
  105. if activityPointsBillDetail != nil {
  106. CompanyPointsNumOld, _ := strconv.ParseFloat(pointsSetDetail.CompanyPointsNum, 2)
  107. if pointsCompany.Points-companyPointsNum+CompanyPointsNumOld < 0 {
  108. errMsg = "公司剩余点数不足"
  109. }
  110. }
  111. }
  112. } else {
  113. if companyPointsNum > pointsCompany.Points {
  114. errMsg = "公司剩余点数不足"
  115. }
  116. }
  117. }
  118. }
  119. if errMsg != "" {
  120. return
  121. }
  122. item := new(cygx.CygxActivityPointsSet)
  123. item.PointsObject = pointsSet.PointsObject
  124. item.CompanyId = pointsSet.CompanyId
  125. item.CompanyName = pointsSet.CompanyName
  126. item.UserPointsNum = pointsSet.UserPointsNum
  127. item.PointsType = pointsSet.PointsType
  128. item.CompanyPointsNum = pointsSet.CompanyPointsNum
  129. item.CancelDeadlineType = pointsSet.CancelDeadlineType
  130. item.CreateTime = time.Now()
  131. item.ModifyTime = time.Now()
  132. itemResp = item
  133. return
  134. }
  135. // UpdateYanXuanActivityPointsBillOldComapny 活动内容编辑的时候对原有的公司进行返点
  136. func UpdateYanXuanActivityPointsBillOldComapny(activityInfo *cygx.ActivityDetail, adminId int, pointsSet *cygx.CygxActivityPointsSet, pointsSetOld *cygx.CygxActivityPointsSetRsq) (errMsg string, itemResp *cygx.CygxActivityPointsSet, err error) {
  137. defer func() {
  138. if err != nil {
  139. go alarm_msg.SendAlarmMsg("获取公司剩余点数失败:"+err.Error(), 2)
  140. }
  141. }()
  142. activityId := activityInfo.ActivityId
  143. var companyIdNew int
  144. var companyIdOld int
  145. if pointsSetOld == nil {
  146. return
  147. }
  148. companyIdOld = pointsSetOld.CompanyId
  149. if pointsSet != nil {
  150. companyIdNew = pointsSet.CompanyId
  151. }
  152. if companyIdNew == companyIdOld && companyIdNew > 0 {
  153. go YanXuanActivityPointsBillActivityEdit(activityId, adminId) //活动编辑处理研选扣点
  154. }
  155. //如果新老机构一样或者非办会人扣点,那么不做任何处理
  156. if companyIdNew == companyIdOld || companyIdOld == 0 {
  157. return
  158. }
  159. comapny, e := company.GetCompanyDetailById(companyIdOld)
  160. if e != nil {
  161. err = errors.New("GetCompanyDetailById" + e.Error())
  162. return
  163. }
  164. companyPointsNumOld, _ := strconv.ParseFloat(pointsSetOld.CompanyPointsNum, 2)
  165. var items []*cygx.CygxActivityPointsBill
  166. item := new(cygx.CygxActivityPointsBill)
  167. var itemCompanys []*cygx.CygxActivityPointsCompany
  168. itemCompany := new(cygx.CygxActivityPointsCompany)
  169. // 获取用户所在公司剩余的点
  170. companyPointsNum, e := cygx.GetCompanyPoints(companyIdOld)
  171. if e != nil && e.Error() != utils.ErrNoRow() {
  172. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  173. return
  174. }
  175. item.ActivityId = activityId
  176. item.CreateTime = time.Now()
  177. item.CompanyId = comapny.CompanyId
  178. item.CompanyName = comapny.CompanyName
  179. item.BillDetailed = companyPointsNumOld
  180. item.RegisterPlatform = 0
  181. item.AdminId = int64(adminId)
  182. item.Source = 2
  183. item.ChartPermissionId = activityInfo.ChartPermissionId
  184. item.DoType = 2
  185. item.Content = activityInfo.ActivityName + "--取消办会"
  186. item.Points = companyPointsNum + companyPointsNumOld
  187. items = append(items, item)
  188. //更新对应机构的剩余点数
  189. itemCompany.CompanyId = comapny.CompanyId
  190. itemCompany.Points = item.Points
  191. itemCompany.ModifyTime = time.Now()
  192. itemCompanys = append(itemCompanys, itemCompany)
  193. //fmt.Println("更换公司处理返点")
  194. e = cygx.AddCygxActivityPointsBillMulti(items, itemCompanys)
  195. if e != nil && e.Error() != utils.ErrNoRow() {
  196. err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
  197. return
  198. }
  199. return
  200. }
  201. // 1用户报名添加到处理研选扣点
  202. func YanXuanActivityPointsBillSignupAdd(activityId, uid, adminId int) (err error) {
  203. time.Sleep(1 * time.Second) // 添加一秒的延时
  204. defer func() {
  205. if err != nil {
  206. fmt.Println(err)
  207. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  208. go alarm_msg.SendAlarmMsg("用户报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  209. }
  210. }()
  211. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  212. log := &cygx.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 1, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  213. if utils.Re == nil {
  214. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  215. if err != nil {
  216. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  217. }
  218. }
  219. return
  220. }
  221. // 2用户取消报名添加到处理研选扣点
  222. func YanXuanActivityPointsBillSignupCancel(activityId, uid, adminId int) (err error) {
  223. defer func() {
  224. if err != nil {
  225. fmt.Println(err)
  226. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  227. go alarm_msg.SendAlarmMsg("用户取消报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  228. }
  229. }()
  230. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  231. log := &cygx.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 2, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  232. if utils.Re == nil {
  233. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  234. if err != nil {
  235. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  236. }
  237. }
  238. return
  239. }
  240. // 3 活动编辑处理研选扣点
  241. func YanXuanActivityPointsBillActivityEdit(activityId, adminId int) (err error) {
  242. defer func() {
  243. if err != nil {
  244. fmt.Println(err)
  245. msg := fmt.Sprint("activityId:", activityId)
  246. go alarm_msg.SendAlarmMsg("活动编辑理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  247. }
  248. }()
  249. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  250. log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 3, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  251. if utils.Re == nil {
  252. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  253. if err != nil {
  254. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  255. }
  256. }
  257. return
  258. }
  259. // 4 活动发布以及取消发布处理研选扣点
  260. func YanXuanActivityPointsBillActivityPublishAndCancel(activityId, adminId, publishStatus int) (err error) {
  261. defer func() {
  262. if err != nil {
  263. fmt.Println(err)
  264. msg := fmt.Sprint("activityId:", activityId)
  265. go alarm_msg.SendAlarmMsg("活动发布以及取消发布处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  266. }
  267. }()
  268. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  269. log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 4, AdminId: adminId, Source: 2, PublishStatus: publishStatus, CreateTime: time.Now()}
  270. if utils.Re == nil {
  271. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  272. if err != nil {
  273. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  274. }
  275. }
  276. return
  277. }
  278. // 5 活动到会研选扣点处理
  279. func YanXuanActivityPointsBillSubmitMeeting(activityId, adminId int) (err error) {
  280. defer func() {
  281. if err != nil {
  282. fmt.Println(err)
  283. msg := fmt.Sprint("activityId:", activityId)
  284. go alarm_msg.SendAlarmMsg("活动到会研选扣点处理,写入Redis队列消息失败:"+err.Error()+msg, 2)
  285. }
  286. }()
  287. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。6:研选审批通过的时候研选扣点更新、 7:正式专试用定时任务更新研选扣点"`
  288. log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 5, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  289. if utils.Re == nil {
  290. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  291. if err != nil {
  292. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  293. }
  294. }
  295. return
  296. }
  297. // 6 研选审批通过的时候研选扣点更新
  298. func YanXuanCompanyApproval(comapnyId, companyContractId int) (err error) {
  299. defer func() {
  300. if err != nil {
  301. fmt.Println(err)
  302. msg := fmt.Sprint("comapnyId:", comapnyId)
  303. go alarm_msg.SendAlarmMsg("研选审批通过的时候研选扣点更新,写入Redis队列消息失败:"+err.Error()+msg, 2)
  304. }
  305. }()
  306. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  307. log := &cygx.YanXuanActivityPointsRedis{ComapnyId: comapnyId, CompanyContractId: companyContractId, SourceType: 6, Source: 2, CreateTime: time.Now()}
  308. if utils.Re == nil {
  309. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  310. if err != nil {
  311. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  312. }
  313. }
  314. return
  315. }
  316. func init0703() {
  317. //2023.07.03剩余服务点数初始化
  318. path := "0703.xlsx"
  319. xlFile, err := xlsx.OpenFile(path)
  320. if err != nil {
  321. fmt.Println(err)
  322. }
  323. mapcompanyName := make(map[string]string)
  324. fmt.Println(xlFile)
  325. var items []*cygx.CygxActivityPointsCompany
  326. for _, sheet := range xlFile.Sheets {
  327. //遍历行读取
  328. maxRow := sheet.MaxRow
  329. for i := 0; i < maxRow; i++ {
  330. //fmt.Println(i)
  331. if i == 0 {
  332. continue
  333. }
  334. row := sheet.Row(i)
  335. cells := row.Cells
  336. var companyName string
  337. var points float64
  338. item := new(cygx.CygxActivityPointsCompany)
  339. for k, cell := range cells {
  340. if k == 0 {
  341. text := cell.String()
  342. companyName = text
  343. }
  344. if k == 3 {
  345. text := cell.String()
  346. points, _ = strconv.ParseFloat(text, 2)
  347. item.Points = points
  348. }
  349. itemDetail, err := company.CheckCompanyProductByName(companyName, 2)
  350. if err != nil {
  351. fmt.Println(err, companyName)
  352. return
  353. }
  354. item.CompanyName = itemDetail.CompanyName
  355. item.CompanyId = itemDetail.CompanyId
  356. item.CreateTime = time.Now()
  357. item.ModifyTime = time.Now()
  358. if mapcompanyName[itemDetail.CompanyName] != "" {
  359. continue
  360. }
  361. items = append(items, item)
  362. mapcompanyName[itemDetail.CompanyName] = itemDetail.CompanyName
  363. }
  364. }
  365. }
  366. var companyIds string
  367. var itemsBill []*cygx.CygxActivityPointsBill
  368. for _, v := range items {
  369. fmt.Println(v.CompanyName, v.Points)
  370. itemBill := new(cygx.CygxActivityPointsBill)
  371. itemBill.CreateTime = time.Now()
  372. itemBill.CompanyId = v.CompanyId
  373. itemBill.CompanyName = v.CompanyName
  374. itemBill.Source = 3
  375. itemBill.BillDetailed = v.Points
  376. itemBill.Points = v.Points
  377. itemBill.DoType = 2
  378. itemBill.Content = "2023.07.03剩余服务点数初始化"
  379. itemsBill = append(itemsBill, itemBill)
  380. }
  381. err = cygx.AddCygxActivityPointsBillAndCompanyMulti(itemsBill, items)
  382. fmt.Println(len(items))
  383. fmt.Println(len(itemsBill))
  384. utils.FileLog.Info(companyIds)
  385. fmt.Println(companyIds)
  386. fmt.Println(err)
  387. }