Explorar o código

feat(swc): 员工待定调薪清单生成功能优化

- 新增调薪与定薪类型区分逻辑,支持入职单和调动单
- 重构定调薪申请单生成流程,完善字段填充规则
- 增加标准表、薪等、薪档自动匹配功能
- 补充单据名称自动生成规则,提升用户体验
- 修复数据同步与校验相关问题,增强系统稳定性
- 优化代码结构,提取公共方法至SWCHelper工具类
- 更新表单插件逻辑,确保界面展示正确性
turborao hai 1 semana
pai
achega
a12f16ce93

+ 25 - 0
code/base/nckd-jxccl-base-helper/src/main/java/nckd/jxccl/base/swc/helper/SWCHelper.java

@@ -11,6 +11,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
 import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -153,6 +154,30 @@ public class SWCHelper {
         return personuserrel == null ? 0L : personuserrel.getLong("employee_id");
     }
 
+    /**
+     * 获取 定调薪类型
+     */
+    public static  DynamicObjectCollection getSalaryTypeDyns() {
+
+        ArrayList<String> salaryTypeList = new ArrayList<>();
+        salaryTypeList.add("tiaozhengtiaoxin");  //岗位调整调薪
+        salaryTypeList.add("100009");  //入职定薪新
+        QFilter qFilter11 = new QFilter("number", QCP.in, salaryTypeList);
+        DynamicObjectCollection salaryTypeDyns = QueryServiceHelper.query("hsbs_salaryadjustrsn","id,number,name",new QFilter[]{qFilter11},"number");
+        return salaryTypeDyns;
+    }
+
+    /**
+     * 定调薪人员属性配置
+     * @param SalaryPersonPropertyName
+     * @return
+     */
+    public static DynamicObject getSalaryPersonProperty(String SalaryPersonPropertyName) {
+        QFilter qFilter = new QFilter("name", QCP.equals, SalaryPersonPropertyName);
+        DynamicObject salaryPersonPropertDyn = QueryServiceHelper.queryOne("hcdm_contrastpropconf","id,number,name",new QFilter[]{qFilter});
+        return salaryPersonPropertDyn;
+    }
+
     /**
      * 判断集合是否为空
      * @param list

+ 4 - 5
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/business/SynPendingSalaryAdjDataServiceImpl.java

@@ -14,6 +14,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 import kd.bos.servicehelper.parameter.SystemParamServiceHelper;
+import nckd.jxccl.base.swc.helper.SWCHelper;
 
 import java.time.LocalDate;
 import java.util.ArrayList;
@@ -25,6 +26,8 @@ import java.util.stream.Collectors;
 /**
  * 员工待定调薪清单
  * 同步入职与调动单数据
+ * hom_personhasonbrd  入职单
+ * hdm_transferapply   调动申请
  * @author turborao
  * @date 2025/11/28
  */
@@ -80,11 +83,7 @@ public class SynPendingSalaryAdjDataServiceImpl implements SynPendingSalaryAdjDa
         /**
          * 获取 定调薪类型
          */
