order.go 15 KB

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