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

Merge remote-tracking branch 'origin/master'

jtd 6 дней назад
Родитель
Сommit
415951e315
18 измененных файлов с 350 добавлено и 22 удалено
  1. 9 0
      code/base/nckd-jxccl-base-common/src/main/java/nckd/jxccl/base/common/utils/DateUtil.java
  2. 108 0
      code/base/nckd-jxccl-base-helper/src/main/java/nckd/jxccl/base/sit/helper/SITHelper.java
  3. 27 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hbp/formplugin/web/coordination/EmpChangeCoordinationListTplPluginEx.java
  4. 0 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hspm/mservice/.gitkeep
  5. 24 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hspm/mservice/PersonnelPredictionService.java
  6. 33 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hspm/mservice/api/IPersonnelPredictionService.java
  7. 36 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hspm/servicehelper/ServiceFactory.java
  8. 3 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/business/JobLevelCalculatorService.java
  9. 3 1
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/adjust/report/UnAdjustedReportReportListDataPlugin.java
  10. 12 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/annualadjust/report/UnAnnualAdjustReportFormPlugin.java
  11. 3 1
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/initial/GradedPersonQueryListPlugin.java
  12. 5 2
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/other/report/KeyBeHavEvalReptQueryPlugin.java
  13. 1 1
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/adjust/NewDynamicAdjustmentOperationPlugIn.java
  14. 1 1
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/annualadjust/AnnualAdjustmentOperationPlugin.java
  15. 1 1
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/initial/BaseInitialOperationPlugIn.java
  16. 13 2
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/performance/PerfRankMgmtSaveOpPlugin.java
  17. 57 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/file/SinsurFileEditEx.java
  18. 14 13
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/stm/plugin/form/appr/GrpSalStlApprFormPlugin.java

+ 9 - 0
code/base/nckd-jxccl-base-common/src/main/java/nckd/jxccl/base/common/utils/DateUtil.java

@@ -47,6 +47,15 @@ public class DateUtil {
         return LocalDateTime.now();
     }
 
