|
|
@@ -45,6 +45,7 @@ import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.function.Consumer;
|
|
|
+import java.util.function.Supplier;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -1048,41 +1049,144 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean costsEndDateBatch(AgreementProductCostsEndDateVo agreementProductCostsEndDateVo) {
|
|
|
- for (String id : agreementProductCostsEndDateVo.getIds()) {
|
|
|
- PtlAgreementProductCostsNew ptlAgreementProductCostsNew = this.getById(id);
|
|
|
- if (ptlAgreementProductCostsNew == null) {
|
|
|
- throw new SystemException("费用不存在");
|
|
|
+ @Transactional
|
|
|
+ public boolean costsBatch(AgreementProductCostsVo agreementProductCostsVo) {
|
|
|
+ List<PtlAgreementProductCostsNew> list = ptlAgreementProductCostsNewService.listByIds(agreementProductCostsVo.getIds());
|
|
|
+ List<String> productIds = list.stream().map(PtlAgreementProductCostsNew::getProductId).collect(Collectors.toList());
|
|
|
+ Set<String> productIdsSet = new HashSet<>(productIds);
|
|
|
+ //选了三种及以上的险种
|
|
|
+ if (productIdsSet.size() >= 3) {
|
|
|
+ throw new SystemException("选了三种及以上的险种,无法批量修改费用");
|
|
|
+ }
|
|
|
+ if (productIdsSet.size() == 2) {
|
|
|
+ boolean isSingleBusinessAndSingleThree = productIdsSet.contains("034001") && productIdsSet.contains("034002");
|
|
|
+ boolean isJointBusinessAndJointThree = productIdsSet.contains("0330034001") && productIdsSet.contains("0330034002");
|
|
|
+ if (!isSingleBusinessAndSingleThree && !isJointBusinessAndJointThree) {
|
|
|
+ throw new SystemException("只能批量修改单商和单三或交商和交三");
|
|
|
}
|
|
|
- if (agreementProductCostsEndDateVo.getCostsEndDate() != null) {
|
|
|
- ptlAgreementProductCostsNew.setCostsEndDate(agreementProductCostsEndDateVo.getCostsEndDate());
|
|
|
+ } else if (productIdsSet.size() != 1) {
|
|
|
+ throw new SystemException("选择险种出错,无法批量修改");
|
|
|
+ }
|
|
|
+ // 更新每个费用项目
|
|
|
+ for (String id : agreementProductCostsVo.getIds()) {
|
|
|
+ PtlAgreementProductCostsNew costsItem = this.getById(id);
|
|
|
+ PtlAgreementProductCostsExport exportItem = ptlAgreementProductCostsExportService.getOne(
|
|
|
+ new LambdaQueryWrapper<PtlAgreementProductCostsExport>().eq(PtlAgreementProductCostsExport::getCostsId, id));
|
|
|
+ // 验证费用
|
|
|
+ validateItems(costsItem, exportItem);
|
|
|
+
|
|
|
+ // 更新费用总比例、1-5级比例
|
|
|
+ updateCostsItem(agreementProductCostsVo, costsItem);
|
|
|
+ updateExportItem(agreementProductCostsVo, exportItem);
|
|
|
+
|
|
|
+ //添加费用轨迹 费用历史记录
|
|
|
+ addCostsTrajectory(costsItem);
|
|
|
+ saveHistoryRecord(costsItem, exportItem);
|
|
|
+
|
|
|
+ ptlAgreementProductCostsExportService.updateById(exportItem);
|
|
|
+ baseMapper.updateById(costsItem);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ private void validateItems(PtlAgreementProductCostsNew costs, PtlAgreementProductCostsExport export) {
|
|
|
+ if (costs == null || export == null) {
|
|
|
+ throw new SystemException("费用不存在");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateCostsItem(AgreementProductCostsVo vo, PtlAgreementProductCostsNew item) {
|
|
|
+ if (vo.getCostsEndDate() != null) {
|
|
|
+ item.setCostsEndDate(vo.getCostsEndDate());
|
|
|
+ }
|
|
|
+ if (vo.getCostsStartDate() != null) {
|
|
|
+ item.setCostsStartDate(vo.getCostsStartDate());
|
|
|
+ }
|
|
|
+ updateProportion(item, vo.getJqCostsProportion(), item::getJqCostsProportion, item::setJqCostsProportion);
|
|
|
+ updateProportion(item, vo.getSyCostsProportion(), item::getSyCostsProportion, item::setSyCostsProportion);
|
|
|
+ updateProportion(item, vo.getNoCostsProportion(), item::getNoCostsProportion, item::setNoCostsProportion);
|
|
|
+ //更新其他费用比例
|
|
|
+ updateOtherCostsProportion(item, vo.getJqCostsProportion(), item::getJqCarOtherCostsProportion, item::setJqCarOtherCostsProportion);
|
|
|
+ updateOtherCostsProportion(item, vo.getSyCostsProportion(), item::getSyCarOtherCostsProportion, item::setSyCarOtherCostsProportion);
|
|
|
+ updateOtherCostsProportion(item, vo.getNoCostsProportion(), item::getNoCarOtherCostsProportion, item::setNoCarOtherCostsProportion);
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新总比费用
|
|
|
+ private void updateProportion(PtlAgreementProductCostsNew item, String proportionToAdd, Supplier<String> getter, Consumer<String> setter) {
|
|
|
+ if (proportionToAdd != null) {
|
|
|
+ try {
|
|
|
+ BigDecimal current = new BigDecimal(getter.get());
|
|
|
+ BigDecimal add = new BigDecimal(proportionToAdd);
|
|
|
+ setter.accept(current.add(add).toString());
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ throw new SystemException("比例值格式错误");
|
|
|
}
|
|
|
- if (agreementProductCostsEndDateVo.getCostsStartDate() != null) {
|
|
|
- ptlAgreementProductCostsNew.setCostsStartDate(agreementProductCostsEndDateVo.getCostsStartDate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新其他费用比例
|
|
|
+ private void updateOtherCostsProportion(PtlAgreementProductCostsNew item, String otherProportionToAdd, Supplier<String> getter, Consumer<String> setter) {
|
|
|
+ if (otherProportionToAdd != null) {
|
|
|
+ try {
|
|
|
+ BigDecimal currentOther = new BigDecimal(getter.get());
|
|
|
+ BigDecimal addOther = new BigDecimal(otherProportionToAdd);
|
|
|
+
|
|
|
+ // 调整其他费用比例相同的值
|
|
|
+ setter.accept(currentOther.add(addOther).toString());
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ throw new SystemException("其他费用比例值格式错误");
|
|
|
}
|
|
|
- String desc = "修改费用因子";
|
|
|
- //添加费用因子轨迹
|
|
|
- ptlAgreementProductCostsTrajectoryService.addCostsTrajectory(ptlAgreementProductCostsNew.getId(), desc, BaseController.getUser().getId());
|
|
|
- //保存产品费用历史记录
|
|
|
- PtlAgreementProductCostsNewHistory ptlAgreementProductCostsNewHistory = new PtlAgreementProductCostsNewHistory();
|
|
|
- //添加费用ID
|
|
|
- ptlAgreementProductCostsNewHistory.setId(IdGenerate.nextId());
|
|
|
- ptlAgreementProductCostsNewHistory.setCostsId(ptlAgreementProductCostsNew.getId());
|
|
|
- //生成批次ID
|
|
|
- String uuid = IdGenerate.nextId();
|
|
|
- ptlAgreementProductCostsNewHistory.setBatch(uuid);
|
|
|
- ptlAgreementProductCostsNewHistory.setAgreementId(ptlAgreementProductCostsNew.getAgreementId());
|
|
|
- ptlAgreementProductCostsNewHistory.setProductId(ptlAgreementProductCostsNew.getProductId());
|
|
|
- ptlAgreementProductCostsNewHistory.setProductName(ptlAgreementProductCostsNew.getProductName());
|
|
|
- ptlAgreementProductCostsNewHistory.setOperatorType("update");
|
|
|
- ptlAgreementProductCostsNewHistory.setModifier(BaseController.getUser().getId());
|
|
|
- ptlAgreementProductCostsNewHistory.setOperatorTime(LocalDateTime.now());
|
|
|
- ptlAgreementProductCostsNewHistoryService.save(ptlAgreementProductCostsNewHistory);
|
|
|
- baseMapper.updateById(ptlAgreementProductCostsNew);
|
|
|
}
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
+ //更新1-5级比例
|
|
|
+ private void updateExportItem(AgreementProductCostsVo vo, PtlAgreementProductCostsExport item) {
|
|
|
+ updateExportRadios(item, vo.getJqExportRadioLevel1(), item::getJqExportRadioLevel1, item::setJqExportRadioLevel1);
|
|
|
+ updateExportRadios(item, vo.getJqExportRadioLevel2(), item::getJqExportRadioLevel2, item::setJqExportRadioLevel2);
|
|
|
+ updateExportRadios(item, vo.getJqExportRadioLevel3(), item::getJqExportRadioLevel3, item::setJqExportRadioLevel3);
|
|
|
+ updateExportRadios(item, vo.getJqExportRadioLevel4(), item::getJqExportRadioLevel4, item::setJqExportRadioLevel4);
|
|
|
+ updateExportRadios(item, vo.getJqExportRadioLevel5(), item::getJqExportRadioLevel5, item::setJqExportRadioLevel5);
|
|
|
+ updateExportRadios(item, vo.getSyExportRadioLevel1(), item::getSyExportRadioLevel1, item::setSyExportRadioLevel1);
|
|
|
+ updateExportRadios(item, vo.getSyExportRadioLevel2(), item::getSyExportRadioLevel2, item::setSyExportRadioLevel2);
|
|
|
+ updateExportRadios(item, vo.getSyExportRadioLevel3(), item::getSyExportRadioLevel3, item::setSyExportRadioLevel3);
|
|
|
+ updateExportRadios(item, vo.getSyExportRadioLevel4(), item::getSyExportRadioLevel4, item::setSyExportRadioLevel4);
|
|
|
+ updateExportRadios(item, vo.getSyExportRadioLevel5(), item::getSyExportRadioLevel5, item::setSyExportRadioLevel5);
|
|
|
+ updateExportRadios(item, vo.getNoCarExportRadioLevel1(), item::getNoCarExportRadioLevel1, item::setNoCarExportRadioLevel1);
|
|
|
+ updateExportRadios(item, vo.getNoCarExportRadioLevel2(), item::getNoCarExportRadioLevel2, item::setNoCarExportRadioLevel2);
|
|
|
+ updateExportRadios(item, vo.getNoCarExportRadioLevel3(), item::getNoCarExportRadioLevel3, item::setNoCarExportRadioLevel3);
|
|
|
+ updateExportRadios(item, vo.getNoCarExportRadioLevel4(), item::getNoCarExportRadioLevel4, item::setNoCarExportRadioLevel4);
|
|
|
+ updateExportRadios(item, vo.getNoCarExportRadioLevel5(), item::getNoCarExportRadioLevel5, item::setNoCarExportRadioLevel5);
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新1-5级比例
|
|
|
+ private void updateExportRadios(PtlAgreementProductCostsExport item, BigDecimal valueToAdd, Supplier<BigDecimal> getter, Consumer<BigDecimal> setter) {
|
|
|
+ if (valueToAdd != null) {
|
|
|
+ setter.accept(getter.get().add(valueToAdd));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //新增费用轨迹
|
|
|
+ private void addCostsTrajectory(PtlAgreementProductCostsNew item) {
|
|
|
+ String desc = "修改费用因子";
|
|
|
+ ptlAgreementProductCostsTrajectoryService.addCostsTrajectory(item.getId(), desc, BaseController.getUser().getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ //新增费用历史记录
|
|
|
+ private void saveHistoryRecord(PtlAgreementProductCostsNew costsItem, PtlAgreementProductCostsExport exportItem) {
|
|
|
+ PtlAgreementProductCostsNewHistory history = new PtlAgreementProductCostsNewHistory();
|
|
|
+ history.setId(IdGenerate.nextId());
|
|
|
+ history.setCostsId(costsItem.getId());
|
|
|
+ history.setBatch(IdGenerate.nextId());
|
|
|
+ history.setAgreementId(costsItem.getAgreementId());
|
|
|
+ history.setProductId(costsItem.getProductId());
|
|
|
+ history.setProductName(costsItem.getProductName());
|
|
|
+ history.setOperatorType("update");
|
|
|
+ history.setModifier(BaseController.getUser().getId());
|
|
|
+ history.setOperatorTime(LocalDateTime.now());
|
|
|
+ ptlAgreementProductCostsNewHistoryService.save(history);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public boolean costsDeleteBatch(String[] ids) {
|
|
|
for (String id : ids) {
|