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