Procházet zdrojové kódy

Merge branch 'refs/heads/feat-opmc-pm_1.0'

wyc před 1 týdnem
rodič
revize
f3b333b1eb
14 změnil soubory, kde provedl 606 přidání a 442 odebrání
  1. 2 0
      code/base/nckd-jxccl-base-common/src/main/java/nckd/jxccl/base/common/constant/FormConstant.java
  2. 1 2
      code/base/nckd-jxccl-base-helper/src/main/java/nckd/jxccl/base/entity/helper/EntityHelper.java
  3. 0 63
      code/base/nckd-jxccl-base-helper/src/main/java/nckd/jxccl/base/org/helper/AdminOrgHelper.java
  4. 7 5
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hstu/business/CreateEvalQuestService.java
  5. 1 2
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hstu/plugin/operate/EvalQuestGenerateQuestOperationPlugin.java
  6. 17 4
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/performance/PerfRankMgmtFormPlugin.java
  7. 6 0
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/common/SalAdjTrackerConstant.java
  8. 2 0
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/PerfmanagerQueryListPlugin.java
  9. 1 0
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/result/AnnualPerfDetailFormPlugin.java
  10. 7 3
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/result/AnnualPerfDetailReportListDataPlugin.java
  11. 26 0
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/result/UpdateResultFormPlugin.java
  12. 3 3
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/operate/cycle/CycleGenerateOpPlugin.java
  13. 153 0
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/operate/salary/PushAdjustOpPlugin.java
  14. 380 360
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/operate/salary/SalaryAdjOpPlugin.java

+ 2 - 0
code/base/nckd-jxccl-base-common/src/main/java/nckd/jxccl/base/common/constant/FormConstant.java

