Просмотр исходного кода

feat(coordination): 添加社保核定单险种维度校验功能

- 新增 SinsurEmpCoordConfirmEffectValidator 校验器
- 替换原有的 SinsurEmpCoordBillValidator 校验器
- 实现参保标准险种维度必填校验逻辑
- 添加根据险种ID判断是否启用险种维度的工具方法
- 增加核定单生效时险种维度选择验证
- 完善社保核定单确认生效流程的校验机制
Tyx 1 неделя назад
Родитель
Сommit
c324f2131e

+ 2 - 1
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/opplugin/web/coordination/SinsurEmpConfirmOpEx.java

@@ -7,6 +7,7 @@ import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
 import kd.hr.hbp.common.util.HRStringUtils;
 import kd.hr.hbp.opplugin.web.HRDataBaseOp;
 import nckd.jxccl.sit.hcsi.validate.web.SinsurEmpCoordBillValidator;
+import nckd.jxccl.sit.hcsi.validate.web.SinsurEmpCoordConfirmEffectValidator;
 
 /**
  * Tyx 2025-10-28
@@ -22,6 +23,6 @@ public class SinsurEmpConfirmOpEx extends HRDataBaseOp {
     @Override
     public void onAddValidators(AddValidatorsEventArgs e) {
         super.onAddValidators(e);
-        e.addValidator(new SinsurEmpCoordBillValidator());
+        e.addValidator(new SinsurEmpCoordConfirmEffectValidator());
     }
 }

+ 25 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/utils/SITCoordinationUtils.java

@@ -4,6 +4,7 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
+import kd.bos.util.StringUtils;
 import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
 import kd.sdk.sit.sitbp.common.StdDimDTO;
 import kd.sdk.sit.sitbp.common.StdInsuranceItemDTO;
@@ -160,5 +161,29 @@ public class SITCoordinationUtils {
         return result;
     }
 
+    /**
+     * 根据险种判断参保标准是否启用了险种维度
+     * @param map
+     * @param insurTypeId 险种ID
+     */
+    public boolean getEnableDimByInsurTypeId(Map<Long, StdResultInfoDTO.StdInsurTypeResultInfoDTO> map, Long insurTypeId) {
+        StdResultInfoDTO.StdInsurTypeResultInfoDTO infoDTO = map.get(insurTypeId);
+        List<StdResultInfoDTO.StdDimRsInfo> stdDimRsInfoList = infoDTO.getStdDimRsInfos();
+        for (StdResultInfoDTO.StdDimRsInfo stdDimRsInfo : stdDimRsInfoList) {
+            List<StdDimDTO> stdDimDTOList = stdDimRsInfo.getStdDimDTOs();
+            for (StdDimDTO stdDimDTO : stdDimDTOList) {
+                String fieldKey = stdDimDTO.getField();
+                if(!StringUtils.isEmpty(fieldKey)) {
+                    if(fieldKey.contains("nckd_sinsurdima")) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+
+
 
 }

+ 54 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/validate/web/SinsurEmpCoordConfirmEffectValidator.java

@@ -0,0 +1,54 @@
+package nckd.jxccl.sit.hcsi.validate.web;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.utils.ObjectUtils;
+import kd.bos.entity.ExtendedDataEntity;
+import kd.bos.entity.validate.AbstractValidator;
+import kd.bos.util.StringUtils;
+import kd.sdk.sit.sitbp.business.helper.SITBPServiceHelper;
+import kd.sdk.sit.sitbp.common.StdDimDTO;
+import kd.sdk.sit.sitbp.common.StdResultInfoDTO;
+import nckd.jxccl.sit.hcsi.utils.SITCoordinationUtils;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * 社保核定单确认生效/拆单校验器
+ * 核定单中提单生效时,增加险种维度的校验,参保标准启用了险种维度的,校验提醒险种维度必填,参保标准未启用险种维度的,险种维度可以非必填
+ */
+public class SinsurEmpCoordConfirmEffectValidator extends AbstractValidator {
+
+    private SITCoordinationUtils SITCoordinationUtils = new SITCoordinationUtils();
+    @Override
+    public void validate() {
+        for (ExtendedDataEntity dataEntity : dataEntities) {
+            DynamicObject bill = dataEntity.getDataEntity();
+            DynamicObject sinsurStd = bill.getDynamicObject("sinsurstd_r31");
+            StdResultInfoDTO stdResultInfoDTO = SITBPServiceHelper.getStdInfoAndStdDim(Arrays.asList(sinsurStd.getLong("id"))).get(sinsurStd.getLong("id"));
+            List<StdResultInfoDTO.StdInsurTypeResultInfoDTO> StdInsurTypeResultInfoDTOs = stdResultInfoDTO.getStdInsurTypeResultInfoDTOS();
+            Map<Long, StdResultInfoDTO.StdInsurTypeResultInfoDTO> map = StdInsurTypeResultInfoDTOs.stream().collect(Collectors.toMap((dyx) -> {
+                return dyx.getInsurTypeId();
+            }, (dyx) -> {
+                return dyx;
+            }, (key1, key2) -> {
+                return key2;
+            }));
+            // 判断各险种是否启用险种维度,如果启用则再判断险种维度是否有选,没选的话添加错误信息
+            for(DynamicObject entry: bill.getDynamicObjectCollection("nckd_entryentity")) {
+                DynamicObject welfAreType = entry.getDynamicObject("nckd_welfaretype");
+                boolean isEnable = SITCoordinationUtils.getEnableDimByInsurTypeId(map, welfAreType.getLong("id"));
+                // 如果启用了险种维度,再判断你险种维度是否选择
+                if(isEnable) {
+                    DynamicObject dimensionDyn = entry.getDynamicObject("nckd_sinsurdimension");
+                    if(ObjectUtils.isEmpty(dimensionDyn)) {
+                        this.addFatalErrorMessage(dataEntity, "第" + entry.getInt("seq") + "行,请选择险种维度!");
+                    }
+                }
+            }
+        }
+    }
+}