InputInvoiceImportController.java 11.8 KB
Newer Older
1 2
package pwc.taxtech.atms.controller;

3
import com.github.pagehelper.PageInfo;
sherlock's avatar
sherlock committed
4 5
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
neo's avatar
neo committed
6 7
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
8 9
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
10
import org.springframework.http.ResponseEntity;
11
import org.springframework.web.bind.annotation.*;
sherlock's avatar
sherlock committed
12
import pwc.taxtech.atms.constant.enums.KeyValueConfigResultType;
sherlock's avatar
sherlock committed
13
import pwc.taxtech.atms.dto.vatdto.*;
14
import pwc.taxtech.atms.service.impl.IdentityServiceImpl;
15 16
import pwc.taxtech.atms.thirdparty.ExcelSheet;
import pwc.taxtech.atms.thirdparty.ExcelUtil;
17
import pwc.taxtech.atms.vat.dpo.InputInvoicePreviewQueryParam;
18
import pwc.taxtech.atms.vat.entity.InputInvoice;
19
import pwc.taxtech.atms.vat.entity.InputInvoiceDetail;
20
import pwc.taxtech.atms.vat.service.impl.InputInvoiceDataImportServiceImpl;
sherlock's avatar
sherlock committed
21
import pwc.taxtech.atms.vat.service.impl.report.functions.FormulaHelper;
22

23 24 25
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
sherlock's avatar
sherlock committed
26
import java.math.BigDecimal;
27
import java.util.*;
28

29 30 31
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
import static javax.servlet.http.HttpServletResponse.SC_OK;

