AccountMappingDao.java 6.63 KB
Newer Older
1
package pwc.taxtech.atms.dao;
eddie.woo's avatar
eddie.woo committed
2 3 4 5 6 7 8

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pwc.taxtech.atms.common.CommonConstants;
import pwc.taxtech.atms.common.CommonUtils;
9 10 11
import pwc.taxtech.atms.entity.AccountMapping;
import pwc.taxtech.atms.entity.AccountMappingExample;
import pwc.taxtech.atms.entity.EnterpriseAccount;
eddie.woo's avatar
eddie.woo committed
12 13

import java.util.List;
eddie.woo's avatar
eddie.woo committed
14
import java.util.stream.Collectors;
eddie.woo's avatar
eddie.woo committed
15 16 17 18 19 20 21

@Service
public class AccountMappingDao {
    @Autowired
    AccountMappingMapper mapper;
    @Autowired
    EnterpriseAccountDao epAccountDao;
eddie.woo's avatar
eddie.woo committed
22 23
    @Autowired
    AccountMappingManualDao mappingManualDao;
eddie.woo's avatar
eddie.woo committed
24 25 26 27 28 29 30 31 32 33

    public void delByEpAccountCodeList(List<String> codeList) {
        if (CollectionUtils.isNotEmpty(codeList)) {
            AccountMappingExample example = new AccountMappingExample();
            AccountMappingExample.Criteria criteria = example.createCriteria();
            criteria.andEnterpriseAccountCodeIn(codeList);
            mapper.deleteByExample(example);
        }
    }

34
    public boolean isStdExists(String accountSetId, String enterpirseAccountCode, String industryId, String orgId) {
eddie.woo's avatar
eddie.woo committed
35 36 37
        AccountMappingExample example = new AccountMappingExample();
        AccountMappingExample.Criteria criteria = example.createCriteria();
        criteria.andEnterpriseAccountCodeEqualTo(enterpirseAccountCode);
38 39 40
        criteria.andEnterpriseAccountSetIdEqualTo(accountSetId);
        criteria.andOrganizationIdEqualTo(orgId);
        criteria.andIndustryIdEqualTo(industryId);
eddie.woo's avatar
eddie.woo committed
41 42 43 44 45
        criteria.andStandardAccountCodeNotEqualTo(CommonConstants.EmptyStdCode);
        return mapper.countByExample(example) > 0;
    }

    private void updateToTable(String accountCode, String accountSetId, String stdAccountCode,
46
                               String industryId, String enterpriseAccountId, String orgId) {
eddie.woo's avatar
eddie.woo committed
47 48 49
        AccountMappingExample example = new AccountMappingExample();
        AccountMappingExample.Criteria criteria = example.createCriteria();
        criteria.andEnterpriseAccountCodeEqualTo(accountCode);
50 51 52
        criteria.andEnterpriseAccountSetIdEqualTo(accountSetId);
        criteria.andOrganizationIdEqualTo(orgId);
        criteria.andIndustryIdEqualTo(industryId);
eddie.woo's avatar
eddie.woo committed
53 54 55
        mapper.deleteByExample(example);

        AccountMapping mapping = new AccountMapping();
56
        mapping.setId(CommonUtils.getUUID());
eddie.woo's avatar
eddie.woo committed
57
        mapping.setEnterpriseAccountCode(accountCode);
58 59
        mapping.setEnterpriseAccountSetId(accountSetId);
        mapping.setOrganizationId(orgId);
eddie.woo's avatar
eddie.woo committed
60
        mapping.setStandardAccountCode(stdAccountCode);
61
        mapping.setIndustryId(industryId);
eddie.woo's avatar
eddie.woo committed
62 63 64 65
        mapper.insertSelective(mapping);
    }