@@ -52,6 +52,8 @@ public class FormConstant {
     public static final String HRPI_EMPLOYEE = "hrpi_employee";
     /** 定调薪项目-实体标识*/
     public static final String HSBS_STANDARDITEM = "hsbs_standarditem";
+    /** 组织-实体标识*/
+    public static final String BOS_ORG = "bos_org";
 
 
     //====================================== 标品op ======================================

+ 1 - 2
code/base/nckd-jxccl-base-helper/src/main/java/nckd/jxccl/base/entity/helper/EntityHelper.java

@@ -9,7 +9,6 @@ import kd.bos.entity.constant.StatusEnum;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.user.UserServiceHelper;
 import nckd.jxccl.base.common.constant.FormConstant;
-import nckd.jxccl.base.org.helper.AdminOrgHelper;
 
 import java.util.Date;
 
@@ -60,7 +59,7 @@ public class EntityHelper {
         if(org == null){
             Long currOrgId =  RequestContext.get().getOrgId();
             // 获取苍穹平台组织实体元数据
-            MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(AdminOrgHelper.BOS_ORG);
+            MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(FormConstant.BOS_ORG);
             // 基于元数据创建 DynamicObject
             org = new DynamicObject(bosOrgEntityType);
             org.set(FormConstant.ID_KEY,currOrgId);

+ 0 - 63
code/base/nckd-jxccl-base-helper/src/main/java/nckd/jxccl/base/org/helper/AdminOrgHelper.java

@@ -1,63 +0,0 @@
-package nckd.jxccl.base.org.helper;
-
-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.bos.servicehelper.QueryServiceHelper;
-import kd.hr.hbp.business.dao.factory.HRBaseDaoFactory;
-import nckd.jxccl.base.common.constant.FormConstant;
-import nckd.jxccl.base.orm.helper.QFilterCommonHelper;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * 组织辅助类
- * @author W.Y.C
- * @date 2025/7/7 10:58
- * @version 1.0
- */
-public class AdminOrgHelper {
-
-    public static final String BOS_ORG = "bos_org";
-    /**
-     * 获取当前组织下的所有子组织
-     * @param adminOrgId 组织id
-     * @return: java.util.Set<java.lang.Long>
-     * @author W.Y.C
-     * @date: 2025/07/07 11:03
-     */
-   public static Set<Long> getChildOrg(Long adminOrgId) {
-       QFilter adminOrgIdFilter = new QFilter("adminorg.id", QCP.equals,adminOrgId);
-       DynamicObject structLongNumber = HRBaseDaoFactory.getInstance("haos_adminorgstruct").queryOne(FormConstant.STRUCTLONGNUMBER,
-               new QFilter[]{QFilterCommonHelper.getCurrentVersionFilter(), QFilterCommonHelper.getInitStatusFinishFilter(),
-               QFilterCommonHelper.getDataStatusFilter(), adminOrgIdFilter});
-       String longNumber = structLongNumber.getString(FormConstant.STRUCTLONGNUMBER);
-
-       QFilter structLongNumberFilter = new QFilter(FormConstant.STRUCTLONGNUMBER, QCP.like, longNumber + "%");
-       DynamicObjectCollection dynamicObjects = HRBaseDaoFactory.getInstance("haos_adminorgstruct").queryColl("adminorg.id adminorg", new QFilter[]{structLongNumberFilter, QFilterCommonHelper.getCurrentVersionFilter(), QFilterCommonHelper.getInitStatusFinishFilter(),
-               QFilterCommonHelper.getDataStatusFilter()}, null);
-       Set<Long> ids = new HashSet<>(dynamicObjects.size());
-       dynamicObjects.forEach(dynamicObject -> ids.add(dynamicObject.getLong("adminorg")));
-       return ids;
-   }
-
-   /**
-    * 获取上级组织
-    * @param adminOrgId 组织id
-    * @return: java.lang.Long
-    * @author W.Y.C
-    * @date: 2025/07/07 15:08
-    */
-    public static Long getParentOrg(Long adminOrgId) {
-        QFilter adminOrgIdFilter = new QFilter("id", QCP.equals,adminOrgId);
-        DynamicObject parentOrg = QueryServiceHelper.queryOne(FormConstant.ADMINORGHR_ENTITYID,"parent.id parentId",new QFilter[]{QFilterCommonHelper.getCurrentVersionFilter(), QFilterCommonHelper.getInitStatusFinishFilter(),
-                QFilterCommonHelper.getDataStatusFilter(),QFilterCommonHelper.getEnableFilter(),QFilterCommonHelper.getStatusFilter(), adminOrgIdFilter});
-        if(parentOrg != null) {
-            return parentOrg.getLong("parentId");
-        }
-        return null;
-
-    }
-}

+ 7 - 5
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hstu/business/CreateEvalQuestService.java

@@ -26,7 +26,6 @@ import nckd.jxccl.base.common.utils.ConvertUtil;
 import nckd.jxccl.base.common.utils.DateUtil;
 import nckd.jxccl.base.common.utils.StrFormatter;
 import nckd.jxccl.base.entity.helper.EntityHelper;
-import nckd.jxccl.base.org.helper.AdminOrgHelper;
 import nckd.jxccl.base.org.helper.PersonHelper;
 import nckd.jxccl.base.orm.helper.QFilterCommonHelper;
 import nckd.jxccl.hr.hstu.common.HonorStudentConstant;
@@ -79,7 +78,7 @@ public class CreateEvalQuestService {
             DynamicObject currUser = UserServiceHelper.getUserInfoByID(currUserId, HonorStudentConstant.ID_KEY);
 
             // 获取实体元数据
-            MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(AdminOrgHelper.BOS_ORG);
+            MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(FormConstant.BOS_ORG);
             // 基于元数据创建 DynamicObject
             DynamicObject org = new DynamicObject(bosOrgEntityType);
             org.set(FormConstant.ID_KEY,currOrgId);
@@ -432,7 +431,8 @@ public class CreateEvalQuestService {
         //------ 基本条件 begin------
         QFilter baseFilter = getBaseFilter(excludePersons);
         //------ 基本条件 end------
-        Long parentOrg = AdminOrgHelper.getParentOrg(adminOrgId);
+//        Long parentOrg = AdminOrgHelper.getParentOrg(adminOrgId);
+        Long parentOrg = null;
         QFilter adminOrgFilter = new QFilter("adminorg.parent.id", QCP.equals, parentOrg);
         //排除自己部门下的人员
         adminOrgFilter.and(new QFilter("adminorg.id", QCP.not_equals, adminOrgId));
@@ -468,7 +468,8 @@ public class CreateEvalQuestService {
             return count;
         }
         
-        Long parentOrg = AdminOrgHelper.getParentOrg(adminOrgId);
+//        Long parentOrg = AdminOrgHelper.getParentOrg(adminOrgId);
+        Long parentOrg = null;
         if(parentOrg == null){
             logger.warn("【优秀生考评】-达到最大递归深度或组织为空");
             return count;
@@ -509,7 +510,8 @@ public class CreateEvalQuestService {
             return count;
         }
         
-        Long parentOrg = AdminOrgHelper.getParentOrg(adminOrgId);
+//        Long parentOrg = AdminOrgHelper.getParentOrg(adminOrgId);
+        Long parentOrg = null;
         if(parentOrg == null){
             logger.warn("【优秀生考评】-达到最大递归深度或组织为空");
             return count;

+ 1 - 2
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hstu/plugin/operate/EvalQuestGenerateQuestOperationPlugin.java

@@ -29,7 +29,6 @@ import nckd.jxccl.base.common.enums.PerfPlanRoleEnum;
 import nckd.jxccl.base.common.exception.ValidationException;
 import nckd.jxccl.base.common.utils.StrFormatter;
 import nckd.jxccl.base.entity.helper.EntityHelper;
-import nckd.jxccl.base.org.helper.AdminOrgHelper;
 import nckd.jxccl.base.org.helper.PersonHelper;
 import nckd.jxccl.base.orm.helper.QFilterCommonHelper;
 import nckd.jxccl.hr.hstu.common.HonorStudentConstant;
@@ -172,7 +171,7 @@ public class EvalQuestGenerateQuestOperationPlugin extends AbstractOperationServ
         DynamicObject currUser = UserServiceHelper.getUserInfoByID(currUserId, HonorStudentConstant.ID_KEY);
 
         // 获取苍穹平台组织实体元数据
-        MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(AdminOrgHelper.BOS_ORG);
+        MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(FormConstant.BOS_ORG);
         // 基于元数据创建 DynamicObject
         DynamicObject org = new DynamicObject(bosOrgEntityType);
         org.set(FormConstant.ID_KEY,currOrgId);

+ 17 - 4
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/form/performance/PerfRankMgmtFormPlugin.java

@@ -11,8 +11,11 @@ import kd.bos.entity.QueryEntityType;
 import kd.bos.entity.constant.StatusEnum;
 import kd.bos.entity.datamodel.IDataModel;
 import kd.bos.entity.datamodel.RowDataEntity;
-import kd.bos.entity.datamodel.events.*;
-import kd.bos.ext.hr.service.query.QueryEntityHelper;
+import kd.bos.entity.datamodel.events.AfterAddRowEventArgs;
+import kd.bos.entity.datamodel.events.BeforeDeleteRowEventArgs;
+import kd.bos.entity.datamodel.events.BeforeImportEntryEventArgs;
+import kd.bos.entity.datamodel.events.ChangeData;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
 import kd.bos.form.ConfirmCallBackListener;
 import kd.bos.form.ConfirmTypes;
 import kd.bos.form.IClientViewProxy;
@@ -34,6 +37,7 @@ import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
+import kd.hr.hbp.business.servicehelper.HRQueryEntityHelper;
 import nckd.jxccl.base.common.constant.FormConstant;
 import nckd.jxccl.base.common.constant.QueryConstant;
 import nckd.jxccl.base.common.enums.AppraisalResultEnum;
@@ -51,7 +55,16 @@ import org.apache.commons.lang3.StringUtils;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -362,7 +375,7 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
 
                     // -------------------------------- 1、查询组织下的在职人员 --------------------------------
                     QueryEntityType queryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType(QueryConstant.PERSON_QUERY);
-                    DynamicObjectCollection personList = QueryEntityHelper.getInstance().getQueryDyoColl(queryEntityType, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter}, queryFieldBuilder.buildOrder());
+                    DynamicObjectCollection personList = HRQueryEntityHelper.getInstance().getQueryDyoColl(queryEntityType, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter}, queryFieldBuilder.buildOrder());
                     //添加分录
                     DynamicObjectCollection entryEntityCols = this.getModel().getDataEntity(true).getDynamicObjectCollection(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
                     //根据条件删除分录

+ 6 - 0
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/common/SalAdjTrackerConstant.java

@@ -46,4 +46,10 @@ public class SalAdjTrackerConstant extends FormConstant {
     public static final String NCKD_POSITION = "nckd_position";
     /** 调薪差 */
     public static final String NCKD_ADJUSTDIFF = "nckd_adjustdiff";
+    /** 确认推送调薪 */
+    public static final String PUSHADJUST_OP = "pushadjust";
+    /** 不需要调薪 */
+    public static final String NOPUSHADJUST_OP = "nopushadjust";
+    /**定调薪档案*/
+    public static final String NCKD_ADJFILEINFO = "nckd_adjfileinfo";
 }

+ 2 - 0
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/PerfmanagerQueryListPlugin.java

@@ -64,6 +64,8 @@ public class PerfmanagerQueryListPlugin extends AbstractListPlugin implements Pl
                 reportShowParameter.setCaption("年度绩效结果明细");
                 this.getView().showForm(reportShowParameter);
 
+            }else if("updateresult".equalsIgnoreCase(operateKey)){
+                this.getView().getParentView().invokeOperation(FormConstant.REFRESH_OP);
             }
         }
     }

+ 1 - 0
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/result/AnnualPerfDetailFormPlugin.java

@@ -8,6 +8,7 @@ import kd.bos.form.StyleCss;
 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.base.common.utils.ConvertUtil;
 import nckd.jxccl.opmc.pm.common.PerfManagerFormConstant;
 

+ 7 - 3
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/result/AnnualPerfDetailReportListDataPlugin.java

@@ -5,10 +5,14 @@ import kd.bos.algo.GroupbyDataSet;
 import kd.bos.dataentity.entity.LocaleString;
 import kd.bos.entity.EntityMetadataCache;
 import kd.bos.entity.QueryEntityType;
-import kd.bos.entity.report.*;
-import kd.bos.ext.hr.service.query.QueryEntityHelper;
+import kd.bos.entity.report.AbstractReportColumn;
+import kd.bos.entity.report.AbstractReportListDataPlugin;
+import kd.bos.entity.report.FastFilter;
+import kd.bos.entity.report.ReportColumn;
+import kd.bos.entity.report.ReportQueryParam;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
+import kd.hr.hbp.business.servicehelper.HRQueryEntityHelper;
 import kd.sdk.plugin.Plugin;
 import nckd.jxccl.base.common.constant.FormConstant;
 import nckd.jxccl.base.common.utils.DateUtil;
@@ -55,7 +59,7 @@ public class AnnualPerfDetailReportListDataPlugin extends AbstractReportListData
 
         // 执行基础查询
         QueryEntityType queryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType("annualperfdetailquery");
-        DataSet dataSet = QueryEntityHelper.getInstance().getQueryDataSet(queryEntityType,queryFieldBuilder.buildSelect(), null, null);
+        DataSet dataSet = HRQueryEntityHelper.getInstance().getQueryDataSet(queryEntityType,queryFieldBuilder.buildSelect(), null, null);
 
         dataSet.print( true);
 

+ 26 - 0
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/result/UpdateResultFormPlugin.java

@@ -0,0 +1,26 @@
+package nckd.jxccl.opmc.pm.plugin.form.result;
+
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.base.common.constant.FormConstant;
+
+/**
+* 视同合格/优秀/无结果
+* 实体标识:nckd_updateresult
+* @author W.Y.C
+* @date 2025/11/26 11:33
+* @version 1.0
+*/
+public class UpdateResultFormPlugin extends AbstractFormPlugin implements Plugin {
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs e) {
+        if (e.getOperationResult() != null && e.getOperationResult().isSuccess()) {
+            String operateKey = e.getOperateKey();
+            if ("updateresult".equals(operateKey)) {
+                this.getView().getParentView().invokeOperation(FormConstant.REFRESH_OP);
+            }
+        }
+    }
+}

+ 3 - 3
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/operate/cycle/CycleGenerateOpPlugin.java

@@ -18,10 +18,10 @@ import kd.bos.entity.operate.result.IOperateInfo;
 import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
-import kd.bos.ext.hr.service.query.QueryEntityHelper;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.operation.OperationServiceHelper;
+import kd.hr.hbp.business.servicehelper.HRQueryEntityHelper;
 import kd.hr.hbp.common.model.AuthorizedOrgResultWithSub;
 import kd.hr.hbp.common.model.OrgSubInfo;
 import kd.sdk.hr.hbp.business.helper.permission.HRPermissionServiceHelper;
@@ -180,7 +180,7 @@ public class CycleGenerateOpPlugin extends AbstractOperationServicePlugIn implem
         Set<Long> personIds = new HashSet<>();
         try (AlgoContext context = Algo.newContext()) {
             // 查询权限范围内的考核周期
-            DataSet perfManagerQueryDataSet = QueryEntityHelper.getInstance().getQueryDataSet(
+            DataSet perfManagerQueryDataSet = HRQueryEntityHelper.getInstance().getQueryDataSet(
                     perfManagerQueryEntityType, perfManagerQueryFieldBuilder.buildSelectLowerCase(),
                     new QFilter[]{perfManagerFilter}, perfManagerQueryFieldBuilder.buildOrder());
             perfManagerQueryDataSet.print(true);
@@ -234,7 +234,7 @@ public class CycleGenerateOpPlugin extends AbstractOperationServicePlugIn implem
                 .addGroup(new String[]{FormConstant.HRPI_EMPPOSORGREL},FormConstant.ID_KEY)
                 .addGroup(new String[]{FormConstant.HRPI_EMPPOSORGREL,FormConstant.ADMINORG},FormConstant.ID_KEY);
         QueryEntityType queryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType(QueryConstant.PERSON_QUERY);
-        return QueryEntityHelper.getInstance().getQueryDyoColl(queryEntityType, queryFieldBuilder.buildSelect(), new QFilter[]{filter}, null);
+        return HRQueryEntityHelper.getInstance().getQueryDyoColl(queryEntityType, queryFieldBuilder.buildSelect(), new QFilter[]{filter}, null);
     }
 
     /**

+ 153 - 0
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/operate/salary/PushAdjustOpPlugin.java

@@ -0,0 +1,153 @@
+package nckd.jxccl.opmc.pm.plugin.operate.salary;
+
+import kd.bos.context.RequestContext;
+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.PreparePropertysEventArgs;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.entity.validate.AbstractValidator;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.sdk.plugin.Plugin;
+import kd.sdk.swc.hcdm.business.helper.HCDMApplyBillServiceHelper;
+import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.exception.ValidationException;
+import nckd.jxccl.base.common.utils.ConvertUtil;
+import nckd.jxccl.base.common.utils.StrFormatter;
+import nckd.jxccl.opmc.pm.common.SalAdjTrackerConstant;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringJoiner;
+import java.util.UUID;
+
+/**
+* 调薪情况-确认推送调薪/不需要调薪
+* 实体标识:nckd_saladjtracker
+* @author W.Y.C
+* @date 2025/11/26 9:34
+* @version 1.0
+*/
+public class PushAdjustOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
+
+    @Override
+    public void onPreparePropertys(PreparePropertysEventArgs e) {
+        e.getFieldKeys().addAll(this.billEntityType.getAllFields().keySet());
+    }
+
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e){
+        e.addValidator(new AbstractValidator() {
+            @Override
+            public void validate() {
+                String operateKey = this.getOperateKey();
+                //pushadjust:确认推送调薪
+                //nopushadjust:不需要调薪
+                for (ExtendedDataEntity rowDataEntity : getDataEntities()) {
+                    DynamicObject data = rowDataEntity.getDataEntity();
+                    DynamicObject person = data.getDynamicObject(SalAdjTrackerConstant.NCKD_PERFMANAGER).getDynamicObject(FormConstant.NCKD_PERSON);
+                    String wageStatus = data.getString(SalAdjTrackerConstant.NCKD_WAGESTATUS);
+                    if(SalAdjTrackerConstant.PUSHADJUST_OP.equalsIgnoreCase(operateKey)){
+                        if(!"1".equalsIgnoreCase(wageStatus)){
+                            this.addFatalErrorMessage(rowDataEntity,"只有【待处理】状态的调薪才可以推送");
+                        }
+                    }else if(SalAdjTrackerConstant.NOPUSHADJUST_OP.equalsIgnoreCase(operateKey)){
+                        if(!"1".equalsIgnoreCase(wageStatus)){
+                            this.addErrorMessage(rowDataEntity,StrFormatter.format("【{}】的调薪处理状态已是【{}】状态,本次操作忽略此条处理;", person.getString(FormConstant.NAME_KEY),
+                                    "2".equalsIgnoreCase(wageStatus) ? "已处理":"已忽略"));
+                        }
+                    }
+                }
+            }
+        });
+    }
+
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+
+        String operateKey = e.getOperationKey();
+        List<DynamicObject> pushAdjusts = new ArrayList<>();
+        List<DynamicObject> updateAdjusts = new ArrayList<>();
+        for (DynamicObject dataEntity : e.getDataEntities()) {
+            if(SalAdjTrackerConstant.PUSHADJUST_OP.equalsIgnoreCase(operateKey)){
+                //推送调薪
+                pushAdjusts.add(dataEntity);
+            }else if(SalAdjTrackerConstant.NOPUSHADJUST_OP.equalsIgnoreCase(operateKey)){
+                dataEntity.set(SalAdjTrackerConstant.NCKD_WAGESTATUS, "3");
+                updateAdjusts.add(dataEntity);
+            }
+        }
+        if(!updateAdjusts.isEmpty()){
+            SaveServiceHelper.update(updateAdjusts.toArray(new DynamicObject[0]));
+        }
+        //开始推送定调薪
+        if(!pushAdjusts.isEmpty()) {
+            Map<String, Object> papams = new HashMap<>();
+            List<Map<String, Object>> applyBillData = new ArrayList<>();
+            for (DynamicObject pushAdjust : pushAdjusts) {
+                Map<String, Object> applyBill = new HashMap<>();
+                /**
+                 * 必填字段
+                 * "billname", "billtype", "org", "billcountry", "salaryadjrsn", "salaryadjscm", "billcurrency", "effectivedate", "exchangeratedate", "exctable"
+                 */
+                applyBill.put("billname", "岗位工资动态调整-生成");
+
+                Long orgId = RequestContext.get().getOrgId();
+
+                String uniquecode = UUID.randomUUID().toString().replace("-", "");
+                applyBill.put("_uniquecode", uniquecode);
+                applyBill.put("org", orgId);
+                //定调薪明细字段显示方案   调薪明细字段
+                applyBill.put("billtype", 2215975998602655744L);
+                //国家
+                applyBill.put("billcountry", 1000001L);
+                //定调薪类型
+                applyBill.put("salaryadjrsn", 2352340656979984384L);
+                //默认币种
+                applyBill.put("billcurrency", 1L);
+                //定调薪方案
+                applyBill.put("salaryadjscm", 2322515162646457344L);
+                //汇率日期
+                applyBill.put("exchangeratedate", new Date());
+                //汇率表
+                applyBill.put("exctable", 2321965096026258432L);
+                //默认生效日期
+                applyBill.put("effectivedate", new Date());
+                //草稿状态
+                applyBill.put("isdraft", "1");
+                //审核状态
+                applyBill.put("auditstatus", "A");
+                //申请单数据来源   //1:手工新增  2:接口写入
+                applyBill.put("datasource", "2");
+                List<Map<String, Object>> applyBillEntryData = new ArrayList<>();
+                Map<String, Object> applyBillEntry = new HashMap<>();
+                Long employeeId = pushAdjust.getDynamicObject(SalAdjTrackerConstant.NCKD_PERFMANAGER).getDynamicObject(FormConstant.NCKD_PERSON).getLong(FormConstant.ID_KEY);
+                Long positionId = pushAdjust.getDynamicObject(SalAdjTrackerConstant.NCKD_POSITION).getLong(FormConstant.ID_KEY);
+                applyBillEntry.put("adjfile", pushAdjust.getDynamicObject(SalAdjTrackerConstant.NCKD_ADJFILEINFO).getLong(FormConstant.ID_KEY));
+                applyBillEntry.put("employee", employeeId);
+                applyBillEntry.put("standarditem", 2321899710350111744L);    //定调薪项目   岗位工资标准
+                applyBillEntry.put("frequency", 1095454108284088320L);       //频度  月
+                applyBillEntry.put("amount", pushAdjust.getBigDecimal(SalAdjTrackerConstant.NCKD_MONEY));
+//            applyBillEntry.put("nckd_postgrade", salaryfile.getLong("position.nckd_postgrade.id"));  //岗级
+                applyBillEntry.put("position", positionId);
+                applyBillEntry.put("salarygrade", pushAdjust.getDynamicObject(SalAdjTrackerConstant.NCKD_SALARYGRADE));
+                applyBillEntry.put("salaryrank", pushAdjust.getDynamicObject(SalAdjTrackerConstant.NCKD_SALARYRANK));
+                applyBillEntry.put("reason", pushAdjust.getString(SalAdjTrackerConstant.NCKD_WAGEEXPLAIN));
+                applyBillEntryData.add(applyBillEntry);
+                applyBill.put("applybillent", applyBillEntryData);
+                applyBillData.add(applyBill);
+            }
+            papams.put("data", applyBillData);
+            Map<String, Object> result = HCDMApplyBillServiceHelper.saveDraftApplyBill(papams);
+            if (!ConvertUtil.toBoolean(result.get("success"))) {
+                throw new ValidationException("推送定调薪失败,原因:" + result.get("message").toString());
+            }
+        }
+    }
+}

