Selaa lähdekoodia

feat(coordination): 增加险种属性控制与基数清除逻辑

- 在HCSIEmpCoordVerifBillEditEx和SinSurEmpChgCoordBatchEditPluginEx中实现险种变更后清除个人与单位基数的功能
- 新增获取险种ID集合的方法getWelfareTypeIds()
- 实现根据险种设置个人缴费基数和单位缴费基数字段是否启用的逻辑
- 在常量类SitConstant中增加个人与单位缴费基数的相关ID及KEY定义
- 工具类SITCoordinationUtils新增queryInsuranceTypeAttrSetting方法用于查询险种属性配置
- 更新相关界面视图以反映字段启用状态变化
Tyx 6 päivää sitten
vanhempi
säilyke
6e1dedcab6

+ 5 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/common/constant/SitConstant.java

@@ -32,6 +32,11 @@ public class SitConstant {
     public static final HRBaseServiceHelper SINSURSTD_HELPER = new HRBaseServiceHelper("sitbs_sinsurstd");
     /* 参保标准维度结果 */
     public static final HRBaseServiceHelper STDDIMRS_HELPER = new HRBaseServiceHelper("sitbs_stddimrs");
+
+    public static final Long PAY_BASE_OF_EMPLOYEE_ID = 1010L;
+    public static final String PAY_BASE_OF_EMPLOYEE_KEY = "nckd_paybaseofemployee";
+    public static final Long PAY_BASE_OF_COMPANY_ID = 1020L;
+    public static final String PAY_BASE_OF_COMPANY_KEY = "nckd_paybaseofcompany";
     /*业务数据提报-外单位收入模板编码*/
     public static final String WDWSR_NUMBER = "JT001";
     public static final String SeparatorA = "_A";

+ 67 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/coordination/HCSIEmpCoordVerifBillEditEx.java

@@ -38,6 +38,12 @@ public class HCSIEmpCoordVerifBillEditEx extends AbstractFormPlugin implements P
         }
     }
 
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+        setWelfareTypeInsuranceTypeAttrEnable();
+    }
+
     @Override
     public void propertyChanged(PropertyChangedArgs e) {
         super.propertyChanged(e);
@@ -54,6 +60,16 @@ public class HCSIEmpCoordVerifBillEditEx extends AbstractFormPlugin implements P
             DynamicObject welfaretype = (DynamicObject) model.getValue("nckd_welfaretype", rowIndex);
             DynamicObject sinSurDimension = (DynamicObject) model.getValue("nckd_sinsurdimension", rowIndex);
             getDimensionValue(sinSurStd, welfaretype, sinSurDimension, rowIndex);
+            setWelfareTypeInsuranceTypeAttrEnable();
+
+            // 如果是险种,新旧值不一样的情况下,把个人基数跟单位基数清除掉
+            if(HRStringUtils.equalsAny(key, "nckd_welfaretype")) {
+                if(e.getChangeSet()[0].getNewValue() != e.getChangeSet()[0].getOldValue()) {
+                    model.setValue(SitConstant.PAY_BASE_OF_EMPLOYEE_KEY, null, rowIndex);
+                    model.setValue(SitConstant.PAY_BASE_OF_COMPANY_KEY, null, rowIndex);
+                    this.getView().updateView("nckd_entryentity");
+                }
+            }
         }
         else if (HRStringUtils.equals(key, "sinsurstd_r31")) {
             Object newValue = e.getChangeSet()[0].getNewValue();
@@ -170,5 +186,56 @@ public class HCSIEmpCoordVerifBillEditEx extends AbstractFormPlugin implements P
         return SITCoordinationUtils.queryDimensionValue(sinSurStdId, welfaretypeId);
     }
 
