Bladeren bron

feat(income): 优化年度收入批量新增功能

- 修改查询条件,支持多薪资核算组过滤
- 新增排除已存在薪资核算组逻辑
- 调整数据处理流程,提升查询效率
- 移除冗余代码,统一工具方法调用
- 完善界面提示信息,改善用户体验
Tyx 1 week geleden
bovenliggende
commit
7fa48ed349

+ 8 - 2
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/business/annualincome/AnnualIncomeService.java

@@ -125,7 +125,7 @@ public class AnnualIncomeService {
      * @return
      */
     public List<Long> queryIncomeBillEmployeeId() {
-        QFilter filter = new QFilter("nckd_payrollgrp.id", QCP.in, groupIds);
+        QFilter filter = new QFilter("nckd_entryentity.nckd_payrollgrp.id", QCP.in, groupIds);
         filter.and("nckd_calyear", QCP.equals, startDate);
         filter.and("nckd_entryentity.nckd_pushstatus", QCP.not_equals2 , "3");  // 不等于废弃
         String selectFields = "nckd_entryentity.nckd_employee.id";
@@ -137,7 +137,13 @@ public class AnnualIncomeService {
 
     }
 
-
+    public List<Long> getExcludePayRollGroupIds (Date startDate) {
+        List<Long> excludeGroupIds = new ArrayList<Long>();
+        QFilter filter = new QFilter("nckd_calyear", QCP.equals, startDate);
+        DynamicObjectCollection cols = SwcConstant.SALANNUALINCOMEBILL_ENTITY.queryOriginalCollection("nckd_payrollgrp.id", filter.toArray());
+        excludeGroupIds.addAll(cols.stream().map(obj -> obj.getLong("nckd_payrollgrp.id")).collect(Collectors.toList()));
+        return excludeGroupIds;
+    }
 
 
 }

+ 2 - 8
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/annualincome/IncomeBatchAddnewEdit.java

@@ -113,7 +113,7 @@ public class IncomeBatchAddnewEdit extends AbstractFormPlugin implements Plugin
         IDataModel model = this.getModel();
 
         // 查出现在已经生成了多少薪资核算组的数据
-        List<Long> excludeGroupIds = getExcludePayRollGroupIds(startDate);
+        List<Long> excludeGroupIds = SwcUtils.getExcludePayRollGroupIds(startDate);
 
         DynamicObjectCollection payRollGrpCols = (DynamicObjectCollection)model.getValue("nckd_mulpayrollgrp");
         if(payRollGrpCols.size() == 0) {
@@ -127,11 +127,5 @@ public class IncomeBatchAddnewEdit extends AbstractFormPlugin implements Plugin
         return groupIds;
     }
 
-    public List<Long> getExcludePayRollGroupIds (Date startDate) {
-        List<Long> excludeGroupIds = new ArrayList<Long>();
-        QFilter filter = new QFilter("nckd_calyear", QCP.equals, startDate);
-        DynamicObjectCollection cols = SwcConstant.SALANNUALINCOMEBILL_ENTITY.queryOriginalCollection("nckd_payrollgrp.id", filter.toArray());
-        excludeGroupIds.addAll(cols.stream().map(obj -> obj.getLong("nckd_payrollgrp.id")).collect(Collectors.toList()));
-        return excludeGroupIds;
-    }
+
 }

+ 60 - 41
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/annualincome/SalAnnualIncomeBillEdit.java

