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
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;
|
|
// }
|
|
}
|