CellTemplateServiceImpl.java 16.6 KB
Newer Older
1 2
package pwc.taxtech.atms.service.impl;

3
import org.apache.commons.lang3.StringUtils;
4
import org.springframework.stereotype.Service;
5
import org.springframework.transaction.annotation.Propagation;
6 7 8 9
import org.springframework.transaction.annotation.Transactional;
import pwc.taxtech.atms.common.ApplyScope;
import pwc.taxtech.atms.common.CommonUtils;
import pwc.taxtech.atms.constant.enums.CellDataSourceType;
10
import pwc.taxtech.atms.dto.CellTemplateConfigDto;
11
import pwc.taxtech.atms.dto.OperationResultDto;
12 13 14 15 16 17 18 19 20
import pwc.taxtech.atms.entity.CellTemplate;
import pwc.taxtech.atms.entity.CellTemplateConfig;
import pwc.taxtech.atms.entity.CellTemplateConfigExample;
import pwc.taxtech.atms.entity.CellTemplateExample;
import pwc.taxtech.atms.entity.FormulaConfig;
import pwc.taxtech.atms.entity.FormulaConfigExample;
import pwc.taxtech.atms.entity.KeyValueConfig;
import pwc.taxtech.atms.entity.KeyValueConfigExample;
import pwc.taxtech.atms.entity.KeyValueReference;
21 22

import java.util.ArrayList;
23
import java.util.Collections;
24
import java.util.Date;
25 26 27 28
import java.util.List;
import java.util.stream.Collectors;