-        ArrayList<String> salaryTypeList = new ArrayList<>();
-        salaryTypeList.add("tiaozhengtiaoxin");  //岗位调整调薪
-        salaryTypeList.add("100009");  //入职定薪新
-        QFilter qFilter11 = new QFilter("number", QCP.in, salaryTypeList);
-        salaryTypeDyns = QueryServiceHelper.query("hsbs_salaryadjustrsn","id,number,name",new QFilter[]{qFilter11},"number");
+        salaryTypeDyns = SWCHelper.getSalaryTypeDyns();
 
         /**
          * 获取入职时的薪档

+ 12 - 12
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/form/EmpSalaryQueryMobFormPlugin.java

@@ -49,17 +49,6 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
         super.initialize();
         //if(!this.getModel().isDataLoaded()){
 
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(new Date());
-        calendar.add(Calendar.MONTH, -1);
-        calendar.set(Calendar.DAY_OF_MONTH, 1);
-        calendar.set(Calendar.HOUR_OF_DAY, 0);
-        calendar.set(Calendar.MINUTE, 0);
-        calendar.set(Calendar.SECOND, 0);
-        calendar.set(Calendar.MILLISECOND, 0);
-        Date lastMonthDate = calendar.getTime();
-        KEY_STARTDATE = lastMonthDate;
-
         this.registerDataGridListener();
         //}
     }
@@ -89,7 +78,16 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
     public void createNewData(BizDataEventArgs e) {
         super.createNewData(e);
         // 设置最大日期为上个月
-
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        calendar.add(Calendar.MONTH, -1);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        Date lastMonthDate = calendar.getTime();
+        KEY_STARTDATE = lastMonthDate;
 
     }
 
@@ -133,6 +131,7 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
             KEY_STARTDATE = (Date)this.getModel().getValue(KEY_CTL_STARTDATE);
             KEY_ENDDATE = (Date)this.getModel().getValue(KEY_CTL_ENDDATE);
             showData();
+            //this.registerDataGridListener();
             this.getView().updateView("nckd_mobtable");
         }
         if (fieldKey.equals("nckd_type")){
@@ -140,6 +139,7 @@ public class EmpSalaryQueryMobFormPlugin extends AbstractMobFormPlugin implement
 
             KEY_TYPE = (String)this.getModel().getValue("nckd_type");
             showData();
+            //this.registerDataGridListener();
             this.getView().updateView("nckd_mobtable");
 
         }

+ 1 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/form/PendingSalaryAdjListPlugin.java

@@ -109,6 +109,7 @@ public class PendingSalaryAdjListPlugin extends AbstractListPlugin implements Pl
                     billShowParameter.setStatus(OperationStatus.EDIT);
                     this.getView().showForm(billShowParameter);
                 }
+                this.getView().updateView();
                 break;
             case "flag_adj":
                 break;

+ 241 - 22
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/operate/BuildApplyBillOpPlugin.java

@@ -1,8 +1,7 @@
 package nckd.jxccl.swc.init.plugin.operate;
 
-import kd.bos.context.RequestContext;
 import kd.bos.dataentity.entity.DynamicObject;
-
+import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.AddValidatorsEventArgs;
 import kd.bos.entity.plugin.PreparePropertysEventArgs;
@@ -12,15 +11,24 @@ import kd.bos.logging.LogFactory;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
 import kd.sdk.plugin.Plugin;
+import kd.sdk.swc.hcdm.business.helper.HCDMAdjFileServiceHelper;
 import kd.sdk.swc.hcdm.business.helper.HCDMApplyBillServiceHelper;
+import kd.sdk.swc.hcdm.business.helper.HCDMSalaryStdServiceHelper;
+import kd.sdk.swc.hcdm.common.dto.stdtab.match.StdTableGradeRankRangeMatchParam;
+import kd.sdk.swc.hcdm.common.dto.stdtab.match.StdTableGradeRankRangeMatchResult;
+import nckd.jxccl.base.common.utils.ConvertUtil;
+import nckd.jxccl.base.common.utils.DateUtil;
+import nckd.jxccl.base.swc.helper.SWCHelper;
 
-import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
 /**
  * hcdm_applybill 生成定调薪申请单,单据操作插件
+ * hom_personhasonbrd  入职单
+ * hdm_transferapply   调动申请
  * author: turborao
  * date: 2025/11/24 9:05
  */
@@ -33,6 +41,42 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
     private static final String EmployeesField = "nckd_employeefield.id";
     private static final String EmployeesNameField = "nckd_employeefield.name";
     private static final String BillTypeField = "nckd_billtype";
+    private static final String OrgField = "nckd_hrorg.id";
+
+    /**
+     * 定调薪申请单  定调薪明细字段显示方案   员工调薪
+     */
+    private static final Long changeSalaryBillTypeId = 2215975998602655744L;
+    /**
+     * 定调薪申请单  定调薪明细字段显示方案   员工定薪
+     */
+    private static final Long setSalaryBillEntryTypeId = 2215982957338868736L;
+    /**
+     * 定调薪项目   岗位工资标准
+     */
+    private static final Long salaryStdItemId = 2321899710350111744L;
+    /**
+     * 频度  月
+     */
+    private static final Long frequencyItemId = 1095454108284088320L;
+    /**
+     * 汇率表
+     */
+    private static final Long exchangeTableId = 2321965096026258432L;
+    /**
+     * 国家
+     */
+    private static final Long countryItemId = 1000001L;
+    /**
+     * 定调薪方案
+     */
+    private static final Long salaryAdjScmItemId = 2322515162646457344L;
+    /**
+     * 默认币种
+     */
+    private static final Long currencyItemId = 1L;
+
+
 
     /**
      * this.getDataEntities()中需要加载的字段,增加员工待定调薪清单中员工ID
@@ -46,7 +90,9 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
         e.getFieldKeys().add("nckd_newposition.id");
         e.getFieldKeys().add("nckd_newsalaryrank.id");
         e.getFieldKeys().add("nckd_newhradminorg.id");
-        e.getFieldKeys().add("nckd_hrorg.id");
+        e.getFieldKeys().add(OrgField);
+        e.getFieldKeys().add("nckd_applybillid");
+        e.getFieldKeys().add("billstatus");
 
     }
 
@@ -71,20 +117,20 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
          * 必填字段
          * "billname", "billtype", "org", "billcountry", "salaryadjrsn", "salaryadjscm", "billcurrency", "effectivedate", "exchangeratedate", "exctable"
          */
