1
0

7 کامیت‌ها 6d20ab9ff9 ... 972c9e58a6

نویسنده SHA1 پیام تاریخ
  lisheng 972c9e58a6 Merge branch 'master' of http://111.75.220.136:10030/turborao/jyyy 1 هفته پیش
  lisheng e453954cdd 费用标准配置 1 هفته پیش
  lisheng c593663a0c 1.新增人员岗位、职级备份表及调度任务 1 هفته پیش
  lisheng bcf97bbc08 1.新增人员岗位、职级备份表及调度任务 1 هفته پیش
  lisheng 3b8d3526b7 报销工作台 1 هفته پیش
  lisheng 72c158cf55 单据收退换功能 1 هفته پیش
  lisheng 38388b251c 1.获取人员常驻出差地逻辑调整:增加datastatus、businessstatus等字段过滤 1 هفته پیش

+ 5 - 2
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/business/plugin/LocationCityPlugin.java

@@ -51,14 +51,17 @@ public class LocationCityPlugin {
         DynamicObject userInfo = QueryServiceHelper.queryOne("bos_user", "id,number", new QFilter("id", QCP.equals, userId).toArray());
         DynamicObject hrPerson = QueryServiceHelper.queryOne("hrpi_person", "id", new QFilter[]{
                 new QFilter("number", QCP.equals, userInfo.getString("number")),
-                new QFilter("iscurrentversion", QCP.equals, Boolean.TRUE)
+                new QFilter("iscurrentversion", QCP.equals, Boolean.TRUE),
+                new QFilter("datastatus", QCP.equals, "1"),
         });
 
         if(hrPerson != null){
             logger.info("hrPerson_id:" + hrPerson.getLong("id"));
             DynamicObject baseLocation = QueryServiceHelper.queryOne("hrpi_baselocation", "location.city.id", new QFilter[]{
                     new QFilter("person", QCP.equals, hrPerson.getLong("id")),
-                    new QFilter("iscurrentversion", QCP.equals, Boolean.TRUE)
+                    new QFilter("iscurrentversion", QCP.equals, Boolean.TRUE),
+                    new QFilter("datastatus", QCP.equals, "1"),
+                    new QFilter("businessstatus", QCP.equals, "1")
             });
 
             if(baseLocation != null){

+ 50 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/constant/JobPositionBakBillConstant.java

@@ -0,0 +1,50 @@
+package nckd.jimin.jyyy.fi.common.constant;
+
+public interface JobPositionBakBillConstant extends BillConstant{
+    /**
+     * 人员岗位职级备份表单据标识
+     */
+    String ENTITYID = "nckd_jobpositionbakbill";
+
+    /**
+     * 基本信息 - 同步人员
+     */
+    String KEY_NCKD_USER = "nckd_user";
+
+    /**
+     * 基本信息 - 更新时间
+     */
+    String KEY_NCKD_UPDATETIME = "nckd_updatetime";
+
+    /**
+     * 最新状态信息 - 组织(新)
+     */
+    String KEY_NCKD_ORG_NEW = "nckd_org_new";
+
+    /**
+     * 最新状态信息 - 岗位(新)
+     */
+    String KEY_NCKD_POSITION_NEW = "nckd_position_new";
+
+    /**
+     * 最新状态信息 - 职级(新)
+     */
+    String KEY_NCKD_JOBLEVEL_NEW = "nckd_joblevel_new";
+
+    /**
+     * 历史状态信息 - 组织(旧)
+     */
+    String KEY_NCKD_ORG_OLD = "nckd_org_old";
+
+    /**
+     * 历史状态信息 - 岗位(旧)
+     */
+    String KEY_NCKD_POSITION_OLD = "nckd_position_old";
+
+    /**
+     * 历史状态信息 - 职级(旧)
+     */
+    String KEY_NCKD_JOBLEVEL_OLD = "nckd_joblevel_old";
+
+
+}

+ 38 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/util/CommonUtils.java

@@ -3,10 +3,16 @@ package nckd.jimin.jyyy.fi.common.util;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import kd.bos.algo.DataSet;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.utils.StringUtils;
 import kd.bos.entity.operate.result.IOperateInfo;
 import kd.bos.entity.operate.result.OperateErrorInfo;
 import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.QueryServiceHelper;
 
 
 import java.util.*;
@@ -96,4 +102,36 @@ public class CommonUtils {
         calendar.setTime(date);
         return calendar.get(filed);
     }
+
+    public static DynamicObject getUserByHrPersonId(Object hrPersonId){
+        DynamicObject hrPersonInfo = QueryServiceHelper.queryOne("hrpi_person", "number", new QFilter("id", QCP.equals, hrPersonId).toArray());
+        if(hrPersonInfo == null){
+            return null;
+        }
+
+        String personNumber = hrPersonInfo.getString("number");
+        if(StringUtils.isEmpty(personNumber)){
+            return null;
+        }
+        return BusinessDataServiceHelper.loadSingleFromCache("bos_user", new QFilter("number",QCP.equals,personNumber).toArray());
+    }
+
+    public static Map<Long,Long> getUserByHrPersonId(List hrPersonIdList){
+        DynamicObjectCollection hrPersonCol = QueryServiceHelper.query("hrpi_person", "number", new QFilter("id", QCP.in, hrPersonIdList).toArray());
+        if(hrPersonCol == null || hrPersonCol.size() == 0){
+            return null;
+        }
+        Map<Long, String> idNumberMap = hrPersonCol.stream().collect(Collectors.toMap(dyn -> dyn.getLong("id"), dyn -> dyn.getString("number"), (k1, k2) -> k1));
+        DynamicObjectCollection userCol = QueryServiceHelper.query("bos_user", "id,number",new QFilter("number", QCP.in, idNumberMap.values()).toArray()   );
+        Map<String, Long> userNumberMap = userCol.stream().collect(Collectors.toMap(dyn -> dyn.getString("number"), dyn -> dyn.getLong("id"), (k1, k2) -> k1));
+        Map<Long, Long> idMap = new HashMap<>();
+        for(Map.Entry<Long, String> entryRow : idNumberMap.entrySet()){
+            Long personId = entryRow.getKey();
+            String personNumber = entryRow.getValue();
+            if(userNumberMap.containsKey(personNumber)){
+                idMap.put(personId,userNumberMap.get(personNumber));
+            }
+        }
+        return idMap;
+    }
 }

+ 2 - 2
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/HandInReceiveTicketPlugin.java

@@ -151,7 +151,7 @@ public class HandInReceiveTicketPlugin extends AbstractFormPlugin implements Row
         if(BillTypeConstants.ER_CHECKINGPAYBILL.equals(billlType)){
             companyField = "company";
         }
-        String selector = String.join(",",ErReimBurseBillConstant.ID,ErReimBurseBillConstant.KEY_BILLNO,ErReimBurseBillConstant.KEY_COMPANY,
+        String selector = String.join(",",ErReimBurseBillConstant.ID,ErReimBurseBillConstant.KEY_BILLNO,companyField,
                 ErReimBurseBillConstant.KEY_NCKD_HANDIN_PERSON,ErReimBurseBillConstant.KEY_NCKD_RECEIPT_PERSON);
         DataEntityPropertyCollection properties = EntityMetadataCache.getDataEntityType(billlType).getProperties();
         if(properties.containsKey(ErReimBurseBillConstant.KEY_NCKD_PAGEID)){
@@ -168,7 +168,7 @@ public class HandInReceiveTicketPlugin extends AbstractFormPlugin implements Row
 
             addScanBillEntry(tripReimBurseBill.getString(ErReimBurseBillConstant.KEY_BILLNO),getReceiptStatus(tripReimBurseBill),
                     tripReimBurseBill.get(ErReimBurseBillConstant.ID), billlType,
-                    tripReimBurseBill.getDynamicObject(ErReimBurseBillConstant.KEY_COMPANY).getPkValue(),
+                    tripReimBurseBill.getDynamicObject(companyField).getPkValue(),
                     pageId);
             return true;
         }

+ 2 - 1
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/LimitRelasetEdit.java

@@ -37,7 +37,8 @@ public class LimitRelasetEdit extends AbstractBillPlugIn {
                 }else{
                     dataCol = QueryServiceHelper.query(entityNumber, "id", new QFilter[]{
                             new QFilter("id", QCP.in, dataValues),
-                            new QFilter("iscurrentversion", QCP.equals, "1")
+                            new QFilter("iscurrentversion", QCP.equals, "1"),
+                            new QFilter("datastatus", QCP.equals, "1")
                     });
                 }
 

+ 1 - 1
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/ReimWorkBenchesFormPlugin.java

@@ -43,7 +43,7 @@ public class ReimWorkBenchesFormPlugin extends AbstractFormPlugin implements Tab
     public void beforeBindData(EventObject e) {
         super.beforeBindData(e);
         Tab tab = this.getControl(NCKD_TABAP);
-        tab.activeTab(NCKD_TAB_FLAG + ReimDetailTypeEnum.APPLY.getKey());
+        tab.activeTab(NCKD_TAB_FLAG + ReimDetailTypeEnum.REIMING.getKey());
     }
 
     @Override

+ 11 - 6
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/ReimWorkBenchesHelper.java

@@ -1,12 +1,10 @@
 package nckd.jimin.jyyy.fi.plugin.form;
 
-import com.grapecity.documents.excel.Q;
 import kd.bos.algo.Algo;
 import kd.bos.algo.DataSet;
 import kd.bos.algo.DataType;
 import kd.bos.algo.RowMeta;
 import kd.bos.context.RequestContext;
-import kd.bos.entity.report.FilterInfo;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
 import kd.bos.orm.query.QCP;
@@ -130,7 +128,7 @@ public class ReimWorkBenchesHelper {
         DataSet dailyApplyDataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "er_dailyapplybill",
                 "id billid,bizdate applydate,'er_dailyapplybill' billtype,'er_dailyapplybill' pageid,billno billno,description description,applyamount applyamount," +
                         "approveamount approveamount,balanceamount balanceamount,billstatus billstatus,costcompany.id company,applier.id applier",
-                getFilterArr(projectPersonFilter,quickFilter,applyStatusFilter), "");
+                getFilterArr(projectPersonFilter,quickFilter,applyStatusFilter,new QFilter("balanceamount", QCP.large_than, BigDecimal.ZERO)), "");
         dataSetList.add(dailyVehDataSet);
         dataSetList.add(tripReqDataSet);
         dataSetList.add(dailyApplyDataSet);
@@ -139,15 +137,19 @@ public class ReimWorkBenchesHelper {
         QFilter loanPayFilter = new QFilter("billstatus",QCP.in,new String[]{"E","G"})
                 .and(new QFilter("balanceamount", QCP.large_than, BigDecimal.ZERO));
 
+        QFilter waitPayLoanPayFilter = new QFilter("billstatus",QCP.equals,"F")
+                .and(new QFilter("notpayamount", QCP.large_than, BigDecimal.ZERO).and(new QFilter("balanceamount", QCP.large_than, BigDecimal.ZERO)));
+
+
         DataSet dailyloanDataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "er_dailyloanbill",
                 "id billid,bizdate applydate,'er_dailyloanbill' billtype,'er_dailyloanbill' pageid,billno billno,description description,loanamount applyamount," +
                         "approveamount approveamount,balanceamount balanceamount,billstatus billstatus,costcompany.id company,applier.id applier",
-                getFilterArr(projectPersonFilter,quickFilter,loanPayFilter), "");
+                getFilterArr(projectPersonFilter,quickFilter,loanPayFilter.and(waitPayLoanPayFilter)), "");
 
         DataSet prepayBillDataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "er_prepaybill",
                 "id billid,bizdate applydate,'er_prepaybill' billtype,case when nckd_pageid = 'nckd_er_srmperpaybill' then 'nckd_er_srmperpaybill' else 'nckd_er_dailyloanbill' end pageid,billno billno,description description,loanamount applyamount," +
                         "approveamount approveamount,balanceamount balanceamount,billstatus billstatus,costcompany.id company,applier.id applier",
-                getFilterArr(projectPersonFilter,quickFilter,loanPayFilter), "");
+                getFilterArr(projectPersonFilter,quickFilter,loanPayFilter.and(waitPayLoanPayFilter)), "");
 
         dataSetList.add(dailyloanDataSet);
         dataSetList.add(prepayBillDataSet);