+    /**
+     * 获取当前单据体的所有险种
+     * @return
+     */
+    private Set<Long> getWelfareTypeIds() {
+        DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("nckd_entryentity");
+        Set<Long> welfareTypeIds = new HashSet<>();
+        for (DynamicObject dynamicObject : entryEntity) {
+            Long welfareTypeId = dynamicObject.getLong("nckd_welfaretype.id");
+            if (welfareTypeId != null) {
+                welfareTypeIds.add(welfareTypeId);
+            }
+        }
+        return welfareTypeIds;
+    }
+
+    /**
+     * 设置险种对应的险种属性是否可用
+     */
+    private void setWelfareTypeInsuranceTypeAttrEnable() {
+        DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("nckd_entryentity");
+        Set<Long> welfareTypeIds = this.getWelfareTypeIds();
+        Map<Long, Map<Long, Boolean>> welfareTypeInsuranceTypeAttrMap = SITCoordinationUtils.queryInsuranceTypeAttrSetting(welfareTypeIds, Arrays.asList(SitConstant.PAY_BASE_OF_EMPLOYEE_ID, SitConstant.PAY_BASE_OF_COMPANY_ID));
+        for (int index = 0; index < entryEntity.size(); index++) {
+            DynamicObject dynamicObject = entryEntity.get(index);
+            if (dynamicObject.getBoolean("nckd_insured")) {
+                long welfareTypeId = dynamicObject.getLong("nckd_welfaretype.id");
+                Map<Long, Boolean> insuranceTypeAttrMap = (Map)welfareTypeInsuranceTypeAttrMap.get(welfareTypeId);
+                if ((Boolean)insuranceTypeAttrMap.get(SitConstant.PAY_BASE_OF_EMPLOYEE_ID)) {
+                    this.getView().setEnable(Boolean.TRUE, index, new String[]{SitConstant.PAY_BASE_OF_EMPLOYEE_KEY});
+                } else {
+                    this.getView().setEnable(Boolean.FALSE, index, new String[]{SitConstant.PAY_BASE_OF_EMPLOYEE_KEY});
+                    dynamicObject.set(SitConstant.PAY_BASE_OF_EMPLOYEE_KEY, (Object)null);
+                }
+
+                if ((Boolean)insuranceTypeAttrMap.get(SitConstant.PAY_BASE_OF_COMPANY_ID)) {
+                    this.getView().setEnable(Boolean.TRUE, index, new String[]{SitConstant.PAY_BASE_OF_COMPANY_KEY});
+                } else {
+                    this.getView().setEnable(Boolean.FALSE, index, new String[]{SitConstant.PAY_BASE_OF_COMPANY_KEY});
+                    dynamicObject.set(SitConstant.PAY_BASE_OF_COMPANY_KEY, (Object)null);
+                }
+            } else {
+                dynamicObject.set(SitConstant.PAY_BASE_OF_EMPLOYEE_KEY, (Object)null);
+                dynamicObject.set(SitConstant.PAY_BASE_OF_COMPANY_KEY, (Object)null);
+                this.getView().setEnable(Boolean.FALSE, index, new String[]{SitConstant.PAY_BASE_OF_EMPLOYEE_KEY});
+                this.getView().setEnable(Boolean.FALSE, index, new String[]{SitConstant.PAY_BASE_OF_COMPANY_KEY});
+            }
+        }
+        
+    }
+
 
 }

+ 65 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/coordination/SinSurEmpChgCoordBatchEditPluginEx.java

@@ -52,6 +52,7 @@ public class SinSurEmpChgCoordBatchEditPluginEx extends AbstractFormPlugin imple
         HRBaseServiceHelper helper = new HRBaseServiceHelper(this.getEntityNumber());
         DynamicObject[] billCols = helper.load(String.join(",", queryFields), new QFilter[]{new QFilter("id", "in", this.getSelectIds())});
         showEntryData(billCols);
+        setWelfareTypeInsuranceTypeAttrEnable();
     }
 
     @Override
@@ -107,6 +108,17 @@ public class SinSurEmpChgCoordBatchEditPluginEx extends AbstractFormPlugin imple
             DynamicObject welfaretype = (DynamicObject) model.getValue("nckd_welfaretype", subRowIndex);
             DynamicObject sinSurDimension = (DynamicObject) model.getValue("nckd_sinsurdimension", subRowIndex);
             getDimensionValue(sinSurStd, welfaretype, sinSurDimension, rowIndex, subRowIndex);