-        applyBill.put("billname","员工待定调薪清单-生成");
+        applyBill.put("billname",generateBillName(datas));
 
-        Long orgId = RequestContext.get().getOrgId();
+        DynamicObjectCollection salaryTypeDyns = SWCHelper.getSalaryTypeDyns();
 
         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("org",orgId);
+        //applyBill.put("billtype", 2215975998602655744L);   //定调薪明细字段显示方案   调薪明细字段
+        applyBill.put("billcountry", countryItemId);                //国家
+        //applyBill.put("salaryadjrsn", 2352340656979984384L);  //定调薪类型
+        applyBill.put("billcurrency", currencyItemId);           //默认币种
+        applyBill.put("salaryadjscm", salaryAdjScmItemId);   //定调薪方案
         applyBill.put("exchangeratedate", new Date());   //汇率日期
-        applyBill.put("exctable", 2321965096026258432L);  //汇率表
+        applyBill.put("exctable", exchangeTableId);  //汇率表
         applyBill.put("effectivedate", new Date());   //默认生效日期
         applyBill.put("isdraft", "1"); //草稿状态
         applyBill.put("auditstatus", "A"); //审核状态
@@ -94,20 +140,43 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
 
         /**
          * 必填字段
-         * "adjfile", "standarditem", "frequency", "amount"
+         * "adjfile", "standarditem", "frequency"
          */
         for (DynamicObject data : datas) {
             Map<String,Object> applyBillEntry = new HashMap<>();
             Long employeeId = data.getLong(EmployeesField);
+            // 组织
+            applyBill.put("org",data.getLong(OrgField));
+            String billType = data.getString(BillTypeField);
+            //定调薪明细字段显示方案   调薪明细字段
+            if(billType.equals("调动单")){
+                //定调薪明细字段显示方案
+                applyBill.put("billtype", changeSalaryBillTypeId);
+                //定调薪类型
+                applyBill.put("salaryadjrsn", salaryTypeDyns.get(1).getLong("id"));
+            }else if(billType.equals("入职单")){
+                applyBill.put("billtype", setSalaryBillEntryTypeId);
+                applyBill.put("salaryadjrsn", salaryTypeDyns.get(0).getLong("id"));
+            }
             Long positionId = data.getLong("nckd_newposition.id");
-            DynamicObject salaryfile  = getSalaryFileInfo(employeeId,positionId);
-            applyBillEntry.put("adjfile", salaryfile.getLong("boid"));
+            DynamicObject salaryfile  = getSalaryFileInfo(employeeId,positionId,salaryStdItemId);
+            applyBillEntry.put("adjfile", salaryfile.getLong("id"));
             applyBillEntry.put("employee", employeeId);
-            applyBillEntry.put("standarditem", 2321899710350111744L);    //定调薪项目   岗位工资标准
-            applyBillEntry.put("frequency", 1095454108284088320L);       //频度  月
+            applyBillEntry.put("standarditem", salaryStdItemId);    //定调薪项目   岗位工资标准
+            applyBillEntry.put("frequency", frequencyItemId);       //频度  月
             //applyBillEntry.put("amount", BigDecimal.ZERO);
-            applyBillEntry.put("nckd_postgrade", salaryfile.getLong("position.nckd_postgrade.id"));  //岗级
-            applyBillEntry.put("position", positionId);
+            Long postgradeId = salaryfile.getLong("position.nckd_postgrade.id");
+            applyBillEntry.put("nckd_postgrade", postgradeId);  //岗级
+            applyBillEntry.put("position", positionId);    //岗位
+            /**
+             * 获取标准表
+             */
+            Long salaryStandardId = getSalarystandard(salaryfile.getLong("stdscm.id"),salaryStdItemId);
+            /**
+             * 获取薪等
+             */
+            Long salaryGradeId = getSalaryGradeID(postgradeId,salaryStandardId);
+            applyBillEntry.put("salarygrade", salaryGradeId);
             applyBillEntry.put("salaryrank", data.getLong("nckd_newsalaryrank.id"));
             applyBillEntryData.add(applyBillEntry);
         }
@@ -118,6 +187,7 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
         Map<String, String> params = new HashMap<>();
         Map<String, Object> result = HCDMApplyBillServiceHelper.saveDraftApplyBill(papams);
         System.out.println("BuildApplyBillOpPlugin:"+result.toString());
