Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

wyc 1 tydzień temu
rodzic
commit
f4291b5777
20 zmienionych plików z 487 dodań i 98 usunięć
  1. 47 4
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/business/annualincome/AnnualIncomeCalculateService.java
  2. 57 36
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/business/importtaskguide/ImportTaskGuideImportService.java
  3. 23 13
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/business/importtaskguide/utils/ImportTaskUtils.java
  4. 3 1
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/common/constant/SitConstant.java
  5. 1 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/SinsurTempDataListPlugin.java
  6. 1 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/basedata/SinsurImpTaskListPlugin.java
  7. 2 1
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/basedata/TaskGuideImportFormPlugin.java
  8. 2 4
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/enums/SinsurPresetItemEnum.java
  9. 1 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/guide/TaskImpGuideListPlugin.java
  10. 0 2
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/helper/SinsurTemplateHelper.java
  11. 4 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/constants/SwcConstant.java
  12. 25 4
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/business/annualincome/AnnualIncomeService.java
  13. 54 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/agencybill/AgencyBatchUpdateFormPlugin.java
  14. 40 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/agencybill/AgencyBillEdit.java
  15. 99 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/agencybill/AgencyBillList.java
  16. 5 1
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/annualincome/SalAnnualIncomeBillEdit.java
  17. 68 0
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/annualincome/SalAnnualIncomeBillList.java
  18. 4 2
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/business/SynPendingSalaryAdjDataServiceImpl.java
  19. 48 27
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/operate/BuildApplyBillOpPlugin.java
  20. 3 3
      code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/operate/SalaryAdjDelivaryDateValidator.java

+ 47 - 4
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/business/annualincome/AnnualIncomeCalculateService.java

