BackendRefundController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.fuint.module.backendApi.controller;
  2. import com.fuint.common.Constants;
  3. import com.fuint.common.dto.*;
  4. import com.fuint.common.enums.RefundStatusEnum;
  5. import com.fuint.common.enums.RefundTypeEnum;
  6. import com.fuint.common.service.AccountService;
  7. import com.fuint.common.service.MemberService;
  8. import com.fuint.common.service.OrderService;
  9. import com.fuint.common.service.RefundService;
  10. import com.fuint.common.util.TokenUtil;
  11. import com.fuint.framework.exception.BusinessCheckException;
  12. import com.fuint.framework.pagination.PaginationRequest;
  13. import com.fuint.framework.pagination.PaginationResponse;
  14. import com.fuint.framework.web.BaseController;
  15. import com.fuint.framework.web.ResponseObject;
  16. import com.fuint.repository.model.MtUser;
  17. import com.fuint.repository.model.TAccount;
  18. import com.fuint.utils.StringUtil;
  19. import io.swagger.annotations.Api;
  20. import io.swagger.annotations.ApiOperation;
  21. import lombok.AllArgsConstructor;
  22. import org.springframework.security.access.prepost.PreAuthorize;
  23. import org.springframework.web.bind.annotation.*;
  24. import javax.servlet.http.HttpServletRequest;
  25. import java.util.ArrayList;
  26. import java.util.HashMap;
  27. import java.util.List;
  28. import java.util.Map;
  29. /**
  30. * 售后管理controller
  31. *
  32. * Created by FSQ
  33. * CopyRight https://www.fuint.cn
  34. */
  35. @Api(tags="管理端-售后订单相关接口")
  36. @RestController
  37. @AllArgsConstructor
  38. @RequestMapping(value = "/backendApi/refund")
  39. public class BackendRefundController extends BaseController {
  40. /**
  41. * 售后服务接口
  42. * */
  43. private RefundService refundService;
  44. /**
  45. * 订单服务接口
  46. * */
  47. private OrderService orderService;
  48. /**
  49. * 后台账户服务接口
  50. */
  51. private AccountService accountService;
  52. /**
  53. * 会员接口服务
  54. * */
  55. private MemberService memberService;
  56. /**
  57. * 退款列表查询
  58. *
  59. * @param request HttpServletRequest对象
  60. * @return
  61. */
  62. @ApiOperation(value = "退款列表查询")
  63. @RequestMapping(value = "/list", method = RequestMethod.GET)
  64. @CrossOrigin
  65. @PreAuthorize("@pms.hasPermission('refund:index')")
  66. public ResponseObject list(HttpServletRequest request) throws BusinessCheckException {
  67. String token = request.getHeader("Access-Token");
  68. String orderSn = request.getParameter("orderSn");
  69. String mobile = request.getParameter("mobile");
  70. String userId = request.getParameter("userId");
  71. String status = request.getParameter("status");
  72. Integer page = request.getParameter("page") == null ? Constants.PAGE_NUMBER : Integer.parseInt(request.getParameter("page"));
  73. Integer pageSize = request.getParameter("pageSize") == null ? Constants.PAGE_SIZE : Integer.parseInt(request.getParameter("pageSize"));
  74. String startTime = request.getParameter("startTime") == null ? "" : request.getParameter("startTime");
  75. String endTime = request.getParameter("endTime") == null ? "" : request.getParameter("endTime");
  76. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  77. if (accountInfo == null) {
  78. return getFailureResult(1001, "请先登录");
  79. }
  80. TAccount account = accountService.getAccountInfoById(accountInfo.getId());
  81. Integer storeId = account.getStoreId() == null ? 0 : account.getStoreId();
  82. PaginationRequest paginationRequest = new PaginationRequest();
  83. paginationRequest.setCurrentPage(page);
  84. paginationRequest.setPageSize(pageSize);
  85. Map<String, Object> params = new HashMap<>();
  86. if (account.getMerchantId() != null && account.getMerchantId() > 0) {
  87. params.put("merchantId", account.getMerchantId());
  88. }
  89. if (StringUtil.isNotEmpty(status)) {
  90. params.put("status", status);
  91. }
  92. if (StringUtil.isNotEmpty(orderSn)) {
  93. UserOrderDto orderInfo = orderService.getOrderByOrderSn(orderSn);
  94. if (orderInfo != null) {
  95. params.put("orderId", orderInfo.getId().toString());
  96. } else {
  97. params.put("orderId", "0");
  98. }
  99. }
  100. if (StringUtil.isNotEmpty(mobile)) {
  101. MtUser userInfo = memberService.queryMemberByMobile(account.getMerchantId(), mobile);
  102. if (userInfo != null) {
  103. userId = userInfo.getId().toString();
  104. } else {
  105. userId = "0";
  106. }
  107. }
  108. if (StringUtil.isNotEmpty(userId)) {
  109. params.put("userId", userId);
  110. }
  111. if (storeId != null && storeId > 0) {
  112. params.put("storeId", storeId);
  113. }
  114. if (StringUtil.isNotEmpty(startTime)) {
  115. params.put("startTime", startTime);
  116. }
  117. if (StringUtil.isNotEmpty(endTime)) {
  118. params.put("endTime", endTime);
  119. }
  120. paginationRequest.setSearchParams(params);
  121. PaginationResponse<RefundDto> paginationResponse = refundService.getRefundListByPagination(paginationRequest);
  122. // 售后状态列表
  123. RefundStatusEnum[] statusListEnum = RefundStatusEnum.values();
  124. List<ParamDto> statusList = new ArrayList<>();
  125. for (RefundStatusEnum enumItem : statusListEnum) {
  126. ParamDto paramDto = new ParamDto();
  127. paramDto.setKey(enumItem.getKey());
  128. paramDto.setName(enumItem.getValue());
  129. paramDto.setValue(enumItem.getKey());
  130. statusList.add(paramDto);
  131. }
  132. // 售后类型列表
  133. RefundTypeEnum[] refundTypeEnums = RefundTypeEnum.values();
  134. List<ParamDto> refundTypeList = new ArrayList<>();
  135. for (RefundTypeEnum enumItem : refundTypeEnums) {
  136. ParamDto paramDto = new ParamDto();
  137. paramDto.setKey(enumItem.getKey());
  138. paramDto.setName(enumItem.getValue());
  139. paramDto.setValue(enumItem.getKey());
  140. refundTypeList.add(paramDto);
  141. }
  142. Map<String, Object> result = new HashMap<>();
  143. result.put("paginationResponse", paginationResponse);
  144. result.put("statusList", statusList);
  145. result.put("refundTypeList", refundTypeList);
  146. return getSuccessResult(result);
  147. }
  148. /**
  149. * 查询退款详情
  150. * @param request HttpServletRequest对象
  151. * @return
  152. * */
  153. @ApiOperation(value = "查询退款详情")
  154. @RequestMapping(value = "/info/{refundId}", method = RequestMethod.GET)
  155. @CrossOrigin
  156. @PreAuthorize("@pms.hasPermission('refund:index')")
  157. public ResponseObject info(HttpServletRequest request, @PathVariable("refundId") Integer refundId) throws BusinessCheckException {
  158. String token = request.getHeader("Access-Token");
  159. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  160. if (accountInfo == null) {
  161. return getFailureResult(1001, "请先登录");
  162. }
  163. RefundDto refundInfo = refundService.getRefundById(refundId);
  164. UserOrderDto orderInfo = null;
  165. if (refundInfo != null) {
  166. orderInfo = orderService.getOrderById(refundInfo.getOrderId());
  167. }
  168. Map<String, Object> result = new HashMap<>();
  169. result.put("refundInfo", refundInfo);
  170. result.put("orderInfo", orderInfo);
  171. return getSuccessResult(result);
  172. }
  173. /**
  174. * 保存售后订单
  175. * @return
  176. */
  177. @ApiOperation(value = "保存售后订单")
  178. @RequestMapping(value = "save", method = RequestMethod.POST)
  179. @CrossOrigin
  180. @PreAuthorize("@pms.hasPermission('refund:edit')")
  181. public ResponseObject save(HttpServletRequest request, @RequestBody Map<String, Object> param) throws BusinessCheckException {
  182. String token = request.getHeader("Access-Token");
  183. Integer refundId = param.get("refundId") == null ? 0 : Integer.parseInt(param.get("refundId").toString());
  184. String status = param.get("status") == null ? "" : param.get("status").toString();
  185. String remark = param.get("remark") == null ? "" : param.get("remark").toString();
  186. String rejectReason = param.get("rejectReason") == null ? "" : param.get("rejectReason").toString();
  187. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  188. if (accountInfo == null) {
  189. return getFailureResult(1001, "请先登录");
  190. }
  191. String operator = accountInfo.getAccountName();
  192. if (status.equals(RefundStatusEnum.REJECT.getKey())) {
  193. RefundDto dto = new RefundDto();
  194. dto.setId(refundId);
  195. dto.setOperator(operator);
  196. dto.setStatus(RefundStatusEnum.REJECT.getKey());
  197. dto.setRemark(remark);
  198. dto.setRejectReason(rejectReason);
  199. refundService.updateRefund(dto);
  200. } else {
  201. RefundDto dto = new RefundDto();
  202. dto.setId(refundId);
  203. dto.setOperator(operator);
  204. dto.setStatus(RefundStatusEnum.APPROVED.getKey());
  205. dto.setRemark(remark);
  206. refundService.agreeRefund(dto);
  207. }
  208. return getSuccessResult(true);
  209. }
  210. /**
  211. * 发起退款
  212. * @return
  213. */
  214. @ApiOperation(value = "发起退款")
  215. @RequestMapping(value = "doRefund", method = RequestMethod.POST)
  216. @CrossOrigin
  217. @PreAuthorize("@pms.hasPermission('refund:edit')")
  218. public ResponseObject doRefund(HttpServletRequest request, @RequestBody Map<String, Object> param) {
  219. String token = request.getHeader("Access-Token");
  220. Integer orderId = param.get("orderId") == null ? 0 : Integer.parseInt(param.get("orderId").toString());
  221. String remark = param.get("remark") == null ? "" : param.get("remark").toString();
  222. String refundAmount = param.get("refundAmount") == null ? "" : param.get("refundAmount").toString();
  223. AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
  224. if (accountInfo == null) {
  225. return getFailureResult(1001, "请先登录");
  226. }
  227. if (orderId <= 0 || StringUtil.isEmpty(refundAmount)) {
  228. return getFailureResult(201, "参数有误,发起退款失败");
  229. }
  230. try {
  231. Boolean result = refundService.doRefund(orderId, refundAmount, remark, accountInfo);
  232. if (result) {
  233. return getSuccessResult(true);
  234. } else {
  235. return getFailureResult(201, "退款失败");
  236. }
  237. } catch (BusinessCheckException e) {
  238. return getFailureResult(201, e.getMessage() == null ? "退款失败" : e.getMessage());
  239. }
  240. }
  241. }