Ver código fonte

feat(mas): 新增任期人员名单及党政职务履历功能

- 新增常量定义:载入党政职务履历弹窗、任期人员名单实体标识
- 实现载入党政职务履历弹窗表单插件,支持数据回传与关闭操作
- 实现任期人员名单列表插件,支持载入党政职务履历功能
- 优化子企业负责人服务信息构建逻辑,复用员工对象避免重复创建
- 新增企业负责人任期激励核定表单插件,支持分期支付选项控制
- 更新企业领导年度薪资标准插件,过滤任期及长期激励项目
- 完善子企业负责人薪资标准表单插件,增强支付年份字段启用控制
- 调整包路径:SubCoHeadServiceOpPlugin 移至 empmgt 包下管理
- 增强空值判断,防止动态对象为空时引发异常
- 新增任期人员名单保存操作插件,支持载入选项验证逻辑
wyc 2 dias atrás
pai
commit
a23e25cac9

+ 13 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/common/MasConstant.java

@@ -151,4 +151,17 @@ public class MasConstant extends FormConstant {
     public static final String NCKD_SUBCORPSALARYENTRY = "nckd_subcorpsalaryentry";
     /*-------------------------------------- 子企业负责人薪酬结构常量类 begin --------------------------------------*/
 
+
+    /*-------------------------------------- 载入党政职务履历弹窗 begin --------------------------------------*/
+    /** 载入党政职务履历弹窗-实体标识 */
+    public static final String LOADPARTYPOSTPOPUP_ENTITYID = "nckd_loadpartypostpopup";
+    /*-------------------------------------- 载入党政职务履历弹窗 end --------------------------------------*/
+
+
+    /*-------------------------------------- 任期人员名单 begin --------------------------------------*/
+    /** 任期人员名单-实体标识 */
+    public static final String TENUREPERSONLIST_ENTITYID = "nckd_tenurepersonlist";
+    /*-------------------------------------- 任期人员名单 end --------------------------------------*/
+
+
 }

+ 28 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/plugin/form/empmgt/LoadPartyPostPopupFormPlugin.java

@@ -0,0 +1,28 @@
+package nckd.jxccl.swc.mas.plugin.form.empmgt;
+
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.swc.mas.common.MasConstant;
+
+/**
+* 载入党政职务履历弹窗
+* 实体标识:nckd_loadpartypostpopup
+* @author W.Y.C
+* @date 2025/11/30 20:18
+* @version 1.0
+*/
+public class LoadPartyPostPopupFormPlugin extends AbstractFormPlugin implements Plugin {
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
+        String operateKey = afterDoOperationEventArgs.getOperateKey();
+        boolean success = afterDoOperationEventArgs.getOperationResult() != null && afterDoOperationEventArgs.getOperationResult().isSuccess();
+        if (success && FormConstant.AFFIRM_OP.equalsIgnoreCase(operateKey)) {
+            Object value = this.getModel().getValue(MasConstant.NCKD_TERM);
+            this.getView().returnDataToParent(value);
+            this.getView().close();
+        }
+    }
+}

+ 13 - 5
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/plugin/form/empmgt/SubCoHeadServiceListPlugin.java

@@ -293,8 +293,14 @@ public class SubCoHeadServiceListPlugin extends AbstractListPlugin implements Pl
             newSubCoHeadService.set(MasConstant.NCKD_EMPLOYEE,entHeadRecordEntry.getKey());
             newSubCoHeadService.set(MasConstant.STATUS, StatusEnum.B.toString());
             newSubCoHeadService.set(MasConstant.ENABLE, EnableEnum.YES.getCode());
+            DynamicObject employee = null;
             //党政履历
             if(partyPosh != null) {
+                long employeeId = partyPosh.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
+                if(employeeId > 0) {
+                    employee = EntityHelper.newEntity(MasConstant.HSBS_EMPLOYEE, employeeId);
+                    employee.set(FormConstant.NAME_KEY, partyPosh.getString(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.NAME_KEY)));
+                }
                 //所属二级单位(发薪单位)
                 long payOrgId = partyPosh.getLong(String.join(".", FormConstant.NCKD_ORG, FormConstant.ID_KEY));
                 DynamicObject payOrg = EntityHelper.newEntity(FormConstant.ADMINORGHR_ENTITYID, payOrgId);
@@ -336,7 +342,11 @@ public class SubCoHeadServiceListPlugin extends AbstractListPlugin implements Pl
             }
             //企业负责人信息
             if(entHead != null){
-
+                long employeeId = entHead.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
+                if(employeeId > 0) {
+                    employee = EntityHelper.newEntity(MasConstant.HSBS_EMPLOYEE, employeeId);
+                    employee.set(FormConstant.NAME_KEY, entHead.getString(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.NAME_KEY)));
+                }
                 //是否职业经理人
                 newSubCoHeadService.set(MasConstant.NCKD_ISPROFMAN,entHead.getString(MasConstant.NCKD_ISPROFMAN));
                 //是否经理层成员
@@ -352,12 +362,10 @@ public class SubCoHeadServiceListPlugin extends AbstractListPlugin implements Pl
                 //法人岗位层级
                 DynamicObject legPostLv = EntityHelper.newEntity(FormConstant.NCKD_HBSS_LEGPOSTLV, entHead.getLong(String.join(".", MasConstant.NCKD_LEGPOSTLV,FormConstant.ID_KEY)));
                 newSubCoHeadService.set(MasConstant.NCKD_LEGPOSTLV,legPostLv);
-                //员工信息
-                DynamicObject employee = EntityHelper.newEntity(MasConstant.HSBS_EMPLOYEE, entHead.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY)));
-                employee.set(FormConstant.NAME_KEY,entHead.getString(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.NAME_KEY)));
-                newSubCoHeadService.set(FormConstant.NCKD_EMPLOYEE,employee);
 
             }