+        logger.info("BuildApplyBillOpPlugin:"+result.toString());
         // 判断整体操作是否成功
         Boolean overallSuccess = (Boolean) result.get("success");
         String errorCode = (String) result.get("errorCode");
@@ -133,6 +203,13 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
                 Long idValue = ((Number) dataMap.get("id")).longValue();
                 System.out.println("提取的ID值为: " + idValue); // 输出 2360318043084569600
                 logger.info("员工待定调薪清单 操作成功," + idValue);
+
+                for(DynamicObject data : datas) {
+                    data.set("nckd_applybillid", idValue);
+                    data.set("billstatus", "D");  //处理中
+                }
+                Object[] update = SaveServiceHelper.save(datas);
+
                 params.put("applyID",idValue.toString());
                 //区别:绿色提示语显示时间较短。红色一直存在。
                 this.operationResult.setSuccess(true);
@@ -150,20 +227,69 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
             this.operationResult.setShowMessage(true);
             System.out.println("操作失败或返回错误码不为success");
         }
+        //OperationResult updatepersonOp = OperationServiceHelper.executeOperate("updatepersoninfo_and_match", "", new DynamicObject[]{change}, OperateOption.create());
 
+    }
 
+    /**
+     * 获取薪等,通过 岗级和标准表ID
+     * @param postgradeId
+     * @param salarystandardId
+     * @return
+     */
+    public Long getSalaryGradeID(Long postgradeId,Long salarystandardId){
 
-        //OperationResult updatepersonOp = OperationServiceHelper.executeOperate("updatepersoninfo_and_match", "", new DynamicObject[]{change}, OperateOption.create());
+        List<StdTableGradeRankRangeMatchParam> matchParams = new ArrayList<>();
+        StdTableGradeRankRangeMatchParam stdTableGradeRankMatchParam = new StdTableGradeRankRangeMatchParam();
+        /*
+         * 标准表   hcdm_salarystandard
+         */
+        //DynamicObject salarystandardTable = getLastDecAdjRecords(employeeId,salaryStdItemId);
+        stdTableGradeRankMatchParam.setStdTableId(salarystandardId);
+        /*
+         * 定调薪项目  hsbs_standarditem
+         */
+        stdTableGradeRankMatchParam.setStdItemId(salaryStdItemId);
+        /**
+         * 匹配类型 为0 时
+         * 定调薪人员属性 key 为  定调薪人员属性配置(hcdm_contrastpropconf)的ID
+         * Object为 定调薪人员属性配置(hcdm_contrastpropconf)的属性值  岗级的值
+         */
+        DynamicObject postgradeprop = SWCHelper.getSalaryPersonProperty("岗级");
+        Map<Long, List<Object>> personProp = new HashMap<>();
+        List<Object> postgradeList = new ArrayList<>();
+        postgradeList.add(postgradeId);
+        personProp.put(postgradeprop.getLong("id"), postgradeList);
+        stdTableGradeRankMatchParam.setPersonPropValue(personProp);
+        /**
+         * 匹配类型   0 对照属性匹配  1 标准数据匹配
+         */
+        stdTableGradeRankMatchParam.setMatchType("0");
+
+        matchParams.add(stdTableGradeRankMatchParam);
+        //获取标准表中的薪酬项目、薪等、薪档
+        List<StdTableGradeRankRangeMatchResult> stdTableGradeRankRangeMatchResults = HCDMSalaryStdServiceHelper.matchStdTableGradeRankRange(matchParams);
+        logger.info("获取标准表中的薪酬项目、薪等、薪档:{}",stdTableGradeRankRangeMatchResults.toString());
+        if (!stdTableGradeRankRangeMatchResults.isEmpty()) {
+            for(StdTableGradeRankRangeMatchResult result : stdTableGradeRankRangeMatchResults){
+               return result.getGradeId();
+            }
+        }
 
+        return 0L;
     }
 
+
+
     /**
      * 获取员工定调薪档案  hcdm_adjfileinfo
      * 员工定调薪档案 会有多条,需要按岗位获取
+     * stdscm.entryentity.salarystandard.id  标准表 ID
      * @param employeeID  员工ID
      * @param positionID  岗位ID
+     * @param salaryStdItemId  定调薪项目ID
      */
