|
|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|