+ 380 - 360
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/operate/salary/SalaryAdjOpPlugin.java

@@ -9,7 +9,6 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.EntityMetadataCache;
 import kd.bos.entity.MainEntityType;
-import kd.bos.entity.QueryEntityType;
 import kd.bos.entity.operate.OperateOptionConst;
 import kd.bos.entity.operate.result.IOperateInfo;
 import kd.bos.entity.operate.result.OperationResult;
@@ -43,7 +42,6 @@ import nckd.jxccl.base.common.utils.DateUtil;
 import nckd.jxccl.base.common.utils.QueryFieldBuilder;
 import nckd.jxccl.base.common.utils.StrFormatter;
 import nckd.jxccl.base.entity.helper.EntityHelper;
-import nckd.jxccl.base.org.helper.AdminOrgHelper;
 import nckd.jxccl.opmc.pm.common.PerfManagerFormConstant;
 import nckd.jxccl.opmc.pm.common.SalAdjTrackerConstant;
 import org.apache.commons.lang3.StringUtils;
@@ -107,403 +105,423 @@ public class SalaryAdjOpPlugin extends AbstractOperationServicePlugIn implements
         // 构建考核周期查询条件
         QFilter perfManagerFilter = buildPerfManagerFilter(userAdminOrgWithSub);
         QueryFieldBuilder perfManagerQueryFieldBuilder = buildPerfManagerQueryFieldBuilder();
-        QueryEntityType perfManagerQueryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType("nckd_perfmanager_query");
-
         DynamicObjectCollection perfManagerList = QueryServiceHelper.query(PerfManagerFormConstant.PERFMANAGER_ENTITYID, perfManagerQueryFieldBuilder.buildSelect(), new QFilter[]{perfManagerFilter});
 
