RuleEngineeConfigServiceImpl.java 11.7 KB
Newer Older
1 2
package pwc.taxtech.atms.service.impl;

frank.xa.zhang's avatar
frank.xa.zhang committed
3
import org.apache.commons.lang3.StringUtils;
4 5 6 7 8 9 10
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import pwc.taxtech.atms.common.AuthUserHelper;
import pwc.taxtech.atms.common.CommonUtils;
import pwc.taxtech.atms.common.OperateLogType;
import pwc.taxtech.atms.common.OperationModule;
11 12
import pwc.taxtech.atms.dpo.OrganizationDto;
import pwc.taxtech.atms.dpo.TaxRuleSettingDto;
13 14 15 16
import pwc.taxtech.atms.dto.BatchUpdateTaxRuleDto;
import pwc.taxtech.atms.dto.TaxPayerReportRuleDto;
import pwc.taxtech.atms.dto.TaxPayerReportRuleDtoOperation;
import pwc.taxtech.atms.dto.TaxRuleSettingOperation;
17 18 19 20 21 22 23
import pwc.taxtech.atms.entity.OrganizationServiceTemplateGroup;
import pwc.taxtech.atms.entity.OrganizationServiceTemplateGroupExample;
import pwc.taxtech.atms.entity.TaxPayerReportRule;
import pwc.taxtech.atms.entity.TaxPayerReportRuleExample;
import pwc.taxtech.atms.entity.TaxRuleSetting;
import pwc.taxtech.atms.entity.TaxRuleSettingOrganization;
import pwc.taxtech.atms.entity.TaxRuleSettingOrganizationExample;
24 25 26 27 28 29 30

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
31 32

@Service
33 34 35
public class RuleEngineeConfigServiceImpl extends AbstractService {

    @Autowired
36
    OperationLogServiceImpl operationService;
37 38 39 40 41 42 43 44 45 46 47

    @Autowired
    private AuthUserHelper authUserHelper;

    public List<TaxPayerReportRuleDto> getTaxPayerReportMapping() {
        List<String> orgIds = organizationMapper.selectOnlyIdAndParentId().stream().map(OrganizationDto::getId)
                .collect(Collectors.toList());
        List<TaxPayerReportRule> rules = taxPayerReportRuleMapper.selectByExample(new TaxPayerReportRuleExample());
        List<TaxPayerReportRule> filterRules = new ArrayList<>();

        for (TaxPayerReportRule rule : rules) {
48
            boolean isAtLeastOrgExisted = false;
49 50 51 52 53 54 55 56
            if (StringUtils.isNotBlank(rule.getOrganizationId())) {
                String[] selectedOrgIds = rule.getOrganizationId().split(",");

                for (String selectedOrgId : selectedOrgIds) {
                    if (orgIds.contains(selectedOrgId)) {
                        isAtLeastOrgExisted = true;
                    }
                }
57 58 59
            }
            if (isAtLeastOrgExisted || rule.getIsDefault()) {
                filterRules.add(rule);
60 61 62 63 64 65 66
            }
        }

        List<TaxPayerReportRuleDto> dtoList = new ArrayList<>();
        for (TaxPayerReportRule rule : filterRules) {
            TaxPayerReportRuleDto ruleDto = new TaxPayerReportRuleDto();
            CommonUtils.copyProperties(rule, ruleDto);
67 68 69
            if(rule.getOrganizationId()!=null) {
                ruleDto.setOrgs(new ArrayList<>(Arrays.asList(rule.getOrganizationId().split(","))));
            }
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
            dtoList.add(ruleDto);
        }
        return dtoList;
    }