+            //员工信息
+            newSubCoHeadService.set(FormConstant.NCKD_EMPLOYEE,employee);
             saveSubCoHeadServiceList.add(newSubCoHeadService);
 
         }

+ 384 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/plugin/form/empmgt/TenurePersonListListPlugin.java

@@ -0,0 +1,384 @@
+package nckd.jxccl.swc.mas.plugin.form.empmgt;
+
+import kd.bos.common.enums.EnableEnum;
+import kd.bos.consts.PermItemConst;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.OperateOption;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.constant.StatusEnum;
+import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.form.CloseCallBack;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.IFormView;
+import kd.bos.form.IPageCache;
+import kd.bos.form.MessageBoxOptions;
+import kd.bos.form.ShowType;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.ClosedCallBackEvent;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.mvc.SessionManager;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.hr.hbp.common.model.AuthorizedOrgResultWithSub;
+import kd.sdk.hr.hbp.business.helper.permission.HRPermissionServiceHelper;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.utils.ConvertUtil;
+import nckd.jxccl.base.common.utils.DateUtil;
+import nckd.jxccl.base.common.utils.QueryFieldBuilder;
+import nckd.jxccl.base.common.utils.ShowOperExecuteResult;
+import nckd.jxccl.base.entity.helper.EntityHelper;
+import nckd.jxccl.base.hrpi.helper.EmpPosOrgRelHelper;
+import nckd.jxccl.swc.mas.common.MasConstant;
+
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.BinaryOperator;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+* 任期人员名单-列表插件
+* 实体标识:nckd_tenurepersonlist
+* @author W.Y.C
+* @date 2025/11/30 20:04
+* @version 1.0
+*/
+public class TenurePersonListListPlugin extends AbstractListPlugin implements Plugin {
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs e) {
+        String operateKey = e.getOperateKey();
+        if(e.getOperationResult() != null && e.getOperationResult().isSuccess()){
+            if(MasConstant.LOADPARTYPOSITION_OP.equals(operateKey)){
+                //载入党政职务履历
+                FormShowParameter showParameter = new FormShowParameter();
+                showParameter.setFormId(MasConstant.LOADPARTYPOSTPOPUP_ENTITYID);
+                showParameter.getOpenStyle().setShowType(ShowType.Modal);
+                showParameter.setCaption("请选择要载入的【任期】");
+                showParameter.setSendToClient(true);
+                showParameter.setCloseCallBack(new CloseCallBack(this, MasConstant.LOADPARTYPOSTPOPUP_ENTITYID));
+                this.getView().showForm(showParameter);
+            }
+        }
+    }
+
+    @Override
+    public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
+        String actionId = closedCallBackEvent.getActionId();
+        if(MasConstant.LOADPARTYPOSTPOPUP_ENTITYID.equalsIgnoreCase(actionId)){
+            Object returnData = closedCallBackEvent.getReturnData();
+            if(returnData != null) {
+                DynamicObject term = ConvertUtil.toDynamicObjectOrNull(returnData);
+                loadParTyPosition(term);
+            }
+        }
+    }
+
+    /**
+     * 载入党政职务履历
+     * @return: void
+     * @author W.Y.C
+     * @date: 2025/11/27 18:40
+     */
+    private void loadParTyPosition(DynamicObject term){
+        LocalDateTime now = DateUtil.now();
+
+        LocalDateTime beginYear = DateUtil.beginOfYear(now);
+        LocalDateTime endYear = DateUtil.endOfYear(now);
+
+        Date startOfYear = DateUtil.toDate(DateUtil.beginOfYear(now));
+        Date endOfYear = DateUtil.toDate(DateUtil.endOfYear(now));
+
+        // 只处理权限范围内的人员
+        Long currUserId = RequestContext.get().getCurrUserId();
+        AuthorizedOrgResultWithSub userAdminOrgWithSub = HRPermissionServiceHelper.getUserAdminOrgsWithSub(
+                currUserId, "nckd_pm", MasConstant.SUBCOHEADSERVICE_ENTITYID,
+                PermItemConst.ITEM_VIEW, "nckd_employee.hsbs_empposorgrel.adminorg", new HashMap<>());
+        QueryFieldBuilder subCoHeadServiceFieldBuilder = QueryFieldBuilder.create()
+                .addIdNumberName(MasConstant.NCKD_EMPLOYEE);
+        //查询任期区间已生成的人员
+        QFilter tenurePersonListFilterFilter = new QFilter(MasConstant.NCKD_TERM, QCP.equals, term.getLong(FormConstant.ID_KEY));
+        DynamicObjectCollection tenurePersonListFilterQuery = QueryServiceHelper.query(MasConstant.TENUREPERSONLIST_ENTITYID, subCoHeadServiceFieldBuilder.buildSelect(), new QFilter[]{tenurePersonListFilterFilter});
+        List<Long> employeeIds = tenurePersonListFilterQuery.stream()
+                .map(dynamicObject -> dynamicObject.getLong(String.join(".", MasConstant.NCKD_EMPLOYEE, FormConstant.ID_KEY)))
+                .collect(Collectors.toList());
+
+        //查询党政履历
+//        nckd_hrpi_partyposh
+        QueryFieldBuilder partyPoshFieldBuilder = QueryFieldBuilder.create()
+                .add(MasConstant.STARTDATE)
+                .add(MasConstant.ENDDATE)
+                .add(MasConstant.NCKD_PAYUNIT)
+                //变动时间
+                .add(MasConstant.NCKD_CHANGETIME)
+                .add(MasConstant.NCKD_POSNAME)
+                .addIdNumberName(MasConstant.NCKD_POSCHTP)
+                .addIdNumberName(MasConstant.NCKD_POSLEVEL)
+                .addIdNumberName(MasConstant.NCKD_POSGRADE)
+                .addIdNumberName(MasConstant.NCKD_APPRWAY)
+                .add(MasConstant.NCKD_OFFICEDEPT)
+                .add(MasConstant.NCKD_APPRDOCNO)
+                .add(MasConstant.NCKD_ISDIRCADRE)
+                .addIdNumberName(MasConstant.NCKD_ORGPOSGRD)
+                .add(MasConstant.EMPLOYEE_KEY)
+                .addIdNumberName(MasConstant.NCKD_ORG)
+                .orderDesc(MasConstant.STARTDATE, MasConstant.ENDDATE);
+        QFilter allPartyPoshFilter = new QFilter(MasConstant.EMPLOYEE_KEY, QCP.not_in, employeeIds);
+        //TODO 法人岗位层级为高管;
+        DynamicObjectCollection allPartyPoshQuery = QueryServiceHelper.query(FormConstant.NCKD_HRPI_PARTYPOSH, partyPoshFieldBuilder.buildSelect(), new QFilter[]{allPartyPoshFilter});
+        //按员工ID分组
+        Map<Long, List<DynamicObject>> groupedPartyPoshQuery = allPartyPoshQuery.stream()
+                .collect(Collectors.groupingBy(
+                        obj -> obj.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY))
+                ));
+
+        // 找出当年范围内的党政履历信息(如果有多条则取开始时间最新一条)
+        Map<Long, DynamicObject> latestPartyPoshRecordMap = new HashMap<>();
+        // 用于存储下一条党政履历记录的映射
+        Map<Long, DynamicObject> nextPartyPoshRecordMap = new HashMap<>();
+        for (Map.Entry<Long, List<DynamicObject>> entry : groupedPartyPoshQuery.entrySet()) {
+            Long employeeId = entry.getKey();
+            List<DynamicObject> records = entry.getValue();
+
+            // 筛选出在当年时间范围内的记录,然后取STARTDATE最新的那一条
+            Optional<DynamicObject> latestRecord = records.stream()
+                    .filter(record -> {
+                        Date startDate = record.getDate(MasConstant.STARTDATE);
+                        Date endDate = record.getDate(MasConstant.ENDDATE);
+                        // 判断记录是否在当年范围内
+                        return startDate != null && !startDate.after(endOfYear) &&
+                                (endDate == null || !endDate.before(startOfYear));
+                    })
+                    .max(Comparator.comparing(record -> record.getDate(MasConstant.STARTDATE),
+                            Comparator.nullsFirst(Comparator.naturalOrder())));
+
+            if (latestRecord.isPresent()) {
+                DynamicObject currentRecord = latestRecord.get();
+                latestPartyPoshRecordMap.put(employeeId, currentRecord);
+
+                // 根据当前记录的结束时间查找下一条记录
+                Date currentEndDate = currentRecord.getDate(MasConstant.ENDDATE);
+                if (currentEndDate != null) {
+                    // 查找开始时间等于当前记录结束时间的下一条记录
+                    Optional<DynamicObject> nextRecord = records.stream()
+                            .filter(record -> {
+                                Date startDate = record.getDate(MasConstant.STARTDATE);
+                                // 查找开始时间等于当前记录结束时间的记录
+                                return startDate != null && !startDate.before(currentEndDate);
+                            })
+                            .findFirst();
+
+                    nextRecord.ifPresent(record -> nextPartyPoshRecordMap.put(employeeId, record));
+                }
+            }
+        }
+
+
+        //查询企业负责人信息
+        QueryFieldBuilder entHeadFieldBuilder = QueryFieldBuilder.create()
+                .add(MasConstant.ID_KEY)
+                .add(MasConstant.STARTDATE)
+                .add(MasConstant.ENDDATE)
+                .add(MasConstant.NCKD_TERM)
+                .add(MasConstant.EMPLOYEE_KEY)
+                .orderDesc(MasConstant.STARTDATE, MasConstant.ENDDATE);
+
+        //查询下一段的企业负责人信息;用于后续逻辑查找下一段的负责人信息
+        QFilter allEntHeadFilter = new QFilter(FormConstant.EMPLOYEE_KEY, QCP.not_in, employeeIds)
+                //法人岗位层级为高管
+                .and(String.join(".", MasConstant.NCKD_LEGPOSTLV, MasConstant.NCKD_ISEXEC),QCP.equals, EnableEnum.YES.getCode());
+        //查询出人员所有的企业负责人信息
+        DynamicObjectCollection allEntHeadQuery = QueryServiceHelper.query(FormConstant.NCKD_HRPI_ENTHEAD, entHeadFieldBuilder.buildSelect(), new QFilter[]{allEntHeadFilter});
+        Map<Long, List<DynamicObject>> groupedEntHeadQuery = allEntHeadQuery.stream()
+                .collect(Collectors.groupingBy(
+                        obj -> obj.getLong(String.join(".", MasConstant.EMPLOYEE_KEY, FormConstant.ID_KEY))
+                ));
+        // 找出当年范围内的企业负责人信息(如果有多条则取开始时间最新一条)
+        Map<Long, DynamicObject> entHeadRecordMap = new HashMap<>();
+        // 用于存储下一条记录的映射
+        Map<Long, DynamicObject> nextEntHeadRecordMap = new HashMap<>();
+        for (Map.Entry<Long, List<DynamicObject>> entry : groupedEntHeadQuery.entrySet()) {
+            Long employeeId = entry.getKey();
+            List<DynamicObject> records = entry.getValue();
+
+            // 筛选出在当年时间范围内的记录,然后取STARTDATE最新的那一条
+            Optional<DynamicObject> latestRecord = records.stream()
+                    .filter(record -> {
+                        Date startDate = record.getDate(MasConstant.STARTDATE);
+                        Date endDate = record.getDate(MasConstant.ENDDATE);
+                        // 判断记录是否在当年范围内
+                        return startDate != null && !startDate.after(endOfYear) &&
+                                (endDate == null || !endDate.before(startOfYear));
+                    })
+                    .max(Comparator.comparing(record -> record.getDate(MasConstant.STARTDATE),
+                            Comparator.nullsFirst(Comparator.naturalOrder())));
+
+            if (latestRecord.isPresent()) {
+                DynamicObject currentRecord = latestRecord.get();
+                entHeadRecordMap.put(employeeId, currentRecord);
+                // 根据当前记录的结束时间查找下一条记录
+                Date currentEndDate = currentRecord.getDate(MasConstant.ENDDATE);
+                if (currentEndDate != null) {
+                    // 查找开始时间等于当前记录结束时间的下一条记录
+                    Optional<DynamicObject> nextRecord = records.stream()
+                            .filter(record -> {
+                                Date startDate = record.getDate(MasConstant.STARTDATE);
+                                // 查找开始时间等于当前记录结束时间的记录
+                                // 查找开始时间大于等于当前记录结束时间的记录
+                                return startDate != null && !startDate.before(currentEndDate);
+                            })
+                            .findFirst();
+
+                    nextRecord.ifPresent(record -> nextEntHeadRecordMap.put(employeeId, record));
+                }
+            }
+        }
+
+
+        //查询人员最新任职经历
+        DynamicObject[] empPosOrgRelArray = EmpPosOrgRelHelper.queryEmpPosOrgRelByEmployees(entHeadRecordMap.keySet());
+        List<Long> empPosOrgRelIds = Arrays.stream(empPosOrgRelArray).map(empPosOrgRel -> empPosOrgRel.getLong(FormConstant.ID_KEY)).collect(Collectors.toList());
+        //查询人员法人单位
+        QueryFieldBuilder legalPostFieldBuilder = QueryFieldBuilder.create()
+                .add(MasConstant.STARTDATE)
+                .add(MasConstant.ENDDATE)
+                .addIdNumberName(FormConstant.NCKD_EMPPOSORGREL,FormConstant.EMPLOYEE_KEY)
+                .addIdNumberName(MasConstant.NCKD_LAWENTITY);
+        QFilter legalPostFilter = new QFilter(MasConstant.STARTDATE, QCP.less_equals, endOfYear)
+                .and(new QFilter(MasConstant.ENDDATE, QCP.is_null,null)
+                        .or(MasConstant.ENDDATE, QCP.large_equals, startOfYear))
+                .and(FormConstant.NCKD_EMPPOSORGREL,QCP.in, empPosOrgRelIds);
+        DynamicObjectCollection legalPostQuery = QueryServiceHelper.query(FormConstant.NCKD_HRPI_LEGALPOST, legalPostFieldBuilder.buildSelect(), new QFilter[]{legalPostFilter});
+        Map<Long, DynamicObject> legalPostMap = legalPostQuery.stream()
+                .collect(Collectors.toMap(obj -> obj.getLong(String.join(".",FormConstant.NCKD_EMPPOSORGREL, FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY)), Function.identity(), BinaryOperator.maxBy(Comparator.comparing(
+                        // 按 STARTDATE 字段比较
+                        obj -> obj.getDate(MasConstant.STARTDATE)
+                ))));
+        //构建子企业负责人任职情况实体
+        List<DynamicObject> saveSubCoHeadServiceList = new ArrayList<>();
+        for (Map.Entry<Long, DynamicObject> entHeadRecordEntry : entHeadRecordMap.entrySet()) {
+            //企业负责人信息
+            DynamicObject entHead = entHeadRecordEntry.getValue();
+            //党政履历
+            DynamicObject partyPosh = latestPartyPoshRecordMap.get(entHeadRecordEntry.getKey());
+            DynamicObject newSubCoHeadService = EntityHelper.newEntity(MasConstant.TENUREPERSONLIST_ENTITYID);
+            newSubCoHeadService.set(MasConstant.NCKD_EMPLOYEE,entHeadRecordEntry.getKey());
+            newSubCoHeadService.set(MasConstant.STATUS, StatusEnum.B.toString());
+            newSubCoHeadService.set(MasConstant.ENABLE, EnableEnum.YES.getCode());
+
+
+            DynamicObject employee = null;
+            //党政履历
+            if(partyPosh != null) {
+                long employeeId = partyPosh.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
+                if(employeeId > 0) {
+                    employee = EntityHelper.newEntity(MasConstant.HSBS_EMPLOYEE, employeeId);
+                    employee.set(FormConstant.NAME_KEY, partyPosh.getString(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.NAME_KEY)));
+                }
+                //所属二级单位(发薪单位)
+                long payOrgId = partyPosh.getLong(String.join(".", FormConstant.NCKD_ORG, FormConstant.ID_KEY));
+                DynamicObject payOrg = EntityHelper.newEntity(FormConstant.ADMINORGHR_ENTITYID, payOrgId);
+                newSubCoHeadService.set(MasConstant.NCKD_PAYUNIT, payOrg);
+                //职务
+                newSubCoHeadService.set(MasConstant.NCKD_POSNAME,partyPosh.getString(MasConstant.NCKD_POSNAME));
+                //任职开始时间(变动日期)
+                Date changeTime = partyPosh.getDate(MasConstant.NCKD_CHANGETIME);
+
+                if(changeTime != null){
+                    newSubCoHeadService.set(MasConstant.NCKD_STARTDATE,changeTime);
+                    DynamicObject nextPartyPoshRecord = nextPartyPoshRecordMap.get(entHeadRecordEntry.getKey());
+                    if(nextPartyPoshRecord != null){
+                        //任职结束时间(下一段的变动时间)
+                        Date nextChangeTime = nextPartyPoshRecord.getDate(MasConstant.NCKD_CHANGETIME);
+                        if(nextChangeTime != null) {
+                            newSubCoHeadService.set(MasConstant.NCKD_ENDDATE, nextChangeTime);
+                        }else{
+                            newSubCoHeadService.set(MasConstant.NCKD_ENDDATE, DateUtil.getMaxDateAsDate());
+                        }
+                    }else{
+                        newSubCoHeadService.set(MasConstant.NCKD_ENDDATE, DateUtil.getMaxDateAsDate());
+                    }
+                    //【变动时间】的次月到当年年底的月数
+                    LocalDateTime newMonths = DateUtil.addMonths(DateUtil.toLocalDateTime(changeTime), 1);
+                    long between = DateUtil.between(newMonths, endYear, ChronoUnit.MONTHS);
+                    newSubCoHeadService.set(MasConstant.NCKD_SERVICEMONTHS,between);
+                }
+
+            }
+            DynamicObject legalPost = legalPostMap.get(entHeadRecordEntry.getKey());
+            if(legalPost != null){
+                long lawEntityId = legalPost.getLong(String.join(".", MasConstant.NCKD_LAWENTITY, FormConstant.ID_KEY));
+                //法人单位
+                DynamicObject lawentity = EntityHelper.newEntity(FormConstant.HBSS_LAWENTITY, lawEntityId);
+                newSubCoHeadService.set(MasConstant.NCKD_LAWENTITY,lawentity);
+            }
+            //企业负责人信息
+            if(entHead != null){
+                long employeeId = entHead.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
+                if(employeeId > 0) {
+                    employee = EntityHelper.newEntity(MasConstant.HSBS_EMPLOYEE, employeeId);
+                    employee.set(FormConstant.NAME_KEY, entHead.getString(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.NAME_KEY)));
+                }
+                //任期区间
+                newSubCoHeadService.set(MasConstant.NCKD_TERM,entHead.get(MasConstant.NCKD_TERM));
+
+            }
+            //员工信息
+            newSubCoHeadService.set(FormConstant.NCKD_EMPLOYEE,employee);
+            saveSubCoHeadServiceList.add(newSubCoHeadService);
+
+        }
+        if(!saveSubCoHeadServiceList.isEmpty()) {
+            //调用save op
+            OperateOption option = OperateOption.create();
+            option.setVariableValue("load", Boolean.TRUE+"");
+            OperationResult operationResult = SaveServiceHelper.saveOperate(MasConstant.TENUREPERSONLIST_ENTITYID, saveSubCoHeadServiceList.toArray(new DynamicObject[0]), option);
+            if (!operationResult.isSuccess()) {
+                String parentPageId = this.getView().getFormShowParameter().getPageId();
+                IFormView parentView = SessionManager.getCurrent().getViewNoPlugin(parentPageId);
+                IPageCache pageCache = (IPageCache) parentView.getService(IPageCache.class);
+                Map<String, String> customData = operationResult.getCustomData();
+                //成功的记录
+                Map<Object, Object> successMap = new HashMap<>();
+                for (Object successPkId : operationResult.getSuccessPkIds()) {
+                    successMap.put(successPkId, customData.get(successPkId.toString()));
+                }
+                this.getView().showForm(ShowOperExecuteResult.getOperResultForm("载入党政职务履历", successMap, pageCache, operationResult));
+                this.getView().invokeOperation(FormConstant.REFRESH_OP);
+            } else {
+                //刷新列表
+                Map<String, String> customData = operationResult.getCustomData();
+                Map<Object, Object> successMap = new HashMap<>();
+                //成功的记录
+                for (Object successPkId : operationResult.getSuccessPkIds()) {
+                    successMap.put(successPkId, customData.get(successPkId.toString()));
+                }
+                if (!successMap.isEmpty()) {
+                    String parentPageId = this.getView().getFormShowParameter().getPageId();
+                    IFormView parentView = SessionManager.getCurrent().getViewNoPlugin(parentPageId);
+                    IPageCache pageCache = (IPageCache) parentView.getService(IPageCache.class);
+                    this.getView().showForm(ShowOperExecuteResult.getOperResultForm("载入党政职务履历", successMap, pageCache, operationResult));
+                    this.getView().invokeOperation(FormConstant.REFRESH_OP);
+                } else {
+                    this.getView().invokeOperation(FormConstant.REFRESH_OP);
+                    this.getView().showConfirm("提示", operationResult.getMessage(), MessageBoxOptions.OK, null, null, null, null);
+                }
+            }
+        }else {
+            this.getView().showTipNotification("没有需要载入的数据!");
+        }
+
+    }
+}

