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