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.

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