+ 143 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/plugin/form/incentivemgmt/EntldrTermBonusApprFormPlugin.java

@@ -0,0 +1,143 @@
+package nckd.jxccl.swc.mas.plugin.form.incentivemgmt;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.constant.StatusEnum;
+import kd.bos.entity.datamodel.RowDataEntity;
+import kd.bos.entity.datamodel.events.AfterAddRowEventArgs;
+import kd.bos.entity.datamodel.events.ChangeData;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.enums.ProjectCategoryEnum;
+import nckd.jxccl.base.common.utils.ConvertUtil;
+import nckd.jxccl.base.common.utils.DateUtil;
+import nckd.jxccl.base.common.utils.QueryFieldBuilder;
+import nckd.jxccl.swc.mas.common.MasConstant;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.EventObject;
+import java.util.Objects;
+import java.util.stream.Stream;
+
+/**
+* 企业负责人任期激励核定表-表单插件
+* 实体标识:nckd_entldrtermbonusappr
+* @author W.Y.C
+* @date 2025/11/30 21:18
+* @version 1.0
+*/
+public class EntldrTermBonusApprFormPlugin extends AbstractFormPlugin implements Plugin {
+
+
+    @Override
+    public void afterBindData(EventObject e) {
+        DynamicObjectCollection entryCollection = this.getModel().getEntryEntity(FormConstant.NCKD_ENTRYENTITY);
+        for (int rowIndex = 0; rowIndex < entryCollection.size(); rowIndex++) {
+            DynamicObject entry = entryCollection.get(rowIndex);
+            int installmentYears = entry.getInt(MasConstant.NCKD_INSTALLMENTYEARS);
+            initOperateOption(installmentYears,rowIndex);
+        }
+    }
+
+    @Override
+    public void afterAddRow(AfterAddRowEventArgs e) {
+        for (RowDataEntity rowDataEntity : e.getRowDataEntities()) {
+            int rowIndex = rowDataEntity.getRowIndex();
+            initOperateOption(0, rowIndex);
+        }
+    }
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        String fieldKey = e.getProperty().getName();
+        ChangeData[] changeSet = e.getChangeSet();
+        int rowIndex = changeSet[0].getRowIndex();
+        Object oldValue = changeSet[0].getOldValue();
+        Object newValue = changeSet[0].getNewValue();
+        if(MasConstant.NCKD_INSTALLMENTYEARS.equalsIgnoreCase(fieldKey)){
+            if(!Objects.equals(oldValue, newValue)){
+                initOperateOption(ConvertUtil.toInt(newValue),rowIndex);
+            }
+        }else if(Stream.of(MasConstant.NCKD_PAYUNIT, MasConstant.NCKD_LAWENTITY, MasConstant.NCKD_TERM)
+                .anyMatch(op -> op.equalsIgnoreCase(fieldKey))){
+            if(!Objects.equals(oldValue, newValue)){
+                DynamicObjectCollection entryEntities = getModel().getEntryEntity(FormConstant.NCKD_ENTRYENTITY);
+                load();
+            }
+        }
+    }
+
+    private void load(){
+        DynamicObject payUnit = ConvertUtil.toDynamicObjectOrNull(this.getModel().getValue(MasConstant.NCKD_PAYUNIT));
+        DynamicObject lawEntity =  ConvertUtil.toDynamicObjectOrNull(this.getModel().getValue(MasConstant.NCKD_LAWENTITY));
+        DynamicObject term =  ConvertUtil.toDynamicObjectOrNull(this.getModel().getValue(MasConstant.NCKD_TERM));
+        if(payUnit != null && lawEntity != null && term != null){
+            QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
+                    .addIdNumberName(MasConstant.NCKD_PAYUNIT)
+                    .addIdNumberName(MasConstant.NCKD_LAWENTITY)
+                    .addIdNumberName(MasConstant.NCKD_TERM)
+                    .addIdNumberName(MasConstant.NCKD_EMPLOYEE)
+                    .add(FormConstant.NCKD_STARTDATE)
+                    .add(FormConstant.NCKD_ENDDATE)
+                    .add(MasConstant.NCKD_POSNAME)
+                    .add(MasConstant.NCKD_SERVICEMONTHS);
+
+            QFilter qFilter = new QFilter(MasConstant.NCKD_PAYUNIT, QCP.equals, payUnit.getLong(FormConstant.ID_KEY))
+                    .and(MasConstant.NCKD_LAWENTITY, QCP.equals, lawEntity.getLong(FormConstant.ID_KEY))
+                    .and(MasConstant.NCKD_TERM, QCP.equals, term.getLong(FormConstant.ID_KEY))
+                    .and(FormConstant.STATUS, QCP.in, new String[]{StatusEnum.C.toString(), StatusEnum.B.toString()});
+            DynamicObject[] dbSubCorpSalaryArray = BusinessDataServiceHelper.load(MasConstant.TENUREPERSONLIST_ENTITYID, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter});
+            DynamicObjectCollection entryEntities = getModel().getEntryEntity(FormConstant.NCKD_ENTRYENTITY);
+            entryEntities.clear();
+            if(dbSubCorpSalaryArray != null && dbSubCorpSalaryArray.length > 0) {
+                for (DynamicObject dbSubCorpSalary : dbSubCorpSalaryArray) {
+                    DynamicObject entry = entryEntities.addNew();
+                    entry.set(MasConstant.NCKD_EMPLOYEE, dbSubCorpSalary.get(MasConstant.NCKD_EMPLOYEE));
+                    entry.set(MasConstant.NCKD_POSNAME, dbSubCorpSalary.get(MasConstant.NCKD_POSNAME));
+                    entry.set(MasConstant.NCKD_STARTDATE, dbSubCorpSalary.get(MasConstant.NCKD_STARTDATE));
+                    entry.set(MasConstant.NCKD_ENDDATE, dbSubCorpSalary.get(MasConstant.NCKD_ENDDATE));
+                    entry.set(MasConstant.NCKD_SERVICEMONTHS, dbSubCorpSalary.get(MasConstant.NCKD_SERVICEMONTHS));
+                }
+                this.getView().showSuccessNotification("数据加载成功!");
+            }else{
+                this.getView().showTipNotification("未加载到数据,根据【所属二级单位】、【法人组织】及【任期区间】未加载到对应“子企业负责人薪酬结构”数据!");
+            }
+            for (int rowIndex = 0; rowIndex < entryEntities.size(); rowIndex++) {
+                DynamicObject entry = entryEntities.get(rowIndex);
+                int installmentYears = entry.getInt(MasConstant.NCKD_INSTALLMENTYEARS);
+                initOperateOption(installmentYears,rowIndex);
+            }
+            getModel().updateEntryCache(entryEntities);
+            getView().updateView(FormConstant.NCKD_ENTRYENTITY);
+
+        }
+    }
+
+    /**
+     * 设置支付N锁定或解锁
+     * @param installmentYears 分期支付年
+     * @param rowIndex 行索引
+     * @return: void
+     * @author W.Y.C
+     * @date: 2025/11/29 20:48
+     */
+    private void initOperateOption(int installmentYears, int rowIndex) {
+        if(rowIndex > -1) {
+            for (int i = 1; i <= 10; i++) {
+                this.getView().setEnable(false, rowIndex, MasConstant.NCKD_PAYYEAR + i);
+                this.getView().setEnable(false, rowIndex, MasConstant.NCKD_PAYAMOUNT + i);
+            }
+            for (int i = 1; i <= installmentYears; i++) {
+                this.getView().setEnable(true, rowIndex, MasConstant.NCKD_PAYYEAR + i);
+                this.getView().setEnable(true, rowIndex, MasConstant.NCKD_PAYAMOUNT + i);
+            }
+//            getView().updateView(FormConstant.NCKD_ENTRYENTITY);
+        }
+    }
+}

