Browse Source

安全检查时间划分

luojun 2 năm trước cách đây
mục cha
commit
f00dd611d7

+ 2 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteWorkTimeService.java

@@ -36,6 +36,8 @@ public interface RemoteWorkTimeService {
     Integer checkWorkTime(@RequestBody Map<String,Object> searchData,  @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
     @GetMapping("/work/time/findWorkTimeByOrgIdAndYmd")
     SysWorkTime findWorkTimeByOrgIdAndYmd(@RequestParam("ymdDate") Date startTime, @RequestParam("orgId") Long orgId);
+    @PostMapping("/work/time/getWorkTime")
+    List<SysWorkTime> getWorkTime(@RequestBody Map<String,Object> searchData,  @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
     /**
      * 生成下个月作息

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteWorkTimesFallbackFactory.java

@@ -58,6 +58,11 @@ public class RemoteWorkTimesFallbackFactory implements FallbackFactory<RemoteWor
             }
 
             @Override
+            public List<SysWorkTime> getWorkTime(Map<String, Object> searchData, String source) {
+                return null;
+            }
+
+            @Override
             public void generateNextMonth() {
 
             }

+ 51 - 18
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/job/SafetyCheckJobBusiness.java

@@ -3,6 +3,7 @@ package com.xunmei.core.safetyCheck.job;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -114,6 +115,14 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
         }
     }
 
+    private List<SysWorkTime> getWorkTime(Date workstartTime, Date workendTime, Long orgId) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("workstartTime", DateUtil.format(workstartTime, "yyyy-MM-dd"));
+        map.put("workendTime", DateUtil.format(workendTime, "yyyy-MM-dd"));
+        map.put("orgId", orgId);
+        return workTimeService.getWorkTime(map, SecurityConstants.INNER);
+}
+
     /**
      * 有周期计划生成任务
      *
@@ -364,19 +373,42 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
 //            vo.setRole(role);
 //            vo.setPlanCycle(Math.toIntExact(plan.getPlanCycle()));
 //            list.add(vo);
-            for (int i = 0; i < plan.getCount(); i++) {
+            //履职和安全检查存在周期字典差别,除了无周期都是+2
+            int cycleCode = 0;
+            if (plan.getPlanCycle() != 6L) {
+                cycleCode = Math.toIntExact(plan.getPlanCycle() + 2);
+            }
+            //生成当前周期的起止时间
+            DateTime datetime = new DateTime();
+            datetime.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+            DateHelper dateHelper = new DateHelper(datetime);
+            Map<String, Date> map = DateHelper.getStartAndEnd(dateHelper, Math.toIntExact(plan.getPlanCycle()));
+            //获取当前受检机构当前周期营业中的作息
+            List<SysWorkTime> workTimes = getWorkTime(map.get("start"), map.get("end"),org.getId());
+            //配合履职次数为short类型
+            short coun = Short.parseShort(plan.getCount().toString());
+            //划分时间
+            Map<Short, StartEndTime> rangeMap = splitTaskTime(coun, CycleCommonEnum.getEnum(cycleCode),
+                    map.get("start"), map.get("end"), workTimes);
+            for (short i = 1; i <= coun; i++) {
+                //如果不存在当前次数的时间划分结果
+                if (!rangeMap.containsKey(i)) {
+                    continue;
+                }
+                StartEndTime timeRange = rangeMap.get(i);
                 vo = new PlanTaskBuildVo();
                 vo.setPlanId(plan.getId());
-                vo.setEndTime(plan.getEndDate());
-                vo.setStartTime(plan.getStartDate());
+                vo.setEndTime(timeRange.getEndTime());
+                vo.setStartTime(timeRange.getStartTime());
                 vo.setCheckOrg(check);
                 vo.setExecOrg(org);
-                vo.setCount(i + 1);
+                vo.setCount((int) i);
                 vo.setPlanCycle(Math.toIntExact(plan.getPlanCycle()));
-                if (plan.getCount() == 1) {
+                //任务名称去除为1
+                if (i == 1) {
                     vo.setPlanName(plan.getPlanName());
                 } else {
-                    vo.setPlanName(plan.getPlanName() + "第" + (i + 1) + "次");
+                    vo.setPlanName(plan.getPlanName() + "第" + i  + "次");
                 }
                 list.add(vo);
             }
@@ -424,19 +456,20 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
         sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
         end = sdfa.parse(sdf.format(end) + " 23:59:59");
 
-        //检查任务受检机构是否存在作息,如果不存在直接丢弃
-        Iterator<PlanTaskBuildVo> iterator = tasks.iterator();
-        while (iterator.hasNext()) {
-            boolean hasWorkTime = checkWorkTime(start, end, iterator.next().getExecOrg().getId());
-            if (!hasWorkTime) {
-                iterator.remove();
-            }
-        }
+//        //检查任务受检机构是否存在作息,如果不存在直接丢弃
+//        Iterator<PlanTaskBuildVo> iterator = tasks.iterator();
+//        while (iterator.hasNext()) {
+//            boolean hasWorkTime = checkWorkTime(start, end, iterator.next().getExecOrg().getId());
+//            if (!hasWorkTime) {
+//                iterator.remove();
+//            }
+//        }
+
 
-        DateHelper dateHelper = new DateHelper(datetime);
         List<CoreSafetyTask> ats = new ArrayList<>();
         Map<Long, Long> hashMap = new HashMap<>();
         for (PlanTaskBuildVo taskPlan : tasks) {
+            DateHelper dateHelper = new DateHelper(taskPlan.getStartTime());
             CoreSafetyTask checkTask = new CoreSafetyTask();
             checkTask.setTitle(taskPlan.getPlanName());
             checkTask.setExceptionCount(0L);
@@ -449,7 +482,7 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
             checkTask.setCount(taskPlan.getCount());
             checkTask.setCheckType(0L);
             checkTask.setCheckCycle(Long.valueOf(taskPlan.getPlanCycle()));
-            checkTask.setYmdDate(datetime);
+            checkTask.setYmdDate(taskPlan.getStartTime());
             checkTask.setYmdDay((long) dateHelper.getDay());
             checkTask.setYmdMonth((long) dateHelper.getMonth());
             checkTask.setYmdQuarter((long) dateHelper.getQuarter());
@@ -459,8 +492,8 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
             checkTask.setSubmitBy(null);
             checkTask.setSubmitTime(null);
             checkTask.setPlanId(taskPlan.getPlanId());
-            checkTask.setPlanStartTime(start);
-            checkTask.setPlanEndTime(end);
+            checkTask.setPlanStartTime(taskPlan.getStartTime());
+            checkTask.setPlanEndTime(taskPlan.getEndTime());
             checkTask.setStartTime(null);
             checkTask.setEndTime(null);
 //            checkTask.setRoleId(taskPlan.getRole().getRoleId());

+ 6 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeController.java

@@ -167,4 +167,10 @@ public class SysWorkTimeController extends BaseController {
     SysWorkTime findWorkTimeByOrgIdAndYmd(Date ymdDate, Long orgId) {
         return sysWorkTimeService.findWorkTimeByOrgIdAndYmd(ymdDate, orgId);
     }
+    @ApiOperation(value = "获取时间范围内作息")
+    @InnerAuth
+    @PostMapping("/getWorkTime")
+    List<SysWorkTime> getWorkTime(@RequestBody Map<String,Object> map){
+        return sysWorkTimeService.getWorkTime(map);
+    }
 }

+ 2 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysWorkTimeMapper.java

@@ -89,4 +89,6 @@ public interface SysWorkTimeMapper extends BaseMapper<SysWorkTime> {
      int deleteSysWorkTimeByIds(String[] ids);
 
     int checkWorkTime(Map<String, Object> param);
+
+    List<SysWorkTime> getWorkTime(Map<String, Object> map);
 }

+ 2 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysWorkTimeService.java

@@ -101,4 +101,6 @@ public interface ISysWorkTimeService extends IService<SysWorkTime> {
     int checkWorkTime(Map<String,Object> map);
 
     SysWorkTime findWorkTimeByOrgIdAndYmd(Date ymdDate, Long orgId);
+
+    List<SysWorkTime> getWorkTime(Map<String, Object> map);
 }

+ 5 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeServiceImpl.java

@@ -470,4 +470,9 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
         return sysWorkTimeMapper.selectOne(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getYmdDate,ymdDate).eq(SysWorkTime::getOrgId,orgId));
     }
 
+    @Override
+    public List<SysWorkTime> getWorkTime(Map<String, Object> map) {
+        return sysWorkTimeMapper.getWorkTime(map);
+    }
+
 }

+ 4 - 0
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysWorkTimeMapper.xml

@@ -171,6 +171,10 @@
     <select id="checkWorkTime" resultType="java.lang.Integer">
         select count(*) from sys_work_time where ymd_date>=#{workstartTime} and #{workendTime} >=ymd_date and org_id=#{orgId} and is_enable=1
     </select>
+    <select id="getWorkTime" resultType="com.xunmei.common.core.domain.worktime.domain.SysWorkTime">
+        select * from sys_work_time where ymd_date>=#{workstartTime} and #{workendTime} >=ymd_date and org_id=#{orgId} and is_enable=1
+
+    </select>
 
     <insert id="insertSysWorkTime" parameterType="com.xunmei.common.core.domain.worktime.domain.SysWorkTime">
         insert into sys_work_time