Răsfoiți Sursa

Merge remote-tracking branch 'origin/master'

turborao 3 zile în urmă
părinte
comite
aa7fab4e49
15 a modificat fișierele cu 897 adăugiri și 138 ștergeri
  1. 8 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/swc/helper/AdjFileServiceHelper.java
  3. 12 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/business/transfer/TransferApplyBillServiceHelper.java
  4. 135 1
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/common/transfer/TransferApplyBillConstant.java
  5. 322 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/plugin/operate/transfer/CancelContractAfterEffectOpPlugin.java
  6. 39 13
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/file/PersonPosFileSaveOpPlugin.java
  7. 13 6
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/hr/service/impl/PositionBillServiceHelper.java
  8. 1 10
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/operate/hr/PosBillEntryNewPositionTempSaveOpPlugin.java
  9. 98 89
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/print/EmployeePrintPlugin.java
  10. 9 13
      code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/operate/salary/SalaryAdjOpPlugin.java
  11. 148 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/common/SwcAdjFileServiceHelper.java
  12. 41 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/mservice/SwcHCDMService.java
  13. 31 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/mservice/api/ISwcHCDMService.java
  14. 35 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/servicehelper/ServiceFactory.java
  15. 4 4
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hscs/business/custfetch/PosSalaryGrade1.java

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

