From eff3e8a896fe811c90437f0e47239b96fa7a7ec8 Mon Sep 17 00:00:00 2001 From: "eddie.woo" <eddie.wu@cn.pwc.com> Date: Mon, 21 May 2018 17:49:28 +0800 Subject: [PATCH] modify --- .../constant/EnterpriseAccountConstant.java | 18 ++ .../atms/constant/enums/StdAccountEnum.java | 13 + .../EnterpriseAccountManagerController.java | 31 ++- .../atms/controller/StdAccountController.java | 17 ++ .../dao}/AccountMappingDao.java | 68 ++++- .../atms/dao/dao/AccountMappingManualDao.java | 11 + .../atms/dao/dao/EnterpriseAccountDao.java | 17 +- .../taxtech/atms/dao/dao/OrganizationDao.java | 13 + .../atms/dao/dao/StandardAccountDao.java | 18 ++ .../atms/dto/epaccount/AccountMapDto.java | 58 +++++ .../service/EnterpriseAccountService.java | 11 +- .../atms/service/StdAccountService.java | 3 + .../impl/EnterpriseAccountServiceImpl.java | 238 +++++++++++++++++- .../service/impl/StdAccountServiceImpl.java | 28 +++ 14 files changed, 515 insertions(+), 29 deletions(-) rename atms-api/src/main/java/pwc/taxtech/atms/{dto/accountmapping => dao/dao}/AccountMappingDao.java (51%) create mode 100644 atms-api/src/main/java/pwc/taxtech/atms/dao/dao/OrganizationDao.java create mode 100644 atms-api/src/main/java/pwc/taxtech/atms/dto/epaccount/AccountMapDto.java diff --git a/atms-api/src/main/java/pwc/taxtech/atms/constant/EnterpriseAccountConstant.java b/atms-api/src/main/java/pwc/taxtech/atms/constant/EnterpriseAccountConstant.java index 05b9d0dab..bdf694944 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/constant/EnterpriseAccountConstant.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/constant/EnterpriseAccountConstant.java @@ -44,6 +44,24 @@ public class EnterpriseAccountConstant { public static final int MaxAcctPropValue = 6; public static final int SpecialAcctPropValue = -1; + public static final String EnterpriceAccountRepeat = "EnterpriceAccountRepeat"; + public static final String EnterpriceAccountParentDisable = "EnterpriceAccountParentDisable"; + public static final String StdCodeIsNotExist = "StdCodeIsNotExist"; + public static final String NoParentCode = "NoParentCode"; + public static final String OrgNotExist = "OrgNotExist"; + public static final String SystemError = "SystemError"; + public static final String NoAccountNeedClear = "NoAccountNeedClear"; + public static final String InputParamInComplete = "InputParamInComplete"; + public static final String AccountSetNotExist = "AccountSetNotExist"; + public static final String ExistMappedOrg = "ExistMappedOrg"; + public static final String SubjectCorresponding = "SubjectCorresponding"; + + public static final String DirectionFormatError = "DirectionFormatError"; + + public static final String AcctPropFormatError = "AcctPropFormatError"; + + public static final String AcctPropNullError = "AcctPropNullError"; + public static final List<String> IgnoreFieldList = Arrays.asList(IsLeafField, AcctLevelField, FullNameField); public static final Map<String, String> DirectionMap = ImmutableMap.<String, String>builder() diff --git a/atms-api/src/main/java/pwc/taxtech/atms/constant/enums/StdAccountEnum.java b/atms-api/src/main/java/pwc/taxtech/atms/constant/enums/StdAccountEnum.java index 65a20b36a..a34ffa5c4 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/constant/enums/StdAccountEnum.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/constant/enums/StdAccountEnum.java @@ -5,6 +5,19 @@ import java.util.Map; public class StdAccountEnum { + public enum RuleType { + TWO(2); + private Integer code; + + RuleType(Integer code) { + this.code = code; + } + + public Integer getCode() { + return code; + } + } + public enum AcctProp { Asset("1", "璧勪骇"), Debt("2", "璐熷€�"), diff --git a/atms-api/src/main/java/pwc/taxtech/atms/controller/EnterpriseAccountManagerController.java b/atms-api/src/main/java/pwc/taxtech/atms/controller/EnterpriseAccountManagerController.java index f9a049eae..3328c0cc9 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/controller/EnterpriseAccountManagerController.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/controller/EnterpriseAccountManagerController.java @@ -34,12 +34,7 @@ import pwc.taxtech.atms.common.CommonUtils; import pwc.taxtech.atms.common.message.ErrorMessage; import pwc.taxtech.atms.constant.EnterpriseAccountConstant; import pwc.taxtech.atms.dto.OperationResultDto; -import pwc.taxtech.atms.dto.epaccount.AccountMappingDto; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountAndValidateInfo; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountDto; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountSetDto; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountSetOrgDto; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountUploadDto; +import pwc.taxtech.atms.dto.epaccount.*; import pwc.taxtech.atms.service.EnterpriseAccountService; import pwc.taxtech.atms.service.EnterpriseAccountSetService; import pwc.taxtech.atms.service.impl.FileService; @@ -282,4 +277,28 @@ public class EnterpriseAccountManagerController { } return OperationResultDto.error("鑷姩瀵瑰簲澶辫触"); } + + @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); + } + return OperationResultDto.error("鑷姩瀵瑰簲澶辫触"); + } + + @ResponseBody + @ApiOperation(value = "鍙栨秷瀵瑰簲") + @RequestMapping(value = "clearMap", method = RequestMethod.POST) + public OperationResultDto clearMap(@RequestBody String[] epAccountIDs, @RequestParam String orgId) { + try { + return enterpriseAccountService.clearMap(epAccountIDs, orgId); + } catch (Exception e) { + logger.error("clearMap error.", e); + } + return OperationResultDto.error("鍙栨秷瀵瑰簲澶辫触"); + } } diff --git a/atms-api/src/main/java/pwc/taxtech/atms/controller/StdAccountController.java b/atms-api/src/main/java/pwc/taxtech/atms/controller/StdAccountController.java index 7cf5f5e9e..f71ed9af0 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/controller/StdAccountController.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/controller/StdAccountController.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import pwc.taxtech.atms.dto.stdaccount.StandardAccountDto; import pwc.taxtech.atms.dto.stdaccount.StdAccountFancyTreeDto; import pwc.taxtech.atms.service.StdAccountService; @@ -32,4 +33,20 @@ public class StdAccountController extends BaseController { } return Collections.emptyList(); } + + @ResponseBody + @ApiOperation(value = "鏌ョ湅瀵瑰簲鍏崇郴") + @RequestMapping(value = "getStdAccountLinkEtsAccount", method = RequestMethod.GET) + public List<StandardAccountDto> getStdAccountLinkEtsAccount(@RequestParam String orgID, + @RequestParam String accountSetID) { + if (StringUtils.isAnyBlank(orgID, accountSetID)) { + return Collections.emptyList(); + } + try { + return stdAccountService.GetStdAccountLinkEtsAccount(orgID, accountSetID); + } catch (Exception e) { + logger.error("getStdAccountLinkEtsAccount error.", e); + } + return Collections.emptyList(); + } } diff --git a/atms-api/src/main/java/pwc/taxtech/atms/dto/accountmapping/AccountMappingDao.java b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/AccountMappingDao.java similarity index 51% rename from atms-api/src/main/java/pwc/taxtech/atms/dto/accountmapping/AccountMappingDao.java rename to atms-api/src/main/java/pwc/taxtech/atms/dao/dao/AccountMappingDao.java index 4039b05ee..75c55ce3e 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/dto/accountmapping/AccountMappingDao.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/AccountMappingDao.java @@ -1,4 +1,4 @@ -package pwc.taxtech.atms.dto.accountmapping; +package pwc.taxtech.atms.dao.dao; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -7,19 +7,21 @@ import org.springframework.stereotype.Service; import pwc.taxtech.atms.common.CommonConstants; import pwc.taxtech.atms.common.CommonUtils; import pwc.taxtech.atms.dao.AccountMappingMapper; -import pwc.taxtech.atms.dao.dao.EnterpriseAccountDao; import pwc.taxtech.atms.entitiy.AccountMapping; import pwc.taxtech.atms.entitiy.AccountMappingExample; +import pwc.taxtech.atms.entitiy.EnterpriseAccount; import java.util.List; +import java.util.stream.Collectors; @Service public class AccountMappingDao { @Autowired AccountMappingMapper mapper; - @Autowired EnterpriseAccountDao epAccountDao; + @Autowired + AccountMappingManualDao mappingManualDao; public void delByEpAccountCodeList(List<String> codeList) { if (CollectionUtils.isNotEmpty(codeList)) { @@ -70,7 +72,6 @@ public class AccountMappingDao { stdAccountCode = CommonConstants.NullStdCode; //region 鏂伴€昏緫 - if (!bOverwrite) { if (!isStdExists(accountSetId, accountCode, industryID, orgId)) { updateToTable(accountCode, accountSetId, stdAccountCode, industryID, enterpriseAccountID, orgId); @@ -78,8 +79,65 @@ public class AccountMappingDao { } else { updateToTable(accountCode, accountSetId, stdAccountCode, industryID, enterpriseAccountID, orgId); } - //endregion + } + + public List<AccountMapping> getAccountMapping(String epAccountCode, String epAccountSetID, String orgID) { + AccountMappingExample example = new AccountMappingExample(); + AccountMappingExample.Criteria criteria = example.createCriteria(); + criteria.andEnterpriseAccountCodeEqualTo(epAccountCode); + criteria.andEnterpriseAccountSetIDEqualTo(epAccountSetID); + criteria.andOrganizationIDEqualTo(orgID); + return mapper.selectByExample(example); + } + + public void delMapping(String epAccountCode, String epAccountSetID, String orgID, String industryID) { + AccountMappingExample example = new AccountMappingExample(); + AccountMappingExample.Criteria criteria = example.createCriteria(); + criteria.andEnterpriseAccountCodeEqualTo(epAccountCode); + criteria.andEnterpriseAccountSetIDEqualTo(epAccountSetID); + criteria.andOrganizationIDEqualTo(orgID); + criteria.andIndustryIDEqualTo(industryID); + mapper.deleteByExample(example); + } + + public void delMapping(String epAccountSetID, String orgID, String industryID) { + AccountMappingExample example = new AccountMappingExample(); + AccountMappingExample.Criteria criteria = example.createCriteria(); + criteria.andEnterpriseAccountSetIDEqualTo(epAccountSetID); + criteria.andOrganizationIDEqualTo(orgID); + criteria.andIndustryIDEqualTo(industryID); + mapper.deleteByExample(example); + } + public void clearMapping(List<EnterpriseAccount> eaList, String industryID, + String orgID, Boolean isToClearAllMapping) { + if (CollectionUtils.isEmpty(eaList)) { + return; + } + List<String> codeList = eaList.stream().map(EnterpriseAccount::getCode).collect(Collectors.toList()); + if (!isToClearAllMapping) { + for (EnterpriseAccount ea : eaList) { + delMapping(ea.getCode(), ea.getEnterpriseAccountSetID(), industryID, orgID); + //鍚屾椂鍒犻櫎鎵嬪姩瀵瑰簲琛ㄧ殑瀵瑰簲鍏崇郴 + mappingManualDao.delMapping(ea.getFullName(), ea.getEnterpriseAccountSetID(), industryID, orgID); + + clearChildMapping(ea.getCode(), ea.getEnterpriseAccountSetID(), industryID, orgID, codeList); + } + } else { + delMapping(eaList.get(0).getEnterpriseAccountSetID(), industryID, orgID); + } + } + + private void clearChildMapping(String eaCode, String setId, String industryID, String orgID, List<String> codeList) { + List<EnterpriseAccount> list = epAccountDao.getEpAccountBy(eaCode, setId); + for (EnterpriseAccount row : list) { + String code = row.getCode(); + //濡傛灉鍦ㄦ湰韬殑id閲岄潰鍖呭惈浜嗭紝璇存槑绗竴娆¢亶鍘嗙殑鏃跺€欏凡缁忔洿鏂拌繃鏁版嵁搴撲簡锛屼笉闇€瑕佸啀涓€娆℃洿鏂� + if (codeList.contains(code)) continue; + //string updatesql = "UPDATE EnterpriseAccount SET StdCode=NULL WHERE ID=@ID"; + delMapping(code, setId, orgID, industryID); + clearChildMapping(row.getCode(), row.getEnterpriseAccountSetID(), industryID, orgID, codeList); + } } } diff --git a/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/AccountMappingManualDao.java b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/AccountMappingManualDao.java index 2b3505c73..ce351237a 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/AccountMappingManualDao.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/AccountMappingManualDao.java @@ -1,5 +1,6 @@ package pwc.taxtech.atms.dao.dao; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import pwc.taxtech.atms.dao.AccountMappingManualMapper; @@ -18,4 +19,14 @@ public class AccountMappingManualDao { AccountMappingManualExample example = new AccountMappingManualExample(); return Optional.ofNullable(mapper.selectByExample(example)); } + + public void delMapping(String fullName,String epAccountSetID,String orgID,String industryID){ + AccountMappingManualExample example = new AccountMappingManualExample(); + AccountMappingManualExample.Criteria criteria = example.createCriteria(); + criteria.andFullNameEqualTo(fullName); + criteria.andEnterpriseAccountSetIDEqualTo(epAccountSetID); + criteria.andOrganizationIDEqualTo(StringUtils.defaultString(orgID)); + criteria.andIndustryIDEqualTo(StringUtils.defaultString(industryID)); + mapper.deleteByExample(example); + } } diff --git a/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/EnterpriseAccountDao.java b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/EnterpriseAccountDao.java index 1b192ab93..1e4bfd118 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/EnterpriseAccountDao.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/EnterpriseAccountDao.java @@ -25,11 +25,24 @@ public class EnterpriseAccountDao { @Autowired private JdbcTemplate jdbcTemplate; - public Optional<List<EnterpriseAccount>> getByEpAccountSetId(String epAccountSetId) { + public List<EnterpriseAccount> getAll() { + EnterpriseAccountExample example = new EnterpriseAccountExample(); + return enterpriseAccountMapper.selectByExample(example); + } + + public List<EnterpriseAccount> getByEpAccountSetId(String epAccountSetId) { + EnterpriseAccountExample example = new EnterpriseAccountExample(); + EnterpriseAccountExample.Criteria criteria = example.createCriteria(); + criteria.andEnterpriseAccountSetIDEqualTo(epAccountSetId); + return enterpriseAccountMapper.selectByExample(example); + } + + public List<EnterpriseAccount> getEpAccountBy(String parentCode, String epAccountSetId) { EnterpriseAccountExample example = new EnterpriseAccountExample(); EnterpriseAccountExample.Criteria criteria = example.createCriteria(); + criteria.andParentCodeEqualTo(parentCode); criteria.andEnterpriseAccountSetIDEqualTo(epAccountSetId); - return Optional.ofNullable(enterpriseAccountMapper.selectByExample(example)); + return enterpriseAccountMapper.selectByExample(example); } public Optional<EnterpriseAccount> getEpAccount(String epAccountCode, String epAccountSetId) { diff --git a/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/OrganizationDao.java b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/OrganizationDao.java new file mode 100644 index 000000000..b65d45648 --- /dev/null +++ b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/OrganizationDao.java @@ -0,0 +1,13 @@ +package pwc.taxtech.atms.dao.dao; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import pwc.taxtech.atms.dao.OrganizationMapper; +import pwc.taxtech.atms.entitiy.Organization; + +@Service +public class OrganizationDao { + @Autowired + private OrganizationMapper organizationMapper; + +} diff --git a/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/StandardAccountDao.java b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/StandardAccountDao.java index 87eaffd3c..654d70065 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/StandardAccountDao.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/dao/dao/StandardAccountDao.java @@ -2,6 +2,7 @@ package pwc.taxtech.atms.dao.dao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import pwc.taxtech.atms.constant.enums.StdAccountEnum; import pwc.taxtech.atms.dao.StandardAccountMapper; import pwc.taxtech.atms.entitiy.StandardAccount; import pwc.taxtech.atms.entitiy.StandardAccountExample; @@ -21,5 +22,22 @@ public class StandardAccountDao { return Optional.ofNullable(standardAccountMapper.selectByExample(example)); } + public List<StandardAccount> getByCodeAndIndustryId(String code, String industryId) { + StandardAccountExample example = new StandardAccountExample(); + StandardAccountExample.Criteria criteria = example.createCriteria(); + criteria.andCodeEqualTo(code); + criteria.andIndustryIDEqualTo(industryId); + return standardAccountMapper.selectByExample(example); + } + + public List<StandardAccount> getStdAccount(StdAccountEnum.RuleType ruleType, String industryId,Boolean isActive,Boolean isLeaf) { + StandardAccountExample example = new StandardAccountExample(); + StandardAccountExample.Criteria criteria = example.createCriteria(); + criteria.andRuleTypeEqualTo(ruleType.getCode()); + criteria.andIndustryIDEqualTo(industryId); + criteria.andIsActiveEqualTo(isActive); + criteria.andIsLeafEqualTo(isLeaf); + return standardAccountMapper.selectByExample(example); + } } diff --git a/atms-api/src/main/java/pwc/taxtech/atms/dto/epaccount/AccountMapDto.java b/atms-api/src/main/java/pwc/taxtech/atms/dto/epaccount/AccountMapDto.java new file mode 100644 index 000000000..1f985feab --- /dev/null +++ b/atms-api/src/main/java/pwc/taxtech/atms/dto/epaccount/AccountMapDto.java @@ -0,0 +1,58 @@ +package pwc.taxtech.atms.dto.epaccount; + +import com.alibaba.fastjson.annotation.JSONField; + +import java.util.List; +import java.util.Map; + +public class AccountMapDto { + public String orgID; + @JSONField(name = "EnterpriseAccountCodes") + public String[] enterpriseAccountCodes; + @JSONField(name = "StandardAccountCode") + public String standardAccountCode; + @JSONField(name = "ParentAccountMappingResult") + public Map<String, List<String>> parentAccountMappingResult; + @JSONField(name = "AccountSetID") + public String accountSetID; + + public String getOrgID() { + return orgID; + } + + public void setOrgID(String orgID) { + this.orgID = orgID; + } + + public String[] getEnterpriseAccountCodes() { + return enterpriseAccountCodes; + } + + public void setEnterpriseAccountCodes(String[] enterpriseAccountCodes) { + this.enterpriseAccountCodes = enterpriseAccountCodes; + } + + public String getStandardAccountCode() { + return standardAccountCode; + } + + public void setStandardAccountCode(String standardAccountCode) { + this.standardAccountCode = standardAccountCode; + } + + public Map<String, List<String>> getParentAccountMappingResult() { + return parentAccountMappingResult; + } + + public void setParentAccountMappingResult(Map<String, List<String>> parentAccountMappingResult) { + this.parentAccountMappingResult = parentAccountMappingResult; + } + + public String getAccountSetID() { + return accountSetID; + } + + public void setAccountSetID(String accountSetID) { + this.accountSetID = accountSetID; + } +} diff --git a/atms-api/src/main/java/pwc/taxtech/atms/service/EnterpriseAccountService.java b/atms-api/src/main/java/pwc/taxtech/atms/service/EnterpriseAccountService.java index 2567901ab..f84cf76b8 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/service/EnterpriseAccountService.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/service/EnterpriseAccountService.java @@ -3,10 +3,7 @@ package pwc.taxtech.atms.service; import java.util.List; import pwc.taxtech.atms.dto.OperationResultDto; -import pwc.taxtech.atms.dto.epaccount.AccountMappingDto; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountAndValidateInfo; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountDto; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountSetDto; +import pwc.taxtech.atms.dto.epaccount.*; import pwc.taxtech.atms.entitiy.EnterpriseAccount; public interface EnterpriseAccountService { @@ -103,6 +100,10 @@ public interface EnterpriseAccountService { List<EnterpriseAccountDto> getList(String epAccountSetID, String orgId, String filterType); OperationResultDto autoMap(String orgId, String accountSetId); - + + OperationResultDto mapAccount(AccountMapDto accountMapDto); + + OperationResultDto clearMap(String[] epAccountIDs, String orgId); + } diff --git a/atms-api/src/main/java/pwc/taxtech/atms/service/StdAccountService.java b/atms-api/src/main/java/pwc/taxtech/atms/service/StdAccountService.java index e481af428..eda28f241 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/service/StdAccountService.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/service/StdAccountService.java @@ -1,10 +1,13 @@ package pwc.taxtech.atms.service; import pwc.taxtech.atms.common.ServiceException; +import pwc.taxtech.atms.dto.stdaccount.StandardAccountDto; import pwc.taxtech.atms.dto.stdaccount.StdAccountFancyTreeDto; import java.util.List; public interface StdAccountService { List<StdAccountFancyTreeDto> getStdAccountHierarchy(String orgId) throws ServiceException; + + List<StandardAccountDto> GetStdAccountLinkEtsAccount(String orgID, String accountSetID); } diff --git a/atms-api/src/main/java/pwc/taxtech/atms/service/impl/EnterpriseAccountServiceImpl.java b/atms-api/src/main/java/pwc/taxtech/atms/service/impl/EnterpriseAccountServiceImpl.java index 7329b2fec..236a4f14a 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/service/impl/EnterpriseAccountServiceImpl.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/service/impl/EnterpriseAccountServiceImpl.java @@ -3,6 +3,7 @@ package pwc.taxtech.atms.service.impl; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -17,6 +18,7 @@ import pwc.taxtech.atms.common.message.LogMessage; import pwc.taxtech.atms.constant.EnterpriseAccountConstant; import pwc.taxtech.atms.constant.IndustryConstant; import pwc.taxtech.atms.constant.enums.AccountRuleEnum; +import pwc.taxtech.atms.dao.AccountMappingManualMapper; import pwc.taxtech.atms.dao.dao.AccountMappingManualDao; import pwc.taxtech.atms.dao.dao.EnterpriseAccountDao; import pwc.taxtech.atms.dao.dao.EnterpriseAccountSetOrgDao; @@ -25,12 +27,9 @@ import pwc.taxtech.atms.dto.OperationLogDto; import pwc.taxtech.atms.dto.OperationResultDto; import pwc.taxtech.atms.dto.UpdateLogParams; import pwc.taxtech.atms.dto.ValidateInfoDto; -import pwc.taxtech.atms.dto.accountmapping.AccountMappingDao; +import pwc.taxtech.atms.dao.dao.AccountMappingDao; import pwc.taxtech.atms.dto.accountmapping.AccountMappingManualDto; -import pwc.taxtech.atms.dto.epaccount.AccountMappingDto; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountAndValidateInfo; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountDto; -import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountSetDto; +import pwc.taxtech.atms.dto.epaccount.*; import pwc.taxtech.atms.dto.stdaccount.StandardAccountDto; import pwc.taxtech.atms.entitiy.*; import pwc.taxtech.atms.service.AccountService; @@ -60,6 +59,8 @@ public class EnterpriseAccountServiceImpl extends AbstractService implements Ent private EnterpriseAccountSetOrgDao epAccountSetOrgDao; @Autowired private AccountMappingDao accountMappingDao; + @Autowired + private AccountMappingManualMapper mappingManualMapper; private Map<String, List<String>> mapParentAccountResult; @@ -718,7 +719,7 @@ public class EnterpriseAccountServiceImpl extends AbstractService implements Ent //region 鑾峰彇鍩虹淇℃伅 //鑾峰彇鎸囧畾浼佷笟璐﹀涓嬬殑浼佷笟绉戠洰闆嗗悎骞惰浆鍖栦负DTO - List<EnterpriseAccount> epAccountList = enterpriseAccountDao.getByEpAccountSetId(setOrg.getEnterpriseAccountSetID()).get(); + List<EnterpriseAccount> epAccountList = enterpriseAccountDao.getByEpAccountSetId(setOrg.getEnterpriseAccountSetID()); List<EnterpriseAccountDto> accountDtoList = epAccountList.stream().map(x -> { return CommonUtils.copyProperties(x, new EnterpriseAccountDto()); }).collect(Collectors.toList()); @@ -894,8 +895,7 @@ public class EnterpriseAccountServiceImpl extends AbstractService implements Ent accountMappingDao.mapStdAccountByCode(setOrg.getEnterpriseAccountSetID(), mappedStdAccount.getParentCode(), accountParent.getCode(), industryId, orgId, true, 0); } else { - //todo 鍏ㄥ眬鍙橀噺 -// this.MapParentAccountResult = new Dictionary<string, List<string>>(); + mapParentAccountResult = Maps.newHashMap(); List<String> codeList = Lists.newArrayList(); if (CollectionUtils.isNotEmpty(accountParentChildList)) { //鍙渶瑕佹妸瀛愮鐩姞鍏ュ叾涓竴涓氨鍙互浜� @@ -929,6 +929,224 @@ public class EnterpriseAccountServiceImpl extends AbstractService implements Ent } } + @Transactional + @Override + public OperationResultDto mapAccount(AccountMapDto accountMapDto) { + //region 鑾峰彇鐩稿叧鐨勬満鏋勫璞�,鏍囧噯绉戠洰瀵硅薄, 璐﹀瀵硅薄 + Organization organization = organizationMapper.selectByPrimaryKey(accountMapDto.getOrgID()); + String industryID; + if (organization == null) { + return OperationResultDto.error(EnterpriseAccountConstant.OrgNotExist); + } + industryID = organization.getIndustryID(); + //閫氳繃璇ユ満鏋勭殑琛屼笟ID鍜屾爣鍑嗙鐩殑Code鑾峰彇鐩稿叧鐨勬爣鍑嗙鐩璞� + List<StandardAccount> tmpList = standardAccountDao.getByCodeAndIndustryId(accountMapDto.getStandardAccountCode(), industryID); + if (CollectionUtils.isEmpty(tmpList)) { + return OperationResultDto.error(EnterpriseAccountConstant.StdCodeIsNotExist); + } + StandardAccount stdAccount = tmpList.get(0); + //閫氳繃鏈烘瀯鐨処D鑾峰彇涓庝箣鏈烘瀯鍏宠仈鐨勮处濂楀璞� + //浠ヤ笅閫氳繃鏈烘瀯ID鑾峰彇璐﹀鏄敊璇殑锛屽洜涓轰竴涓満鏋勫瓨鍦ㄥ涓处濂楋紝涓嶇煡閬撶敤鎴烽€夋嫨鐨勬槸鍝釜璐﹀ + //var accountSet = this._dbContext.Set<EnterpriseAccountSetOrg>().Where(x => x.OrganizationID == organization.ID).FirstOrDefault(); + String accountSetID = accountMapDto.getAccountSetID(); + if (StringUtils.isBlank(accountSetID)) { + return OperationResultDto.error(EnterpriseAccountConstant.AccountSetNotExist); + } + + List<EnterpriseAccount> eaList = enterpriseAccountDao.getByEpAccountSetId(accountSetID); + + //鑾峰彇璐﹀淇℃伅 + EnterpriseAccountSet accountSet = enterpriseAccountSetMapper.selectByPrimaryKey(accountSetID); + //endregion + + //region 鎵嬪姩瀵瑰簲褰撳墠鍙婃墍鏈夊瓙绉戠洰 + + for (String eAccountCode : accountMapDto.getEnterpriseAccountCodes()) { + Optional<EnterpriseAccount> opEpAccount = eaList.stream().filter(x -> StringUtils.equals(x.getCode(), eAccountCode)).findFirst(); + EnterpriseAccount eAccount; + if (opEpAccount.isPresent()) { + eAccount = opEpAccount.get(); + //region 鑾峰彇瀵瑰簲鍓嶆棫瀵瑰簲鍏崇郴鎵€鎵€瀵瑰簲鐨勬爣鍑嗙鐩紝涓轰簡璁板綍鏃ュ織 + List<AccountMapping> mappingList = accountMappingDao.getAccountMapping(eAccountCode, accountSetID, organization.getID()); + AccountMapping mapping; + String originalCode = null; + + if (CollectionUtils.isNotEmpty(mappingList)) { + mapping = mappingList.get(0); + originalCode = mapping.getStandardAccountCode(); + } + //endregion + + accountMappingDao.mapStdAccountByCode(accountSetID, stdAccount.getCode(), eAccount.getCode(), industryID, + organization.getID(), true, 0); + + //region 鏍规嵁鏂扮殑闇€姹傦紝闇€瑕佸皢鎵嬪姩瀵瑰簲鐨勮褰曡杞戒笅鏉ワ紝鍦ㄤ笅娆¤嚜鍔ㄥ搴旂殑鏃跺€欓渶瑕佷紭鍏堣€冭檻 + AccountMappingManual manual = new AccountMappingManual(); + manual.setID(CommonUtils.getUUID()); + manual.setFullName(eAccount.getFullName()); + manual.setStandardCode(stdAccount.getCode()); + manual.setOrganizationID(organization.getID()); + manual.setEnterpriseAccountSetID(accountSetID); + manual.setUpdateBy(authUserHelper.getCurrentAuditor()); + manual.setUpdateTime(new Date()); + addManualMappingRecord(manual); + //endregion + + //1. 濡傛灉灏嗘爣鍑嗙鐩搴斿埌浼佷笟绉戠洰鐨勭埗绾э紝閭d箞璇ヤ紒涓氱鐩殑瀛愮骇閮藉搴斿埌璇ユ爣鍑嗙鐩� + updateManualMapChildAccount(eaList, eAccount, stdAccount, accountSetID, industryID, organization.getID()); + + //region 娣诲姞鏃ュ織 + OperationLogDto operationLogDto = new OperationLogDto(); + operationLogDto.setOperationContent(eAccount.getCode() + CommonConstants.DashSignSeparator + eAccount.getName()); + operationLogDto.setAction(OperationAction.ManualMapping.value()); + operationLogDto.setOperationObject(organization.getName() + "-" + accountSet.getName()); + operationLogDto.setOriginalState(StringUtils.isBlank(originalCode) ? StringUtils.EMPTY : originalCode + + CommonConstants.DashSignSeparator + stdAccount.getName()); + operationLogDto.setUpdateState(stdAccount.getCode() + CommonConstants.DashSignSeparator + stdAccount.getName()); + operationLogDto.setModule(OperationModule.SubjectCorresponding.value()); + operationLogDto.setComment(StringUtils.EMPTY); + operationLogDto.setLogType(OperateLogType.OperationLogSubject.value()); + operationLogService.addOperationLog(operationLogDto); + //endregion + } + } + //endregion + + //region 鎵嬪姩瀵瑰簲褰撳墠鐨勬墍鏈夌埗绾х鐩� + //娓呯┖ParentAccountMapResult + this.mapParentAccountResult = Maps.newHashMap(); + mapAccountUpdateParent(Lists.newArrayList(accountMapDto.getEnterpriseAccountCodes()), accountSetID, industryID, + organization.getID(), true); + + //endregion + AccountMapDto mapDto = new AccountMapDto(); + mapDto.setParentAccountMappingResult(this.mapParentAccountResult); + return OperationResultDto.success(mapDto); + } + + @Override + public OperationResultDto clearMap(String[] epAccountIDs, String orgId) { + if (epAccountIDs != null && StringUtils.isNotBlank(orgId)) { + boolean isToClearAllMapping = false; + Organization organization = organizationMapper.selectByPrimaryKey(orgId); + if (organization == null) { + return OperationResultDto.error(EnterpriseAccountConstant.OrgNotExist); + } + String industryID = organization.getIndustryID(); + List<EnterpriseAccount> eaAllList = enterpriseAccountDao.getAll(); + List<String> enterpriseAccountIDs = Lists.newArrayList(epAccountIDs); + List<EnterpriseAccount> enterpriseAccountList = eaAllList.stream().filter(x -> enterpriseAccountIDs.contains(x.getID())).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(enterpriseAccountList)) { + //鑾峰彇璇ヨ处濂椾笅鏈夊灏戜紒涓氱鐩� + String enterprisetAccountSetId = enterpriseAccountList.get(0).getEnterpriseAccountSetID(); + long countOfEnterpriseAccount = eaAllList.stream().filter(x -> StringUtils.equals(x.getEnterpriseAccountSetID(), + enterprisetAccountSetId)).count(); + + if (countOfEnterpriseAccount == enterpriseAccountList.size()) { + isToClearAllMapping = true; + } + accountMappingDao.clearMapping(enterpriseAccountList, industryID, orgId, isToClearAllMapping); + //濡傛灉璇ヨ处濂椾笅鐨勪紒涓氱鐩拰浼犺繘鏉ラ渶瑕佸彇娑堢殑涓暟涓€鏍凤紝璇存槑鏄叏閮ㄥ彇娑堬紝娌℃湁蹇呴』瑕佸啀鍘绘洿鏂扮埗绾х姸鎬� + if (!isToClearAllMapping) { + //娓呯┖ParentAccountMapResult + this.mapParentAccountResult = Maps.newHashMap(); + clearParentMapping(eaAllList, enterpriseAccountList, enterprisetAccountSetId, industryID, orgId); + } + //region 娣诲姞鏃ュ織 + String enterpriseAccountID = enterpriseAccountIDs.get(0); + //鑾峰彇璐﹀淇℃伅 + EnterpriseAccountSet accountSet = enterpriseAccountSetMapper.selectByPrimaryKey(enterprisetAccountSetId); + //璁拌浇鍙栨秷鐨勪紒涓氱鐩� + String clearEACodeList = StringUtils.join(enterpriseAccountList.stream().map(x -> x.getCode()) + .collect(Collectors.toList()), ","); + + OperationLogDto operationLogDto = new OperationLogDto(); + operationLogDto.setOperationContent(EnterpriseAccountConstant.SubjectCorresponding); + operationLogDto.setAction(OperationAction.CancelMapping.value()); + operationLogDto.setOperationObject(accountSet != null ? organization.getName() + "-" + accountSet.getName() + : organization.getName()); + operationLogDto.setOriginalState(StringUtils.EMPTY); + operationLogDto.setUpdateState(StringUtils.EMPTY); + operationLogDto.setModule(OperationModule.SubjectCorresponding.value()); + operationLogDto.setComment(isToClearAllMapping ? StringUtils.EMPTY : clearEACodeList); + operationLogDto.setLogType(OperateLogType.OperationLogSubject.value()); + operationLogService.addOperationLog(operationLogDto); + //endregion + + AccountMapDto mapDto = new AccountMapDto(); + mapDto.setParentAccountMappingResult(this.mapParentAccountResult); + return OperationResultDto.success(mapDto); + } + } + return OperationResultDto.error(EnterpriseAccountConstant.NoAccountNeedClear); + } + + private void clearParentMapping(List<EnterpriseAccount> eaAllList, List<EnterpriseAccount> eaClearList, + String enterpriseAccountSetID, String industryID, String orgID) { + for (EnterpriseAccount ea : eaClearList) { + Optional<EnterpriseAccount> eaParentOp = eaAllList.stream().filter(x -> StringUtils.equals(x.getCode(), + ea.getParentCode()) && StringUtils.equals(x.getEnterpriseAccountSetID(), enterpriseAccountSetID)).findFirst(); + if (eaParentOp.isPresent()) { + EnterpriseAccount eaParent = eaParentOp.get(); + //鍒犻櫎绉戠洰瀵瑰簲琛ㄩ噷闈㈢殑瀵瑰簲鍏崇郴 + accountMappingDao.delMapping(eaParent.getCode(), enterpriseAccountSetID, orgID, industryID); + //娣诲姞鍒發ist涓负浜嗘洿鏂癠I鐣岄潰 + addMapParentAccountResult(eaParent.getCode(), Lists.newArrayList(null, StringUtils.EMPTY)); + //鍒犻櫎鐖剁骇浠ュ強鏇撮珮灞傜殑瀵瑰簲鍏崇郴 + clearParentMappingRecursion(eaAllList, eaParent, enterpriseAccountSetID, industryID, orgID); + } + } + } + + private void clearParentMappingRecursion(List<EnterpriseAccount> eaAllList, EnterpriseAccount eaParent, + String enterpriseAccountSetID, String industryID, String orgID) { + if (StringUtils.isNotBlank(eaParent.getParentCode())) { + Optional<EnterpriseAccount> parentAccountOp = eaAllList.stream().filter(x -> StringUtils.equals(x.getCode(), + eaParent.getParentCode()) && StringUtils.equals(x.getEnterpriseAccountSetID(), enterpriseAccountSetID)).findFirst(); + if (parentAccountOp.isPresent()) { + EnterpriseAccount parentAccount = parentAccountOp.get(); + //鍒犻櫎绉戠洰瀵瑰簲琛ㄩ噷闈㈢殑瀵瑰簲鍏崇郴 + accountMappingDao.delMapping(parentAccount.getCode(), enterpriseAccountSetID, orgID, industryID); + //娣诲姞鍒發ist涓负浜嗘洿鏂癠I鐣岄潰 + addMapParentAccountResult(parentAccount.getCode(), Lists.newArrayList(null, StringUtils.EMPTY)); + clearParentMappingRecursion(eaAllList, parentAccount, enterpriseAccountSetID, industryID, orgID); + } + } + } + + private void updateManualMapChildAccount(List<EnterpriseAccount> eaList, EnterpriseAccount eAccountCode, StandardAccount stdAccount, + String accountSetID, String industryID, String orgID) { + List<EnterpriseAccount> eAccount = eaList.stream().filter(x -> StringUtils.equals(x.getParentCode(), eAccountCode.getCode())) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(eAccount)) { + for (EnterpriseAccount ea : eAccount) { + accountMappingDao.mapStdAccountByCode(accountSetID, stdAccount.getCode(), ea.getCode(), industryID, orgID, + true, 0); + //region 鏍规嵁鏂扮殑闇€姹傦紝闇€瑕佸皢鎵嬪姩瀵瑰簲鐨勮褰曡杞戒笅鏉ワ紝鍦ㄤ笅娆¤嚜鍔ㄥ搴旂殑鏃跺€欓渶瑕佷紭鍏堣€冭檻 + AccountMappingManual manual = new AccountMappingManual(); + manual.setID(CommonUtils.getUUID()); + manual.setFullName(ea.getFullName()); + manual.setStandardCode(stdAccount.getCode()); + manual.setOrganizationID(orgID); + manual.setEnterpriseAccountSetID(accountSetID); + manual.setIndustryID(industryID); + manual.setUpdateBy(authUserHelper.getCurrentAuditor()); + manual.setUpdateTime(new Date()); + addManualMappingRecord(manual); + //endregion + updateManualMapChildAccount(eaList, ea, stdAccount, accountSetID, industryID, orgID); + } + } + } + + public void addManualMappingRecord(AccountMappingManual manualMapping) + { + mappingManualDao.delMapping(manualMapping.getFullName(), manualMapping.getEnterpriseAccountSetID(), + manualMapping.getOrganizationID(), manualMapping.getIndustryID()); + mappingManualMapper.insertSelective(manualMapping); + } + public List<EnterpriseAccountDto> getAllActiveAccounts(String orgID, String industryId, String accountSetId, Boolean isActive) { List<Map<String, Object>> list = enterpriseAccountDao.selectAccounts(industryId, accountSetId, orgID, EnterpriseAccountConstant.InvalidId, EnterpriseAccountConstant.InvalidId, EnterpriseAccountConstant.InvalidId, isActive); @@ -981,9 +1199,7 @@ public class EnterpriseAccountServiceImpl extends AbstractService implements Ent } if (exceptionFlag) { - //todo -// this.mapParentAccountResult = new Dictionary<string, List<string>>(); - + this.mapParentAccountResult = Maps.newHashMap(); mapAccountUpdateParent(enterpriseCodeList, accountSetId, industryID, orgID, false); } diff --git a/atms-api/src/main/java/pwc/taxtech/atms/service/impl/StdAccountServiceImpl.java b/atms-api/src/main/java/pwc/taxtech/atms/service/impl/StdAccountServiceImpl.java index 3391d4bad..3e3f3be1e 100644 --- a/atms-api/src/main/java/pwc/taxtech/atms/service/impl/StdAccountServiceImpl.java +++ b/atms-api/src/main/java/pwc/taxtech/atms/service/impl/StdAccountServiceImpl.java @@ -7,9 +7,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import pwc.taxtech.atms.common.CommonUtils; import pwc.taxtech.atms.common.ServiceException; +import pwc.taxtech.atms.constant.EnterpriseAccountConstant; import pwc.taxtech.atms.constant.enums.StdAccountEnum; import pwc.taxtech.atms.dao.OrganizationMapper; import pwc.taxtech.atms.dao.StandardAccountMapper; +import pwc.taxtech.atms.dao.dao.StandardAccountDao; +import pwc.taxtech.atms.dto.OperationResultDto; +import pwc.taxtech.atms.dto.stdaccount.StandardAccountDto; import pwc.taxtech.atms.dto.stdaccount.StdAccountFancyTreeDto; import pwc.taxtech.atms.entitiy.Organization; import pwc.taxtech.atms.entitiy.StandardAccount; @@ -30,6 +34,8 @@ public class StdAccountServiceImpl extends BaseService implements StdAccountServ @Autowired private OrganizationMapper organizationMapper; + @Autowired + private StandardAccountDao standardAccountDao; @Override public List<StdAccountFancyTreeDto> getStdAccountHierarchy(String orgId) throws ServiceException { @@ -73,6 +79,28 @@ public class StdAccountServiceImpl extends BaseService implements StdAccountServ return resultList; } + @Override + public List<StandardAccountDto> GetStdAccountLinkEtsAccount(String orgID, String accountSetID) { + if (StringUtils.isBlank(orgID)) { + return Collections.emptyList(); + } + //todo + Organization organization = organizationMapper.selectByPrimaryKey(orgID); + if (organization == null) { + return Collections.emptyList(); + } + String industryID = organization.getIndustryID(); + + List<StandardAccount> stdAccounts = standardAccountDao.getStdAccount(StdAccountEnum.RuleType.TWO, industryID, true, true); + + if (CollectionUtils.isEmpty(stdAccounts)) { + stdAccounts = standardAccountDao.getStdAccount(StdAccountEnum.RuleType.TWO, "0", true, true); + } + + + return Collections.emptyList(); + } + private void getSubStdAccount(StdAccountFancyTreeDto node, List<StandardAccount> allList) { List<StdAccountFancyTreeDto> childList = allList.stream().filter(x -> StringUtils.equals(node.getCode(), x.getParentCode())) .map(this::rotateToDto).collect(Collectors.toList()); -- 2.18.0