DataInitController.java 5.14 KB
Newer Older
eddie.woo's avatar
eddie.woo committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
package pwc.taxtech.atms.controller;

import org.apache.commons.io.FileUtils;
import org.joda.time.DateTime;
import org.nutz.lang.Lang;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import pwc.taxtech.atms.common.CommonConstants;
import pwc.taxtech.atms.common.CommonUtils;
import pwc.taxtech.atms.common.message.ErrorMessage;
import pwc.taxtech.atms.dto.OperationResultDto;
import pwc.taxtech.atms.dto.datainit.DataInitDto;
import pwc.taxtech.atms.dto.datainit.DataInitMsgDto;
23 24
import pwc.taxtech.atms.exception.ApplicationException;
import pwc.taxtech.atms.service.impl.DataInitServiceImpl;
eddie.woo's avatar
eddie.woo committed
25 26
import pwc.taxtech.atms.service.impl.FileService;

27 28 29 30 31 32 33 34
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

eddie.woo's avatar
eddie.woo committed
35 36 37 38 39
@RestController
@RequestMapping("api/v1/init")
public class DataInitController {

    private static final Logger logger = LoggerFactory.getLogger(DataInitController.class);
40 41 42 43 44 45

    @Autowired
    private FileService fileService;
    @Autowired
    private DataInitServiceImpl dataInitService;

gary's avatar
gary committed
46
//    @ApiOperation(value = "Download basic data initialization template")
47
    @RequestMapping(value = {"/downloadTemplate"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
eddie.woo's avatar
eddie.woo committed
48
    public void downloadTemplate(HttpServletResponse response) {
49

eddie.woo's avatar
eddie.woo committed
50 51 52 53 54 55 56 57
        String filePath;
        File templateFile = null;
        InputStream inputStream = null;
        try {
            filePath = EnterpriseAccountManagerController.class.getClassLoader().getResource("").toURI().getPath();
            templateFile = new File(filePath + CommonConstants.BasicDataTemplate);
            inputStream = new BufferedInputStream(new FileInputStream(templateFile));
            String customFileName = CommonConstants.BasicDataFileName + DateTime.now().toString("yyyyMMddHHmmss") + ".xlsx";//客户端保存的文件名
58
            response.setHeader("Content-Disposition", String.format("inline; filename=\"" + customFileName + "\""));
eddie.woo's avatar
eddie.woo committed
59 60
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            FileCopyUtils.copy(inputStream, response.getOutputStream());
61
        } catch (FileNotFoundException e) {
eddie.woo's avatar
eddie.woo committed
62 63
            logger.error("Template file not found. Template file should be located at " + CommonConstants.BasicDataTemplate);
            throw new ApplicationException("Tempate file not found.");
64
        } catch (Exception e) {
eddie.woo's avatar
eddie.woo committed
65 66
            logger.error("Error downloading template file " + CommonConstants.BasicDataFileName + ".xlsx", e);
            throw new ApplicationException("Error downloading template file " + CommonConstants.BasicDataFileName + ".xlsx", e);
67
        } finally {
eddie.woo's avatar
eddie.woo committed
68 69
            try {
                templateFile = null;
70
                if (inputStream != null) {
eddie.woo's avatar
eddie.woo committed
71 72
                    inputStream.close();
                }
73 74 75
            } catch (Exception e) {
                logger.error("Error closing inputstream. ", e);
            } finally {
eddie.woo's avatar
eddie.woo committed
76 77 78 79
                inputStream = null;
            }
        }
    }
80

gary's avatar
gary committed
81
//    @ApiOperation(value = "Upload initial data")
82 83 84 85 86
    @RequestMapping(value = {"/Upload"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    Object uploadInitData(@RequestParam String action,
                          @RequestParam(value = "file", required = false) CommonsMultipartFile inputFile) {

eddie.woo's avatar
eddie.woo committed
87 88 89
        if (inputFile == null || inputFile.getSize() <= 0) {
            return new OperationResultDto<>(false, ErrorMessage.NoFile);
        }
90

eddie.woo's avatar
eddie.woo committed
91 92 93
        logger.debug("file name: " + inputFile.getOriginalFilename());
        InputStream inputStream = null;
        try {
94
            inputStream = inputFile.getInputStream();
eddie.woo's avatar
eddie.woo committed
95 96 97
        } catch (IOException e) {
            throw Lang.wrapThrow(e);
        }
98

eddie.woo's avatar
eddie.woo committed
99 100 101 102 103 104 105 106
        //save file
        String filePath = FileUtils.getTempDirectory().getAbsolutePath() + File.separator + "DataInit" + File.separator
                + CommonUtils.getUUID() + "_" + inputFile.getOriginalFilename();
        logger.debug("Saving excel to {}", filePath);
        OperationResultDto<Object> saveResult = fileService.saveFile(inputStream, filePath);
        if (saveResult.getResult() != null && !saveResult.getResult()) {
            return saveResult;
        }
107 108


eddie.woo's avatar
eddie.woo committed
109 110 111 112
        DataInitDto dataInitDto = dataInitService.validateAndImportInitData(filePath);
        DataInitMsgDto dataMsgDto = new DataInitMsgDto();
        dataMsgDto.setErrorMsg(dataInitDto.getErrorMsgs());
        dataMsgDto.setValidMsg(dataInitDto.getValidMsgs());
113

eddie.woo's avatar
eddie.woo committed
114 115 116
        return dataMsgDto;
    }
}