You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

259 lines
7.7 KiB

  1. package couponusers
  2. import (
  3. "CouponBackendGo/api/v1/couponusers"
  4. "CouponBackendGo/internal/model/dto"
  5. "CouponBackendGo/internal/service"
  6. "CouponBackendGo/utility"
  7. "fmt"
  8. "github.com/gogf/gf/v2/net/ghttp"
  9. "mime/multipart"
  10. )
  11. type CouponUsers struct{}
  12. func NewCouponUsers() *CouponUsers {
  13. return &CouponUsers{}
  14. }
  15. // 获取拥有卡券的用户列表
  16. func (c *CouponUsers) GetCouponUsers(r *ghttp.Request) {
  17. //解析请求
  18. var req *couponusers.GetCouponUsersReq
  19. if err := r.Parse(&req); err != nil {
  20. r.Response.WriteJsonExit(dto.Error(err.Error()))
  21. }
  22. result, err := service.CouponUsers().GetCouponUsersByCondition(r.Context(), req.CouponId, req.Jwcode, req.Name, req.PageNo, req.PageSize)
  23. //错误处理
  24. if err != nil {
  25. r.Response.WriteJsonExit(dto.Error(err.Error()))
  26. }
  27. //没有错误,但获取到了0条
  28. if result == nil {
  29. r.Response.WriteJsonExit(dto.Error("没有符合条件的用户"))
  30. }
  31. //成功处理
  32. r.Response.WriteJsonExit(dto.SuccessWithData(result))
  33. }
  34. // 删除用户卡券
  35. func (c *CouponUsers) DeleteCouponUserByJwcode(r *ghttp.Request) {
  36. // 解析请求
  37. var req *couponusers.DelCouponUserByJwcodeReq
  38. if err := r.Parse(&req); err != nil {
  39. r.Response.WriteJsonExit(dto.Error(err.Error()))
  40. }
  41. result, err := service.CouponUsers().DeleteCouponUserByJwcode(r.Context(), req.CouponId, req.Jwcode)
  42. //错误处理
  43. if err != nil {
  44. r.Response.WriteJsonExit(dto.Error(err.Error()))
  45. }
  46. //获取影响到的数据条数
  47. affected, err := result.RowsAffected()
  48. //没有错误,但删除0条
  49. if affected == 0 {
  50. r.Response.WriteJsonExit(dto.Error("删除失败,删除了0条"))
  51. }
  52. //成功处理
  53. r.Response.WriteJsonExit(dto.SuccessWithMsg("删除成功"))
  54. }
  55. // 接受前端传来的excel表格,并解析,返回jwcode切片,可以有重复的,在插入时进行验证,如果有重复的,只插入一次
  56. func (c *CouponUsers) InsertCouponUserByExcel(r *ghttp.Request) {
  57. /*解析请求*/
  58. var req *couponusers.InsertCouponUserReq
  59. if err := r.Parse(&req); err != nil {
  60. r.Response.WriteJsonExit(dto.Error(err.Error()))
  61. }
  62. /*解析请求*/
  63. // 从请求中获取文件
  64. file, _, err := r.FormFile("excelFile")
  65. if err != nil {
  66. r.Response.WriteJsonExit(dto.Error(err.Error()))
  67. }
  68. // 延时关闭文件
  69. defer func(file multipart.File) {
  70. err := file.Close()
  71. if err != nil {
  72. // 处理关闭文件时的错误
  73. r.Response.WriteJsonExit(dto.Error("获取的文件关闭失败"))
  74. }
  75. }(file)
  76. //参数校验,检查文件是否为空
  77. if file == nil {
  78. r.Response.WriteJsonExit(dto.Error("获取的文件为空"))
  79. }
  80. /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/
  81. result, err := service.CouponUsers().InsertJwcodeByExcel(r.Context(), file, req.CouponId)
  82. //错误处理
  83. if err != nil {
  84. r.Response.WriteJsonExit(dto.Error(err.Error()))
  85. }
  86. //没报错,但插入数据0条
  87. if result == 0 {
  88. r.Response.WriteJsonExit(dto.Error("发放失败,发放了0人"))
  89. }
  90. //成功处理
  91. r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result)))
  92. /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/
  93. }
  94. // 传入jwcodes字符串,解析并发放卡券
  95. func (c *CouponUsers) InsertCouponUserByJwcodeStr(r *ghttp.Request) {
  96. // 解析请求
  97. var req *couponusers.InsertCouponUserByJwcodeStrReq
  98. if err := r.Parse(&req); err != nil {
  99. r.Response.WriteJsonExit(dto.Error(err.Error()))
  100. }
  101. result, err := service.CouponUsers().InsertCouponUsersByJwcodeStr(r.Context(), req.Jwcodes, req.CouponId)
  102. //错误处理
  103. if err != nil {
  104. r.Response.WriteJsonExit(dto.Error(err.Error()))
  105. }
  106. //没报错,但插入数据0条
  107. if result == 0 {
  108. r.Response.WriteJsonExit(dto.Error("发放失败,发放了0人"))
  109. }
  110. //成功处理
  111. r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result)))
  112. }
  113. /*近期使用*/
  114. // 导入满足条件的用户jwcode到redis //不导入到redis了,导入到数据库表中
  115. func (c *CouponUsers) InsertJwcodesToRedisByExcel(r *ghttp.Request) {
  116. // 从请求中获取文件
  117. file, _, err := r.FormFile("EligibleJwcodesExcel")
  118. if err != nil {
  119. r.Response.WriteJsonExit(dto.Error(err.Error()))
  120. }
  121. // 延时关闭文件
  122. defer func(file multipart.File) {
  123. err := file.Close()
  124. if err != nil {
  125. // 处理关闭文件时的错误
  126. r.Response.WriteJsonExit(dto.Error("获取的文件关闭失败"))
  127. }
  128. }(file)
  129. //参数校验,检查文件是否为空
  130. if file == nil {
  131. r.Response.WriteJsonExit(dto.Error("获取的文件为空"))
  132. }
  133. err = service.CouponUsers().InsertJwcodesToRedisByExcel(file)
  134. //错误处理
  135. if err != nil {
  136. r.Response.WriteJsonExit(dto.Error(err.Error()))
  137. }
  138. //成功处理
  139. //r.Response.WriteJsonExit(dto.SuccessWithMsg("导入redis成功"))
  140. r.Response.WriteJsonExit(dto.SuccessWithMsg("导入coupon_qualified_users表成功"))
  141. }
  142. // 判断某用户能否抽到卡券
  143. func (c *CouponUsers) IsEligibleUser(r *ghttp.Request) {
  144. // 解析请求
  145. var req *couponusers.IsEligibleUserReq
  146. if err := r.Parse(&req); err != nil {
  147. r.Response.WriteJsonExit(dto.Error(err.Error()))
  148. }
  149. /*解析token,获取jwcode*/
  150. token := r.Header.Get("token")
  151. if token == "" {
  152. r.Response.WriteJsonExit(dto.Error("token为空"))
  153. }
  154. jwcode, err := utility.GetJwcodeJSON(token)
  155. if err != nil {
  156. r.Response.WriteJsonExit(dto.Error(err.Error()))
  157. }
  158. /*解析token,获取jwcode*/
  159. img, err := service.CouponUsers().IsEligibleUser(r.Context(), jwcode, req.CouponIds)
  160. if err != nil {
  161. r.Response.WriteJsonExit(dto.Error(err.Error()))
  162. }
  163. if img != "" {
  164. r.Response.WriteJsonExit(dto.SuccessWithMsgAndData("该用户已领取过该卡券", img))
  165. }
  166. r.Response.WriteJsonExit(dto.SuccessWithMsg("用户符合领取条件"))
  167. }
  168. // 给单个用户发放卡券
  169. func (c *CouponUsers) IssueCouponUser(r *ghttp.Request) {
  170. // 解析请求参数
  171. var req *couponusers.IssueCouponUserReq
  172. if err := r.Parse(&req); err != nil {
  173. r.Response.WriteJsonExit(dto.Error(err.Error()))
  174. }
  175. //解析token,获取jwcode
  176. token := r.Header.Get("token")
  177. if token == "" {
  178. r.Response.WriteJsonExit(dto.Error("token为空"))
  179. }
  180. jwcode, err := utility.GetJwcodeJSON(token)
  181. if err != nil {
  182. r.Response.WriteJsonExit(dto.Error(err.Error()))
  183. }
  184. err = service.CouponUsers().IssueCouponToUser(r.Context(), jwcode, req.CouponId)
  185. //错误处理
  186. if err != nil {
  187. r.Response.WriteJsonExit(dto.Error(err.Error()))
  188. }
  189. //成功处理
  190. r.Response.WriteJsonExit(dto.SuccessWithMsg("发放成功"))
  191. }
  192. // 添加用户选择武器记录
  193. func (c *CouponUsers) AddRecord(r *ghttp.Request) {
  194. var req *couponusers.AddRecordReq
  195. if err := r.Parse(&req); err != nil {
  196. r.Response.WriteJsonExit(dto.Error(err.Error()))
  197. }
  198. //解析token,获取jwcode
  199. token := r.Header.Get("token")
  200. if token == "" {
  201. r.Response.WriteJsonExit(dto.Error("token为空"))
  202. }
  203. jwcode, err := utility.GetJwcodeJSON(token)
  204. if err != nil {
  205. r.Response.WriteJsonExit(dto.Error(err.Error()))
  206. }
  207. err = service.CouponUsers().AddRecord(r.Context(), jwcode, req.CouponId, req.Name)
  208. //错误处理
  209. if err != nil {
  210. r.Response.WriteJsonExit(dto.Error(err.Error()))
  211. }
  212. //成功处理
  213. r.Response.WriteJsonExit(dto.SuccessWithMsg("记录成功"))
  214. }
  215. /*近期使用*/
  216. // 导出拥有卡券的用户
  217. func (c *CouponUsers) ExportCouponUsers(r *ghttp.Request) {
  218. var req *couponusers.GetCouponUsersReq
  219. // 解析请求参数
  220. if err := r.Parse(&req); err != nil {
  221. r.Response.WriteJsonExit(dto.Error(err.Error()))
  222. }
  223. //查询数据,创建excel文件,设置表头,写入数据,设置文件名,保存到缓冲区并返回,设置响应头,指定内容类型为excel文件,指定文件名为fileName,将buffer中的内容写入响应
  224. service.CouponUsers().ExportCouponUsers(r, req.CouponId, req.Jwcode, req.Name, req.PageNo, req.PageSize)
  225. }