gaoxiong 1 سال پیش
والد
کامیت
56740dc2ca
39فایلهای تغییر یافته به همراه621 افزوده شده و 153 حذف شده
  1. 0 0
      project_data/sql/base/soc_config.sql
  2. 3 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteWorkTimeService.java
  3. 9 8
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/AccessPdf.java
  4. 5 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteWorkTimesFallbackFactory.java
  5. 4 50
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/domain/CoreMonitoringRetrievalTask.java
  6. 57 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/domain/CoreMonitoringRetrievalTaskRecord.java
  7. 38 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/TaskCreatingServiceImplBase.java
  8. 17 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/controller/CoreMonitoringTaskRegistrationController.java
  9. 15 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/domain/CoreMonitoringTaskRegistration.java
  10. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/mapper/CoreMonitoringTaskMonitorInfoMapper.java
  11. 7 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/mapper/CoreMonitoringTaskRegistrationMonitorMapper.java
  12. 13 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/ICoreMonitoringTaskRegistrationService.java
  13. 150 38
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/CoreMonitoringTaskRegistrationServiceImpl.java
  14. 48 11
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/TMonitoringRetrievalPlanServiceImpl.java
  15. 4 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/vo/AccessPdfVO.java
  16. 7 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/vo/CoreMonitoringTaskRegistrationVO.java
  17. 6 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/IQuestionService.java
  18. 9 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionServiceImpl.java
  19. 11 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java
  20. 17 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/mapper/CoreMonitoringRetrievalTaskRecordMapper.java
  21. 13 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskBuilderServiceImpl.java
  22. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/ICoreSafetyTaskDataNfcService.java
  23. 6 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/ICoreSafetyTaskDataRemarkimgService.java
  24. 7 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/ICoreSafetyTaskDataService.java
  25. 8 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskDataRemarkimgServiceImpl.java
  26. 10 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskDataServiceImpl.java
  27. 32 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskServiceImpl.java
  28. 5 0
      soc-modules/soc-modules-core/src/main/resources/mapper/access/CoreMonitoringTaskMonitorInfoMapper.xml
  29. 28 20
      soc-modules/soc-modules-core/src/main/resources/mapper/access/CoreMonitoringTaskRegistrationMonitorMapper.xml
  30. 3 3
      soc-modules/soc-modules-core/src/main/resources/mapper/access/TMonitoringRetrievalPlanMapper.xml
  31. 6 1
      soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskMapper.xml
  32. 7 0
      soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskRecordMapper.xml
  33. 4 4
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java
  34. 13 0
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java
  35. 2 2
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreLetterTask.java
  36. 8 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeController.java
  37. 1 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysWorkTimeService.java
  38. 28 5
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java
  39. 17 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeServiceImpl.java

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
project_data/sql/base/soc_config.sql


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