    public List<TaxRuleSettingDto> getTaxRuleSetting() {
        List<TaxRuleSettingDto> trsdList = taxRuleSettingMapper.GetTaxRuleSetting();

        List<String> orgIds = trsdList.stream().map(TaxRuleSettingDto::getOrganizationId).collect(Collectors.toList());
        for (TaxRuleSettingDto trsd : trsdList) {
            trsd.setOrgs(orgIds);
        }
        return trsdList;
    }

85
    @Transactional
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
    public void savetaxrulesettings(BatchUpdateTaxRuleDto batchUpdateTaxRule) {
        for (TaxRuleSettingOperation trso : batchUpdateTaxRule.getTaxRuleSettingOperations()) {
            TaxRuleSetting taxRuleSetting = new TaxRuleSetting();
            CommonUtils.copyProperties(trso.getTaxRuleSetting(), taxRuleSetting);
            taxRuleSetting.setTaxBase(String.valueOf(Integer.parseInt(trso.getTaxRuleSetting().getTaxBase()) / 100));
            taxRuleSetting.setCreateTime(new Date());
            taxRuleSetting.setUpdateTime(new Date());

            if ("Add".equals(trso.getAction())) {
                SaveTaxRuleSettingOrg(trso, taxRuleSetting, authUserHelper.getCurrentUserId(), null);
                taxRuleSettingMapper.insert(taxRuleSetting);
            } else if ("Update".equals(trso.getAction())) {
                TaxRuleSettingOrganizationExample trsoExample = new TaxRuleSettingOrganizationExample();
                trsoExample.createCriteria().andTaxSettingIdEqualTo(taxRuleSetting.getId());
                taxRuleSettingOrganizationMapper.deleteByExample(trsoExample);
                TaxRuleSetting old = taxRuleSettingMapper.selectByPrimaryKey(taxRuleSetting.getId());
                SaveTaxRuleSettingOrg(trso, taxRuleSetting, authUserHelper.getCurrentUserId(), old);
                old.setIsDefault(taxRuleSetting.getIsDefault());
                old.setName(taxRuleSetting.getName());
                old.setTaxBase(taxRuleSetting.getTaxBase());
                old.setTaxRate(taxRuleSetting.getTaxRate());
                old.setGroupName(taxRuleSetting.getGroupName());
                old.setCreateTime(taxRuleSetting.getCreateTime());
                old.setUpdateTime(taxRuleSetting.getUpdateTime());
                taxRuleSettingMapper.updateByPrimaryKey(old);
            } else if ("Delete".equals(trso.getAction())) {
                TaxRuleSettingOrganizationExample trsoExample = new TaxRuleSettingOrganizationExample();
                trsoExample.createCriteria().andTaxSettingIdEqualTo(taxRuleSetting.getId());
                taxRuleSettingOrganizationMapper.deleteByExample(trsoExample);

                taxRuleSettingMapper.deleteByPrimaryKey(taxRuleSetting.getId());
                operationService.deleteDataAddLog(taxRuleSetting, OperationModule.RuleEngineConfig, authUserHelper.getCurrentUserId(),
                        "DeleteRuleEngineConfiguration", "", taxRuleSetting.getName(),
                        OperateLogType.OperationLogRuleEngine);
            }
        }

        for (TaxPayerReportRuleDtoOperation tprrdo : batchUpdateTaxRule.getTaxPayerReportRuleOperations()) {
            TaxPayerReportRuleDto reportDto = tprrdo.getTaxPayerReportRule();
            TaxPayerReportRule taxPayerReportRule = new TaxPayerReportRule();
            CommonUtils.copyProperties(reportDto, taxPayerReportRule);
            StringBuilder sb = new StringBuilder();
            for (String s : reportDto.getOrgs()) {
                sb.append(s).append(",");
            }
            String tempStr = sb.toString();
132
            taxPayerReportRule.setOrganizationId(tempStr.substring(0, tempStr.length() - 1));
133 134 135 136
            taxPayerReportRule.setCreateTime(new Date());
            taxPayerReportRule.setUpdateTime(new Date());
            SaveOrganizationServiceTemplateGroup(taxPayerReportRule, tprrdo.getAction());
            if ("Add".equals(tprrdo.getAction())) {
137
                taxPayerReportRule.setId(distributedIdService.nextId());
138 139
                taxPayerReportRuleMapper.insert(taxPayerReportRule);
            } else if ("Update".equals(tprrdo.getAction())) {
140
                TaxPayerReportRule old = taxPayerReportRuleMapper.selectByPrimaryKey(Long.parseLong(reportDto.getId()));
141 142 143 144 145 146 147 148 149 150 151
                TaxPayerReportRule original = new TaxPayerReportRule();
                CommonUtils.copyProperties(old, original);

                old.setIsDefault(taxPayerReportRule.getIsDefault());
                old.setOrganizationId(taxPayerReportRule.getOrganizationId());
                old.setTaxPayerType(taxPayerReportRule.getTaxPayerType());
                old.setTemplateGroupId(taxPayerReportRule.getTemplateGroupId());
                old.setCreateTime(taxPayerReportRule.getCreateTime());
                old.setUpdateTime(taxPayerReportRule.getUpdateTime());

                taxPayerReportRuleMapper.updateByPrimaryKey(old);
152 153
//                operationService.updateDataAddLog(original, taxPayerReportRule, OperationModule.RuleEngineConfig, authUserHelper.getCurrentUserId(),
//                        "UpdateRuleEngineConfiguration", "纳税类型", taxPayerReportRule.getIsDefault() ? "默认纳税类型或默认纳税报表" : "纳税类型更新特殊机构", OperateLogType.OperationLogRuleEngine);
154 155 156

            } else if ("Delete".equals(tprrdo.getAction())) {
                taxPayerReportRuleMapper.deleteByPrimaryKey(taxPayerReportRule.getId());
157 158
//                operationService.deleteDataAddLog(reportDto, OperationModule.RuleEngineConfig, authUserHelper.getCurrentUserId(),
//                        "DeleteRuleEngineConfiguration", "纳税类型", "纳税类型删除特殊机构", OperateLogType.OperationLogRuleEngine);
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
            }
        }
    }

