Quellcode durchsuchen

履职任务生成只有营业网点与作息有关

jiawuxian vor 1 Jahr
Ursprung
Commit
2450c598b9

+ 2 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/ExecTimeCommonEnum.java

@@ -13,8 +13,8 @@ public enum ExecTimeCommonEnum {
     Before(2,"营业前"),
     Business(3,"营业期间"),
     After(4,"营业期间"),
-    NoBusiness(5,"非营业时间");
-
+    NoBusiness(5,"非营业时间"),
+    WorkingTime(6,"工作时间");
 
     private final Integer code;
     private final String desc;

+ 21 - 14
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/TaskCreatingServiceImplBase.java

@@ -7,6 +7,7 @@ import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.google.common.collect.Lists;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.DateRange;
@@ -36,6 +37,12 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
     private RemoteOrgService orgService;
 
     public void rebuildTask(WorkTimeChangeEvent timeChangeEvent) {
+        List<SysOrg> orgs = remoteOrgService.selectOrgByIdList(timeChangeEvent.getOrgIds(), SecurityConstants.INNER);
+        Set<Long> bankingIds = orgs.stream().filter(o -> ObjectUtil.equal(o.getType(), OrgTypeEnum.YINGYE_WANGDIAN.getCode())).map(SysOrg::getId)
+                .collect(Collectors.toSet());
+        timeChangeEvent.setDataList(timeChangeEvent.getDataList().stream().filter(d -> bankingIds.contains(d.getOrgId())).collect(Collectors.toList()));
+        timeChangeEvent.setOrgIds(bankingIds.stream().collect(Collectors.toList()));
+
         if (containCurrentCycle(timeChangeEvent.getDataList(), CycleCommonEnum.DAILY)) {
             SysWorkTime today = timeChangeEvent.getDataList().stream().filter(d -> d.getYmdDate().equals(DateUtil.beginOfDay(new Date()))).findFirst().get();
             rebuildDayTask(timeChangeEvent.getOrgIds(), today);
@@ -159,17 +166,17 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
         return allHangshe.getData();
     }
 
-    /**
-     * 获取作息变更相关机构,某个周期的作息
-     *
-     * @param now
-     * @param cycle
-     * @param event
-     * @return
-     */
-    protected List<SysWorkTime> selectWorkTimeList(Date now, CycleCommonEnum cycle, WorkTimeChangeEvent event) {
-        return selectWorkTimeList(now, cycle, event.getOrgIds());
-    }
+//    /**
+//     * 获取作息变更相关机构,某个周期的作息
+//     *
+//     * @param now
+//     * @param cycle
+//     * @param event
+//     * @return
+//     */
+//    protected List<SysWorkTime> selectWorkTimeList(Date now, CycleCommonEnum cycle, WorkTimeChangeEvent event) {
+//        return selectWorkTimeList(now, cycle, event.getOrgIds());
+//    }
 
     /**
      * 获取机构某个周期的作息
@@ -255,7 +262,7 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
 
 
     /**
-     * 返回机构的值班打卡时间作息
+     * 返回机构的值班打卡时间或营业作息
      *
      * @param now
      * @param cycle
@@ -354,7 +361,7 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
      * @param frequency
      * @param start
      * @param end
-     * @param workTimes
+     * @param workTimes,则认为全是营业
      * @return
      */
     protected Map<Short, StartEndTime> splitTaskTime(Short frequency, CycleCommonEnum cycle, Date start, Date end, List<SysWorkTime> workTimes) {
@@ -415,7 +422,7 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
                 continue;
             }
 
-            if (containCurrentCycle(workTimes, et.getStartTime(), et.getEndTime())) {
+            if (workTimes == null || containCurrentCycle(workTimes, et.getStartTime(), et.getEndTime())) {
                 r.put(i, et);
             }
         }

+ 74 - 32
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java

@@ -14,6 +14,7 @@ import com.xunmei.common.core.domain.DateRange;
 import com.xunmei.common.core.domain.worktime.domain.SysWorkTime;
 import com.xunmei.common.core.enums.CycleCommonEnum;
 import com.xunmei.common.core.enums.ExecTimeCommonEnum;
+import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.common.core.utils.Ymd;
@@ -118,25 +119,25 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
 
             CycleCommonEnum cycleCommonEnum = CycleCommonEnum.getEnum(appPlan.getPlanCycle());
             DateRange range = DateUtils.getStartAndEnd(date, cycleCommonEnum);
-            Map<Long, List<SysWorkTime>> workTimes = null;
-            if (ObjectUtil.equal(appPlan.getPlanExec(), 5)) {
-                workTimes = orgDutyTimes(new Date(), cycleCommonEnum, orgs.stream().map(SysOrg::getId).collect(Collectors.toList()));
-            } else {
-                workTimes = orgWorkingTimes(new Date(), cycleCommonEnum, orgs.stream().map(SysOrg::getId).collect(Collectors.toList()));
-            }
+            Map<Long, List<SysWorkTime>> workTimes = orgDutyOrWorkTimes(new Date(), cycleCommonEnum, orgs.stream().map(SysOrg::getId).collect(Collectors.toList()));
+//            if (ObjectUtil.equal(appPlan.getPlanExec(), 5)) {
+//                workTimes = orgDutyTimes(new Date(), cycleCommonEnum, orgs.stream().map(SysOrg::getId).collect(Collectors.toList()));
+//            } else {
+//                workTimes = orgWorkingTimes(new Date(), cycleCommonEnum, orgs.stream().map(SysOrg::getId).collect(Collectors.toList()));
+//            }
 
             for (SysOrg org : orgs) {
-                Long orgId = org.getId();
-                if (!workTimes.containsKey(orgId) || ObjectUtil.isNull(workTimes.get(orgId)) || CollectionUtils.isEmpty(workTimes.get(orgId))) {
-                    continue;
-                }
+//                Long orgId = org.getId();
+//                if (!workTimes.containsKey(orgId) || ObjectUtil.isNull(workTimes.get(orgId)) || CollectionUtils.isEmpty(workTimes.get(orgId))) {
+//                    continue;
+//                }
 
                 List<Resumption> tasks;
                 if (ObjectUtil.equal(CycleCommonEnum.DAILY.getCode(), appPlan.getPlanCycle())) {
-                    SysWorkTime workTime = workTimes.get(orgId).get(0);
-                    tasks = buildResumptions(appPlan, org, workTime, null, workTimes.get(orgId));
+//                    SysWorkTime workTime = workTimes.get(orgId).get(0);
+                    tasks = buildResumptions(appPlan, org, null, new Date(), workTimes);
                 } else {
-                    tasks = buildResumptions(appPlan, org, range.getStartTime(), range.getEndTime(), null, workTimes.get(orgId));
+                    tasks = buildResumptions(appPlan, org, range.getStartTime(), range.getEndTime(), null, workTimes);
                 }
 
                 if (CollectionUtils.isNotEmpty(tasks)) {
@@ -351,23 +352,23 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
                         .map(Resumption::getTimes)
                         .collect(Collectors.toList());
 
-
-                List<SysWorkTime> workTimes = new ArrayList<>();
-                if (ObjectUtil.equal(plan.getPlanExec(), 5)) {
-                    workTimes = workingMap.get(orgId).stream().filter(wt -> ObjectUtil.equal(wt.getIsDuty(), 1L)).collect(Collectors.toList());
-                } else {
-                    workTimes = workingMap.get(orgId).stream().filter(wt -> ObjectUtil.equal(wt.getIsEnable(), 1L)).collect(Collectors.toList());
-                }
-
-                if (CollectionUtils.isEmpty(workTimes)) {
-                    continue;
-                }
+//
+//                List<SysWorkTime> workTimes = new ArrayList<>();
+//                if (ObjectUtil.equal(plan.getPlanExec(), 5)) {
+//                    workTimes = workingMap.get(orgId).stream().filter(wt -> ObjectUtil.equal(wt.getIsDuty(), 1L)).collect(Collectors.toList());
+//                } else {
+//                    workTimes = workingMap.get(orgId).stream().filter(wt -> ObjectUtil.equal(wt.getIsEnable(), 1L)).collect(Collectors.toList());
+//                }
+//
+//                if (CollectionUtils.isEmpty(workTimes)) {
+//                    continue;
+//                }
 
                 List<Resumption> planResumptionList;
                 if (ObjectUtil.equal(cycle, CycleCommonEnum.DAILY)) {
-                    planResumptionList = this.buildResumptions(plan, org, workTime, executedOrders, workTimes);
+                    planResumptionList = this.buildResumptions(plan, org, executedOrders, new Date(), workingMap);
                 } else {
-                    planResumptionList = this.buildResumptions(plan, org, startDate, endDate, executedOrders, workTimes);
+                    planResumptionList = this.buildResumptions(plan, org, startDate, endDate, executedOrders, workingMap);
                 }
 
                 if (CollectionUtils.isNotEmpty(planResumptionList)) {
@@ -389,12 +390,36 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
         return resumptionService.update(wrapper);
     }
 
-    private List<Resumption> buildResumptions(AppPlan appPlan, SysOrg execOrg, SysWorkTime workTime, List<Short> executedOrders, List<SysWorkTime> workTimes) {
+    private List<Resumption> buildResumptions(AppPlan appPlan, SysOrg execOrg, List<Short> executedOrders, Date date, Map<Long, List<SysWorkTime>> workTimes) {
+        DateTime planstartTime = null;
+        DateTime planendTime = null;
+        if (!ObjectUtil.equal(execOrg.getType(), OrgTypeEnum.YINGYE_WANGDIAN.getCode())) {
+            //非营业网点的机构,与作息无关
+            planstartTime = DateUtil.beginOfDay(date);
+            planendTime = DateUtil.endOfDay(date);
+            return buildResumptions(appPlan, execOrg, planstartTime, planendTime, executedOrders, workTimes);
+        }
+
+        //营业网点没有作息
+        if (!workTimes.containsKey(execOrg.getId()) || CollectionUtils.isEmpty(workTimes.get(execOrg.getId()))) {
+            return null;
+        }
+
+        Optional<SysWorkTime> workTimeOptional = workTimes.get(execOrg.getId()).stream().filter(t -> DateUtil.isSameDay(t.getYmdDate(), date)).findFirst();
+        if (!workTimeOptional.isPresent()) {
+            return null; //没有找到某天的作息
+        }
+
+        if ((ObjectUtil.equal(appPlan.getPlanExec(), ExecTimeCommonEnum.NoBusiness.getCode()) && ObjectUtil.notEqual(workTimeOptional.get().getIsDuty(), 1L)) ||
+                (ObjectUtil.notEqual(appPlan.getPlanExec(), ExecTimeCommonEnum.NoBusiness.getCode()) && ObjectUtil.notEqual(workTimeOptional.get().getIsEnable(), 1L))) {
+            //非营业时间没有值班打卡或其它时刻没有营业,不生成任务
+            return null;
+        }
+
+        SysWorkTime workTime = workTimeOptional.get();
         DateTime dateTime = new DateTime(workTime.getYmdDate());
         String opentime = workTime.getOpenTime();//营业时间
         String closetime = workTime.getCloseTime();//营业终了
-        DateTime planstartTime = null;
-        DateTime planendTime = null;
 
 
         if (ObjectUtil.notEqual(appPlan.getPlanExec(), 5) && (StringUtils.isEmpty(opentime) || StringUtils.isEmpty(closetime))) {
@@ -459,10 +484,12 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
         return buildResumptions(appPlan, execOrg, planstartTime, planendTime, executedOrders, workTimes);
     }
 
-    private List<Resumption> buildResumptions(AppPlan appPlan, SysOrg execOrg, Date planStartTime, Date planEndTime, List<Short> executedOrders, List<SysWorkTime> workTimes) {
+    private List<Resumption> buildResumptions(AppPlan appPlan, SysOrg execOrg, Date planStartTime, Date planEndTime, List<Short> executedOrders, Map<Long, List<SysWorkTime>> allWorkTimes) {
         if (ObjectUtil.equal(execOrg.getIsLock(), 1)) {
             return new ArrayList<>();
         }
+        Map<Short, StartEndTime> rangeMap = null;
+
 
         List<Resumption> resumptionList = new ArrayList<>();
         Short count = 1;
@@ -470,8 +497,23 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
             count = Short.parseShort(appPlan.getCount());
         }
 
-        Map<Short, StartEndTime> rangeMap = splitTaskTime(count, CycleCommonEnum.getEnum(appPlan.getPlanCycle()),
-                planStartTime, planEndTime, workTimes);
+        if (ObjectUtil.equal(execOrg.getType(), OrgTypeEnum.YINGYE_WANGDIAN.getCode())) {
+            List<SysWorkTime> workTimes = null;
+            //营业网点,取作息
+            if (ObjectUtil.equal(appPlan.getPlanExec(), ExecTimeCommonEnum.NoBusiness.getCode())) {
+                //非营业时间,取值班打卡
+                workTimes = allWorkTimes.get(execOrg.getId()).stream().filter(e -> ObjectUtil.equal(e.getIsDuty(), 1L)).collect(Collectors.toList());
+            } else {
+                workTimes = allWorkTimes.get(execOrg.getId()).stream().filter(e -> ObjectUtil.equal(e.getIsEnable(), 1L)).collect(Collectors.toList());
+            }
+            rangeMap = splitTaskTime(count, CycleCommonEnum.getEnum(appPlan.getPlanCycle()),
+                    planStartTime, planEndTime, workTimes);
+        } else {
+            //非营业网点,认为全是营业
+            rangeMap = splitTaskTime(count, CycleCommonEnum.getEnum(appPlan.getPlanCycle()),
+                    planStartTime, planEndTime, null);
+        }
+
         short realOrder = 0;
         for (Short i = 1; i <= count; i++) {
             if (!rangeMap.containsKey(i)) {