@@ -19,6 +19,10 @@ public class FormConstant {
     public static final String WFTASK_APP = "wftask";
     /** 组织管理 */
     public static final String HOMS_APP = "homs";
+    /** HR通用服务 */
+    public static final String HRCS_APP = "hrcs";
+    /** 员工信息中心 */
+    public static final String HRPI_APP = "hrpi";
 
     //====================================== 标品实体标识(需要小写) ======================================
     /**学历-实体标识*/
@@ -160,6 +164,10 @@ public class FormConstant {
     public static final String HAOS_ADMINORGDETAIL_ENTITY = "haos_adminorgdetail";
     /** 企业建模-岗位实体标识 */
     public static final String BOS_POSITION_ENTITY = "bos_position";
+    /** 合同申请父页面实体标识 */
+    public static final String HLCM_CONTRACTAPPLY_ENTITY = "hlcm_contractapply";
+    /** 合同解除实体标识 */
+    public static final String HLCM_CONTRACTAPPLYCANCEL_ENTITY = "hlcm_contractapplycancel";
 
     //====================================== 标品op ======================================
     /** 确认框确认按钮 */

+ 1 - 2
code/base/nckd-jxccl-base-helper/src/main/java/nckd/jxccl/base/swc/helper/AdjFileServiceHelper.java

@@ -5,7 +5,6 @@ import kd.bos.entity.validate.BillStatus;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
 import kd.bos.servicehelper.DispatchServiceHelper;
-import kd.sdk.swc.hcdm.business.helper.HCDMAdjFileServiceHelper;
 import nckd.jxccl.base.common.constant.FormConstant;
 import nckd.jxccl.base.common.utils.ConvertUtil;
 import nckd.jxccl.base.entity.helper.EntityHelper;
@@ -87,7 +86,7 @@ public class AdjFileServiceHelper {
             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,hcdmorg.id,");
             //查询定调薪记录
             //hcdm_decadjrecor
-            Map<String, Object> lastDecAdjRecordMap = HCDMAdjFileServiceHelper.getLastDecAdjRecords(adjRecordParams);
+            Map<String, Object> lastDecAdjRecordMap = DispatchServiceHelper.invokeService("nckd.jxccl.swc.hcdm.servicehelper", "hcdm", "ISwcHCDMService", "getLastDecAdjRecords", adjRecordParams);
             if (ConvertUtil.toBoolean(lastDecAdjRecordMap.get("success"))) {
                 List<Map> datas = ConvertUtil.toList(lastDecAdjRecordMap.get("data"), ArrayList::new);
                 for (Map data : datas) {

+ 12 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/business/transfer/TransferApplyBillServiceHelper.java

@@ -0,0 +1,12 @@
+package nckd.jxccl.hr.hdm.business.transfer;
+
+/**
+ * 调动单服务类
+ * @author: jtd
+ * @date: 2026/1/6 19:54
+ */
+public class TransferApplyBillServiceHelper {
+
+
+
+}

+ 135 - 1
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/common/transfer/TransferApplyBillConstant.java

@@ -10,15 +10,148 @@ import nckd.jxccl.base.common.constant.FormConstant;
 public class TransferApplyBillConstant extends FormConstant {
     /** 获取员工近亲属关系查询实体标识 */
     public static final String NCKD_HRPI_GETFAMILYRELATION_ENTITY = "nckd_hrpi_getfamilyrelation";
+    /** 劳动合同档案实体标识 */
+    public static final String HLCM_CONTRACTSOURCE_ENTITY = "hlcm_contractsource";
+    /** 劳动合同档案实体标识 */
+    public static final String HLCM_CONTRACT_ENTITY = "hlcm_contract";
+    /** 解除/终止合同原因实体标识 */
+    public static final String HLCM_CONTRACTREASON_ENTITY = "hlcm_contractreason";
 
+    /** 调动生效后解除合同OP标识 */
+    public static final String CANCLECONTRACT_AFTEREFFECT_OP = "canclecontract_aftereffect";
+
+    /** 调出公司(业务对象) */
+    public static final String BCOMPANYBO_KEY = "bcompanybo";
     /** 调出公司 */
     public static final String BCOMPANY_KEY = "bcompany";
     /** 调入公司 */
     public static final String ACOMPANY_KEY = "acompany";
-    /** 配偶、近亲属关系.员工 */
+    /** 原组织分配 */
+    public static final String BB_A_TID_KEY = "bb_a_tid";
+    /** 实际调动日期 */
+    public static final String B_EFFECTIVEDATE_KEY = "b_effectivedate";
+    /** 常驻工作地 */
+    public static final String BB_PO_WORKPLACE_KEY = "bb_po_workplace";
+    /** 国籍 */
+    public static final String NATIONALITY_KEY = "nationality";
+    /** 联系电话 */
+    public static final String EMPPHONE_KEY = "empphone";
+    /** 行政组织(业务对象) */
+    public static final String BB_PO_ADMINORGBO_KEY = "bb_po_adminorgbo";
+    /** 行政组织 */
+    public static final String BB_PO_ADMINORG_KEY = "bb_po_adminorg";
+    /** 岗位(业务对象) */
+    public static final String BB_PO_POSITIONBO_KEY = "bb_po_positionbo";
+    /** 职位 */
+    public static final String BB_PO_JOB_KEY = "bb_po_job";
+    /** 任职序号 */
+    public static final String BB_PO_ORGRELSEQ_KEY = "bb_po_orgrelseq";
+    /** 员工组 */
+    public static final String BB_A_EMPGROUP_KEY = "bb_a_empgroup";
+
+    /** 员工 */
     public static final String NCKD_EMPID_KEY = "nckd_empid";
+
+    /** 合同协议类型 */
+    public static final String PROTOCOLTYPE_KEY = "protocoltype";
+    /** 合同状态 */
+    public static final String CONTRACTSTATUS_KEY = "contractstatus";
+    /** 合同开始日期 */
+    public static final String STARTDATE_KEY = "startdate";
+    /** 计划结束日期 */
+    public static final String PLANENDDATE_KEY = "planenddate";
+    /** 应签单位 */
+    public static final String SUGGESTSIGNCOMPANY_KEY = "suggestsigncompany";
+    /** 实签单位 */
+    public static final String ACTUALSIGNCOMPANY_KEY = "actualsigncompany";
+    /** 证件类型 */
+    public static final String CARDTYPE_KEY = "cardtype";
+    /** 证件号码 */
+    public static final String CARDNUMBER_KEY = "cardnumber";
+    /** 户籍地址 */
+    public static final String HOUSEHOLDREGISTER_KEY = "householdregister";
+    /** 居住地址 */
+    public static final String RESIDENTIALADDRESS_KEY = "residentialaddress";
+    /** 实签单位历史 */
+    public static final String ACTUALSIGNCOMPANYHIS_KEY = "actualsigncompanyhis";
+    /** 合同期限类型 */
+    public static final String PERIODTYPE_KEY = "periodtype";
+    /** 合同期限单位 */
+    public static final String PERIODUNIT_KEY = "periodunit";
+    /** 合同期限 */
+    public static final String PERIOD_KEY = "period";
+    /** 签署方式 */
+    public static final String SIGNWAY_KEY = "signway";
+    /** 实际结束日期 */
+    public static final String ENDDATE_KEY = "enddate";
+    /** 签订日期 */
+    public static final String SIGNEDDATE_KEY = "signeddate";
+    /** 部门 */
+    public static final String ORGMODEL_KEY = "orgmodel";
+    /** 岗位 */
+    public static final String POSITIONMODEL_KEY = "positionmodel";
+
+
+
     /** 原合同是否解除 */
     public static final String NCKD_ISTERMORIGCONT_KEY = "nckd_istermorigcont";
+    /** 任职类型(变动前) */
+    public static final String BB_PO_POSTYPE_KEY = "bb_po_postype";
+    /** 姓名 */
+    public static final String EMPNAME_KEY = "empname";
+    /** 公司历史 */
+    public static final String SIGNEDCOMPANYHIS_KEY = "signedcompanyhis";
+    /** 行政组织历史F7 */
+    public static final String DEPARTMENTHIS_KEY = "departmenthis";
+    /** 岗位历史 */
+    public static final String POSTIONHIS_KEY = "postionhis";
+    /** 国籍 */
+    public static final String NATION_KEY = "nation";
+    /** 签署业务类型 */
+    public static final String BUSINESSTYPE_KEY = "businesstype";
+    /** 常驻工作地 */
+    public static final String BASELOCATION_KEY = "baselocation";
+    /** 合同解除日期 */
+    public static final String CANCELDATE_KEY = "canceldate";
+    /** 合同编号 */
+    public static final String OLDCONTRACT_KEY = "oldcontract";
+    /** 业务处理状态 */
+    public static final String HANDLESTATUS_KEY = "handlestatus";
+    /** 实际签订日期 */
+    public static final String ACTUALSIGNDATE_KEY = "actualsigndate";
+    /** 职位 */
+    public static final String JOB_KEY = "job";
+    /** 公司 */
+    public static final String CURCOMPANY_KEY = "curcompany";
+    /** 部门 */
+    public static final String CURDEPT_KEY = "curdept";
+    /** 岗位 */
+    public static final String CURPOSTION_KEY = "curpostion";
+    /** 职位 */
+    public static final String CURJOB_KEY = "curjob";
+    /** 任职序号 */
+    public static final String ORGRELSEQ_KEY = "orgrelseq";
+
+    /** 续签次数(续签用) */
+    public static final String RENEWCOUNT_KEY = "renewcount";
+    /** 人事管理组织 */
+    public static final String ERMANORG_KEY = "ermanorg";
+    /** 员工管理部门 */
+    public static final String ADMINORORG_KEY = "adminororg";
+    /** 员工组 */
+    public static final String ERMANPERORG_KEY = "ermanperorg";
+    /** 档案类型 */
+    public static final String CONTRACTCATEGORY_KEY = "contractcategory";
+    /** 解除原因 */
+    public static final String CANCELREASONTYPE_KEY = "cancelreasontype";
+
+    /** 常驻工作地 */
+    public static final String LOCALTION_KEY = "location";
+    /** 员工组 */
+    public static final String PERSONGROUP_KEY = "persongroup";
+    /** 员工管理部门 */
+    public static final String AFFILIATEADMINORG_KEY = "affiliateadminorg";
+
 
     /** 员工.员工编码 */
     public static final String EMPLOYEE_EMPNUMBER = "employee.empnumber";
@@ -37,4 +170,5 @@ public class TransferApplyBillConstant extends FormConstant {
 
     /** 近亲属关系确认回调 */
     public static final String FAMILY_RELATION_CONFIRM_CALLBACK = "familyRelationConfirm";
+
 }

+ 322 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/plugin/operate/transfer/CancelContractAfterEffectOpPlugin.java

@@ -0,0 +1,322 @@
+package nckd.jxccl.hr.hdm.plugin.operate.transfer;
+
+import com.google.common.collect.Lists;
+import kd.bos.dataentity.entity.DynamicObject;
+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.PreparePropertysEventArgs;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.exception.BosErrorCode;
+import kd.bos.exception.ErrorCode;
+import kd.bos.exception.KDBizException;
+import kd.bos.exception.KDException;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.orm.util.CollectionUtils;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.servicehelper.user.UserServiceHelper;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import kd.hr.hbp.business.servicehelper.HRMServiceHelper;
+import kd.hr.hbp.common.api.HrApiResponse;
+import kd.hr.hbp.common.util.HRObjectUtils;
+import kd.hr.hbp.common.util.HRStringUtils;
+import kd.hr.hlcm.common.enums.ContractCategoryEnum;
+import kd.hr.hlcm.common.enums.PostypeEnum;
+import kd.sdk.hr.hdm.common.enums.reg.RegBillStatusEnum;
+import kd.sdk.hr.hlcm.common.enums.BusinessTypeEnum;
+import nckd.jxccl.base.common.utils.QueryFieldBuilder;
+import nckd.jxccl.hr.hdm.common.transfer.TransferApplyBillConstant;
+import nckd.jxccl.hr.homs.common.application.event.GECEventConstant;
+import org.apache.commons.lang3.StringUtils;
+
+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.Locale;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * 调动生效后解除合同操作插件
+ * @entity: nckd_hdm_transferbase_ext
+ * @operate: canclecontract_aftereffect
+ * @author: jtd
+ * @date: 2026/1/6 11:38
+ */
+public class CancelContractAfterEffectOpPlugin extends AbstractOperationServicePlugIn {
+    private static final Log log = LogFactory.getLog(CancelContractAfterEffectOpPlugin.class);
+    private static final HRBaseServiceHelper contractSourceHelper = HRBaseServiceHelper.create(TransferApplyBillConstant.HLCM_CONTRACTSOURCE_ENTITY);
+    private static final HRBaseServiceHelper contractHelper = HRBaseServiceHelper.create(TransferApplyBillConstant.HLCM_CONTRACT_ENTITY);
+    private static final HRBaseServiceHelper contractApplyCancelHelper = HRBaseServiceHelper.create(TransferApplyBillConstant.HLCM_CONTRACTAPPLYCANCEL_ENTITY);
+    private static final HRBaseServiceHelper contractReasonHelper = HRBaseServiceHelper.create(TransferApplyBillConstant.HLCM_CONTRACTREASON_ENTITY);
+
+    @Override
+    public void onPreparePropertys(PreparePropertysEventArgs e) {
+        e.getFieldKeys().addAll(billEntityType.getAllFields().keySet());
+    }
+
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        super.beginOperationTransaction(e);
+
+        DynamicObject[] dataEntites = e.getDataEntities();
+        List<DynamicObject> transferData = Arrays.stream(dataEntites).filter(data -> data.getBoolean(TransferApplyBillConstant.NCKD_ISTERMORIGCONT_KEY)).collect(Collectors.toList());
+        List<DynamicObject> cancelConstractDyoList = new ArrayList<DynamicObject>();
+        for (DynamicObject data : transferData) {
+            cancelConstractDyoList.add(buildContract(data));
+        }
+
+        OperationResult operationResult;
+        try {
+            operationResult = SaveServiceHelper.saveOperate(TransferApplyBillConstant.HLCM_CONTRACTAPPLYCANCEL_ENTITY, cancelConstractDyoList.toArray(new DynamicObject[0]));
+        } catch (KDException ex) {
+            throw new KDBizException(new ErrorCode(ex.getErrorCode().getCode(), ex.getErrorCode().getMessage()), ex.getCause());
+        }
+
+        if (!operationResult.isSuccess()) {
+            List<String> errorMsgList = new ArrayList<String>();
+            for (IOperateInfo operateInfo : operationResult.getAllErrorOrValidateInfo()) {
+                errorMsgList.add(operateInfo.getMessage());
+            }
+
+            if(StringUtils.isBlank(operationResult.getMessage())){
+                errorMsgList.add(operationResult.getMessage());
+            }
+            throw new KDBizException(new ErrorCode("CancelContractAfterEffect.SaveContract.Error", String.join(System.lineSeparator(), errorMsgList)));
+        }
+    }
+
+    private  DynamicObject buildContract(DynamicObject data) {
+        DynamicObject cancelContract = getCancelContractByErManFile(data);
+
+        DynamicObject contractApplyCancelDyo = contractApplyCancelHelper.generateEmptyDynamicObject();
+        // 设置 姓名
+        contractApplyCancelDyo.set(TransferApplyBillConstant.EMPNAME_KEY, data.get(String.join(".", TransferApplyBillConstant.BB_EM_TID, TransferApplyBillConstant.NAME_KEY)));
+        // 设置 人事管理组织
+        contractApplyCancelDyo.set(TransferApplyBillConstant.ORG_KEY, data.get(TransferApplyBillConstant.ORG_KEY));
+        // 设置 工号
+        contractApplyCancelDyo.set(TransferApplyBillConstant.EMP_NUMBER_KEY, data.get(String.join(".", TransferApplyBillConstant.BB_EM_TID, TransferApplyBillConstant.EMP_NUMBER_KEY)));
+        // 设置 证件类型
+        contractApplyCancelDyo.set(TransferApplyBillConstant.CARDTYPE_KEY, cancelContract.get(TransferApplyBillConstant.CARDTYPE_KEY));
+        // 设置 证件号码
+        contractApplyCancelDyo.set(TransferApplyBillConstant.CARDNUMBER_KEY, cancelContract.get(TransferApplyBillConstant.CARDNUMBER_KEY));
+        // 设置 单据编号
+        /*CodeRuleInfo codeRuleInfo = CodeRuleServiceHelper.getCodeRule(contractApplyCancelDyo.getDataEntityType().getName(), contractApplyCancelDyo, data.getString(String.format("%s_id", TransferApplyBillConstant.ORG_KEY)));
+        String number = CodeRuleServiceHelper.readNumber(codeRuleInfo, contractApplyCancelDyo);
+        contractApplyCancelDyo.set(TransferApplyBillConstant.NUMBER_KEY, number);*/
+        // 设置 审批状态
+        contractApplyCancelDyo.set(TransferApplyBillConstant.AUDIT_STATUS, RegBillStatusEnum.TEMPSTORAGE.getCode());// 暂存
+        // 设置 公司历史
+        contractApplyCancelDyo.set(TransferApplyBillConstant.SIGNEDCOMPANYHIS_KEY, data.get(TransferApplyBillConstant.BCOMPANY_KEY));
+        // 设置 行政组织历史F7
+        contractApplyCancelDyo.set(TransferApplyBillConstant.DEPARTMENTHIS_KEY, data.get(TransferApplyBillConstant.BB_PO_ADMINORG_KEY));
+        // 设置 岗位历史
+        contractApplyCancelDyo.set(TransferApplyBillConstant.POSTIONHIS_KEY, data.get(TransferApplyBillConstant.BB_PO_POSITION));
+        // 设置 国籍
+        contractApplyCancelDyo.set(TransferApplyBillConstant.NATION_KEY, data.get(String.join(".", TransferApplyBillConstant.BB_EM_TID, TransferApplyBillConstant.NATIONALITY_KEY)));
+        // 设置 常驻工作地
+        contractApplyCancelDyo.set(TransferApplyBillConstant.BASELOCATION_KEY, data.get(TransferApplyBillConstant.BB_PO_WORKPLACE_KEY));
+        // 设置 联系方式
+        contractApplyCancelDyo.set(TransferApplyBillConstant.EMPPHONE_KEY, cancelContract.getString(TransferApplyBillConstant.EMPPHONE_KEY));
+        // 设置 合同协议类型
+        contractApplyCancelDyo.set(TransferApplyBillConstant.PROTOCOLTYPE_KEY, "1");// 劳动合同
+        // 设置 签署业务类型
+        contractApplyCancelDyo.set(TransferApplyBillConstant.BUSINESSTYPE_KEY, BusinessTypeEnum.CANCEL.getCombKey());
+        // 设置 签署方式
+        contractApplyCancelDyo.set(TransferApplyBillConstant.SIGNWAY_KEY, cancelContract.get(TransferApplyBillConstant.SIGNWAY_KEY));
+        // 设置 合同开始日期
+        contractApplyCancelDyo.set(TransferApplyBillConstant.STARTDATE_KEY, cancelContract.get(TransferApplyBillConstant.STARTDATE_KEY));
+        // 设置 实际结束日期
+        contractApplyCancelDyo.set(TransferApplyBillConstant.ENDDATE_KEY, cancelContract.get(TransferApplyBillConstant.ENDDATE_KEY));
+        // 设置 签订日期
+        //contractApplyCancelDyo.set(TransferApplyBillConstant.SIGNEDDATE_KEY, cancelContract.get(TransferApplyBillConstant.SIGNEDDATE_KEY));// 解除不能设置
+        // 设置 合同期限
+        contractApplyCancelDyo.set(TransferApplyBillConstant.PERIOD_KEY, cancelContract.get(TransferApplyBillConstant.PERIOD_KEY));
+        // 设置 实签单位
+        contractApplyCancelDyo.set(TransferApplyBillConstant.ACTUALSIGNCOMPANY_KEY, cancelContract.get(TransferApplyBillConstant.ACTUALSIGNCOMPANY_KEY));
+        // 设置 实签单位历史
+        contractApplyCancelDyo.set(TransferApplyBillConstant.ACTUALSIGNCOMPANYHIS_KEY, cancelContract.get(TransferApplyBillConstant.ACTUALSIGNCOMPANYHIS_KEY));
+        // 设置 合同解除日期
+        contractApplyCancelDyo.set(TransferApplyBillConstant.CANCELDATE_KEY, data.get(TransferApplyBillConstant.B_EFFECTIVEDATE_KEY));
+        // 设置 合同编号
+        contractApplyCancelDyo.set(TransferApplyBillConstant.OLDCONTRACT_KEY, cancelContract);
+        // 设置 业务处理状态
+        //contractApplyCancelDyo.set(TransferApplyBillConstant.HANDLESTATUS_KEY);
+        // 设置 任职类型
+        contractApplyCancelDyo.set(TransferApplyBillConstant.POSTYPE, data.get(TransferApplyBillConstant.BB_PO_POSTYPE_KEY));
+        // 设置 实际签订日期
+        //contractApplyCancelDyo.set(TransferApplyBillConstant.ACTUALSIGNDATE_KEY);
+        // 设置 合同期限单位
+        //contractApplyCancelDyo.set(TransferApplyBillConstant.PERIODUNIT_KEY);
+        // 设置 单据状态
+        contractApplyCancelDyo.set(TransferApplyBillConstant.BILL_STATUS_KEY, RegBillStatusEnum.TEMPSTORAGE.getCode());
+        // 设置 职位
+        Long jobHis = getJobHis(data.getLong(String.join(".", TransferApplyBillConstant.BB_PO_JOB_KEY, TransferApplyBillConstant.ID_KEY)));
+        contractApplyCancelDyo.set(TransferApplyBillConstant.JOB_KEY, jobHis);
+        // 设置 公司
+        contractApplyCancelDyo.set(TransferApplyBillConstant.CURCOMPANY_KEY, data.get(TransferApplyBillConstant.BCOMPANYBO_KEY));
+        // 设置 部门
+        contractApplyCancelDyo.set(TransferApplyBillConstant.CURDEPT_KEY, data.get(TransferApplyBillConstant.BB_PO_ADMINORGBO_KEY));
+        // 设置 岗位
+        contractApplyCancelDyo.set(TransferApplyBillConstant.CURPOSTION_KEY, data.get(TransferApplyBillConstant.BB_PO_POSITIONBO_KEY));
+        // 设置 职位
+        contractApplyCancelDyo.set(TransferApplyBillConstant.CURJOB_KEY, data.get(TransferApplyBillConstant.BB_PO_JOB_KEY));
+        // 设置 员工(HR员工)
+        contractApplyCancelDyo.set(TransferApplyBillConstant.EMPLOYEE_KEY, data.get(TransferApplyBillConstant.BB_EM_TID));
+        // 设置 员工(组织分配)
+        contractApplyCancelDyo.set(TransferApplyBillConstant.ASSIGNMENT, data.get(TransferApplyBillConstant.BB_A_TID_KEY));
+        // 设置 任职序号
+        contractApplyCancelDyo.set(TransferApplyBillConstant.ORGRELSEQ_KEY, data.get(TransferApplyBillConstant.BB_PO_ORGRELSEQ_KEY));
+        // 设置 居住地址
+        contractApplyCancelDyo.set(TransferApplyBillConstant.RESIDENTIALADDRESS_KEY, cancelContract.getString(TransferApplyBillConstant.RESIDENTIALADDRESS_KEY));
+        // 设置 户籍地址
+        contractApplyCancelDyo.set(TransferApplyBillConstant.HOUSEHOLDREGISTER_KEY, cancelContract.getString(TransferApplyBillConstant.HOUSEHOLDREGISTER_KEY));
+
+        // 设置 续签次数(续签用)
+        contractApplyCancelDyo.set(TransferApplyBillConstant.RENEWCOUNT_KEY, getRenewCount(contractApplyCancelDyo));
+        // 设置 人事管理组织
+        contractApplyCancelDyo.set(TransferApplyBillConstant.ERMANORG_KEY, data.get(TransferApplyBillConstant.ORG_KEY));
+        // 设置 管理部门
+        contractApplyCancelDyo.set(TransferApplyBillConstant.ADMINORORG_KEY, data.get(TransferApplyBillConstant.BB_PO_ADMINORGBO_KEY));
+        // 设置 员工组
+        contractApplyCancelDyo.set(TransferApplyBillConstant.ERMANPERORG_KEY, data.get(TransferApplyBillConstant.BB_A_EMPGROUP_KEY));
+        // 设置 档案类型
+        setContractCategory(contractApplyCancelDyo);
+        // 设置 解除原因
+        DynamicObject contractReasonDy = contractReasonHelper.generateEmptyDynamicObject();
+        contractReasonDy.set(TransferApplyBillConstant.ID_KEY, 1040L);
+        contractApplyCancelDyo.set(TransferApplyBillConstant.CANCELREASONTYPE_KEY, contractReasonDy);// 其他
+
+        // 设置 创建人
+        contractApplyCancelDyo.set(GECEventConstant.CREATOR_KEY, UserServiceHelper.getCurrentUserId());
+
+        return contractApplyCancelDyo;
+    }
+
+    // from: kd.hr.hlcm.business.domian.repository.ContractSignApplyRepository.getCancelContractByErManFile
+    public DynamicObject getCancelContractByErManFile(DynamicObject dataEntity) {
+        QFilter protocolTypeFilter = new QFilter(TransferApplyBillConstant.PROTOCOLTYPE_KEY, QCP.equals, "1");// 劳动合同
+        QFilter personFilter = new QFilter(TransferApplyBillConstant.EMPLOYEE_KEY, QCP.equals, dataEntity.getLong(String.format(Locale.ROOT, "%s_id", TransferApplyBillConstant.BB_EM_TID)));
+        QFilter posTypeFilter = new QFilter(TransferApplyBillConstant.POSTYPE, QCP.equals, dataEntity.getLong(String.format(Locale.ROOT, "%s_id", TransferApplyBillConstant.BB_PO_POSTYPE_KEY)));
+        QFilter contractStatusFilter = new QFilter(TransferApplyBillConstant.CONTRACTSTATUS_KEY, QCP.equals, "1");// 生效中
+        QFilter isCurFilter = new QFilter(TransferApplyBillConstant.IS_CURRENT_VERSION, QCP.equals, "1");
+        String selectProperties = QueryFieldBuilder.create().add(TransferApplyBillConstant.STARTDATE_KEY)
+                .add(TransferApplyBillConstant.PLANENDDATE_KEY)
+                .add(TransferApplyBillConstant.NUMBER_KEY)
+                .add(TransferApplyBillConstant.SUGGESTSIGNCOMPANY_KEY)
+                .add(TransferApplyBillConstant.ACTUALSIGNCOMPANY_KEY)
+                .add(TransferApplyBillConstant.CONTRACTSTATUS_KEY)
+                .add(TransferApplyBillConstant.NAME_KEY)
+                .add(TransferApplyBillConstant.CARDTYPE_KEY)
+                .add(TransferApplyBillConstant.CARDNUMBER_KEY)
+                .add(TransferApplyBillConstant.HOUSEHOLDREGISTER_KEY)
+                .add(TransferApplyBillConstant.RESIDENTIALADDRESS_KEY)
+                .add(TransferApplyBillConstant.EMPPHONE_KEY)
+                .add(TransferApplyBillConstant.ACTUALSIGNCOMPANYHIS_KEY)
+                .add(TransferApplyBillConstant.PERIODTYPE_KEY)
+                .add(TransferApplyBillConstant.PERIODUNIT_KEY)
+                .add(TransferApplyBillConstant.PERIOD_KEY)
+                .buildSelect();
+        // 这里要查所有属性出来,否则用到没查出来的字段会报异常
+        DynamicObject[] contractDy = contractSourceHelper.loadDynamicObjectArray(new QFilter[]{protocolTypeFilter, personFilter, contractStatusFilter, posTypeFilter, isCurFilter});
+
+        return getNewestContract(contractDy).orElse(null);
+    }
+
+    // from: kd.hr.hlcm.business.domian.repository.ContractSignApplyRepository.getNewestContract
+    private Optional<DynamicObject> getNewestContract(DynamicObject[] contracts) {
+        Comparator<DynamicObject> multipleComparator = buildNewestComparator();
+        return Stream.of(contracts).max(multipleComparator);
+    }
+
+    // from: kd.hr.hlcm.business.domian.repository.ContractSignApplyRepository.buildNewestComparator
+    private Comparator<DynamicObject> buildNewestComparator() {
+        Comparator<DynamicObject> contractStatusComparator = Comparator.comparing((dy) -> dy.getString(TransferApplyBillConstant.CONTRACTSTATUS_KEY));
+        Comparator<DynamicObject> comparingStartDate = Comparator.comparing((dy) -> dy.getDate(TransferApplyBillConstant.STARTDATE_KEY));
+        Comparator<DynamicObject> comparingId = Comparator.comparingLong((dy) -> dy.getLong(TransferApplyBillConstant.ID_KEY));
+        Comparator<DynamicObject> multipleComparing = contractStatusComparator.thenComparing(comparingStartDate).thenComparing(comparingId);
+        return multipleComparing;
+    }
+
+    // from: kd.hr.hlcm.business.domian.repository.ContractSignApplyRepository.getRenewCount
+    public static int getRenewCount(DynamicObject signBill) {
+        DynamicObject oldContract = signBill.getDynamicObject(TransferApplyBillConstant.OLDCONTRACT_KEY);
+        String businessType = signBill.getString(TransferApplyBillConstant.BUSINESSTYPE_KEY);
+        if (Objects.isNull(oldContract)) {
+            log.warn("renew select oldContract is null,curBusinessType|{}", businessType);
+            return 0;
+        } else {
+            DynamicObject preContract = contractHelper.queryOne(TransferApplyBillConstant.RENEWCOUNT_KEY, new QFilter[]{new QFilter(TransferApplyBillConstant.ID_KEY, QCP.equals, oldContract.getPkValue())});
+            int preRenewCount = preContract.getInt(TransferApplyBillConstant.RENEWCOUNT_KEY);
+            log.info("preRenewCount|{},curBusinessType|{}", preRenewCount, businessType);
+            return HRStringUtils.equals(businessType, BusinessTypeEnum.RENEW.getCombKey()) ? preRenewCount + 1 : preRenewCount;
+        }
+    }
+
+    // from: kd.hr.hlcm.business.domian.utils.ContractSignUtils.setContractCategory
+    public static void setContractCategory(DynamicObject signBill) {
+        if (HRStringUtils.equals(signBill.getString(TransferApplyBillConstant.PROTOCOLTYPE_KEY), "1")) {
+            DynamicObject posType = signBill.getDynamicObject(TransferApplyBillConstant.POSTYPE);
+            if (!HRObjectUtils.isEmpty(posType)) {
+                Object posTypeId = posType.getPkValue();
+                if (Objects.equals(posTypeId, PostypeEnum.FULL.getCombKey())) {
+                    signBill.set(TransferApplyBillConstant.CONTRACTCATEGORY_KEY, ContractCategoryEnum.MAIN.getCombKey());
+                } else if (Objects.equals(posTypeId, PostypeEnum.EXPATRIATE.getCombKey())) {
+                    signBill.set(TransferApplyBillConstant.CONTRACTCATEGORY_KEY, ContractCategoryEnum.OUTER.getCombKey());
+                } else {
+                    log.warn("posTypeId|{} is not 1010 or 1040", posTypeId);
+                }
+
+            }
+        }
+    }
+
+    // from: kd.hr.hlcm.business.infrastructure.client.hbpm.impl.HbpmServiceImpl.getJobHis(java.lang.Long)
+    public Long getJobHis(Long jobId) {
+        Map<Long, Long> jobHisMap = getJobHis(Lists.newArrayList(jobId), new Date());
+        return Optional.ofNullable(jobHisMap.get(jobId)).orElse(0L);
+    }
+
+    // from: kd.hr.hlcm.business.infrastructure.client.hbpm.impl.HbpmServiceImpl.getJobHis(java.util.List<java.lang.Long>)
+    public Map<Long, Long> getJobHis(List<Long> jobIds, Date date) {
+        filterEmpty(jobIds);
+        Map<Long, Long> currIdHisIdMap = new HashMap<>(jobIds.size());
+        if (jobIds.isEmpty())
+            return currIdHisIdMap;
+        try {
+            HrApiResponse jobHisMap = HRMServiceHelper.invokeHRMPService("hbjm", "IHBJMJobService", "queryJobHisInfoByBoIdToMap", new Object[] { jobIds, date });
+            log.info("IHBJMJobService queryJobHisInfoByBoIdToMap param response|{}", jobIds, jobHisMap);
+            if (HRObjectUtils.isEmpty(jobHisMap))
+                return currIdHisIdMap;
+            List<Map<String, Object>> dataMap = (List<Map<String, Object>>)jobHisMap.getData();
+            if (CollectionUtils.isEmpty(dataMap))
+                return currIdHisIdMap;
+            for (Map<String, Object> map : dataMap) {
+                Object vid = map.get(TransferApplyBillConstant.ID_KEY);
+                Object id = map.get(TransferApplyBillConstant.BOID_KEY);
+                if (vid != null && id != null)
+                    currIdHisIdMap.put((Long)id, Long.valueOf(vid.toString()));
+            }
+            log.info("getJobHis result|{}", currIdHisIdMap);
+        } catch (Exception ex) {
+            log.error("HbpmServiceImpl.getJobHis======jobBoid error..", ex);
+            throw new KDException(ex, BosErrorCode.systemError, new Object[0]);
+        }
+        return currIdHisIdMap;
+    }
+
+    private void filterEmpty(List<Long> ids) {
+        log.info("before filter ids|{}", ids);
+        ids.removeIf((id) -> id == null || id == 0L);
+        log.info("after filter ids|{}", ids);
+    }
+}

+ 39 - 13
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/psms/plugin/operate/file/PersonPosFileSaveOpPlugin.java

@@ -11,13 +11,12 @@ import kd.bos.logging.LogFactory;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.DispatchServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
 import kd.sdk.plugin.Plugin;
-import kd.sdk.swc.hcdm.business.helper.HCDMSalaryStdServiceHelper;
-import kd.sdk.swc.hcdm.common.dto.stdtab.match.StdTableDataMatchParam;
-import kd.sdk.swc.hcdm.common.dto.stdtab.match.StdTableDataMatchResult;
 import nckd.jxccl.base.common.constant.FormConstant;
 import nckd.jxccl.base.common.enums.psms.TypeStateEnum;
+import nckd.jxccl.base.common.utils.ConvertUtil;
 import nckd.jxccl.base.common.utils.QueryFieldBuilder;
 import nckd.jxccl.base.entity.helper.EntityHelper;
 import nckd.jxccl.base.swc.helper.AdjFileServiceHelper;
@@ -46,6 +45,7 @@ public class PersonPosFileSaveOpPlugin extends AbstractOperationServicePlugIn im
 
     @Override
     public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        logger.info("beginOperationTransaction start: processing {} data entities", e.getDataEntities().length);
 
         //职位津贴=职位系数 X 所在岗级岗位工资一档金额
         List<Long> allPersonIds = new ArrayList<>(e.getDataEntities().length);
@@ -68,17 +68,27 @@ public class PersonPosFileSaveOpPlugin extends AbstractOperationServicePlugIn im
                 }
             }
         }
+        
+        logger.info("Collected person IDs count: {}, job level IDs count: {}", allPersonIds.size(), jobLevelIds.size());
 
         //====================================== 获取当前人员所在定调的岗位标准工资一档金额 begin ======================================
         try {
             Long salaryItemId = EntityHelper.getIdByNumber(FormConstant.HSBS_STANDARDITEM, FormConstant.POS_STANDARD_ITEM_NUMBER);
+            logger.info("Retrieved salary item ID: {}", salaryItemId);
+            
             Map<Long, BigDecimal> amountMap = new HashMap<>(e.getDataEntities().length);
             if (!allPersonIds.isEmpty() && !jobLevelIds.isEmpty()) {
+                logger.info("Processing salary adjustment records for {} person IDs", allPersonIds.size());
+                
                 //获取人员最新岗位工资标准定薪记录
                 List<AdjFileServiceHelper.SalaryAdjustmentResult> salaryAdjustmentResultList = AdjFileServiceHelper.getLastDecAdjRecords(allPersonIds, FormConstant.POS_STANDARD_ITEM_NUMBER);
+                logger.info("Retrieved {} salary adjustment results", salaryAdjustmentResultList.size());
+                
                 if (!salaryAdjustmentResultList.isEmpty()) {
                     //薪酬标准ID
                     List<Long> salaryStIds = salaryAdjustmentResultList.stream().map(result -> result.salaryStDv.getLong(FormConstant.ID_KEY)).collect(Collectors.toList());
+                    logger.info("Retrieved salary standard IDs: {}", salaryStIds.size());
+                    
                     QFilter filter = new QFilter(FormConstant.ID_KEY, QCP.in, salaryStIds)
                             .and(String.join(".", "rankentry", "rank", FormConstant.NUMBER_KEY), QCP.equals, "01");
                     //获取标准表中01档的薪档
@@ -86,6 +96,8 @@ public class PersonPosFileSaveOpPlugin extends AbstractOperationServicePlugIn im
                             .add(FormConstant.ID_KEY)
                             .addIdNumberNameWithExtras(new String[]{"rankentry", "rank"}, FormConstant.INDEX_KEY);
                     DynamicObjectCollection salaryStandardColl = QueryServiceHelper.query("hcdm_salarystandard", salaryStandFieldBuilder.buildSelect(), new QFilter[]{filter});
+                    logger.info("Retrieved {} salary standard records", salaryStandardColl.size());
+                    
                     Map<Long, DynamicObject> salaryStandardMap = salaryStandardColl.stream()
                             .collect(Collectors.toMap(
                                     obj -> obj.getLong(FormConstant.ID_KEY),
@@ -93,29 +105,37 @@ public class PersonPosFileSaveOpPlugin extends AbstractOperationServicePlugIn im
                             ));
 
                     if (!salaryStandardMap.isEmpty()) {
-                        List<StdTableDataMatchParam> matchParams = new ArrayList<>();
+                        logger.info("Created salary standard map with {} entries", salaryStandardMap.size());
+                        List<Map<String,Object>> matchParams = new ArrayList<>();
                         for (AdjFileServiceHelper.SalaryAdjustmentResult result : salaryAdjustmentResultList) {
-                            StdTableDataMatchParam stdTableDataMatchParam = new StdTableDataMatchParam();
-                            stdTableDataMatchParam.setStdTableId(result.salaryStDv.getLong(FormConstant.ID_KEY));
-                            stdTableDataMatchParam.setStdItemId(salaryItemId);
-                            stdTableDataMatchParam.setGradeId(result.salaryGrade.getLong(FormConstant.ID_KEY));
+                            Map<String,Object> stdTableDataMatchParam = new HashMap<>();
+
+                            stdTableDataMatchParam.put("stdTableId",result.salaryStDv.getLong(FormConstant.ID_KEY));
+                            stdTableDataMatchParam.put("stdItemId",salaryItemId);
+                            stdTableDataMatchParam.put("gradeId",result.salaryGrade.getLong(FormConstant.ID_KEY));
                             DynamicObject dynamicObject = salaryStandardMap.get(result.salaryStDv.getLong(FormConstant.ID_KEY));
                             if (dynamicObject != null) {
                                 long rankId = dynamicObject.getLong(String.join(".", "rankentry", "rank", FormConstant.ID_KEY));
-                                stdTableDataMatchParam.setRankId(rankId);
+                                stdTableDataMatchParam.put("rankId",result.salaryGrade.getLong(FormConstant.ID_KEY));
                                 matchParams.add(stdTableDataMatchParam);
                             }
                         }
+                        logger.info("Created {} match parameters", matchParams.size());
+                        
                         if (!matchParams.isEmpty()) {
                             //获取薪酬项目、薪等、薪档对应金额(入参params的数组下标和出参的数组下标一一对应)
-                            List<StdTableDataMatchResult> stdTableDataMatchResults = HCDMSalaryStdServiceHelper.matchStdTableData(matchParams);
+//                            List<StdTableDataMatchResult> stdTableDataMatchResults = HCDMSalaryStdServiceHelper.matchStdTableData(matchParams);
+                            List<Map<String,Object>> stdTableDataMatchResults = DispatchServiceHelper.invokeService("nckd.jxccl.swc.hcdm.servicehelper", "hcdm", "ISwcHCDMService", "matchStdTableData", matchParams);
+                            logger.info("Retrieved {} standard table match results", stdTableDataMatchResults.size());
+                            
                             for (int i = 0; i < salaryAdjustmentResultList.size(); i++) {
                                 AdjFileServiceHelper.SalaryAdjustmentResult result = salaryAdjustmentResultList.get(i);
                                 if (i < stdTableDataMatchResults.size() && stdTableDataMatchResults.get(i) != null) {
                                     //当前薪等01档的金额
-                                    amountMap.put(result.employee.getLong(FormConstant.ID_KEY), stdTableDataMatchResults.get(i).getAmount());
+                                    amountMap.put(result.employee.getLong(FormConstant.ID_KEY), ConvertUtil.toBigDecimal(stdTableDataMatchResults.get(i).get("amount")));
                                 }
                             }
+                            logger.info("Populated amount map with {} entries", amountMap.size());
                         }
                     } else {
                         logger.warn("未获取薪酬标准表中01档的薪档数据,薪酬标准ID:{}", salaryStIds);
@@ -127,6 +147,7 @@ public class PersonPosFileSaveOpPlugin extends AbstractOperationServicePlugIn im
             //====================================== 获取当前人员所在定调的岗位标准工资一档金额 end ======================================
             Map<Long, DynamicObject> jobLevelMap = new HashMap<>(e.getDataEntities().length);
             if (!jobLevelIds.isEmpty()) {
+                logger.info("Loading job level information for {} IDs", jobLevelIds.size());
                 MainEntityType jobLevelEntityType = EntityMetadataCache.getDataEntityType(FormConstant.HBJM_JOBLEVELHR);
                 //重新加载职级信息,避免获取不到系数
                 DynamicObject[] load = BusinessDataServiceHelper.load(jobLevelIds.toArray(new Long[0]), jobLevelEntityType);
@@ -135,8 +156,10 @@ public class PersonPosFileSaveOpPlugin extends AbstractOperationServicePlugIn im
                                 obj -> obj.getLong(FormConstant.ID_KEY),
                                 obj -> obj
                         ));
+                logger.info("Loaded {} job level records", jobLevelMap.size());
             }
 
+            logger.info("Processing {} data entities for coefficient and salary calculation", e.getDataEntities().length);
             for (DynamicObject dataEntity : e.getDataEntities()) {
                 long jobLevelId = dataEntity.getLong(String.join(".", PositionStructureConstant.NCKD_JOBLEVELHR, FormConstant.ID_KEY));
                 DynamicObject jobLevel = jobLevelMap.get(jobLevelId);
@@ -151,14 +174,17 @@ public class PersonPosFileSaveOpPlugin extends AbstractOperationServicePlugIn im
                             dataEntity.set(PositionStructureConstant.NCKD_COEFFICIENT, coefficient);
                             dataEntity.set(PositionStructureConstant.NCKD_CURRENTPOSTSALARY, amount);
                             dataEntity.set(PositionStructureConstant.NCKD_POSTALLOWANCE, coefficient.multiply(amount));
+                            logger.info("Updated person ID: {}, coefficient: {}, current post salary: {}, post allowance: {}", 
+                                personId, coefficient, amount, coefficient.multiply(amount));
                         }
                     } else {
-                        logger.warn("未获取到员工【{}】最新岗位工资标准定薪记录01档的薪等金额,人员ID:", person.getString(FormConstant.NAME_KEY));
+                        logger.warn("未获取到员工【{}】最新岗位工资标准定薪记录01档的薪等金额,人员ID:{}", person.getString(FormConstant.NAME_KEY), personId);
                     }
                 }
             }
+            logger.info("beginOperationTransaction completed successfully");
         }catch (Exception e1){
-            logger.error("获取人员岗位工资标准定薪记录01档的薪等金额异常",e1);
+            logger.error("获取人员岗位工资标准定薪记录01档的薪等金额异常", e1);
         }
     }
 