-    public DynamicObject getSalaryFileInfo(Long employeeID, Long positionID){
+    public DynamicObject getSalaryFileInfo(Long employeeID, Long positionID, Long salaryStdItemId){
 
         QFilter qFilter = new QFilter("employee.id", QCP.equals, employeeID);
         QFilter qFilter1 = new QFilter("iscurrentversion", QCP.equals, "1"); // 启用
@@ -175,6 +301,99 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
         return employeesFiles;
     }
 
+
+    /**
+     * 获取员工最新的定调薪记录,如果没有,为了拿到标准表数据
+     * @param adjFileId
+     * @param standardItemId
+     */
+    public DynamicObject getLastDecAdjRecords(Long adjFileId,Long standardItemId ){
+
+        //构建定调薪记录查询条件
+        Map<String, Object> adjRecordParams = new HashMap<>();
+        List<Map<String, Object>> dataList = new ArrayList<>();
+
+        Map<String, Object> dataItem = new HashMap<>();
+        // 调薪档案ID
+        dataItem.put("adjfile", adjFileId);
+        // 调薪项目ID
+        dataItem.put("standarditem", standardItemId);
+        // 查询基准日期
+        dataItem.put("startdate", new Date());
+        // 唯一标识
+        String uniquecode = UUID.randomUUID().toString().replace("-", "");
+        dataItem.put("_uniquecode", uniquecode);
+        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);
+        logger.info("员工最新的定调薪记录 查询结果:{}", lastDecAdjRecordMap.toString());
+        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");
+
+                        //薪酬标准表版本
+                        DynamicObject salaryStDv = dynamicObject.getDynamicObject("salarystdv");
+                        //薪等(01岗、02岗)
+                        //DynamicObject salaryGrade = dynamicObject.getDynamicObject("salarygrade");
+                        //薪档(1档、2档)
+                        //DynamicObject salaryRank = dynamicObject.getDynamicObject("salaryrank");
+                        //金额
+                        //BigDecimal amount = dynamicObject.getBigDecimal("amount");
+                        //定调薪档案对象
+                        //DynamicObject adjFileInfo = dynamicObject.getDynamicObject("adjfile");
+                        return salaryStDv;
+                    }
+                }
+            }
+        } else {
+            logger.error("查询员工最新的定调薪记录失败");
+            this.operationResult.setSuccess(false);
+            this.operationResult.setMessage("查询员工最新的定调薪记录失败");
+        }
+        return null;
+    }
+
+    /**
+     * 获取标准表,通过薪酬体系,定调薪项目
+     * @param stdscmId   薪酬体系
+     * @param salaryStdItemId   定调薪项目
+     */
+    public Long getSalarystandard( Long stdscmId, Long salaryStdItemId) {
+        String entryentity = "hcdm_stdscm";
+        String selectField = "id,entryentity.salarystandard.id";
+        QFilter qFilter1 = new QFilter("id", QCP.equals, stdscmId);
+        QFilter qFilter2 = new QFilter("entryentity.standarditem.id", QCP.equals, salaryStdItemId);
+        DynamicObject salarystandardDyn = QueryServiceHelper.queryOne(entryentity, selectField, new QFilter[]{qFilter1,qFilter2});
+        return salarystandardDyn.getLong("entryentity.salarystandard.id");
+    }
+
+    /**
+     * 生成单据名称
+     * @param datas   DynamicObject[]
+     */
+    public String  generateBillName(DynamicObject[] datas) {
+        StringBuilder billname = new StringBuilder();
+        int index = 0;
+        for(DynamicObject data : datas){
+            billname.append(data.getString(EmployeesNameField)).append(",");
+            index++;
+            if(index == 2) break;
+        }
+        String billnameStr = billname.substring(0, billname.length()-1);
+
+        String billnameMonth = DateUtil.format(DateUtil.now(), "yyyyMM");
+        String re = "【"+billnameStr+"】"+billnameMonth+"-员工待定调薪清单-生成";
+        return re;
+    }
+
     /**
      * 获取员工待定调薪清单中员工ID
      * @param datas   DynamicObject[]

+ 5 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/operate/SalaryAdjDelivaryDateValidator.java

@@ -36,6 +36,11 @@ public class SalaryAdjDelivaryDateValidator extends AbstractValidator {
         for(ExtendedDataEntity obj :dataEntities) {
             DynamicObject bill = obj.getDataEntity();//获取当前单据的数据包
             String employeeName = bill.getString("nckd_employeefield.name");
+
+            String billstatus = bill.getString("billstatus");
+            if(!billstatus.equals("A")){
+                this.addErrorMessage(obj,"员工:" + employeeName + ",单据状态不是待处理状态,请重新选择!");
+            }
             if(StringUtils.isNotEmpty(billType) && !billType.equals(bill.getString("nckd_billtype"))){
                 this.addErrorMessage(obj,"员工:" + employeeName + ",定调薪类型不一致,请重新选择!");
             }