@@ -225,7 +227,10 @@ public class ReimWorkBenchesHelper {
         }
 
         // 显示已废弃、已关闭、审核未通过、审核通过(可用余额=0)的申请类单据。
-        QFilter applyBillStatusFilter = new QFilter("billstatus", QCP.in, new String[]{"H", "I","E"});
+//        QFilter applyBillStatusFilter = new QFilter("billstatus", QCP.in, new String[]{"H", "I","E"});
+        QFilter applyBillStatusFilter = new QFilter("billstatus", QCP.in, new String[]{"H", "I"})
+                .or(new QFilter("billstatus", QCP.in, new String[]{"E"}).and(new QFilter("balanceamount", QCP.equals, BigDecimal.ZERO)));
+
 
         DataSet dailyVehDataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "er_dailyvehiclebill",
                 "id billid,bizdate applydate,'er_dailyvehiclebill' billtype,'er_dailyvehiclebill' pageid,billno billno,description description,null applyamount," +

+ 6 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/Helper/PersonReimQuotaHelper.java

@@ -213,6 +213,12 @@ public class PersonReimQuotaHelper {
             // 存在则修改
             if(realReimSettingQuery != null){
                 DynamicObject reimSettingInfo = BusinessDataServiceHelper.loadSingle(realReimSettingQuery.get("id"),"er_reimbursesetting_rel");
+                DynamicObject reimburseLever = reimSettingInfo.getDynamicObject("reimburselevel");
+                if(reimburseLever != null && reimburseLever.getString("id").equals(reimLever.getString("id"))){
+                    // 职级未发生改变,直接返回
+                    return;
+                }
+
                 reimSettingInfo.set("reimburselevel",reimLever.get("id"));
                 SaveServiceHelper.save(new DynamicObject[]{ reimSettingInfo });
             }

+ 122 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/PersonJobPositionBakTask.java

@@ -0,0 +1,122 @@
+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.entity.EntityMetadataCache;
+import kd.bos.exception.KDException;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+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.operation.DeleteServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import nckd.jimin.jyyy.fi.common.constant.BillTypeConstants;
+import nckd.jimin.jyyy.fi.common.constant.JobPositionBakBillConstant;
+import nckd.jimin.jyyy.fi.common.util.CommonUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * 人员岗位职级备份任务
+ */
+public class PersonJobPositionBakTask extends AbstractTask implements StopTask {
+    private static final Log logger = LogFactory.getLog(PersonJobPositionBakTask.class);
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        logger.info("PersonJobPositionBakTask begin ");
+        // 将备份表中最新的岗位、职级信息保存
+        Map<String, DynamicObject> hisBakBillMap = getHisPersonJobPositionBak();
+        List<Object> hisBakBillIdList = hisBakBillMap.values().stream().map(r -> r.getPkValue()).collect(Collectors.toList());
+
+        logger.info("hisBakBillIdList size " + hisBakBillIdList.size());
+
+        // 创建最新的人员表
+        List<DynamicObject> newJobPosotionBakBill = createNewJobPosotionBakBill(hisBakBillMap);
+
+        logger.info("newJobPosotionBakBill size " + newJobPosotionBakBill.size());
+
+        SaveServiceHelper.save(newJobPosotionBakBill.toArray(new DynamicObject[0]));
+        DeleteServiceHelper.delete(JobPositionBakBillConstant.ENTITYID,new QFilter(JobPositionBakBillConstant.ID, QCP.in,hisBakBillIdList).toArray());
+
+        logger.info("PersonJobPositionBakTask end ");
+
+    }
+
+    protected List<DynamicObject> createNewJobPosotionBakBill(Map<String, DynamicObject> hisBakBillMap){
+        List<DynamicObject> bakBillList = new ArrayList<>();
+        // 查询当前生效的人员岗位信息
+        DynamicObjectCollection positionCol = QueryServiceHelper.query(BillTypeConstants.HRPI_EMPPOSORGREL, "person.id,position.id,company.id", new QFilter[]{
+                new QFilter("businessstatus", QCP.equals, "1"),
+                new QFilter("iscurrentversion", QCP.equals, "1"),
+                new QFilter("datastatus", QCP.equals, "1"),
+                new QFilter("isprimary", QCP.equals, "1")
+        });
+
+        // 查询最新的同步时间是不是当前月,是的历史岗位、职级信息不变
+        DynamicObjectCollection newestBakBillCol = QueryServiceHelper.query(JobPositionBakBillConstant.ENTITYID, JobPositionBakBillConstant.KEY_NCKD_UPDATETIME, QFilter.isNotNull(JobPositionBakBillConstant.ID).toArray(), "nckd_updatetime desc", 1);
+        // 是否更新
+        boolean isOnlyUpdateNew = false;
+        if(newestBakBillCol != null && newestBakBillCol.size() > 0){
+            Date updateTime = newestBakBillCol.get(0).getDate(JobPositionBakBillConstant.KEY_NCKD_UPDATETIME);
+            if(updateTime != null
+                    && updateTime.getYear() == Calendar.getInstance().get(Calendar.YEAR)
+                    && updateTime.getMonth() == Calendar.getInstance().get(Calendar.MONTH)){
+                isOnlyUpdateNew = true;
+            }
+        }
+
+        // 查询当前生效的人员职级信息
+        Map<Long, Long> personJobMap = QueryServiceHelper.query(BillTypeConstants.HRPI_EMPJOBREL, "person.id,joblevel.id", new QFilter[]{
+                new QFilter("businessstatus", QCP.equals, "1"),
+                new QFilter("datastatus", QCP.equals, "1"),
+                new QFilter("iscurrentversion", QCP.equals, "1")
+        }).stream().collect(Collectors.toMap(r -> r.getLong("person.id"), r -> r.getLong("joblevel.id"), (k1, k2) -> k1));
+        for(DynamicObject position : positionCol){
+            long personId = position.getLong("person.id");
+            DynamicObject userInfo = CommonUtils.getUserByHrPersonId(personId);
+            if(userInfo != null) {
+                DynamicObject bakBillInfo = BusinessDataServiceHelper.newDynamicObject(JobPositionBakBillConstant.ENTITYID);
+                bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_USER, userInfo);
+                bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_ORG_NEW, position.getLong("company.id"));
+                bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_POSITION_NEW, position.getLong("position.id"));
+                bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_UPDATETIME, new Date());
+                if(personJobMap.containsKey(personId)){
+                    bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_JOBLEVEL_NEW, personJobMap.get(personId));
+                }
+                bakBillList.add(bakBillInfo);
+
+                if(hisBakBillMap.containsKey(personId)){
+                    DynamicObject hisBakInfo = hisBakBillMap.get(personId);
+                    if(hisBakInfo != null){
+                        if(isOnlyUpdateNew){
+                            bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_ORG_OLD, hisBakInfo.get(JobPositionBakBillConstant.KEY_NCKD_ORG_OLD));
+                            bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_POSITION_OLD, hisBakInfo.get(JobPositionBakBillConstant.KEY_NCKD_POSITION_OLD));
+                            bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_JOBLEVEL_OLD, hisBakInfo.get(JobPositionBakBillConstant.KEY_NCKD_JOBLEVEL_OLD));
+                        }else{
+                            bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_ORG_OLD, hisBakInfo.get(JobPositionBakBillConstant.KEY_NCKD_ORG_NEW));
+                            bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_POSITION_OLD, hisBakInfo.get(JobPositionBakBillConstant.KEY_NCKD_POSITION_NEW));
+                            bakBillInfo.set(JobPositionBakBillConstant.KEY_NCKD_JOBLEVEL_OLD, hisBakInfo.get(JobPositionBakBillConstant.KEY_NCKD_JOBLEVEL_NEW));
+                        }
+                    }
+                }
+            }
+        }
+        return bakBillList;
+    }
+
+    protected Map<String, DynamicObject> getHisPersonJobPositionBak(){
+        Set<Long> bakBillIdSet = QueryServiceHelper.query(JobPositionBakBillConstant.ENTITYID, JobPositionBakBillConstant.ID, QFilter.isNotNull(JobPositionBakBillConstant.ID).toArray())
+                .stream()
+                .map(r -> r.getLong(JobPositionBakBillConstant.ID))
+                .collect(Collectors.toSet());
+        return Arrays.stream(BusinessDataServiceHelper.load(bakBillIdSet.toArray(new Long[0]), EntityMetadataCache.getDataEntityType(JobPositionBakBillConstant.ENTITYID)))
+                .collect(Collectors.toMap(r -> r.getDynamicObject(JobPositionBakBillConstant.KEY_NCKD_USER).getString(JobPositionBakBillConstant.ID), r -> r, (a, b) -> a));
+    }
+}