    public void mapStdAccountByCode(String accountSetId, String stdAccountCode, String accountCode,
66
                                    String industryId, String orgId, boolean bOverwrite, int acctLevel) {
eddie.woo's avatar
eddie.woo committed
67

68
        String enterpriseAccountId = epAccountDao.getEpAccountId(accountCode, accountSetId);
eddie.woo's avatar
eddie.woo committed
69 70 71 72 73 74

        if (StringUtils.isBlank(stdAccountCode))
            stdAccountCode = CommonConstants.NullStdCode;

        //region 新逻辑
        if (!bOverwrite) {
75 76
            if (!isStdExists(accountSetId, accountCode, industryId, orgId)) {
                updateToTable(accountCode, accountSetId, stdAccountCode, industryId, enterpriseAccountId, orgId);
eddie.woo's avatar
eddie.woo committed
77 78
            }
        } else {
79
            updateToTable(accountCode, accountSetId, stdAccountCode, industryId, enterpriseAccountId, orgId);
eddie.woo's avatar
eddie.woo committed
80 81
        }
        //endregion
eddie.woo's avatar
eddie.woo committed
82 83
    }

84
    public List<AccountMapping> getAccountMapping(String epAccountCode, String epAccountSetId, String orgId) {
eddie.woo's avatar
eddie.woo committed
85 86 87
        AccountMappingExample example = new AccountMappingExample();
        AccountMappingExample.Criteria criteria = example.createCriteria();
        criteria.andEnterpriseAccountCodeEqualTo(epAccountCode);
88 89
        criteria.andEnterpriseAccountSetIdEqualTo(epAccountSetId);
        criteria.andOrganizationIdEqualTo(orgId);
eddie.woo's avatar
eddie.woo committed
90 91 92
        return mapper.selectByExample(example);
    }

93
    public void delMapping(String epAccountCode, String epAccountSetId, String orgId, String industryId) {
eddie.woo's avatar
eddie.woo committed
94 95 96
        AccountMappingExample example = new AccountMappingExample();
        AccountMappingExample.Criteria criteria = example.createCriteria();
        criteria.andEnterpriseAccountCodeEqualTo(epAccountCode);
97 98 99
        criteria.andEnterpriseAccountSetIdEqualTo(epAccountSetId);
        criteria.andOrganizationIdEqualTo(orgId);
        criteria.andIndustryIdEqualTo(industryId);
eddie.woo's avatar
eddie.woo committed
100 101 102
        mapper.deleteByExample(example);
    }

103
    public void delMapping(String epAccountSetId, String orgId, String industryId) {
eddie.woo's avatar
eddie.woo committed
104 105
        AccountMappingExample example = new AccountMappingExample();
        AccountMappingExample.Criteria criteria = example.createCriteria();
106 107 108
        criteria.andEnterpriseAccountSetIdEqualTo(epAccountSetId);
        criteria.andOrganizationIdEqualTo(orgId);
        criteria.andIndustryIdEqualTo(industryId);
eddie.woo's avatar
eddie.woo committed
109 110
        mapper.deleteByExample(example);
    }
eddie.woo's avatar
eddie.woo committed
111

112 113
    public void clearMapping(List<EnterpriseAccount> eaList, String industryId,
                             String orgId, Boolean isToClearAllMapping) {
eddie.woo's avatar
eddie.woo committed
114 115 116 117 118 119
        if (CollectionUtils.isEmpty(eaList)) {
            return;
        }
        List<String> codeList = eaList.stream().map(EnterpriseAccount::getCode).collect(Collectors.toList());
        if (!isToClearAllMapping) {
            for (EnterpriseAccount ea : eaList) {
120
                delMapping(ea.getCode(), ea.getEnterpriseAccountSetId(), industryId, orgId);
eddie.woo's avatar
eddie.woo committed
121
                //同时删除手动对应表的对应关系
122
                mappingManualDao.delMapping(ea.getFullName(), ea.getEnterpriseAccountSetId(), industryId, orgId);
eddie.woo's avatar
eddie.woo committed
123

124
                clearChildMapping(ea.getCode(), ea.getEnterpriseAccountSetId(), industryId, orgId, codeList);
eddie.woo's avatar
eddie.woo committed
125 126
            }
        } else {
127
            delMapping(eaList.get(0).getEnterpriseAccountSetId(), industryId, orgId);
eddie.woo's avatar
eddie.woo committed
128 129 130
        }
    }

131
    private void clearChildMapping(String eaCode, String setId, String industryId, String orgId, List<String> codeList) {
eddie.woo's avatar
eddie.woo committed
132 133 134 135 136
        List<EnterpriseAccount> list = epAccountDao.getEpAccountBy(eaCode, setId);
        for (EnterpriseAccount row : list) {
            String code = row.getCode();
            //如果在本身的id里面包含了,说明第一次遍历的时候已经更新过数据库了,不需要再一次更新
            if (codeList.contains(code)) continue;
137 138 139
            //string updatesql = "UPDATE EnterpriseAccount SET StdCode=NULL WHERE id=@id";
            delMapping(code, setId, orgId, industryId);
            clearChildMapping(row.getCode(), row.getEnterpriseAccountSetId(), industryId, orgId, codeList);
eddie.woo's avatar
eddie.woo committed
140
        }
eddie.woo's avatar
eddie.woo committed
141 142
    }
}