activity_points_set.go 14 KB

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