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.

117 lines
4.2 KiB

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<String, Object> submitRefundApproval(@RequestBody RefundApprovalRequest request) {
boolean success = refundApprovalService.submitRefundApproval(
request.getUser(),
request.getCashRecord(),
request.getApprovalResult(),
request.getComments()
);
Map<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> checkPermission(@RequestBody RefundApprovalRequest request) {
boolean hasPermission = refundApprovalService.canUserApproveOrder(request.getUser(), request.getCashRecord());
boolean canWithdraw = refundApprovalService.canUserWithdrawOrder(request.getUser(), request.getCashRecord());
List<Integer> 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<Integer> 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;
// }
}