@@ -32,6 +32,9 @@ public interface RemoteWorkTimeService {
     @PostMapping("/work/time/findWorkTimeByRange")
     R<List<SysWorkTime>> findWorkTimeByRange(@RequestBody WorkTimeDto workTimeDto, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
+    @PostMapping("/work/time/findAllWorkTimeByRange")
+    R<List<SysWorkTime>> findAllWorkTimeByRange(@RequestBody WorkTimeDto workTimeDto, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
     @PostMapping("/work/time/checkWorkTime")
     Integer checkWorkTime(@RequestBody Map<String,Object> searchData,  @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
     @GetMapping("/work/time/findWorkTimeByOrgIdAndYmd")

+ 9 - 8
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/AccessPdf.java

@@ -24,15 +24,16 @@ public class AccessPdf {
     private String orgName;
     @ApiModelProperty("计划周期")
     private String planCycle;
-    @ApiModelProperty(value = "开始时间")
-    // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private String startTime;
-    @ApiModelProperty(value = "结束时间")
-    // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private String endTime;
+
     private String dest;
-    @ApiModelProperty(value = "开始调阅时间")
-    private String taskStartTime;
+
+
+    @ApiModelProperty(value = "调阅时间记录")
+    private List<String> times;
+
+    @ApiModelProperty(value = "调阅总时长")
+    private String taskTimes;
+
     @ApiModelProperty(value = "调阅人")
     private String checkUser;
 

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

@@ -49,6 +49,11 @@ public class RemoteWorkTimesFallbackFactory implements FallbackFactory<RemoteWor
             }
 
             @Override
+            public R<List<SysWorkTime>> findAllWorkTimeByRange(WorkTimeDto workTimeDto, String source) {
+                return null;
+            }
+
+            @Override
             public Integer checkWorkTime(Map<String, Object> searchData, String source) {
                 return null;
             }

+ 4 - 50
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/domain/CoreMonitoringRetrievalTask.java

@@ -178,84 +178,38 @@ public class CoreMonitoringRetrievalTask {
 
     @ApiModelProperty(value = "结束调阅签名图片")
     private String signImg;
+
+    @ApiModelProperty(value = "结束调阅总时长")
+    private Double durationTotal = 0d;
     @Override
     public String toString() {
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-
-
                 .append("id", getId())
-
-
                 .append("planId", getPlanId())
-
-
                 .append("taskName", getTaskName())
-
-
                 .append("orgId", getOrgId())
-
-
                 .append("orgPath", getOrgPath())
-
-
                 .append("orgName", getOrgName())
-
-
                 .append("ymdDate", getYmdDate())
-
-
                 .append("ymdYear", getYmdYear())
-
-
                 .append("ymdHalfyear", getYmdHalfyear())
-
-
                 .append("ymdQuarter", getYmdQuarter())
-
-
                 .append("ymdMonth", getYmdMonth())
-
-
                 .append("ymdWeek", getYmdWeek())
-
-
                 .append("ymdDay", getYmdDay())
-
-
                 .append("cycle", getCycle())
-
-
                 .append("planStartTime", getPlanStartTime())
-
-
                 .append("planEndTime", getPlanEndTime())
-
-
                 .append("startTime", getStartTime())
-
-
                 .append("endTime", getEndTime())
-
-
                 .append("status", getStatus())
-
-
                 .append("roleId", getRoleId())
-
-
                 .append("retrievalUser", getRetrievalUser())
-
-
                 .append("orderNum", getOrderNum())
-
-
                 .append("batchNum", getBatchNum())
-
-
                 .append("submitTime", getSubmitTime())
-
-
                 .append("exceptionCount", getExceptionCount())
+                .append("durationTotal", getDurationTotal())
                 .toString();
     }
 }

+ 57 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/domain/CoreMonitoringRetrievalTaskRecord.java

@@ -0,0 +1,57 @@
+package com.xunmei.common.core.domain.retrieval.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.xunmei.common.core.web.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * @author gaoxiong
+ * @Title: 调阅时间记录
+ * @Package
+ * @Description:
+ * @date 2024/7/2217:24
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("core_monitoring_retrieval_task_record")
+@ApiModel(value = "监控调阅时间记录对象", description = "监控调阅任务记录")
+public class CoreMonitoringRetrievalTaskRecord extends BaseEntity {
+    /**
+     * 主键
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "任务id")
+    private Long taskId;
+
+    @ApiModelProperty(value = "任务开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "任务结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "任务时长,单位小时")
+    private Double taskDuration;
+
+    @ApiModelProperty(value = "调阅任务人")
+    private Long taskUserId;
+
+
+}

+ 38 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/TaskCreatingServiceImplBase.java

@@ -199,6 +199,24 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
         return workTimeService.findWorkTimeByRange(workTimeDto, SecurityConstants.FROM_SOURCE).getData();
     }
 
+
+    protected List<SysWorkTime> selectAllWorkTimeList(DateRange range, List<Long> orgIds) {
+        if (CollectionUtil.isEmpty(orgIds)) {
+            return new ArrayList<>();
+        }
+
+        String startTime = DateUtil.format(range.getStartTime(), Constants.DAILY_FORMAT);
+        String endTime = DateUtil.format(range.getEndTime(), Constants.DAILY_FORMAT);
+        WorkTimeDto workTimeDto = new WorkTimeDto();
+        workTimeDto.setOrgIdList(orgIds);
+        workTimeDto.setStartTime(startTime);
+        workTimeDto.setEndTime(endTime);
+
+//
+        return workTimeService.findAllWorkTimeByRange(workTimeDto, SecurityConstants.FROM_SOURCE).getData();
+    }
+
+
     /**
      * 获取机构在某个周期是否有营业的日期。没有营业则不包含该机构或value为false
      * 已不满足现有需求
@@ -284,6 +302,26 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
     }
 
     /**
+     * 添加作息查询,上面的方法,歇业不会被查询出来
+     * @param range
+     * @param orgIds
+     * @return
+     */
+    protected Map<Long, List<SysWorkTime>> orgDutyAndWorkTimes(DateRange  range, List<Long> orgIds) {
+        List<SysWorkTime> times = selectAllWorkTimeList(range, orgIds);
+        if (CollectionUtil.isEmpty(times)) {
+            return new HashMap<>();
+        }
+        Map<Long, List<SysWorkTime>> map = times.stream()
+                .filter(t -> ObjectUtil.equal(t.getIsDuty(), 1L) || ObjectUtil.equal(t.getIsEnable(), 1L))
+                .collect(Collectors.groupingBy(t -> t.getOrgId()));
+        return map;
+    }
+
+
+
+
+    /**
      * 获取机构在某个周期第一天营业的作息配置。没有营业则不包含该机构或value为空
      *
      * @param now

+ 17 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/controller/CoreMonitoringTaskRegistrationController.java

@@ -65,7 +65,8 @@ public class CoreMonitoringTaskRegistrationController extends BaseController {
     @Log(title = "【调阅任务登记NCF开始】", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
-        return toAjax(iCoreMonitoringTaskRegistrationService.insertCoreMonitoringTaskRegistration(coreMonitoringTaskRegistration));
+        iCoreMonitoringTaskRegistrationService.insertCoreMonitoringTaskRegistration(coreMonitoringTaskRegistration);
+        return success();
     }
 
     /**
@@ -77,4 +78,19 @@ public class CoreMonitoringTaskRegistrationController extends BaseController {
         return toAjax(iCoreMonitoringTaskRegistrationService.updateCoreMonitoringTaskRegistration(coreMonitoringTaskRegistration));
     }
 
+    @ApiOperation(value = "暂存任务数据")
+    @PostMapping("/storageTask")
+    public AjaxResult storageTask(@RequestBody CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
+        iCoreMonitoringTaskRegistrationService.storageTask(coreMonitoringTaskRegistration);
+        return success();
+    }
+
+
+    @ApiOperation(value = "判断是否有已开始记录")
+    @PostMapping("/storageStart")
+    public AjaxResult storageStart(@RequestBody CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
+        return success(iCoreMonitoringTaskRegistrationService.storageStart(coreMonitoringTaskRegistration));
+    }
+
+
 }

+ 15 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/domain/CoreMonitoringTaskRegistration.java

@@ -52,6 +52,14 @@ public class CoreMonitoringTaskRegistration extends BaseEntity {
     private Date taskStartTime;
 
     /**
+     * 调阅任务填报开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "调阅任务填报结束时间")
+    private Date taskEndTime;
+
+
+    /**
      * $column.columnComment
      */
     private String delFlag;
@@ -84,4 +92,11 @@ public class CoreMonitoringTaskRegistration extends BaseEntity {
     @TableField(exist = false)
     @ApiModelProperty(value = "结束调阅签名图片")
     private String signImgUrl;
+
+    /**
+     * 监控操作标识状态, 0表示本次开始,1表示本次结束
+     */
+    @ApiModelProperty(value = "监控操作标识状态")
+    @TableField(exist = false)
+    private Integer monitorFlag;
 }

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/mapper/CoreMonitoringTaskMonitorInfoMapper.java

@@ -69,4 +69,6 @@ public interface CoreMonitoringTaskMonitorInfoMapper extends BaseMapper<CoreMoni
      * @return 结果
      */
     int deleteCoreMonitoringTaskMonitorInfoByIds(Long[] ids);
+
+    void deleteByTaskId(Long taskId);
 }

+ 7 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/mapper/CoreMonitoringTaskRegistrationMonitorMapper.java

@@ -78,7 +78,7 @@ public interface CoreMonitoringTaskRegistrationMonitorMapper extends BaseMapper<
      * @param taskRegistrationId
      * @return
      */
- List<CoreMonitoringTaskRegistrationMonitorVO>    selectMonitorByTaskRegistrationId(Long taskRegistrationId);
+ List<CoreMonitoringTaskRegistrationMonitorVO>    selectMonitorByTaskRegistrationId(Long taskId);
 
     /**
      * 根据监控id查询监控
@@ -91,4 +91,10 @@ public interface CoreMonitoringTaskRegistrationMonitorMapper extends BaseMapper<
 
     CoreMonitoringTaskRegistrationMonitorVO selectMonitorByAreaCode(@Param("taskId") Long taskId,@Param("areaCode") String host);
 
+    /**
+     * 重置监控记录
+     * @param taskId
+     */
+    void deleteMonitorByTaskId(Long taskId);
+
 }

+ 13 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/ICoreMonitoringTaskRegistrationService.java

@@ -6,6 +6,7 @@ import com.xunmei.core.access.domain.CoreMonitoringTaskRegistration;
 import com.xunmei.core.access.vo.CoreMonitoringTaskRegistrationVO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 【请填写功能名称】Service接口
@@ -36,7 +37,7 @@ public interface ICoreMonitoringTaskRegistrationService extends IService<CoreMon
      * @param coreMonitoringTaskRegistration 【请填写功能名称】
      * @return 结果
      */
-    int insertCoreMonitoringTaskRegistration(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration);
+    CoreMonitoringTaskRegistration insertCoreMonitoringTaskRegistration(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration);
 
     /**
      * 修改【请填写功能名称】
@@ -47,6 +48,17 @@ public interface ICoreMonitoringTaskRegistrationService extends IService<CoreMon
     int updateCoreMonitoringTaskRegistration(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration);
 
     /**
+     * 暂存任务数据
+     * @param coreMonitoringTaskRegistration
+     */
+    void storageTask(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration);
+
+    /**
+     * 获取任务是否有开始记录
+     * @param coreMonitoringTaskRegistration
+     */
+    Map<String,Object> storageStart(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration);
+    /**
      * 批量删除【请填写功能名称】
      *
      * @param ids 需要删除的【请填写功能名称】主键集合

+ 150 - 38
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/CoreMonitoringTaskRegistrationServiceImpl.java

@@ -24,9 +24,16 @@ import com.xunmei.system.api.RemoteNfcBindService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.TransactionManager;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronization;
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 
-import java.util.Arrays;
-import java.util.List;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 【请填写功能名称】Service业务层处理
@@ -87,48 +94,82 @@ public class CoreMonitoringTaskRegistrationServiceImpl extends ServiceImpl<CoreM
      * @return 结果
      */
     @Override
-    public int insertCoreMonitoringTaskRegistration(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
-        //如果进来的NFC不是本机构和不是设备间就不让扫
-        if (StringUtils.isNotEmpty(coreMonitoringTaskRegistration.getStartNfc())) {
-            List<Long> longs = remoteNfcBindService.selectNfcByCode(coreMonitoringTaskRegistration.getStartNfc(), SecurityConstants.INNER);
-            if (!longs.contains(SecurityUtils.getLoginUser().getOrgId())) {
+    public CoreMonitoringTaskRegistration insertCoreMonitoringTaskRegistration(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
+
+        Integer monitorFlag = coreMonitoringTaskRegistration.getMonitorFlag();
+        if(monitorFlag != null && monitorFlag.equals(0)){
+            /**
+             * 每次调阅开始的逻辑。
+             * 1、如果任务的状态是待调阅,则需要将任务修改为调阅中的状态。
+             * 2、如果任务的状态是调阅中的状态,则不修改任务数据
+             * 3、添加一条调阅时间记录。并且只有开始时间没有结束时间。
+             */
+            //监控调阅开始
+            //如果进来的NFC不是本机构和不是设备间就不让扫
+
+            //第一步判断nfc是不是本机构的
+            if(!validateOrgNFC(coreMonitoringTaskRegistration.getStartNfc(),SecurityUtils.getLoginUser().getOrgId())){
                 throw new ServiceException("请扫描本机构NFC");
             }
-        }
-        CoreMonitoringRetrievalTask coreMonitoringRetrievalTask = coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
-        //jiaoyan
-        QueryWrapper queryWrapper = new QueryWrapper();
-        queryWrapper.eq("task_id", coreMonitoringTaskRegistration.getTaskId());
-        queryWrapper.eq("del_flag", 0);
-        List<CoreMonitoringTaskRegistration> list = baseMapper.selectList(queryWrapper);
-        if (CollectionUtils.isNotEmpty(list) && !coreMonitoringRetrievalTask.getStatus().equals(ZERO)) {
-            if (StringUtils.isEmpty(coreMonitoringTaskRegistration.getEndNfc()) && StringUtils.isEmpty(coreMonitoringTaskRegistration.getEndPicture())) {
-                throw new ServiceException("请勿重复扫描");
+            //第二步判断任务状态
+            CoreMonitoringRetrievalTask task = coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
+            if(task == null){
+                throw new ServiceException("任务不存在,请确认!");
             }
-            CoreMonitoringTaskRegistration coreMonitoringTaskRegistration1 = list.get(0);
-            coreMonitoringTaskRegistration1.setEndPicture(coreMonitoringTaskRegistration.getEndPicture());
-            coreMonitoringTaskRegistration1.setEndNfc(coreMonitoringTaskRegistration.getEndNfc());
-            Long time = DateUtils.getNowDate().getTime() - coreMonitoringTaskRegistration1.getTaskStartTime().getTime();
-            Double avg = (double) time / 1000 / 3600;
-            coreMonitoringTaskRegistration1.setAverageDuration(Double.valueOf(String.format("%.2f", avg)));
-            return baseMapper.updateById(coreMonitoringTaskRegistration1);
-        } else {
-            if (coreMonitoringRetrievalTask.getStatus().equals(ZERO)) {
-                coreMonitoringTaskRegistrationMapper.deleteByTaskId(coreMonitoringTaskRegistration.getTaskId());
+            String status = task.getStatus();
+            if(status.equals(ZERO)){
+                //任务状态是待调阅
+                task.setStatus(ONE);
+                task.setStartTime(DateUtils.getNowDate());
+                iCoreMonitoringRetrievalTaskService.updateCoreMonitoringRetrievalTask(task);
             }
+            //第三步,增加扫描记录数据
             coreMonitoringTaskRegistration.setCreateTime(DateUtils.getNowDate());
             coreMonitoringTaskRegistration.setTaskStartTime(DateUtils.getNowDate());
             coreMonitoringTaskRegistration.setDelFlag("0");
             coreMonitoringTaskRegistration.setCreateBy(SecurityUtils.getUsername());
-            //修改任务状态为进行中
-
-            coreMonitoringRetrievalTask.setStatus(ONE);
-            coreMonitoringRetrievalTask.setStartTime(DateUtils.getNowDate());
-            coreMonitoringRetrievalTaskMapper.updateById(coreMonitoringRetrievalTask);
             coreMonitoringTaskRegistration.setId(IdWorker.getId());
-            return coreMonitoringTaskRegistrationMapper.insert(coreMonitoringTaskRegistration);
+            coreMonitoringTaskRegistrationMapper.insert(coreMonitoringTaskRegistration);
+            return coreMonitoringTaskRegistration;
+        }else{
+            //监控调阅结束
+            //如果进来的NFC不是本机构和不是设备间就不让扫
+            if(!validateOrgNFC(coreMonitoringTaskRegistration.getEndNfc(),SecurityUtils.getLoginUser().getOrgId())){
+                throw new ServiceException("请扫描本机构NFC");
+            }
+
+            //获取现有只有开始时间的记录数据
+            QueryWrapper<CoreMonitoringTaskRegistration> qw = new QueryWrapper<>();
+            qw.lambda().eq(CoreMonitoringTaskRegistration::getTaskId,coreMonitoringTaskRegistration.getTaskId())
+                    .isNull(CoreMonitoringTaskRegistration::getTaskEndTime);
+            List<CoreMonitoringTaskRegistration> cmts = coreMonitoringTaskRegistrationMapper.selectList(qw);
+            if(cmts.size() > 0){
+                CoreMonitoringTaskRegistration cmtr = cmts.get(0);
+                cmtr.setEndPicture(coreMonitoringTaskRegistration.getEndPicture());
+                cmtr.setEndNfc(coreMonitoringTaskRegistration.getEndNfc());
+                Long time = DateUtils.getNowDate().getTime() - cmtr.getTaskStartTime().getTime();
+                /*Double avg = (double) time / 1000 / 3600;
+                cmtr.setAverageDuration(Double.valueOf(String.format("%.2f", avg)));*/
+                cmtr.setAverageDuration(time.doubleValue());
+                cmtr.setTaskEndTime(new Date());
+                baseMapper.updateById(cmtr);
+                return cmtr;
+            }
+            coreMonitoringTaskRegistration.setAverageDuration(0d);
+            return coreMonitoringTaskRegistration;
         }
+    }
 
+    private boolean validateOrgNFC(String nfcCode, Long orgId){
+        if(StringUtils.isEmpty(nfcCode)){
+            //为空则表示不用验证
+            return true;
+        }
+        List<Long> longs = remoteNfcBindService.selectNfcByCode(nfcCode, SecurityConstants.INNER);
+        if (!longs.contains(orgId)) {
+            return false;
+        }
+        return true;
     }
 
     /**
@@ -138,25 +179,96 @@ public class CoreMonitoringTaskRegistrationServiceImpl extends ServiceImpl<CoreM
      * @return 结果
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int updateCoreMonitoringTaskRegistration(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
         coreMonitoringTaskRegistration.setUpdateTime(DateUtils.getNowDate());
         coreMonitoringTaskRegistration.setUpdateBy(SecurityUtils.getUsername());
+        coreMonitoringTaskRegistration.setMonitorFlag(1);
         //修改任务状态已完成
         CoreMonitoringRetrievalTask coreMonitoringRetrievalTask = coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
         coreMonitoringRetrievalTask.setStatus(TWO);
         coreMonitoringRetrievalTask.setEndTime(DateUtils.getNowDate());
-        /*coreMonitoringRetrievalTask.setUpdateBy(SecurityUtils.getUsername());
-        coreMonitoringRetrievalTask.setUpdateTime(DateUtils.getNowDate());*/
         coreMonitoringRetrievalTask.setSubmitTime(DateUtils.getNowDate());
         coreMonitoringRetrievalTask.setRetrievalUser(SecurityUtils.getUserId());
         coreMonitoringRetrievalTask.setSignImg(coreMonitoringTaskRegistration.getSignImgUrl());
 
+
+        //更新调阅记录表
+        CoreMonitoringTaskRegistration cmt = insertCoreMonitoringTaskRegistration(coreMonitoringTaskRegistration);
+
         int i = coreMonitoringTaskMonitorInfoMapper.selectAbnormalByTaskId(coreMonitoringTaskRegistration.getTaskId());
         coreMonitoringRetrievalTask.setExceptionCount(i);
+        coreMonitoringRetrievalTask.setDurationTotal(coreMonitoringRetrievalTask.getDurationTotal() + cmt.getAverageDuration());
         coreMonitoringRetrievalTaskMapper.updateCoreMonitoringRetrievalTask(coreMonitoringRetrievalTask);
-        //生成pdf
-        itMonitoringRetrievalPlanService.buildPdf(coreMonitoringTaskRegistration.getTaskId());
-        return coreMonitoringTaskRegistrationMapper.updateById(coreMonitoringTaskRegistration);
+
+        //springboot 事务结束后调用方法
+        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+            @Override
+            public void afterCommit() {
+                //生成pdf
+                itMonitoringRetrievalPlanService.buildPdf(coreMonitoringTaskRegistration.getTaskId());
+            }
+        });
+
+        return 1;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void storageTask(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
+
+        coreMonitoringTaskRegistration.setMonitorFlag(1);
+        CoreMonitoringTaskRegistration cmt = insertCoreMonitoringTaskRegistration(coreMonitoringTaskRegistration);
+
+        coreMonitoringTaskRegistration.setUpdateTime(DateUtils.getNowDate());
+        coreMonitoringTaskRegistration.setUpdateBy(SecurityUtils.getUsername());
+        //修改任务状态已完成
+        CoreMonitoringRetrievalTask coreMonitoringRetrievalTask =
+                coreMonitoringRetrievalTaskMapper.selectCoreMonitoringRetrievalTaskById(coreMonitoringTaskRegistration.getTaskId());
+        coreMonitoringRetrievalTask.setEndTime(DateUtils.getNowDate());
+        coreMonitoringRetrievalTask.setSubmitTime(DateUtils.getNowDate());
+        coreMonitoringRetrievalTask.setRetrievalUser(SecurityUtils.getUserId());
+        coreMonitoringRetrievalTask.setSignImg(coreMonitoringTaskRegistration.getSignImgUrl());
+        coreMonitoringRetrievalTask.setDurationTotal(coreMonitoringRetrievalTask.getDurationTotal() + cmt.getAverageDuration());
+        coreMonitoringRetrievalTaskMapper.updateCoreMonitoringRetrievalTask(coreMonitoringRetrievalTask);
+
+    }
+
+    @Override
+    public Map<String,Object> storageStart(CoreMonitoringTaskRegistration coreMonitoringTaskRegistration) {
+        Map<String,Object> map = new HashMap<>();
+        QueryWrapper<CoreMonitoringTaskRegistration> qw = new QueryWrapper<>();
+        qw.lambda().eq(CoreMonitoringTaskRegistration::getTaskId,coreMonitoringTaskRegistration.getTaskId());
+        List<CoreMonitoringTaskRegistration> list = list(qw);
+        map.put("dayNums",0);
+        map.put("noComplete",0);
+        /**
+         * list 判断属于今天的记录有多少条,通过taskStartTime判断
+         */
+        if(list.size() > 0){
+            int dayNums = list.stream().filter(cmt -> {
+                return isToday(cmt.getTaskStartTime());
+            }).collect(Collectors.toList()).size();
+
+            int noComplete = list.stream().filter(cmt -> {
+                return cmt.getTaskEndTime() == null;
+            }).collect(Collectors.toList()).size();
+
+            map.put("dayNums",dayNums);
+            map.put("noComplete",noComplete);
+        }
+        return map;
+    }
+
+    private  boolean isToday(Date dateToCheck) {
+        // 将传入的 java.util.Date 转换为 LocalDate
+        LocalDate dateToCheckLocal = dateToCheck.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+
+        // 获取当前的 LocalDate
+        LocalDate today = LocalDate.now();
+
+        // 比较两个 LocalDate 是否相等
+        return dateToCheckLocal.equals(today);
     }
 
     /**

+ 48 - 11
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/TMonitoringRetrievalPlanServiceImpl.java

@@ -33,9 +33,11 @@ import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.core.access.domain.CoreMonitoringTaskRegistration;
 import com.xunmei.core.access.domain.TMonitoringRetrievalPlan;
 import com.xunmei.core.access.domain.TMonitoringRetrievalPlanToExecOrg;
 import com.xunmei.core.access.dto.TMonitoringRetrievalPlanDto;
+import com.xunmei.core.access.mapper.CoreMonitoringTaskRegistrationMapper;
 import com.xunmei.core.access.mapper.TMonitoringRetrievalPlanMapper;
 import com.xunmei.core.access.mapper.TMonitoringRetrievalPlanToExecOrgMapper;
 import com.xunmei.core.access.service.ITMonitoringRetrievalPlanService;
@@ -70,6 +72,7 @@ import javax.annotation.Resource;
 import java.io.File;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.Duration;
 import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -133,6 +136,9 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
     @Autowired
     ICoreCompensateLogService compensateLogService;
 
+    @Autowired
+    private CoreMonitoringTaskRegistrationMapper coreMonitoringTaskRegistrationMapper;
+
     @Override
     public TableDataInfo selectPage(TMonitoringRetrievalPlan tMonitoringRetrievalPlan) {
         //未删除
@@ -1639,18 +1645,22 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
         String staticsPath = RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getStaticPathPrefix(), ErrorMsgConstants.QUERY_FILE_PATH_ERROR).getData();
         AccessPdf accessPdf = new AccessPdf();
         accessPdf.setTaskTitle("标题");
-        final SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
-        Calendar calendar = Calendar.getInstance();
-        String m = String.valueOf(calendar.get(Calendar.MINUTE));
-        if (m.length() == 1) {
-            m = "0" + calendar.get(Calendar.MINUTE);
-        }
-        String h = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY));
-        if (h.length() == 1) {
-            h = "0" + calendar.get(Calendar.HOUR_OF_DAY);
+
+        /**
+         * 获取任务所有的调阅记录
+         */
+        QueryWrapper<CoreMonitoringTaskRegistration> qw = new QueryWrapper<>();
+        qw.lambda().eq(CoreMonitoringTaskRegistration::getTaskId,accessPdfVO.getTaskId());
+        List<CoreMonitoringTaskRegistration> registers = coreMonitoringTaskRegistrationMapper.selectList(qw);
+        List<String> times = new ArrayList<>();
+        if(!registers.isEmpty()){
+            for (CoreMonitoringTaskRegistration registration : registers) {
+                String rel = dealTime(registration.getTaskStartTime(), registration.getTaskEndTime());
+                times.add(rel);
+            }
         }
-        String dateStr = format.format(accessPdfVO.getTaskStartTime()) + "-" + h + "时" + m + "分";
-        accessPdf.setTaskStartTime(dateStr);
+        accessPdf.setTaskTimes( "调阅时长(" + totalTime(accessPdfVO.getDurationTotal().longValue()) + ")");
+        accessPdf.setTimes(times);
         accessPdf.setCheckUser(accessPdfVO.getCheckUser());
         accessPdf.setOrgId(accessPdfVO.getOrgId());
         accessPdf.setOrgName(accessPdfVO.getOrgName());
@@ -1671,6 +1681,33 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
         return accessPdf;
     }
 
+    private String totalTime(long milliseconds){
+        long totalSeconds = milliseconds / 1000;
+        long totalMinutes = totalSeconds / 60;
+        long totalHours = totalMinutes / 60;
+
+        // 计算剩余的分钟数和秒数
+        long remainingMinutes = totalMinutes % 60;
+        long remainingSeconds = totalSeconds % 60;
+        return String.format("%02d小时%02d分钟%02d秒", totalHours, remainingMinutes, remainingSeconds);
+    }
+
+    private String dealTime(Date start,Date end){
+        final SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(end);
+        String m = String.valueOf(calendar.get(Calendar.MINUTE));
+        if (m.length() == 1) {
+            m = "0" + calendar.get(Calendar.MINUTE);
+        }
+        String h = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY));
+        if (h.length() == 1) {
+            h = "0" + calendar.get(Calendar.HOUR_OF_DAY);
+        }
+        String dateStr = format.format(start) + "-" + h + "时" + m + "分";
+        return dateStr;
+    }
+
     private String getFileRealPath(String filePath, String prefixPath, String staticsPath) {
 
         if (ObjectUtil.isEmpty(filePath)) {

+ 4 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/vo/AccessPdfVO.java

@@ -20,5 +20,8 @@ public class AccessPdfVO {
     private Date startTime;
     private Date endTime;
     private String checkUser;
-    private Date taskStartTime;
+    /**
+     * 调阅总时长
+     */
+    private Double durationTotal;
 }

+ 7 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/vo/CoreMonitoringTaskRegistrationVO.java

@@ -18,13 +18,16 @@ import java.util.List;
 public class CoreMonitoringTaskRegistrationVO extends CoreMonitoringTaskRegistration {
     @ApiModelProperty(value = "任务名")
     private String taskName;
+
     @ApiModelProperty(value = "任务状态")
     private String taskStatus;
+
     @JsonSerialize(using = ToStringSerializer.class)
     private Long orgId;
-    @ApiModelProperty(value = "任务结束时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-     private Date taskEndTime;
+
+    @ApiModelProperty(value = "总调阅时长")
+    private Double taskTotalTime;
+
     @ApiModelProperty(value = "总列表")
-    private List<CoreMonitoringTaskRegistrationMonitorVO>coreMonitoringTaskRegistrationMonitorVOList;
+    private List<CoreMonitoringTaskRegistrationMonitorVO> coreMonitoringTaskRegistrationMonitorVOList;
 }

+ 6 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/IQuestionService.java

@@ -84,4 +84,10 @@ public interface IQuestionService extends IService<Question> {
     WebPanelResult selectWebIndexData2(PanelListDto req);
 
     List<Question> selectQuestionByTaskIds(List<Long> taskIds);
+
+    /**
+     * 根据任务id删除 隐患清单
+     * @param taskId
+     */
+    void deleteByTaskId(Long taskId);
 }

+ 9 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionServiceImpl.java

@@ -6,6 +6,7 @@ import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.util.CollectionUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.DictConstants;
@@ -376,6 +377,14 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         return baseMapper.selectList(wrapper);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteByTaskId(Long taskId) {
+        UpdateWrapper<Question> uw = new UpdateWrapper<>();
+        uw.lambda().eq(Question::getSrcTaskId,taskId);
+        remove(uw);
+    }
+
     /**
      * 当前用户的工作台。有所属机构+有整改权限的待整改、所属机构+有确认权限的待确认、异议提出人+异议状态的异议审批
      *

+ 11 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java

@@ -129,7 +129,7 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
             }
 
             DateRange range = dateRange(appPlan, date);
-            Map<Long, List<SysWorkTime>> workTimes = orgDutyOrWorkTimes(range, orgs.stream().map(SysOrg::getId).collect(Collectors.toList()));
+            Map<Long, List<SysWorkTime>> workTimes = orgDutyAndWorkTimes(range, orgs.stream().map(SysOrg::getId).collect(Collectors.toList()));
 
             List<Resumption> existTasks = queryTask(range.getStartTime(), range.getEndTime(), CycleCommonEnum.getEnum(appPlan.getPlanCycle()), execOrgIds, Arrays.asList(appPlan.getSolidId()));
 
@@ -404,6 +404,16 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
 
         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))) {
+            /**
+             * 需求逻辑:
+             * 1、是否值班打卡,只与作息中是否配置了是否值班打卡有关。
+             * 2、歇业时配置值班打卡,执行范围为全天。
+             * 3、营业时配置值班打卡,执行范围是非营业时间段。
+             *
+             * 现有代码逻辑:
+             * 1、执行时刻为非营业时间 和 值班打卡配置为否
+             * 2、执行时刻不为非营业时间 和 作息为非营业状态
+             */
             //非营业时间没有值班打卡或其它时刻没有营业,不生成任务
             return new ArrayList<>();
         }

+ 17 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/mapper/CoreMonitoringRetrievalTaskRecordMapper.java

@@ -0,0 +1,17 @@
+package com.xunmei.core.retrieval.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.retrieval.domain.CoreMonitoringRetrievalTaskRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author gaoxiong
+ * @Title: 调阅时间记录mapper
+ * @Package
+ * @Description:
+ * @date 2024/7/2217:41
+ */
+@Mapper
+public interface CoreMonitoringRetrievalTaskRecordMapper extends BaseMapper<CoreMonitoringRetrievalTaskRecord> {
+
+}

+ 13 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskBuilderServiceImpl.java

@@ -29,7 +29,9 @@ import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.TaskCreatingServiceImplBase;
 import com.xunmei.core.access.domain.TMonitoringRetrievalPlan;
+import com.xunmei.core.access.mapper.CoreMonitoringTaskMonitorInfoMapper;
 import com.xunmei.core.access.mapper.CoreMonitoringTaskRegistrationMapper;
+import com.xunmei.core.access.mapper.CoreMonitoringTaskRegistrationMonitorMapper;
 import com.xunmei.core.access.mapper.TMonitoringRetrievalPlanToExecOrgMapper;
 import com.xunmei.core.access.service.ITMonitoringRetrievalPlanService;
 import com.xunmei.core.retrieval.mapper.CoreMonitoringRetrievalTaskMapper;
@@ -79,6 +81,15 @@ public class CoreMonitoringRetrievalTaskBuilderServiceImpl extends ServiceImpl<C
     @Autowired
     TMonitoringRetrievalPlanToExecOrgMapper tMonitoringRetrievalPlanToExecOrgMapper;
 
+
+    @Autowired
+    private CoreMonitoringTaskRegistrationMonitorMapper coreMonitoringTaskRegistrationMonitorMapper;
+
+
+    @Autowired
+    private CoreMonitoringTaskMonitorInfoMapper coreMonitoringTaskMonitorInfoMapper;
+
+
     @Async
     /**
      * 无周期任务生成
@@ -332,6 +343,8 @@ public class CoreMonitoringRetrievalTaskBuilderServiceImpl extends ServiceImpl<C
     @Override
     public int initializationTask(Long id) {
         int i = 0;
+        coreMonitoringTaskMonitorInfoMapper.deleteByTaskId(id);
+        coreMonitoringTaskRegistrationMonitorMapper.deleteMonitorByTaskId(id);
         i = coreMonitoringRetrievalTaskMapper.initializationTaskByHand(id);
         i = coreMonitoringTaskRegistrationMapper.deleteByTaskId(id);
         return i;

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/ICoreSafetyTaskDataNfcService.java

@@ -62,4 +62,5 @@ public interface ICoreSafetyTaskDataNfcService extends IService<CoreSafetyTaskDa
      */
     int deleteCoreSafetyTaskDataNfcById(Long id);
 
+
 }

+ 6 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/ICoreSafetyTaskDataRemarkimgService.java

@@ -62,4 +62,10 @@ public interface ICoreSafetyTaskDataRemarkimgService extends IService<CoreSafety
      */
     int deleteCoreSafetyTaskDataRemarkimgById(Long id);
 
+    /**
+     * 删除任务数据
+     * @param taskId
+     */
+    void deleteByTaskId(Long taskId);
+
 }

+ 7 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/ICoreSafetyTaskDataService.java

@@ -62,4 +62,11 @@ public interface ICoreSafetyTaskDataService extends IService<CoreSafetyTaskData>
      */
     int deleteCoreSafetyTaskDataById(Long id);
 
+    /**
+     * 根据任务id删除任务数据
+     * @param taskId
+     * @return
+     */
+    void deleteByTaskId(Long taskId);
+
 }

+ 8 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskDataRemarkimgServiceImpl.java

@@ -2,6 +2,7 @@ package com.xunmei.core.safetyCheck.service.impl;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.xunmei.core.safetyCheck.domain.CoreSafetyTaskDataRemarkimg;
 import com.xunmei.core.safetyCheck.mapper.CoreSafetyTaskDataRemarkimgMapper;
 import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskDataRemarkimgService;
@@ -93,4 +94,11 @@ public class CoreSafetyTaskDataRemarkimgServiceImpl extends ServiceImpl<CoreSafe
     public int deleteCoreSafetyTaskDataRemarkimgById(Long id) {
         return coreSafetyTaskDataRemarkimgMapper.deleteById(id);
     }
+
+    @Override
+    public void deleteByTaskId(Long taskId) {
+        UpdateWrapper<CoreSafetyTaskDataRemarkimg> uw = new UpdateWrapper<>();
+        uw.lambda().eq(CoreSafetyTaskDataRemarkimg::getTaskId, taskId);
+        remove(uw);
+    }
 }

+ 10 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskDataServiceImpl.java

@@ -2,6 +2,7 @@ package com.xunmei.core.safetyCheck.service.impl;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.xunmei.core.safetyCheck.domain.CoreSafetyTaskData;
 import com.xunmei.core.safetyCheck.mapper.CoreSafetyTaskDataMapper;
 import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskDataService;
@@ -12,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 安全检查项Service业务层处理
@@ -91,4 +93,12 @@ public class CoreSafetyTaskDataServiceImpl extends ServiceImpl<CoreSafetyTaskDat
     public int deleteCoreSafetyTaskDataById(Long id) {
         return coreSafetyTaskDataMapper.deleteById(id);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteByTaskId(Long taskId) {
+        UpdateWrapper<CoreSafetyTaskData> uw = new UpdateWrapper<>();
+        uw.lambda().eq(CoreSafetyTaskData::getTaskId, taskId);
+        remove(uw);
+    }
 }

+ 32 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskServiceImpl.java

@@ -18,11 +18,16 @@ import com.xunmei.common.core.vo.IdNameVo;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.core.question.service.IQuestionService;
+import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
 import com.xunmei.core.safetyCheck.domain.CoreSafecheckPlanToRole;
 import com.xunmei.core.safetyCheck.domain.CoreSafetyTask;
 import com.xunmei.core.safetyCheck.enums.SafetyTaskSourceType;
 import com.xunmei.core.safetyCheck.mapper.CoreSafecheckPlanToRoleMapper;
 import com.xunmei.core.safetyCheck.mapper.CoreSafetyTaskMapper;
+import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskDataNfcService;
+import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskDataRemarkimgService;
+import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskDataService;
 import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskService;
 import com.xunmei.core.safetyCheck.vo.CheckNfcRecord;
 import com.xunmei.core.safetyCheck.vo.CoreSafetyTaskExport;
@@ -33,6 +38,7 @@ import com.xunmei.system.api.RemoteRoleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.io.Serializable;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -55,7 +61,19 @@ public class CoreSafetyTaskServiceImpl extends ServiceImpl<CoreSafetyTaskMapper,
     private RemoteRoleService remoteRoleService;
 
     @Autowired
-    RemoteOrgService remoteOrgService;
+    private RemoteOrgService remoteOrgService;
+
+    @Resource
+    private ICoreSafetyTaskDataService iCoreSafetyTaskDataService;
+
+    @Resource
+    private ICoreSafetyTaskDataRemarkimgService iCoreSafetyTaskDataRemarkimgService;
+
+    @Resource
+    private IQuestionService questionService;
+
+    @Autowired
+    private ICoreRegisterBookPdfService registerBookPdfService;
 
     @Override
     public TableDataInfo<CoreSafetyTask> selectPage(CoreSafetyTask coreSafetyTask) {
@@ -157,6 +175,19 @@ public class CoreSafetyTaskServiceImpl extends ServiceImpl<CoreSafetyTaskMapper,
 
     @Override
     public boolean removeById(Serializable taskId) {
+
+        //删除问题整改清单
+        questionService.deleteByTaskId((Long) taskId);
+
+        //删除登记簿数据
+        registerBookPdfService.removeById((Long) taskId);
+
+        //删除任务数据
+        iCoreSafetyTaskDataService.deleteByTaskId((Long) taskId);
+        iCoreSafetyTaskDataRemarkimgService.deleteByTaskId((Long) taskId);
+
+
+        //删除任务
         LambdaUpdateWrapper<CoreSafetyTask> wrapper = new LambdaUpdateWrapper<>();
         wrapper.eq(CoreSafetyTask::getId, taskId)
                 .eq(CoreSafetyTask::getSourceType, 1)

+ 5 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/access/CoreMonitoringTaskMonitorInfoMapper.xml

@@ -156,4 +156,9 @@
             #{id}
         </foreach>
     </delete>
+    <delete id="deleteByTaskId">
+        delete from core_monitoring_task_monitor_info where task_monitor_id in (
+            select a.id from core_monitoring_task_registration_monitor a LEFT JOIN
+                             core_monitoring_task_registration b on a.task_registration_id = b.id where b.task_id = #{taskId})
+    </delete>
 </mapper>

+ 28 - 20
soc-modules/soc-modules-core/src/main/resources/mapper/access/CoreMonitoringTaskRegistrationMonitorMapper.xml

@@ -53,29 +53,33 @@
         where id = #{id}
     </select>
     <select id="selectTaskName" resultType="com.xunmei.core.access.vo.CoreMonitoringTaskRegistrationVO">
-        SELECT cmrt.org_id          as orgId,
-               cmtr.id              as id,
-               cmrt.task_name       as taskName,
-               cmrt.status          as taskStatus,
-               cmtr.task_start_time as taskStartTime,
-               cmrt.end_time        AS taskEndTime
-        FROM core_monitoring_retrieval_task cmrt
-                 LEFT JOIN core_monitoring_task_registration cmtr ON cmtr.task_id = cmrt.id
-        WHERE cmtr.task_id = #{taskId}
+        SELECT
+            cmrt.org_id AS orgId,
+            cmrt.id AS id,
+            cmrt.task_name AS taskName,
+            cmrt.STATUS AS taskStatus,
+            cmtr.task_start_time AS taskStartTime,
+            cmrt.end_time AS taskEndTime ,
+            cmrt.duration_total as taskTotalTime
+        FROM
+            core_monitoring_retrieval_task cmrt
+                LEFT JOIN core_monitoring_task_registration cmtr ON cmtr.task_id = cmrt.id
+        WHERE cmtr.task_end_time is null
+              and  cmtr.task_id = #{taskId}
     </select>
     <select id="selectMonitorByTaskRegistrationId"
             resultType="com.xunmei.core.access.vo.CoreMonitoringTaskRegistrationMonitorVO">
-SELECT
-    id AS id,
-    `host` AS `host`,
-    video_channel AS videoChannel,
-    video_channel_name AS videoChannelName,
-    host_name AS hostName,
-    area_code,
-    area_name
-FROM
-    core_monitoring_task_registration_monitor
-WHERE task_registration_id = #{taskRegistrationId}
+        SELECT
+            id AS id,
+            `host` AS `host`,
+            video_channel AS videoChannel,
+            video_channel_name AS videoChannelName,
+            host_name AS hostName,
+            area_code,
+            area_name
+        FROM
+            core_monitoring_task_registration_monitor
+        WHERE task_registration_id in (select id from core_monitoring_task_registration where task_id = #{taskId});
     </select>
 <!--    <select id="selectMonitorById"-->
 <!--            resultType="com.xunmei.core.access.vo.CoreMonitoringTaskRegistrationMonitorVO">-->
@@ -207,5 +211,9 @@ WHERE task_registration_id = #{taskRegistrationId}
             #{id}
         </foreach>
     </delete>
+    <delete id="deleteMonitorByTaskId">
+        delete from core_monitoring_task_registration_monitor where
+                        task_registration_id in (select id from core_monitoring_task_registration where task_id = #{taskId})
+    </delete>
 
 </mapper>

+ 3 - 3
soc-modules/soc-modules-core/src/main/resources/mapper/access/TMonitoringRetrievalPlanMapper.xml

@@ -150,11 +150,11 @@
             cycle AS cycle,
             plan_start_time AS startTime,
             plan_end_time AS endTime,
-            b.task_start_time AS taskStartTime,
-            b.create_by AS checkUser
+            b.create_by AS checkUser,
+            duration_total as durationTotal
         FROM
             core_monitoring_retrieval_task a
-                LEFT JOIN core_monitoring_task_registration b ON a.id = b.task_id
+                LEFT JOIN (select * from  core_monitoring_task_registration order by create_time asc limit 0,1) b ON a.id = b.task_id
         WHERE
            a. id = #{taskId}
     </select>

+ 6 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskMapper.xml

@@ -57,7 +57,8 @@
                order_num,
                batch_num,
                submit_time,
-               exception_count
+               exception_count,
+               duration_total
         from core_monitoring_retrieval_task
     </sql>
 
@@ -531,6 +532,10 @@
                 sign_img =
                 #{signImg},
             </if>
+            <if test="durationTotal != null">
+                duration_total =
+                #{durationTotal},
+            </if>
         </trim>
         where id = #{id}
     </update>

+ 7 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskRecordMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xunmei.core.retrieval.mapper.CoreMonitoringRetrievalTaskRecordMapper">
+
+</mapper>

+ 4 - 4
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java

@@ -324,7 +324,6 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         final Font tableFont = pdfTableVo.getTableFont();
 
         PdfUtil.dealHeader(document, fs, RegisterBookType.MONITOR_ACCESS.getText(), 24);
-        String checkTime = data.getTaskStartTime();
         String checkUser = data.getCheckUser();
 
         Font titleFont = new Font(fs, 10, Font.NORMAL);
@@ -333,11 +332,12 @@ public class LocalSysFileServiceImpl implements ISysFileService {
 
         PdfUtil.createPDFCell(titleFont, table, "调阅人", Element.ALIGN_MIDDLE, 3, 1);
         PdfUtil.createPDFCell(titleFont, table, checkUser, Element.ALIGN_MIDDLE, 6, 1);
+        PdfUtil.createPDFCell(titleFont, table, "调阅人签字", Element.ALIGN_MIDDLE, 4, 1);
 
-        PdfUtil.createPDFCell(titleFont, table, "调阅时间", Element.ALIGN_MIDDLE, 4, 1);
-        PdfUtil.createPDFCell(titleFont, table, checkTime, Element.ALIGN_MIDDLE, 15, 1);
 
-        PdfUtil.createPDFCell(titleFont, table, "调阅人签字", Element.ALIGN_MIDDLE, 4, 1);
+        PdfUtil.createPDFCell(titleFont, table, data.getTaskTimes(), Element.ALIGN_MIDDLE, 19, 1);
+        PdfUtil.dealAccessTimes(document,table, tableFont, titleFont,data.getTimes());
+
         List<String> list = new ArrayList<>();
         list.add(data.getSignImg());
         dealImageCell(list, table, 1, 80, 30,15,1);

+ 13 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java

@@ -665,6 +665,19 @@ public class PdfUtil {
         }
     }
 
+    public static void dealAccessTimes(Document document, PdfPTable table, Font tableFont, Font tableTitleFont, List<String> data)throws DocumentException {
+        if(ObjectUtil.isNotEmpty(data)){
+            for (int i = 1; i <= data.size() ; i++) {
+                String time = data.get(i - 1);
+                PdfUtil.createPDFCell(tableFont, table, String.valueOf(i), Element.ALIGN_MIDDLE, 2, 1);
+                PdfUtil.createPDFCell(tableFont, table, time, Element.ALIGN_MIDDLE, 17, 1);
+            }
+        }else {
+            PdfUtil.createPDFCell(tableFont, table, "/", Element.ALIGN_MIDDLE, 2, 1);
+            PdfUtil.createPDFCell(tableFont, table, "/", Element.ALIGN_MIDDLE, 17, 1);
+        }
+    }
+
     public static void dealAccessPBody(Document document, PdfPTable table, Font tableFont, Font tableTitleFont, List<AccessDataVo> data) throws DocumentException {
         PdfUtil.createPDFCell(tableTitleFont, table, "序号", Element.ALIGN_MIDDLE, 2, 1);
         PdfUtil.createPDFCell(tableTitleFont, table, "区域名称", Element.ALIGN_MIDDLE, 6, 1);

+ 2 - 2
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreLetterTask.java

@@ -18,9 +18,9 @@ public class CoreLetterTask {
 
 
     public void updateLetterStatus() {
-        String id = UUID.fastUUID().toString();
+      /*  String id = UUID.fastUUID().toString();
         log.info("开始执行介绍信修改状态定时任务,超过出入申请有效期的数据状态修改为 已逾期,当前任务 id:{}", id);
         R<Boolean> booleanR = remoteLetterService.updateLetterStatus(SecurityConstants.INNER);
-        log.info("执行介绍信修改状态定时任务,超过出入申请有效期的数据状态修改为 已逾期已结束,当前任务 id:{},结果:{}", id, JSON.toJSONString(booleanR));
+        log.info("执行介绍信修改状态定时任务,超过出入申请有效期的数据状态修改为 已逾期已结束,当前任务 id:{},结果:{}", id, JSON.toJSONString(booleanR));*/
     }
 }

+ 8 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeController.java

@@ -160,11 +160,18 @@ public class SysWorkTimeController extends BaseController {
         return sysWorkTimeService.findWorkTimeByDateRangeAndOrgId(startTime, endTime, orgId);
     }
 
-    @ApiOperation(value = "查询机构范围内的作息配置")
+    @ApiOperation(value = "查询机构范围内的作息配置,只查询了营业")
     @PostMapping("/findWorkTimeByRange")
     R<List<SysWorkTime>> findWorkTimeByRange(@RequestBody WorkTimeDto workTimeDto) {
         return  R.ok(sysWorkTimeService.findFutureWorkTime(workTimeDto));
     }
+
+
+    @ApiOperation(value = "查询机构范围内的作息配置,包含营业和歇业")
+    @PostMapping("/findAllWorkTimeByRange")
+    R<List<SysWorkTime>> findAllFutureWorkTime(@RequestBody WorkTimeDto workTimeDto) {
+        return  R.ok(sysWorkTimeService.findAllFutureWorkTime(workTimeDto));
+    }
     @ApiOperation(value = "检查时间范围内有无作息")
     @InnerAuth
     @PostMapping("/checkWorkTime")

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

@@ -98,6 +98,7 @@ public interface ISysWorkTimeService extends IService<SysWorkTime> {
     List<String> findWorkTimeByDateRangeAndOrgId(Date startTime, Date endTime, Long orgId);
 
     List<SysWorkTime> findFutureWorkTime(WorkTimeDto workTimeDto);
+    List<SysWorkTime> findAllFutureWorkTime(WorkTimeDto workTimeDto);
 
     int checkWorkTime(Map<String,Object> map);
 

+ 28 - 5
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java

@@ -789,11 +789,34 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
 
     @Override
     public List<SysOrgVO> loadingOrgCache() {
-        List<SysOrgVO> sysOrgVOS = baseMapper.selectSysOrgVOList();
-        List<SysOrgVO> hsOrgs = sysOrgVOS.stream().filter(x -> ObjectUtil.equal(x.getType(), 3)).collect(Collectors.toList());
-        clearOrgCache();
-        RedisUtils.setCacheList(CacheConstants.ORG_CACHE_LIST_KEY, sysOrgVOS);
-        RedisUtils.setCacheList(CacheConstants.HS_ORG_CACHE_LIST_KEY, hsOrgs);
+        RLock rLock=null;
+        boolean lockflag=false;
+        List<SysOrgVO> sysOrgVOS =new ArrayList<>();
+        try {
+
+            sysOrgVOS = baseMapper.selectSysOrgVOList();
+            List<SysOrgVO> hsOrgs = sysOrgVOS.stream().filter(x -> ObjectUtil.equal(x.getType(), 3)).collect(Collectors.toList());
+            RedissonClient redissonClient = RedisUtils.getClient();
+            rLock=  redissonClient.getLock("loadingOrgCache");
+            lockflag= rLock.tryLock(200L,5000L, TimeUnit.MILLISECONDS);
+            if(lockflag)
+            {
+                clearOrgCache();
+                RedisUtils.setCacheList(CacheConstants.ORG_CACHE_LIST_KEY, sysOrgVOS);
+                RedisUtils.setCacheList(CacheConstants.HS_ORG_CACHE_LIST_KEY, hsOrgs);
+            }
+        }
+        catch (Exception e)
+        {
+            log.error(e.getMessage());
+        }
+        finally {
+
+            if(lockflag&& rLock.isHeldByCurrentThread())
+            {
+                rLock.unlock();
+            }
+        }
         return sysOrgVOS;
     }
 

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

@@ -507,6 +507,23 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
     }
 
     @Override
+    public List<SysWorkTime> findAllFutureWorkTime(WorkTimeDto workTimeDto) {
+        return lambdaQuery()
+                .ge(SysWorkTime::getYmdDate, workTimeDto.getStartTime())
+                .le(SysWorkTime::getYmdDate, workTimeDto.getEndTime())
+                .in(SysWorkTime::getOrgId, workTimeDto.getOrgIdList())
+                .select(SysWorkTime::getId,
+                        SysWorkTime::getIsEnable,
+                        SysWorkTime::getYmdDate,
+                        SysWorkTime::getOrgId, SysWorkTime::getOpenTime,
+                        SysWorkTime::getCloseTime,
+                        SysWorkTime::getWorkTime,
+                        SysWorkTime::getWorkOffTime,
+                        SysWorkTime::getIsDuty)
+                .list();
+    }
+
+    @Override
     public int checkWorkTime(Map<String, Object> param) {
         return sysWorkTimeMapper.checkWorkTime(param);
     }

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است