+ 15 - 10
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/plugin/form/structappr/EntleaderAnlSalStdFormPlugin.java

@@ -11,6 +11,7 @@ import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.sdk.plugin.Plugin;
 import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.enums.ProjectCategoryEnum;
 import nckd.jxccl.base.common.utils.ConvertUtil;
 import nckd.jxccl.base.common.utils.DateUtil;
 import nckd.jxccl.base.common.utils.QueryFieldBuilder;
@@ -103,16 +104,20 @@ public class EntleaderAnlSalStdFormPlugin extends AbstractFormPlugin implements
                     for (DynamicObject dbSubCorpSalary : dbSubCorpSalaryArray) {
                         DynamicObjectCollection dbEntryColl = dbSubCorpSalary.getDynamicObjectCollection(MasConstant.NCKD_ENTRYENTITY);
                         for (DynamicObject dbEntryEntity : dbEntryColl) {
-                            DynamicObject entry = entryEntities.addNew();
-                            entry.set(MasConstant.NCKD_EMPLOYEE, dbSubCoHeadService.get(MasConstant.NCKD_EMPLOYEE));
-                            entry.set(MasConstant.NCKD_POSNAME, dbSubCoHeadService.get(MasConstant.NCKD_POSNAME));
-                            entry.set(MasConstant.NCKD_SERVICEMONTHS, dbSubCoHeadService.get(MasConstant.NCKD_SERVICEMONTHS));
-                            entry.set(MasConstant.NCKD_ISDIRCADRE, dbSubCoHeadService.get(MasConstant.NCKD_ISDIRCADRE));
-                            entry.set(MasConstant.NCKD_ISPROFMAN, dbSubCoHeadService.get(MasConstant.NCKD_ISPROFMAN));
-                            entry.set(MasConstant.NCKD_ISMANAGER, dbSubCoHeadService.get(MasConstant.NCKD_ISMANAGER));
-                            entry.set(MasConstant.NCKD_POSTLEVEL, dbSubCoHeadService.get(MasConstant.NCKD_POSTLEVEL));
-                            entry.set(MasConstant.NCKD_SALNEGOT, dbSubCoHeadService.get(MasConstant.NCKD_SALNEGOT));
-                            entry.set(MasConstant.NCKD_SALARYITEM, dbEntryEntity.get(MasConstant.NCKD_SALARYITEM));
+                            DynamicObject projectCategory = dbEntryEntity.getDynamicObject(MasConstant.NCKD_PROJECTCATEGORY);
+                            String projectCategoryNumber = projectCategory.getString(FormConstant.NUMBER_KEY);
+                            if(!projectCategoryNumber.equalsIgnoreCase(ProjectCategoryEnum.TERM_INCENTIVE.getCode()) && !projectCategoryNumber.equalsIgnoreCase(ProjectCategoryEnum.LONGTERM_INCENTIVE.getCode())) {
+                                DynamicObject entry = entryEntities.addNew();
+                                entry.set(MasConstant.NCKD_EMPLOYEE, dbSubCoHeadService.get(MasConstant.NCKD_EMPLOYEE));
+                                entry.set(MasConstant.NCKD_POSNAME, dbSubCoHeadService.get(MasConstant.NCKD_POSNAME));
+                                entry.set(MasConstant.NCKD_SERVICEMONTHS, dbSubCoHeadService.get(MasConstant.NCKD_SERVICEMONTHS));
+                                entry.set(MasConstant.NCKD_ISDIRCADRE, dbSubCoHeadService.get(MasConstant.NCKD_ISDIRCADRE));
+                                entry.set(MasConstant.NCKD_ISPROFMAN, dbSubCoHeadService.get(MasConstant.NCKD_ISPROFMAN));
+                                entry.set(MasConstant.NCKD_ISMANAGER, dbSubCoHeadService.get(MasConstant.NCKD_ISMANAGER));
+                                entry.set(MasConstant.NCKD_POSTLEVEL, dbSubCoHeadService.get(MasConstant.NCKD_POSTLEVEL));
+                                entry.set(MasConstant.NCKD_SALNEGOT, dbSubCoHeadService.get(MasConstant.NCKD_SALNEGOT));
+                                entry.set(MasConstant.NCKD_SALARYITEM, dbEntryEntity.get(MasConstant.NCKD_SALARYITEM));
+                            }
                         }
 
                     }

