liding
5 天以前 db628292cb9b69b901b44b146ac88c5f68e38389
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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;
    }
}