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.

260 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. file, _, err := r.FormFile("file")
  66. if err != nil {
  67. r.Response.WriteJsonExit(dto.Error(err.Error()))
  68. }
  69. // 延时关闭文件
  70. defer func(file multipart.File) {
  71. err := file.Close()
  72. if err != nil {
  73. // 处理关闭文件时的错误
  74. r.Response.WriteJsonExit(dto.Error("获取的文件关闭失败"))
  75. }
  76. }(file)
  77. //参数校验,检查文件是否为空
  78. if file == nil {
  79. r.Response.WriteJsonExit(dto.Error("获取的文件为空"))
  80. }
  81. /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/
  82. result, err := service.CouponUsers().InsertJwcodeByExcel(r.Context(), file, req.CouponId)
  83. //错误处理
  84. if err != nil {
  85. r.Response.WriteJsonExit(dto.Error(err.Error()))
  86. }
  87. //没报错,但插入数据0条
  88. if result == 0 {
  89. r.Response.WriteJsonExit(dto.Error("发放失败,发放了0人"))
  90. }
  91. //成功处理
  92. r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result)))
  93. /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/
  94. }
  95. // 传入jwcodes字符串,解析并发放卡券
  96. func (c *CouponUsers) InsertCouponUserByJwcodeStr(r *ghttp.Request) {
  97. // 解析请求
  98. var req *couponusers.InsertCouponUserByJwcodeStrReq
  99. if err := r.Parse(&req); err != nil {
  100. r.Response.WriteJsonExit(dto.Error(err.Error()))
  101. }
  102. result, err := service.CouponUsers().InsertCouponUsersByJwcodeStr(r.Context(), req.Jwcodes, req.CouponId)
  103. //错误处理
  104. if err != nil {
  105. r.Response.WriteJsonExit(dto.Error(err.Error()))
  106. }
  107. //没报错,但插入数据0条
  108. if result == 0 {
  109. r.Response.WriteJsonExit(dto.Error("发放失败,发放了0人"))
  110. }
  111. //成功处理
  112. r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result)))
  113. }
  114. /*近期使用*/
  115. // 导入满足条件的用户jwcode到redis //不导入到redis了,导入到数据库表中
  116. func (c *CouponUsers) InsertJwcodesToRedisByExcel(r *ghttp.Request) {
  117. // 从请求中获取文件
  118. file, _, err := r.FormFile("EligibleJwcodesExcel")
  119. if err != nil {
  120. r.Response.WriteJsonExit(dto.Error(err.Error()))
  121. }
  122. // 延时关闭文件
  123. defer func(file multipart.File) {
  124. err := file.Close()
  125. if err != nil {
  126. // 处理关闭文件时的错误
  127. r.Response.WriteJsonExit(dto.Error("获取的文件关闭失败"))
  128. }
  129. }(file)
  130. //参数校验,检查文件是否为空
  131. if file == nil {
  132. r.Response.WriteJsonExit(dto.Error("获取的文件为空"))
  133. }
  134. err = service.CouponUsers().InsertJwcodesToRedisByExcel(file)
  135. //错误处理
  136. if err != nil {
  137. r.Response.WriteJsonExit(dto.Error(err.Error()))
  138. }
  139. //成功处理
  140. //r.Response.WriteJsonExit(dto.SuccessWithMsg("导入redis成功"))
  141. r.Response.WriteJsonExit(dto.SuccessWithMsg("导入coupon_qualified_users表成功"))
  142. }
  143. // 判断某用户能否抽到卡券
  144. func (c *CouponUsers) IsEligibleUser(r *ghttp.Request) {
  145. // 解析请求
  146. var req *couponusers.IsEligibleUserReq
  147. if err := r.Parse(&req); err != nil {
  148. r.Response.WriteJsonExit(dto.Error(err.Error()))
  149. }
  150. /*解析token,获取jwcode*/
  151. token := r.Header.Get("token")
  152. if token == "" {
  153. r.Response.WriteJsonExit(dto.Error("token为空"))
  154. }
  155. jwcode, err := utility.GetJwcodeJSON(token)
  156. if err != nil {
  157. r.Response.WriteJsonExit(dto.Error(err.Error()))
  158. }
  159. /*解析token,获取jwcode*/
  160. img, err := service.CouponUsers().IsEligibleUser(r.Context(), jwcode, req.CouponIds)
  161. if err != nil {
  162. r.Response.WriteJsonExit(dto.Error(err.Error()))
  163. }
  164. if img != "" {
  165. r.Response.WriteJsonExit(dto.SuccessWithMsgAndData("该用户已领取过该卡券", img))
  166. }
  167. r.Response.WriteJsonExit(dto.SuccessWithMsg("用户符合领取条件"))
  168. }
  169. // 给单个用户发放卡券
  170. func (c *CouponUsers) IssueCouponUser(r *ghttp.Request) {
  171. // 解析请求参数
  172. var req *couponusers.IssueCouponUserReq
  173. if err := r.Parse(&req); err != nil {
  174. r.Response.WriteJsonExit(dto.Error(err.Error()))
  175. }
  176. //解析token,获取jwcode
  177. token := r.Header.Get("token")
  178. if token == "" {
  179. r.Response.WriteJsonExit(dto.Error("token为空"))
  180. }
  181. jwcode, err := utility.GetJwcodeJSON(token)
  182. if err != nil {
  183. r.Response.WriteJsonExit(dto.Error(err.Error()))
  184. }
  185. err = service.CouponUsers().IssueCouponToUser(r.Context(), jwcode, req.CouponId)
  186. //错误处理
  187. if err != nil {
  188. r.Response.WriteJsonExit(dto.Error(err.Error()))
  189. }
  190. //成功处理
  191. r.Response.WriteJsonExit(dto.SuccessWithMsg("发放成功"))
  192. }
  193. // 添加用户选择武器记录
  194. func (c *CouponUsers) AddRecord(r *ghttp.Request) {
  195. var req *couponusers.AddRecordReq
  196. if err := r.Parse(&req); err != nil {
  197. r.Response.WriteJsonExit(dto.Error(err.Error()))
  198. }
  199. //解析token,获取jwcode
  200. token := r.Header.Get("token")
  201. if token == "" {
  202. r.Response.WriteJsonExit(dto.Error("token为空"))
  203. }
  204. jwcode, err := utility.GetJwcodeJSON(token)
  205. if err != nil {
  206. r.Response.WriteJsonExit(dto.Error(err.Error()))
  207. }
  208. err = service.CouponUsers().AddRecord(r.Context(), jwcode, req.CouponId, req.Name)
  209. //错误处理
  210. if err != nil {
  211. r.Response.WriteJsonExit(dto.Error(err.Error()))
  212. }
  213. //成功处理
  214. r.Response.WriteJsonExit(dto.SuccessWithMsg("记录成功"))
  215. }
  216. /*近期使用*/
  217. // 导出拥有卡券的用户
  218. func (c *CouponUsers) ExportCouponUsers(r *ghttp.Request) {
  219. var req *couponusers.GetCouponUsersReq
  220. // 解析请求参数
  221. if err := r.Parse(&req); err != nil {
  222. r.Response.WriteJsonExit(dto.Error(err.Error()))
  223. }
  224. //查询数据,创建excel文件,设置表头,写入数据,设置文件名,保存到缓冲区并返回,设置响应头,指定内容类型为excel文件,指定文件名为fileName,将buffer中的内容写入响应
  225. service.CouponUsers().ExportCouponUsers(r, req.CouponId, req.Jwcode, req.Name, req.PageNo, req.PageSize)
  226. }