+ 27 - 70
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/PersonReimLeverSyncTask.java

@@ -11,18 +11,13 @@ import kd.bos.orm.query.QFilter;
 import kd.bos.schedule.api.StopTask;
 import kd.bos.schedule.executor.AbstractTask;
 import kd.bos.servicehelper.QueryServiceHelper;
-import kd.bos.util.StringUtils;
 import nckd.jimin.jyyy.fi.common.constant.BillTypeConstants;
+import nckd.jimin.jyyy.fi.common.util.CommonUtils;
 import nckd.jimin.jyyy.fi.plugin.operate.Helper.PersonReimQuotaHelper;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.Date;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 
 /**
@@ -38,76 +33,38 @@ public class PersonReimLeverSyncTask extends AbstractTask implements StopTask {
     protected PersonReimQuotaHelper getPersonReimQuotaHelper() {
         return Optional.ofNullable(personReimQuotaHelper).orElse(new PersonReimQuotaHelper());
     }
-    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),
+        // 查询当前生效的人员岗位信息
+        DynamicObjectCollection positionCol = QueryServiceHelper.query(BillTypeConstants.HRPI_EMPPOSORGREL, "person.id,position.id,company.id", new QFilter[]{
                 new QFilter("businessstatus", QCP.equals, "1"),
-                new QFilter("iscurrentversion", QCP.equals, "1")
+                new QFilter("iscurrentversion", QCP.equals, "1"),
+                new QFilter("datastatus", QCP.equals, "1"),
+                new QFilter("isprimary", 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;
+        Map<Long, Long> personCompanyMap = positionCol.stream().collect(Collectors.toMap(r -> r.getLong("person.id"), r -> r.getLong("company.id"), (k1, k2) -> k1));
+        // 获取所有人员最新的职级
+        Map<Long, Long> personJobMap = QueryServiceHelper.query(BillTypeConstants.HRPI_EMPJOBREL, "person.id,joblevel.id", new QFilter[]{
+                new QFilter("businessstatus", QCP.equals, "1"),
+                new QFilter("datastatus", QCP.equals, "1"),
+                new QFilter("iscurrentversion", QCP.equals, "1")
+        }).stream().collect(Collectors.toMap(r -> r.getLong("person.id"), r -> r.getLong("joblevel.id"), (k1, k2) -> k1));
+
+        // 获取人员最新的报销级别
+        PersonReimQuotaHelper helper = getPersonReimQuotaHelper();
+
+        for(Map.Entry<Long, Long> entryRow : personJobMap.entrySet()){
+            Long personId = entryRow.getKey();
+            Long jobLeverId = entryRow.getValue();
+            if(personJobMap.containsKey(personId)){
+                DynamicObject userInfo = CommonUtils.getUserByHrPersonId(personId);
+                helper.syncReimLever(userInfo.getLong("id"),personCompanyMap.get(personId),jobLeverId);
+            }
         }
-        String companyNumber = potisionInfo.getString("company.number");
-        DynamicObject company = QueryServiceHelper.queryOne("bos_org", "id", new QFilter("number", QCP.equals, companyNumber).toArray());
-        DynamicObject userInfo = QueryServiceHelper.queryOne("bos_user", "id", new QFilter("number", QCP.equals, personNumber).toArray());
-        getPersonReimQuotaHelper().syncReimLever(userInfo.getLong("id"),jobId,company.getLong("id"));
-
-    }
-    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")
-        });
-    }
-
 
 
+        log.info("-------- PersonReimLeverSyncTask 同步人员报销级别任务结束 --------");
+    }
 }