Browse Source

feat(coordination): 优化缓存机制并完善参保单位批量设置功能

- 移除 HRPageCache 的使用,改为使用静态 Map 缓存 StdResultInfoDTO 对象
- 新增实际/理论参保单位在批量编辑时的同步设置逻辑
- 更新视图以反映批量修改后的数据变化
- 针对特定保险属性ID(1030L、1040L)的值进行数值放大处理(乘以100)
- 提高代码性能与数据一致性
Tyx 1 week ago
parent
commit
26bbbffdbb

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

@@ -6,7 +6,6 @@ import kd.bos.dataentity.utils.ObjectUtils;
 import kd.bos.entity.datamodel.IDataModel;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
 import kd.bos.form.plugin.AbstractFormPlugin;
-import kd.hr.hbp.common.cache.HRPageCache;
 import kd.hr.hbp.common.util.HRStringUtils;
 import kd.sdk.plugin.Plugin;
 import kd.sdk.sit.sitbp.business.helper.SITBPServiceHelper;
@@ -15,6 +14,7 @@ import nckd.jxccl.sit.hcsi.common.constant.SitConstant;
 import nckd.jxccl.sit.hcsi.utils.SITCoordinationUtils;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
@@ -24,6 +24,8 @@ import java.util.Set;
  */
 public class HCSIEmpCoordVerifBillEditEx extends AbstractFormPlugin implements Plugin {
 
+    private static final Map<Long, StdResultInfoDTO> stdResultInfoDTOMap = new HashMap<Long, StdResultInfoDTO>();
+
     @Override
     public void propertyChanged(PropertyChangedArgs e) {
         super.propertyChanged(e);
@@ -70,9 +72,8 @@ public class HCSIEmpCoordVerifBillEditEx extends AbstractFormPlugin implements P
      */
     public void getDimensionValue(DynamicObject sinSurStd, DynamicObject welfaretype, DynamicObject sinSurDimension, int rowIndex) {
         IDataModel model = this.getModel();
-        HRPageCache pageCache = new HRPageCache(this.getView());
-        String cacheKey = String.valueOf(sinSurStd.getLong("id"));
-        StdResultInfoDTO stdResultInfoDTO = pageCache.get(cacheKey, StdResultInfoDTO.class);
+        Long cacheKey = sinSurStd.getLong("id");
+        StdResultInfoDTO stdResultInfoDTO = stdResultInfoDTOMap.get(cacheKey);
 
         if(welfaretype == null)
             return;
@@ -97,12 +98,11 @@ public class HCSIEmpCoordVerifBillEditEx extends AbstractFormPlugin implements P
      * @return
      */
     public void getStdInfoAndStdDimfromCache (DynamicObject sinSurStd) {
-        HRPageCache pageCache = new HRPageCache(this.getView());
-        String cacheKey = String.valueOf(sinSurStd.getLong("id"));
-        StdResultInfoDTO stdResultInfoDTO = pageCache.get(cacheKey, StdResultInfoDTO.class);
+        Long cacheKey = sinSurStd.getLong("id");
+        StdResultInfoDTO stdResultInfoDTO = stdResultInfoDTOMap.get(cacheKey);
         if(stdResultInfoDTO == null) {
             stdResultInfoDTO = SITBPServiceHelper.getStdInfoAndStdDim(Arrays.asList(sinSurStd.getLong("id"))).get(sinSurStd.getLong("id"));
-            pageCache.put(cacheKey, stdResultInfoDTO);
+            stdResultInfoDTOMap.put(cacheKey, stdResultInfoDTO);
         }
     }
 

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

@@ -16,12 +16,9 @@ import kd.bos.form.plugin.AbstractFormPlugin;
 import kd.bos.org.utils.DynamicObjectUtils;
 import kd.bos.orm.query.QFilter;
 import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
-import kd.hr.hbp.common.cache.HRPageCache;
 import kd.hr.hbp.common.util.HRStringUtils;
 import kd.sdk.plugin.Plugin;
 import kd.sdk.sit.sitbp.business.helper.SITBPServiceHelper;
-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 nckd.jxccl.sit.hcsi.utils.SITCoordinationUtils;
@@ -39,6 +36,7 @@ public class SinSurEmpChgCoordBatchEditPluginEx extends AbstractFormPlugin imple
 
     private static final HRBaseServiceHelper COORDBILL_HELPER = new HRBaseServiceHelper("hpdi_empcoordverifbill3");
     private static final List<String> defaultQueryFields = (List) Stream.of("id", "employeev", "assignment", "coordruleparam").collect(Collectors.toList());
+    private static final Map<Long, StdResultInfoDTO> stdResultInfoDTOMap = new HashMap<Long, StdResultInfoDTO>();
     /**
      * 在标品加载完数据之后,再获取一下核定单分录的数据展示出来
      * @param e
@@ -112,12 +110,11 @@ public class SinSurEmpChgCoordBatchEditPluginEx extends AbstractFormPlugin imple
      * @return
      */
     public void getStdInfoAndStdDimfromCache (DynamicObject sinSurStd) {
-        HRPageCache pageCache = new HRPageCache(this.getView());
-        String cacheKey = String.valueOf(sinSurStd.getLong("id"));
-        StdResultInfoDTO stdResultInfoDTO = pageCache.get(cacheKey, StdResultInfoDTO.class);
+        Long cacheKey = sinSurStd.getLong("id");
+        StdResultInfoDTO stdResultInfoDTO = stdResultInfoDTOMap.get(cacheKey);
         if(stdResultInfoDTO == null) {
             stdResultInfoDTO = SITBPServiceHelper.getStdInfoAndStdDim(Arrays.asList(sinSurStd.getLong("id"))).get(sinSurStd.getLong("id"));
-            pageCache.put(cacheKey, stdResultInfoDTO);
+            stdResultInfoDTOMap.put(cacheKey, stdResultInfoDTO);
         }
     }
 
@@ -146,9 +143,8 @@ public class SinSurEmpChgCoordBatchEditPluginEx extends AbstractFormPlugin imple
      */
     public void getDimensionValue(DynamicObject sinSurStd, DynamicObject welfaretype, DynamicObject sinSurDimension, int rowIndex, int subRowIndex) {
         IDataModel model = this.getModel();
-        HRPageCache pageCache = new HRPageCache(this.getView());
-        String cacheKey = String.valueOf(sinSurStd.getLong("id"));
-        StdResultInfoDTO stdResultInfoDTO = pageCache.get(cacheKey, StdResultInfoDTO.class);
+        Long cacheKey = sinSurStd.getLong("id");
+        StdResultInfoDTO stdResultInfoDTO = stdResultInfoDTOMap.get(cacheKey);
 
         if(welfaretype == null)
             return;
@@ -209,12 +205,18 @@ public class SinSurEmpChgCoordBatchEditPluginEx extends AbstractFormPlugin imple
         DynamicObjectCollection entryCols = bill.getDynamicObjectCollection("entryentity");
         // 当前选中行
         int row = model.getEntryCurrentRowIndex("entryentity");
+        // 2025-12-08 单据体中实际/理论参保单位也需要批量设置
+        DynamicObject payerA = (DynamicObject) model.getValue("welfarepayertheory_r31", row);
+        DynamicObject payerB = (DynamicObject) model.getValue("welfarepayer_r31", row);
         // 当前选中行的子单据体数据
         DynamicObjectCollection subCols = entryCols.get(row).getDynamicObjectCollection("nckd_subentryentity");
 
         for(int i = 0; i < entryCols.size(); i++) {
             if(i == row)
                 continue;
+            // 设置实际/理论参保单位
+            entryCols.get(i).set("welfarepayertheory_r31", payerA);
+            entryCols.get(i).set("welfarepayer_r31", payerB);
             // 获取本次要执行覆盖的子单据体
             DynamicObjectCollection otherSubCols = entryCols.get(i).getDynamicObjectCollection("nckd_subentryentity");
             // 清除数据
@@ -225,6 +227,7 @@ public class SinSurEmpChgCoordBatchEditPluginEx extends AbstractFormPlugin imple
                 DynamicObjectUtils.copy(subEntry, otherSubEntry);
             }
         }
+        this.getView().updateView("entryentity");
         this.getView().updateView("nckd_subentryentity");
     }
 

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

@@ -45,8 +45,14 @@ public class SITCoordinationUtils {
                                 if(stdDimDTO.getBaseDataId().equals(baseDataId)) {
                                     List<StdInsuranceItemDTO> list = stdDimRlslnfo.getStdInsuranceItemDTOs();
                                     for (StdInsuranceItemDTO itemDTO : list) {
-                                        BigDecimal itemValue = itemDTO.getItemValue() == null ? BigDecimal.ZERO : itemDTO.getItemValue();
-                                        result.put(itemDTO.getInsurPropId(), itemValue);
+                                        if(itemDTO.getInsurPropId() == 1030L || itemDTO.getInsurPropId() == 1040L) {
+                                            BigDecimal itemValue = itemDTO.getItemValue() == null ? BigDecimal.ZERO : itemDTO.getItemValue();
+                                            result.put(itemDTO.getInsurPropId(), itemValue.multiply(new BigDecimal("100")));
+                                        }
+                                        else {
+                                            BigDecimal itemValue = itemDTO.getItemValue() == null ? BigDecimal.ZERO : itemDTO.getItemValue();
+                                            result.put(itemDTO.getInsurPropId(), itemValue);
+                                        }
                                     }
                                 }
                             }
@@ -54,8 +60,14 @@ public class SITCoordinationUtils {
                         else if (stdDimDTOs.size() == 0 && baseDataId == 0L){
                             List<StdInsuranceItemDTO> list = stdDimRlslnfo.getStdInsuranceItemDTOs();
                             for (StdInsuranceItemDTO itemDTO : list) {
-                                BigDecimal itemValue = itemDTO.getItemValue() == null ? BigDecimal.ZERO : itemDTO.getItemValue();
-                                result.put(itemDTO.getInsurPropId(), itemValue);
+                                if(itemDTO.getInsurPropId() == 1030L || itemDTO.getInsurPropId() == 1040L) {
+                                    BigDecimal itemValue = itemDTO.getItemValue() == null ? BigDecimal.ZERO : itemDTO.getItemValue();
+                                    result.put(itemDTO.getInsurPropId(), itemValue.multiply(new BigDecimal("100")));
+                                }
+                                else {
+                                    BigDecimal itemValue = itemDTO.getItemValue() == null ? BigDecimal.ZERO : itemDTO.getItemValue();
+                                    result.put(itemDTO.getInsurPropId(), itemValue);
+                                }
                             }
                         }
                     }