+    /**
+     * 获取当前日期时间
+     *
+     * @return 当前日期时间
+     */
+    public static Date nowDate() {
+        return toDate(LocalDateTime.now());
+    }
+
     /**
      * 转换为Date对象
      *

+ 108 - 0
code/base/nckd-jxccl-base-helper/src/main/java/nckd/jxccl/base/sit/helper/SITHelper.java

@@ -0,0 +1,108 @@
+package nckd.jxccl.base.sit.helper;
+
+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 java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class SITHelper {
+
+    /*党政职务*/
+    public static final HRBaseServiceHelper PARTYPOSH_HELPER = new HRBaseServiceHelper("nckd_hrpi_partyposh");
+    /*雇佣信息*/
+    public static final HRBaseServiceHelper EMPENTREL_HELPER = new HRBaseServiceHelper("hsbs_empentrel");
+    /*服务年限*/
+    public static final HRBaseServiceHelper PERSERLEN_HELPER = new HRBaseServiceHelper("hsbs_perserlen");
+    /*职称信息*/
+    public static final HRBaseServiceHelper PERPROTITLE_HELPER = new HRBaseServiceHelper("hsbs_perprotitle");
+    /**
+     * 根据员工ID获取入职日期
+     * 员工档案-雇佣信息-入职日期
+     *
+     * @param employeeIds
+     * @return
+     */
+    public Map<Long, Date> getJoinDateByEmployeeID(List<Long> employeeIds) {
+        QFilter filter = new QFilter("employee.id", QCP.in, employeeIds);
+        filter.and("startdate", QCP.less_equals, new Date());
+        filter.and("enddate", QCP.large_equals, new Date());
+        filter.and("empstagelatestrecord", QCP.equals, "1");
+        String selectFields = "employee.id, entrydate";
+        DynamicObjectCollection cols = EMPENTREL_HELPER.queryOriginalCollection(selectFields, filter.toArray());
+        return (Map<Long, Date>) cols.stream().collect(Collectors.toMap((obj) -> {
+            return obj.getLong("employee.id");
+        }, (obj) -> {
+            return obj.getDate("entrydate");
+        }, (k1, k2) -> {
+            return k1;
+        }));
+    }
+
+    /**
+     * 根据员工ID获取离职日期
+     * 员工档案-服务年限-离职日期
+     *
+     * @param employeeIds
+     * @return
+     */
+    public Map<Long, Date> getQuitDateByEmployeeID(List<Long> employeeIds) {
+        QFilter filter = new QFilter("employee.id", QCP.in, employeeIds);
+        filter.and("iscurrentdata", QCP.equals, "1");
+        String selectFields = "employee.id, nckd_departdate";
+        DynamicObjectCollection cols = PERSERLEN_HELPER.queryOriginalCollection(selectFields, filter.toArray());
+        return (Map<Long, Date>) cols.stream().collect(Collectors.toMap((obj) -> {
+            return obj.getLong("employee.id");
+        }, (obj) -> {
+            return obj.getDate("nckd_departdate");
+        }, (k1, k2) -> {
+            return k1;
+        }));
+    }
+
+    /**
+     * 根据员工ID获取职务层级
+     * 员工档案-党政职务变更履历-职务层级
+     * @param employeeIds
+     * @return Map, k = employeeId, v = 职位层级名称
+     */
+    public Map<Long, String> getZwcjByEmployeeID(List<Long> employeeIds) {
+        QFilter filter = new QFilter("employee.id", QCP.in, employeeIds);
+        filter.and("startdate", QCP.less_equals, new Date());
+        filter.and("enddate", QCP.large_equals, new Date());
+        String selectFields = "employee.id, nckd_posgrade.name";
+        DynamicObjectCollection cols = PARTYPOSH_HELPER.queryOriginalCollection(selectFields, filter.toArray());
+        return (Map<Long, String>) cols.stream().collect(Collectors.toMap((obj) -> {
+            return obj.getLong("employee.id");
+        }, (obj) -> {
+            return obj.getString("nckd_posgrade.name");
+        }, (k1, k2) -> {
+            return k1;
+        }));
+    }
+
+    /**
+     * 根据员工ID获取职称级别
+     * 员工档案-职称信息-职称级别
+     *
+     * @param employeeIds
+     * @return
+     */
+    public Map<Long, Long> getProtitleLevelByEmployeeID(List<Long> employeeIds) {
+        QFilter filter = new QFilter("employee.id", QCP.in, employeeIds);
+        filter.and("iscompany", QCP.equals, "1");
+        String selectFields = "employee.id, prolevel.id";
+        DynamicObjectCollection cols = PERPROTITLE_HELPER.queryOriginalCollection(selectFields, filter.toArray());
+        return (Map<Long, Long>) cols.stream().collect(Collectors.toMap((obj) -> {
+            return obj.getLong("employee.id");
+        }, (obj) -> {
+            return obj.getLong("prolevel.id");
+        }, (k1, k2) -> {
+            return k1;
+        }));
+    }
+}

+ 27 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hbp/formplugin/web/coordination/EmpChangeCoordinationListTplPluginEx.java

@@ -0,0 +1,27 @@
+package nckd.jxccl.hr.hbp.formplugin.web.coordination;
+
+import kd.bos.dataentity.serialization.SerializationUtils;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.hr.hbp.formplugin.web.HRDataBaseList;
+import kd.sdk.plugin.Plugin;
+
+import java.util.EventObject;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Tyx 2026-01-05
+ * 核定单列表插件
+ * 处理tab页签,添加借调变动大类,标品后续优化,先自行处理
+ */
+public class EmpChangeCoordinationListTplPluginEx extends HRDataBaseList {
+
+    private final List<String> defaultTabNumbers = (List) Stream.of("tab_all", "tab_1010_s", "tab_1090_s", "tab_1020_s", "tab_1070_s", "tab_1030_s", "tab_1040_s", "tab_1050_s", "tab_1160_s", "tab_1120_s", "tab_9990_s", "tab_9980_s").collect(Collectors.toList());
+
+    @Override
+    public void beforeBindData(EventObject e) {
+        super.beforeBindData(e);
+        this.getPageCache().put("tabNumbers", SerializationUtils.toJsonString(defaultTabNumbers));
+    }
+}

+ 0 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hspm/mservice/.gitkeep


+ 24 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hspm/mservice/PersonnelPredictionService.java

