Ver Fonte

批量修改协议费用

Qchen há 1 ano atrás
pai
commit
22b40edcd3

+ 4 - 4
src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementController.java

@@ -151,10 +151,10 @@ public class PtlNewAgreementController extends BaseController {
         return ptlAgreementProductCostsNewService.costsAuditBatch(costsAuditVo) ? HttpResult.ok("费用批量审核成功") : HttpResult.error("费用批量审核失败");
     }
 
-    @ApiOperation(value = "费用批量修改日期")
-    @PostMapping("/costs/endDateBatch")
-    public HttpResult costsEndDateBatch(@RequestBody AgreementProductCostsEndDateVo agreementProductCostsEndDateVo){
-        return ptlAgreementProductCostsNewService.costsEndDateBatch(agreementProductCostsEndDateVo) ? HttpResult.ok("费用批量修改成功") : HttpResult.error("费用批量修改失败");
+    @ApiOperation(value = "费用批量修改")
+    @PostMapping("/costs/costsBatch")
+    public HttpResult costsBatch(@RequestBody AgreementProductCostsVo agreementProductCostsVo){
+        return ptlAgreementProductCostsNewService.costsBatch(agreementProductCostsVo) ? HttpResult.ok("费用批量修改成功") : HttpResult.error("费用批量修改失败");
     }
 
     @ApiOperation("费用批量删除")

+ 133 - 29
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -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) {

+ 1 - 1
src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

@@ -274,7 +274,7 @@
             #{params.signEndDateStr}
         </if>
         <if test="params.payStartDateStr != null and params.payStartDateStr != '' and params.payEndDateStr != null and params.payEndDateStr != ''">
-            and DATE_FORMAT(iac.pay_date, '%Y-%m-%d') between #{params.payStartDateStr} AND #{params.payEndDateStr}
+            and iac.pay_date between #{params.payStartDateStr} AND #{params.payEndDateStr}
         </if>
 
         <if test="params.isExternal != null and params.isExternal != ''">