Переглянути джерело

1.职级变更同步差旅报销级别任务:HR人员主任职职级更新时,次日通过调度任务更新差旅报销级别。

lisheng 4 днів тому
батько
коміт
5fd76f5567

+ 131 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/PersonReimLeverSyncTask.java

@@ -0,0 +1,131 @@
+package nckd.jimin.jyyy.fi.task;
+
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.exception.KDException;
+import kd.bos.logging.Log;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.schedule.api.StopTask;
+import kd.bos.schedule.executor.AbstractTask;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.basedata.BaseDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.util.StringUtils;
+import nckd.jimin.jyyy.fi.common.constant.BillTypeConstants;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import kd.bos.logging.LogFactory;
+
+
+/**
+ * 同步人员报销级别
+ */
+public class PersonReimLeverSyncTask extends AbstractTask implements StopTask {
+
+    private static final Log log = LogFactory.getLog(PersonReimLeverSyncTask.class);
+
+    private static final String SYNCDATE = "syncdate";
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        log.info("-------- PersonReimLeverSyncTask 启动同步人员报销级别任务 --------");
+
+        LocalDate yesterday = getYesterday(map);
+        // 昨天最早的日期时间(00:00:00)
+        LocalDateTime startOfYesterday = yesterday.atStartOfDay();
+        Date beginDate = Date.from(startOfYesterday.atZone(ZoneId.systemDefault()).toInstant());
+        // 昨天最晚的日期时间(23:59:59)
+        LocalDateTime endOfYesterday = yesterday.atTime(LocalTime.MAX);
+        Date endDate = Date.from(endOfYesterday.atZone(ZoneId.systemDefault()).toInstant());
+
+
+
+        // 获取昨天
+        DynamicObjectCollection changeJobCol = QueryServiceHelper.query(BillTypeConstants.HRPI_EMPJOBREL, "person.id,person.number,joblevel.id", new QFilter[]{
+                new QFilter("startdate", QCP.large_equals, beginDate),
+                new QFilter("startdate", QCP.less_equals, endDate),
+                new QFilter("businessstatus", QCP.equals, "1"),
+                new QFilter("iscurrentversion", QCP.equals, "1")
+        });
+        log.info("changeJobCol size : {}" , changeJobCol.size());
+        changeJobCol.stream().forEach(changeJob -> syncReunimLever(changeJob));
+        log.info("-------- PersonReimLeverSyncTask 同步人员报销级别任务结束 --------");
+    }
+
+    /**
+     * 获取同步日期
+     * @param map
+     * @return
+     */
+    protected LocalDate getYesterday(Map<String, Object> map) {
+        if(map.containsKey(SYNCDATE) && StringUtils.isNotEmpty((String)map.get(SYNCDATE))){
+            return LocalDate.parse((String)map.get(SYNCDATE), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        }else{
+            return LocalDate.now().minusDays(1);
+        }
+    }
+    /**
+     * 同步人员报销级别
+     * @param changeJob
+     */
+    protected void syncReunimLever(DynamicObject changeJob) {
+        // 获取人员ID
+        Long personId = changeJob.getLong("person.id");
+        // 人员编码
+        String personNumber = changeJob.getString("person.number");
+        // 获取职级ID
+        Long jobId = changeJob.getLong("joblevel.id");
+        DynamicObject potisionInfo = fetchPositionInfo(personId);
+        if(potisionInfo == null) {
+            log.info("人员 {} 职位信息不存在", personId);
+            return;
+        }
+        String companyNumber = potisionInfo.getString("company.number");
+        DynamicObject company = QueryServiceHelper.queryOne("bos_org", "id", new QFilter[]{
+                new QFilter("number", QCP.equals, companyNumber)
+        });
+        DynamicObject reimLever = getReimLever(jobId, company.getLong("id"));
+        if(reimLever != null){
+            DynamicObject realReimSettingQuery = QueryServiceHelper.queryOne("er_reimbursesetting_rel", "id", new QFilter[]{
+                    new QFilter("user.number", QCP.equals, personNumber),
+                    new QFilter("company", QCP.equals, company.getLong("id"))
+            });
+            // 存在则修改
+            if(realReimSettingQuery != null){
+                DynamicObject reimSettingInfo = BusinessDataServiceHelper.loadSingle(realReimSettingQuery.get("id"),"er_reimbursesetting_rel");
+                reimSettingInfo.set("reimburselevel",reimLever.get("id"));
+                SaveServiceHelper.save(new DynamicObject[]{ reimSettingInfo });
+            }
+        }
+
+    }
+    private DynamicObject fetchPositionInfo(Long personId) {
+        return QueryServiceHelper.queryOne(BillTypeConstants.HRPI_EMPPOSORGREL, "company.number", new QFilter[]{
+                new QFilter("businessstatus", QCP.less_equals, "1"),
+                new QFilter("iscurrentversion", QCP.less_equals, "1"),
+                new QFilter("person.id", QCP.equals, personId),
+                new QFilter("isprimary", QCP.less_equals, "1")
+        });
+    }
+
+    private DynamicObject getReimLever(Long jobId , Long companyId) {
+         // 查询差旅级别
+        List<QFilter> leverFilterList = new ArrayList<>();
+        // 基础资料标准过滤条件
+        leverFilterList.add(BaseDataServiceHelper.getBaseDataFilter("er_reimburselevel", companyId));
+        leverFilterList.add(new QFilter("enable", QCP.equals,"1"));
+        leverFilterList.add(new QFilter("nckd_joblevelhr.fbasedataid", QCP.equals,jobId));
+        return QueryServiceHelper.queryOne("er_reimburselevel", "id", leverFilterList.toArray(new QFilter[0]));
+    }
+
+}