32 33 34 35
@RestController
@RequestMapping(value = "api/v1/inputInvoiceImport")
public class InputInvoiceImportController {
    @Autowired
36
    InputInvoiceDataImportServiceImpl inputInvoiceDataImportService;
37
    @Autowired
38
    private IdentityServiceImpl identityService;
neo's avatar
neo committed
39
    private Logger logger = LoggerFactory.getLogger(InputInvoiceImportController.class);
40

sherlock's avatar
sherlock committed
41 42 43
    @RequestMapping(value = "inputInvoicePreviewAllList", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    List<InputInvoice> getInputInvoiceTree(@RequestBody InputInvoicePreviewQueryParam paras,
sherlock's avatar
sherlock committed
44 45 46 47 48 49 50 51 52 53 54 55 56
                                           @RequestHeader("from") String projectId) {
        double hjje = 0;
        double hjse = 0;
        for(InputInvoice inputInvoice : inputInvoiceDataImportService.getInputInvoice(paras, projectId)){
            hjje += FormulaHelper.roundValue(new BigDecimal(inputInvoice.getHJJE()), KeyValueConfigResultType.Accounting, true, null).doubleValue();
            hjse += FormulaHelper.roundValue(new BigDecimal(inputInvoice.getHJSE()), KeyValueConfigResultType.Accounting, true, null).doubleValue();
        }
        InputInvoice i = new InputInvoice();
        i.setHJJE(hjje + "");
        i.setHJSE(hjse + "");
        List<InputInvoice> list = Lists.newArrayList();
        list.add(i);
        return list;
sherlock's avatar
sherlock committed
57 58
    }

59
    @RequestMapping(value = "inputInvoicePreviewList", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
neo's avatar
neo committed
60
    public @ResponseBody
61 62 63
    PageInfo<InputInvoice> getInputInvoiceTreeViewData(@RequestBody InputInvoicePreviewQueryParam paras,
                                                       @RequestHeader("from") String projectId) {
        return inputInvoiceDataImportService.getInputInvoiceTreeViewData(paras, projectId);
64
    }
65 66

    @RequestMapping(value = "exportQueryData/get", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
67 68
    public void downloadInvoiceQueryData(@RequestBody InputInvoicePreviewQueryParam paras, HttpServletResponse response,
                                         @RequestHeader("from") String projectId) {
69
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
sherlock's avatar
sherlock committed
70 71 72
        response.addHeader("Access-Control-Expose-Headers", "Content-Type,Content-Disposition,x-file-name");
        response.setCharacterEncoding("UTF-8");
        String fileName = paras.getPeriodStart() + "-" + paras.getPeriodEnd();
73 74
        OutputStream os = null;
        try {
sherlock's avatar
sherlock committed
75 76
            response.addHeader("Content-Disposition", "attachment;filename="
                    + UUID.randomUUID() + ".xls");
sherlock's avatar
sherlock committed
77
            response.addHeader("x-file-name", fileName);
78
            os = response.getOutputStream();
79
            int count = getDownloadFilePath(paras, os, projectId);
80 81

            if (count == 0) {
82
                response.setStatus(SC_NO_CONTENT);
83
            } else {
84
                response.setStatus(SC_OK);
85 86 87 88 89 90 91
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

92
    @RequestMapping(value = "getInputInvoiceList/{period}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
neo's avatar
neo committed
93
    public ResponseEntity getInputInvoiceList(@PathVariable Integer period) {
94 95 96
        return ResponseEntity.ok().body(inputInvoiceDataImportService.getInputInvoiceList(period));
    }

neo's avatar
neo committed
97 98 99
    @RequestMapping(value = "getInputInvoiceItemList/{fpid}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity getInputInvoiceItemList(@PathVariable String fpid) {
        return ResponseEntity.ok().body(inputInvoiceDataImportService.getInputInvoiceItemList(fpid));
100 101
    }

sherlock's avatar
sherlock committed
102 103 104 105 106 107 108 109 110 111 112 113 114
    private String getFplx(String fplx){
        if(StringUtils.isBlank(fplx)) return "";
        switch (fplx){
            case "004":
                return "增值税专票";
            case "007":
                return "普票";
            case "026":
                return "电子发票";
            default:
                return fplx;
        }
    }
115
    private int getDownloadFilePath(InputInvoicePreviewQueryParam paras, OutputStream outputStream, String projectId) {
116
        List<InputInvoice> list = inputInvoiceDataImportService.getInputInvoiceTree(paras, projectId);
117
        if (list.size() == 0) {
118
            return 0;
119
        }
sherlock's avatar
sherlock committed
120 121 122
        List<InputInvoiceExportDto> inputInvoiceExportDtos = Lists.newArrayList();
        for(InputInvoice inputInvoice : list){
            InputInvoiceExportDto inputInvoiceExportDto = new InputInvoiceExportDto();
sherlock's avatar
sherlock committed
123
            inputInvoiceExportDto.setAmount(inputInvoice.getHJJE() != null ? new BigDecimal(inputInvoice.getHJJE().replace(",","")): BigDecimal.ZERO);
sherlock's avatar
sherlock committed
124 125 126 127 128
            inputInvoiceExportDto.setCertificationDate(inputInvoice.getRZSJ());
            inputInvoiceExportDto.setInvoiceCode(inputInvoice.getFPDM());
            inputInvoiceExportDto.setInvoiceDate(inputInvoice.getKPRQ());
            inputInvoiceExportDto.setInvoiceNumber(inputInvoice.getFPHM());
            inputInvoiceExportDto.setInvoiceTypeName(getFplx(inputInvoice.getFPLX()));
129
            inputInvoiceExportDto.setPeriodId(Integer.parseInt(inputInvoice.getRZSQ().substring(4, 6)));
sherlock's avatar
sherlock committed
130
            inputInvoiceExportDto.setSellerTaxNumber(inputInvoice.getXFSH());
131
            inputInvoiceExportDto.setTaxAmount(inputInvoice.getHJSE() != null ? new BigDecimal(inputInvoice.getHJSE().replace(",","")) : BigDecimal.ZERO);
sherlock's avatar
sherlock committed
132 133
            inputInvoiceExportDtos.add(inputInvoiceExportDto);
        }
sherlock's avatar
sherlock committed
134
        Map<String, String> header = new LinkedHashMap<>();
135
        header.put("PeriodId", "期间");
136 137 138 139 140 141 142 143 144
        header.put("InvoiceDate", "开票日期");
        header.put("InvoiceCode", "发票代码");
        header.put("InvoiceNumber", "发票号码");
        header.put("SellerTaxNumber", "供货方税号");
        header.put("InvoiceTypeName", "发票类型");
        header.put("Amount", "金额");
        header.put("TaxAmount", "税额");
        header.put("CertificationDate", "认证日期");

sherlock's avatar
sherlock committed
145 146 147 148 149 150
        InputInvoiceExportDto inputInvoiceExportDto = new InputInvoiceExportDto();
        inputInvoiceExportDto.setTaxAmount(inputInvoiceExportDtos.stream().map(InputInvoiceExportDto::getTaxAmount).reduce(BigDecimal::add).get());
        inputInvoiceExportDto.setAmount(inputInvoiceExportDtos.stream().map(InputInvoiceExportDto::getAmount).reduce(BigDecimal::add).get());
        InputInvoiceExportDto black = new InputInvoiceExportDto();
        inputInvoiceExportDtos.add(black);
        inputInvoiceExportDtos.add(inputInvoiceExportDto);
151 152
        ExcelSheet excelSheetA = new ExcelSheet<>();
        excelSheetA.setHeaders(header);
sherlock's avatar
sherlock committed
153
        excelSheetA.setDataset(inputInvoiceExportDtos);
154 155 156
        excelSheetA.setSheetName("sheetA");


sherlock's avatar
sherlock committed
157
        Map<String, String> header2 = new LinkedHashMap<>();
158
        header2.put("PeriodId", "期间");
159 160 161 162 163 164 165 166 167 168 169
        header2.put("InvoiceCode", "发票代码");
        header2.put("InvoiceNumber", "发票号码");
        header2.put("Amount", "金额");
        header2.put("TaxAmount", "税额");
        header2.put("TaxRate", "税率");
        header2.put("ProductionName", "货物名称");

        ExcelSheet excelSheetB = new ExcelSheet<>();
        excelSheetB.setHeaders(header2);
        excelSheetB.setSheetName("sheetB");

sherlock's avatar
sherlock committed
170
        List<InputInvoiceDetailExportDto> inputInvoiceItemList = new ArrayList<>();
171
        for (InputInvoice item : list) {
sherlock's avatar
sherlock committed
172 173 174
            List<InputInvoiceDetail> inputInvoiceDetailList = inputInvoiceDataImportService.getInputInvoiceItemList(item.getID());
            for(InputInvoiceDetail inputInvoiceDetail : inputInvoiceDetailList){
                InputInvoiceDetailExportDto inputInvoiceDetailExportDto = new InputInvoiceDetailExportDto();
sherlock's avatar
sherlock committed
175
                inputInvoiceDetailExportDto.setAmount(inputInvoiceDetail.getJE() != null ? new BigDecimal(inputInvoiceDetail.getJE().replace(",","")) : BigDecimal.ZERO);
sherlock's avatar
sherlock committed
176 177
                inputInvoiceDetailExportDto.setInvoiceCode(inputInvoiceDetail.getFPDM());
                inputInvoiceDetailExportDto.setInvoiceNumber(inputInvoiceDetail.getFPHM());
sherlock's avatar
sherlock committed
178
                inputInvoiceDetailExportDto.setPeriodId(Integer.parseInt(item.getRZSQ().substring(4, 6)));
sherlock's avatar
sherlock committed
179
                inputInvoiceDetailExportDto.setProductionName(inputInvoiceDetail.getSPMC());
sherlock's avatar
sherlock committed
180
                inputInvoiceDetailExportDto.setTaxAmount(inputInvoiceDetail.getSE() != null ? new BigDecimal(inputInvoiceDetail.getSE().replace(",","")) : BigDecimal.ZERO);
sherlock's avatar
sherlock committed
181 182 183
                inputInvoiceDetailExportDto.setTaxRate(inputInvoiceDetail.getSLV());
                inputInvoiceItemList.add(inputInvoiceDetailExportDto);
            }
184
        }
sherlock's avatar
sherlock committed
185 186 187 188 189 190 191 192 193 194

        InputInvoiceDetailExportDto inputInvoiceDetailExportDto = new InputInvoiceDetailExportDto();

        inputInvoiceDetailExportDto.setTaxAmount(inputInvoiceItemList.stream().map(InputInvoiceDetailExportDto::getTaxAmount).reduce(BigDecimal::add).get());
        inputInvoiceDetailExportDto.setAmount(inputInvoiceItemList.stream().map(InputInvoiceDetailExportDto::getAmount).reduce(BigDecimal::add).get());
        InputInvoiceDetailExportDto detailBlack = new InputInvoiceDetailExportDto();
        inputInvoiceItemList.add(detailBlack);
        inputInvoiceItemList.add(inputInvoiceDetailExportDto);


195 196 197 198 199 200 201 202
        excelSheetB.setDataset(inputInvoiceItemList);
        List<ExcelSheet<InputVATInvoiceBaseDto>> sheets = new ArrayList<>();
        sheets.add(excelSheetA);
        sheets.add(excelSheetB);

        ExcelUtil.exportExcel(sheets, outputStream);
        return list.size();
    }
203

204
    @RequestMapping(value = "importInputInvoice", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
205
    public ResponseEntity ImportInputInvoiceData(@RequestBody ImportInputInvoiceDto importParam) {
206
        return ResponseEntity.ok(inputInvoiceDataImportService.ImportInputInvoiceData(importParam.InputInvoiceList,
207
                importParam.ImportType, identityService.getIdentityUser().getId()));
208 209 210
    }

    @RequestMapping(value = "importInputInvoiceItem", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
211
    public ResponseEntity ImportInputInvoiceItemData(@RequestBody ImportInputInvoiceItemDto importParam) {
212
        return ResponseEntity.ok(inputInvoiceDataImportService.ImportInputInvoiceItemData(importParam.InputInvoiceItemList,
213
                importParam.ImportType, identityService.getIdentityUser().getId()));
214
    }
215

216 217
    @RequestMapping(value = "inputInvoiceItemPreviewList/{InputInvoiceId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity GetInputInvoiceItemTreeViewData(@PathVariable String InputInvoiceId) {
218
        return ResponseEntity.ok(inputInvoiceDataImportService.getInputInvoiceItemList(InputInvoiceId));
219
    }
220
}