+        List<Long> perfManagerIds = perfManagerList.stream()
+                .map(perfManager -> perfManager.getLong(FormConstant.ID_KEY))
+                .collect(Collectors.toList());
+
+        QFilter qFilter = new QFilter(SalAdjTrackerConstant.NCKD_PERFMANAGER,QCP.in,perfManagerIds);
+        QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
+                .add(FormConstant.ID_KEY)
+                .addIdNumberName(SalAdjTrackerConstant.NCKD_PERFMANAGER);
+        DynamicObjectCollection query = QueryServiceHelper.query(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter});
+        Map<Long, Long> perfManagerToSalaryAdjMap = query.stream()
+                .collect(Collectors.toMap(
+                        item -> item.getLong(String.join(".", SalAdjTrackerConstant.NCKD_PERFMANAGER, FormConstant.ID_KEY)),
+                        item -> item.getLong(FormConstant.ID_KEY)
+                ));
+
         List<SalaryAdjustmentResult> salaryAdjustmentResultList = new ArrayList<>();
         for (DynamicObject perfManager : perfManagerList) {
             long id = perfManager.getLong(FormConstant.ID_KEY);
-            long personId = perfManager.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY));
-            String personName = perfManager.getString(String.join(".", FormConstant.NCKD_PERSON, FormConstant.NAME_KEY));
-            LocalDateTime beginDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
-            int beginYear = beginDate.getYear();
-            LocalDateTime endDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
-            int endYear = endDate.getYear();
-            Date actEndDate = perfManager.getDate(PerfManagerFormConstant.NCKD_ACTENDYEAR);
-            LocalDateTime actEndLocalDateTime = actEndDate != null ? DateUtil.toLocalDateTime(actEndDate) : endDate;
-            int actEndYear = actEndLocalDateTime.getYear();
-            String theStatus = perfManager.getString(PerfManagerFormConstant.NCKD_THESTATUS);
-
-
-            if (actEndYear <= passYear) {
-                logger.info(">>>周期开始时间在上线前!PASS!!");
-                continue;
-            }
-            if (theStatus != null && !"1".equals(theStatus)) {
-                logger.info(">>>周期状态非正常!PASS!!");
-                continue;
-            }
-            int nowYear = Calendar.getInstance().get(Calendar.YEAR);
-            if (nowYear < beginYear) {
-                logger.info(">>>还未到周期开始时间!PASS!!");
-                continue;
-            }
-            //第一年考核结果
-            String firstYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_FIRSTYEARRESULT, FormConstant.NUMBER_KEY));
-            AppraisalResultEnum firstYearResult = AppraisalResultEnum.getByCode(firstYearResultNumber);
-            //第二年考核结果
-            String secondYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_SECONDYEARRESULT, FormConstant.NUMBER_KEY));
-            AppraisalResultEnum secondYearResult = AppraisalResultEnum.getByCode(secondYearResultNumber);
-            //第三年考核结果
-            String thirdYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_THIRDYEARRESULT, FormConstant.NUMBER_KEY));
-            AppraisalResultEnum thirdYearResult = AppraisalResultEnum.getByCode(thirdYearResultNumber);
-
-            //校验当前考核周期是否已经在调薪列表中
-            // 计算调薪档次
-            SalaryAdjustmentResult result = calculateSalaryAdjustmentLevel(firstYearResult, secondYearResult, thirdYearResult, beginYear, endYear);
-            logger.info("人员ID: {} 的调薪档次为: {},调薪类型: {},调薪说明: {}", personId, result.level, result.type, result.reason);
-            if(result.level != 0){
-                long companyId = perfManager.getLong(String.join(".", FormConstant.NCKD_DEP, FormConstant.NCKD_SECONDORG,FormConstant.ID_KEY));
-                long empPosOrgRelId = perfManager.getLong(String.join(".", FormConstant.NCKD_EMPPOSORGREL,FormConstant.ID_KEY));
-                long depId = perfManager.getLong(String.join(".", FormConstant.NCKD_DEP,FormConstant.ID_KEY));
-                long positionId = perfManager.getLong(String.join(".",FormConstant.NCKD_EMPPOSORGREL, FormConstant.POSITION_KEY,FormConstant.ID_KEY));
-                result.id = id;
-                result.companyId = personId;
-                result.depId = depId;
-                result.positionId = positionId;
-                result.empPosOrgRelId = empPosOrgRelId;
-                result.personId = personId;
-                result.personName = personName;
-                result.beginDate = beginDate;
-                result.endDate = endDate;
-                salaryAdjustmentResultList.add(result);
-            }
-        }
+            if(perfManagerToSalaryAdjMap.get(id) == null) {
+                long personId = perfManager.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY));
+                String personName = perfManager.getString(String.join(".", FormConstant.NCKD_PERSON, FormConstant.NAME_KEY));
+                LocalDateTime beginDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
+                int beginYear = beginDate.getYear();
+                LocalDateTime endDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
+                int endYear = endDate.getYear();
+                Date actEndDate = perfManager.getDate(PerfManagerFormConstant.NCKD_ACTENDYEAR);
+                LocalDateTime actEndLocalDateTime = actEndDate != null ? DateUtil.toLocalDateTime(actEndDate) : endDate;
+                int actEndYear = actEndLocalDateTime.getYear();
+                String theStatus = perfManager.getString(PerfManagerFormConstant.NCKD_THESTATUS);
+
+
+                if (actEndYear <= passYear) {
+                    logger.info(">>>周期开始时间在上线前!PASS!!");
+                    continue;
+                }
+                if (theStatus != null && !"1".equals(theStatus)) {
+                    logger.info(">>>周期状态非正常!PASS!!");
+                    continue;
+                }
+                int nowYear = Calendar.getInstance().get(Calendar.YEAR);
+                if (nowYear < beginYear) {
+                    logger.info(">>>还未到周期开始时间!PASS!!");
+                    continue;
+                }
+                //第一年考核结果
+                String firstYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_FIRSTYEARRESULT, FormConstant.NUMBER_KEY));
+                AppraisalResultEnum firstYearResult = AppraisalResultEnum.getByCode(firstYearResultNumber);
+                //第二年考核结果
+                String secondYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_SECONDYEARRESULT, FormConstant.NUMBER_KEY));
+                AppraisalResultEnum secondYearResult = AppraisalResultEnum.getByCode(secondYearResultNumber);
+                //第三年考核结果
+                String thirdYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_THIRDYEARRESULT, FormConstant.NUMBER_KEY));
+                AppraisalResultEnum thirdYearResult = AppraisalResultEnum.getByCode(thirdYearResultNumber);
 
