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

feat(coordination): 添加社保核定单保存前处理功能

- 实现 SinsurCoordExtRegister 扩展注册类
- 创建 SinsurVerifBillBeforeSaveHandlerEx 处理器
- 添加社保核定单保存前携带险种基数信息功能
- 实现核定单条件判断逻辑(核定单类型=社保 变动大类=调动 流动类型=流入 是否拆单=否)
- 添加根据员工查询社保基数设置并赋值到单据体的功能
- 集成字段映射配置和社保基数查询工具类
Tyx 3 дней назад
Родитель
Сommit
3b676cf819

+ 14 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/business/coordination/api/SinsurCoordExtRegister.java

@@ -0,0 +1,14 @@
+package nckd.jxccl.sit.hcsi.business.coordination.api;
+
+import kd.hr.hbp.business.coordination.api.ext.CoordExtRegister;
+import kd.hr.hbp.business.coordination.model.CoordContext;
+import kd.hr.hbp.business.coordination.model.VerifBillStageEnum;
+
+public class SinsurCoordExtRegister implements CoordExtRegister {
+
+    @Override
+    public void registerHandler(CoordContext context) {
+        CoordExtRegister.super.registerHandler(context);
+        context.addVerifyBillBeforeSaveHandler(VerifBillStageEnum.AFTER_RULE_EXECUTE, new SinsurVerifBillBeforeSaveHandlerEx());
+    }
+}

+ 85 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/business/coordination/api/SinsurVerifBillBeforeSaveHandlerEx.java

@@ -0,0 +1,85 @@
+package nckd.jxccl.sit.hcsi.business.coordination.api;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.hr.hbp.business.coordination.api.ext.VerifBillBeforeSaveHandler;
+import kd.hr.hbp.business.coordination.model.CoordContext;
+import kd.hr.hbp.business.coordination.model.VerifBillStageEnum;
+import nckd.jxccl.sit.hcsi.utils.SITCoordinationUtils;
+
+import java.util.Map;
+
+/**
+ * @author: Tyx
+ * @date: 2026/01/08
+ * @description: 社保核定单保存前携带险种基数信息
+ */
+public class SinsurVerifBillBeforeSaveHandlerEx implements VerifBillBeforeSaveHandler {
+
+    private static final Log log = LogFactory.getLog(SinsurVerifBillBeforeSaveHandlerEx.class);
+
+    /**
+     * 社保核定单保存前方法:<p>
+     * 适用单据:核定单类型 = 社保 and 变动大类 = 调动 and 流动类型 = 流入 and 是否拆单 = 否
+     * @param dynamicObjects
+     * @param verifBillStageEnum
+     * @param coordContext
+     * @return
+     */
+    @Override
+    public Map<String, Object> beforeSave(DynamicObject[] dynamicObjects, VerifBillStageEnum verifBillStageEnum, CoordContext coordContext) {
+        // log.info("-------- 核定单 beforeSave 处理条数:" + dynamicObjects.length);
+
+        for (DynamicObject bill : dynamicObjects) {
+            if(checkIsNeedSiBaseInfo(bill)) {
+                dealSiBaseInfo(bill);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 判断当前核定单是否需要处理
+     * @param bill
+     * @return
+     */
+    public boolean checkIsNeedSiBaseInfo (DynamicObject bill) {
+        boolean isNeed = false;
+        boolean isSplit = bill.getBoolean("nckd_issplit");
+
+        // 协作业务对象
+        String objectNumber = bill.getDynamicObject("coordbizobject").getString("number");
+
+        DynamicObject ruleParam = bill.getDynamicObject("coordruleparam");
+        // 获取到变动大类和变动类型
+        String chgNumber = ruleParam.getString("chgevent_z.number");
+        String flowType = ruleParam.getString("flowtype_y");
+        if(objectNumber.equals("hcsi_sinsurfile") && !isSplit && chgNumber.equals("1020_S") && flowType.equals("1")) {
+            return true;
+        }
+        return isNeed;
+    }
+
+    /**
+     * 根据员工查询所有社保基数设置,并赋值到单据体中
+     * @param bill
+     */
+    public void dealSiBaseInfo (DynamicObject bill) {
+        DynamicObject ruleParam = bill.getDynamicObject("coordruleparam");
+        DynamicObject employee = ruleParam.getDynamicObject("employee");
+        DynamicObject[] sibaseCols = SITCoordinationUtils.getSiBaseByEmployeeId(employee.getLong("id"));
+        if(sibaseCols.length == 0)
+            return;
+        Map<String, String> fieldsMappingMap = SITCoordinationUtils.getFieldsMappingMap();
+        DynamicObjectCollection entryCols = bill.getDynamicObjectCollection("nckd_entryentity");
+        for(DynamicObject sibase : sibaseCols) {
+            DynamicObject entry = entryCols.addNew();
+            for (String key : fieldsMappingMap.keySet()) {
+                entry.set(fieldsMappingMap.get(key), sibase.get(key));
+            }
+        }
+    }
+
+}