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<FinanceReconciliationDiff> rows = financeReconciliationService.listDiff(req.getTaskId());
|
new ExcelUtil<FinanceReconciliationDiff>(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<FinanceReconciliationExternal> externalList;
|
}
|
|
@Data
|
public static class ExportReq {
|
private Long taskId;
|
}
|
}
|