-        //判断有没有同一人员存在多条正常状态的考核周期
-        Map<Long, List<SalaryAdjustmentResult>> personGroups = salaryAdjustmentResultList.stream()
-                .collect(Collectors.groupingBy(result -> result.personId));
-        StringJoiner duplicateMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
-        for (Map.Entry<Long, List<SalaryAdjustmentResult>> entry : personGroups.entrySet()) {
-            if (entry.getValue().size() > 1) {
-                // 存在重复的personId
-                SalaryAdjustmentResult firstResult = entry.getValue().get(0);
-                String personName = firstResult.personName;
-                StringJoiner periodJoiner = new StringJoiner(",");
-                for (SalaryAdjustmentResult result : entry.getValue()) {
-                    String period = String.format("%d~%d",
-                            result.beginDate.getYear(),
-                            result.endDate.getYear());
-                    periodJoiner.add(period);
+                //校验当前考核周期是否已经在调薪列表中
+                // 计算调薪档次
+                SalaryAdjustmentResult result = calculateSalaryAdjustmentLevel(firstYearResult, secondYearResult, thirdYearResult, beginYear, endYear);
+                logger.info("人员ID: {} 的调薪档次为: {},调薪类型: {},调薪说明: {}", personId, result.level, result.type, result.reason);
+                if (result.level != 0) {
+                    long companyId = perfManager.getLong(String.join(".", FormConstant.NCKD_DEP, FormConstant.NCKD_SECONDORG, FormConstant.ID_KEY));
+                    long empPosOrgRelId = perfManager.getLong(String.join(".", FormConstant.NCKD_EMPPOSORGREL, FormConstant.ID_KEY));
+                    long depId = perfManager.getLong(String.join(".", FormConstant.NCKD_DEP, FormConstant.ID_KEY));
+                    long positionId = perfManager.getLong(String.join(".", FormConstant.NCKD_EMPPOSORGREL, FormConstant.POSITION_KEY, FormConstant.ID_KEY));
+                    result.id = id;
+                    result.companyId = personId;
+                    result.depId = depId;
+                    result.positionId = positionId;
+                    result.empPosOrgRelId = empPosOrgRelId;
+                    result.personId = personId;
+                    result.personName = personName;
+                    result.beginDate = beginDate;
+                    result.endDate = endDate;
+                    salaryAdjustmentResultList.add(result);
                 }
-                String message = StrFormatter.format("【{}】存在多个状态【正常】的周期;{}",
-                        personName, periodJoiner.toString());
-                duplicateMsgJoiner.add(message);
             }
         }
-        if (duplicateMsgJoiner.length() > 0) {
-            throw new ValidationException(duplicateMsgJoiner.toString());
-        }
-
-        if (!salaryAdjustmentResultList.isEmpty()) {
-            List<Long> allPersonIds = salaryAdjustmentResultList.stream()
-                    .map(result -> result.personId)
-                    .collect(Collectors.toList());
-            List<Long> allEmpPosOrgRelIds = salaryAdjustmentResultList.stream()
-                    .map(result -> result.empPosOrgRelId)
-                    .collect(Collectors.toList());
-
-            DynamicObject standardItem = EntityHelper.newEntity(FormConstant.HSBS_STANDARDITEM);
-            standardItem.set(FormConstant.ID_KEY, standardItemId);
-            Map<String, Object> adjFileParams = new HashMap<>();
-            adjFileParams.put("employees", allPersonIds);
-            List<String> status = new ArrayList<>();
-            status.add(BillStatus.C.toString());
-            adjFileParams.put("status", status);
-            //获取人员定薪档案
-            Map<String, Object> adjFileResult = DispatchServiceHelper.invokeBizService("swc", "hcdm", "IAdjFileInfoService", "queryAdjFileBoByEmp", adjFileParams);
-            if (ConvertUtil.toBoolean(adjFileResult.get("success"))) {
-                List<Map> list = ConvertUtil.toList(adjFileResult.get("data"), ArrayList::new);
-                List<Long> adjFileIds = new ArrayList<>();
-                for (Map map : list) {
-                    Long id = ConvertUtil.toLong(map.get(FormConstant.ID_KEY));
-                    //根据员工任职匹配
-                    Long empPosOrgRelId = ConvertUtil.toLong(map.get("empposorgrel_id"));
-                    if(allEmpPosOrgRelIds.contains(empPosOrgRelId)) {
-                        adjFileIds.add(id);
+        if(!salaryAdjustmentResultList.isEmpty()) {
+            //判断有没有同一人员存在多条正常状态的考核周期
+            Map<Long, List<SalaryAdjustmentResult>> personGroups = salaryAdjustmentResultList.stream()
+                    .collect(Collectors.groupingBy(result -> result.personId));
+            StringJoiner duplicateMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
+            for (Map.Entry<Long, List<SalaryAdjustmentResult>> entry : personGroups.entrySet()) {
+                if (entry.getValue().size() > 1) {
+                    // 存在重复的personId
+                    SalaryAdjustmentResult firstResult = entry.getValue().get(0);
+                    String personName = firstResult.personName;
+                    StringJoiner periodJoiner = new StringJoiner(",");
+                    for (SalaryAdjustmentResult result : entry.getValue()) {
+                        String period = String.format("%d~%d",
+                                result.beginDate.getYear(),
+                                result.endDate.getYear());
+                        periodJoiner.add(period);
                     }
+                    String message = StrFormatter.format("【{}】存在多个状态【正常】的周期;{}",
+                            personName, periodJoiner.toString());
+                    duplicateMsgJoiner.add(message);
                 }
-                //构建定调薪记录查询条件
-                Map<String, Object> adjRecordParams = new HashMap<>();
-                List<Map<String, Object>> dataList = new ArrayList<>();
-                for (Long adjFileId : adjFileIds) {
-                    Map<String, Object> dataItem = new HashMap<>();
-                    // 调薪档案ID
-                    dataItem.put("adjfile", adjFileId);
-                    // 调薪项目ID
-                    dataItem.put("standarditem", standardItemId);
-                    // 查询基准日期
-                    dataItem.put("startdate", new Date());
-                    // 唯一标识
-                    dataItem.put("_uniquecode", "unique" + adjFileId);
-                    dataList.add(dataItem);
-                }
+            }
+            if (duplicateMsgJoiner.length() > 0) {
+                throw new ValidationException(duplicateMsgJoiner.toString());
+            }
+
+            if (!salaryAdjustmentResultList.isEmpty()) {
+                List<Long> allPersonIds = salaryAdjustmentResultList.stream()
+                        .map(result -> result.personId)
+                        .collect(Collectors.toList());
+                List<Long> allEmpPosOrgRelIds = salaryAdjustmentResultList.stream()
+                        .map(result -> result.empPosOrgRelId)
+                        .collect(Collectors.toList());
+
+                DynamicObject standardItem = EntityHelper.newEntity(FormConstant.HSBS_STANDARDITEM);
+                standardItem.set(FormConstant.ID_KEY, standardItemId);
+                Map<String, Object> adjFileParams = new HashMap<>();
+                adjFileParams.put("employees", allPersonIds);
+                List<String> status = new ArrayList<>();
+                status.add(BillStatus.C.toString());
+                adjFileParams.put("status", status);
+                //获取人员定薪档案
+                Map<String, Object> adjFileResult = DispatchServiceHelper.invokeBizService("swc", "hcdm", "IAdjFileInfoService", "queryAdjFileBoByEmp", adjFileParams);
+                if (ConvertUtil.toBoolean(adjFileResult.get("success"))) {
+                    List<Map> list = ConvertUtil.toList(adjFileResult.get("data"), ArrayList::new);
+                    List<Long> adjFileIds = new ArrayList<>();
+                    for (Map map : list) {
+                        Long id = ConvertUtil.toLong(map.get(FormConstant.ID_KEY));
+                        //根据员工任职匹配
+                        Long empPosOrgRelId = ConvertUtil.toLong(map.get("empposorgrel_id"));
+                        if (allEmpPosOrgRelIds.contains(empPosOrgRelId)) {
+                            adjFileIds.add(id);
+                        }
+                    }
+                    //构建定调薪记录查询条件
+                    Map<String, Object> adjRecordParams = new HashMap<>();
+                    List<Map<String, Object>> dataList = new ArrayList<>();
+                    for (Long adjFileId : adjFileIds) {
+                        Map<String, Object> dataItem = new HashMap<>();
+                        // 调薪档案ID
+                        dataItem.put("adjfile", adjFileId);
+                        // 调薪项目ID
+                        dataItem.put("standarditem", standardItemId);
+                        // 查询基准日期
+                        dataItem.put("startdate", new Date());
+                        // 唯一标识
+                        dataItem.put("_uniquecode", "unique" + adjFileId);
+                        dataList.add(dataItem);
+                    }
 
 
-                adjRecordParams.put("data", dataList);
-                adjRecordParams.put("selprops", "salarystdv.rankentry.rank.id,salarystdv.rankentry.rank.name,salarystdv.rankentry.rank.number,salarystdv.rankentry.rank.index,salarystdv.rankentry.frankindex,company.id,company.name,");
-                //查询定调薪记录
-                Map<String, Object> lastDecAdjRecordMap = HCDMAdjFileServiceHelper.getLastDecAdjRecords(adjRecordParams);
-                if (ConvertUtil.toBoolean(lastDecAdjRecordMap.get("success"))) {
-                    List<Map> datas = ConvertUtil.toList(lastDecAdjRecordMap.get("data"), ArrayList::new);
-                    for (Map data : datas) {
-                        if (ConvertUtil.toBoolean(data.get("success"))) {
-                            List<DynamicObject> adjRecordList = ConvertUtil.toList(data.get("data"), ArrayList::new);
-                            for (DynamicObject dynamicObject : adjRecordList) {
-                                DynamicObject company = dynamicObject.getDynamicObject(FormConstant.COMPANY_KEY);
-                                long companyId = company.getLong(FormConstant.ID_KEY);
-                                // 人员
-                                DynamicObject employee = dynamicObject.getDynamicObject("adjfile").getDynamicObject("employee");
-                                SalaryAdjustmentResult salaryAdjustmentResult = null;
-                                for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
-                                    if(result.personId == employee.getLong(FormConstant.ID_KEY)){
-                                        salaryAdjustmentResult = result;
+                    adjRecordParams.put("data", dataList);
+                    adjRecordParams.put("selprops", "salarystdv.rankentry.rank.id,salarystdv.rankentry.rank.name,salarystdv.rankentry.rank.number,salarystdv.rankentry.rank.index,salarystdv.rankentry.frankindex,company.id,company.name,");
+                    //查询定调薪记录
+                    Map<String, Object> lastDecAdjRecordMap = HCDMAdjFileServiceHelper.getLastDecAdjRecords(adjRecordParams);
+                    if (ConvertUtil.toBoolean(lastDecAdjRecordMap.get("success"))) {
+                        List<Map> datas = ConvertUtil.toList(lastDecAdjRecordMap.get("data"), ArrayList::new);
+                        for (Map data : datas) {
+                            if (ConvertUtil.toBoolean(data.get("success"))) {
+                                List<DynamicObject> adjRecordList = ConvertUtil.toList(data.get("data"), ArrayList::new);
+                                for (DynamicObject dynamicObject : adjRecordList) {
+                                    // 人员
+                                    DynamicObject employee = dynamicObject.getDynamicObject("adjfile").getDynamicObject("employee");
+                                    SalaryAdjustmentResult salaryAdjustmentResult = null;
+                                    for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
+                                        if (result.personId == employee.getLong(FormConstant.ID_KEY)) {
+                                            salaryAdjustmentResult = result;
+                                        }
+                                    }
+                                    if (salaryAdjustmentResult != null) {
+                                        //薪酬标准表版本
+                                        DynamicObject salaryStDv = dynamicObject.getDynamicObject("salarystdv");
+                                        //薪等(01岗、02岗)
+                                        DynamicObject salaryGrade = dynamicObject.getDynamicObject("salarygrade");
+                                        //薪档(1档、2档)
+                                        DynamicObject salaryRank = dynamicObject.getDynamicObject("salaryrank");
+                                        //金额
+                                        BigDecimal amount = dynamicObject.getBigDecimal("amount");
+                                        salaryAdjustmentResult.adjFileInfo = dynamicObject.getDynamicObject("adjfile");
+                                        salaryAdjustmentResult.salaryStDv = salaryStDv;
+                                        salaryAdjustmentResult.oldStandardItem = standardItem;
+                                        salaryAdjustmentResult.oldSalaryGrade = salaryGrade;
+                                        salaryAdjustmentResult.oldSalaryRank = salaryRank;
+                                        salaryAdjustmentResult.oldAmount = amount;
                                     }
-                                }
-                                if(salaryAdjustmentResult != null) {
-                                    //薪酬标准表版本
-                                    DynamicObject salaryStDv = dynamicObject.getDynamicObject("salarystdv");
-                                    //薪等(01岗、02岗)
-                                    DynamicObject salaryGrade = dynamicObject.getDynamicObject("salarygrade");
-                                    //薪档(1档、2档)
-                                    DynamicObject salaryRank = dynamicObject.getDynamicObject("salaryrank");
-                                    //金额
-                                    BigDecimal amount = dynamicObject.getBigDecimal("amount");
-                                    salaryAdjustmentResult.salaryStDv = salaryStDv;
-                                    salaryAdjustmentResult.oldStandardItem = standardItem;
-                                    salaryAdjustmentResult.oldSalaryGrade = salaryGrade;
-                                    salaryAdjustmentResult.oldSalaryRank = salaryRank;
-                                    salaryAdjustmentResult.oldAmount = amount;
                                 }
                             }
                         }
+                    } else {
+                        logger.error("查询定调薪记录失败");
+                        this.operationResult.setSuccess(false);
+                        this.operationResult.setMessage("查询定调薪记录失败");
                     }
                 } else {
-                    logger.error("查询定调薪记录失败");
+                    logger.error("获取人员定薪档案失败");
                     this.operationResult.setSuccess(false);
-                    this.operationResult.setMessage("查询定调薪记录失败");
+                    this.operationResult.setMessage("获取人员定薪档案失败");
                 }
-            } else {
-                logger.error("获取人员定薪档案失败");
-                this.operationResult.setSuccess(false);
-                this.operationResult.setMessage("获取人员定薪档案失败");
-            }
 
 
-            Set<Long> salarystandarId = new HashSet(salaryAdjustmentResultList.size());
-            for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
-                if(result.salaryStDv != null) {
-                    DynamicObject salaryStDv = result.salaryStDv;
-                    long stdTableId = salaryStDv.getLong(FormConstant.ID_KEY);
-                    salarystandarId.add(stdTableId);
-                }
-            }
-            //重新加载薪酬标准表(不然超过三级限制取不到薪档序号)
-            QueryFieldBuilder salaryStandFieldBuilder = QueryFieldBuilder.create()
-                    .add(FormConstant.ID_KEY)
-                    .addIdNumberNameWithExtras(new String[]{"rankentry", "rank", FormConstant.INDEX_KEY});
-            DynamicObject[] salaryStandardArray = BusinessDataServiceHelper.load("hcdm_salarystandard", salaryStandFieldBuilder.buildSelect(), new QFilter[]{new QFilter(FormConstant.ID_KEY, QCP.in, salarystandarId)});
-            Map<Long, DynamicObject> salaryStandardMap = Arrays.stream(salaryStandardArray)
-                    .collect(Collectors.toMap(
-                            obj -> obj.getLong(FormConstant.ID_KEY),
-                            obj -> obj
-                    ));
-
-            StringJoiner msgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
-            for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
-                if (result.salaryStDv == null || result.oldStandardItem == null || result.oldSalaryRank == null) {
-                    msgJoiner.add(StrFormatter.format("【{}】没有定调薪档案或没有定薪项目【岗位工资标准】,无法调档", result.personName));
-                } else {
-                    long salaryStDvId = result.salaryStDv.getLong(FormConstant.ID_KEY);
-                    DynamicObject salaryStandard = salaryStandardMap.get(salaryStDvId);
-
-                    //薪酬标准中薪档(薪档名称不等于档差和等差)
-                    DynamicObjectCollection rankEntry = salaryStandard.getDynamicObjectCollection("rankentry");
-                    Map<Integer, DynamicObject> rankMap = rankEntry.stream().filter(rank -> !rank.getDynamicObject("rank").getString(FormConstant.NAME_KEY).contains("差"))
-                            .collect(Collectors.toMap(
-                                    rank -> rank.getDynamicObject("rank").getInt(FormConstant.INDEX_KEY),
-                                    rank -> rank.getDynamicObject("rank"),
-                                    (existing, replacement) -> replacement // 处理重复键,保留后来的值
-                            ));
-                    Optional<DynamicObject> diffRecord = rankEntry.stream()
-                            .filter(rank -> rank.getDynamicObject("rank").getString(FormConstant.NAME_KEY).contains("档差"))
-                            .findFirst();
-
-                    DynamicObject diffRank = null;
-                    if (diffRecord.isPresent()) {
-                        diffRank = diffRecord.get().getDynamicObject("rank");
+                Set<Long> salarystandarId = new HashSet(salaryAdjustmentResultList.size());
+                for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
+                    if (result.salaryStDv != null) {
+                        DynamicObject salaryStDv = result.salaryStDv;
+                        long stdTableId = salaryStDv.getLong(FormConstant.ID_KEY);
+                        salarystandarId.add(stdTableId);
                     }
-                    if (!rankMap.isEmpty()) {
-                        //原薪档
-                        DynamicObject oldSalaryRank = result.oldSalaryRank;
-                        int oldIndex = oldSalaryRank.getInt(FormConstant.INDEX_KEY);
-                        //调整后薪档序号
-                        int finalRankIndex = oldIndex + result.level;
-                        DynamicObject newSalaryRank;
-                        //判断是否超过薪档的最大序号或最小序号,如果超过则取最小或最大
-                        int maxRankIndex = Collections.max(rankMap.keySet());
-                        int minRankIndex = Collections.min(rankMap.keySet());
-                        if (finalRankIndex > maxRankIndex) {
-                            // 超过最大值,取最大值
-                            newSalaryRank = rankMap.get(maxRankIndex);
-                        } else if (finalRankIndex < minRankIndex) {
-                            // 低于最小值,取最小值
-                            newSalaryRank = rankMap.get(minRankIndex);
-                        }else{
-                            newSalaryRank = rankMap.get(finalRankIndex);
+                }
+                //重新加载薪酬标准表(不然超过三级限制取不到薪档序号)
+                QueryFieldBuilder salaryStandFieldBuilder = QueryFieldBuilder.create()
+                        .add(FormConstant.ID_KEY)
+                        .addIdNumberNameWithExtras(new String[]{"rankentry", "rank", FormConstant.INDEX_KEY});
+                DynamicObject[] salaryStandardArray = BusinessDataServiceHelper.load("hcdm_salarystandard", salaryStandFieldBuilder.buildSelect(), new QFilter[]{new QFilter(FormConstant.ID_KEY, QCP.in, salarystandarId)});
+                Map<Long, DynamicObject> salaryStandardMap = Arrays.stream(salaryStandardArray)
+                        .collect(Collectors.toMap(
+                                obj -> obj.getLong(FormConstant.ID_KEY),
+                                obj -> obj
+                        ));
+
+                StringJoiner msgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
+                for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
+                    if (result.salaryStDv == null || result.oldStandardItem == null || result.oldSalaryRank == null) {
+                        msgJoiner.add(StrFormatter.format("【{}】没有定调薪档案或没有定薪项目【岗位工资标准】,无法调档", result.personName));
+                    } else {
+                        long salaryStDvId = result.salaryStDv.getLong(FormConstant.ID_KEY);
+                        DynamicObject salaryStandard = salaryStandardMap.get(salaryStDvId);
+
+                        //薪酬标准中薪档(薪档名称不等于档差和等差)
+                        DynamicObjectCollection rankEntry = salaryStandard.getDynamicObjectCollection("rankentry");
+                        Map<Integer, DynamicObject> rankMap = rankEntry.stream().filter(rank -> !rank.getDynamicObject("rank").getString(FormConstant.NAME_KEY).contains("差"))
+                                .collect(Collectors.toMap(
+                                        rank -> rank.getDynamicObject("rank").getInt(FormConstant.INDEX_KEY),
+                                        rank -> rank.getDynamicObject("rank"),
+                                        (existing, replacement) -> replacement // 处理重复键,保留后来的值
+                                ));
+                        Optional<DynamicObject> diffRecord = rankEntry.stream()
+                                .filter(rank -> rank.getDynamicObject("rank").getString(FormConstant.NAME_KEY).contains("档差"))
+                                .findFirst();
+
+                        DynamicObject diffRank = null;
+                        if (diffRecord.isPresent()) {
+                            diffRank = diffRecord.get().getDynamicObject("rank");
                         }
-                        result.salaryRank = newSalaryRank;
-                        result.reason+=StrFormatter.format(";{}->{}",oldSalaryRank.getString(FormConstant.NAME_KEY),newSalaryRank.getString(FormConstant.NAME_KEY));
-                        List<StdTableDataMatchParam> matchParams = new ArrayList<>();
-                        StdTableDataMatchParam stdTableDataMatchParam = new StdTableDataMatchParam();
-                        stdTableDataMatchParam.setStdTableId(result.salaryStDv.getLong(FormConstant.ID_KEY));
-                        stdTableDataMatchParam.setStdItemId(standardItemId);
-                        stdTableDataMatchParam.setGradeId(result.oldSalaryGrade.getLong(FormConstant.ID_KEY));
-                        stdTableDataMatchParam.setRankId(newSalaryRank.getLong(FormConstant.ID_KEY));
-                        matchParams.add(stdTableDataMatchParam);
-                        //获取薪酬项目、薪等、薪档对应金额
-                        List<StdTableDataMatchResult> stdTableDataMatchResults = HCDMSalaryStdServiceHelper.matchStdTableData(matchParams);
-                        if(!stdTableDataMatchResults.isEmpty()){
-                            result.amount = stdTableDataMatchResults.get(0).getAmount();
+                        if (!rankMap.isEmpty()) {
+                            //原薪档
+                            DynamicObject oldSalaryRank = result.oldSalaryRank;
+                            int oldIndex = oldSalaryRank.getInt(FormConstant.INDEX_KEY);
+                            //调整后薪档序号
+                            int finalRankIndex = oldIndex + result.level;
+                            DynamicObject newSalaryRank;
+                            //判断是否超过薪档的最大序号或最小序号,如果超过则取最小或最大
+                            int maxRankIndex = Collections.max(rankMap.keySet());
+                            int minRankIndex = Collections.min(rankMap.keySet());
+                            if (finalRankIndex > maxRankIndex) {
+                                // 超过最大值,取最大值
+                                newSalaryRank = rankMap.get(maxRankIndex);
+                            } else if (finalRankIndex < minRankIndex) {
+                                // 低于最小值,取最小值
+                                newSalaryRank = rankMap.get(minRankIndex);
+                            } else {
+                                newSalaryRank = rankMap.get(finalRankIndex);
+                            }
+                            result.salaryRank = newSalaryRank;
+                            result.reason += StrFormatter.format(";{}->{}", oldSalaryRank.getString(FormConstant.NAME_KEY), newSalaryRank.getString(FormConstant.NAME_KEY));
+                            List<StdTableDataMatchParam> matchParams = new ArrayList<>();
+                            StdTableDataMatchParam stdTableDataMatchParam = new StdTableDataMatchParam();
+                            stdTableDataMatchParam.setStdTableId(result.salaryStDv.getLong(FormConstant.ID_KEY));
+                            stdTableDataMatchParam.setStdItemId(standardItemId);
+                            stdTableDataMatchParam.setGradeId(result.oldSalaryGrade.getLong(FormConstant.ID_KEY));
+                            stdTableDataMatchParam.setRankId(newSalaryRank.getLong(FormConstant.ID_KEY));
+                            matchParams.add(stdTableDataMatchParam);
+                            //获取薪酬项目、薪等、薪档对应金额
+                            List<StdTableDataMatchResult> stdTableDataMatchResults = HCDMSalaryStdServiceHelper.matchStdTableData(matchParams);
+                            if (!stdTableDataMatchResults.isEmpty()) {
+                                result.amount = stdTableDataMatchResults.get(0).getAmount();
+                            }
+                            msgJoiner.add(StrFormatter.format("【{}】{}", result.personName, result.reason));
                         }
-                        msgJoiner.add(StrFormatter.format("【{}】{}", result.personName, result.reason));
                     }
                 }
-            }
-            List<DynamicObject> addSalAdjTrackerList = new ArrayList<>();
-            List<Long> ids = new ArrayList<>(salaryAdjustmentResultList.size());
-            List<Long> createOrgList = BaseDataServiceHelper.getCreateOrgList(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID);
-            MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(AdminOrgHelper.BOS_ORG);
-            DynamicObject org = new DynamicObject(bosOrgEntityType);
-            if (!createOrgList.isEmpty()) {
-                org.set(FormConstant.ID_KEY, createOrgList.get(0));
-            }
-            for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
-                if (result.salaryStDv != null && result.oldStandardItem != null && result.oldSalaryRank != null) {
-                    DynamicObject newSalAdjTracker = EntityHelper.newEntity(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID);
-                    newSalAdjTracker.set(FormConstant.CREATEORG_KEY, org);
-                    newSalAdjTracker.set(FormConstant.CTRLSTRATEGY_KEY, CtrlStrategyEnum.GLOBAL_SHARE.getCtrlStrategy());
-                    newSalAdjTracker.set(FormConstant.NAME_KEY,StrFormatter.format("{}的调薪", result.personName));
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_PERFMANAGER,EntityHelper.newEntity(PerfManagerFormConstant.PERFMANAGER_ENTITYID, result.id));
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSALARYGRADE, result.oldSalaryGrade);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSALARYRANK, result.oldSalaryRank);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDMONEY, result.oldAmount);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_SALARYGRADE, result.oldSalaryGrade);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_SALARYRANK, result.salaryRank);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_MONEY, result.amount);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_WAGEEXPLAIN, result.reason);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_APPRAISALTYPE, result.type);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_WAGESTATUS,"1");
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJUSTDIFF,result.level);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSTANDARDITEM, result.oldStandardItem);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_STANDARDITEM, result.oldStandardItem);
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJMONEY, result.amount.subtract(result.oldAmount));
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_DEP,EntityHelper.newEntity(FormConstant.ADMINORGHR_ENTITYID, result.depId));
-                    newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_POSITION,EntityHelper.newEntity(PerfManagerFormConstant.HBPM_POSITIONHR, result.positionId));
-                    ids.add(result.id);
-                    addSalAdjTrackerList.add(newSalAdjTracker);
-                }
-            }
-            MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(PerfManagerFormConstant.PERFMANAGER_ENTITYID);
-            DynamicObject[] perfManagerArray = BusinessDataServiceHelper.load(ids.toArray(new Long[0]), dataEntityType);
-            List<DynamicObject> addPerfManagerList = new ArrayList<>();
-            for (DynamicObject perfManager : perfManagerArray) {
-                perfManager.set(PerfManagerFormConstant.NCKD_WHYEND,"调档后结束");
-                perfManager.set(PerfManagerFormConstant.NCKD_THESTATUS,"2");
-                perfManager.set(PerfManagerFormConstant.NCKD_LOCKUSER,currUser);
-                LocalDateTime beginDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
-                LocalDateTime endDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
-                //第一年考核结果
-                String firstYearResultNumber = null;
-                DynamicObject firstYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_FIRSTYEARRESULT);
-                if (firstYearResultObj != null) {
-                    firstYearResultNumber = firstYearResultObj.getString(FormConstant.NUMBER_KEY);
-                }
-                AppraisalResultEnum firstYearResult = AppraisalResultEnum.getByCode(firstYearResultNumber);
-                //第二年考核结果
-                String secondYearResultNumber = null;
-                DynamicObject secondYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_SECONDYEARRESULT);
-                if (secondYearResultObj != null) {
-                    secondYearResultNumber = secondYearResultObj.getString(FormConstant.NUMBER_KEY);
+                List<DynamicObject> addSalAdjTrackerList = new ArrayList<>();
+                List<Long> ids = new ArrayList<>(salaryAdjustmentResultList.size());
+                List<Long> createOrgList = BaseDataServiceHelper.getCreateOrgList(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID);
+                MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(FormConstant.BOS_ORG);
+                DynamicObject org = new DynamicObject(bosOrgEntityType);
+                if (!createOrgList.isEmpty()) {
+                    org.set(FormConstant.ID_KEY, createOrgList.get(0));
                 }
-                AppraisalResultEnum secondYearResult = AppraisalResultEnum.getByCode(secondYearResultNumber);
-                //第三年考核结果
-                String thirdYearResultNumber = null;
-                DynamicObject thirdYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_THIRDYEARRESULT);
-                if (thirdYearResultObj != null) {
-                    thirdYearResultNumber = thirdYearResultObj.getString(FormConstant.NUMBER_KEY);
+                for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
+                    if (result.salaryStDv != null && result.oldStandardItem != null && result.oldSalaryRank != null) {
+                        DynamicObject newSalAdjTracker = EntityHelper.newEntity(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID);
+                        newSalAdjTracker.set(FormConstant.CREATEORG_KEY, org);
+                        newSalAdjTracker.set(FormConstant.CTRLSTRATEGY_KEY, CtrlStrategyEnum.GLOBAL_SHARE.getCtrlStrategy());
+                        newSalAdjTracker.set(FormConstant.NAME_KEY, StrFormatter.format("{}的调薪", result.personName));
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_PERFMANAGER, EntityHelper.newEntity(PerfManagerFormConstant.PERFMANAGER_ENTITYID, result.id));
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJFILEINFO, result.adjFileInfo);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSALARYGRADE, result.oldSalaryGrade);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSALARYRANK, result.oldSalaryRank);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDMONEY, result.oldAmount);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_SALARYGRADE, result.oldSalaryGrade);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_SALARYRANK, result.salaryRank);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_MONEY, result.amount);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_WAGEEXPLAIN, result.reason);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_APPRAISALTYPE, result.type);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_WAGESTATUS, "1");
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJUSTDIFF, result.level);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSTANDARDITEM, result.oldStandardItem);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_STANDARDITEM, result.oldStandardItem);
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJMONEY, result.amount.subtract(result.oldAmount));
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_DEP, EntityHelper.newEntity(FormConstant.ADMINORGHR_ENTITYID, result.depId));
+                        newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_POSITION, EntityHelper.newEntity(PerfManagerFormConstant.HBPM_POSITIONHR, result.positionId));
+                        newSalAdjTracker.set(SalAdjTrackerConstant.CREATOR_KEY, UserServiceHelper.getCurrentUserId());
+                        ids.add(result.id);
+                        addSalAdjTrackerList.add(newSalAdjTracker);
+                    }
                 }
