You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
4.2 KiB

  1. package com.example.demo.controller.cash;
  2. import com.example.demo.domain.DTO.RefundApprovalRequest;
  3. import com.example.demo.domain.vo.cash.CashRecord;
  4. import com.example.demo.domain.vo.cash.User;
  5. import com.example.demo.service.cash.RefundApprovalService;
  6. import lombok.RequiredArgsConstructor;
  7. import org.springframework.web.bind.annotation.*;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. @RestController
  13. @RequestMapping("/api/refund-approval")
  14. @RequiredArgsConstructor
  15. public class RefundApprovalController {
  16. private final RefundApprovalService refundApprovalService;
  17. /**
  18. * 提交退款审批
  19. */
  20. @PostMapping("/submit")
  21. public Map<String, Object> submitRefundApproval(@RequestBody RefundApprovalRequest request) {
  22. boolean success = refundApprovalService.submitRefundApproval(
  23. request.getUser(),
  24. request.getCashRecord(),
  25. request.getApprovalResult(),
  26. request.getComments()
  27. );
  28. Map<String, Object> response = new HashMap<>();
  29. response.put("success", success);
  30. response.put("message", success ? "退款审批提交成功" : "退款审批提交失败,无权限");
  31. response.put("orderStatus", request.getCashRecord().getStatus());
  32. response.put("currentLevel", request.getCashRecord().getCurrentApprovalLevel());
  33. return response;
  34. }
  35. /**
  36. * 撤回退款订单在第一个审批节点前
  37. */
  38. @PostMapping("/withdraw")
  39. public Map<String, Object> withdrawRefundOrder(@RequestBody RefundApprovalRequest request) {
  40. boolean success = refundApprovalService.withdrawRefundOrder(request.getUser(),request.getCashRecord(), request.getWithdrawReason());
  41. return Map.of(
  42. "success", success,
  43. "message", success ? "退款订单撤回成功" : "退款订单撤回失败",
  44. "orderStatus", request.getCashRecord().getStatus()
  45. );
  46. }
  47. /**
  48. * 重新提交撤回的退款订单
  49. */
  50. @PostMapping("/resubmit")
  51. public Map<String, Object> resubmitRefundOrder(@RequestBody RefundApprovalRequest request) {
  52. boolean success = refundApprovalService.resubmitRefundOrder(request.getUser(), request.getCashRecord());
  53. return Map.of(
  54. "success", success,
  55. "message", success ? "退款订单重新提交成功" : "退款订单重新提交失败",
  56. "orderStatus", request.getCashRecord().getStatus()
  57. );
  58. }
  59. /**
  60. * 检查退款审批权限
  61. */
  62. @GetMapping("/check-permission")
  63. public Map<String, Object> checkPermission(@RequestBody RefundApprovalRequest request) {
  64. boolean hasPermission = refundApprovalService.canUserApproveOrder(request.getUser(), request.getCashRecord());
  65. boolean canWithdraw = refundApprovalService.canUserWithdrawOrder(request.getUser(), request.getCashRecord());
  66. List<Integer> visibleStatuses = refundApprovalService.getUserVisibleStatuses(request.getUser(), request.getCashRecord());
  67. return Map.of(
  68. "hasApprovalPermission", hasPermission,
  69. "canWithdraw", canWithdraw,
  70. "visibleStatuses", visibleStatuses,
  71. "currentLevel", request.getCashRecord().getCurrentApprovalLevel(),
  72. "orderStatus", request.getCashRecord().getStatus()
  73. );
  74. }
  75. /**
  76. * 获取用户可见的退款审批状态
  77. */
  78. @GetMapping("/visible-statuses")
  79. public List<Integer> getVisibleStatuses(@RequestBody RefundApprovalRequest request) {
  80. return refundApprovalService.getUserVisibleStatuses(request.getUser(), request.getCashRecord());
  81. }
  82. // // 创建模拟用户(实际项目中应从数据库获取)
  83. // private User createMockUser(Integer userId) {
  84. // User user = new User();
  85. // user.setId(userId);
  86. // user.setName("测试用户");
  87. // user.setMarket("北京");
  88. // user.setMarketId(4); // 假设4是北京的地区ID
  89. // user.setRoles(Set.of(RefundApprovalService.ROLE_REGIONAL_FINANCE));
  90. // user.setManagedMarketIds(Set.of(4)); // 管辖北京地区
  91. // user.setManagedMarketNames(Set.of("北京"));
  92. // return user;
  93. // }
  94. }