package com.example.demo.controller.cash; import com.example.demo.domain.DTO.RefundApprovalRequest; import com.example.demo.domain.vo.cash.CashRecord; import com.example.demo.domain.vo.cash.User; import com.example.demo.service.cash.RefundApprovalService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/refund-approval") @RequiredArgsConstructor public class RefundApprovalController { private final RefundApprovalService refundApprovalService; /** * 提交退款审批 */ @PostMapping("/submit") public Map submitRefundApproval(@RequestBody RefundApprovalRequest request) { boolean success = refundApprovalService.submitRefundApproval( request.getUser(), request.getCashRecord(), request.getApprovalResult(), request.getComments() ); Map response = new HashMap<>(); response.put("success", success); response.put("message", success ? "退款审批提交成功" : "退款审批提交失败,无权限"); response.put("orderStatus", request.getCashRecord().getStatus()); response.put("currentLevel", request.getCashRecord().getCurrentApprovalLevel()); return response; } /** * 撤回退款订单(在第一个审批节点前) */ @PostMapping("/withdraw") public Map withdrawRefundOrder(@RequestBody RefundApprovalRequest request) { boolean success = refundApprovalService.withdrawRefundOrder(request.getUser(),request.getCashRecord(), request.getWithdrawReason()); return Map.of( "success", success, "message", success ? "退款订单撤回成功" : "退款订单撤回失败", "orderStatus", request.getCashRecord().getStatus() ); } /** * 重新提交撤回的退款订单 */ @PostMapping("/resubmit") public Map resubmitRefundOrder(@RequestBody RefundApprovalRequest request) { boolean success = refundApprovalService.resubmitRefundOrder(request.getUser(), request.getCashRecord()); return Map.of( "success", success, "message", success ? "退款订单重新提交成功" : "退款订单重新提交失败", "orderStatus", request.getCashRecord().getStatus() ); } /** * 检查退款审批权限 */ @GetMapping("/check-permission") public Map checkPermission(@RequestBody RefundApprovalRequest request) { boolean hasPermission = refundApprovalService.canUserApproveOrder(request.getUser(), request.getCashRecord()); boolean canWithdraw = refundApprovalService.canUserWithdrawOrder(request.getUser(), request.getCashRecord()); List visibleStatuses = refundApprovalService.getUserVisibleStatuses(request.getUser(), request.getCashRecord()); return Map.of( "hasApprovalPermission", hasPermission, "canWithdraw", canWithdraw, "visibleStatuses", visibleStatuses, "currentLevel", request.getCashRecord().getCurrentApprovalLevel(), "orderStatus", request.getCashRecord().getStatus() ); } /** * 获取用户可见的退款审批状态 */ @GetMapping("/visible-statuses") public List getVisibleStatuses(@RequestBody RefundApprovalRequest request) { return refundApprovalService.getUserVisibleStatuses(request.getUser(), request.getCashRecord()); } // // 创建模拟用户(实际项目中应从数据库获取) // private User createMockUser(Integer userId) { // User user = new User(); // user.setId(userId); // user.setName("测试用户"); // user.setMarket("北京"); // user.setMarketId(4); // 假设4是北京的地区ID // user.setRoles(Set.of(RefundApprovalService.ROLE_REGIONAL_FINANCE)); // user.setManagedMarketIds(Set.of(4)); // 管辖北京地区 // user.setManagedMarketNames(Set.of("北京")); // return user; // } }