package com.ruoyi.account.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.account.pojo.FinanceReconciliationTask; import com.ruoyi.account.pojo.FinanceReconciliationExternal; import com.ruoyi.account.pojo.FinanceReconciliationDiff; import com.ruoyi.account.service.FinanceReconciliationService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.Date; import java.util.List; /** * 财务管理--财务对账(任务/差异/内部自动对账) */ @RestController @RequestMapping("/finance/reconciliation") @Api(tags = "财务管理--财务对账") public class FinanceReconciliationController { @Resource private FinanceReconciliationService financeReconciliationService; /** * 对账任务分页 */ @GetMapping("/task/page") @ApiOperation("对账任务分页") public AjaxResult taskPage(Page page, FinanceReconciliationTask query) { return AjaxResult.success(financeReconciliationService.pageTask(page, query)); } /** * 对账任务详情 */ @GetMapping("/task/{id}") @ApiOperation("对账任务详情") public AjaxResult taskDetail(@PathVariable("id") Long id) { return AjaxResult.success(financeReconciliationService.getTask(id)); } /** * 差异明细 */ @GetMapping("/task/{id}/diff") @ApiOperation("对账差异明细") public AjaxResult taskDiff(@PathVariable("id") Long id) { return AjaxResult.success(financeReconciliationService.listDiff(id)); } /** * 发起内部对账(收支记录 vs 资金流水 自动比对) */ @PostMapping("/task/internal") @ApiOperation("发起内部对账") public AjaxResult internal(@RequestBody InternalReconReq req) { return AjaxResult.success( financeReconciliationService.generateInternal(req.getPeriodStart(), req.getPeriodEnd(), req.getAccountId())); } /** 发起内部/外部对账;外部对账时同时提交手工录入的 externalList */ @PostMapping("/task") @ApiOperation("发起对账") public AjaxResult createTask(@RequestBody TaskReq req) { FinanceReconciliationTask task = new FinanceReconciliationTask(); task.setReconType(req.getReconType()); task.setPeriodStart(req.getPeriodStart()); task.setPeriodEnd(req.getPeriodEnd()); task.setAccountId(req.getAccountId()); task.setTarget(req.getTarget()); return AjaxResult.success(financeReconciliationService.generateExternal(task, req.getExternalList())); } @GetMapping("/task/{id}/external") @ApiOperation("外部凭证列表") public AjaxResult external(@PathVariable("id") Long id) { return AjaxResult.success(financeReconciliationService.listExternal(id)); } /** * 填写处理方案/归档 */ @PutMapping("/task/{id}/handle") @ApiOperation("填写处理方案/归档") public AjaxResult handle(@PathVariable("id") Long id, @RequestBody HandleReq req) { return AjaxResult.success(financeReconciliationService.updateHandle(id, req.getHandleNote(), req.getStatus())); } @PutMapping("/task/{id}/archive") @ApiOperation("归档对账任务") public AjaxResult archive(@PathVariable("id") Long id) { return AjaxResult.success(financeReconciliationService.updateHandle(id, null, "2")); } @PostMapping("/export") @ApiOperation("导出差异报告") public void export(HttpServletResponse response, @RequestBody ExportReq req) { List rows = financeReconciliationService.listDiff(req.getTaskId()); new ExcelUtil(FinanceReconciliationDiff.class) .exportExcel(response, rows, "财务对账差异报告"); } @Data public static class InternalReconReq { @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date periodStart; @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date periodEnd; private Long accountId; } @Data public static class HandleReq { private String handleNote; private String status; } @Data public static class TaskReq extends InternalReconReq { private String reconType; private String target; private List externalList; } @Data public static class ExportReq { private Long taskId; } }