+            setWelfareTypeInsuranceTypeAttrEnable();
+
+            // 如果是险种,新旧值不一样的情况下,把个人基数跟单位基数清除掉
+            if(HRStringUtils.equalsAny(key, "nckd_welfaretype")) {
+                if(e.getChangeSet()[0].getNewValue() != e.getChangeSet()[0].getOldValue()) {
+                    model.setValue(SitConstant.PAY_BASE_OF_EMPLOYEE_KEY, null, subRowIndex, rowIndex);
+                    model.setValue(SitConstant.PAY_BASE_OF_COMPANY_KEY, null, subRowIndex, rowIndex);
+                    this.getView().updateView("nckd_subentryentity");
+                }
+            }
+
         }
         // 如果是 参保标准发生变化,当前单据体下的子单据体都需要更新
         else if (HRStringUtils.equals(key, "sinsurstd_r31")) {
@@ -373,4 +385,57 @@ public class SinSurEmpChgCoordBatchEditPluginEx extends AbstractFormPlugin imple
         return SITCoordinationUtils.queryDimensionValue(sinSurStdId, welfaretypeId);
     }
 
+    /**
+     * 获取当前子单据体的所有险种
+     * @return
+     */
+    private Set<Long> getWelfareTypeIds() {
+        DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("entryentity");
+        Set<Long> welfareTypeIds = new HashSet<>();
+        for (DynamicObject dynamicObject : entryEntity) {
+            DynamicObjectCollection subEntryEntity = dynamicObject.getDynamicObjectCollection("nckd_subentryentity");
+            welfareTypeIds.addAll(subEntryEntity.stream().map(subEntry -> subEntry.getLong("nckd_welfaretype.id")).collect(Collectors.toSet()));
+        }
+        return welfareTypeIds;
+    }
+
+    /**
+     * 设置险种对应的险种属性是否可用
+     */
+    private void setWelfareTypeInsuranceTypeAttrEnable() {
+        DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("entryentity");
+        Set<Long> welfareTypeIds = this.getWelfareTypeIds();
+        Map<Long, Map<Long, Boolean>> welfareTypeInsuranceTypeAttrMap = SITCoordinationUtils.queryInsuranceTypeAttrSetting(welfareTypeIds, Arrays.asList(SitConstant.PAY_BASE_OF_EMPLOYEE_ID, SitConstant.PAY_BASE_OF_COMPANY_ID));
+        for (int index = 0; index < entryEntity.size(); index++) {
+            DynamicObject entry = entryEntity.get(index);
+            DynamicObjectCollection subEntryEntity = entry.getDynamicObjectCollection("nckd_subentryentity");
+            for (int subIndex = 0; subIndex < subEntryEntity.size(); subIndex++) {
+                DynamicObject dynamicObject = subEntryEntity.get(subIndex);
+                if (dynamicObject.getBoolean("nckd_insured")) {
+                    long welfareTypeId = dynamicObject.getLong("nckd_welfaretype.id");
+                    Map<Long, Boolean> insuranceTypeAttrMap = (Map) welfareTypeInsuranceTypeAttrMap.get(welfareTypeId);
+                    if ((Boolean) insuranceTypeAttrMap.get(SitConstant.PAY_BASE_OF_EMPLOYEE_ID)) {
+                        this.getView().setEnable(Boolean.TRUE, index, new String[]{SitConstant.PAY_BASE_OF_EMPLOYEE_KEY});
+                    } else {
+                        this.getView().setEnable(Boolean.FALSE, index, new String[]{SitConstant.PAY_BASE_OF_EMPLOYEE_KEY});
+                        dynamicObject.set(SitConstant.PAY_BASE_OF_EMPLOYEE_KEY, (Object) null);
+                    }
+
+                    if ((Boolean) insuranceTypeAttrMap.get(SitConstant.PAY_BASE_OF_COMPANY_ID)) {
+                        this.getView().setEnable(Boolean.TRUE, index, new String[]{SitConstant.PAY_BASE_OF_COMPANY_KEY});
+                    } else {
+                        this.getView().setEnable(Boolean.FALSE, index, new String[]{SitConstant.PAY_BASE_OF_COMPANY_KEY});
+                        dynamicObject.set(SitConstant.PAY_BASE_OF_COMPANY_KEY, (Object) null);
+                    }
+                } else {
+                    dynamicObject.set(SitConstant.PAY_BASE_OF_EMPLOYEE_KEY, (Object) null);
+                    dynamicObject.set(SitConstant.PAY_BASE_OF_COMPANY_KEY, (Object) null);
+                    this.getView().setEnable(Boolean.FALSE, index, new String[]{SitConstant.PAY_BASE_OF_EMPLOYEE_KEY});
+                    this.getView().setEnable(Boolean.FALSE, index, new String[]{SitConstant.PAY_BASE_OF_COMPANY_KEY});
+                }
+            }
+        }
+    }
+
+
 }