@@ -11,6 +11,7 @@ import kd.bos.servicehelper.operation.SaveServiceHelper;
 import nckd.jxccl.sit.hcsi.common.constant.SitConstant;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -54,7 +55,31 @@ public class AnnualIncomeCalculateService {
         // 取业务数据提报中的数据
         Map<Long, Map<Long, String>> bizData = getBizData(bizItemMap);
         // 处理页面数据
-        return dealData(fileMap, employeeIds, incomeBillData, bizItemMap, bizData);
+        int successCount = dealData(fileMap, employeeIds, incomeBillData, bizItemMap, bizData);
+        // 更新年收入统计单状态
+        updateSalIncomeBillStatus(incomeBillData.keySet());
+
+        return successCount;
+    }
+
+    /**
+     * 更新年收入统计单状态
+     * @param employeeIds
+     */
+    private void updateSalIncomeBillStatus(Set<Long> employeeIds) {
+        QFilter filter = new QFilter("nckd_entryentity.nckd_employee.id", QCP.in, employeeIds);
+        filter.and("nckd_calyear", QCP.equals, year);
+        filter.and("nckd_entryentity.nckd_pushstatus", QCP.equals, "0");
+        DynamicObject[] billDyns = SitConstant.SALINCOMEBILL_HELPER.load(SitConstant.SALINCOMEBILL_SELECTFIELDS, new QFilter[]{filter});
+        for(DynamicObject bill : billDyns) {
+            DynamicObjectCollection entryCols = bill.getDynamicObjectCollection("nckd_entryentity");
+            for (DynamicObject entry : entryCols) {
+                if(employeeIds.contains(entry.getLong("nckd_employee.id"))) {
+                    entry.set("nckd_pushstatus", "1");
+                }
+            }
+        }
+        SitConstant.SALINCOMEBILL_HELPER.update(billDyns);
     }
 
     /**
@@ -83,12 +108,15 @@ public class AnnualIncomeCalculateService {
 
             BigDecimal amount1 = BigDecimal.ZERO;
             BigDecimal amount2 = BigDecimal.ZERO;
+            BigDecimal month1 = BigDecimal.ZERO;
+            BigDecimal month2 = BigDecimal.ZERO;
 
             Map incomeBillMap = incomeBillData.get(employeeId);
             if(!ObjectUtils.isEmpty(incomeBillMap)) {
                 dyn.set("nckd_sysmonth", incomeBillMap.get("totalMonth"));
                 dyn.set("nckd_sysyearamount", incomeBillMap.get("totalAmount"));
                 amount1 = (BigDecimal) incomeBillMap.get("totalAmount");
+                month1 = BigDecimal.valueOf((int) incomeBillMap.get("totalMonth"));
             }
             Map<Long, String> bizDataMap = bizData.get(employeeId);
             if(!ObjectUtils.isEmpty(bizDataMap)) {
@@ -98,6 +126,7 @@ public class AnnualIncomeCalculateService {
                         case "nckd_outmonth":
                             int month = Integer.parseInt(bizDataMap.get(bizItemId));
                             dyn.set(matchKey, month);
+                            month2 = new BigDecimal(month);
                             break;
                         case "nckd_outyearamount":
                             BigDecimal amount = new BigDecimal(bizDataMap.get(bizItemId));
@@ -107,8 +136,9 @@ public class AnnualIncomeCalculateService {
                     }
                 }
             }
-            // 申报年度社保缴费基数
-            dyn.set("nckd_totalamount", amount1.add(amount2));
+            // 申报年度社保缴费基数 = (江铜内年度收入 + 江铜外年度收入) / (江铜内发放月数 + 外单位发放月数)
+            BigDecimal totalAmount = calculateTotalAmount(amount1, amount2, month1, month2);
+            dyn.set("nckd_totalamount", totalAmount);
             billCols.add(dyn);
         }
         // 保存数据
@@ -118,6 +148,18 @@ public class AnnualIncomeCalculateService {
     }
 
 
+    public BigDecimal calculateTotalAmount (BigDecimal amount1,BigDecimal amount2, BigDecimal month1, BigDecimal month2) {
+        // 分子
+        BigDecimal numerator = amount1.add(amount2);
+        // 分母
+        BigDecimal denominator = month1.add(month2);
+        if (denominator.compareTo(BigDecimal.ZERO) == 0) {
+            // 分母为零,无法进行除法运算,返回0
+            return BigDecimal.ZERO;
+        }
+        return numerator.divide(denominator, 0, RoundingMode.HALF_UP);
+    }
+
     /**
      * 获取计薪人员ID
      * @return
@@ -143,13 +185,14 @@ public class AnnualIncomeCalculateService {
 
     /**
      * 获取薪酬模块-年收入统计中的数据
-     *
+     * 只取 推送状态 = 社保未拉取 的数据
      * @param employeeIds
      * @return
      */
     public Map<Long, Map> getSalIncomeBillData(Set<Long> employeeIds) {
         QFilter filter = new QFilter("nckd_entryentity.nckd_employee.id", QCP.in, employeeIds);
         filter.and("nckd_calyear", QCP.equals, year);
+        filter.and("nckd_entryentity.nckd_pushstatus", QCP.equals, "0");
         DynamicObjectCollection cols = SitConstant.SALINCOMEBILL_HELPER.queryOriginalCollection(SitConstant.SALINCOMEBILL_SELECTFIELDS, new QFilter[]{filter});
 
         //按照人员汇总

+ 57 - 36
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/business/importtaskguide/ImportTaskGuideImportService.java

@@ -43,17 +43,19 @@ public class ImportTaskGuideImportService {
     private Long sinsurTplId;
     private Long welfarepayerId;
     private Long periodId;
+    private String periodNumber;
     private String url;
     private static final long DATE_TYPE_ID = 1050L;
     private static final long NUMBER_TYPE_ID = 1010L;
     private static final long DECIMAL_TYPE_ID = 1020L;
     private static final String DATE_FORMAT = "yyyy-MM-dd";
 
-    public ImportTaskGuideImportService(String url, Long importTaskId, Long sinsurTplId, Long periodId, Long welfarepayerId) {
+    public ImportTaskGuideImportService(String url, Long importTaskId, Long sinsurTplId, Long periodId, String periodNumber, Long welfarepayerId) {
         this.url = url;
         this.importTaskId = importTaskId;
         this.sinsurTplId = sinsurTplId;
         this.periodId = periodId;
+        this.periodNumber = periodNumber;
         this.welfarepayerId = welfarepayerId;
     }
 
@@ -114,6 +116,7 @@ public class ImportTaskGuideImportService {
         if (!this.isCancel(cacheKey)) {
             boolean hasWorkStartDate = tplFixItemMap.containsKey(11);
             Map<Integer, List<Map<String, String>>> columnIndexMap = this.getColumnIndexMap();
+            Map<Integer, List<Map<String, String>>> commonColumnIndexMap = this.getCommonColumnIndexMap();
             int defaultSize = 500;
             List<List<Map<Integer, String>>> splitDataList = SWCListUtils.split(dataRowList, defaultSize);
             int lineIndex = 0;
@@ -123,7 +126,7 @@ public class ImportTaskGuideImportService {
             for(int size = splitDataList.size(); index < size; ++index) {
                 tempList = (List)splitDataList.get(index);
                 lineIndex = index * defaultSize;
-                this.checkImportData(tempList, errDataList, columnIndexMap, lineIndex, cacheKey, writeTaskType, orgId, hasWorkStartDate, false);
+                this.checkImportData(tempList, errDataList, commonColumnIndexMap, columnIndexMap, lineIndex, cacheKey, writeTaskType, orgId, hasWorkStartDate, false);
             }
 
             if (!this.isCancel(cacheKey)) {
@@ -145,7 +148,7 @@ public class ImportTaskGuideImportService {
     }
 
     // TODO 校验导入数据
-    private void checkImportData(List<Map<Integer, String>> dataRowList, List<Map<String, String>> allErrDataList, Map<Integer, List<Map<String, String>>> columnIndexMap, int lineIndex, String cacheKey, String writeTaskType, Long orgId, boolean hasWorkStartDate, boolean isMulTimeOnePeriod) {
+    private void checkImportData(List<Map<Integer, String>> dataRowList, List<Map<String, String>> allErrDataList, Map<Integer, List<Map<String, String>>> commonColumnIndexMap, Map<Integer, List<Map<String, String>>> columnIndexMap, int lineIndex, String cacheKey, String writeTaskType, Long orgId, boolean hasWorkStartDate, boolean isMulTimeOnePeriod) {
         Map<Integer, Map<Integer, Object>> passDataRowMap = new HashMap(16);
         int lineIndexVer = lineIndex;
         List<Map<String, String>> errDataList = new ArrayList(10);
@@ -158,7 +161,7 @@ public class ImportTaskGuideImportService {
             while(it.hasNext()) {
                 Map<Integer, Object> passRowMap = new HashMap(16);
                 Map<Integer, String> rowMap = (Map)it.next();
-                isSuccess = this.checkFieldRequriedForCommon(rowMap, errDataList, lineIndex, passRowMap);
+                isSuccess = this.checkFieldRequriedForCommon(commonColumnIndexMap, rowMap, errDataList, lineIndex, passRowMap);
                 if(!isSuccess) {
                     ++lineIndex;
                 } else if (!this.checkItemValue(columnIndexMap, passRowMap, errDataList, lineIndex, rowMap)) {
@@ -172,7 +175,7 @@ public class ImportTaskGuideImportService {
             }
 
             if (!this.isCancel(cacheKey)) {
-                this.saveData(passDataRowMap, columnIndexMap);
+                this.saveData(passDataRowMap, commonColumnIndexMap, columnIndexMap);
                 successCount = passDataRowMap.size();
                 failCount = dataRowList.size() - successCount;
                 return;
@@ -191,7 +194,7 @@ public class ImportTaskGuideImportService {
         }
     }
 
-    private void saveData(Map<Integer, Map<Integer, Object>> passDataRowMap, Map<Integer, List<Map<String, String>>> columnIndexMap) {
+    private void saveData(Map<Integer, Map<Integer, Object>> passDataRowMap, Map<Integer, List<Map<String, String>>> commonColumnIndexMap, Map<Integer, List<Map<String, String>>> columnIndexMap) {
         if (passDataRowMap != null && passDataRowMap.size() != 0) {
             DynamicObjectCollection result = new DynamicObjectCollection();
             MainEntityType type = EntityMetadataCache.getDataEntityType("nckd_sinsurtempdata");
@@ -204,7 +207,7 @@ public class ImportTaskGuideImportService {
                 temporary = (DynamicObject)type.createInstance();
                 rowMap = (Map)entry.getValue();
                 temporary.set("nckd_datastatus", "0");
-                ImportTaskUtils.setTemporaryValueForCommon(temporary, rowMap);
+                ImportTaskUtils.setTemporaryValueForCommon(commonColumnIndexMap, temporary, rowMap, periodNumber);
                 temporary.set("nckd_importtask", this.importTaskId);
                 temporary.set("creator", RequestContext.get().getCurrUserId());
                 temporary.set("createtime", new Date());
@@ -283,35 +286,23 @@ public class ImportTaskGuideImportService {
     }
 
 
-    private boolean checkFieldRequriedForCommon(Map<Integer, String> rowMap, List<Map<String, String>> errDataList, int lineIndex, Map<Integer, Object> passRowMap) {
+    private boolean checkFieldRequriedForCommon(Map<Integer, List<Map<String, String>>> commonColumnIndexMap, Map<Integer, String> rowMap, List<Map<String, String>> errDataList, int lineIndex, Map<Integer, Object> passRowMap) {
         String msg = ResManager.loadKDString("请填写“{0}”。", "ImportTaskGuideImportService_2", "swc-hsas-business", new Object[0]);
-        if (SWCStringUtils.isEmpty((String)rowMap.get(0))) {
-            errDataList.add(this.assembleErrMap(lineIndex, false, MessageFormat.format(msg, SinsurPresetItemEnum.CALPERIOD.getItemName())));
-            return false;
-        } else {
-            passRowMap.put(0, rowMap.get(0));
-            if (SWCStringUtils.isEmpty((String)rowMap.get(1))) {
-                errDataList.add(this.assembleErrMap(lineIndex, false, MessageFormat.format(msg, SinsurPresetItemEnum.EMP_IDCARD.getItemName())));
+
+        for (Map.Entry<Integer, List<Map<String, String>>> columnEntry : commonColumnIndexMap.entrySet()) {
+            Integer columnIndex = columnEntry.getKey();
+            String itemValue = rowMap.get(columnIndex);
+
+            if (SWCStringUtils.isEmpty(itemValue)) {
+                errDataList.add(this.assembleErrMap(lineIndex, false, MessageFormat.format(msg, columnEntry.getValue().get(0).get("name"))));
                 return false;
-            } else {
-                passRowMap.put(1, rowMap.get(1));
-                if (SWCStringUtils.isEmpty((String)rowMap.get(2))) {
-                    errDataList.add(this.assembleErrMap(lineIndex, false, MessageFormat.format(msg, SinsurPresetItemEnum.EMP_NAME.getItemName())));
-                    return false;
-                } else {
-                    passRowMap.put(2, rowMap.get(2));
-                    passRowMap.put(3, rowMap.get(3));
-                    return true;
-//                    if (SWCStringUtils.isEmpty((String)rowMap.get(3))) {
-//                        errDataList.add(this.assembleErrMap(lineIndex, false, MessageFormat.format(msg, SinsurPresetItemEnum.EMP_NUMBER.getItemName())));
-//                        return false;
-//                    } else {
-//                        passRowMap.put(3, rowMap.get(3));
-//                        return true;
-//                    }
-                }
+            }
+
+            for (Map<String, String> itemMap : columnEntry.getValue()) {
+                passRowMap.put(columnIndex, itemValue);
             }
         }
+        return true;
     }
 
     private Map<Integer, List<Map<String, String>>> getColumnIndexMap() {
@@ -323,19 +314,44 @@ public class ImportTaskGuideImportService {
         while(var4.hasNext()) {
             Map<String, String> obj = (Map)var4.next();
             if (!"0".equals(obj.get("itemType"))) {
-                tempMapList = (List)columnIndexMap.get(Integer.valueOf((String)obj.get("columnIndex")));
+                tempMapList = (List) columnIndexMap.get(Integer.valueOf((String) obj.get("columnIndex")));
                 if (tempMapList == null) {
                     tempMapList = new ArrayList(10);
-                    columnIndexMap.put(Integer.valueOf((String)obj.get("columnIndex")), tempMapList);
+                    columnIndexMap.put(Integer.valueOf((String) obj.get("columnIndex")), tempMapList);
                 }
+                ((List) tempMapList).add(obj);
+            }
+        }
 
-                ((List)tempMapList).add(obj);
+        return columnIndexMap;
+    }
+
+    /**
+     * 获取默认项目Map
+     * @return
+     */
+    private Map<Integer, List<Map<String, String>>> getCommonColumnIndexMap() {
+        List<Map<String, String>> columnHeadList = ImportTaskUtils.getColumnHeadList(this.sinsurTplId, this.importTaskId);
+        Map<Integer, List<Map<String, String>>> columnIndexMap = new HashMap(columnHeadList.size());
+        List<Map<String, String>> tempMapList = null;
+        Iterator var4 = columnHeadList.iterator();
+
+        while(var4.hasNext()) {
+            Map<String, String> obj = (Map)var4.next();
+            if ("0".equals(obj.get("itemType"))) {
+                tempMapList = (List) columnIndexMap.get(Integer.valueOf((String) obj.get("columnIndex")));
+                if (tempMapList == null) {
+                    tempMapList = new ArrayList(10);
+                    columnIndexMap.put(Integer.valueOf((String) obj.get("columnIndex")), tempMapList);
+                }
+                ((List) tempMapList).add(obj);
             }
         }
 
         return columnIndexMap;
     }
 
+
     private Map<String, String> assembleErrMap(int dataIndex, boolean isAll, String msg) {
         Map<String, String> errMap = new HashMap(4);
         errMap.put("errMsg", msg);
@@ -361,7 +377,12 @@ public class ImportTaskGuideImportService {
                 }
                 tplName.append(((SinsurPresetItemEnum)entry.getValue()).getImportColumnName());
                 if (!excelName.equals(tplName.toString())) {
-                    errDataList.add(((SinsurPresetItemEnum)entry.getValue()).getImportColumnName());
+                    // 系统导出来的模板列名有*,线下的模板可能不会加*号,这里再判断一下,如果有*号,去掉*号再匹配一下
+                    if(tplName.toString().startsWith("*")) {
+                        if(!excelName.equals(tplName.toString().substring(1, tplName.toString().length()))) {
+                            errDataList.add(((SinsurPresetItemEnum)entry.getValue()).getImportColumnName());
+                        }
+                    }
                 }
             }
         }

+ 23 - 13
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/business/importtaskguide/utils/ImportTaskUtils.java

@@ -6,11 +6,11 @@ import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.serialization.SerializationUtils;
 import kd.bos.entity.EntityType;
 import kd.bos.orm.query.QFilter;
-import kd.swc.hsas.common.enums.PresetItemEnum;
 import kd.swc.hsbp.business.servicehelper.SWCDataServiceHelper;
 import kd.swc.hsbp.common.cache.ISWCAppCache;
 import kd.swc.hsbp.common.cache.SWCAppCache;
 import kd.swc.hsbp.common.util.SWCStringUtils;
+import nckd.jxccl.sit.hcsi.common.constant.SitConstant;
 import nckd.jxccl.sit.hcsi.formplugin.web.tp.enums.SinsurPresetItemEnum;
 
 import java.util.*;
@@ -140,17 +140,11 @@ public class ImportTaskUtils {
         String columnKey = null;
         switch (itemId) {
             case "1":
-                columnKey = "period";
-                break;
-            case "2":
                 columnKey = "nckd_idcard";
                 break;
-            case "3":
+            case "2":
                 columnKey = "nckd_empname";
                 break;
-            case "4":
-                columnKey = "nckd_empnumber";
-                break;
         }
 
         return columnKey;
@@ -190,11 +184,27 @@ public class ImportTaskUtils {
         return num - 1;
     }
 
-    public static void setTemporaryValueForCommon(DynamicObject temporary, Map<Integer, Object> rowMap) {
-        temporary.set("nckd_periodname", rowMap.get(0));
-        temporary.set("nckd_idcard", rowMap.get(1));
-        temporary.set("nckd_empname", rowMap.get(2));
-        temporary.set("nckd_empnumber", rowMap.get(3));
+    /**
+     * 处理预置字段
+     *
+     * @param commonColumnIndexMap
+     * @param temporary
+     * @param rowMap
+     * @param periodNumber
+     */
+    public static void setTemporaryValueForCommon(Map<Integer, List<Map<String, String>>> commonColumnIndexMap, DynamicObject temporary, Map<Integer, Object> rowMap, String periodNumber) {
+        for (Map.Entry<Integer, List<Map<String, String>>> entry : commonColumnIndexMap.entrySet()) {
+            Object itemValue = rowMap.get(entry.getKey());
+            if (itemValue == null) {
+                continue;
+            }
+            for (Map<String, String> itemMap : entry.getValue()) {
+                temporary.set(itemMap.get("key").toString(), itemValue);
+            }
+        }
+
+        temporary.set("nckd_periodname", periodNumber);
+
     }
 
     public static DynamicObjectCollection getItemEntryList(Map<Integer, Object> rowMap, Map<Integer, List<Map<String, String>>> columnIndexMap, EntityType entryType) {

+ 3 - 1
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/common/constant/SitConstant.java

@@ -10,7 +10,7 @@ public class SitConstant {
     /*薪酬年收入统计单*/
     public static final HRBaseServiceHelper SALINCOMEBILL_HELPER = new HRBaseServiceHelper("nckd_salannualincomebill");
     /*查询字段*/
-    public static final String SALINCOMEBILL_SELECTFIELDS = "nckd_entryentity.nckd_employee,nckd_entryentity.nckd_month,nckd_entryentity.nckd_totalsalary";
+    public static final String SALINCOMEBILL_SELECTFIELDS = "nckd_entryentity.nckd_employee,nckd_entryentity.nckd_month,nckd_entryentity.nckd_totalsalary,nckd_entryentity.nckd_pushstatus";
     /*社保年收入统计单*/
     public static final HRBaseServiceHelper SITINCOMEBILL_HELPER = new HRBaseServiceHelper("nckd_sitannualincomebill");
     /*业务数据提报*/
@@ -19,6 +19,8 @@ public class SitConstant {
     public static final HRBaseServiceHelper BIZDATABILLENT_HELPER = new HRBaseServiceHelper("hpdi_bizdatabillent");
     /*业务数据模板*/
     public static final HRBaseServiceHelper BIZITEMGROUP_HELPER = new HRBaseServiceHelper("hsbs_bizitemgroup");
+    /*  */
+    public static final HRBaseServiceHelper SINSURPERIOD_HELPER = new HRBaseServiceHelper("sitbs_sinsurperiod");
     /*业务数据提报-外单位收入模板编码*/
     public static final String WDWSR_NUMBER = "JT001";
 

+ 1 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/SinsurTempDataListPlugin.java

@@ -65,6 +65,7 @@ public class SinsurTempDataListPlugin extends AbstractListPlugin implements Plug
             formShowParameter.setCustomParam("periodId", this.getView().getFormShowParameter().getCustomParam("periodId"));
             formShowParameter.setCustomParam("welfarepayerId", this.getView().getFormShowParameter().getCustomParam("welfarepayerId"));
             formShowParameter.setCustomParam("orgId", this.getView().getFormShowParameter().getCustomParam("orgId"));
+            formShowParameter.setCustomParam("periodNumber", this.getView().getFormShowParameter().getCustomParam("periodNumber"));
             formShowParameter.setCloseCallBack(new CloseCallBack(this, "importData"));
             this.getView().showForm(formShowParameter);
         }

+ 1 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/basedata/SinsurImpTaskListPlugin.java

@@ -64,6 +64,7 @@ public class SinsurImpTaskListPlugin extends AbstractListPlugin implements Plugi
             parameter.setCustomParam("importTaskName", data.getString("name"));
             parameter.setCustomParam("welfarepayerId", data.getLong("nckd_welfarepayer.id"));
             parameter.setCustomParam("periodId", data.getLong("nckd_period.id"));
+            parameter.setCustomParam("periodNumber", data.getString("nckd_period.number"));
             parameter.setCustomParam("sinsurTplId", data.getLong("nckd_sinsurtpl.id"));
             parameter.setCustomParam("orgId", String.valueOf(data.getLong("nckd_org.id")));
             parameter.setCustomParam("creator", String.valueOf(data.getLong("creator.id")));

+ 2 - 1
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/basedata/TaskGuideImportFormPlugin.java

@@ -98,10 +98,11 @@ public class TaskGuideImportFormPlugin extends AbstractFormPlugin implements Upl
             Long sinsurTplId = (Long)params.getCustomParam("sinsurTplId");
             Long welfarepayerId = params.getCustomParam("welfarepayerId");
             Long periodId = params.getCustomParam("periodId");
+            String periodNumber = params.getCustomParam("periodNumber");
             Long orgId = Long.valueOf(params.getCustomParam("orgId").toString());
             String importTaskName = (String)params.getCustomParam("importTaskName");
             String pageId = this.getView().getParentView().getPageId();
-            ImportTaskGuideImportService importService = new ImportTaskGuideImportService(url, importTaskId, sinsurTplId, periodId, welfarepayerId);
+            ImportTaskGuideImportService importService = new ImportTaskGuideImportService(url, importTaskId, sinsurTplId, periodId, periodNumber, welfarepayerId);
 
             try {
                 Map<String, String> result = importService.parseAndCheckExcelData(orgId, pageId, importTaskName);

+ 2 - 4
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/enums/SinsurPresetItemEnum.java

@@ -7,10 +7,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 public enum SinsurPresetItemEnum {
-    CALPERIOD("A", 1L, new SWCI18NParam("期间", "PresetItemEnum_4", "swc-hsas-common"), 1030L, new SWCI18NParam("必填项,体现缴纳期间,格式:202501", "PresetItemEnum_13", "swc-hsas-common"), new SWCI18NParam("期间编码", "PresetItemEnum_28", "swc-hsas-common"), true),
-    EMP_IDCARD("B", 2L, new SWCI18NParam("员工身份证", "PresetItemEnum_6", "swc-hsas-common"), 1030L, new SWCI18NParam("必填项,用于确认社保人员", "PresetItemEnum_15", "swc-hsas-common"), new SWCI18NParam("员工身份证", "PresetItemEnum_6", "swc-hsas-common"), true),
-    EMP_NAME("C", 3L, new SWCI18NParam("员工姓名", "PresetItemEnum_6", "swc-hsas-common"), 1030L, new SWCI18NParam("非必填项", "PresetItemEnum_15", "swc-hsas-common"), new SWCI18NParam("员工姓名", "PresetItemEnum_6", "swc-hsas-common"), false),
-    EMP_NUMBER("D", 4L, new SWCI18NParam("工号", "PresetItemEnum_6", "swc-hsas-common"), 1030L, new SWCI18NParam("非必填项", "PresetItemEnum_15", "swc-hsas-common"), new SWCI18NParam("工号", "PresetItemEnum_6", "swc-hsas-common"), false);
+    EMP_IDCARD("A", 1L, new SWCI18NParam("证件号码", "PresetItemEnum_6", "swc-hsas-common"), 1030L, new SWCI18NParam("必填项,用于确认社保人员", "PresetItemEnum_15", "swc-hsas-common"), new SWCI18NParam("证件号码", "PresetItemEnum_6", "swc-hsas-common"), true),
+    EMP_NAME("B", 2L, new SWCI18NParam("姓名", "PresetItemEnum_6", "swc-hsas-common"), 1030L, new SWCI18NParam("非必填项", "PresetItemEnum_15", "swc-hsas-common"), new SWCI18NParam("姓名", "PresetItemEnum_6", "swc-hsas-common"), false);
 
     private String matchColumn;
     private Long itemId;

+ 1 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/guide/TaskImpGuideListPlugin.java

@@ -89,6 +89,7 @@ public class TaskImpGuideListPlugin extends AbstractListPlugin implements TabSel
         showParameter.setCustomParam("periodId", parameter.getCustomParam("periodId"));
         showParameter.setCustomParam("welfarepayerId", parameter.getCustomParam("welfarepayerId"));
         showParameter.setCustomParam("orgId", parameter.getCustomParam("orgId"));
+        showParameter.setCustomParam("periodNumber", parameter.getCustomParam("periodNumber"));
         if (isLocked != null && isLocked) {
             showParameter.setCustomParam("isLocked", Boolean.TRUE);
         } else {

+ 0 - 2
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/tp/helper/SinsurTemplateHelper.java

@@ -170,10 +170,8 @@ public class SinsurTemplateHelper {
     }
 
     static {
-        sinsurPresetItemEnumList.add(SinsurPresetItemEnum.CALPERIOD);
         sinsurPresetItemEnumList.add(SinsurPresetItemEnum.EMP_IDCARD);
         sinsurPresetItemEnumList.add(SinsurPresetItemEnum.EMP_NAME);
-        sinsurPresetItemEnumList.add(SinsurPresetItemEnum.EMP_NUMBER);
     }
 
 

+ 4 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/constants/SwcConstant.java

@@ -14,4 +14,8 @@ public class SwcConstant {
     public static final HRBaseServiceHelper SALARYITEM_ENTITY = new HRBaseServiceHelper("hsbs_salaryitem");
     /* 核算列表 */
     public static final HRBaseServiceHelper CALTABLE_ENTITY = new HRBaseServiceHelper("hsas_caltable");
+    /* 单位代发单 */
+    public static final HRBaseServiceHelper AGENCYPAYBILL_ENTITY = new HRBaseServiceHelper("nckd_agencypaybill");
+    /* 年收入统计单 */
+    public static final HRBaseServiceHelper SALANNUALINCOMEBILL_ENTITY = new HRBaseServiceHelper("nckd_salannualincomebill");
 }

+ 25 - 4
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/business/annualincome/AnnualIncomeService.java

@@ -13,7 +13,6 @@ import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.hr.hbp.business.servicehelper.HRQueryEntityHelper;
 import kd.sdk.swc.hsas.business.internal.spi.CalResultQueryService;
-import kd.swc.hsbp.common.constants.SWCBaseConstants;
 import nckd.jxccl.swc.constants.SwcConstant;
 
 import java.util.*;
@@ -69,9 +68,11 @@ public class AnnualIncomeService {
     private List<Long> queryCalPayRollTaskByPayRollGroup () {
         logger.info("开始查询核算任务数据,参数:{},{},{}", groupId, startDate, endDate);
         QFilter filter = new QFilter("payrollgroup.id", QCP.equals, groupId);
-        filter.and("payrolldate", QCP.large_equals, startDate);
-        filter.and("payrolldate", QCP.less_equals, endDate);
-        DynamicObject[] taskCols = queryCalPayRollTaskByPayRollGroup("id, payrolldate, payrollgroup", filter.toArray());
+        // 2025-11-25 Tyx
+        // 由payrolldate薪资所属年月 改为 paydate预计支付日期
+        filter.and("paydate", QCP.large_equals, startDate);
+        filter.and("paydate", QCP.less_equals, endDate);
+        DynamicObject[] taskCols = queryCalPayRollTaskByPayRollGroup("id, paydate, payrolldate, payrollgroup", filter.toArray());
         List<Long> taskIds = (List) Arrays.stream(taskCols).map((o) -> {
             return o.getLong("id");
         }).collect(Collectors.toList());
@@ -104,4 +105,24 @@ public class AnnualIncomeService {
         return calPersonCols;
     }
 
+    /**
+     * 查询年收入的人员ID,后续排除用
+     * @return
+     */
+    public List<Long> queryIncomeBillEmployeeId() {
+        QFilter filter = new QFilter("nckd_payrollgrp.id", QCP.equals, this.groupId);
+        filter.and("nckd_calyear", QCP.equals, startDate);
+        filter.and("nckd_entryentity.nckd_pushstatus", QCP.not_equals2 , "3");  // 不等于废弃
+        String selectFields = "nckd_entryentity.nckd_employee.id";
+        DynamicObjectCollection dyns = SwcConstant.SALANNUALINCOMEBILL_ENTITY.queryOriginalCollection(selectFields, filter.toArray());
+
+        return dyns.stream().map((o) -> {
+            return o.getLong("nckd_entryentity.nckd_employee.id");
+        }).collect(Collectors.toList());
+
+    }
+
+
+
+
 }

+ 54 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/agencybill/AgencyBatchUpdateFormPlugin.java

@@ -0,0 +1,54 @@
+package nckd.jxccl.swc.hcdm.formplugin.agencybill;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.datamodel.IDataModel;
+import kd.bos.form.IFormView;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.sdk.plugin.Plugin;
+
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Tyx 单位代发单批量更新表单插件
+ * 【nckd_agencybatchupdate】
+ */
+public class AgencyBatchUpdateFormPlugin extends AbstractFormPlugin implements Plugin {
+
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+    }
+
+    @Override
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+    }
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
+        super.afterDoOperation(afterDoOperationEventArgs);
+        String key = afterDoOperationEventArgs.getOperateKey();
+        switch(key) {
+            case "donothing_batchupdate":
+                doUpdate();
+                break;
+        }
+    }
+
+    private void doUpdate() {
+        DynamicObject dyn = this.getModel().getDataEntity();
+        IFormView view = this.getView();
+        Map map = new HashMap();
+        map.put("month", dyn.getDate("nckd_month"));
+        map.put("calrule", dyn.getDynamicObject("nckd_calrule"));
+        view.returnDataToParent(map);
+        view.close();
+    }
+
+
+}

+ 40 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/agencybill/AgencyBillEdit.java

@@ -3,11 +3,13 @@ package nckd.jxccl.swc.hcdm.formplugin.agencybill;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.resource.ResManager;
+import kd.bos.dataentity.utils.ObjectUtils;
 import kd.bos.entity.datamodel.IDataModel;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.form.CloseCallBack;
 import kd.bos.form.ShowFormHelper;
 import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
 import kd.bos.form.events.ClosedCallBackEvent;
 import kd.bos.form.operate.FormOperate;
 import kd.bos.list.ListFilterParameter;
@@ -128,6 +130,42 @@ public class AgencyBillEdit extends SWCBaseFormPlugin implements Plugin {
     }
 
 
+
+
+
+    @Override
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+        FormOperate formOperate = (FormOperate)args.getSource();
+        String key = formOperate.getOperateKey();
+        switch (key) {
+            case "add_adjfile":
+                beforeAddAdjFileVerify(args);
+                break;
+        }
+    }
+
+    /**
+     * 添加代发人员前校验
+     * 必须选择完薪资核算组和组织
+     */
+    private void beforeAddAdjFileVerify(BeforeDoOperationEventArgs args) {
+        DynamicObject dyn = this.getModel().getDataEntity();
+        DynamicObject org = dyn.getDynamicObject("org");
+        DynamicObject parRollGroup = dyn.getDynamicObject("nckd_payrollgroup");
+
+        if(ObjectUtils.isEmpty(org)) {
+            args.setCancel(true);
+            this.getView().showTipNotification("请先选择组织!");
+        }
+
+        if(ObjectUtils.isEmpty(parRollGroup)) {
+            args.setCancel(true);
+            this.getView().showTipNotification("请先选择薪资核算组!");
+        }
+
+    }
+
     @Override
     public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
         super.afterDoOperation(afterDoOperationEventArgs);
@@ -151,7 +189,9 @@ public class AgencyBillEdit extends SWCBaseFormPlugin implements Plugin {
 
         Date effectiveDate = new Date();
         long orgId = this.getModel().getDataEntity().getLong("org.id");
+        long payRollGrpId = this.getModel().getDataEntity().getLong("nckd_payrollgroup.id");
         qFilters.add(new QFilter("org.id", QCP.equals, orgId));
+        qFilters.add(new QFilter("payrollgroup.id", QCP.equals, payRollGrpId));
         if (effectiveDate != null) {
             formShowParameter.setCustomParam("effectiveDate", SWCDateTimeUtils.format(effectiveDate, "yyyy-MM-dd"));
         }

+ 99 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/agencybill/AgencyBillList.java

@@ -0,0 +1,99 @@
+package nckd.jxccl.swc.hcdm.formplugin.agencybill;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.CloseCallBack;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.IFormView;
+import kd.bos.form.ShowType;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.events.ClosedCallBackEvent;
+import kd.bos.form.operate.FormOperate;
+import kd.bos.list.IListView;
+import kd.bos.orm.query.QFilter;
+import kd.swc.hsbp.common.util.SWCStringUtils;
+import kd.swc.hsbp.formplugin.web.SWCDataBaseList;
+import nckd.jxccl.swc.constants.SwcConstant;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * Tyx 2025-11-25
+ * 单位代发单列表插件
+ */
+public class AgencyBillList extends SWCDataBaseList {
+
+    @Override
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+        FormOperate formOperate = (FormOperate)args.getSource();
+        String opKey = formOperate.getOperateKey();
+        if (SWCStringUtils.equals(opKey, "donothing_batchupdate")) {
+            this.openBatchUpdateWindow(args);
+        }
+    }
+
+    /**
+     *
+     * @param args
+     */
+    private void openBatchUpdateWindow(BeforeDoOperationEventArgs args) {
+        FormShowParameter formShowParameter = new FormShowParameter();
+        formShowParameter.setFormId("nckd_agencybatchupdate");
+        formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
+        formShowParameter.setCloseCallBack(new CloseCallBack(this, "batchUpdate"));
+        this.getView().showForm(formShowParameter);
+    }
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
+        super.afterDoOperation(afterDoOperationEventArgs);
+    }
+
+    @Override
+    public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
+        super.closedCallBack(closedCallBackEvent);
+        IFormView view = this.getView();
+        IListView listview = (IListView) this.getView();
+        String actionId = closedCallBackEvent.getActionId();
+        if ("batchUpdate".equals(actionId)) {
+            Map map = (Map) closedCallBackEvent.getReturnData();
+            if (map != null) {
+
+                Date month = (Date) map.get("month");
+                DynamicObject calRule = (DynamicObject) map.get("calrule");
+                ListSelectedRowCollection selectedRows = listview.getSelectedRows();
+                Object[] entryIds = selectedRows.getEntryPrimaryKeyValues();
+
+                List<Long> entryIdsList = Arrays.stream(entryIds).map(obj -> {
+                    return (Long) obj;
+                }).collect(Collectors.toList());
+
+                QFilter filter = new QFilter("nckd_entryentity.id", "in", entryIdsList);
+                DynamicObject[] billDyns = SwcConstant.AGENCYPAYBILL_ENTITY.load("id, nckd_entryentity.nckd_periodmonth, nckd_entryentity.nckd_calrule", new QFilter[]{filter});
+                // 批量更新
+                for(DynamicObject bill : billDyns) {
+                    DynamicObjectCollection entryDyns = bill.getDynamicObjectCollection("nckd_entryentity");
+                    for(DynamicObject entry : entryDyns) {
+                        if(entryIdsList.contains(entry.getLong("id"))) {
+                            entry.set("nckd_periodmonth", month);
+                            entry.set("nckd_calrule", calRule);
+                        }
+                    }
+                }
+                SwcConstant.AGENCYPAYBILL_ENTITY.update(billDyns);
+            }
+            view.invokeOperation("refresh");
+        }
+    }
+
+
+
+
+}

+ 5 - 1
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/annualincome/SalAnnualIncomeBillEdit.java

@@ -108,10 +108,14 @@ public class SalAnnualIncomeBillEdit extends AbstractFormPlugin implements Plugi
         }));
         // 按照employeeId提取出来
         List<Map<String, Object>> finalResult = dealGroupData(unionMap);
-
+        // 排除人员ID
+        List<Long> excludeEmployeeId = service.queryIncomeBillEmployeeId();
 
         // 界面赋值
         for (Map map : finalResult) {
+            if(excludeEmployeeId.contains(map.get("employeeId"))) {
+                continue;
+            }
             int rowIndex = model.createNewEntryRow("nckd_entryentity");
             model.setValue("nckd_employee", map.get("employeeId"), rowIndex);
             model.setValue("nckd_idcardno", map.get("idCardNo"), rowIndex);

+ 68 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/annualincome/SalAnnualIncomeBillList.java

@@ -0,0 +1,68 @@
+package nckd.jxccl.swc.hcdm.formplugin.annualincome;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.IFormView;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.list.IListView;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.orm.query.QFilter;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.swc.constants.SwcConstant;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Tyx 2025-11-25
+ * 年收入证明统计单列表插件 【nckd_salinnualincomebill】
+ */
+public class SalAnnualIncomeBillList extends AbstractListPlugin implements Plugin {
+
+    @Override
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+    }
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
+        super.afterDoOperation(afterDoOperationEventArgs);
+        String key = afterDoOperationEventArgs.getOperateKey();
+        switch (key) {
+            case "donothing_discard":
+                doDiscardByRow();
+                break;
+        }
+    }
+
+    /**
+     * 按行废弃
+     */
+    private void doDiscardByRow() {
+        IFormView view = this.getView();
+        IListView listview = (IListView) this.getView();
+        ListSelectedRowCollection selectedRows = listview.getSelectedRows();
+        Object[] entryIds = selectedRows.getEntryPrimaryKeyValues();
+
+        List<Long> entryIdsList = Arrays.stream(entryIds).map(obj -> {
+            return (Long) obj;
+        }).collect(Collectors.toList());
+
+        QFilter filter = new QFilter("nckd_entryentity.id", "in", entryIdsList);
+        DynamicObject[] billDyns = SwcConstant.SALANNUALINCOMEBILL_ENTITY.load("nckd_entryentity.nckd_pushstatus", filter.toArray());
+        for(DynamicObject bill : billDyns) {
+            DynamicObjectCollection entryDyns = bill.getDynamicObjectCollection("nckd_entryentity");
+            for(DynamicObject entry : entryDyns) {
+                if(entryIdsList.contains(entry.getLong("id"))) {
+                    entry.set("nckd_pushstatus", "3");
+                }
+            }
+        }
+        SwcConstant.AGENCYPAYBILL_ENTITY.update(billDyns);
+        view.showSuccessNotification("废弃成功!");
+        view.invokeOperation("refresh");
+    }
+}

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

@@ -111,7 +111,7 @@ public class SynPendingSalaryAdjDataServiceImpl implements SynPendingSalaryAdjDa
         /**
          * 查询入职单
          */
-        String selectField2 = "id,billno,b_effectivedate,createtime,ba_em_tid,ba_em_empnumber,ba_em_name,ba_po_position.boid,ba_po_adminorg,ba_po_position.nckd_paystdplan.name";
+        String selectField2 = "id,billno,b_effectivedate,createtime,ba_em_tid,ba_em_empnumber,ba_em_name,ba_po_position.boid,ba_po_adminorg,ba_po_adminorg.belongcompany.id,ba_po_position.nckd_paystdplan.name";
         QFilter qFilter1 = new QFilter("enrollstatus", QCP.equals, "3"); // 入职状态 = 已入职
         QFilter qFilter2 = new QFilter("billstatus", QCP.equals, "C"); // 单据状态 = 已审核
         QFilter qFilter3 = new QFilter("b_effectivedate", QCP.large_equals, daysAgo);
@@ -157,6 +157,7 @@ public class SynPendingSalaryAdjDataServiceImpl implements SynPendingSalaryAdjDa
             dyn.set("nckd_billtype", "入职单");
             dyn.set("billstatus", "A");  ///待处理
             dyn.set("nckd_employeefield", onhasonbrdDyn.getLong("ba_em_tid"));
+            dyn.set("nckd_hrorg", onhasonbrdDyn.getLong("ba_po_adminorg.belongcompany.id"));  //薪酬管理组织 来源  调后部门中的公司
             dyn.set("nckd_changedate", onhasonbrdDyn.getDate("b_effectivedate"));
             dyn.set("nckd_dodatetime", onhasonbrdDyn.getDate("createtime"));
             dyn.set("nckd_salaryadjus", salaryTypeDyns.get(0).getLong("id"));  //定调薪类型
@@ -171,7 +172,7 @@ public class SynPendingSalaryAdjDataServiceImpl implements SynPendingSalaryAdjDa
         /**
          * 查询调动单
          */
-        String selectField1 = "id,billno,b_effectivedate,createtime,bb_em_tid,ba_em_empnumber,bb_po_position.boid,aposition.boid,bb_po_adminorg.boid,aorg.boid";
+        String selectField1 = "id,billno,b_effectivedate,createtime,bb_em_tid,ba_em_empnumber,bb_po_position.boid,aposition.boid,bb_po_adminorg.boid,aorg.boid,aorg.belongcompany.id";
         QFilter qFilter12 = new QFilter("billstatus", QCP.equals, "C"); // 单据状态 = 已审核
         QFilter qFilter13 = new QFilter("b_effectivedate", QCP.large_equals, daysAgo);  //实际调动日期
         QFilter qFilter14 = new QFilter("b_effectivedate", QCP.less_equals, currentDate);  //实际调动日期
@@ -216,6 +217,7 @@ public class SynPendingSalaryAdjDataServiceImpl implements SynPendingSalaryAdjDa
             dyn.set("nckd_billtype", "调动单");
             dyn.set("billstatus", "A");  ///待处理
             dyn.set("nckd_employeefield", employeeID);
+            dyn.set("nckd_hrorg", transferDyn.getLong("aorg.belongcompany.id"));  //薪酬管理组织 来源  调后部门中的公司
             dyn.set("nckd_changedate", transferDyn.getDate("b_effectivedate"));
             dyn.set("nckd_dodatetime", transferDyn.getDate("createtime"));
             dyn.set("nckd_salaryadjus", salaryTypeDyns.get(1).getLong("id"));  //定调薪类型

+ 48 - 27
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/operate/BuildApplyBillOpPlugin.java

@@ -6,6 +6,7 @@ import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.EntityMetadataCache;
 import kd.bos.entity.MainEntityType;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.AddValidatorsEventArgs;
 import kd.bos.entity.plugin.PreparePropertysEventArgs;
@@ -15,11 +16,13 @@ import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.operation.OperationServiceHelper;
 import kd.scm.common.util.DynamicObjectUtil;
 import kd.sdk.plugin.Plugin;
 import kd.sdk.swc.hcdm.business.helper.HCDMApplyBillServiceHelper;
 import nckd.jxccl.base.entity.helper.EntityHelper;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -44,6 +47,9 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
     public void onPreparePropertys(PreparePropertysEventArgs e) {
         e.getFieldKeys().add(EmployeesField);
         e.getFieldKeys().add(BillTypeField);
+        e.getFieldKeys().add("nckd_newposition.id");
+        e.getFieldKeys().add("nckd_newsalaryrank.id");
+        e.getFieldKeys().add("nckd_newhradminorg.id");
     }
 
     @Override
@@ -59,66 +65,81 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
 
         List<Long> employeeIDs  =  getSelectedEmployees(datas);
 
+        Map<String,Object> papams = new HashMap<>();
+        List<Map<String,Object>> applyBillData = new ArrayList<>();
         Map<String,Object> applyBill = new HashMap<>();
+
+        /**
+         * 必填字段
+         * "billname", "billtype", "org", "billcountry", "salaryadjrsn", "salaryadjscm", "billcurrency", "effectivedate", "exchangeratedate", "exctable"
+         */
         applyBill.put("billname","员工待定调薪清单-生成");
 
         Long orgId = RequestContext.get().getOrgId();
 
+        String uniquecode = UUID.randomUUID().toString().replace("-", "");
+        applyBill.put("_uniquecode", uniquecode);
         applyBill.put("org",orgId);
-        applyBill.put("billcountry", 1000001L);  //国家
+        applyBill.put("billtype", 2215975998602655744L);   //定调薪明细字段显示方案   调薪明细字段
+        applyBill.put("billcountry", 1000001L);                //国家
         applyBill.put("salaryadjrsn", 2352340656979984384L);  //定调薪类型
-        applyBill.put("billcurrency", 1L);  //默认币种
+        applyBill.put("billcurrency", 1L);                     //默认币种
+        applyBill.put("salaryadjscm", 2322515162646457344L);   //定调薪方案
         applyBill.put("exchangeratedate", new Date());   //汇率日期
         applyBill.put("exctable", 2321965096026258432L);  //汇率表
         applyBill.put("effectivedate", new Date());   //默认生效日期
         applyBill.put("isdraft", "1"); //草稿状态
         applyBill.put("datasource", "2");  //申请单数据来源   //1:手工新增  2:接口写入
 
-        Map<Long, DynamicObject>  salaryfileMap = getSalaryFileInfo(employeeIDs);
-
         List<Map<String,Object>> applyBillEntryData = new ArrayList<>();
+
+        /**
+         * 必填字段
+         * "adjfile", "standarditem", "frequency", "amount"
+         */
         for (DynamicObject data : datas) {
             Map<String,Object> applyBillEntry = new HashMap<>();
             Long employeeId = data.getLong(EmployeesField);
-            DynamicObject salaryfile = salaryfileMap.get(employeeId);
+            Long positionId = data.getLong("nckd_newposition.id");
+            DynamicObject salaryfile  = getSalaryFileInfo(employeeId,positionId);
             applyBillEntry.put("adjfile", salaryfile.getLong("boid"));
             applyBillEntry.put("employee", employeeId);
-            applyBillEntry.put("hcdmorg", salaryfile.getLong("org.id"));   //薪酬管理组织
-            applyBillEntry.put("country", salaryfile.getLong("country.id"));   //薪酬管理属地
-            applyBillEntry.put("salarystructure", salaryfile.getLong("salarystructure.id"));   //薪酬结构
-            applyBillEntry.put("stdscmv", salaryfile.getLong("stdscm.id"));   //
-            applyBillEntry.put("empgroup", salaryfile.getLong("empgroup.id"));  //定调薪档案分组
+            applyBillEntry.put("standarditem", 2321899710350111744L);    //定调薪项目   岗位工资标准
+            applyBillEntry.put("frequency", 1095454108284088320L);       //频度  月
+            applyBillEntry.put("amount", BigDecimal.ZERO);
             applyBillEntry.put("nckd_postgrade", salaryfile.getLong("position.nckd_postgrade.id"));  //岗级
-            applyBillEntry.put("position", data.getLong("nckd_newposition"));
-            applyBillEntry.put("salaryrank", data.getLong("nckd_newsalaryrank"));
-            applyBillEntry.put("adminorg", data.getLong("nckd_newhradminorg"));
+            applyBillEntry.put("position", positionId);
+            applyBillEntry.put("salaryrank", data.getLong("nckd_newsalaryrank.id"));
             applyBillEntryData.add(applyBillEntry);
         }
         applyBill.put("applybillent", applyBillEntryData);
-        Map<String, Object> result = HCDMApplyBillServiceHelper.saveDraftApplyBill(applyBill);
-        System.out.println(result);
+        applyBillData.add(applyBill);
+        papams.put("data", applyBillData);
+        Map<String, Object> result = HCDMApplyBillServiceHelper.saveDraftApplyBill(papams);
+        System.out.println("BuildApplyBillOpPlugin:"+result.toString());
+        ///返回界面的数据
+        //this.operationResult.setCustomData(result);
+
+        //OperationResult updatepersonOp = OperationServiceHelper.executeOperate("updatepersoninfo_and_match", "", new DynamicObject[]{change}, OperateOption.create());
+
     }
 
     /**
      * 获取员工定调薪档案  hcdm_adjfileinfo
+     * 员工定调薪档案 会有多条,需要按岗位获取
+     * @param employeeID  员工ID
+     * @param positionID  岗位ID
      */
-    public Map<Long, DynamicObject> getSalaryFileInfo(List<Long> employeeIDs){
+    public DynamicObject getSalaryFileInfo(Long employeeID, Long positionID){
 
-        QFilter qFilter = new QFilter("employee.id", QCP.in, employeeIDs);
+        QFilter qFilter = new QFilter("employee.id", QCP.equals, employeeID);
         QFilter qFilter1 = new QFilter("iscurrentversion", QCP.equals, "1"); // 启用
         QFilter qFilter2 = new QFilter("datastatus", QCP.equals, "1"); // 启用
+        QFilter qFilter3 = new QFilter("position.id", QCP.equals, positionID);
         String selectField = "id,boid,number,employee.id,org.id,country.id,salarystructure.id,stdscm.id,empgroup.id,position.nckd_postgrade.id";
-        DynamicObjectCollection employeesFiles = QueryServiceHelper.query("hcdm_adjfileinfo", selectField, new QFilter[]{qFilter,qFilter1,qFilter2});
-
-        Map<Long, DynamicObject> salaryfileMap = (Map)employeesFiles.stream().collect(Collectors.toMap((obj) -> {
-            return obj.getLong("employee.id");
-        }, (obj) -> {
-            return obj;
-        }, (k1, k2) -> {
-            return k1;
-        }));
+        DynamicObject employeesFiles = QueryServiceHelper.queryOne("hcdm_adjfileinfo", selectField, new QFilter[]{qFilter,qFilter1,qFilter2,qFilter3});
 
-        return salaryfileMap;
+        return employeesFiles;
     }
 
     /**

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

@@ -36,13 +36,13 @@ public class SalaryAdjDelivaryDateValidator extends AbstractValidator {
             billType = bill.getString("nckd_billtype");
 
             Long employeeId = bill.getLong("nckd_employeefield.id");
-            QFilter qFilter = new QFilter("employeev.id", QCP.equals, employeeId);
+            QFilter qFilter = new QFilter("employeev.boid", QCP.equals, employeeId);
             QFilter qFilter1 = new QFilter("coordruleparam.chgevent_z.id", QCP.in, chgeventList); // 启用
             QFilter qFilter2 = new QFilter("dealresult", QCP.equals, "8"); // 变动状态  已处理
-            String selectField = "id,employeev.id,coordruleparam.chgevent_z.id,dealresult";
+            String selectField = "id,employeev.boid,coordruleparam.chgevent_z.id,dealresult";
             DynamicObject employeesFiles = QueryServiceHelper.queryOne(EmpChangeBill, selectField, new QFilter[]{qFilter,qFilter1,qFilter2});
             if(EmptyUtil.isEmpty(employeesFiles) ){
-                this.addErrorMessage(obj,"员工定调薪档案不存在,请先完成员工变动及处理!");
+                this.addErrorMessage(obj,"员工定调薪档案不存在请先完成员工变动及处理!");
             }
         }
     }