Forráskód Böngészése

feat(swc): 优化薪资年度收入查询和核算人员数据处理逻辑

Tyx 6 napja
szülő
commit
9f34525ba4

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

@@ -3,5 +3,9 @@ package nckd.jxccl.sit.hcsi.common.constant;
 import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
 
 public class SitConstant {
+    /*社保档案*/
     public static final HRBaseServiceHelper SINSURFILE_HELPER = new HRBaseServiceHelper("hcsi_sinsurfile");
+
+    /*业务项目*/
+    public static final HRBaseServiceHelper BIZITEM_HELPER = new HRBaseServiceHelper("hsbs_bizitem");
 }

+ 4 - 1
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/formplugin/web/datacomparison/DetailCompareBillEdit.java

@@ -16,6 +16,7 @@ import kd.bos.form.operate.FormOperate;
 import kd.bos.form.plugin.AbstractFormPlugin;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
+import nckd.jxccl.sit.hcsi.business.datacomparison.DataComparisonPushService;
 import nckd.jxccl.sit.hcsi.business.datacomparison.DataComparisonQueryService;
 
 import java.math.BigDecimal;
@@ -136,7 +137,9 @@ public class DetailCompareBillEdit extends AbstractFormPlugin {
 
 
     private void doPush() {
-        logger.info("推送数据到算薪系统");
+        logger.info("推送数据到前端业务数据");
+        DataComparisonPushService service = new DataComparisonPushService();
+
     }
 
     /**

+ 14 - 21
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/business/annualincome/AnnualIncomeService.java

@@ -1,12 +1,17 @@
 package nckd.jxccl.swc.hcdm.business.annualincome;
 
 
+import kd.bos.algo.DataSet;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.entity.QueryEntityType;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
+import kd.bos.orm.ORM;
 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;
@@ -38,9 +43,10 @@ public class AnnualIncomeService {
      * @param calPersonIds
      * @param itemIds
      */
-    public void querySalaryDetail(List<Long> calPersonIds, List<Long> itemIds) {
+    public Map<Long, Map<Long, Object>> querySalaryDetail(List<Long> calPersonIds, List<Long> itemIds) {
         logger.info("开始查询薪资明细数据,参数:{},{}", calPersonIds, itemIds);
         Map<Long, Map<Long, Object>> map = CalResultQueryService.get().getSalaryResult(calPersonIds, itemIds);
+        return map;
     }
 
 
@@ -82,32 +88,19 @@ public class AnnualIncomeService {
     }
     /**
      * 根据核算任务ID获取核算人员
-     *
+     * 标品CalResultQueryService.get().getCalPersonInfos会报错,详见问题列表52项;
+     * 新增一个hsas_salarycalresultqueryex查询
+     * 这里改成先通过getCalPersonIds获取到核算人员ID,再获取相关信息
      * @param taskIds
      * @return
      */
     private DynamicObjectCollection queryCalPersonByCalPayRollTask (List<Long> taskIds) {
         logger.info("开始查询核算人员数据,参数:{}", taskIds);
-//        //QFilter filter = new QFilter("hsas_calpayrolltask.id", QCP.in, taskIds);
-//        QFilter filter = new QFilter("filenumber", QCP.equals, "999999");
-//        // 计薪人员,工号,证件号
-//        List<String> selectFields = new ArrayList<String>();
-//        //selectFields.add("employee.id");
-//        selectFields.add("filenumber");
-//        //selectFields.add("hsas_calpayrolltask.id");
-//        //selectFields.add("hsbs_percre.number");
-//        DynamicObjectCollection calPersonIds = CalResultQueryService.get().getCalPersonInfos(selectFields, filter.toArray(), null, 0, 1000);
-//        return calPersonIds;
-        
-        QFilter filter = new QFilter("empnumber", QCP.equals, "999999");
-        List<String> selectFields = new ArrayList<>(SWCBaseConstants.INITCAPACITY_ARRAYLIST);
-        selectFields.add("id");
-        selectFields.add("empnumber");
-        DynamicObjectCollection calPersonCols = CalResultQueryService.get().getCalPersonInfos(selectFields, new QFilter[]{filter}, "id", 0, 1000);
+        QFilter filter = new QFilter("hsas_calpayrolltask.id", QCP.in, taskIds);
+        QueryEntityType queryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType("hsas_salarycalresultqueryex");
+        DataSet dataSet = HRQueryEntityHelper.getInstance().getQueryDataSet(queryEntityType, "id,hsbs_percre.number,hsbs_employee.id,hsbs_employee.empnumber,hsas_calpayrolltask.payrolldate", new QFilter[]{filter}, "id", false, 0, 1000);
+        DynamicObjectCollection calPersonCols = ORM.create().toPlainDynamicObjectCollection(dataSet);
         return calPersonCols;
-        
-        
-        
     }
 
 }

+ 77 - 13
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/annualincome/SalAnnualIncomeBillEdit.java

@@ -1,6 +1,5 @@
 package nckd.jxccl.swc.hcdm.formplugin.annualincome;
 
-import kd.ai.gai.flow.dt.D;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.utils.ObjectUtils;
@@ -10,19 +9,13 @@ import kd.bos.form.events.AfterDoOperationEventArgs;
 import kd.bos.form.events.BeforeDoOperationEventArgs;
 import kd.bos.form.operate.FormOperate;
 import kd.bos.form.plugin.AbstractFormPlugin;
-import kd.bos.orm.query.QCP;
-import kd.bos.orm.query.QFilter;
-import kd.epm.eb.common.utils.CalendarHelper;
-import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
 import kd.sdk.plugin.Plugin;
 import nckd.jxccl.swc.hcdm.business.annualincome.AnnualIncomeService;
 import nckd.jxccl.swc.utils.SwcUtils;
 
-import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.EventObject;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Tyx 2025-11-05
@@ -87,15 +80,86 @@ public class SalAnnualIncomeBillEdit extends AbstractFormPlugin implements Plugi
         Date endDate = SwcUtils.getLastDayOfYear(calYear);
         // 声明service
         AnnualIncomeService service = new AnnualIncomeService(payRollGrp.getLong("id"), calYear, endDate);
-        // 获取核算人员信息
+        // 获取核算人员信息,一个核算人员一条记录
         DynamicObjectCollection calPersonDyns = service.queryCalPersonByPayRollGroup();
-//        List<Long> calPersonIds = 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);
-//        service.querySalaryDetail(calPersonIds, itemIds);
+        // 获取薪资明细数据 一个核算人员一条<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);
+
+
+        // 界面赋值
+        for (Map map : finalResult) {
+            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) {
+        Map<String, Map<String, Object>> result = new HashMap<>();
+        Iterator<Long> it = unionMap.keySet().iterator();
+        while(it.hasNext()) {
+            Map<String, Object> record = unionMap.get(it.next());
+            String key = record.get("employeeId") + "_" + record.get("idCardNo");
+
+            if (!result.containsKey(key)) {
+                Map<String, Object> summary = new HashMap<>();
+                summary.put("employeeId", record.get("employeeId"));
+                summary.put("idCardNo", record.get("idCardNo"));
+                summary.put("totalAmount", new BigDecimal("0"));
+                summary.put("uniqueDates", new HashSet<String>());
+                result.put(key, summary);
+            }
 
+            Map<String, Object> summary = result.get(key);
+            // 累加金额
+            BigDecimal currentAmount = (BigDecimal) summary.get("totalAmount");
+            summary.put("totalAmount", currentAmount.add((BigDecimal) record.get("amount")));
+
+            // 添加日期到集合中(自动去重)
+            @SuppressWarnings("unchecked")
+            Set<Date> uniqueDates = (Set<Date>) summary.get("uniqueDates");
+            uniqueDates.add((Date) record.get("payRollDate"));
+        }
+
+        // 转换结果格式,将Set的大小作为日期计数
+        List<Map<String, Object>> finalResult = new ArrayList<>();
+        for (Map<String, Object> summary : result.values()) {
+            Map<String, Object> finalRecord = new HashMap<>();
+            finalRecord.put("employeeId", summary.get("employeeId"));
+            finalRecord.put("idCardNo", summary.get("idCardNo"));
+            finalRecord.put("totalAmount", summary.get("totalAmount"));
+            @SuppressWarnings("unchecked")
+            Set<Date> uniqueDates = (Set<Date>) summary.get("uniqueDates");
+            finalRecord.put("uniqueDateCount", uniqueDates.size());
+            finalResult.add(finalRecord);
+        }
+
+        return finalResult;
+    }
 }

+ 6 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hpdi/business/coordination/api/SwcCoordBizExtRegister.java

@@ -1,5 +1,6 @@
 package nckd.jxccl.swc.hpdi.business.coordination.api;
 
+import kd.hr.hbp.business.coordination.api.ext.CoordBizBeforeGenerateHandler;
 import kd.hr.hbp.business.coordination.api.ext.CoordBizExtRegister;
 import kd.hr.hbp.business.coordination.model.CoordBizContext;
 
@@ -14,4 +15,9 @@ public class SwcCoordBizExtRegister implements CoordBizExtRegister {
         CoordBizExtRegister.super.registerHandler(context);
         context.registerHandlers(CoordBizContext.CoordBizStage.END_OPERATE, new SwcCoordBizSaveHandler());
     }
+
+    @Override
+    public CoordBizBeforeGenerateHandler beforeGenerateHandler() {
+        return kd.hr.hbp.business.coordination.api.ext.CoordBizBeforeGenerateHandler.Default.DEFAULT;
+    }
 }