|
|
@@ -0,0 +1,110 @@
|
|
|
+package nckd.jxccl.sit.hcsi.rptdata;
|
|
|
+
|
|
|
+import kd.bos.algo.DataSet;
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
+import kd.bos.entity.report.AbstractReportListDataPlugin;
|
|
|
+import kd.bos.entity.report.FilterInfo;
|
|
|
+import kd.bos.entity.report.ReportQueryParam;
|
|
|
+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 kd.sdk.plugin.Plugin;
|
|
|
+import nckd.jxccl.sit.hcsi.utils.ReportUtils;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Tyx 2025-10-22
|
|
|
+ * 社保明细差异对比表取数插件 nckd_detailcomparerpt
|
|
|
+ */
|
|
|
+public class DetailCompareReportDataPlugin extends AbstractReportListDataPlugin implements Plugin {
|
|
|
+
|
|
|
+ private static final Log logger = LogFactory.getLog(DetailCompareReportDataPlugin.class);
|
|
|
+ private static final String SINSURTASK = "hcsi_sinsurtask";
|
|
|
+ private static final String CALPERSON = "hcsi_calperson";
|
|
|
+ private static final String SINSURIMPTASK = "nckd_sinsurimptask";
|
|
|
+ private static final String SINSURTEMPDATA = "nckd_sinsurtempdata";
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询数据:
|
|
|
+ * 1、先根据期间+参保单位获取到社保计算任务 【hcsi_sinsurtask】
|
|
|
+ * 2、根据社保计算任务获取到计算人员及明细 【hcsi_calperson】
|
|
|
+ * 3、根据期间+参保单位获取到外部系统导入任务和外部系统中间表数据 【nckd_sinsurimptask】和【nckd_sinsurtempdata】
|
|
|
+ * @param reportQueryParam
|
|
|
+ * @param o
|
|
|
+ * @return
|
|
|
+ * @throws Throwable
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable {
|
|
|
+ logger.info("-------- begin query data --------");
|
|
|
+ // 社保计算任务过滤条件
|
|
|
+ QFilter taskFilter = buildTaskFilter(reportQueryParam);
|
|
|
+ // 查找社保计算任务
|
|
|
+ DynamicObjectCollection taskCols = queryDynamicObjectCollection(taskFilter, SINSURTASK, "id");
|
|
|
+ // 获取所有计算任务Id
|
|
|
+ List<Long> taskIds = taskCols.stream().map(obj -> obj.getLong("id")).collect(Collectors.toList());
|
|
|
+ // 根据计算任务Id+险种获取到计算结果明细数据
|
|
|
+ DataSet calPersonDataSet = queryCalPersonDetail(reportQueryParam, taskIds);
|
|
|
+ // 按照个人和单位分组汇总 type = 1为个人,type = 2为单位
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public DataSet queryDataSet(ReportQueryParam reportQueryParam, QFilter filter, String entityName, String selectFields) {
|
|
|
+ HRBaseServiceHelper helper = new HRBaseServiceHelper(entityName);
|
|
|
+ DataSet dataSet = helper.queryDataSet("AttendanceRateReportQuery-Sbsent", selectFields, new QFilter[]{filter});
|
|
|
+ return dataSet;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 reportQueryParam
|
|
|
+ * @param taskIds
|
|
|
+ */
|
|
|
+ public DataSet queryCalPersonDetail(ReportQueryParam reportQueryParam, List<Long> taskIds) {
|
|
|
+ FilterInfo filterInfo = reportQueryParam.getFilter();
|
|
|
+ // 险种
|
|
|
+ DynamicObjectCollection welfareTypeCols = (DynamicObjectCollection)filterInfo.getFilterItem("nckd_welfaretype").getValue();
|
|
|
+ List<Long> welfareTypeIds = welfareTypeCols.stream().map(obj -> obj.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
|
|
|
+ return calPersonDataSet;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建查询条件
|
|
|
+ * @param reportQueryParam
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private QFilter buildTaskFilter(ReportQueryParam reportQueryParam) {
|
|
|
+ FilterInfo filterInfo = reportQueryParam.getFilter();
|
|
|
+ // 社保期间
|
|
|
+ DynamicObject period = (DynamicObject)filterInfo.getFilterItem("nckd_period").getValue();
|
|
|
+ // 参保单位
|
|
|
+ DynamicObject welfarepayer = (DynamicObject)filterInfo.getFilterItem("nckd_welfarepayer").getValue();
|
|
|
+ QFilter filter = new QFilter("sinsurperiod.id", QCP.equals, period.getPkValue());
|
|
|
+ filter.and("welfarepayer.id", QCP.equals, welfarepayer.getPkValue());
|
|
|
+ return filter;
|
|
|
+ }
|
|
|
+}
|