activity_points_set.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  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. defer func() {
  204. if err != nil {
  205. fmt.Println(err)
  206. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  207. go alarm_msg.SendAlarmMsg("用户报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  208. }
  209. }()
  210. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  211. log := &cygx.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 1, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  212. if utils.Re == nil {
  213. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  214. if err != nil {
  215. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  216. }
  217. }
  218. return
  219. }
  220. // 2用户取消报名添加到处理研选扣点
  221. func YanXuanActivityPointsBillSignupCancel(activityId, uid, adminId int) (err error) {
  222. defer func() {
  223. if err != nil {
  224. fmt.Println(err)
  225. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  226. go alarm_msg.SendAlarmMsg("用户取消报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  227. }
  228. }()
  229. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  230. log := &cygx.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 2, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  231. if utils.Re == nil {
  232. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  233. if err != nil {
  234. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  235. }
  236. }
  237. return
  238. }
  239. // 3 活动编辑处理研选扣点
  240. func YanXuanActivityPointsBillActivityEdit(activityId, adminId int) (err error) {
  241. defer func() {
  242. if err != nil {
  243. fmt.Println(err)
  244. msg := fmt.Sprint("activityId:", activityId)
  245. go alarm_msg.SendAlarmMsg("活动编辑理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  246. }
  247. }()
  248. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  249. log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 3, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  250. if utils.Re == nil {
  251. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  252. if err != nil {
  253. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  254. }
  255. }
  256. return
  257. }
  258. // 4 活动发布以及取消发布处理研选扣点
  259. func YanXuanActivityPointsBillActivityPublishAndCancel(activityId, adminId, publishStatus int) (err error) {
  260. defer func() {
  261. if err != nil {
  262. fmt.Println(err)
  263. msg := fmt.Sprint("activityId:", activityId)
  264. go alarm_msg.SendAlarmMsg("活动发布以及取消发布处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  265. }
  266. }()
  267. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  268. log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 4, AdminId: adminId, Source: 2, PublishStatus: publishStatus, CreateTime: time.Now()}
  269. if utils.Re == nil {
  270. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  271. if err != nil {
  272. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  273. }
  274. }
  275. return
  276. }
  277. // 5 活动到会研选扣点处理
  278. func YanXuanActivityPointsBillSubmitMeeting(activityId, adminId int) (err error) {
  279. defer func() {
  280. if err != nil {
  281. fmt.Println(err)
  282. msg := fmt.Sprint("activityId:", activityId)
  283. go alarm_msg.SendAlarmMsg("活动到会研选扣点处理,写入Redis队列消息失败:"+err.Error()+msg, 2)
  284. }
  285. }()
  286. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。6:研选审批通过的时候研选扣点更新、 7:正式专试用定时任务更新研选扣点"`
  287. log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 5, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  288. if utils.Re == nil {
  289. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  290. if err != nil {
  291. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  292. }
  293. }
  294. return
  295. }
  296. // 6 研选审批通过的时候研选扣点更新
  297. func YanXuanCompanyApproval(comapnyId int) (err error) {
  298. defer func() {
  299. if err != nil {
  300. fmt.Println(err)
  301. msg := fmt.Sprint("comapnyId:", comapnyId)
  302. go alarm_msg.SendAlarmMsg("研选审批通过的时候研选扣点更新,写入Redis队列消息失败:"+err.Error()+msg, 2)
  303. }
  304. }()
  305. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  306. log := &cygx.YanXuanActivityPointsRedis{ComapnyId: comapnyId, SourceType: 6, Source: 2, CreateTime: time.Now()}
  307. if utils.Re == nil {
  308. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  309. if err != nil {
  310. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  311. }
  312. }
  313. return
  314. }
  315. func init0703() {
  316. //2023.07.03剩余服务点数初始化
  317. path := "0703.xlsx"
  318. xlFile, err := xlsx.OpenFile(path)
  319. if err != nil {
  320. fmt.Println(err)
  321. }
  322. mapcompanyName := make(map[string]string)
  323. fmt.Println(xlFile)
  324. var items []*cygx.CygxActivityPointsCompany
  325. for _, sheet := range xlFile.Sheets {
  326. //遍历行读取
  327. maxRow := sheet.MaxRow
  328. for i := 0; i < maxRow; i++ {
  329. //fmt.Println(i)
  330. if i == 0 {
  331. continue
  332. }
  333. row := sheet.Row(i)
  334. cells := row.Cells
  335. var companyName string
  336. var points float64
  337. item := new(cygx.CygxActivityPointsCompany)
  338. for k, cell := range cells {
  339. if k == 0 {
  340. text := cell.String()
  341. companyName = text
  342. }
  343. if k == 3 {
  344. text := cell.String()
  345. points, _ = strconv.ParseFloat(text, 2)
  346. item.Points = points
  347. }
  348. itemDetail, err := company.CheckCompanyProductByName(companyName, 2)
  349. if err != nil {
  350. fmt.Println(err, companyName)
  351. return
  352. }
  353. item.CompanyName = itemDetail.CompanyName
  354. item.CompanyId = itemDetail.CompanyId
  355. item.CreateTime = time.Now()
  356. item.ModifyTime = time.Now()
  357. if mapcompanyName[itemDetail.CompanyName] != "" {
  358. continue
  359. }
  360. items = append(items, item)
  361. mapcompanyName[itemDetail.CompanyName] = itemDetail.CompanyName
  362. }
  363. }
  364. }
  365. var companyIds string
  366. var itemsBill []*cygx.CygxActivityPointsBill
  367. for _, v := range items {
  368. fmt.Println(v.CompanyName, v.Points)
  369. itemBill := new(cygx.CygxActivityPointsBill)
  370. itemBill.CreateTime = time.Now()
  371. itemBill.CompanyId = v.CompanyId
  372. itemBill.CompanyName = v.CompanyName
  373. itemBill.Source = 3
  374. itemBill.BillDetailed = v.Points
  375. itemBill.Points = v.Points
  376. itemBill.DoType = 2
  377. itemBill.Content = "2023.07.03剩余服务点数初始化"
  378. itemsBill = append(itemsBill, itemBill)
  379. }
  380. err = cygx.AddCygxActivityPointsBillAndCompanyMulti(itemsBill, items)
  381. fmt.Println(len(items))
  382. fmt.Println(len(itemsBill))
  383. utils.FileLog.Info(companyIds)
  384. fmt.Println(companyIds)
  385. fmt.Println(err)
  386. }