123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. package coupon
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "net/http"
  6. "spaceofcheng/services/controllers"
  7. cpModel "spaceofcheng/services/models/coupon"
  8. "spaceofcheng/services/models/model"
  9. "spaceofcheng/services/service/coupon"
  10. "spaceofcheng/services/utils"
  11. "strings"
  12. )
  13. // CouponController 商品
  14. type CouponController struct {
  15. serv *coupon.CouponServ
  16. controllers.BaseController
  17. }
  18. // Constructor 初始化 Controller
  19. // @Title Constructor
  20. // @Description 初始化 Controller, 系统自动调用
  21. func (c *CouponController) Constructor() {
  22. c.serv = coupon.NewCouponServ(c.Context)
  23. }
  24. // ListByCase 获取券列表
  25. func (c *CouponController) ListByCase() {
  26. caseID := c.GetString("caseid")
  27. page, _ := c.GetInt("page")
  28. pagesize, _ := c.GetInt("pagesize")
  29. if page < 0 {
  30. page = 1
  31. }
  32. if pagesize <= 0 {
  33. pagesize = 10
  34. }
  35. sendtype := c.GetString("sendtype")
  36. usetype := c.GetString("usetype")
  37. usedid := c.GetString("usedid")
  38. list, total, err := c.serv.GetCouponList(caseID, sendtype, usetype, usedid, page, pagesize)
  39. if err != nil {
  40. c.ResponseError(err)
  41. }
  42. c.ResponseJSON(map[string]interface{}{
  43. "list": list,
  44. "page": page,
  45. "pagesize": pagesize,
  46. "pagenum": total,
  47. })
  48. }
  49. // GetCouponByIDForAdmin 获取优惠券
  50. // 管理端
  51. func (c *CouponController) GetCouponByIDForAdmin() {
  52. id := c.GetString(":id")
  53. if id == "" {
  54. c.ResponseError(errors.New("未指定券"))
  55. }
  56. cp, err := c.serv.GetCouponByIDWithCheck(id)
  57. if err != nil {
  58. c.ResponseError(err)
  59. }
  60. c.ResponseJSON(map[string]interface{}{
  61. "coupon": cp,
  62. })
  63. }
  64. // GetCouponByID 获取优惠券
  65. // 微信端
  66. func (c *CouponController) GetCouponByID() {
  67. id := c.GetString(":id")
  68. if id == "" {
  69. c.ResponseError(errors.New("未指定券"))
  70. }
  71. cp, err := c.serv.GetCouponInfoByID(id)
  72. if err != nil {
  73. c.ResponseError(err)
  74. }
  75. c.ResponseJSON(map[string]interface{}{
  76. "coupon": cp,
  77. })
  78. }
  79. // SaveCoupon 保存优惠券
  80. func (c *CouponController) SaveCoupon() {
  81. jsnStr := c.GetString("info")
  82. if jsnStr == "" {
  83. c.ResponseError(errors.New("未接收到保存内容"))
  84. }
  85. cp := cpModel.CouponInfo{}
  86. if err := json.Unmarshal([]byte(jsnStr), &cp); err != nil {
  87. utils.LogError("接收优惠券信息失败: " + err.Error())
  88. c.ResponseError(errors.New("接收参数失败"), http.StatusInternalServerError)
  89. }
  90. // TODO
  91. // 校验各字段不能为空
  92. // 入库
  93. cp.CouponId = ""
  94. if err := c.serv.SaveCoupon(&cp); err != nil {
  95. c.ResponseError(err)
  96. }
  97. c.ResponseJSON(map[string]interface{}{
  98. "coupon": cp,
  99. })
  100. }
  101. // UpdateCoupon 更新优惠券
  102. func (c *CouponController) UpdateCoupon() {
  103. jsnStr := c.GetString("info")
  104. if jsnStr == "" {
  105. c.ResponseError(errors.New("未接收到更新内容"))
  106. }
  107. id := c.GetString(":id")
  108. if id == "" {
  109. c.ResponseError(errors.New("未指定券"))
  110. }
  111. cp := cpModel.CouponInfo{}
  112. if err := json.Unmarshal([]byte(jsnStr), &cp); err != nil {
  113. utils.LogError("接收优惠券信息失败: " + err.Error())
  114. c.ResponseError(errors.New("接收参数失败"), http.StatusInternalServerError)
  115. }
  116. // TODO
  117. // 校验各字段不能为空
  118. // 入库
  119. cp.CouponId = id
  120. if err := c.serv.UpdateCoupon(&cp); err != nil {
  121. c.ResponseError(err)
  122. }
  123. c.ResponseJSON(map[string]interface{}{
  124. "coupon": cp,
  125. })
  126. }
  127. // GiveCoupon 赠送优惠券
  128. func (c *CouponController) GiveCoupon() {
  129. id := c.GetString(":id")
  130. if id == "" {
  131. c.ResponseError(errors.New("未指定券"))
  132. }
  133. uids := c.GetString(":users")
  134. if uids == "" {
  135. c.ResponseError(errors.New("未指定赠送人"))
  136. }
  137. err := c.serv.GiveCoupon(id, strings.Split(uids, ","))
  138. if err != nil {
  139. c.ResponseError(err)
  140. }
  141. c.ResponseJSON("ok")
  142. }
  143. // GetCouponBySendType 根据类型获取优惠券
  144. func (c *CouponController) GetCouponBySendType() {
  145. sendtype := c.GetString(":type")
  146. coupons, err := c.serv.GetCouponBySendType(sendtype)
  147. if err != nil {
  148. c.ResponseError(err)
  149. }
  150. c.ResponseJSON(coupons)
  151. }
  152. // GetCouponWithCustomer 获取优惠券领取信息
  153. func (c *CouponController) GetCouponWithCustomer() {
  154. couponid := c.GetString(":id")
  155. couponDetail, err := c.serv.GetCouponWithCustomer(couponid)
  156. if err != nil {
  157. c.ResponseError(err)
  158. }
  159. c.ResponseJSON(couponDetail)
  160. }
  161. // GetCouponByCustomer 获取我的优惠券信息
  162. func (c *CouponController) GetCouponByCustomer() {
  163. coupons, err := c.serv.GetCouponByCustomer()
  164. if err != nil {
  165. c.ResponseError(err)
  166. }
  167. c.ResponseJSON(coupons)
  168. }
  169. // GetCustomerCouponByID 获取我的优惠券详情
  170. func (c *CouponController) GetCustomerCouponByID() {
  171. id := c.GetString(":id")
  172. coupon, err := c.serv.GetCustomerCouponByID(id)
  173. if err != nil {
  174. c.ResponseError(err)
  175. }
  176. c.ResponseJSON(coupon)
  177. }
  178. // GetCaseUsableCoupon 获取案场可用券
  179. func (c *CouponController) GetCaseUsableCoupon() {
  180. page, _ := c.GetInt("page")
  181. pageSize, _ := c.GetInt("pagesize")
  182. coupons, err := c.serv.GetCaseUsableCoupon(page, pageSize)
  183. if err != nil {
  184. c.ResponseError(err)
  185. }
  186. c.ResponseJSON(coupons)
  187. }
  188. // ReceiveCoupon 卡领取
  189. func (c *CouponController) ReceiveCoupon() {
  190. id := c.GetString(":id")
  191. saleid := c.GetString("saleid")
  192. serialcode := c.GetString("serialcode")
  193. cust := c.Context.Get("customer").(model.TaCustomer)
  194. if cust.Phone == "" {
  195. c.ResponseError(
  196. errors.New("用户未登录或绑定"),
  197. http.StatusNotAcceptable,
  198. )
  199. }
  200. err := c.serv.ReceiveCoupon(id, saleid, serialcode)
  201. if err != nil {
  202. c.ResponseError(err)
  203. }
  204. c.ResponseJSON("领取成功!")
  205. }
  206. // ChannelReceiveCoupon 渠道端卡领取
  207. func (c *CouponController) ChannelReceiveCoupon() {
  208. id := c.GetString(":id")
  209. cust := c.Context.Get("customer").(model.TaCustomer)
  210. if cust.Phone == "" {
  211. c.ResponseError(
  212. errors.New("用户未登录或绑定"),
  213. http.StatusNotAcceptable,
  214. )
  215. }
  216. err := c.serv.ChannelReceiveCoupon(id)
  217. if err != nil {
  218. c.ResponseError(err)
  219. }
  220. c.ResponseJSON("领取成功!")
  221. }
  222. // GetCustomerCouponByCustomerAndSale 获取我的卡信息
  223. func (c *CouponController) GetCustomerCouponByCustomerAndSale() {
  224. customerid := c.GetString(":id")
  225. page, _ := c.GetInt("page")
  226. pagesize, _ := c.GetInt("pagesize")
  227. Coupons, err := c.serv.GetCustomerCouponByCustomerAndSale(customerid, page, pagesize)
  228. if err != nil {
  229. c.ResponseError(err)
  230. }
  231. c.ResponseJSON(Coupons)
  232. }
  233. func (c *CouponController) GetSysCouponByCase() {
  234. caseId := c.GetString(":caseId")
  235. coupon, err := c.serv.GetSysCouponByCase(caseId)
  236. if err != nil {
  237. c.ResponseError(err)
  238. }
  239. c.ResponseJSON(coupon)
  240. }