+ 13 - 6
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/hr/service/impl/PositionBillServiceHelper.java

@@ -180,7 +180,7 @@ public class PositionBillServiceHelper {
         Long userId = RequestContext.get().getCurrUserId();
         String permItemId = PermissionStatus.View;// 查询权限
         String appId = iFormView.getFormShowParameter().getCheckRightAppId();
-        AuthorizedOrgResult permResult = HRMServiceHelper.invokeHRMPService("hrcs", "IHRCSBizDataPermissionService", "getUserAdminOrgsF7", new Object[]{userId, appId, PositionBillConstant.NCKD_POSITIONBILL_ENTITY, permItemId, PositionBillConstant.NCKD_ADMINORGBOID_KEY, Maps.newHashMapWithExpectedSize(0)});
+        AuthorizedOrgResult permResult = HRMServiceHelper.invokeHRMPService(PositionBillConstant.HRCS_APP, "IHRCSBizDataPermissionService", "getUserAdminOrgsF7", new Object[]{userId, appId, PositionBillConstant.NCKD_POSITIONBILL_ENTITY, permItemId, PositionBillConstant.NCKD_ADMINORGBOID_KEY, Maps.newHashMapWithExpectedSize(0)});
         return permResult;
     }
 
@@ -301,14 +301,21 @@ public class PositionBillServiceHelper {
         // 删除HR岗位暂存的数据
         HRBaseServiceHelper.create(PositionBillConstant.HBPM_POSITIONHR).deleteByFilter(new QFilter[]{new QFilter(PositionBillConstant.BOID_KEY, QCP.in, positionIdList)});
 
+        delAddMasterForBos(positionIdList);
+    }
+
+    /**
+     * 删除BOS岗位新设暂存数据
+     * @param positionIdList
+     */
+    public static void delAddMasterForBos(List<Long> positionIdList) {
+        QFilter[] qFilters = {new QFilter(PositionBillConstant.ID_KEY, QCP.in, positionIdList)};
         if (TX.getPropagation() != Propagation.NOT_SUPPORTED) {
-            try (TXHandle txHandle = TX.requiresNew()) {
-                // 删除BOS岗位暂存的数据
-                HRBaseServiceHelper.create(PositionBillConstant.BOS_POSITION_ENTITY).deleteByFilter(new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.in, positionIdList)});
+            try (TXHandle tx = TX.requiresNew()) {
+                HRBaseServiceHelper.create(PositionBillConstant.BOS_POSITION_ENTITY).deleteByFilter(qFilters);
             }
         } else {
-            // 删除BOS岗位暂存的数据
-            HRBaseServiceHelper.create(PositionBillConstant.BOS_POSITION_ENTITY).deleteByFilter(new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.in, positionIdList)});
+            HRBaseServiceHelper.create(PositionBillConstant.BOS_POSITION_ENTITY).deleteByFilter(qFilters);
         }
     }
 

