EnterpriseAccountManagerController.java 16.9 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
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.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
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;
19 20 21
import pwc.taxtech.atms.common.CommonUtils;
import pwc.taxtech.atms.common.message.ErrorMessage;
import pwc.taxtech.atms.constant.EnterpriseAccountConstant;
22 23
import pwc.taxtech.atms.dpo.EnterpriseAccountDto;
import pwc.taxtech.atms.dpo.EnterpriseAccountSetOrgDto;
24
import pwc.taxtech.atms.dto.OperationResultDto;
25 26 27 28 29
import pwc.taxtech.atms.dto.epaccount.AccountMapDto;
import pwc.taxtech.atms.dto.epaccount.AccountMappingDto;
import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountAndValidateInfo;
import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountSetDto;
import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountUploadDto;
30
import pwc.taxtech.atms.exception.ApplicationException;
31
import pwc.taxtech.atms.service.impl.EnterpriseAccountServiceImpl;
32
import pwc.taxtech.atms.service.impl.EnterpriseAccountSetServiceImpl;
eddie.woo's avatar
eddie.woo committed
33 34
import pwc.taxtech.atms.service.impl.FileService;

35 36 37 38 39 40 41 42 43
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;
import java.util.List;

eddie.woo's avatar
eddie.woo committed
44 45 46 47 48
@RestController
@RequestMapping("/api/v1/enterpriseAccountManage")
public class EnterpriseAccountManagerController {

    private static final Logger logger = LoggerFactory.getLogger(EnterpriseAccountManagerController.class);
49 50 51 52