@@ -0,0 +1,24 @@
+package nckd.jxccl.hr.hspm.mservice;
+
+import nckd.jxccl.hr.hspm.mservice.api.IPersonnelPredictionService;
+
+import java.util.Date;
+
+/**
+ * TODO
+ *
+ * @author W.Y.C
+ * @version 1.0
+ * @date 2026/1/5 14:47
+ */
+public class PersonnelPredictionService implements IPersonnelPredictionService {
+    @Override
+    public Double predictRetirement(Long orgId,Date beginDate, Date endDate) {
+        return 20.0;
+    }
+
+    @Override
+    public Double predictAttrition(Long orgId,Date beginDate, Date endDate) {
+        return 10.0;
+    }
+}

+ 33 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hspm/mservice/api/IPersonnelPredictionService.java

@@ -0,0 +1,33 @@
+package nckd.jxccl.hr.hspm.mservice.api;
+
+import java.util.Date;
+
+/**
+* 人员变动预测服务
+* 提供关于未来人员减少的预测数据,包括退休和减员。
+* @author W.Y.C
+* @date 2026/1/5 14:19
+* @version 1.0
+*/
+public interface IPersonnelPredictionService {
+
+    /**
+     * 预测单位/部门在未来某时间范围内的预计退休人数
+     * @param beginDate 查询开始日期
+     * @param endDate 查询结束日期
+     * @return: java.lang.Double
+     * @author W.Y.C
+     * @date: 2026/01/05 14:20
+     */
+    Double predictRetirement(Long orgId,Date beginDate, Date endDate);
+
+    /**
+     * 预测单位/部门在未来某时间范围内的预计减员人数
+     * @param beginDate 查询开始日期
+     * @param endDate 查询结束日期
+     * @return: java.lang.Double
+     * @author W.Y.C
+     * @date: 2026/01/05 14:21
+     */
+    Double predictAttrition(Long orgId,Date beginDate, Date endDate);
+}

+ 36 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hspm/servicehelper/ServiceFactory.java

@@ -0,0 +1,36 @@
+package nckd.jxccl.hr.hspm.servicehelper;
+
+import kd.bos.dataentity.TypesContainer;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * TODO
+ *
+ * @author W.Y.C
+ * @version 1.0
+ * @date 2026/1/5 15:22
+ */
+public class ServiceFactory {
+
+    private static final Map<String, String> SERVICE_MAP = new HashMap<String, String>() {
+        {
+            this.put("IPersonnelPredictionService", "nckd.jxccl.hr.hspm.mservice.PersonnelPredictionService");
+        }
+    };
+
+    public static <T> T getService(Class<T> clazz) {
+        return (T)getService(clazz.getSimpleName());
+    }
+
+    public static Object getService(String serviceName) {
+        String className = (String)SERVICE_MAP.get(serviceName);
+        if (className == null) {
+            throw new RuntimeException(String.format(Locale.ROOT, "%s service not find", serviceName));
+        } else {
+            return TypesContainer.getOrRegisterSingletonInstance(className);
+        }
+    }
+}

+ 3 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/business/JobLevelCalculatorService.java