@Service
29
public class CellTemplateServiceImpl extends AbstractService {
30

31
    public OperationResultDto<List<CellTemplateConfigDto>> getCellConfigList(Long templateId) {
32
        OperationResultDto<List<CellTemplateConfigDto>> result = new OperationResultDto<>();
33
        CellTemplateExample example = new CellTemplateExample();
34
        example.createCriteria().andReportTemplateIdEqualTo(templateId);
35
        List<CellTemplate> cellTemplateList = cellTemplateMapper.selectByExample(example);
36
        List<CellTemplateConfig> configList = cellTemplateConfigMapper.getCellTemplateConfigByTemplateId(templateId);
37
        if (cellTemplateList.isEmpty()) {
38
            result.setData(Collections.emptyList());
39 40 41
            return result;
        }

42
        List<CellTemplateConfigDto> rData = new ArrayList<>();
43
        for (CellTemplate x : cellTemplateList) {
44 45 46 47 48 49
            CellTemplateConfigDto cellTemplateConfigDto = getConfigDto(x, configList.stream()
                    .filter(a -> a.getCellTemplateId().equals(x.getId()))
                    .collect(Collectors.toList()));
            if (cellTemplateConfigDto != null) {
                rData.add(cellTemplateConfigDto);
            }
50
        }
51 52 53 54 55 56 57 58 59 60

        if (rData.size() > 0) {
            result.setResult(true);
            result.setData(rData);
        } else {
            result.setData(Collections.emptyList());
        }
        return result;
    }

61
    public OperationResultDto<CellTemplateConfigDto> getCellConfig(Long cellTemplateId) {
62
        OperationResultDto<CellTemplateConfigDto> result = new OperationResultDto<>();
63
        CellTemplate config = cellTemplateMapper.selectByPrimaryKey(cellTemplateId);
64

65
        if (config == null) {
66 67 68 69 70
            result.setResultMsg("NoData");
            return result;
        }

        CellTemplateConfigExample example = new CellTemplateConfigExample();
71
        example.createCriteria().andCellTemplateIdEqualTo(cellTemplateId);
72
        List<CellTemplateConfig> configList = cellTemplateConfigMapper.selectByExample(example);
73
        result.setData(getConfigDto(config, configList));
74

75
        if (result.getData() == null) {
76 77 78 79 80
            result.setResultMsg("NoData");
            return result;
        }

        result.setResult(true);
81 82 83
        return result;
    }

84
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
85 86
    public OperationResultDto saveOrEdit(CellTemplateConfigDto cellTemplateConfig) {
        OperationResultDto result = new OperationResultDto();
87
        CellTemplate cellTemplate = cellTemplateMapper.selectByPrimaryKey(Long.parseLong(cellTemplateConfig.getCellTemplateId()));
88 89 90 91 92 93 94
        if (cellTemplate == null) {
            result.setResultMsg("Nodata");
            return result;
        }
        cellTemplate.setComment(cellTemplateConfig.getFormulaDescription());
        cellTemplate.setRowName(cellTemplateConfig.getRowName());
        cellTemplate.setColumnName(cellTemplateConfig.getColumnName());
sherlock's avatar
sherlock committed
95
        cellTemplateMapper.updateByPrimaryKey(cellTemplate);
96
        CellTemplateConfigExample example = new CellTemplateConfigExample();
97
        example.createCriteria().andCellTemplateIdEqualTo(Long.parseLong(cellTemplateConfig.getCellTemplateId()));
98 99 100 101
        List<CellTemplateConfig> cellTemplateConfigs = cellTemplateConfigMapper.selectByExample(example);

        if (!cellTemplateConfigs.isEmpty()) {
            for (CellTemplateConfig templateConfig : cellTemplateConfigs) {
102
                cellTemplateConfigMapper.deleteByPrimaryKey(templateConfig.getId());
103 104 105 106
            }
        }

        List<String> keyValues = new ArrayList<>();
107
        OperationResultDto<List<CellTemplateConfig>> configResult = getConfigList(cellTemplateConfig, keyValues);
108
        if (configResult.getResult()) {
109
            configResult.getData().forEach(a -> cellTemplateConfigMapper.insertSelective(a));
110 111
        }

112
        if (keyValues.size() > 0) {
113 114
            keyValues.forEach(a -> {
                KeyValueReference keyValueReferenceData = new KeyValueReference();
115 116
                keyValueReferenceData.setId(CommonUtils.getUUID());
                keyValueReferenceData.setKeyValueConfigId(a);
117
                keyValueReferenceData.setScope(ApplyScope.TaxReturn.value());
118
                keyValueReferenceData.setCellTemplateId(cellTemplate.getId());
119
                keyValueReferenceMapper.insertSelective(keyValueReferenceData);
120 121 122 123 124 125 126
            });
        }
        result.setResult(true);
        result.setResultMsg(configResult.getResultMsg());
        return result;
    }

127
    private OperationResultDto<List<CellTemplateConfig>> getConfigList(CellTemplateConfigDto cellTemplateConfigDto, List<String> keyValueIds) {
128 129 130
        OperationResultDto<List<CellTemplateConfig>> operationResultDto = new OperationResultDto<>();
        List<CellTemplateConfig> cellTemplateConfigList = new ArrayList<>();

131
        if (cellTemplateConfigDto.getHasFormula() != null && cellTemplateConfigDto.getHasFormula()) {
132
            operationResultDto.setResultMsg(getFormulaDataSource(cellTemplateConfigDto.getFormula(), keyValueIds));
133
            CellTemplateConfig cellTemplateConfig = new CellTemplateConfig();
134 135 136
            cellTemplateConfig.setId(distributedIdService.nextId());
            cellTemplateConfig.setCellTemplateId(Long.parseLong(cellTemplateConfigDto.getCellTemplateId()));
            cellTemplateConfig.setReportTemplateId(Long.parseLong(cellTemplateConfigDto.getTemplateId()));
137 138
            cellTemplateConfig.setCreateBy(cellTemplateConfigDto.getCreator());
            cellTemplateConfig.setUpdateBy(cellTemplateConfigDto.getUpdater());
139 140 141 142 143 144 145 146 147
            cellTemplateConfig.setUpdateTime(new Date());
            cellTemplateConfig.setCreateTime(new Date());
            cellTemplateConfig.setDataSourceType(CellDataSourceType.Formula.getCode());
            cellTemplateConfig.setFormulaDataSource(operationResultDto.getResultMsg());
            cellTemplateConfig.setFormula(cellTemplateConfigDto.getFormula());
            cellTemplateConfig.setFormulaDescription(cellTemplateConfigDto.getFormulaDescription());
            cellTemplateConfigList.add(cellTemplateConfig);
        }

148
        if (cellTemplateConfigDto.getHasVoucher() != null && cellTemplateConfigDto.getHasVoucher()) {
149
            CellTemplateConfig cellTemplateConfig = new CellTemplateConfig();
150 151 152
            cellTemplateConfig.setId(distributedIdService.nextId());
            cellTemplateConfig.setCellTemplateId(Long.parseLong(cellTemplateConfigDto.getCellTemplateId()));
            cellTemplateConfig.setReportTemplateId(Long.parseLong(cellTemplateConfigDto.getTemplateId()));
153 154
            cellTemplateConfig.setCreateBy(cellTemplateConfigDto.getCreator());
            cellTemplateConfig.setUpdateBy(cellTemplateConfigDto.getUpdater());
155 156 157 158
            cellTemplateConfig.setUpdateTime(new Date());
            cellTemplateConfig.setCreateTime(new Date());
            cellTemplateConfig.setDataSourceType(CellDataSourceType.Voucher.getCode());
            cellTemplateConfig.setVoucherKeyword(cellTemplateConfigDto.getVoucherKeyword());
159
            cellTemplateConfig.setAccountCodes(getJoinString(cellTemplateConfigDto.getAccountCodes()));
160 161 162
            cellTemplateConfigList.add(cellTemplateConfig);
        }

163
        if (cellTemplateConfigDto.getHasInvoice() != null && cellTemplateConfigDto.getHasInvoice()) {
164
            CellTemplateConfig cellTemplateConfig = new CellTemplateConfig();
165 166 167
            cellTemplateConfig.setId(distributedIdService.nextId());
            cellTemplateConfig.setCellTemplateId(Long.parseLong(cellTemplateConfigDto.getCellTemplateId()));
            cellTemplateConfig.setReportTemplateId(Long.parseLong(cellTemplateConfigDto.getTemplateId()));
168 169
            cellTemplateConfig.setCreateBy(cellTemplateConfigDto.getCreator());
            cellTemplateConfig.setUpdateBy(cellTemplateConfigDto.getUpdater());
170 171 172 173 174
            cellTemplateConfig.setUpdateTime(new Date());
            cellTemplateConfig.setCreateTime(new Date());
            cellTemplateConfig.setDataSourceType(getInvoiceType(cellTemplateConfigDto.getInvoiceType()).getCode());
            cellTemplateConfig.setInvoiceType(cellTemplateConfigDto.getInvoiceType());
            cellTemplateConfig.setInvoiceAmountType(cellTemplateConfigDto.getInvoiceAmountType());
175 176
            cellTemplateConfig.setTaxRate(getJoinString(cellTemplateConfigDto.getTaxRate()));
            cellTemplateConfig.setInvoiceCategory(getJoinString(cellTemplateConfigDto.getInvoiceCategory().stream().map(String::valueOf).collect(Collectors.toList())));
177 178 179
            cellTemplateConfigList.add(cellTemplateConfig);
        }

180
        if (cellTemplateConfigDto.getHasKeyIn() != null && cellTemplateConfigDto.getHasKeyIn()) {
181
            CellTemplateConfig cellTemplateConfig = new CellTemplateConfig();
182 183 184
            cellTemplateConfig.setId(distributedIdService.nextId());
            cellTemplateConfig.setCellTemplateId(Long.parseLong(cellTemplateConfigDto.getCellTemplateId()));
            cellTemplateConfig.setReportTemplateId(Long.parseLong(cellTemplateConfigDto.getTemplateId()));
185 186
            cellTemplateConfig.setCreateBy(cellTemplateConfigDto.getCreator());
            cellTemplateConfig.setUpdateBy(cellTemplateConfigDto.getUpdater());
187 188 189 190 191 192
            cellTemplateConfig.setUpdateTime(new Date());
            cellTemplateConfig.setCreateTime(new Date());
            cellTemplateConfig.setDataSourceType(CellDataSourceType.KeyIn.getCode());
            cellTemplateConfigList.add(cellTemplateConfig);
        }

193
        if (cellTemplateConfigDto.getHasModel() != null && cellTemplateConfigDto.getHasModel()) {
194
            CellTemplateConfig cellTemplateConfig = new CellTemplateConfig();
195 196 197
            cellTemplateConfig.setId(distributedIdService.nextId());
            cellTemplateConfig.setCellTemplateId(Long.parseLong(cellTemplateConfigDto.getCellTemplateId()));
            cellTemplateConfig.setReportTemplateId(Long.parseLong(cellTemplateConfigDto.getTemplateId()));
198 199
            cellTemplateConfig.setCreateBy(cellTemplateConfigDto.getCreator());
            cellTemplateConfig.setUpdateBy(cellTemplateConfigDto.getUpdater());
200 201 202
            cellTemplateConfig.setUpdateTime(new Date());
            cellTemplateConfig.setCreateTime(new Date());
            cellTemplateConfig.setDataSourceType(CellDataSourceType.RelatedModel.getCode());
203
            cellTemplateConfig.setModelIds(getJoinString(cellTemplateConfigDto.getModelIds()));
204 205 206
            cellTemplateConfigList.add(cellTemplateConfig);
        }

207
        if (cellTemplateConfigDto.getHasValidation() != null && cellTemplateConfigDto.getHasValidation()) {
208
            CellTemplateConfig cellTemplateConfig = new CellTemplateConfig();
209 210 211
            cellTemplateConfig.setId(distributedIdService.nextId());
            cellTemplateConfig.setCellTemplateId(Long.parseLong(cellTemplateConfigDto.getCellTemplateId()));
            cellTemplateConfig.setReportTemplateId(Long.parseLong(cellTemplateConfigDto.getTemplateId()));
212 213
            cellTemplateConfig.setCreateBy(cellTemplateConfigDto.getCreator());
            cellTemplateConfig.setUpdateBy(cellTemplateConfigDto.getUpdater());
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
            cellTemplateConfig.setUpdateTime(new Date());
            cellTemplateConfig.setCreateTime(new Date());
            cellTemplateConfig.setDataSourceType(CellDataSourceType.Validation.getCode());
            cellTemplateConfig.setValidation(cellTemplateConfigDto.getValidation());
            cellTemplateConfig.setValidationDescription(cellTemplateConfigDto.getValidationDescription());
            cellTemplateConfigList.add(cellTemplateConfig);
        }
        operationResultDto.setResult(true);
        operationResultDto.setData(cellTemplateConfigList);
        return operationResultDto;
    }