    @Autowired
    private EnterpriseAccountSetServiceImpl enterpriseAccountSetService;
    @Autowired
53
    private EnterpriseAccountServiceImpl enterpriseAccountService;
54 55 56
    @Autowired
    private FileService fileService;

gary's avatar
gary committed
57
//    @ApiOperation(value = "Get the enterprise account set list")
58 59 60 61
    @RequestMapping(value = {"/getEnterpriseAccountSetList"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    List<EnterpriseAccountSetDto> getEnterpriseAccountSetList() {
        return enterpriseAccountSetService.getEnterpriseAccountSetList();
eddie.woo's avatar
eddie.woo committed
62
    }
63

gary's avatar
gary committed
64
//    @ApiOperation(value = "Gets the enterprise account set")
65 66 67
    @RequestMapping(value = {"/getEnterpriseAccountSet"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    EnterpriseAccountSetDto getEnterpriseAccountSet(@RequestParam String id) {
eddie.woo's avatar
eddie.woo committed
68 69
        return enterpriseAccountSetService.getEnterpriseAccountSet(id);
    }
70 71

    @SuppressWarnings("rawtypes")
gary's avatar
gary committed
72
//    @ApiOperation(value = "Updates the enterprise account set")
73 74 75
    @RequestMapping(value = {"/updateEnterpriseAccountSet"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto updateEnterpriseAccountSet(@RequestBody EnterpriseAccountSetDto enterpriseAccountSetDto) {
eddie.woo's avatar
eddie.woo committed
76 77
        return enterpriseAccountSetService.updateEnterpriseAccountSet(enterpriseAccountSetDto);
    }
78 79

    @SuppressWarnings("rawtypes")
gary's avatar
gary committed
80
//    @ApiOperation(value = "Enterprises the account set name validate")
81 82 83
    @RequestMapping(value = {"/enterpriseAccountSetNameValidate"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto enterpriseAccountSetNameValidate(@RequestParam String id, @RequestParam String name) {
eddie.woo's avatar
eddie.woo committed
84
        EnterpriseAccountSetDto enterpriseAccountSetDto = new EnterpriseAccountSetDto();
85
        enterpriseAccountSetDto.setId(id);
eddie.woo's avatar
eddie.woo committed
86
        enterpriseAccountSetDto.setName(name);
87
        return enterpriseAccountSetService.enterpriseAccountSetNameValidate(enterpriseAccountSetDto);
eddie.woo's avatar
eddie.woo committed
88
    }
89 90

    @SuppressWarnings("rawtypes")
gary's avatar
gary committed
91
//    @ApiOperation(value = "Enterprises the account set code validate")
92 93 94
    @RequestMapping(value = {"/enterpriseAccountSetCodeValidate"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto enterpriseAccountSetCodeValidate(@RequestParam String id, @RequestParam String code) {
eddie.woo's avatar
eddie.woo committed
95
        EnterpriseAccountSetDto enterpriseAccountSetDto = new EnterpriseAccountSetDto();
96
        enterpriseAccountSetDto.setId(id);
eddie.woo's avatar
eddie.woo committed
97 98 99
        enterpriseAccountSetDto.setCode(code);
        return enterpriseAccountSetService.enterpriseAccountSetCodeValidate(enterpriseAccountSetDto);
    }
100 101

    @SuppressWarnings("rawtypes")
gary's avatar
gary committed
102
//    @ApiOperation(value = "Enterprises the account set org validate")
103 104 105 106
    @RequestMapping(value = {"/enterpriseAccountSetOrgValidate"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto enterpriseAccountSetOrgValidate(@RequestBody EnterpriseAccountSetDto enterpriseAccountSetDto) {
        return enterpriseAccountSetService.enterpriseAccountSetOrgValidate(enterpriseAccountSetDto);
eddie.woo's avatar
eddie.woo committed
107
    }
108 109

    @SuppressWarnings("rawtypes")
gary's avatar
gary committed
110
//    @ApiOperation(value = "Add the oganization link to an enterprises account set")
111 112 113
    @RequestMapping(value = {"/addEnterpriseAccountSetOrg"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto addEnterpriseAccountSetOrg(@RequestBody EnterpriseAccountSetDto enterpriseAccountSetDto) {
eddie.woo's avatar
eddie.woo committed
114 115
        return enterpriseAccountSetService.addEnterpriseAccountSetOrg(enterpriseAccountSetDto);
    }
116 117

    @SuppressWarnings("rawtypes")
gary's avatar
gary committed
118
//    @ApiOperation(value = "Update the oganization link to an enterprises account set")
119 120 121
    @RequestMapping(value = {"/updateEnterpriseAccountSetOrg"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto updateEnterpriseAccountSetOrg(@RequestBody EnterpriseAccountSetOrgDto enterpriseAccountSetOrgDto) {
eddie.woo's avatar
eddie.woo committed
122 123
        return enterpriseAccountSetService.updateEnterpriseAccountSetOrg(enterpriseAccountSetOrgDto);
    }
124 125

    @SuppressWarnings("rawtypes")
gary's avatar
gary committed
126
//    @ApiOperation(value = "Delete the oganization link to an enterprises account set")
127 128 129
    @RequestMapping(value = {"/deleteEnterpriseAccountSetOrg"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto deleteEnterpriseAccountSetOrg(@RequestBody EnterpriseAccountSetDto enterpriseAccountSetDto) {
eddie.woo's avatar
eddie.woo committed
130 131
        return enterpriseAccountSetService.deleteEnterpriseAccountSetOrg(enterpriseAccountSetDto);
    }
132

gary's avatar
gary committed
133
//    @ApiOperation(value = "Download Enterprise account template")
134
    @RequestMapping(value = {"/downEntepriseAccountTemplate"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
eddie.woo's avatar
eddie.woo committed
135
    public void downEntepriseAccountTemplate(HttpServletResponse response) {
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165

        String filePath;
        File templateFile = null;
        InputStream inputStream = null;
        try {
            filePath = EnterpriseAccountManagerController.class.getClassLoader().getResource("").toURI().getPath();
            templateFile = new File(filePath + EnterpriseAccountConstant.EnterpriseAccountTemplate);
            inputStream = new BufferedInputStream(new FileInputStream(templateFile));
            String customFileName = EnterpriseAccountConstant.EntepriseAccountFileName + DateTime.now().toString("yyyyMMddHHmmss") + ".xlsx";//客户端保存的文件名
            response.setHeader("Content-Disposition", String.format("inline; filename=\"" + customFileName + "\""));
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            FileCopyUtils.copy(inputStream, response.getOutputStream());
        } catch (FileNotFoundException e) {
            logger.error("Template file not found. Template file should be located at " + EnterpriseAccountConstant.EnterpriseAccountTemplate);
            throw new ApplicationException("Tempate file not found.");
        } catch (Exception e) {
            logger.error("Error downloading template file " + EnterpriseAccountConstant.EntepriseAccountFileName + ".xlsx", e);
            throw new ApplicationException("Error downloading template file " + EnterpriseAccountConstant.EntepriseAccountFileName + ".xlsx", e);
        } finally {
            try {
                templateFile = null;
                if (inputStream != null) {
                    inputStream.close();
                }
            } catch (Exception e) {
                logger.error("Error closing inputstream. ", e);
            } finally {
                inputStream = null;
            }
        }
eddie.woo's avatar
eddie.woo committed
166
    }
167 168

    @SuppressWarnings("rawtypes")
gary's avatar
gary committed
169
//    @ApiOperation(value = "Upload and save enterprise accounts.")
170 171 172 173 174 175 176 177 178 179
    @RequestMapping(value = {"/Upload"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto uploadEnterpriseAccount(@ModelAttribute EnterpriseAccountUploadDto uploadForm,
                                               @RequestParam(value = "file", required = false) CommonsMultipartFile inputFile) {

        if (inputFile == null || inputFile.getSize() <= 0) {
            return new OperationResultDto<>(false, ErrorMessage.NoFile);
        }

        logger.debug("file name: " + inputFile.getOriginalFilename());
eddie.woo's avatar
eddie.woo committed
180 181
        InputStream inputStream = null;
        try {
182
            inputStream = inputFile.getInputStream();
eddie.woo's avatar
eddie.woo committed
183 184 185
        } catch (IOException e) {
            throw Lang.wrapThrow(e);
        }
186

eddie.woo's avatar
eddie.woo committed
187 188 189 190 191 192 193 194
        //save file
        String filePath = FileUtils.getTempDirectory().getAbsolutePath() + File.separator + "EnterpriseAccount" + 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;
        }
195

eddie.woo's avatar
eddie.woo committed
196 197
        //validate file
        OperationResultDto<List<EnterpriseAccountDto>> validateResult = enterpriseAccountService.validateImportEnterpriseAccount(filePath);
198
        if (!validateResult.getResult()) {
eddie.woo's avatar
eddie.woo committed
199 200
            return validateResult;
        }
201

eddie.woo's avatar
eddie.woo committed
202
        //import
203
        String enterpriseAccountSetId = uploadForm.getEnterpriseAccountSetId();
eddie.woo's avatar
eddie.woo committed
204
        //创建新账套
205
        if (enterpriseAccountSetId == null || enterpriseAccountSetId.isEmpty()) {
eddie.woo's avatar
eddie.woo committed
206
            logger.debug("Uploading and save enterprise account set. "
207
                    + "[name=" + uploadForm.getName() + ", code=" + uploadForm.getCode()
eddie.woo's avatar
eddie.woo committed
208 209 210 211 212 213
                    + ", selectedOrgList=" + uploadForm.getSelectedOrgList() + ", isImportAppend=" + uploadForm.getIsImportAppend() + ".]");
            enterpriseAccountService.addEnterpriseAccountSetAndImportData(uploadForm.getName(), uploadForm.getCode(), validateResult.getData());
        }
        //仅仅上传科目
        else {
            logger.debug("Uploading enterprise account. "
214
                    + "[accountset id=" + uploadForm.getEnterpriseAccountSetId() + ", name=" + uploadForm.getName() + ", code=" + uploadForm.getCode()
eddie.woo's avatar
eddie.woo committed
215 216
                    + ", selectedOrgList=" + uploadForm.getSelectedOrgList() + ", isImportAppend=" + uploadForm.getIsImportAppend() + ".]");
            EnterpriseAccountSetDto enterpriseAccountSetDto = new EnterpriseAccountSetDto();
217
            enterpriseAccountSetDto.setId(uploadForm.getEnterpriseAccountSetId());
eddie.woo's avatar
eddie.woo committed
218 219 220
            enterpriseAccountSetDto.setName(uploadForm.getName());
            enterpriseAccountSetDto.setIsImportAppend(Boolean.valueOf(uploadForm.getIsImportAppend()));
            enterpriseAccountService.repeatImportEnterpriseAccountSet(enterpriseAccountSetDto, validateResult.getData());
221

eddie.woo's avatar
eddie.woo committed
222
        }
223
        return OperationResultDto.success();
eddie.woo's avatar
eddie.woo committed
224
    }
225

gary's avatar
gary committed
226
//    @ApiOperation(value = "Gets the list by enterprise account set identifier.")
227
    @RequestMapping(value = {"/getListByEnterpriseAccountSetID"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
228
    public @ResponseBody
frank.xa.zhang's avatar
frank.xa.zhang committed
229 230
    EnterpriseAccountAndValidateInfo getListByEnterpriseAccountSetId(@RequestParam String enterpriseAccountSetID) {
        return enterpriseAccountService.getListByEnterpriseAccountSetId(enterpriseAccountSetID);
eddie.woo's avatar
eddie.woo committed
231
    }
232

gary's avatar
gary committed
233
//    @ApiOperation(value = "Gets the specified enterprise account by identifier")
234 235 236
    @RequestMapping(value = {"/getsingle"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    EnterpriseAccountDto getEnterpriseAccount(@RequestParam String id) {
eddie.woo's avatar
eddie.woo committed
237 238
        return enterpriseAccountService.getEnterpriseAccount(id);
    }
239

gary's avatar
gary committed
240
//    @ApiOperation(value = "Add an enterprise account")
241 242 243
    @RequestMapping(value = {"/add"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<List<EnterpriseAccountDto>> addEnterpriseAccount(@RequestBody EnterpriseAccountDto enterpriseAccountDto) {
eddie.woo's avatar
eddie.woo committed
244 245
        return enterpriseAccountService.addEnterpriseAccount(enterpriseAccountDto);
    }
246

gary's avatar
gary committed
247
//    @ApiOperation(value = "Update an enterprise account")
248 249 250
    @RequestMapping(value = {"/update"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto<List<EnterpriseAccountDto>> updateEnterpriseAccount(@RequestBody EnterpriseAccountDto enterpriseAccountDto) {
eddie.woo's avatar
eddie.woo committed
251 252
        return enterpriseAccountService.updateEnterpriseAccount(enterpriseAccountDto);
    }
253 254

    @SuppressWarnings("rawtypes")
gary's avatar
gary committed
255
//    @ApiOperation(value = "一键删除重复企业科目")
256 257 258 259 260 261
    @RequestMapping(value = {"/clearRepeatEnterpriseAccountList"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    OperationResultDto clearRepeatEnterpriseAccountList(@RequestBody EnterpriseAccountSetDto enterpriseAccountSetDto) {
        return enterpriseAccountService.clearRepeatEnterpriseAccountList(enterpriseAccountSetDto);
    }

gary's avatar
gary committed
262
//    @ApiOperation(value = "获取企业账套Mapping")
263 264 265
    @RequestMapping(value = {"/getAccountMappingOrg"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public @ResponseBody
    List<AccountMappingDto> getAccountMappingOrg(@RequestParam(name = "organizationID") String organizationId) {
266
        return enterpriseAccountService.getAccountMappingOrg(organizationId);
eddie.woo's avatar
eddie.woo committed
267
    }
eddie.woo's avatar
eddie.woo committed
268 269

    @ResponseBody
gary's avatar
gary committed
270
//    @ApiOperation(value = "按组织机构查找")
frank.xa.zhang's avatar
frank.xa.zhang committed
271
    @RequestMapping(value = "getEnterpriseAccountSetListByOrgID", method = RequestMethod.GET)
272
    public List<EnterpriseAccountSetDto> getEnterpriseAccountSetListByOrgId(@RequestParam(name = "orgID") String orgId) {
273
        return enterpriseAccountService.getEnterpriseAccountSetListByOrgId(orgId);
eddie.woo's avatar
eddie.woo committed
274
    }
275 276

    @ResponseBody
gary's avatar
gary committed
277
//    @ApiOperation(value = "科目对应列表")
278
    @RequestMapping(value = "getEnterpriseAccountList", method = RequestMethod.GET)
279 280
    public List<EnterpriseAccountDto> getEnterpriseAccountList(@RequestParam(name = "espID") String espId,
                                                               @RequestParam(name = "orgID") String orgId,
281
                                                               @RequestParam String filterType) {
282
        return enterpriseAccountService.getList(espId, orgId, filterType);
283
    }
eddie.woo's avatar
eddie.woo committed
284 285

    @ResponseBody
gary's avatar
gary committed
286
//    @ApiOperation(value = "科目自动对应")
eddie.woo's avatar
eddie.woo committed
287
    @RequestMapping(value = "autoMap", method = RequestMethod.GET)
288
    public OperationResultDto autoMap(@RequestParam String orgId, @RequestParam String accountSetId) {
eddie.woo's avatar
eddie.woo committed
289
        try {
290
            return enterpriseAccountService.autoMap(orgId, accountSetId);
eddie.woo's avatar
eddie.woo committed
291 292 293 294 295
        } catch (Exception e) {
            logger.error("autoMap error.", e);
        }
        return OperationResultDto.error("自动对应失败");
    }
eddie.woo's avatar
eddie.woo committed
296 297

    @ResponseBody
gary's avatar
gary committed
298
//    @ApiOperation(value = "手动对应")
eddie.woo's avatar
eddie.woo committed
299 300 301 302 303 304 305
    @RequestMapping(value = "mapAccount", method = RequestMethod.POST)
    public OperationResultDto mapAccount(@RequestBody AccountMapDto dto) {
        try {
            return enterpriseAccountService.mapAccount(dto);
        } catch (Exception e) {
            logger.error("mapAccount error.", e);
        }
eddie.woo's avatar
eddie.woo committed
306
        return OperationResultDto.error("手动对应失败");
eddie.woo's avatar
eddie.woo committed
307 308 309
    }

    @ResponseBody
gary's avatar
gary committed
310
//    @ApiOperation(value = "取消对应")
eddie.woo's avatar
eddie.woo committed
311
    @RequestMapping(value = "clearMap", method = RequestMethod.POST)
312
    public OperationResultDto clearMap(@RequestBody String[] epAccountIds, @RequestParam String orgId) {
eddie.woo's avatar
eddie.woo committed
313
        try {
314
            return enterpriseAccountService.clearMap(epAccountIds, orgId);
eddie.woo's avatar
eddie.woo committed
315 316 317 318 319
        } catch (Exception e) {
            logger.error("clearMap error.", e);
        }
        return OperationResultDto.error("取消对应失败");
    }
eddie.woo's avatar
eddie.woo committed
320
}