-                AppraisalResultEnum thirdYearResult = AppraisalResultEnum.getByCode(thirdYearResultNumber);
+                MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(PerfManagerFormConstant.PERFMANAGER_ENTITYID);
+                DynamicObject[] perfManagerArray = BusinessDataServiceHelper.load(ids.toArray(new Long[0]), dataEntityType);
+                List<DynamicObject> addPerfManagerList = new ArrayList<>();
+                for (DynamicObject perfManager : perfManagerArray) {
+                    perfManager.set(PerfManagerFormConstant.NCKD_WHYEND, "调档后结束");
+                    perfManager.set(PerfManagerFormConstant.NCKD_THESTATUS, "2");
+                    perfManager.set(PerfManagerFormConstant.NCKD_LOCKUSER, currUser);
+                    LocalDateTime beginDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
+                    LocalDateTime endDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
+                    //第一年考核结果
+                    String firstYearResultNumber = null;
+                    DynamicObject firstYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_FIRSTYEARRESULT);
+                    if (firstYearResultObj != null) {
+                        firstYearResultNumber = firstYearResultObj.getString(FormConstant.NUMBER_KEY);
+                    }
+                    AppraisalResultEnum firstYearResult = AppraisalResultEnum.getByCode(firstYearResultNumber);
+                    //第二年考核结果
+                    String secondYearResultNumber = null;
+                    DynamicObject secondYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_SECONDYEARRESULT);
+                    if (secondYearResultObj != null) {
+                        secondYearResultNumber = secondYearResultObj.getString(FormConstant.NUMBER_KEY);
+                    }
+                    AppraisalResultEnum secondYearResult = AppraisalResultEnum.getByCode(secondYearResultNumber);
+                    //第三年考核结果
+                    String thirdYearResultNumber = null;
+                    DynamicObject thirdYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_THIRDYEARRESULT);
+                    if (thirdYearResultObj != null) {
+                        thirdYearResultNumber = thirdYearResultObj.getString(FormConstant.NUMBER_KEY);
+                    }
+                    AppraisalResultEnum thirdYearResult = AppraisalResultEnum.getByCode(thirdYearResultNumber);
 
