EnterpriseAccountManagerController.java 16.9 KB
Newer Older
eddie.woo's avatar
eddie.woo committed
1 2
package pwc.taxtech.atms.controller;

3
import io.swagger.annotations.ApiOperation;
eddie.woo's avatar
eddie.woo committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
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;
20 21 22
import pwc.taxtech.atms.common.CommonUtils;
import pwc.taxtech.atms.common.message.ErrorMessage;
import pwc.taxtech.atms.constant.EnterpriseAccountConstant;
23 24
import pwc.taxtech.atms.dpo.EnterpriseAccountDto;
import pwc.taxtech.atms.dpo.EnterpriseAccountSetOrgDto;
25
import pwc.taxtech.atms.dto.OperationResultDto;
26 27 28 29 30
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;
31
import pwc.taxtech.atms.exception.ApplicationException;
32
import pwc.taxtech.atms.service.impl.EnterpriseAccountServiceImpl;
33
import pwc.taxtech.atms.service.impl.EnterpriseAccountSetServiceImpl;
eddie.woo's avatar
eddie.woo committed
34 35
import pwc.taxtech.atms.service.impl.FileService;

36 37 38 39 40 41 42 43 44
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
45 46 47 48 49
@RestController
@RequestMapping("/api/v1/enterpriseAccountManage")
public class EnterpriseAccountManagerController {

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

    @Autowired
    private EnterpriseAccountSetServiceImpl enterpriseAccountSetService;
    @Autowired
54
    private EnterpriseAccountServiceImpl enterpriseAccountService;
55 56 57 58 59 60 61 62
    @Autowired
    private FileService fileService;

    @ApiOperation(value = "Get the enterprise account set list")
    @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
63
    }
64 65 66 67 68

    @ApiOperation(value = "Gets the enterprise account set")
    @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
69 70
        return enterpriseAccountSetService.getEnterpriseAccountSet(id);
    }
71 72

    @SuppressWarnings("rawtypes")
eddie.woo's avatar
eddie.woo committed
73
    @ApiOperation(value = "Updates the enterprise account set")
74 75 76
    @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
77 78
        return enterpriseAccountSetService.updateEnterpriseAccountSet(enterpriseAccountSetDto);
    }
79 80

    @SuppressWarnings("rawtypes")
eddie.woo's avatar
eddie.woo committed
81
    @ApiOperation(value = "Enterprises the account set name validate")
82 83 84
    @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
85
        EnterpriseAccountSetDto enterpriseAccountSetDto = new EnterpriseAccountSetDto();
86
        enterpriseAccountSetDto.setId(id);
eddie.woo's avatar
eddie.woo committed
87
        enterpriseAccountSetDto.setName(name);
88
        return enterpriseAccountSetService.enterpriseAccountSetNameValidate(enterpriseAccountSetDto);
eddie.woo's avatar
eddie.woo committed
89
    }
90 91

    @SuppressWarnings("rawtypes")
eddie.woo's avatar
eddie.woo committed
92
    @ApiOperation(value = "Enterprises the account set code validate")
93 94 95
    @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
96
        EnterpriseAccountSetDto enterpriseAccountSetDto = new EnterpriseAccountSetDto();
97
        enterpriseAccountSetDto.setId(id);
eddie.woo's avatar
eddie.woo committed
98 99 100
        enterpriseAccountSetDto.setCode(code);
        return enterpriseAccountSetService.enterpriseAccountSetCodeValidate(enterpriseAccountSetDto);
    }
101 102

    @SuppressWarnings("rawtypes")
eddie.woo's avatar
eddie.woo committed
103
    @ApiOperation(value = "Enterprises the account set org validate")
104 105 106 107
    @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
108
    }
109 110

    @SuppressWarnings("rawtypes")
eddie.woo's avatar
eddie.woo committed
111
    @ApiOperation(value = "Add the oganization link to an enterprises account set")
112 113 114
    @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
115 116
        return enterpriseAccountSetService.addEnterpriseAccountSetOrg(enterpriseAccountSetDto);
    }
117 118

    @SuppressWarnings("rawtypes")
eddie.woo's avatar
eddie.woo committed
119
    @ApiOperation(value = "Update the oganization link to an enterprises account set")
120 121 122
    @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
123 124
        return enterpriseAccountSetService.updateEnterpriseAccountSetOrg(enterpriseAccountSetOrgDto);
    }
125 126

    @SuppressWarnings("rawtypes")
eddie.woo's avatar
eddie.woo committed
127
    @ApiOperation(value = "Delete the oganization link to an enterprises account set")
128 129 130
    @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
131 132
        return enterpriseAccountSetService.deleteEnterpriseAccountSetOrg(enterpriseAccountSetDto);
    }
133 134 135

    @ApiOperation(value = "Download Enterprise account template")
    @RequestMapping(value = {"/downEntepriseAccountTemplate"}, method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
eddie.woo's avatar
eddie.woo committed
136
    public void downEntepriseAccountTemplate(HttpServletResponse response) {
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 166

        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
167
    }
168 169

    @SuppressWarnings("rawtypes")
eddie.woo's avatar
eddie.woo committed
170
    @ApiOperation(value = "Upload and save enterprise accounts.")
171 172 173 174 175 176 177 178 179 180
    @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
181 182
        InputStream inputStream = null;
        try {
183
            inputStream = inputFile.getInputStream();
eddie.woo's avatar
eddie.woo committed
184 185 186
        } catch (IOException e) {
            throw Lang.wrapThrow(e);
        }
187

eddie.woo's avatar
eddie.woo committed
188 189 190 191 192 193 194 195
        //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;
        }
196

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

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

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

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

    @ApiOperation(value = "Gets the specified enterprise account by identifier")
    @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
238 239
        return enterpriseAccountService.getEnterpriseAccount(id);
    }
240 241 242 243 244

    @ApiOperation(value = "Add an enterprise account")
    @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
245 246
        return enterpriseAccountService.addEnterpriseAccount(enterpriseAccountDto);
    }
247 248 249 250 251

    @ApiOperation(value = "Update an enterprise account")
    @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
252 253
        return enterpriseAccountService.updateEnterpriseAccount(enterpriseAccountDto);
    }
254 255

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

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

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

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

    @ResponseBody
    @ApiOperation(value = "科目自动对应")
    @RequestMapping(value = "autoMap", method = RequestMethod.GET)
289
    public OperationResultDto autoMap(@RequestParam String orgId, @RequestParam String accountSetId) {
eddie.woo's avatar
eddie.woo committed
290
        try {
291
            return enterpriseAccountService.autoMap(orgId, accountSetId);
eddie.woo's avatar
eddie.woo committed
292 293 294 295 296
        } catch (Exception e) {
            logger.error("autoMap error.", e);
        }
        return OperationResultDto.error("自动对应失败");
    }
eddie.woo's avatar
eddie.woo committed
297 298 299 300 301 302 303 304 305 306

    @ResponseBody
    @ApiOperation(value = "手动对应")
    @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
307
        return OperationResultDto.error("手动对应失败");
eddie.woo's avatar
eddie.woo committed
308 309 310 311 312
    }

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