    private void SaveTaxRuleSettingOrg(TaxRuleSettingOperation taxRuleSettingOperation, TaxRuleSetting taxRuleSetting,
                                       String userName, TaxRuleSetting old) {
        for (String org : taxRuleSettingOperation.getTaxRuleSetting().getOrgs()) {
            TaxRuleSettingOrganization trso = new TaxRuleSettingOrganization();
            trso.setId(distributedIdService.nextId());
            trso.setOrganizationId(org);
            trso.setTaxSettingId(taxRuleSetting.getId());
            trso.setUpdateTime(new Date());
            trso.setCreateTime(new Date());
            if ("Add".equals(taxRuleSettingOperation.getAction())) {
                operationLogService.addDataAddLog(taxRuleSetting, OperationModule.RuleEngineConfig, userName,
                        "AddRuleEngineConfiguration", taxRuleSetting.getName() + org, taxRuleSetting.getName(),
                        OperateLogType.OperationLogRuleEngine);
            } else {
                TaxRuleSetting original = new TaxRuleSetting();
                CommonUtils.copyProperties(old, original);
                operationService.updateDataAddLog(original, taxRuleSetting, OperationModule.RuleEngineConfig, userName,
                        "UpdateRuleEngineConfiguration", taxRuleSetting.getName(),
                        taxRuleSetting.getIsDefault() ? "默认税基或默认税率" : taxRuleSetting.getName(),
                        OperateLogType.OperationLogRuleEngine);
            }
        }
    }

    private void SaveOrganizationServiceTemplateGroup(TaxPayerReportRule taxPayerReportRule, String action) {
        OrganizationServiceTemplateGroupExample example = new OrganizationServiceTemplateGroupExample();
        example.createCriteria().andOrganizationIdEqualTo(taxPayerReportRule.getOrganizationId()).andServiceTypeIdEqualTo("2");
        Optional<OrganizationServiceTemplateGroup> thisOrgTemplate = organizationServiceTemplateGroupMapper.selectByExample(example).stream().findFirst();

        if ("Delete".equals(action)) {
            thisOrgTemplate.ifPresent(organizationServiceTemplateGroup -> organizationServiceTemplateGroupMapper.deleteByPrimaryKey(organizationServiceTemplateGroup.getId()));
        } else {
            if (thisOrgTemplate.isPresent()) {
                OrganizationServiceTemplateGroup organizationServiceTemplateGroup = thisOrgTemplate.get();
                if (organizationServiceTemplateGroup.getTemplateGroupId().equals(taxPayerReportRule.getTemplateGroupId())) {
                    //不用改
                } else {
                    organizationServiceTemplateGroup.setTemplateGroupId(taxPayerReportRule.getTemplateGroupId());
                    organizationServiceTemplateGroupMapper.updateByPrimaryKeySelective(organizationServiceTemplateGroup);
                }
            } else {
                OrganizationServiceTemplateGroup entity = new OrganizationServiceTemplateGroup();

                entity.setId(distributedIdService.nextId());
                entity.setServiceTypeId("2");
                entity.setTemplateGroupId(taxPayerReportRule.getTemplateGroupId());
                entity.setOrganizationId(taxPayerReportRule.getOrganizationId());
                organizationServiceTemplateGroupMapper.insert(entity);
            }
        }
    }
214 215

}