-                LocalDateTime actEndYear = null;
-                if(isAppraisalResult(firstYearResult) && isAppraisalResult(secondYearResult) && !isAppraisalResult(thirdYearResult)){
-                    actEndYear = DateUtil.minusYears(endDate,1);
-                }else{
-                    actEndYear = endDate;
-                }
-                perfManager.set(PerfManagerFormConstant.NCKD_ACTENDYEAR,DateUtil.toDate(actEndYear));
-
-                DynamicObject newPerfManager = EntityHelper.newEntity(PerfManagerFormConstant.PERFMANAGER_ENTITYID);
-                DynamicObject person = perfManager.getDynamicObject(FormConstant.NCKD_PERSON);
-                String personName = person.getString(FormConstant.NAME_KEY);
-                newPerfManager.set(FormConstant.CREATEORG_KEY, perfManager.get(FormConstant.CREATEORG_KEY));
-                newPerfManager.set(PerfManagerFormConstant.CTRLSTRATEGY_KEY, CtrlStrategyEnum.GLOBAL_SHARE.getCtrlStrategy());
-                newPerfManager.set(FormConstant.NCKD_EMPPOSORGREL, perfManager.getDynamicObject(FormConstant.NCKD_EMPPOSORGREL));
-                newPerfManager.set(FormConstant.NCKD_DEP, perfManager.getDynamicObject(FormConstant.NCKD_DEP));
-                newPerfManager.set(FormConstant.NCKD_PERSON, person);
-                LocalDateTime newBeginDate = DateUtil.addYears(actEndYear, 1);
-                LocalDateTime newEndDate = DateUtil.addYears(actEndYear, 3);
-                newPerfManager.set(PerfManagerFormConstant.NCKD_BEGINYEAR, DateUtil.toDate(newBeginDate));
-                newPerfManager.set(PerfManagerFormConstant.NCKD_ENDYEAR, DateUtil.toDate(newEndDate));
-                newPerfManager.set(PerfManagerFormConstant.DESCRIPTION_KEY, "调档后生成新周期");
-                newPerfManager.set(PerfManagerFormConstant.NCKD_LASTPERFMANAGER,perfManager);
-                newPerfManager.set(FormConstant.NAME_KEY, StrFormatter.format("【{}】{}~{}的考核周期",personName,newBeginDate.getYear(),newEndDate.getYear()));
-                addPerfManagerList.add(newPerfManager);
-            }
-            OperateOption option = OperateOption.create();
-            option.setVariableValue(OperateOptionConst.IGNOREINTERACTION, Boolean.TRUE+"");
-            option.setVariableValue("isUpdate", Boolean.TRUE+"");
-            OperationResult operationResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, PerfManagerFormConstant.PERFMANAGER_ENTITYID, perfManagerArray, option);
-            if (!operationResult.isSuccess()) {
-                StringJoiner errorMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
-                for (IOperateInfo error : operationResult.getAllErrorOrValidateInfo()) {
-                    errorMsgJoiner.add(error.getMessage());
-                }
-                String errorMsg = errorMsgJoiner.toString();
-                if(StringUtils.isBlank(errorMsg)){
-                    errorMsg = operationResult.getMessage();
+                    LocalDateTime actEndYear = null;
+                    if (isAppraisalResult(firstYearResult) && isAppraisalResult(secondYearResult) && !isAppraisalResult(thirdYearResult)) {
+                        actEndYear = DateUtil.minusYears(endDate, 1);
+                    } else {
+                        actEndYear = endDate;
+                    }
+                    perfManager.set(PerfManagerFormConstant.NCKD_ACTENDYEAR, DateUtil.toDate(actEndYear));
+
+                    DynamicObject newPerfManager = EntityHelper.newEntity(PerfManagerFormConstant.PERFMANAGER_ENTITYID);
+                    DynamicObject person = perfManager.getDynamicObject(FormConstant.NCKD_PERSON);
+                    String personName = person.getString(FormConstant.NAME_KEY);
+                    newPerfManager.set(FormConstant.CREATEORG_KEY, perfManager.get(FormConstant.CREATEORG_KEY));
+                    newPerfManager.set(PerfManagerFormConstant.CTRLSTRATEGY_KEY, CtrlStrategyEnum.GLOBAL_SHARE.getCtrlStrategy());
+                    newPerfManager.set(FormConstant.NCKD_EMPPOSORGREL, perfManager.getDynamicObject(FormConstant.NCKD_EMPPOSORGREL));
+                    newPerfManager.set(FormConstant.NCKD_DEP, perfManager.getDynamicObject(FormConstant.NCKD_DEP));
+                    newPerfManager.set(FormConstant.NCKD_PERSON, person);
+                    LocalDateTime newBeginDate = DateUtil.addYears(actEndYear, 1);
+                    LocalDateTime newEndDate = DateUtil.addYears(actEndYear, 3);
+                    newPerfManager.set(PerfManagerFormConstant.NCKD_BEGINYEAR, DateUtil.toDate(newBeginDate));
+                    newPerfManager.set(PerfManagerFormConstant.NCKD_ENDYEAR, DateUtil.toDate(newEndDate));
+                    newPerfManager.set(PerfManagerFormConstant.DESCRIPTION_KEY, "调档后生成新周期");
+                    newPerfManager.set(PerfManagerFormConstant.NCKD_LASTPERFMANAGER, perfManager);
+                    newPerfManager.set(FormConstant.NAME_KEY, StrFormatter.format("【{}】{}~{}的考核周期", personName, newBeginDate.getYear(), newEndDate.getYear()));
+                    addPerfManagerList.add(newPerfManager);
                 }
-                throw new ValidationException("保存考核周期失败,原因:"+errorMsg);
-            }else{
-                OperateOption addPerfManagerOption = OperateOption.create();
-                addPerfManagerOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, Boolean.TRUE + "");
-                addPerfManagerOption.setVariableValue("cyclegenerate", Boolean.TRUE + "");
-                OperationResult addPerfManagerResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, PerfManagerFormConstant.PERFMANAGER_ENTITYID, addPerfManagerList.toArray(new DynamicObject[0]), addPerfManagerOption);
-
-                if (!addPerfManagerResult.isSuccess()) {
-                    StringJoiner errorMsg = new StringJoiner(StrFormatter.LINE_SEPARATOR);
-                    for (IOperateInfo error : addPerfManagerResult.getAllErrorOrValidateInfo()) {
-                        errorMsg.add(error.getMessage());
+                OperateOption option = OperateOption.create();
+                option.setVariableValue(OperateOptionConst.IGNOREINTERACTION, Boolean.TRUE + "");
+                option.setVariableValue("isUpdate", Boolean.TRUE + "");
+                OperationResult operationResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, PerfManagerFormConstant.PERFMANAGER_ENTITYID, perfManagerArray, option);
+                if (!operationResult.isSuccess()) {
+                    StringJoiner errorMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
+                    for (IOperateInfo error : operationResult.getAllErrorOrValidateInfo()) {
+                        errorMsgJoiner.add(error.getMessage());
                     }
-                    throw new ValidationException(errorMsg.toString());
-                }else{
-                    OperationResult salAdjTrackerResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, SalAdjTrackerConstant.SALADJTRACKER_ENTITYID, addSalAdjTrackerList.toArray(new DynamicObject[0]), OperateOption.create());
-                    if (!salAdjTrackerResult.isSuccess()) {
-                        StringJoiner errorMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
-                        for (IOperateInfo error : salAdjTrackerResult.getAllErrorOrValidateInfo()) {
-                            errorMsgJoiner.add(error.getMessage());
+                    String errorMsg = errorMsgJoiner.toString();
+                    if (StringUtils.isBlank(errorMsg)) {
+                        errorMsg = operationResult.getMessage();
+                    }
+                    throw new ValidationException("保存考核周期失败,原因:" + errorMsg);
+                } else {
+                    OperateOption addPerfManagerOption = OperateOption.create();
+                    addPerfManagerOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, Boolean.TRUE + "");
+                    addPerfManagerOption.setVariableValue("cyclegenerate", Boolean.TRUE + "");
+                    OperationResult addPerfManagerResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, PerfManagerFormConstant.PERFMANAGER_ENTITYID, addPerfManagerList.toArray(new DynamicObject[0]), addPerfManagerOption);
+
+                    if (!addPerfManagerResult.isSuccess()) {
+                        StringJoiner errorMsg = new StringJoiner(StrFormatter.LINE_SEPARATOR);
+                        for (IOperateInfo error : addPerfManagerResult.getAllErrorOrValidateInfo()) {
+                            errorMsg.add(error.getMessage());
                         }
-                        String errorMsg = errorMsgJoiner.toString();
-                        if(StringUtils.isBlank(errorMsg)){
-                            errorMsg = salAdjTrackerResult.getMessage();
+                        throw new ValidationException(errorMsg.toString());
+                    } else {
+                        OperationResult salAdjTrackerResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, SalAdjTrackerConstant.SALADJTRACKER_ENTITYID, addSalAdjTrackerList.toArray(new DynamicObject[0]), OperateOption.create());
+                        if (!salAdjTrackerResult.isSuccess()) {
+                            StringJoiner errorMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
+                            for (IOperateInfo error : salAdjTrackerResult.getAllErrorOrValidateInfo()) {
+                                errorMsgJoiner.add(error.getMessage());
+                            }
+                            String errorMsg = errorMsgJoiner.toString();
+                            if (StringUtils.isBlank(errorMsg)) {
+                                errorMsg = salAdjTrackerResult.getMessage();
+                            }
+                            throw new ValidationException("保存调薪情况失败,原因:" + errorMsg);
                         }
-                        throw new ValidationException("保存调薪情况失败,原因:"+errorMsg);
                     }
                 }
+                this.operationResult.setSuccess(true);
+                this.operationResult.setMessage(msgJoiner.toString());
             }
+        }else{
             this.operationResult.setSuccess(true);
-            this.operationResult.setMessage(msgJoiner.toString());
+            this.operationResult.setMessage("没有需要调档的人员!");
         }
 
     }
@@ -684,6 +702,8 @@ public class SalaryAdjOpPlugin extends AbstractOperationServicePlugIn implements
         int level;
         /** 调薪原因*/
         String reason;
+        /**定调薪档案*/
+        DynamicObject adjFileInfo;
         /**薪酬标准表*/
         DynamicObject salaryStDv;
         /** 原定调薪项目 */