@@ -44,8 +44,8 @@ public class SalAnnualIncomeBillEdit extends AbstractFormPlugin implements Plugi
     private void beforeDoQueryVerify(BeforeDoOperationEventArgs args) {
         IDataModel model = this.getModel();
         DynamicObject dyn = model.getDataEntity();
-        DynamicObject payRollGrp = dyn.getDynamicObject("nckd_payrollgrp");
-        if(ObjectUtils.isEmpty(payRollGrp)) {
+        DynamicObjectCollection payRollGrps = (DynamicObjectCollection)model.getValue("nckd_mulpayrollgrp");
+        if(ObjectUtils.isEmpty(payRollGrps)) {
             args.setCancel(true);
             this.getView().showTipNotification("请先选择薪资核算组!");
         }
@@ -74,55 +74,74 @@ public class SalAnnualIncomeBillEdit extends AbstractFormPlugin implements Plugi
     private void doQuery() {
         IDataModel model = this.getModel();
         DynamicObject dyn = model.getDataEntity();
-        DynamicObject payRollGrp = dyn.getDynamicObject("nckd_payrollgrp");
+        DynamicObjectCollection payRollGrps = (DynamicObjectCollection)model.getValue("nckd_mulpayrollgrp");
+        List<Long> groupIds = payRollGrps.stream().map(obj -> obj.getDynamicObject("fbasedataid").getLong("id")).collect(Collectors.toList());
         // 单据上选择的年度字段,实际值是yyyy-01-01
         Date calYear = dyn.getDate("nckd_calyear");
+        // 排除薪资核算组
+        List<Long> excludeGroupIds = SwcUtils.getExcludePayRollGroupIds(calYear);
+        groupIds.removeAll(excludeGroupIds);
         // 获取年度最后一天
         Date endDate = SwcUtils.getLastDayOfYear(calYear);
         // 声明service
-        AnnualIncomeService service = new AnnualIncomeService(Collections.singletonList(payRollGrp.getLong("id")), calYear, endDate);
-        // 获取核算人员信息,一个核算人员一条记录
-        DynamicObjectCollection calPersonDyns = service.queryCalPersonByPayRollGroup();
-        List<Long> calPersonIds = calPersonDyns.stream().map((o) -> {
-            return o.getLong("id");
-        }).collect(Collectors.toList());
-        // 获取薪酬项目ID,这里固定为应发工资 JT_283
-        List<String> itemNos = new ArrayList<String>();
-        itemNos.add("JT_283");
-        List<Long> itemIds = SwcUtils.getSalaryItemIdByNumber(itemNos);
-        // 获取薪资明细数据 一个核算人员一条<k1,v1<k2,v2>>,k1=核算人员ID,k2=薪酬项目ID,v2=金额
-        Map<Long, Map<Long, Object>> salaryMap = service.querySalaryDetail(calPersonIds, itemIds);
-
-        // 把核算人员相关信息和薪资明细合并在一起
-        Map<Long, Map<String, Object>> unionMap = (Map) calPersonDyns.stream().collect(Collectors.toMap((dyx) -> {
-            return dyx.getLong("id");
-        }, (dyx) -> {
-            Map map = new HashMap();
-            map.put("employeeId", dyx.getLong("hsbs_employee.id"));
-            map.put("idCardNo", dyx.getLong("hsbs_percre.number"));
-            map.put("payRollDate", dyx.getDate("hsas_calpayrolltask.payrolldate"));
-            map.put("amount", salaryMap.get(dyx.getLong("id")).get(itemIds.get(0)));
-            return map;
-        }, (key1, key2) -> {
-            return key2;
-        }));
-        // 按照employeeId提取出来
-        List<Map<String, Object>> finalResult = dealGroupData(unionMap);
-        // 排除人员ID
-        List<Long> excludeEmployeeId = service.queryIncomeBillEmployeeId();
+        AnnualIncomeService service = new AnnualIncomeService(groupIds, calYear, endDate);
+        DynamicObjectCollection resultDyns = service.querySalaryDetailBySql();
 
         // 界面赋值
-        for (Map map : finalResult) {
-            if(excludeEmployeeId.contains(map.get("employeeId"))) {
-                continue;
-            }
+        for (DynamicObject result : resultDyns) {
             int rowIndex = model.createNewEntryRow("nckd_entryentity");
-            model.setValue("nckd_employee", map.get("employeeId"), rowIndex);
-            model.setValue("nckd_idcardno", map.get("idCardNo"), rowIndex);
-            model.setValue("nckd_totalsalary", map.get("totalAmount"), rowIndex);
-            model.setValue("nckd_month", map.get("uniqueDateCount"), rowIndex);
+            model.setValue("nckd_payrollgrp", result.get("groupId"), rowIndex);
+            model.setValue("nckd_employee", result.get("employeeId"), rowIndex);
+            model.setValue("nckd_idcardno", result.get("idCardNo"), rowIndex);
+            model.setValue("nckd_totalsalary", result.get("amount"), rowIndex);
+            model.setValue("nckd_month", result.get("monthCount"), rowIndex);
         }
 
+        // 排除人员ID
+        // List<Long> excludeEmployeeId = service.queryIncomeBillEmployeeId();
+
+        // 获取核算人员信息,一个核算人员一条记录
+//        DynamicObjectCollection calPersonDyns = service.queryCalPersonByPayRollGroup();
+//        List<Long> calPersonIds = calPersonDyns.stream().map((o) -> {
+//            return o.getLong("id");
+//        }).collect(Collectors.toList());
+//        // 获取薪酬项目ID,这里固定为应发工资 JT_283
+//        List<String> itemNos = new ArrayList<String>();
+//        itemNos.add("JT_283");
+//        List<Long> itemIds = SwcUtils.getSalaryItemIdByNumber(itemNos);
+//        // 获取薪资明细数据 一个核算人员一条<k1,v1<k2,v2>>,k1=核算人员ID,k2=薪酬项目ID,v2=金额
+//        Map<Long, Map<Long, Object>> salaryMap = service.querySalaryDetail(calPersonIds, itemIds);
+//
+//        // 把核算人员相关信息和薪资明细合并在一起
+//        Map<Long, Map<String, Object>> unionMap = (Map) calPersonDyns.stream().collect(Collectors.toMap((dyx) -> {
+//            return dyx.getLong("id");
+//        }, (dyx) -> {
+//            Map map = new HashMap();
+//            map.put("employeeId", dyx.getLong("hsbs_employee.id"));
+//            map.put("idCardNo", dyx.getString("hsbs_percre.number"));
+//            map.put("payRollDate", dyx.getDate("hsas_calpayrolltask.payrolldate"));
+//            map.put("amount", salaryMap.get(dyx.getLong("id")).get(itemIds.get(0)));
+//            return map;
+//        }, (key1, key2) -> {
+//            return key2;
+//        }));
+//        // 按照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);
+//            model.setValue("nckd_totalsalary", map.get("totalAmount"), rowIndex);
+//            model.setValue("nckd_month", map.get("uniqueDateCount"), rowIndex);
+//        }
+
     }
 
     public List<Map<String, Object>> dealGroupData (Map<Long, Map<String, Object>> unionMap) {

+ 8 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/utils/SwcUtils.java

@@ -99,6 +99,14 @@ public class SwcUtils {
         return sb;
     }
 
+    public static List<Long> getExcludePayRollGroupIds(Date startDate) {
+        List<Long> excludeGroupIds = new ArrayList<Long>();
+        QFilter filter = new QFilter("nckd_calyear", QCP.equals, startDate);
+        DynamicObjectCollection cols = SwcConstant.SALANNUALINCOMEBILL_ENTITY.queryOriginalCollection("nckd_entryentity.nckd_payrollgrp.id", filter.toArray());
+        excludeGroupIds.addAll(cols.stream().map(obj -> obj.getLong("nckd_entryentity.nckd_payrollgrp.id")).collect(Collectors.toList()));
+        return excludeGroupIds;
+    }
+
     public static String dateToStr(Date date) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         return sdf.format(date);