    private CellDataSourceType getInvoiceType(Integer invoiceType) {
        if (invoiceType == null) {
            return CellDataSourceType.InputInvoice;
        }

231
        if (invoiceType == 1) {
232
            return CellDataSourceType.InputInvoice;
233
        } else if (invoiceType == 2) {
234
            return CellDataSourceType.OutputInvoice;
235
        } else if (invoiceType == 3) {
236 237 238 239 240 241
            return CellDataSourceType.CustomInvoice;
        }

        return CellDataSourceType.InputInvoice;
    }

242
    private String getJoinString(List<String> array) {
243 244 245
        if (array != null && array.size() > 0) {
            StringBuilder sb = new StringBuilder();
            for (String s : array) {
246
                sb.append(s).append(",");
247 248
            }
            String tempStr = sb.toString();
249
            return StringUtils.removeEnd(tempStr, ",");
250
//            return tempStr.substring(0, tempStr.length() - 2);
251 252 253 254 255
        }

        return null;
    }

256
    private String getFormulaDataSource(String formula, List<String> keyValueConfigIds) {
257
        FormulaConfigExample example = new FormulaConfigExample();
neo's avatar
neo committed
258
        example.setOrderByClause("LENGTH(FORMULA_NAME) desc");
259 260 261
        List<FormulaConfig> dataSourceList = formulaConfigMapper.selectByExample(example);
        List<String> nameList = new ArrayList<>();
        FormulaHelper formulaHelper = new FormulaHelper();
262 263
//        String tmpFormula = formulaHelper.formatFormula(formula).toUpperCase();
        String tmpFormula = formula.toUpperCase();
264 265 266 267 268 269 270 271 272 273

        for (FormulaConfig dataSource : dataSourceList) {
            if (tmpFormula.contains(dataSource.getFormulaName().toUpperCase() + "(") && !nameList.contains(dataSource.getDataSourceName())) {
                nameList.add(dataSource.getDataSourceName());
            }
        }

        String keyValueMethodName = "KEYVALUE(";
        if (tmpFormula.contains(keyValueMethodName)) {
            KeyValueConfigExample keyValueConfigExample = new KeyValueConfigExample();
neo's avatar
neo committed
274
            keyValueConfigExample.setOrderByClause("LENGTH(KEY_CODE) desc");
275 276 277 278 279 280 281 282 283 284
            List<KeyValueConfig> keyValueList = keyValueConfigMapper.selectByExample(keyValueConfigExample);
            for (KeyValueConfig keyValueConfig : keyValueList) {
                if (tmpFormula.contains(keyValueMethodName + "\"" + keyValueConfig.getKeyCode().toUpperCase() + "\")")) {
                    if (!StringUtils.isBlank(keyValueConfig.getDataSource())) {
                        String dataSourceName = keyValueConfig.getDataSource().split("_")[1];
                        if (!nameList.contains(dataSourceName)) {
                            nameList.add(dataSourceName);
                        }
                    }

285 286
                    if (keyValueConfigIds.contains(keyValueConfig.getId())) {
                        keyValueConfigIds.add(keyValueConfig.getId());
287 288 289 290 291 292 293 294 295 296 297 298
                    }
                }
            }
        }

        if (nameList.isEmpty()) {
            return formula;
        } else {
            return String.join("+", nameList);
        }
    }

299 300
    private CellTemplateConfigDto getConfigDto(CellTemplate cellTemplate, List<CellTemplateConfig> configList) {
        CellTemplateConfigDto cellTemplateConfigDto = CellConfigTranslater.getConfigDto(cellTemplate, configList);
301
        if (cellTemplateConfigDto != null) {
302 303
            cellTemplateConfigDto.setCellTemplateId(cellTemplate.getId().toString());
            cellTemplateConfigDto.setTemplateId(cellTemplate.getReportTemplateId().toString());
304 305 306 307 308 309 310 311 312 313
            cellTemplateConfigDto.setRowIndex(cellTemplate.getRowIndex());
            cellTemplateConfigDto.setRowName(cellTemplate.getRowName());
            cellTemplateConfigDto.setColumnIndex(cellTemplate.getColumnIndex());
            cellTemplateConfigDto.setColumnName(cellTemplate.getColumnName());
            cellTemplateConfigDto.setDataType(cellTemplate.getDataType());
            cellTemplateConfigDto.setIsReadOnly(cellTemplate.getIsReadOnly());
            cellTemplateConfigDto.setFormulaDescription(cellTemplate.getComment());
            return cellTemplateConfigDto;
        }
        return null;
314 315
    }
}