Ver Fonte

feat: 新增年度收入统计功能相关服务类和表单插件

Tyx há 2 semanas atrás
pai
commit
013592edc8

+ 113 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/business/annualincome/AnnualIncomeService.java

@@ -0,0 +1,113 @@
+package nckd.jxccl.swc.hcdm.business.annualincome;
+
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+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.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * Tyx 2025-11-05
+ * 年度收入相关单据用服务类
+ */
+public class AnnualIncomeService {
+
+    private static final Log logger = LogFactory.getLog(AnnualIncomeService.class);
+    Long groupId;
+    Date startDate;
+    Date endDate;
+
+    public AnnualIncomeService(Long groupId, Date startDate, Date endDate) {
+        this.groupId = groupId;
+        this.startDate = startDate;
+        this.endDate = endDate;
+    }
+
+
+    /**
+     * 根据核算人员+薪酬项目获取薪资明细
+     * @param calPersonIds
+     * @param itemIds
+     */
+    public void querySalaryDetail(List<Long> calPersonIds, List<Long> itemIds) {
+        logger.info("开始查询薪资明细数据,参数:{},{}", calPersonIds, itemIds);
+        Map<Long, Map<Long, Object>> map = CalResultQueryService.get().getSalaryResult(calPersonIds, itemIds);
+    }
+
+
+    /**
+     * 通过薪资核算组获取核算人员
+     *
+     * @return
+     */
+    public DynamicObjectCollection queryCalPersonByPayRollGroup() {
+        // 先获取核算任务ID
+        List<Long> taskIds = queryCalPayRollTaskByPayRollGroup();
+        // 再根据任务ID获取核算人员
+        return queryCalPersonByCalPayRollTask(taskIds);
+    }
+
+    /**
+     * 根据薪资核算组+日期范围获取核算任务
+     * @return
+     */
+    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());
+        List<Long> taskIds = (List) Arrays.stream(taskCols).map((o) -> {
+            return o.getLong("id");
+        }).collect(Collectors.toList());
+        return taskIds;
+    }
+    /**
+     * 根据薪资核算组获取核算任务
+     * @param filter 过滤条件
+     * @return
+     */
+    private DynamicObject[] queryCalPayRollTaskByPayRollGroup (String selectFields, QFilter[] filter) {
+        logger.info("开始查询核算任务数据,参数:{}", filter.toString());
+        return SwcConstant.CALPAYROLLTASK_HELPER.load(selectFields, filter);
+    }
+    /**
+     * 根据核算任务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);
+        return calPersonCols;
+        
+        
+        
+    }
+
+}

+ 101 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/annualincome/SalAnnualIncomeBillEdit.java

@@ -0,0 +1,101 @@
+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;
+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.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;
+
+/**
+ * Tyx 2025-11-05
+ * 年收入证明统计单表单插件 【nckd_salinnualincomebill】
+ */
+public class SalAnnualIncomeBillEdit extends AbstractFormPlugin implements Plugin {
+
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+    }
+
+    @Override
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+        FormOperate formOperate = (FormOperate)args.getSource();
+        String key = formOperate.getOperateKey();
+        switch (key) {
+            case "donothing_query":
+                beforeDoQueryVerify(args);
+                break;
+        }
+    }
+
+    private void beforeDoQueryVerify(BeforeDoOperationEventArgs args) {
+        IDataModel model = this.getModel();
+        DynamicObject dyn = model.getDataEntity();
+        DynamicObject payRollGrp = dyn.getDynamicObject("nckd_payrollgrp");
+        if(ObjectUtils.isEmpty(payRollGrp)) {
+            args.setCancel(true);
+            this.getView().showTipNotification("请先选择薪资核算组!");
+        }
+
+        Date calYear = dyn.getDate("nckd_calyear");
+        if(ObjectUtils.isEmpty(calYear)) {
+            args.setCancel(true);
+            this.getView().showTipNotification("请先选择年度!");
+        }
+    }
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
+        super.afterDoOperation(afterDoOperationEventArgs);
+        IDataModel model = this.getModel();
+        IFormView view = this.getView();
+        String key = afterDoOperationEventArgs.getOperateKey();
+        switch (key) {
+            case "donothing_query":
+                doQuery();
+                break;
+        }
+    }
+
+    private void doQuery() {
+        IDataModel model = this.getModel();
+        DynamicObject dyn = model.getDataEntity();
+        DynamicObject payRollGrp = dyn.getDynamicObject("nckd_payrollgrp");
+        // 单据上选择的年度字段,实际值是yyyy-01-01
+        Date calYear = dyn.getDate("nckd_calyear");
+        // 获取年度最后一天
+        Date endDate = SwcUtils.getLastDayOfYear(calYear);
+        // 声明service
+        AnnualIncomeService service = new AnnualIncomeService(payRollGrp.getLong("id"), calYear, endDate);
+        // 获取核算人员信息
+        DynamicObjectCollection calPersonDyns = service.queryCalPersonByPayRollGroup();
+//        List<Long> calPersonIds = service.queryCalPersonByPayRollGroup();
+        // 获取薪酬项目ID,这里固定为应发工资 JT_283
+        List<String> itemNos = new ArrayList<String>();
+        itemNos.add("JT_283");
+        List<Long> itemIds = SwcUtils.getSalaryItemIdByNumber(itemNos);
+//        service.querySalaryDetail(calPersonIds, itemIds);
+    }
+
+
+}