+ 16 - 8
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/plugin/form/structappr/SubcorpChiefSalStdFormPlugin.java

@@ -3,6 +3,7 @@ package nckd.jxccl.swc.mas.plugin.form.structappr;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.constant.StatusEnum;
+import kd.bos.entity.datamodel.events.AfterAddRowEventArgs;
 import kd.bos.entity.datamodel.events.ChangeData;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
 import kd.bos.form.plugin.AbstractFormPlugin;
@@ -43,6 +44,11 @@ public class SubcorpChiefSalStdFormPlugin extends AbstractFormPlugin implements
         }
     }
 
+    @Override
+    public void afterAddRow(AfterAddRowEventArgs e) {
+        initOperateOption(0,e.getInsertRow());
+    }
+
     @Override
     public void propertyChanged(PropertyChangedArgs e) {
         String fieldKey = e.getProperty().getName();
@@ -131,14 +137,16 @@ public class SubcorpChiefSalStdFormPlugin extends AbstractFormPlugin implements
      * @date: 2025/11/29 20:48
      */
     private void initOperateOption(int installmentYears, int rowIndex) {
-        for (int i=1;i<=10;i++){
-            this.getView().setEnable(false, rowIndex, MasConstant.NCKD_PAYYEAR+i);
-            this.getView().setEnable(false,rowIndex, MasConstant.NCKD_PAYAMOUNT+i);
-        }
-       for (int i = 1; i<= installmentYears; i++){
-           this.getView().setEnable(true,rowIndex, MasConstant.NCKD_PAYYEAR+i);
-           this.getView().setEnable(true,rowIndex, MasConstant.NCKD_PAYAMOUNT+i);
+        if(rowIndex > -1) {
+            for (int i = 1; i <= 10; i++) {
+                this.getView().setEnable(false, rowIndex, MasConstant.NCKD_PAYYEAR + i);
+                this.getView().setEnable(false, rowIndex, MasConstant.NCKD_PAYAMOUNT + i);
+            }
+            for (int i = 1; i <= installmentYears; i++) {
+                this.getView().setEnable(true, rowIndex, MasConstant.NCKD_PAYYEAR + i);
+                this.getView().setEnable(true, rowIndex, MasConstant.NCKD_PAYAMOUNT + i);
 
-       }
+            }
+        }
     }
 }