@@ -2218,6 +2218,7 @@ public class JobLevelCalculatorService {
         QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
                 .addIdNumberNameWithExtras(
                         FormConstant.JOBLEVELSEQ,
+                        PositionStructureConstant.NCKD_ALIAS,
                         FormConstant.NCKD_COEFFICIENT,
                         FormConstant.NCKD_SCORE
                 );
@@ -2250,6 +2251,7 @@ public class JobLevelCalculatorService {
                 .addIdNumberNameWithExtras(
                         new String[]{FormConstant.HBJM_JOBLEVELHR},
                         FormConstant.JOBLEVELSEQ,
+                        PositionStructureConstant.NCKD_ALIAS,
                         FormConstant.NCKD_COEFFICIENT,
                         FormConstant.NCKD_SCORE
                 );
@@ -2305,6 +2307,7 @@ public class JobLevelCalculatorService {
                 .addIdNumberNameWithExtras(
                         new String[]{FormConstant.HBJM_JOBLEVELHR},
                         FormConstant.JOBLEVELSEQ,
+                        PositionStructureConstant.NCKD_ALIAS,
                         FormConstant.NCKD_COEFFICIENT,
                         FormConstant.NCKD_SCORE
                 );

+ 3 - 1
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/adjust/report/UnAdjustedReportReportListDataPlugin.java

@@ -133,7 +133,9 @@ public class UnAdjustedReportReportListDataPlugin extends AbstractReportListData
                         ORMHint.JoinHint.LEFT, Boolean.FALSE))
                 .and(QFilter.join(FormConstant.EMPLOYEE_KEY, String.join(".", FormConstant.HRPI_PEREDUEXP, FormConstant.EMPLOYEE_KEY), new QFilter(String.join(".", FormConstant.HRPI_PEREDUEXP, "ishighestdegree"),
                                 QCP.equals, EnableEnum.YES.getCode()),
-                        ORMHint.JoinHint.LEFT, Boolean.FALSE));
+                        ORMHint.JoinHint.LEFT, Boolean.FALSE))
+                //在岗
+                .and(String.join( ".", FormConstant.POS_STATUS, FormConstant.POST_STATE_CLS, FormConstant.NUMBER_KEY),QCP.equals,"1010_S");
     }
 
     /**

+ 12 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/annualadjust/report/UnAnnualAdjustReportFormPlugin.java

@@ -7,6 +7,7 @@ import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.form.CloseCallBack;
 import kd.bos.form.FormShowParameter;
 import kd.bos.form.ShowType;
+import kd.bos.form.control.events.BeforeItemClickEvent;
 import kd.bos.form.control.events.ItemClickEvent;
 import kd.bos.form.plugin.AbstractFormPlugin;
 import kd.bos.orm.query.QCP;
@@ -35,6 +36,17 @@ public class UnAnnualAdjustReportFormPlugin extends AbstractReportFormPlugin imp
     @Override
     public void registerListener(EventObject e) {
         this.addItemClickListeners(FormConstant.TOOLBARAP);
+        this.addItemClickListeners(new String[]{"nckd_tblclose"});
+    }
+
+    public void beforeItemClick(BeforeItemClickEvent evt) {
+        super.beforeItemClick(evt);
+        String itemKey = evt.getItemKey();
+        if ("nckd_tblclose".equals(itemKey)) {
+            this.getView().getParentView().invokeOperation("close");
+            this.getView().sendFormAction(this.getView().getParentView());
+        }
+
     }
 
     @Override

+ 3 - 1
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/initial/GradedPersonQueryListPlugin.java

@@ -6,6 +6,7 @@ import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.sdk.plugin.Plugin;
+import nckd.jxccl.base.common.enums.psms.TypeStateEnum;
 import nckd.jxccl.hr.psms.common.PositionStructureConstant;
 
 /**
@@ -20,7 +21,8 @@ public class GradedPersonQueryListPlugin extends AbstractListPlugin implements P
     public void setFilter(SetFilterEvent setFilterEvent) {
         //只查询初定的档案
         QFilter filter = new QFilter(PositionStructureConstant.NCKD_DISABLE, QCP.equals,EnableEnum.NO.getCode())
-                .and(new QFilter(PositionStructureConstant.NCKD_FIRSTRANK, QCP.equals,EnableEnum.YES.getCode()));
+                .and(new QFilter(PositionStructureConstant.NCKD_FIRSTRANK, QCP.equals,EnableEnum.YES.getCode()))
+                .and(new QFilter(PositionStructureConstant.NCKD_TYPESTATE, QCP.in, new String[]{TypeStateEnum.IN_SERVICE_LEVEL.getCode(),TypeStateEnum.NEW_ENTRY.getCode()}));
         setFilterEvent.addCustomQFilter(filter);
     }
 }

+ 5 - 2
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/other/report/KeyBeHavEvalReptQueryPlugin.java

@@ -85,8 +85,8 @@ public class KeyBeHavEvalReptQueryPlugin extends AbstractReportListDataPlugin im
                 RequestContext.get().getCurrUserId(), "nckd_psmsfile", PositionStructureConstant.PERSONPOSFILE_ENTITYID,
                 PermItemConst.ITEM_VIEW, new HashMap<>());
         if (dataRule != null) {
-            Object value = dataRule.getValue();
-            qFilter.and(String.join(".",FormConstant.NCKD_PERSON,FormConstant.HRPI_EMPPOSORGREL, FormConstant.ADMINORG), QCP.in, value);
+//            Object value = dataRule.getValue();
+            qFilter.and(dataRule);
         }
 
         processFastFilter(reportQueryParam, qFilter);
@@ -94,6 +94,7 @@ public class KeyBeHavEvalReptQueryPlugin extends AbstractReportListDataPlugin im
         processFilter(reportQueryParam, qFilter);
 
         DataSet mainTableDataSet = queryMainTableDataSet(qFilter);
+        mainTableDataSet.print(true);
 
         // 6. 关联主表和行转列结果
         DataSet finalResultDataSet = joinMainAndPivotData(mainTableDataSet, pivotResultDataSet);
@@ -287,6 +288,8 @@ public class KeyBeHavEvalReptQueryPlugin extends AbstractReportListDataPlugin im
      * 查询主表数据
      */
     private DataSet queryMainTableDataSet(QFilter qFilter) {
+
+
         QueryFieldBuilder queryFieldBuilder = buildQueryFieldBuilder();
         return QueryServiceHelper.queryDataSet("KeyBeHavEvalReptQueryPlugin", 
                 PositionStructureConstant.KEYBEHAVEVAL_ENTITYID, 

+ 1 - 1
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/adjust/NewDynamicAdjustmentOperationPlugIn.java

@@ -422,7 +422,7 @@ public class NewDynamicAdjustmentOperationPlugIn extends AbstractOperationServic
         String jobLeveStr = StrFormatter.format("{}:{}({}级)",
                 person.getString(FormConstant.NAME_KEY),
                 jobLeve.getString(FormConstant.NAME_KEY),
-                jobLeve.getString(FormConstant.JOBLEVELSEQ));
+                jobLeve.getString(PositionStructureConstant.NCKD_ALIAS));
 
         Map<String, String> customData = this.getOperationResult().getCustomData();
         if(customData == null) {

+ 1 - 1
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/annualadjust/AnnualAdjustmentOperationPlugin.java

@@ -232,7 +232,7 @@ public class AnnualAdjustmentOperationPlugin extends AbstractOperationServicePlu
         String jobLeveStr = StrFormatter.format("{}:{}({}级);{}",
                 person.getString(FormConstant.NAME_KEY),
                 jobLeve.getString(FormConstant.NAME_KEY),
-                jobLeve.getString(FormConstant.JOBLEVELSEQ),
+                jobLeve.getString(PositionStructureConstant.NCKD_ALIAS),
                 adjustTypeEnum.getName());
 
         Map<String, String> customData = this.getOperationResult().getCustomData();

+ 1 - 1
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/initial/BaseInitialOperationPlugIn.java

@@ -493,7 +493,7 @@ public abstract class BaseInitialOperationPlugIn extends AbstractOperationServic
         String jobLeveStr = StrFormatter.format("{}:{}({}级)", 
                 person.getString(FormConstant.NAME_KEY),
                 jobLeve.getString(FormConstant.NAME_KEY),
-                jobLeve.getString(FormConstant.JOBLEVELSEQ));
+                jobLeve.getString(PositionStructureConstant.NCKD_ALIAS));
         
         Map<String, String> customData = this.getOperationResult().getCustomData();
         if(customData == null) {

+ 13 - 2
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/performance/PerfRankMgmtSaveOpPlugin.java

@@ -15,6 +15,8 @@ import kd.bos.entity.plugin.AddValidatorsEventArgs;
 import kd.bos.entity.plugin.PreparePropertysEventArgs;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
 import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
@@ -30,6 +32,7 @@ import nckd.jxccl.base.common.utils.QueryFieldBuilder;
 import nckd.jxccl.base.common.utils.StrFormatter;
 import nckd.jxccl.base.hrpi.helper.EmpPosOrgRelHelper;
 import nckd.jxccl.base.orm.helper.QFilterCommonHelper;
+import nckd.jxccl.hr.hstu.business.helper.HonorStudentHelper;
 import nckd.jxccl.hr.psms.common.PerfRankMgmtConstant;
 import nckd.jxccl.hr.psms.common.PositionStructureConstant;
 import nckd.jxccl.hr.psms.plugin.operate.performance.validate.PerfRankMgmtSaveValidate;
@@ -60,6 +63,8 @@ import java.util.stream.Collectors;
 */
 public class PerfRankMgmtSaveOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
 
+    private static final Log logger = LogFactory.getLog(PerfRankMgmtSaveOpPlugin.class);
+
     @Override
     public void onPreparePropertys(PreparePropertysEventArgs e) {
         e.getFieldKeys().addAll(this.billEntityType.getAllFields().keySet());
@@ -214,11 +219,17 @@ public class PerfRankMgmtSaveOpPlugin extends AbstractOperationServicePlugIn imp
                 DynamicObject empPosOrg = empPosOrgRelByEmployeesMap.get(person.getLong(FormConstant.ID_KEY));
                 if(entry.getDynamicObject(FormConstant.NCKD_DEP) == null){
                     //赋值组织
-                    entry.set(FormConstant.NCKD_DEP,empPosOrg.get(FormConstant.ADMINORG));
+                    if(empPosOrg != null) {
+                        entry.set(FormConstant.NCKD_DEP, empPosOrg.get(FormConstant.ADMINORG));
+                    }else{
+                        logger.warn("【{}】人员没有任职信息", person.getLong(FormConstant.ID_KEY));
+                    }
                 }
                 if(entry.getDynamicObject(PositionStructureConstant.NCKD_POSITIONHR) == null){
                     //赋值岗位
-                    entry.set(PositionStructureConstant.NCKD_POSITIONHR,empPosOrg.get(FormConstant.POSITION_KEY));
+                    if(empPosOrg != null) {
+                        entry.set(PositionStructureConstant.NCKD_POSITIONHR, empPosOrg.get(FormConstant.POSITION_KEY));
+                    }
                 }
 
                 //生成R排名

+ 57 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/file/SinsurFileEditEx.java

@@ -0,0 +1,57 @@
+package nckd.jxccl.sit.hcsi.formplugin.web.file;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.datamodel.IDataModel;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.base.sit.helper.SITHelper;
+
+import java.util.Date;
+import java.util.EventObject;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Tyx 2026-01-05
+ * 社保档案表单插件,查询入职日期,离职日期,党政职务,技术职称
+ */
+public class SinsurFileEditEx extends AbstractFormPlugin implements Plugin {
+
+
+    @Override
+    public void beforeBindData(EventObject e) {
+        super.beforeBindData(e);
+        getRelatedData();
+    }
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+    }
+
+    /**
+     * 查询相关信息:
+     * 查询入职日期,离职日期,党政职务,技术职称
+     */
+    public void getRelatedData(){
+        IDataModel model = this.getModel();
+        DynamicObject dyn = model.getDataEntity();
+        Long employeeId = dyn.getLong("employee.id");
+        List<Long> employeeIds = Stream.of(employeeId).collect(Collectors.toList());
+        
+        SITHelper helper = new SITHelper();
+        Map<Long, Date> joinDateMap = helper.getJoinDateByEmployeeID(employeeIds);
+        Map<Long, Date> quitDateMap = helper.getQuitDateByEmployeeID(employeeIds);
+        Map<Long, String> zwcjMap = helper.getZwcjByEmployeeID(employeeIds);
+        Map<Long, Long> protitleMap = helper.getProtitleLevelByEmployeeID(employeeIds);
+
+        model.setValue("nckd_joindate", joinDateMap.keySet().contains(employeeId) ? joinDateMap.get(employeeId) : null);
+        model.setValue("nckd_leavedate", quitDateMap.keySet().contains(employeeId) ? quitDateMap.get(employeeId) : null);
+        model.setValue("nckd_posname", zwcjMap.keySet().contains(employeeId) ? zwcjMap.get(employeeId) : null);
+        model.setValue("nckd_prolevel", protitleMap.keySet().contains(employeeId) ? protitleMap.get(employeeId) : 0L);
+    }
+
+
+}

+ 14 - 13
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/stm/plugin/form/appr/GrpSalStlApprFormPlugin.java

@@ -101,18 +101,20 @@ public class GrpSalStlApprFormPlugin extends AbstractFormPlugin implements Plugi
                         List<DynamicObject> lastYearDataList = lastYearDataMap.get(unitId);
                         if(lastYearDataList != null && !lastYearDataList.isEmpty()){
                             DynamicObject lastYearData = lastYearDataList.get(0);
-                            //上年实际计提工资总额与应提工资总额差额
-                            entry.set(StmConstant.NCKD_LYRACTVSEXPDIFF, lastYearData.getBigDecimal(String.join(".",StmConstant.NCKD_ENTRYENTITY,StmConstant.NCKD_LYRACTVSEXPDIFF)));
-                            //上年补提或冲回以前年度差额
-                            entry.set(StmConstant.NCKD_LYRPRIORADJDIFF, lastYearData.getBigDecimal(String.join(".",StmConstant.NCKD_ENTRYENTITY,StmConstant.NCKD_LYRPRIORADJDIFF)));
-                            //上年年薪人员差额
-                            entry.set(StmConstant.NCKD_LYRANNSALDIFF, lastYearData.getBigDecimal(String.join(".",StmConstant.NCKD_ENTRYENTITY,StmConstant.NCKD_LYRANNSALDIFF)));
-                            //上年任期激励差额
-                            entry.set(StmConstant.NCKD_LYRTERMBONUSDIFF, lastYearData.getBigDecimal(String.join(".",StmConstant.NCKD_ENTRYENTITY,StmConstant.NCKD_LYRTERMBONUSDIFF)));
-                            //上年组织绩效差额
-                            entry.set(StmConstant.NCKD_LYRORGPERFDIFF, lastYearData.getBigDecimal(String.join(".",StmConstant.NCKD_ENTRYENTITY,StmConstant.NCKD_LYRORGPERFDIFF)));
-                            //上年单项工资差额
-                            entry.set(StmConstant.NCKD_LYRITEMWGDIFF, lastYearData.getBigDecimal(String.join(".",StmConstant.NCKD_ENTRYENTITY,StmConstant.NCKD_LYRITEMWGDIFF)));
+                            if(lastYearData.containsProperty(StmConstant.NCKD_ENTRYENTITY)) {
+                                //上年实际计提工资总额与应提工资总额差额
+                                entry.set(StmConstant.NCKD_LYRACTVSEXPDIFF, lastYearData.getBigDecimal(String.join(".", StmConstant.NCKD_ENTRYENTITY, StmConstant.NCKD_LYRACTVSEXPDIFF)));
+                                //上年补提或冲回以前年度差额
+                                entry.set(StmConstant.NCKD_LYRPRIORADJDIFF, lastYearData.getBigDecimal(String.join(".", StmConstant.NCKD_ENTRYENTITY, StmConstant.NCKD_LYRPRIORADJDIFF)));
+                                //上年年薪人员差额
+                                entry.set(StmConstant.NCKD_LYRANNSALDIFF, lastYearData.getBigDecimal(String.join(".", StmConstant.NCKD_ENTRYENTITY, StmConstant.NCKD_LYRANNSALDIFF)));
+                                //上年任期激励差额
+                                entry.set(StmConstant.NCKD_LYRTERMBONUSDIFF, lastYearData.getBigDecimal(String.join(".", StmConstant.NCKD_ENTRYENTITY, StmConstant.NCKD_LYRTERMBONUSDIFF)));
+                                //上年组织绩效差额
+                                entry.set(StmConstant.NCKD_LYRORGPERFDIFF, lastYearData.getBigDecimal(String.join(".", StmConstant.NCKD_ENTRYENTITY, StmConstant.NCKD_LYRORGPERFDIFF)));
+                                //上年单项工资差额
+                                entry.set(StmConstant.NCKD_LYRITEMWGDIFF, lastYearData.getBigDecimal(String.join(".", StmConstant.NCKD_ENTRYENTITY, StmConstant.NCKD_LYRITEMWGDIFF)));
+                            }
                         }
                         Result avgMasPeopleNum = avgMasPeopleNumMap.get(unitId);
                         if(avgMasPeopleNum != null) {
@@ -302,7 +304,6 @@ public class GrpSalStlApprFormPlugin extends AbstractFormPlugin implements Plugi
      */
     private Map<Long,Result> avgMasPeopleNum(Date year, List<Long> unitIds){
         Map<Long,Result> result = new HashMap<>();
-        
         // 定义常量
         final String SALARY_ITEM_NUMBER = "JT_477"; // 实发工资
         final BigDecimal MONTHS_IN_YEAR = new BigDecimal(12); // 一年的月份数