+ 55 - 4
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/utils/SITCoordinationUtils.java

@@ -4,16 +4,14 @@ 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.hr.hbp.business.servicehelper.HRBaseServiceHelper;
 import kd.sdk.sit.sitbp.common.StdDimDTO;
 import kd.sdk.sit.sitbp.common.StdInsuranceItemDTO;
 import kd.sdk.sit.sitbp.common.StdResultInfoDTO;
 import nckd.jxccl.sit.hcsi.common.constant.SitConstant;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 public class SITCoordinationUtils {
@@ -108,6 +106,59 @@ public class SITCoordinationUtils {
         return baseDataIds;
     }
 
+    /**
+     * 获取险种可编辑的字段配置
+     * @param welfareTypeIds
+     * @param insuranceTypeAttrs
+     * @return
+     */
+    public static Map<Long, Map<Long, Boolean>> queryInsuranceTypeAttrSetting(Collection<Long> welfareTypeIds, Collection<Long> insuranceTypeAttrs) {
+        // 初始化结果Map,使用类型安全的声明
+        Map<Long, Map<Long, Boolean>> result = new HashMap<>(welfareTypeIds.size());
+
+        // 初始化每个险种类型的属性映射
+        for (Long welfareTypeId : welfareTypeIds) {
+            Map<Long, Boolean> map = new HashMap<>(insuranceTypeAttrs.size());
+            for (Long insuranceTypeAttrId : insuranceTypeAttrs) {
+                map.put(insuranceTypeAttrId, Boolean.FALSE);
+            }
+            result.put(welfareTypeId, map);
+        }
+
+        // 构建查询条件
+        QFilter inSurTypeQFilter = new QFilter("insurtype", "in", welfareTypeIds);
+        QFilter enableQFilter = new QFilter("enable", "=", "1");
+        QFilter statusQFilter = new QFilter("status", "=", "C");
+        QFilter currentQFilter = new QFilter("iscurrentversion", "=", Boolean.TRUE);
+
+        inSurTypeQFilter.and(enableQFilter)
+                .and(statusQFilter)
+                .and(currentQFilter);
+
+        // 执行查询
+        DynamicObject[] sinSurStdCfgDynamicObjects = new HRBaseServiceHelper("sitbs_sinsurstdcfg")
+                .load("rentryentity.insuritem,insurtype", new QFilter[]{inSurTypeQFilter});
+
+        // 处理查询结果
+        for (DynamicObject sinSurStdCfgDynamicObject : sinSurStdCfgDynamicObjects) {
+            Long welfareTypeId = sinSurStdCfgDynamicObject.getLong("insurtype.id");
+            Map<Long, Boolean> insuranceTypeAttrMap = result.get(welfareTypeId);
+
+            if (insuranceTypeAttrMap != null) {
+                DynamicObjectCollection rentryentity = sinSurStdCfgDynamicObject.getDynamicObjectCollection("rentryentity");
+                for (DynamicObject dynamicObject : rentryentity) {
+                    DynamicObject insuranceItem = dynamicObject.getDynamicObject("insuritem");
+                    if (insuranceItem != null) {
+                        Long attrId = insuranceItem.getLong("insurancetypeattr.id");
+                        if (insuranceTypeAttrMap.containsKey(attrId)) {
+                            insuranceTypeAttrMap.put(attrId, Boolean.TRUE);
+                        }
+                    }
+                }
+            }
+        }
+        return result;
+    }
 
 
 }