+ 1 - 10
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/operate/hr/PosBillEntryNewPositionTempSaveOpPlugin.java

@@ -4,8 +4,6 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
-import kd.bos.db.tx.TX;
-import kd.bos.db.tx.TXHandle;
 import kd.bos.entity.constant.StatusEnum;
 import kd.bos.entity.operate.OperateOptionConst;
 import kd.bos.entity.operate.result.IOperateInfo;
@@ -153,7 +151,7 @@ public class PosBillEntryNewPositionTempSaveOpPlugin extends AbstractOperationSe
 
         // 不论成功与否,都调用岗位删除,BOS岗位不需要暂存数据
         List<Long> positionIds = positionList.stream().map(positionDy -> positionDy.getLong(PositionBillConstant.ID_KEY)).collect(Collectors.toList());
-        delAddMasterForBos(positionIds);
+        PositionBillServiceHelper.delAddMasterForBos(positionIds);
 
         if (!errorMsgList.isEmpty()) {
             throw new KDBizException(String.join(System.lineSeparator(), errorMsgList));
@@ -177,11 +175,4 @@ public class PosBillEntryNewPositionTempSaveOpPlugin extends AbstractOperationSe
         SaveServiceHelper.save(positionDys);
     }
 
-    private void delAddMasterForBos(List<Long> positionIdList) {
-        try (TXHandle txHandle = TX.requiresNew()) {
-            // 删除BOS岗位暂存的数据
-            HRBaseServiceHelper.create(PositionBillConstant.BOS_POSITION_ENTITY).deleteByFilter(new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.in, positionIdList)});
-        }
-    }
-
 }

