order.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  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 OrderStatus query int false "订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭"
  25. // @Param PaymentProject query string false "付款项目"
  26. // @Param OrderCode query string false "订单编号"
  27. // @Param KeyWord query string false "搜索关键词"
  28. // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp
  29. // @router /order/list [get]
  30. func (this *OrderController) OrderList() {
  31. br := new(models.BaseResponse).Init()
  32. defer func() {
  33. this.Data["json"] = br
  34. this.ServeJSON()
  35. }()
  36. sysUser := this.SysUser
  37. if sysUser == nil {
  38. br.Msg = "请登录"
  39. br.ErrMsg = "请登录,SysUser Is Empty"
  40. br.Ret = 408
  41. return
  42. }
  43. resp := new(cygx.UserOrderListResp)
  44. pageSize, _ := this.GetInt("PageSize")
  45. currentIndex, _ := this.GetInt("CurrentIndex")
  46. orderType, _ := this.GetInt("OrderType", 1)
  47. orderStatus, _ := this.GetInt("OrderStatus", -1)
  48. startDate := this.GetString("StartDate")
  49. endDate := this.GetString("EndDate")
  50. adminId := this.GetString("AdminId")
  51. orderCode := this.GetString("OrderCode")
  52. keyWord := this.GetString("KeyWord")
  53. paymentProject := this.GetString("PaymentProject")
  54. var startSize int
  55. if pageSize <= 0 {
  56. pageSize = utils.PageSize20
  57. }
  58. if currentIndex <= 0 {
  59. currentIndex = 1
  60. }
  61. startSize = utils.StartIndex(currentIndex, pageSize)
  62. var condition string
  63. var pars []interface{}
  64. if orderType > 0 { //订单类型 1:畅读卡订单,2:单场付费订单
  65. condition += ` AND order_type = ? `
  66. pars = append(pars, orderType)
  67. }
  68. if startDate != "" && endDate != "" { //时间范围
  69. condition += ` AND create_time BETWEEN ? AND ? `
  70. pars = append(pars, startDate, endDate)
  71. }
  72. if adminId != "" { //所属销售筛选
  73. condition += ` AND seller_id IN (` + adminId + `) `
  74. }
  75. if orderStatus > -1 { //订单状态
  76. condition += ` AND order_status = ? `
  77. pars = append(pars, orderStatus)
  78. }
  79. if orderCode != "" { //订单编号
  80. orderCode = "%" + orderCode + "%"
  81. condition += ` AND order_code LIKE ? `
  82. pars = append(pars, orderCode)
  83. }
  84. if paymentProject != "" { //付款项目
  85. condition += ` AND goods_name = ? `
  86. pars = append(pars, paymentProject)
  87. }
  88. if keyWord != "" { //用户姓名,手机号
  89. keyWord = "%" + keyWord + "%"
  90. condition += ` AND (mobile LIKE ? OR real_name LIKE ? ) `
  91. pars = append(pars, keyWord, keyWord)
  92. }
  93. total, err := cygx.GetCygxOrderCount(condition, pars)
  94. if err != nil {
  95. br.Msg = "获取失败"
  96. br.ErrMsg = "获取失败,Err:" + err.Error()
  97. return
  98. }
  99. condition += " ORDER BY order_id DESC "
  100. list, err := cygx.GetCygxOrderList(condition, pars, startSize, pageSize)
  101. if err != nil {
  102. br.Msg = "获取失败"
  103. br.ErrMsg = "获取失败,Err:" + err.Error()
  104. return
  105. }
  106. for _, v := range list {
  107. item := new(cygx.OrderListResp)
  108. item.OrderCode = v.OrderCode
  109. item.OrderMoney = v.OrderMoney
  110. item.SourceId = v.SourceId
  111. item.Source = v.Source
  112. item.SourceTitle = v.SourceTitle
  113. switch v.Source {
  114. case "article": //文章详情
  115. item.HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.SourceId)
  116. case "activity": //活动详情
  117. item.HttpUrl = utils.CYGX_WEB_URL + "/activity/detail/" + strconv.Itoa(v.SourceId)
  118. }
  119. item.OrderStatus = v.OrderStatus
  120. switch item.OrderStatus {
  121. case 0:
  122. item.OrderStatusText = "已取消"
  123. case 1:
  124. item.OrderStatusText = "待支付"
  125. case 2:
  126. item.OrderStatusText = "已支付"
  127. case 3:
  128. item.OrderStatusText = "退款成功"
  129. case 4:
  130. item.OrderStatusText = "退款处理中"
  131. case 5:
  132. item.OrderStatusText = "退款异常"
  133. case 6:
  134. item.OrderStatusText = "退款关闭"
  135. }
  136. item.UserId = v.UserId
  137. item.RealName = v.RealName
  138. item.Mobile = v.Mobile
  139. item.Email = v.Email
  140. item.CompanyId = v.CompanyId
  141. item.CompanyName = v.CompanyName
  142. item.SellerName = v.SellerName
  143. item.InviteName = "推荐人"
  144. item.PaymentProject = v.GoodsName
  145. if v.OrderStatus == 2 {
  146. item.PayTime = v.PayTime.Format(utils.FormatDateTime)
  147. }
  148. if orderType == 1 {
  149. item.StartDate = time.Now().Format(utils.FormatDateTime)
  150. item.EndDate = time.Now().AddDate(0, 0, 3).Format(utils.FormatDateTime)
  151. }
  152. item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  153. resp.List = append(resp.List, item)
  154. }
  155. page := paging.GetPaging(currentIndex, pageSize, total)
  156. resp.Paging = page
  157. br.Ret = 200
  158. br.Success = true
  159. br.Msg = "获取成功"
  160. br.Data = resp
  161. }
  162. // @Title 退款
  163. // @Description 退款接口
  164. // @Param request body cygx.UserRemarAddReq true "type json string"
  165. // @Success 200 操作成功
  166. // @router /order/refund [post]
  167. func (this *UserController) OrderRefund() {
  168. br := new(models.BaseResponse).Init()
  169. defer func() {
  170. this.Data["json"] = br
  171. this.ServeJSON()
  172. }()
  173. sysUser := this.SysUser
  174. if sysUser == nil {
  175. br.Msg = "请登录"
  176. br.ErrMsg = "请登录,SysUser Is Empty"
  177. br.Ret = 408
  178. return
  179. }
  180. var req cygx.CygxOrderRefundReq
  181. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  182. if err != nil {
  183. br.Msg = "参数解析异常!"
  184. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  185. return
  186. }
  187. orderCode := req.OrderCode
  188. remark := req.Remark
  189. if remark == "" {
  190. br.Msg = "请填写退款原因"
  191. return
  192. }
  193. orderDetail, err := cygx.GetCygxOrderDetailByOrderCode(orderCode)
  194. if err != nil {
  195. br.Msg = "获取失败"
  196. br.ErrMsg = "获取失败, Err:" + err.Error()
  197. return
  198. }
  199. if orderDetail.OrderStatus != 2 {
  200. br.Msg = "订单状态异常!"
  201. br.ErrMsg = "订单状态异常,orderCode:" + orderCode
  202. return
  203. }
  204. item := new(cygx.CygxOrderRefund)
  205. item.OrderCode = orderCode
  206. item.RefundMoney = orderDetail.OrderMoney
  207. item.RefundWay = 1
  208. item.Remark = remark
  209. item.CreateTime = time.Now()
  210. item.RefundTime = time.Now()
  211. item.AdminId = sysUser.AdminId
  212. item.AdminName = sysUser.RealName
  213. err = cygx.AddCygxOrderRefund(item)
  214. if err != nil {
  215. br.Msg = "新增失败."
  216. br.ErrMsg = "新增失败,Err:" + err.Error()
  217. return
  218. }
  219. br.Ret = 200
  220. br.Success = true
  221. br.Msg = "新增成功"
  222. }
  223. // @Title 退款记录列表
  224. // @Description 退款记录列表接口
  225. // @Param PageSize query int true "每页数据条数"
  226. // @Param CurrentIndex query int true "当前页页码,从1开始"
  227. // @Param StartDate query string false "开始时间 ,列如2021-03-06 "
  228. // @Param EndDate query string false "结束时间,列如2021-03-06 "
  229. // @Param AdminId query string false "销售ID "
  230. // @Param OrderType query int false "订单类型 1:畅读卡订单,2:单场付费订单"
  231. // @Param OrderStatus query int false "订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭"
  232. // @Param PaymentProject query string false "付款项目"
  233. // @Param OrderCode query string false "订单编号"
  234. // @Param KeyWord query string false "搜索关键词"
  235. // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp
  236. // @router /order/refund/list [get]
  237. func (this *OrderController) OrderRefundList() {
  238. br := new(models.BaseResponse).Init()
  239. defer func() {
  240. this.Data["json"] = br
  241. this.ServeJSON()
  242. }()
  243. sysUser := this.SysUser
  244. if sysUser == nil {
  245. br.Msg = "请登录"
  246. br.ErrMsg = "请登录,SysUser Is Empty"
  247. br.Ret = 408
  248. return
  249. }
  250. resp := new(cygx.UserOrderListResp)
  251. pageSize, _ := this.GetInt("PageSize")
  252. currentIndex, _ := this.GetInt("CurrentIndex")
  253. orderType, _ := this.GetInt("OrderType", 1)
  254. orderStatus, _ := this.GetInt("OrderStatus", -1)
  255. startDate := this.GetString("StartDate")
  256. endDate := this.GetString("EndDate")
  257. adminId := this.GetString("AdminId")
  258. orderCode := this.GetString("OrderCode")
  259. keyWord := this.GetString("KeyWord")
  260. paymentProject := this.GetString("PaymentProject")
  261. var startSize int
  262. if pageSize <= 0 {
  263. pageSize = utils.PageSize20
  264. }
  265. if currentIndex <= 0 {
  266. currentIndex = 1
  267. }
  268. startSize = utils.StartIndex(currentIndex, pageSize)
  269. var condition string
  270. var pars []interface{}
  271. condition += ` AND order_status IN (3,4,5,6) `
  272. if orderType > 0 { //订单类型 1:畅读卡订单,2:单场付费订单
  273. condition += ` AND order_type = ? `
  274. pars = append(pars, orderType)
  275. }
  276. if startDate != "" && endDate != "" { //时间范围
  277. condition += ` AND create_time BETWEEN ? AND ? `
  278. pars = append(pars, startDate, endDate)
  279. }
  280. if adminId != "" { //所属销售筛选
  281. condition += ` AND seller_id IN (` + adminId + `) `
  282. }
  283. if orderStatus > -1 { //订单状态
  284. condition += ` AND order_status = ? `
  285. pars = append(pars, orderStatus)
  286. }
  287. if orderCode != "" { //订单编号
  288. orderCode = "%" + orderCode + "%"
  289. condition += ` AND order_code LIKE ? `
  290. pars = append(pars, orderCode)
  291. }
  292. if paymentProject != "" { //付款项目
  293. condition += ` AND goods_name = ? `
  294. pars = append(pars, paymentProject)
  295. }
  296. if keyWord != "" { //用户姓名,手机号
  297. keyWord = "%" + keyWord + "%"
  298. condition += ` AND (mobile LIKE ? OR real_name LIKE ? ) `
  299. pars = append(pars, keyWord, keyWord)
  300. }
  301. total, err := cygx.GetCygxOrderCount(condition, pars)
  302. if err != nil {
  303. br.Msg = "获取失败"
  304. br.ErrMsg = "获取失败,Err:" + err.Error()
  305. return
  306. }
  307. condition += " ORDER BY order_id DESC "
  308. list, err := cygx.GetCygxOrderList(condition, pars, startSize, pageSize)
  309. if err != nil {
  310. br.Msg = "获取失败"
  311. br.ErrMsg = "获取失败,Err:" + err.Error()
  312. return
  313. }
  314. for _, v := range list {
  315. item := new(cygx.OrderListResp)
  316. item.OrderCode = v.OrderCode
  317. item.OrderMoney = v.OrderMoney
  318. item.SourceId = v.SourceId
  319. item.Source = v.Source
  320. item.SourceTitle = v.SourceTitle
  321. switch v.Source {
  322. case "article": //文章详情
  323. item.HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.SourceId)
  324. case "activity": //活动详情
  325. item.HttpUrl = utils.CYGX_WEB_URL + "/activity/detail/" + strconv.Itoa(v.SourceId)
  326. }
  327. //OrderStatus int `comment:"订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭"`
  328. item.OrderStatus = v.OrderStatus
  329. switch item.OrderStatus {
  330. case 3:
  331. item.OrderStatusText = "退款成功"
  332. case 4:
  333. item.OrderStatusText = "退款处理中"
  334. case 5:
  335. item.OrderStatusText = "退款异常"
  336. case 6:
  337. item.OrderStatusText = "退款关闭"
  338. }
  339. item.UserId = v.UserId
  340. item.RealName = v.RealName
  341. item.Mobile = v.Mobile
  342. item.Email = v.Email
  343. item.CompanyId = v.CompanyId
  344. item.CompanyName = v.CompanyName
  345. item.SellerName = v.SellerName
  346. item.InviteName = "推荐人"
  347. item.PaymentProject = v.GoodsName
  348. item.RefundTime = v.RefundTime.Format(utils.FormatDateTime)
  349. item.RefundRemark = v.RefundRemark
  350. if v.OrderStatus == 2 {
  351. item.PayTime = v.PayTime.Format(utils.FormatDateTime)
  352. }
  353. if orderType == 1 {
  354. item.StartDate = time.Now().Format(utils.FormatDateTime)
  355. item.EndDate = time.Now().AddDate(0, 0, 3).Format(utils.FormatDateTime)
  356. }
  357. item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  358. resp.List = append(resp.List, item)
  359. }
  360. page := paging.GetPaging(currentIndex, pageSize, total)
  361. resp.Paging = page
  362. br.Ret = 200
  363. br.Success = true
  364. br.Msg = "获取成功"
  365. br.Data = resp
  366. }
  367. // @Title 退款撤销
  368. // @Description 退款撤销接口
  369. // @Param request body cygx.UserRemarAddReq true "type json string"
  370. // @Success 200 操作成功
  371. // @router /order/refund_revoke [post]
  372. func (this *UserController) OrderRefundRevoke() {
  373. br := new(models.BaseResponse).Init()
  374. defer func() {
  375. this.Data["json"] = br
  376. this.ServeJSON()
  377. }()
  378. sysUser := this.SysUser
  379. if sysUser == nil {
  380. br.Msg = "请登录"
  381. br.ErrMsg = "请登录,SysUser Is Empty"
  382. br.Ret = 408
  383. return
  384. }
  385. var req cygx.CygxOrderRefundReq
  386. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  387. if err != nil {
  388. br.Msg = "参数解析异常!"
  389. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  390. return
  391. }
  392. orderCode := req.OrderCode
  393. orderDetail, err := cygx.GetCygxOrderDetailByOrderCode(orderCode)
  394. if err != nil {
  395. br.Msg = "获取失败"
  396. br.ErrMsg = "获取失败, Err:" + err.Error()
  397. return
  398. }
  399. if orderDetail.OrderStatus != 4 {
  400. br.Msg = "订单状态异常!"
  401. br.ErrMsg = "订单状态异常,orderCode:" + orderCode
  402. return
  403. }
  404. item := new(cygx.CygxOrderAction)
  405. item.Action = "关闭退款"
  406. item.OrderStatus = 6
  407. item.OrderStatusText = "关闭退款"
  408. item.OrderCode = orderDetail.OrderCode
  409. item.UserId = orderDetail.UserId
  410. item.RealName = orderDetail.RealName
  411. item.Mobile = orderDetail.Mobile
  412. item.Email = orderDetail.Email
  413. item.CompanyId = orderDetail.CompanyId
  414. item.CompanyName = orderDetail.CompanyName
  415. item.SellerName = orderDetail.SellerName
  416. item.CreateTime = time.Now()
  417. item.ModifyTime = time.Now()
  418. item.AdminId = sysUser.AdminId
  419. item.AdminName = sysUser.RealName
  420. err = cygx.AddCygxOrderRefundRevoke(item)
  421. if err != nil {
  422. br.Msg = "新增失败."
  423. br.ErrMsg = "新增失败,Err:" + err.Error()
  424. return
  425. }
  426. br.Ret = 200
  427. br.Success = true
  428. br.Msg = "操作成功"
  429. }