浏览代码

feat(swc): 新增年收入批量生成功能并优化数据查询

Tyx 1 周之前
父节点
当前提交
384f95580b

+ 3 - 3
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/sit/hcsi/business/datacomparison/DataComparisonQueryService.java

@@ -106,7 +106,7 @@ public class DataComparisonQueryService {
         DataSet sumSet2 = dataSet2.filter("type = '2'").groupBy(new String[]{"welfarepayer","welfaretypeid","empnumber","empname","empidcard", "employee", "type"}).sum("value").sum("value1").finish();
 
         // join
-        JoinDataSet joinDataSet = sumSet1.join(sumSet2).on("welfarepayer", "welfarepayer").on("welfaretypeid", "welfaretypeid").on("empnumber", "empnumber").on("empname", "empname").on("empidcard", "empidcard");
+        JoinDataSet joinDataSet = sumSet1.join(sumSet2).on("welfarepayer", "welfarepayer").on("welfaretypeid", "welfaretypeid").on("empname", "empname").on("empidcard", "empidcard");
         DataSet dataSet = joinDataSet.select(new String[]{"welfarepayer", "welfaretypeid", "empnumber", "empname", "empidcard", "employee", "type", "value as personSysValue","value1 as personSysValuea"}, new String[]{"value as companySysValue","value1 as companySysValuea"}).finish();
 
         return dataSet;
@@ -135,7 +135,7 @@ public class DataComparisonQueryService {
         DataSet sumSet2 = dataSet2.filter("type = '2'").groupBy(new String[]{"welfarepayer","welfaretypeid","empnumber","empname","empidcard","type"}).sum("value").sum("value1").finish();
 
         // join
-        JoinDataSet joinDataSet = sumSet1.join(sumSet2).on("welfarepayer", "welfarepayer").on("welfaretypeid", "welfaretypeid").on("empnumber", "empnumber").on("empname", "empname").on("empidcard", "empidcard");
+        JoinDataSet joinDataSet = sumSet1.join(sumSet2).on("welfarepayer", "welfarepayer").on("welfaretypeid", "welfaretypeid").on("empname", "empname").on("empidcard", "empidcard");
         DataSet dataSet = joinDataSet.select(new String[]{"welfarepayer", "welfaretypeid", "empnumber", "empname", "empidcard", "type", "value as personOutValue", "value1 as personOutValuea"}, new String[]{"value as companyOutValue","value1 as companyOutValuea"}).finish();
 
         return dataSet;
@@ -143,7 +143,7 @@ public class DataComparisonQueryService {
 
     public DataSet joinFinallyDataSet (DataSet groupDataSet, DataSet groupDataSetOut) {
         DataSet finalDataSet = groupDataSet.join(groupDataSetOut).on("welfarepayer", "welfarepayer").on("welfaretypeid", "welfaretypeid").
-                on("empnumber", "empnumber").on("empname", "empname").
+                on("empname", "empname").
                 on("empidcard", "empidcard").select(leftFields, rightFields).finish();
         return finalDataSet;
     }

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

@@ -26,12 +26,12 @@ import java.util.stream.Collectors;
 public class AnnualIncomeService {
 
     private static final Log logger = LogFactory.getLog(AnnualIncomeService.class);
-    Long groupId;
+    List<Long> groupIds;
     Date startDate;
     Date endDate;
 
-    public AnnualIncomeService(Long groupId, Date startDate, Date endDate) {
-        this.groupId = groupId;
+    public AnnualIncomeService(List<Long> groupIds, Date startDate, Date endDate) {
+        this.groupIds = groupIds;
         this.startDate = startDate;
         this.endDate = endDate;
     }
@@ -66,8 +66,8 @@ public class AnnualIncomeService {
      * @return
      */
     private List<Long> queryCalPayRollTaskByPayRollGroup () {
-        logger.info("开始查询核算任务数据,参数:{},{},{}", groupId, startDate, endDate);
-        QFilter filter = new QFilter("payrollgroup.id", QCP.equals, groupId);
+        logger.info("开始查询核算任务数据,参数:{},{},{}", groupIds, startDate, endDate);
+        QFilter filter = new QFilter("payrollgroup.id", QCP.in, groupIds);
         // 2025-11-25 Tyx
         // 由payrolldate薪资所属年月 改为 paydate预计支付日期
         filter.and("paydate", QCP.large_equals, startDate);
@@ -110,7 +110,7 @@ public class AnnualIncomeService {
      * @return
      */
     public List<Long> queryIncomeBillEmployeeId() {
-        QFilter filter = new QFilter("nckd_payrollgrp.id", QCP.equals, this.groupId);
+        QFilter filter = new QFilter("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";

+ 89 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/hcdm/formplugin/annualincome/IncomeBatchAddnewEdit.java

@@ -0,0 +1,89 @@
+package nckd.jxccl.swc.hcdm.formplugin.annualincome;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.IDataModel;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.sdk.plugin.Plugin;
+import nckd.jxccl.swc.constants.SwcConstant;
+import nckd.jxccl.swc.hcdm.business.annualincome.AnnualIncomeService;
+import nckd.jxccl.swc.utils.SwcUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.EventObject;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 动态表单插件
+ */
+public class IncomeBatchAddnewEdit extends AbstractFormPlugin implements Plugin {
+
+
+    @Override
+    public void afterCreateNewData(EventObject e) {
+        super.afterCreateNewData(e);
+        //年份默认当前日期的上年-01-01
+    }
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
+        super.afterDoOperation(afterDoOperationEventArgs);
+        String key = afterDoOperationEventArgs.getOperateKey();
+        switch(key) {
+            case "donothing_batchaddnew":
+                doBatchAddnew();
+        }
+    }
+
+
+    /**
+     * 批量生成年收入数据:
+     * 1、窗口中如果选择了核算组则按选择的核算组生成数据,没选择的话生成全部核算组的数据
+     * 2、如果按照年份+核算组已有数据,则不生成并提示
+     * 3、
+     */
+    private void doBatchAddnew() {
+        DynamicObject dyn = this.getModel().getDataEntity();
+        // 获取当前窗口选择的年份 实际值是yyyy-01-01
+        Date startDate = dyn.getDate("nckd_year");
+        // 获取薪资核算组Ids
+        List<Long> groupIds = getPayRollGroupIds(startDate);
+        // 获取年度最后一天
+        Date endDate = SwcUtils.getLastDayOfYear(startDate);
+
+        AnnualIncomeService service = new AnnualIncomeService(groupIds, startDate, endDate);
+        //service.
+    }
+
+    public List<Long> getPayRollGroupIds (Date startDate) {
+        List<Long> groupIds = new ArrayList<Long>();
+        IDataModel model = this.getModel();
+
+        // 查出现在已经生成了多少薪资核算组的数据
+        List<Long> excludeGroupIds = getExcludePayRollGroupIds(startDate);
+
+        DynamicObjectCollection payRollGrpCols = (DynamicObjectCollection)model.getValue("nckd_mulpayrollgrp");
+        if(payRollGrpCols.size() == 0) {
+            groupIds = SwcUtils.getAllPayRollGrpIds();
+        }
+        else {
+            groupIds = payRollGrpCols.stream().map(obj -> obj.getDynamicObject("fbasedataid").getLong("id")).collect(Collectors.toList());
+        }
+        // 排除已经生成了数据的核算组
+        groupIds.removeAll(excludeGroupIds);
+        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;
+    }
+}

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

@@ -80,7 +80,7 @@ public class SalAnnualIncomeBillEdit extends AbstractFormPlugin implements Plugi
         // 获取年度最后一天
         Date endDate = SwcUtils.getLastDayOfYear(calYear);
         // 声明service
-        AnnualIncomeService service = new AnnualIncomeService(payRollGrp.getLong("id"), calYear, endDate);
+        AnnualIncomeService service = new AnnualIncomeService(Collections.singletonList(payRollGrp.getLong("id")), calYear, endDate);
         // 获取核算人员信息,一个核算人员一条记录
         DynamicObjectCollection calPersonDyns = service.queryCalPersonByPayRollGroup();
         List<Long> calPersonIds = calPersonDyns.stream().map((o) -> {

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

@@ -2,10 +2,15 @@ package nckd.jxccl.swc.hcdm.formplugin.annualincome;
 
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.dataentity.utils.StringUtils;
 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.operate.FormOperate;
 import kd.bos.list.IListView;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.query.QFilter;
@@ -25,6 +30,19 @@ public class SalAnnualIncomeBillList extends AbstractListPlugin implements Plugi
     @Override
     public void beforeDoOperation(BeforeDoOperationEventArgs args) {
         super.beforeDoOperation(args);
+        FormOperate formOperate = (FormOperate)args.getSource();
+        String opKey = formOperate.getOperateKey();
+        if (StringUtils.equals(opKey, "donothing_batchaddnew")) {
+            this.openBatchAddnewWindow(args);
+        }
+    }
+
+    private void openBatchAddnewWindow(BeforeDoOperationEventArgs args) {
+        FormShowParameter formShowParameter = new FormShowParameter();
+        formShowParameter.setFormId("nckd_incomebatchaddnew");
+        formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
+        formShowParameter.setCloseCallBack(new CloseCallBack(this, "batchAddnew"));
+        this.getView().showForm(formShowParameter);
     }
 
     @Override

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

@@ -2,6 +2,7 @@ package nckd.jxccl.swc.utils;
 
 import com.grapecity.documents.excel.H;
 import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
@@ -13,6 +14,7 @@ import java.time.temporal.TemporalAdjusters;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 public class SwcUtils {
 
@@ -48,5 +50,16 @@ public class SwcUtils {
         return itemIds;
     }
 
+    /**
+     * 获取所有薪资核算组ID
+     */
+    public static List<Long> getAllPayRollGrpIds () {
+        List<Long> groupIds = new ArrayList<Long>();
+        QFilter filter = new QFilter("iscurrentversion", QCP.equals, "1");
+        filter.and("enable", QCP.equals, "1");
+        DynamicObjectCollection groupCols = SwcConstant.PAYROLLGRP_HELPER.queryOriginalCollection("id", filter.toArray());
+        return groupCols.stream().map(obj -> obj.getLong("id")).collect(Collectors.toList());
+    }
+
 
 }