AfterSalesController.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /*
  2. * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions are met:
  6. *
  7. * Redistributions of source code must retain the above copyright notice,
  8. * this list of conditions and the following disclaimer.
  9. * Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * Neither the name of the dreamlu.net developer nor the names of its
  13. * contributors may be used to endorse or promote products derived from
  14. * this software without specific prior written permission.
  15. * Author: Chill 庄骞 (smallchill@163.com)
  16. */
  17. package org.springblade.modules.finance.controller;
  18. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  19. import com.baomidou.mybatisplus.core.metadata.IPage;
  20. import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
  21. import io.swagger.annotations.Api;
  22. import io.swagger.annotations.ApiOperation;
  23. import io.swagger.annotations.ApiParam;
  24. import org.springblade.common.enums.AfterSalesStatusEnum;
  25. import org.springblade.common.enums.AfterSalesTypeEnum;
  26. import org.springblade.common.enums.YesOrNoEnum;
  27. import org.springblade.core.boot.ctrl.BladeController;
  28. import org.springblade.core.log.exception.ServiceException;
  29. import org.springblade.core.mp.support.Condition;
  30. import org.springblade.core.mp.support.Query;
  31. import org.springblade.core.tool.api.R;
  32. import org.springblade.core.tool.utils.Func;
  33. import org.springblade.modules.finance.entity.AfterSales;
  34. import org.springblade.modules.finance.entity.Order;
  35. import org.springblade.modules.finance.entity.OrderGoods;
  36. import org.springblade.modules.finance.service.*;
  37. import org.springblade.modules.finance.vo.AfterSalesVO;
  38. import org.springblade.modules.finance.wrapper.AfterSalesWrapper;
  39. import org.springblade.modules.mall.service.IStoreService;
  40. import org.springframework.util.Assert;
  41. import org.springframework.web.bind.annotation.*;
  42. import javax.annotation.Resource;
  43. import javax.validation.Valid;
  44. /**
  45. * 售后表 控制器
  46. *
  47. * @author BladeX
  48. * @since 2023-06-15
  49. */
  50. @RestController
  51. @RequestMapping("finance/aftersales")
  52. @Api(value = "售后表", tags = "售后表接口")
  53. public class AfterSalesController extends BladeController {
  54. @Resource
  55. private IAfterSalesService afterSalesService;
  56. @Resource
  57. private IOrderService orderService;
  58. @Resource
  59. private IStoreService storeService;
  60. @Resource
  61. private IOrderGrouponGoodsService orderGrouponGoodsService;
  62. @Resource
  63. private IOrderRefundService orderRefundService;
  64. /**
  65. * 详情
  66. */
  67. @GetMapping("/detail")
  68. @ApiOperationSupport(order = 1)
  69. @ApiOperation(value = "详情", notes = "传入afterSales")
  70. public R<AfterSalesVO> detail(AfterSales afterSales) {
  71. AfterSalesVO vo = afterSalesService.getUserAfterSalesDetail(afterSales.getId());
  72. return R.data(vo);
  73. }
  74. /**
  75. * 分页 售后表
  76. */
  77. @GetMapping("/list")
  78. @ApiOperationSupport(order = 2)
  79. @ApiOperation(value = "分页", notes = "传入afterSales")
  80. public R<IPage<AfterSalesVO>> list(AfterSales afterSales, Query query) {
  81. QueryWrapper<AfterSales> queryWrapper = Condition.getQueryWrapper(afterSales);
  82. queryWrapper.orderByDesc("create_time");
  83. IPage<AfterSales> pages = afterSalesService.page(Condition.getPage(query), queryWrapper);
  84. return R.data(AfterSalesWrapper.build().pageVO(pages));
  85. }
  86. /**
  87. * 供应商分页 售后表
  88. */
  89. @GetMapping("/storeList")
  90. @ApiOperationSupport(order = 2)
  91. @ApiOperation(value = "分页", notes = "传入afterSales")
  92. public R<IPage<AfterSalesVO>> storeList(AfterSales afterSales, Query query) {
  93. afterSales.setStoreId(storeService.getByUserId().getId());
  94. // afterSales.setStatus(AfterSalesStatusEnum.PROCESSED.getValue());
  95. IPage<AfterSales> pages = afterSalesService.page(Condition.getPage(query), Condition.getQueryWrapper(afterSales));
  96. return R.data(AfterSalesWrapper.build().pageVO(pages));
  97. }
  98. /**
  99. * 自定义分页 售后表
  100. */
  101. @GetMapping("/page")
  102. @ApiOperationSupport(order = 3)
  103. @ApiOperation(value = "分页", notes = "传入afterSales")
  104. public R<IPage<AfterSalesVO>> page(AfterSalesVO afterSales, Query query) {
  105. IPage<AfterSalesVO> pages = afterSalesService.selectAfterSalesPage(Condition.getPage(query), afterSales);
  106. return R.data(pages);
  107. }
  108. /**
  109. * 新增 售后表
  110. */
  111. @PostMapping("/save")
  112. @ApiOperationSupport(order = 4)
  113. @ApiOperation(value = "新增", notes = "传入afterSales")
  114. public R save(@Valid @RequestBody AfterSales afterSales) {
  115. return R.status(afterSalesService.save(afterSales));
  116. }
  117. /**
  118. * 修改 售后表
  119. */
  120. @PostMapping("/update")
  121. @ApiOperationSupport(order = 5)
  122. @ApiOperation(value = "修改", notes = "传入afterSales")
  123. public R update(@Valid @RequestBody AfterSales afterSales) {
  124. return R.status(afterSalesService.updateById(afterSales));
  125. }
  126. /**
  127. * 新增或修改 售后表
  128. */
  129. @PostMapping("/submit")
  130. @ApiOperationSupport(order = 6)
  131. @ApiOperation(value = "新增或修改", notes = "传入afterSales")
  132. public R submit(@Valid @RequestBody AfterSales afterSales) {
  133. return R.status(afterSalesService.saveOrUpdate(afterSales));
  134. }
  135. /**
  136. * 删除 售后表
  137. */
  138. @PostMapping("/remove")
  139. @ApiOperationSupport(order = 7)
  140. @ApiOperation(value = "逻辑删除", notes = "传入ids")
  141. public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
  142. return R.status(afterSalesService.removeByIds(Func.toLongList(ids)));
  143. }
  144. @PostMapping("/confirm")
  145. @ApiOperationSupport(order = 9)
  146. @ApiOperation(value = "确认收货")
  147. public R confirm(@RequestParam Long orderId, @RequestParam Long afterSalesId) {
  148. afterSalesService.confirm(orderId, afterSalesId);
  149. return R.success("操作成功");
  150. }
  151. @PostMapping("/refund")
  152. @ApiOperationSupport(order = 8)
  153. @ApiOperation(value = "退款")
  154. public R refund(@RequestParam Long orderId, @RequestParam Long afterSalesId) {
  155. AfterSales afterSales = afterSalesService.getById(afterSalesId);
  156. Assert.notNull(afterSales, "售后数据不存在");
  157. if (!AfterSalesTypeEnum.REFUND.getValue().equals(afterSales.getType())) {
  158. return R.fail("当前订单不支持后台退款");
  159. }
  160. if (YesOrNoEnum.YES.getValue().equals(afterSales.getRefundState())) {
  161. throw new ServiceException("该售后订单已退款");
  162. }
  163. Order order = orderService.getById(orderId);
  164. Assert.notNull(order, "订单数据不存在");
  165. orderService.commonRefund(order, afterSalesId);
  166. return R.success("操作成功");
  167. }
  168. @PostMapping("/refundApply")
  169. @ApiOperationSupport(order = 8)
  170. @ApiOperation(value = "退款审核")
  171. public R refundApply(@RequestParam Long afterSalesId, @RequestParam Integer auditStatus, @RequestParam String remark) {
  172. AfterSales afterSales = afterSalesService.getById(afterSalesId);
  173. Assert.notNull(afterSales, "售后数据不存在");
  174. Order order = orderService.getById(afterSales.getOrderId());
  175. Assert.notNull(order, "订单数据不存在");
  176. if (YesOrNoEnum.YES.getValue().equals(afterSales.getRefundState())) {
  177. throw new ServiceException("该售后订单已退款");
  178. }
  179. // 通过
  180. if (auditStatus == 1) {
  181. orderService.commonRefund(order, afterSalesId);
  182. } else if (auditStatus == 2) {// 驳回
  183. afterSales.setStatus(AfterSalesStatusEnum.REFUSE.getValue());
  184. afterSales.setRefuseReason(remark);
  185. afterSalesService.updateById(afterSales);
  186. } else {
  187. return R.fail("参数错误");
  188. }
  189. return R.success("操作成功");
  190. }
  191. @Resource
  192. private IWxPayService wxPayService;
  193. @GetMapping("test")
  194. public R test(@RequestParam("openId") String openId) {
  195. wxPayService.profitSharingAddReceiver(openId);
  196. return R.success("ok");
  197. }
  198. }