order.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. package cygx
  2. import (
  3. "encoding/json"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "hongze/hz_crm_api/controllers"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/cygx"
  8. "hongze/hz_crm_api/utils"
  9. "strconv"
  10. "time"
  11. )
  12. // 产品内测
  13. type OrderController struct {
  14. controllers.BaseAuthController
  15. }
  16. // @Title 列表
  17. // @Description 列表接口
  18. // @Param PageSize query int true "每页数据条数"
  19. // @Param CurrentIndex query int true "当前页页码,从1开始"
  20. // @Param StartDate query string false "开始时间 ,列如2021-03-06 "
  21. // @Param EndDate query string false "结束时间,列如2021-03-06 "
  22. // @Param AdminId query string false "销售ID "
  23. // @Param OrderType query int false "订单类型 1:畅读卡订单,2:单场付费订单"
  24. // @Param PaymentProject query string false "付款项目"
  25. // @Param OrderCode query string false "订单编号"
  26. // @Param KeyWord query string false "搜索关键词"
  27. // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp
  28. // @router /order/list [get]
  29. func (this *OrderController) OrderList() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. this.Data["json"] = br
  33. this.ServeJSON()
  34. }()
  35. sysUser := this.SysUser
  36. if sysUser == nil {
  37. br.Msg = "请登录"
  38. br.ErrMsg = "请登录,SysUser Is Empty"
  39. br.Ret = 408
  40. return
  41. }
  42. resp := new(cygx.UserOrderListResp)
  43. pageSize, _ := this.GetInt("PageSize")
  44. currentIndex, _ := this.GetInt("CurrentIndex")
  45. orderType, _ := this.GetInt("OrderType", 1)
  46. startDate := this.GetString("StartDate")
  47. endDate := this.GetString("EndDate")
  48. adminId := this.GetString("AdminId")
  49. orderCode := this.GetString("OrderCode")
  50. keyWord := this.GetString("KeyWord")
  51. var startSize int
  52. if pageSize <= 0 {
  53. pageSize = utils.PageSize20
  54. }
  55. if currentIndex <= 0 {
  56. currentIndex = 1
  57. }
  58. startSize = utils.StartIndex(currentIndex, pageSize)
  59. var condition string
  60. var pars []interface{}
  61. if orderType > 0 { //订单类型 1:畅读卡订单,2:单场付费订单
  62. condition += ` AND order_type = ? `
  63. pars = append(pars, orderType)
  64. }
  65. if startDate != "" && endDate != "" { //时间范围
  66. condition += ` AND create_time BETWEEN ? AND ? `
  67. pars = append(pars, startDate, endDate)
  68. }
  69. if adminId != "" { //所属销售筛选
  70. condition += ` AND seller_id IN (` + adminId + `) `
  71. }
  72. if orderCode != "" { //订单编号
  73. orderCode = "%" + orderCode + "%"
  74. condition += ` AND order_code LIKE ? `
  75. pars = append(pars, orderCode)
  76. }
  77. if keyWord != "" { //用户姓名,手机号
  78. keyWord = "%" + keyWord + "%"
  79. condition += ` AND (mobile LIKE ? OR real_name LIKE ? ) `
  80. pars = append(pars, keyWord, keyWord)
  81. }
  82. total, err := cygx.GetCygxOrderCount(condition, pars)
  83. if err != nil {
  84. br.Msg = "获取失败"
  85. br.ErrMsg = "获取失败,Err:" + err.Error()
  86. return
  87. }
  88. condition += " ORDER BY order_id DESC "
  89. list, err := cygx.GetCygxOrderList(condition, pars, startSize, pageSize)
  90. if err != nil {
  91. br.Msg = "获取失败"
  92. br.ErrMsg = "获取失败,Err:" + err.Error()
  93. return
  94. }
  95. for _, v := range list {
  96. item := new(cygx.OrderListResp)
  97. item.OrderCode = v.OrderCode
  98. item.OrderMoney = v.OrderMoney
  99. item.SourceId = v.SourceId
  100. item.Source = v.Source
  101. item.SourceTitle = v.SourceTitle
  102. switch v.Source {
  103. case "article": //文章详情
  104. item.HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.SourceId)
  105. case "activity": //活动详情
  106. item.HttpUrl = utils.CYGX_WEB_URL + "/activity/detail/" + strconv.Itoa(v.SourceId)
  107. }
  108. item.OrderStatus = v.OrderStatus
  109. if v.OrderStatus == 0 {
  110. item.OrderStatusText = "已取消"
  111. } else if v.OrderStatus == 1 {
  112. item.OrderStatusText = "待支付"
  113. } else if v.OrderStatus == 2 {
  114. item.OrderStatusText = "已支付"
  115. }
  116. item.UserId = v.UserId
  117. item.RealName = v.RealName
  118. item.Mobile = v.Mobile
  119. item.Email = v.Email
  120. item.CompanyId = v.CompanyId
  121. item.CompanyName = v.CompanyName
  122. item.SellerName = v.SellerName
  123. item.InviteName = "推荐人"
  124. item.PaymentProject = v.GoodsName
  125. if v.OrderStatus == 2 {
  126. item.PayTime = v.PayTime.Format(utils.FormatDateTime)
  127. }
  128. if orderType == 1 {
  129. item.StartDate = time.Now().Format(utils.FormatDateTime)
  130. item.EndDate = time.Now().AddDate(0, 0, 3).Format(utils.FormatDateTime)
  131. }
  132. item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  133. resp.List = append(resp.List, item)
  134. }
  135. page := paging.GetPaging(currentIndex, pageSize, total)
  136. resp.Paging = page
  137. br.Ret = 200
  138. br.Success = true
  139. br.Msg = "获取成功"
  140. br.Data = resp
  141. }
  142. // @Title 退款
  143. // @Description 退款接口
  144. // @Param request body cygx.UserRemarAddReq true "type json string"
  145. // @Success 200 操作成功
  146. // @router /order/refund [post]
  147. func (this *UserController) OrderRefund() {
  148. br := new(models.BaseResponse).Init()
  149. defer func() {
  150. this.Data["json"] = br
  151. this.ServeJSON()
  152. }()
  153. sysUser := this.SysUser
  154. if sysUser == nil {
  155. br.Msg = "请登录"
  156. br.ErrMsg = "请登录,SysUser Is Empty"
  157. br.Ret = 408
  158. return
  159. }
  160. var req cygx.CygxOrderRefundReq
  161. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  162. if err != nil {
  163. br.Msg = "参数解析异常!"
  164. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  165. return
  166. }
  167. orderCode := req.OrderCode
  168. remark := req.Remark
  169. if remark == "" {
  170. br.Msg = "请填写退款原因"
  171. return
  172. }
  173. orderDetail, err := cygx.GetCygxOrderDetailByOrderCode(orderCode)
  174. if err != nil {
  175. br.Msg = "获取失败"
  176. br.ErrMsg = "获取失败, Err:" + err.Error()
  177. return
  178. }
  179. if orderDetail.OrderStatus != 2 {
  180. br.Msg = "订单状态异常!"
  181. br.ErrMsg = "订单状态异常,orderCode:" + orderCode
  182. return
  183. }
  184. item := new(cygx.CygxOrderRefund)
  185. item.OrderCode = orderCode
  186. item.RefundMoney = orderDetail.OrderMoney
  187. item.RefundWay = 1
  188. item.Remark = remark
  189. item.CreateTime = time.Now()
  190. item.RefundTime = time.Now()
  191. item.AdminId = sysUser.AdminId
  192. item.AdminName = sysUser.RealName
  193. err = cygx.AddCygxOrderRefund(item)
  194. if err != nil {
  195. br.Msg = "新增失败."
  196. br.ErrMsg = "新增失败,Err:" + err.Error()
  197. return
  198. }
  199. br.Ret = 200
  200. br.Success = true
  201. br.Msg = "新增成功"
  202. }
  203. // @Title 退款记录列表
  204. // @Description 退款记录列表接口
  205. // @Param PageSize query int true "每页数据条数"
  206. // @Param CurrentIndex query int true "当前页页码,从1开始"
  207. // @Param StartDate query string false "开始时间 ,列如2021-03-06 "
  208. // @Param EndDate query string false "结束时间,列如2021-03-06 "
  209. // @Param AdminId query string false "销售ID "
  210. // @Param OrderType query int false "订单类型 1:畅读卡订单,2:单场付费订单"
  211. // @Param PaymentProject query string false "付款项目"
  212. // @Param OrderCode query string false "订单编号"
  213. // @Param KeyWord query string false "搜索关键词"
  214. // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp
  215. // @router /order/refund/list [get]
  216. func (this *OrderController) OrderRefundList() {
  217. br := new(models.BaseResponse).Init()
  218. defer func() {
  219. this.Data["json"] = br
  220. this.ServeJSON()
  221. }()
  222. sysUser := this.SysUser
  223. if sysUser == nil {
  224. br.Msg = "请登录"
  225. br.ErrMsg = "请登录,SysUser Is Empty"
  226. br.Ret = 408
  227. return
  228. }
  229. resp := new(cygx.UserOrderListResp)
  230. pageSize, _ := this.GetInt("PageSize")
  231. currentIndex, _ := this.GetInt("CurrentIndex")
  232. orderType, _ := this.GetInt("OrderType", 1)
  233. startDate := this.GetString("StartDate")
  234. endDate := this.GetString("EndDate")
  235. adminId := this.GetString("AdminId")
  236. orderCode := this.GetString("OrderCode")
  237. keyWord := this.GetString("KeyWord")
  238. var startSize int
  239. if pageSize <= 0 {
  240. pageSize = utils.PageSize20
  241. }
  242. if currentIndex <= 0 {
  243. currentIndex = 1
  244. }
  245. startSize = utils.StartIndex(currentIndex, pageSize)
  246. var condition string
  247. var pars []interface{}
  248. condition += ` AND order_status = 3 `
  249. if orderType > 0 { //订单类型 1:畅读卡订单,2:单场付费订单
  250. condition += ` AND order_type = ? `
  251. pars = append(pars, orderType)
  252. }
  253. if startDate != "" && endDate != "" { //时间范围
  254. condition += ` AND create_time BETWEEN ? AND ? `
  255. pars = append(pars, startDate, endDate)
  256. }
  257. if adminId != "" { //所属销售筛选
  258. condition += ` AND seller_id IN (` + adminId + `) `
  259. }
  260. if orderCode != "" { //订单编号
  261. orderCode = "%" + orderCode + "%"
  262. condition += ` AND order_code LIKE ? `
  263. pars = append(pars, orderCode)
  264. }
  265. if keyWord != "" { //用户姓名,手机号
  266. keyWord = "%" + keyWord + "%"
  267. condition += ` AND (mobile LIKE ? OR real_name LIKE ? ) `
  268. pars = append(pars, keyWord, keyWord)
  269. }
  270. total, err := cygx.GetCygxOrderCount(condition, pars)
  271. if err != nil {
  272. br.Msg = "获取失败"
  273. br.ErrMsg = "获取失败,Err:" + err.Error()
  274. return
  275. }
  276. condition += " ORDER BY order_id DESC "
  277. list, err := cygx.GetCygxOrderList(condition, pars, startSize, pageSize)
  278. if err != nil {
  279. br.Msg = "获取失败"
  280. br.ErrMsg = "获取失败,Err:" + err.Error()
  281. return
  282. }
  283. for _, v := range list {
  284. item := new(cygx.OrderListResp)
  285. item.OrderCode = v.OrderCode
  286. item.OrderMoney = v.OrderMoney
  287. item.SourceId = v.SourceId
  288. item.Source = v.Source
  289. item.SourceTitle = v.SourceTitle
  290. switch v.Source {
  291. case "article": //文章详情
  292. item.HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.SourceId)
  293. case "activity": //活动详情
  294. item.HttpUrl = utils.CYGX_WEB_URL + "/activity/detail/" + strconv.Itoa(v.SourceId)
  295. }
  296. item.OrderStatus = v.OrderStatus
  297. if v.OrderStatus == 3 {
  298. item.OrderStatusText = "退款成功"
  299. } else {
  300. item.OrderStatusText = "退款异常"
  301. }
  302. item.UserId = v.UserId
  303. item.RealName = v.RealName
  304. item.Mobile = v.Mobile
  305. item.Email = v.Email
  306. item.CompanyId = v.CompanyId
  307. item.CompanyName = v.CompanyName
  308. item.SellerName = v.SellerName
  309. item.InviteName = "推荐人"
  310. item.PaymentProject = v.GoodsName
  311. item.RefundTime = v.RefundTime.Format(utils.FormatDateTime)
  312. item.RefundRemark = v.RefundRemark
  313. if v.OrderStatus == 2 {
  314. item.PayTime = v.PayTime.Format(utils.FormatDateTime)
  315. }
  316. if orderType == 1 {
  317. item.StartDate = time.Now().Format(utils.FormatDateTime)
  318. item.EndDate = time.Now().AddDate(0, 0, 3).Format(utils.FormatDateTime)
  319. }
  320. item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  321. resp.List = append(resp.List, item)
  322. }
  323. page := paging.GetPaging(currentIndex, pageSize, total)
  324. resp.Paging = page
  325. br.Ret = 200
  326. br.Success = true
  327. br.Msg = "获取成功"
  328. br.Data = resp
  329. }