Explorar o código

feat(comparison): 新增数据比对查询服务实现类

Tyx hai 3 días
pai
achega
bba080bb12

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

@@ -0,0 +1,151 @@
+package nckd.jxccl.sit.hcsi.business.datacomparison;
+
+
+import kd.bos.algo.DataSet;
+import kd.bos.algo.JoinDataSet;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.IDataModel;
+import kd.bos.form.IFormView;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import nckd.jxccl.sit.hcsi.utils.ReportUtils;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Tyx 2025-10-31
+ * 数据比对服务类
+ */
+public class DataComparisonQueryService {
+    private static final Log logger = LogFactory.getLog(DataComparisonQueryService.class);
+    private static final String SINSURTASK = "hcsi_sinsurtask";
+    String[] leftFields = new String[]{"welfarepayer", "welfaretypeid", "empnumber", "empname", "empidcard", "type", "personSysValue", "companySysValue"};
+    String[] rightFields =  new String[]{"personOutValue", "companyOutValue"};
+    IDataModel model = null;
+    IFormView view = null;
+    public DataComparisonQueryService(IDataModel model,IFormView view) {
+        this.model = model;
+        this.view = view;
+    }
+
+    /**
+     * 查询执行实际方法
+     *
+     * @return
+     */
+    public DataSet doQuery() {
+        logger.info("Tyx begin DataComparisonQueryService.doQuery");
+        // 查询任务ID
+        List<Long> taskIds = queryTask();
+        // 根据计算任务Id+险种获取到计算结果明细数据
+        DataSet calPersonDataSet = queryCalPersonDetail(taskIds);
+        // 按照个人和单位分组汇总 type = 1为个人,type = 2为单位,这里仅为系统内数据
+        DataSet groupDataSet = groupCalPersonDetail(calPersonDataSet);
+        // 再关联外部数据导入
+        DataSet outsidePersonDetail = queryOutsidePersonDetail();
+        // 按照个人和单位分组汇总 type = 1为个人,type = 2为单位,这里仅为系统外数据
+        DataSet groupDataSetOut = groupCalPersonDetailOut(outsidePersonDetail);
+
+        // 再join
+        DataSet finalDataSet = joinFinallyDataSet(groupDataSet, groupDataSetOut);
+        return finalDataSet;
+    }
+
+    /**
+     * 查询导入任务ID
+     * @return
+     */
+    private List<Long> queryTask() {
+        // 社保期间
+        DynamicObject period = (DynamicObject)this.model.getValue("nckd_period");
+        // 参保单位
+        DynamicObject welfarepayer = (DynamicObject)this.model.getValue("nckd_welfarepayer");
+        QFilter taskFilter = new QFilter("sinsurperiod.id", QCP.equals, period.getPkValue());
+        taskFilter.and("welfarepayer.id", QCP.equals, welfarepayer.getPkValue());
+        // 查找社保计算任务
+        DynamicObjectCollection taskCols = queryDynamicObjectCollection(taskFilter, SINSURTASK, "id");
+        // 获取所有计算任务Id
+        List<Long> taskIds = taskCols.stream().map(obj -> obj.getLong("id")).collect(Collectors.toList());
+        return taskIds;
+    }
+
+    public DynamicObjectCollection queryDynamicObjectCollection(QFilter filter, String entityName, String selectFields) {
+        HRBaseServiceHelper helper = new HRBaseServiceHelper(entityName);
+        DynamicObjectCollection cols = helper.queryOriginalCollection(selectFields, new QFilter[]{filter});
+        return cols;
+    }
+
+    /**
+     * 获取人员计算详情数据-系统内数据
+     * @param taskIds
+     * @return
+     */
+    public DataSet queryCalPersonDetail(List<Long> taskIds) {
+        DynamicObjectCollection welfareTypeCols = (DynamicObjectCollection)model.getValue("nckd_welfaretype");
+        List<Long> welfareTypeIds = welfareTypeCols.stream().map(obj -> obj.getDynamicObject("fbasedataid").getLong("id")).collect(Collectors.toList());
+        return ReportUtils.queryCalPersonDetail(welfareTypeIds, taskIds);
+    }
+
+    /**
+     * 分组汇总人员明细
+     * @param calPersonDataSet
+     * @return
+     */
+    public DataSet groupCalPersonDetail (DataSet calPersonDataSet) {
+        calPersonDataSet.groupBy(new String[]{"welfarepayer","welfaretypeid","empnumber","empname","empidcard","type"}).sum("value");
+        DataSet dataSet1 = calPersonDataSet.copy();
+        DataSet dataSet2 = calPersonDataSet.copy();
+
+        // 按照类型分组汇总
+        DataSet sumSet1 = dataSet1.filter("type = '1'").groupBy(new String[]{"welfarepayer", "welfaretypeid", "empnumber", "empname", "empidcard", "type"}).sum("value").finish();
+        DataSet sumSet2 = dataSet2.filter("type = '2'").groupBy(new String[]{"welfarepayer","welfaretypeid","empnumber","empname","empidcard","type"}).sum("value").finish();
+
+        // join
+        JoinDataSet joinDataSet = sumSet1.join(sumSet2).on("welfarepayer", "welfarepayer").on("welfaretypeid", "welfaretypeid").on("empnumber", "empnumber").on("empname", "empname").on("empidcard", "empidcard");
+        DataSet dataSet = joinDataSet.select(new String[]{"welfarepayer", "welfaretypeid", "empnumber", "empname", "empidcard", "type", "value as personSysValue"}, new String[]{"value as companySysValue"}).finish();
+
+        return dataSet;
+    }
+
+    /**
+     * 获取人员计算详情数据-系统外数据
+     * @return
+     */
+    private DataSet queryOutsidePersonDetail() {
+        // 社保期间
+        DynamicObject period = (DynamicObject)this.model.getValue("nckd_period");
+        // 参保单位
+        DynamicObject welfarepayer = (DynamicObject)this.model.getValue("nckd_welfarepayer");
+        DynamicObjectCollection welfareTypeCols = (DynamicObjectCollection)model.getValue("nckd_welfaretype");
+        return ReportUtils.queryOutsidePersonDetail(period, welfarepayer, welfareTypeCols);
+    }
+
+    public DataSet groupCalPersonDetailOut (DataSet calPersonDataSet) {
+        calPersonDataSet.groupBy(new String[]{"welfarepayer","welfaretypeid","empnumber","empname","empidcard","type"}).sum("value");
+        DataSet dataSet1 = calPersonDataSet.copy();
+        DataSet dataSet2 = calPersonDataSet.copy();
+
+        // 按照类型分组汇总
+        DataSet sumSet1 = dataSet1.filter("type = '1'").groupBy(new String[]{"welfarepayer", "welfaretypeid", "empnumber", "empname", "empidcard", "type"}).sum("value").finish();
+        DataSet sumSet2 = dataSet2.filter("type = '2'").groupBy(new String[]{"welfarepayer","welfaretypeid","empnumber","empname","empidcard","type"}).sum("value").finish();
+
+        // join
+        JoinDataSet joinDataSet = sumSet1.join(sumSet2).on("welfarepayer", "welfarepayer").on("welfaretypeid", "welfaretypeid").on("empnumber", "empnumber").on("empname", "empname").on("empidcard", "empidcard");
+        DataSet dataSet = joinDataSet.select(new String[]{"welfarepayer", "welfaretypeid", "empnumber", "empname", "empidcard", "type", "value as personOutValue"}, new String[]{"value as companyOutValue"}).finish();
+
+        return dataSet;
+    }
+
+    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("empidcard", "empidcard").select(leftFields, rightFields).finish();
+        return finalDataSet;
+    }
+
+}