+ 98 - 89
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/print/EmployeePrintPlugin.java

@@ -13,6 +13,8 @@ import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.print.core.data.DataRowSet;
 import kd.bos.print.core.data.datasource.CustomDataSource;
+import kd.bos.print.core.data.datasource.MainDataSource;
+import kd.bos.print.core.data.datasource.PrtDataSource;
 import kd.bos.print.core.data.field.CollectionField;
 import kd.bos.print.core.data.field.Field;
 import kd.bos.print.core.data.field.IntegerField;
@@ -46,6 +48,9 @@ import java.util.Map;
 */
 public class EmployeePrintPlugin extends AbstractPrintPlugin implements Plugin {
 
+    //记录主数据源
+    private MainDataSource mainDataSource;
+
     @Override
     public void loadCustomData(CustomDataLoadEvent evt) {
         Date printYear = HRAppCache.get("nckd_pm").get("printYear", Date.class);
@@ -104,109 +109,113 @@ public class EmployeePrintPlugin extends AbstractPrintPlugin implements Plugin {
 
     @Override
     public void afterLoadData(AfterLoadDataEvent evt) {
-        String dsName = evt.getDataSource().getDsName();
-        if(!dsName.contains("custom")) {
-            Date printYear = HRAppCache.get("nckd_pm").get("printYear", Date.class);
-            Map<Integer, Long> selectPrintPersonIdMap = HRAppCache.get("nckd_pm").get("employeePrintIdMap", Map.class);
-            if(selectPrintPersonIdMap == null){
-                throw new ValidationException("请选择要打印的日期!");
-            }
-            List<String> seqs = ConvertUtil.toList(selectPrintPersonIdMap.keySet(), ArrayList::new);
-            LocalDate now = LocalDate.now();
-            // 获取5年前的年份
-            int fiveYearsAgo = LocalDate.now().minusYears(5).getYear();
-            Date beginDate = DateUtil.toDate(LocalDate.of(fiveYearsAgo, 1, 1));
-
-            int currentYear = LocalDate.now().getYear() - 1; // 不包含今年
-            Date endDate = DateUtil.toDate(LocalDate.of(currentYear, 1, 1));
-
-            Map<String, String> positionMap = new HashMap<>();
-            Map<String, Integer> perfRankMgmtMap = new HashMap<>();
-            try (AlgoContext context = Algo.newContext()) {
-                Collection<Long> personIds = selectPrintPersonIdMap.values();
-                DataSet positionDateSet = getPositions(fiveYearsAgo, currentYear, personIds);
-                if (positionDateSet != null) {
-                    while (positionDateSet.hasNext()) {
-                        Row next = positionDateSet.next();
-                        Long personId = next.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
-                        int tempIndex = 1;
-                        for (int year = fiveYearsAgo; year <= currentYear; year++) {
-                            String positionName = next.getString("position_" + tempIndex);
-                            positionMap.put(personId + "nckd_position_" + tempIndex, positionName);
-                            tempIndex++;
-                        }
+        PrtDataSource dataSource = evt.getDataSource();
+        if(!(dataSource instanceof MainDataSource)){
+            return;//非主数据源,立即返回
+        }
+        //记录主数据源,用于自定义数据源查询时,获取需要的信息
+        mainDataSource = (MainDataSource) dataSource;
+        Date printYear = HRAppCache.get("nckd_pm").get("printYear", Date.class);
+        Map<Integer, Long> selectPrintPersonIdMap = HRAppCache.get("nckd_pm").get("employeePrintIdMap", Map.class);
+        if(selectPrintPersonIdMap == null){
+            throw new ValidationException("请选择要打印的日期!");
+        }
+        List<String> seqs = ConvertUtil.toList(selectPrintPersonIdMap.keySet(), ArrayList::new);
+        LocalDate now = LocalDate.now();
+        // 获取5年前的年份
+        int fiveYearsAgo = LocalDate.now().minusYears(5).getYear();
+        Date beginDate = DateUtil.toDate(LocalDate.of(fiveYearsAgo, 1, 1));
+
+        int currentYear = LocalDate.now().getYear() - 1; // 不包含今年
+        Date endDate = DateUtil.toDate(LocalDate.of(currentYear, 1, 1));
+
+        Map<String, String> positionMap = new HashMap<>();
+        Map<String, Integer> perfRankMgmtMap = new HashMap<>();
+        try (AlgoContext context = Algo.newContext()) {
+            Collection<Long> personIds = selectPrintPersonIdMap.values();
+            DataSet positionDateSet = getPositions(fiveYearsAgo, currentYear, personIds);
+            if (positionDateSet != null) {
+                while (positionDateSet.hasNext()) {
+                    Row next = positionDateSet.next();
+                    Long personId = next.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
+                    int tempIndex = 1;
+                    for (int year = fiveYearsAgo; year <= currentYear; year++) {
+                        String positionName = next.getString("position_" + tempIndex);
+                        positionMap.put(personId + "nckd_position_" + tempIndex, positionName);
+                        tempIndex++;
                     }
                 }
+            }
 
-                DataSet perfRankMgmtDataSet = getPerfRankMgmt(personIds, fiveYearsAgo, currentYear);
-                if (perfRankMgmtDataSet != null) {
-                    while (perfRankMgmtDataSet.hasNext()) {
-                        Row next = perfRankMgmtDataSet.next();
-                        Long personId = next.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY));
-                        int tempIndex = 1;
-                        for (int year = fiveYearsAgo; year <= currentYear; year++) {
-                            Integer topran = next.getInteger("perfrank_topran_" + tempIndex);
-                            Integer topranks = next.getInteger("perfrank_topranks_" + tempIndex);
-                            perfRankMgmtMap.put(personId + "nckd_perfrank_topran_" + tempIndex, topran);
-                            perfRankMgmtMap.put(personId + "nckd_perfrank_topranks_" + tempIndex, topranks);
-                            tempIndex++;
-                        }
+            DataSet perfRankMgmtDataSet = getPerfRankMgmt(personIds, fiveYearsAgo, currentYear);
+            if (perfRankMgmtDataSet != null) {
+                while (perfRankMgmtDataSet.hasNext()) {
+                    Row next = perfRankMgmtDataSet.next();
+                    Long personId = next.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY));
+                    int tempIndex = 1;
+                    for (int year = fiveYearsAgo; year <= currentYear; year++) {
+                        Integer topran = next.getInteger("perfrank_topran_" + tempIndex);
+                        Integer topranks = next.getInteger("perfrank_topranks_" + tempIndex);
+                        perfRankMgmtMap.put(personId + "nckd_perfrank_topran_" + tempIndex, topran);
+                        perfRankMgmtMap.put(personId + "nckd_perfrank_topranks_" + tempIndex, topranks);
+                        tempIndex++;
                     }
                 }
             }
+        }
 
 
-            // 获取当前打印的数据集并准备过滤后的集合
-            // 2. 获取当前打印的数据集
-            List<DataRowSet> dataRowSets = evt.getDataRowSets();
-            List<DataRowSet> filteredDataRowSets = new ArrayList<>();
-
-            for (DataRowSet dataRowSet : dataRowSets) {
-                if (dataRowSet.containerKey("reportEntry")) {
-                    CollectionField entryField = (CollectionField) dataRowSet.getField("reportEntry");
-                    List<DataRowSet> entryRows = entryField.getValue();
-                    List<DataRowSet> filteredEntryRows = new ArrayList<>();
-                    for (DataRowSet entryRow : entryRows) {
-                        String seq = ConvertUtil.toStr(entryRow.getField(FormConstant.SEQ_KEY).getValue());
-                        Long personId = selectPrintPersonIdMap.get(seq + "");
-                        // 判断该分录行是否在用户勾选的列表中
-                        if (seqs.contains(seq)) {
-                            for (String fieldKey : entryRow.getFieldKeys()) {
-                                if (fieldKey.startsWith("nckd_position_")) {
-                                    String positionName = positionMap.get(personId + fieldKey);
-                                    Field field = entryRow.getField(fieldKey);
-                                    field.setValue(positionName != null ? positionName : "");
-                                    entryRow.put(fieldKey, field);
-                                }
-                                if (fieldKey.startsWith("nckd_perfrank_topran_")) {
-                                    Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
-                                    Field field = entryRow.getField(fieldKey);
-                                    field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
-                                    entryRow.put(fieldKey, field);
-                                }
-                                if (fieldKey.startsWith("nckd_perfrank_topranks_")) {
-                                    Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
-                                    Field field = entryRow.getField(fieldKey);
-                                    field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
-                                    entryRow.put(fieldKey, field);
-                                }
+        // 获取当前打印的数据集并准备过滤后的集合
+        // 2. 获取当前打印的数据集
+        List<DataRowSet> dataRowSets = evt.getDataRowSets();
+        List<DataRowSet> filteredDataRowSets = new ArrayList<>();
+
+        for (DataRowSet dataRowSet : dataRowSets) {
+            if (dataRowSet.containerKey("reportEntry")) {
+                CollectionField entryField = (CollectionField) dataRowSet.getField("reportEntry");
+                List<DataRowSet> entryRows = entryField.getValue();
+                List<DataRowSet> filteredEntryRows = new ArrayList<>();
+                for (DataRowSet entryRow : entryRows) {
+                    String seq = ConvertUtil.toStr(entryRow.getField(FormConstant.SEQ_KEY).getValue());
+                    Long personId = selectPrintPersonIdMap.get(seq + "");
+                    // 判断该分录行是否在用户勾选的列表中
+                    if (seqs.contains(seq)) {
+                        for (String fieldKey : entryRow.getFieldKeys()) {
+                            if (fieldKey.startsWith("nckd_position_")) {
+                                String positionName = positionMap.get(personId + fieldKey);
+                                Field field = entryRow.getField(fieldKey);
+                                field.setValue(positionName != null ? positionName : "");
+                                entryRow.put(fieldKey, field);
+                            }
+                            if (fieldKey.startsWith("nckd_perfrank_topran_")) {
+                                Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
+                                Field field = entryRow.getField(fieldKey);
+                                field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
+                                entryRow.put(fieldKey, field);
+                            }
+                            if (fieldKey.startsWith("nckd_perfrank_topranks_")) {
+                                Integer perfRankMgmt = perfRankMgmtMap.get(personId + fieldKey);
+                                Field field = entryRow.getField(fieldKey);
+                                field.setValue(perfRankMgmt != null ? perfRankMgmt : 0);
+                                entryRow.put(fieldKey, field);
                             }
-                            filteredEntryRows.add(entryRow);
                         }
-
-                    }
-                    // 用过滤后的分录数据替换原数据
-                    if (!filteredEntryRows.isEmpty()) {
-                        DataRowSet newDataRowSet = dataRowSet.deepCopy(); // 深拷贝,避免影响原数据
-                        newDataRowSet.put("reportEntry", new CollectionField(filteredEntryRows));
-                        filteredDataRowSets.add(newDataRowSet);
+                        filteredEntryRows.add(entryRow);
                     }
+
+                }
+                // 用过滤后的分录数据替换原数据
+                if (!filteredEntryRows.isEmpty()) {
+                    DataRowSet newDataRowSet = dataRowSet.deepCopy(); // 深拷贝,避免影响原数据
+                    newDataRowSet.put("reportEntry", new CollectionField(filteredEntryRows));
+                    filteredDataRowSets.add(newDataRowSet);
                 }
             }
-
-            // 将过滤后的数据集设置回事件,实现只打印勾选行
-            evt.setDataRowSets(filteredDataRowSets);
         }
+
+        // 将过滤后的数据集设置回事件,实现只打印勾选行
+        evt.setDataRowSets(filteredDataRowSets);
+
     }
 
 

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

@@ -29,10 +29,6 @@ import kd.bos.servicehelper.user.UserServiceHelper;
 import kd.hr.hbp.common.model.OrgSubInfo;
 import kd.sdk.hr.hbp.business.helper.permission.HRPermissionServiceHelper;
 import kd.sdk.plugin.Plugin;
-import kd.sdk.swc.hcdm.business.helper.HCDMAdjFileServiceHelper;
-import kd.sdk.swc.hcdm.business.helper.HCDMSalaryStdServiceHelper;
-import kd.sdk.swc.hcdm.common.dto.stdtab.match.StdTableDataMatchParam;
-import kd.sdk.swc.hcdm.common.dto.stdtab.match.StdTableDataMatchResult;
 import nckd.jxccl.base.common.constant.FormConstant;
 import nckd.jxccl.base.common.enums.AppraisalResultEnum;
 import nckd.jxccl.base.common.exception.ValidationException;
@@ -254,7 +250,7 @@ public class SalaryAdjOpPlugin extends AbstractOperationServicePlugIn implements
                     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);
+                    Map<String, Object> lastDecAdjRecordMap = DispatchServiceHelper.invokeService("nckd.jxccl.swc.hcdm.servicehelper", "hcdm", "ISwcHCDMService", "getLastDecAdjRecords", adjRecordParams);
                     if (ConvertUtil.toBoolean(lastDecAdjRecordMap.get("success"))) {
                         List<Map> datas = ConvertUtil.toList(lastDecAdjRecordMap.get("data"), ArrayList::new);
                         for (Map data : datas) {
@@ -365,17 +361,17 @@ public class SalaryAdjOpPlugin extends AbstractOperationServicePlugIn implements
                             }
                             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(salaryItemId);
-                            stdTableDataMatchParam.setGradeId(result.oldSalaryGrade.getLong(FormConstant.ID_KEY));
-                            stdTableDataMatchParam.setRankId(newSalaryRank.getLong(FormConstant.ID_KEY));
+                            List<Map<String,Object>> matchParams = new ArrayList<>();
+                            Map<String,Object> stdTableDataMatchParam = new HashMap<>();
+                            stdTableDataMatchParam.put("stdTableId", result.salaryStDv.getLong(FormConstant.ID_KEY));
+                            stdTableDataMatchParam.put("stdItemId", salaryItemId);
+                            stdTableDataMatchParam.put("gradeId", result.oldSalaryGrade.getLong(FormConstant.ID_KEY));
+                            stdTableDataMatchParam.put("rankId", newSalaryRank.getLong(FormConstant.ID_KEY));
                             matchParams.add(stdTableDataMatchParam);
                             //获取薪酬项目、薪等、薪档对应金额
-                            List<StdTableDataMatchResult> stdTableDataMatchResults = HCDMSalaryStdServiceHelper.matchStdTableData(matchParams);
+                            List<Map<String,Object>> stdTableDataMatchResults = DispatchServiceHelper.invokeService("nckd.jxccl.swc.hcdm.servicehelper", "hcdm", "ISwcHCDMService", "matchStdTableData", matchParams);
                             if (!stdTableDataMatchResults.isEmpty()) {
-                                result.amount = stdTableDataMatchResults.get(0).getAmount();
+                                result.amount = ConvertUtil.toBigDecimal(stdTableDataMatchResults.get(0).get("amount"));
                             }
                             msgJoiner.add(StrFormatter.format("【{}】{}", result.personName, result.reason));
                         }

+ 148 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/common/SwcAdjFileServiceHelper.java

@@ -0,0 +1,148 @@
+package nckd.jxccl.swc.hcdm.common;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.validate.BillStatus;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.servicehelper.DispatchServiceHelper;
+import nckd.jxccl.base.common.constant.FormConstant;
+import nckd.jxccl.base.common.utils.ConvertUtil;
+import nckd.jxccl.base.entity.helper.EntityHelper;
+import nckd.jxccl.base.hrpi.helper.EmpPosOrgRelHelper;
+
+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.stream.Collectors;
+
+/**
+ * 定调薪帮助类
+ *
+ * @author W.Y.C
+ * @version 1.0
+ * @date 2025/12/21 16:02
+ */
+public class SwcAdjFileServiceHelper {
+
+    protected final static Log logger = LogFactory.getLog(SwcAdjFileServiceHelper.class);
+
+    /**
+     * 获取员工某个薪酬项目最新定调薪记录
+     * @param personIds 人员id
+     * @param standardItemNumber 定调薪项目编码
+     * @return: java.util.List<nckd.jxccl.base.swc.helper.AdjFileServiceHelper.SalaryAdjustmentResult>
+     * @author W.Y.C
+     * @date: 2025/12/21 16:06
+     */
+    public static List<SalaryAdjustmentResult> getLastDecAdjRecords(List<Long> personIds,String standardItemNumber) {
+        Long salaryItemId = EntityHelper.getIdByNumber(FormConstant.HSBS_STANDARDITEM, standardItemNumber);
+        //获取员工最新任职
+        Map<Long, DynamicObject> empPosOrgRelByEmployeesMap = EmpPosOrgRelHelper.queryEmpPosOrgRelByEmployeesMap(personIds);
+        List<Long> allEmpPosOrgRelIds = empPosOrgRelByEmployeesMap.values().stream()
+                .map(result -> result.getLong(FormConstant.ID_KEY))
+                .collect(Collectors.toList());
+
+        List<SalaryAdjustmentResult> salaryAdjustmentResultList = new ArrayList<>();
+
+        DynamicObject standardItem = EntityHelper.newEntity(FormConstant.HSBS_STANDARDITEM);
+        standardItem.set(FormConstant.ID_KEY, salaryItemId);
+        Map<String, Object> adjFileParams = new HashMap<>();
+        adjFileParams.put("employees", personIds);
+        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", salaryItemId);
+                // 查询基准日期
+                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,hcdmorg.id,");
+            //查询定调薪记录
+            //hcdm_decadjrecor
+            Map<String, Object> lastDecAdjRecordMap = kd.sdk.swc.hcdm.business.helper.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 = new SalaryAdjustmentResult();
+                            //薪酬管理组织
+                            DynamicObject hcdmOrg = dynamicObject.getDynamicObject("hcdmorg");
+                            //薪酬标准表版本
+                            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.employee = employee;
+                            salaryAdjustmentResult.hcdmOrg = hcdmOrg;
+                            salaryAdjustmentResult.adjFileInfo = dynamicObject.getDynamicObject("adjfile");
+                            salaryAdjustmentResult.salaryStDv = salaryStDv;
+                            salaryAdjustmentResult.standardItem = standardItem;
+                            salaryAdjustmentResult.salaryGrade = salaryGrade;
+                            salaryAdjustmentResult.salaryRank = salaryRank;
+                            salaryAdjustmentResult.amount = amount;
+                            salaryAdjustmentResultList.add(salaryAdjustmentResult);
+                        }
+                    }
+                }
+            } else {
+                logger.error("查询定调薪记录失败");
+            }
+        } else {
+            logger.error("获取人员定薪档案失败");
+        }
+        return salaryAdjustmentResultList;
+    }
+
+
+    public static class SalaryAdjustmentResult {
+        /** 人员ID*/
+        public DynamicObject employee;
+        public DynamicObject hcdmOrg;
+        /**定调薪档案*/
+        public DynamicObject adjFileInfo;
+        /**薪酬标准表*/
+        public DynamicObject salaryStDv;
+        /** 定调薪项目 */
+        public DynamicObject standardItem;
+        /** 薪等(01岗、02岗)*/
+        public DynamicObject salaryGrade;
+        /** 薪档(1档、2档)*/
+        public DynamicObject salaryRank;
+        //金额
+        public BigDecimal amount;
+    }
+}

+ 41 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/mservice/SwcHCDMService.java

@@ -0,0 +1,41 @@
+package nckd.jxccl.swc.hcdm.mservice;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import kd.sdk.swc.hcdm.business.helper.HCDMAdjFileServiceHelper;
+import kd.sdk.swc.hcdm.business.helper.HCDMSalaryStdServiceHelper;
+import kd.sdk.swc.hcdm.common.dto.stdtab.match.StdTableDataMatchParam;
+import kd.sdk.swc.hcdm.common.dto.stdtab.match.StdTableDataMatchResult;
+import nckd.jxccl.swc.hcdm.mservice.api.ISwcHCDMService;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 定调薪档案服务
+ * @author W.Y.C
+ * @date 2026/1/7 21:37
+ * @version 1.0
+ */
+public class SwcHCDMService implements ISwcHCDMService {
+    @Override
+    public Map<String, Object> getLastDecAdjRecords(Map<String, Object> param) {
+        return HCDMAdjFileServiceHelper.getLastDecAdjRecords(param);
+    }
+
+    @Override
+    public List<Map<String,Object>> matchStdTableData(List<Map<String,Object>> params) {
+        List<StdTableDataMatchParam> stdTableDataMatchParams = params.stream()
+                .map(m -> JSON.toJavaObject((JSONObject) JSON.toJSON(m), StdTableDataMatchParam.class))
+                .collect(Collectors.toList());
+        List<StdTableDataMatchResult> stdTableDataMatchResults = HCDMSalaryStdServiceHelper.matchStdTableData(stdTableDataMatchParams);
+        List<Map<String,Object>> result = new ArrayList<>();
+        return stdTableDataMatchResults.stream()
+                .filter(Objects::nonNull)
+                .map(r -> (Map<String, Object>) JSON.toJSON(r)) // 返回 JSONObject,兼容 Map
+                .collect(Collectors.toList());
+    }
+}

+ 31 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/mservice/api/ISwcHCDMService.java

@@ -0,0 +1,31 @@
+package nckd.jxccl.swc.hcdm.mservice.api;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* 定调薪档案服务
+* @author W.Y.C
+* @date 2026/1/7 21:37
+* @version 1.0
+*/
+public interface ISwcHCDMService {
+
+    /**
+     * 获取上一次定调薪信息
+     * @param param
+     * @return: java.util.Map<java.lang.String, java.lang.Object>
+     * @author W.Y.C
+     * @date: 2026/01/07 21:35
+     */
+    Map<String, Object> getLastDecAdjRecords(Map<String, Object> param);
+
+    /**
+     * 标准表数据匹配::根据标准表、项目、薪等、薪档获取金额、薪点数等信息
+      * @param params
+     * @return: java.util.List<kd.sdk.swc.hcdm.common.dto.stdtab.match.StdTableDataMatchResult>
+     * @author W.Y.C
+     * @date: 2026/01/07 22:12
+     */
+    List<Map<String,Object>> matchStdTableData(List<Map<String,Object>> params);
+}

+ 35 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/servicehelper/ServiceFactory.java

@@ -0,0 +1,35 @@
+package nckd.jxccl.swc.hcdm.servicehelper;
+
+import kd.bos.dataentity.TypesContainer;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+* 薪酬微服务工厂类
+* @author W.Y.C
+* @date 2026/1/7 21:37
+* @version 1.0
+*/
+public class ServiceFactory {
+
+    private static final Map<String, String> SERVICE_MAP = new HashMap<String, String>() {
+        {
+            this.put("ISwcHCDMService", "nckd.jxccl.swc.hcdm.mservice.SwcHCDMService");
+        }
+    };
+
+    public static <T> T getService(Class<T> clazz) {
+        return (T)getService(clazz.getSimpleName());
+    }
+
+    public static Object getService(String serviceName) {
+        String className = (String)SERVICE_MAP.get(serviceName);
+        if (className == null) {
+            throw new RuntimeException(String.format(Locale.ROOT, "%s service not find", serviceName));
+        } else {
+            return TypesContainer.getOrRegisterSingletonInstance(className);
+        }
+    }
+}

+ 4 - 4
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hscs/business/custfetch/PosSalaryGrade1.java

@@ -17,7 +17,7 @@ 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.entity.helper.EntityHelper;
-import nckd.jxccl.base.swc.helper.AdjFileServiceHelper;
+import nckd.jxccl.swc.hcdm.common.SwcAdjFileServiceHelper;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -76,7 +76,7 @@ public class PosSalaryGrade1 implements ICustomFetchDataService {
             if(!employeeToCalPersonMap.isEmpty()) {
                 //获取人员最新岗位工资标准定薪记录
                 List<Long> allPersonIds = ConvertUtil.toList(employeeToCalPersonMap.values());
-                List<AdjFileServiceHelper.SalaryAdjustmentResult> salaryAdjustmentResultList = AdjFileServiceHelper.getLastDecAdjRecords(allPersonIds, FormConstant.POS_STANDARD_ITEM_NUMBER);
+                List<SwcAdjFileServiceHelper.SalaryAdjustmentResult> salaryAdjustmentResultList = SwcAdjFileServiceHelper.getLastDecAdjRecords(allPersonIds, FormConstant.POS_STANDARD_ITEM_NUMBER);
                 if (!salaryAdjustmentResultList.isEmpty()) {
                     //薪酬标准ID
                     List<Long> salaryStIds = salaryAdjustmentResultList.stream().map(result -> result.salaryStDv.getLong(FormConstant.ID_KEY)).collect(Collectors.toList());
@@ -95,7 +95,7 @@ public class PosSalaryGrade1 implements ICustomFetchDataService {
 
                     if (!salaryStandardMap.isEmpty()) {
                         List<StdTableDataMatchParam> matchParams = new ArrayList<>();
-                        for (AdjFileServiceHelper.SalaryAdjustmentResult result : salaryAdjustmentResultList) {
+                        for (SwcAdjFileServiceHelper.SalaryAdjustmentResult result : salaryAdjustmentResultList) {
                             StdTableDataMatchParam stdTableDataMatchParam = new StdTableDataMatchParam();
                             stdTableDataMatchParam.setStdTableId(result.salaryStDv.getLong(FormConstant.ID_KEY));
                             stdTableDataMatchParam.setStdItemId(salaryItemId);
@@ -111,7 +111,7 @@ public class PosSalaryGrade1 implements ICustomFetchDataService {
                             //获取薪酬项目、薪等、薪档对应金额(入参params的数组下标和出参的数组下标一一对应)
                             List<StdTableDataMatchResult> stdTableDataMatchResults = HCDMSalaryStdServiceHelper.matchStdTableData(matchParams);
                             for (int i = 0; i < salaryAdjustmentResultList.size(); i++) {
-                                AdjFileServiceHelper.SalaryAdjustmentResult result = salaryAdjustmentResultList.get(i);
+                                SwcAdjFileServiceHelper.SalaryAdjustmentResult result = salaryAdjustmentResultList.get(i);
                                 if (i < stdTableDataMatchResults.size() && stdTableDataMatchResults.get(i) != null) {
                                     //当前薪等01档的金额
                                     amountMap.put(result.employee.getLong(FormConstant.ID_KEY), stdTableDataMatchResults.get(i).getAmount());