activity_points_set.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  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.CreateTime = time.Now()
  130. item.ModifyTime = time.Now()
  131. itemResp = item
  132. return
  133. }
  134. // UpdateYanXuanActivityPointsBillOldComapny 活动内容编辑的时候对原有的公司进行返点
  135. func UpdateYanXuanActivityPointsBillOldComapny(activityInfo *cygx.ActivityDetail, adminId int, pointsSet *cygx.CygxActivityPointsSet, pointsSetOld *cygx.CygxActivityPointsSetRsq) (errMsg string, itemResp *cygx.CygxActivityPointsSet, err error) {
  136. defer func() {
  137. if err != nil {
  138. go alarm_msg.SendAlarmMsg("获取公司剩余点数失败:"+err.Error(), 2)
  139. }
  140. }()
  141. activityId := activityInfo.ActivityId
  142. var companyIdNew int
  143. var companyIdOld int
  144. if pointsSetOld == nil {
  145. return
  146. }
  147. companyIdOld = pointsSetOld.CompanyId
  148. if pointsSet != nil {
  149. companyIdNew = pointsSet.CompanyId
  150. }
  151. if companyIdNew == companyIdOld && companyIdNew > 0 {
  152. go YanXuanActivityPointsBillActivityEdit(activityId, adminId) //活动编辑处理研选扣点
  153. }
  154. //如果新老机构一样或者非办会人扣点,那么不做任何处理
  155. if companyIdNew == companyIdOld || companyIdOld == 0 {
  156. return
  157. }
  158. comapny, e := company.GetCompanyDetailById(companyIdOld)
  159. if e != nil {
  160. err = errors.New("GetCompanyDetailById" + e.Error())
  161. return
  162. }
  163. companyPointsNumOld, _ := strconv.ParseFloat(pointsSetOld.CompanyPointsNum, 2)
  164. var items []*cygx.CygxActivityPointsBill
  165. item := new(cygx.CygxActivityPointsBill)
  166. var itemCompanys []*cygx.CygxActivityPointsCompany
  167. itemCompany := new(cygx.CygxActivityPointsCompany)
  168. // 获取用户所在公司剩余的点
  169. companyPointsNum, e := cygx.GetCompanyPoints(companyIdOld)
  170. if e != nil && e.Error() != utils.ErrNoRow() {
  171. err = errors.New("GetCompanyPoints, Err: " + e.Error())
  172. return
  173. }
  174. item.ActivityId = activityId
  175. item.CreateTime = time.Now()
  176. item.CompanyId = comapny.CompanyId
  177. item.CompanyName = comapny.CompanyName
  178. item.BillDetailed = companyPointsNumOld
  179. item.RegisterPlatform = 0
  180. item.AdminId = int64(adminId)
  181. item.Source = 2
  182. item.ChartPermissionId = activityInfo.ChartPermissionId
  183. item.DoType = 2
  184. item.Content = activityInfo.ActivityName + "--取消办会"
  185. item.Points = companyPointsNum + companyPointsNumOld
  186. items = append(items, item)
  187. //更新对应机构的剩余点数
  188. itemCompany.CompanyId = comapny.CompanyId
  189. itemCompany.Points = item.Points
  190. itemCompany.ModifyTime = time.Now()
  191. itemCompanys = append(itemCompanys, itemCompany)
  192. //fmt.Println("更换公司处理返点")
  193. e = cygx.AddCygxActivityPointsBillMulti(items, itemCompanys)
  194. if e != nil && e.Error() != utils.ErrNoRow() {
  195. err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error())
  196. return
  197. }
  198. return
  199. }
  200. // 1用户报名添加到处理研选扣点
  201. func YanXuanActivityPointsBillSignupAdd(activityId, uid, adminId int) (err error) {
  202. defer func() {
  203. if err != nil {
  204. fmt.Println(err)
  205. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  206. go alarm_msg.SendAlarmMsg("用户报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  207. }
  208. }()
  209. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  210. log := &cygx.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 1, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  211. if utils.Re == nil {
  212. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  213. if err != nil {
  214. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  215. }
  216. }
  217. return
  218. }
  219. // 2用户取消报名添加到处理研选扣点
  220. func YanXuanActivityPointsBillSignupCancel(activityId, uid, adminId int) (err error) {
  221. defer func() {
  222. if err != nil {
  223. fmt.Println(err)
  224. msg := fmt.Sprint("activityId:", activityId, "userId:", uid)
  225. go alarm_msg.SendAlarmMsg("用户取消报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  226. }
  227. }()
  228. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  229. log := &cygx.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 2, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  230. if utils.Re == nil {
  231. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  232. if err != nil {
  233. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  234. }
  235. }
  236. return
  237. }
  238. // 3 活动编辑处理研选扣点
  239. func YanXuanActivityPointsBillActivityEdit(activityId, adminId int) (err error) {
  240. defer func() {
  241. if err != nil {
  242. fmt.Println(err)
  243. msg := fmt.Sprint("activityId:", activityId)
  244. go alarm_msg.SendAlarmMsg("活动编辑理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  245. }
  246. }()
  247. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  248. log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 3, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  249. if utils.Re == nil {
  250. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  251. if err != nil {
  252. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  253. }
  254. }
  255. return
  256. }
  257. // 4 活动发布以及取消发布处理研选扣点
  258. func YanXuanActivityPointsBillActivityPublishAndCancel(activityId, adminId, publishStatus int) (err error) {
  259. defer func() {
  260. if err != nil {
  261. fmt.Println(err)
  262. msg := fmt.Sprint("activityId:", activityId)
  263. go alarm_msg.SendAlarmMsg("活动发布以及取消发布处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2)
  264. }
  265. }()
  266. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  267. log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 4, AdminId: adminId, Source: 2, PublishStatus: publishStatus, CreateTime: time.Now()}
  268. if utils.Re == nil {
  269. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  270. if err != nil {
  271. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  272. }
  273. }
  274. return
  275. }
  276. // 5 活动到会研选扣点处理
  277. func YanXuanActivityPointsBillSubmitMeeting(activityId, adminId int) (err error) {
  278. defer func() {
  279. if err != nil {
  280. fmt.Println(err)
  281. msg := fmt.Sprint("activityId:", activityId)
  282. go alarm_msg.SendAlarmMsg("活动到会研选扣点处理,写入Redis队列消息失败:"+err.Error()+msg, 2)
  283. }
  284. }()
  285. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。6:研选审批通过的时候研选扣点更新、 7:正式专试用定时任务更新研选扣点"`
  286. log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 5, AdminId: adminId, Source: 2, CreateTime: time.Now()}
  287. if utils.Re == nil {
  288. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  289. if err != nil {
  290. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  291. }
  292. }
  293. return
  294. }
  295. // 6 研选审批通过的时候研选扣点更新
  296. func YanXuanCompanyApproval(comapnyId int) (err error) {
  297. defer func() {
  298. if err != nil {
  299. fmt.Println(err)
  300. msg := fmt.Sprint("comapnyId:", comapnyId)
  301. go alarm_msg.SendAlarmMsg("研选审批通过的时候研选扣点更新,写入Redis队列消息失败:"+err.Error()+msg, 2)
  302. }
  303. }()
  304. //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"`
  305. log := &cygx.YanXuanActivityPointsRedis{ComapnyId: comapnyId, SourceType: 6, Source: 2, CreateTime: time.Now()}
  306. if utils.Re == nil {
  307. err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log)
  308. if err != nil {
  309. fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error())
  310. }
  311. }
  312. return
  313. }
  314. func init0703() {
  315. //2023.07.03剩余服务点数初始化
  316. path := "0703.xlsx"
  317. xlFile, err := xlsx.OpenFile(path)
  318. if err != nil {
  319. fmt.Println(err)
  320. }
  321. mapcompanyName := make(map[string]string)
  322. fmt.Println(xlFile)
  323. var items []*cygx.CygxActivityPointsCompany
  324. for _, sheet := range xlFile.Sheets {
  325. //遍历行读取
  326. maxRow := sheet.MaxRow
  327. for i := 0; i < maxRow; i++ {
  328. //fmt.Println(i)
  329. if i == 0 {
  330. continue
  331. }
  332. row := sheet.Row(i)
  333. cells := row.Cells
  334. var companyName string
  335. var points float64
  336. item := new(cygx.CygxActivityPointsCompany)
  337. for k, cell := range cells {
  338. if k == 0 {
  339. text := cell.String()
  340. companyName = text
  341. }
  342. if k == 3 {
  343. text := cell.String()
  344. points, _ = strconv.ParseFloat(text, 2)
  345. item.Points = points
  346. }
  347. itemDetail, err := company.CheckCompanyProductByName(companyName, 2)
  348. if err != nil {
  349. fmt.Println(err, companyName)
  350. return
  351. }
  352. item.CompanyName = itemDetail.CompanyName
  353. item.CompanyId = itemDetail.CompanyId
  354. item.CreateTime = time.Now()
  355. item.ModifyTime = time.Now()
  356. if mapcompanyName[itemDetail.CompanyName] != "" {
  357. continue
  358. }
  359. items = append(items, item)
  360. mapcompanyName[itemDetail.CompanyName] = itemDetail.CompanyName
  361. }
  362. }
  363. }
  364. var companyIds string
  365. var itemsBill []*cygx.CygxActivityPointsBill
  366. for _, v := range items {
  367. fmt.Println(v.CompanyName, v.Points)
  368. itemBill := new(cygx.CygxActivityPointsBill)
  369. itemBill.CreateTime = time.Now()
  370. itemBill.CompanyId = v.CompanyId
  371. itemBill.CompanyName = v.CompanyName
  372. itemBill.Source = 3
  373. itemBill.BillDetailed = v.Points
  374. itemBill.Points = v.Points
  375. itemBill.DoType = 2
  376. itemBill.Content = "2023.07.03剩余服务点数初始化"
  377. itemsBill = append(itemsBill, itemBill)
  378. }
  379. err = cygx.AddCygxActivityPointsBillAndCompanyMulti(itemsBill, items)
  380. fmt.Println(len(items))
  381. fmt.Println(len(itemsBill))
  382. utils.FileLog.Info(companyIds)
  383. fmt.Println(companyIds)
  384. fmt.Println(err)
  385. }