+ 4 - 2
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/plugin/operate/SubCoHeadServiceOpPlugin.java → code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/plugin/operate/empmgt/SubCoHeadServiceOpPlugin.java

@@ -1,4 +1,4 @@
-package nckd.jxccl.swc.mas.plugin.operate;
+package nckd.jxccl.swc.mas.plugin.operate.empmgt;
 
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.entity.ExtendedDataEntity;
@@ -52,7 +52,9 @@ public class SubCoHeadServiceOpPlugin extends AbstractOperationServicePlugIn imp
         for (DynamicObject dataEntity : e.getDataEntities()) {
             long id = dataEntity.getLong(FormConstant.ID_KEY);
             DynamicObject dynamicObject = dataEntity.getDynamicObject(FormConstant.NCKD_EMPLOYEE);
-            this.getOperationResult().getCustomData().put(id +"","【"+dynamicObject.getString(FormConstant.NAME_KEY)+"】");
+            if(dynamicObject != null) {
+                this.getOperationResult().getCustomData().put(id + "", "【" + dynamicObject.getString(FormConstant.NAME_KEY) + "】");
+            }
         }
 
 

+ 62 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/mas/plugin/operate/empmgt/TenurePersonListOpPlugin.java

@@ -0,0 +1,62 @@
+package nckd.jxccl.swc.mas.plugin.operate.empmgt;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.ExtendedDataEntity;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.AddValidatorsEventArgs;
+import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
+import kd.bos.entity.validate.AbstractValidator;
+import kd.bos.entity.validate.ValidatePriority;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.utils.ConvertUtil;
+
+/**
+* 任期人员名单-保存插件
+* 实体标识:nckd_tenurepersonlist
+* @author W.Y.C
+* @date 2025/11/27 22:25
+* @version 1.0
+*/
+public class TenurePersonListOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
+
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        //通过“载入党政职务履历”
+        Boolean isLoad = ConvertUtil.toBoolean(this.getOption().getVariableValue("load", "false"));
+        e.addValidator(new AbstractValidator() {
+
+            @Override
+            public void setValidatePriority(ValidatePriority validatePriority) {
+                super.setValidatePriority(ValidatePriority.Last);
+            }
+
+            @Override
+            public void validate() {
+                String operateKey = this.getOperateKey();
+                for (ExtendedDataEntity dataEntity : this.getDataEntities()) {
+                    DynamicObject data = dataEntity.getDataEntity();
+                    DynamicObject employee = data.getDynamicObject(FormConstant.NCKD_EMPLOYEE);
+                    if(employee != null) {
+                        //设置每行对应的员工名称,用于准确显示每个错误属于哪个员工的
+                        getOperationResult().getCustomData().put("DataEntityIndex_"+dataEntity.getDataEntityIndex(), "【" + employee.getString(FormConstant.NAME_KEY) + "】");
+                    }
+                }
+            }
+        });
+    }
+
+    @Override
+    public void endOperationTransaction(EndOperationTransactionArgs e) {
+        String operationKey = e.getOperationKey();
+        for (DynamicObject dataEntity : e.getDataEntities()) {
+            long id = dataEntity.getLong(FormConstant.ID_KEY);
+            DynamicObject dynamicObject = dataEntity.getDynamicObject(FormConstant.NCKD_EMPLOYEE);
+            if(dynamicObject != null) {
+                this.getOperationResult().getCustomData().put(id + "", "【" + dynamicObject.getString(FormConstant.NAME_KEY) + "】");
+            }
+        }
+
+
+    }
+}