Преглед изворни кода

Merge branch 'V0.0.5' of http://10.87.21.221:8000/jzyd_yyds/soc into V0.0.5

jiawuxian пре 1 година
родитељ
комит
51b70c507a
23 измењених фајлова са 579 додато и 134 уклоњено
  1. 3 1
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteFileService.java
  2. 22 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/AccessDataVo.java
  3. 40 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/AccessPdf.java
  4. 6 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteFileFallbackFactory.java
  5. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/domain/CoreMonitoringRetrievalTask.java
  6. 1 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/vo/CoreMonitoringRetrievalTaskVo.java
  7. 1 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/RegisterBookType.java
  8. 4 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/mapper/TMonitoringRetrievalPlanMapper.java
  9. 4 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/ITMonitoringRetrievalPlanService.java
  10. 5 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/CoreMonitoringTaskRegistrationServiceImpl.java
  11. 97 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/TMonitoringRetrievalPlanServiceImpl.java
  12. 27 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/vo/AccessPdfVO.java
  13. 12 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/vo/MonitorInfoVO.java
  14. 9 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java
  15. 10 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  16. 4 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/service/impl/SafetyInspectServiceImpl.java
  17. 33 0
      soc-modules/soc-modules-core/src/main/resources/mapper/access/TMonitoringRetrievalPlanMapper.xml
  18. 4 0
      soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskMapper.xml
  19. 7 0
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/controller/SysFileController.java
  20. 2 0
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/ISysFileService.java
  21. 67 9
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java
  22. 102 0
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfPageHelperEvent.java
  23. 118 108
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java

+ 3 - 1
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteFileService.java

@@ -4,6 +4,7 @@ import com.xunmei.common.core.constant.ServiceNameConstants;
 import com.xunmei.common.core.domain.R;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
+import com.xunmei.system.api.domain.AccessPdf;
 import com.xunmei.system.api.domain.SafeCheckTaskRegisterBookVo;
 import com.xunmei.system.api.domain.SysFile;
 import com.xunmei.system.api.factory.RemoteFileFallbackFactory;
@@ -48,7 +49,8 @@ public interface RemoteFileService {
     R<String> generateResumptionPdf(@RequestBody Map<String, Object> data);
     @PostMapping(value = "/file/generateSafeCheckPdf")
     R<String> generateSafeCheckPdf(@RequestBody SafeCheckTaskRegisterBookVo data);
-
+    @PostMapping(value = "/file/generateAccessPdf")
+    R<String> generateAccessPdf(@RequestBody AccessPdf data);
     /**
      * 生成预案演练登记簿
      *

+ 22 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/AccessDataVo.java

@@ -0,0 +1,22 @@
+package com.xunmei.system.api.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author :LuoWei
+ * @date : 2023/12/18
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class AccessDataVo {
+    private String hostName;
+    private String videoChannelName;
+    private String project;
+    private String situation;
+    private String abnormalIllustrate;
+}

+ 40 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/AccessPdf.java

@@ -0,0 +1,40 @@
+package com.xunmei.system.api.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author :LuoWei
+ * @date : 2023/12/18
+ */
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Builder
+public class AccessPdf {
+    private Long orgId;
+    @ApiModelProperty("任务名称")
+    private String taskTitle;
+    @ApiModelProperty("机构名称")
+    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 String checkUser;
+    private List<AccessDataVo>dataVos;
+}

+ 6 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteFileFallbackFactory.java

@@ -5,6 +5,7 @@ import com.xunmei.common.core.domain.R;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
 import com.xunmei.system.api.RemoteFileService;
+import com.xunmei.system.api.domain.AccessPdf;
 import com.xunmei.system.api.domain.SafeCheckTaskRegisterBookVo;
 import com.xunmei.system.api.domain.SysFile;
 import feign.Response;
@@ -51,6 +52,11 @@ public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileServ
             }
 
             @Override
+            public R<String> generateAccessPdf(AccessPdf data) {
+                return R.fail();
+            }
+
+            @Override
             public R<String> generateDrillPdf(Map<String, Object> data) {
                 log.error("生成预案演练登记簿失败:{},参数:{}", throwable.getMessage(), JSON.toJSONString(data));
                 return R.fail();

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

@@ -125,7 +125,7 @@ private static final long serialVersionUID=1L;
     @ApiModelProperty(value = "0正常,1删除")
     private Integer isDeleted;
 
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+      private String pdfUrl;
 @Override
 public String toString(){
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 1 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/vo/CoreMonitoringRetrievalTaskVo.java

@@ -121,6 +121,7 @@ public class CoreMonitoringRetrievalTaskVo extends BaseEntity {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @ApiModelProperty(value = "调阅开始时间")
     private Date startTime;
+    private String pdfUrl;
 
     /**
      * 调阅结束时间

+ 1 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/RegisterBookType.java

@@ -20,6 +20,7 @@ public enum RegisterBookType {
     SAFETY_DRILL(2, "预案演练登记簿"),
     VISIT_RECORD(3, "来访管理登记簿"),
     SAFE_CHECK_REPORT(26, "安全检查登记簿"),
+    MONITOR_ACCESS(28,"监控调阅登记簿"),
 
 
     ;

+ 4 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/mapper/TMonitoringRetrievalPlanMapper.java

@@ -4,9 +4,11 @@ package com.xunmei.core.access.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xunmei.core.access.domain.TMonitoringRetrievalPlan;
+import com.xunmei.core.access.vo.AccessPdfVO;
 import com.xunmei.core.access.vo.TMonitoringRetrievalPlanVO;
 import com.xunmei.core.evaluate.dto.EvaluateTaskDTO;
 import com.xunmei.core.evaluate.vo.CoreEvaluateTaskVO;
+import com.xunmei.system.api.domain.AccessDataVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -86,4 +88,6 @@ public interface TMonitoringRetrievalPlanMapper extends BaseMapper<TMonitoringRe
      * @return 结果
      */
     int deleteTMonitoringRetrievalPlanByIds(Long[] ids);
+  List<AccessDataVo>   selectPointByTask(Long taskId);
+    AccessPdfVO selectTask(Long taskId);
 }

+ 4 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/ITMonitoringRetrievalPlanService.java

@@ -3,7 +3,9 @@ package com.xunmei.core.access.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.core.access.domain.TMonitoringRetrievalPlan;
+import com.xunmei.core.access.vo.AccessPdfVO;
 import com.xunmei.core.access.vo.TMonitoringRetrievalPlanVO;
+import com.xunmei.core.safetyCheck.domain.CoreSafetyTask;
 
 import java.text.ParseException;
 import java.util.List;
@@ -83,4 +85,6 @@ public interface ITMonitoringRetrievalPlanService extends IService<TMonitoringRe
      * @return Page
      */
     TableDataInfo<TMonitoringRetrievalPlanVO> selectPage(TMonitoringRetrievalPlan tMonitoringRetrievalPlan);
+    String createSafetyCheckRegisterBookPdf(AccessPdfVO accessPdfVO);
+    void buildPdf(Long taskId);
 }

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

@@ -16,6 +16,7 @@ import com.xunmei.core.access.domain.CoreMonitoringTaskRegistration;
 import com.xunmei.core.access.mapper.CoreMonitoringTaskMonitorInfoMapper;
 import com.xunmei.core.access.mapper.CoreMonitoringTaskRegistrationMapper;
 import com.xunmei.core.access.service.ICoreMonitoringTaskRegistrationService;
+import com.xunmei.core.access.service.ITMonitoringRetrievalPlanService;
 import com.xunmei.core.access.vo.CoreMonitoringTaskRegistrationVO;
 import com.xunmei.core.retrieval.mapper.CoreMonitoringRetrievalTaskMapper;
 import com.xunmei.core.retrieval.service.ICoreMonitoringRetrievalTaskService;
@@ -47,7 +48,8 @@ public class CoreMonitoringTaskRegistrationServiceImpl extends ServiceImpl<CoreM
     private CoreMonitoringTaskMonitorInfoMapper coreMonitoringTaskMonitorInfoMapper;//项目
     @Autowired
     private RemoteNfcBindService remoteNfcBindService;
-
+@Autowired
+private ITMonitoringRetrievalPlanService itMonitoringRetrievalPlanService;
     /**
      * 查询【请填写功能名称】
      *
@@ -143,6 +145,8 @@ public class CoreMonitoringTaskRegistrationServiceImpl extends ServiceImpl<CoreM
         int i = coreMonitoringTaskMonitorInfoMapper.selectAbnormalByTaskId(coreMonitoringTaskRegistration.getTaskId());
         coreMonitoringRetrievalTask.setExceptionCount(i);
         coreMonitoringRetrievalTaskMapper.updateCoreMonitoringRetrievalTask(coreMonitoringRetrievalTask);
+        //生成pdf
+        itMonitoringRetrievalPlanService.buildPdf(coreMonitoringTaskRegistration.getTaskId());
         return coreMonitoringTaskRegistrationMapper.updateById(coreMonitoringTaskRegistration);
     }
 

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

@@ -1,43 +1,56 @@
 package com.xunmei.core.access.service.impl;
 
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.nacos.common.utils.CollectionUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.DateRange;
+import com.xunmei.common.core.domain.registerbook.domain.CoreRegisterBookPdf;
 import com.xunmei.common.core.domain.retrieval.domain.CoreMonitoringRetrievalTask;
+import com.xunmei.common.core.enums.RegisterBookType;
 import com.xunmei.common.core.exception.ServiceException;
+import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.StringUtils;
 
 import com.xunmei.common.core.web.page.TableDataInfo;
 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.mapper.TMonitoringRetrievalPlanMapper;
 import com.xunmei.core.access.service.ITMonitoringRetrievalPlanService;
 
+import com.xunmei.core.access.vo.AccessPdfVO;
 import com.xunmei.core.access.vo.TMonitoringRetrievalPlanVO;
+import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
+import com.xunmei.core.retrieval.mapper.CoreMonitoringRetrievalTaskMapper;
 import com.xunmei.core.retrieval.service.ICoreMonitoringRetrievalTaskBuilderService;
 import com.xunmei.core.retrieval.service.ICoreMonitoringRetrievalTaskService;
 
+import com.xunmei.core.safetyCheck.domain.CoreSafetyTask;
+import com.xunmei.core.safetyCheck.vo.regsiter.AppTaskRegisterPointVo;
+import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteRoleService;
 import com.xunmei.system.api.RemoteUserService;
-import com.xunmei.system.api.domain.SysOrg;
-import com.xunmei.system.api.domain.SysRole;
-import com.xunmei.system.api.domain.SysUser;
+import com.xunmei.system.api.domain.*;
 
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.io.File;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -71,11 +84,15 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
     @Lazy
     @Resource
     private ICoreMonitoringRetrievalTaskService iCoreMonitoringRetrievalTaskService;
-
+    @Autowired
+    private ICoreRegisterBookPdfService registerBookPdfService;
     @Lazy
     @Resource
     private ICoreMonitoringRetrievalTaskBuilderService coreMonitoringRetrievalTaskBuilderService;
-
+    @Autowired
+    private RemoteFileService fileService;
+    @Autowired
+private CoreMonitoringRetrievalTaskMapper coreMonitoringRetrievalTaskMapper;
     @Override
     public TableDataInfo selectPage(TMonitoringRetrievalPlan tMonitoringRetrievalPlan) {
         //未删除
@@ -124,6 +141,8 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
     }
 
 
+
+
     /**
      * 查询监控调阅计划
      *
@@ -853,4 +872,77 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
         return tMonitoringRetrievalPlanMapper.deleteById(id);
     }
 
+    private String buildAccessPdfData(AccessPdf data) {
+        String fileOrgName = remoteOrgService.selectOrgById(data.getOrgId(), SecurityConstants.INNER).getShortName();
+        String fileName = fileOrgName + "_" + RegisterBookType.MONITOR_ACCESS.getText() + "_" + DateUtil.format(new Date(), "yyyyMMddHHmmss") + ".pdf";
+        data.setDest(fileName);
+        //新方式生成pdf
+        try {
+            //返回相对地址
+            return fileService.generateAccessPdf(data).getData();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public String createAccessPdfNow(AccessPdf data) {
+        return buildAccessPdfData(data);
+    }
+    @Async
+    @Override
+    public void buildPdf(Long taskId) {
+        AccessPdfVO accessPdfVO = baseMapper.selectTask(taskId);
+        createSafetyCheckRegisterBookPdf(accessPdfVO);
+    }
+    @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    public String createSafetyCheckRegisterBookPdf(AccessPdfVO accessPdfVO) {
+        AccessPdf accessPdf = buildSafetyCheckRegisterBookData(accessPdfVO);
+        String url = this.createAccessPdfNow(accessPdf);
+        CoreRegisterBookPdf registerBookPdf=new CoreRegisterBookPdf();
+      //  registerBookPdf.setId(appSafetyCheckTask.getId());
+        registerBookPdf.setRegisterBookType(RegisterBookType.MONITOR_ACCESS.getNum());
+        registerBookPdf.setDate(new Date());
+        SysOrg org = remoteOrgService.selectSysOrgById(accessPdf.getOrgId(), SecurityConstants.INNER);
+        registerBookPdf.setOrgId(org.getId());
+        registerBookPdf.setOrgPath(org.getPath());
+        registerBookPdf.setFileUrl(url);
+        //registerBookPdf.setFileName(StringUtils.substringAfterLast(url, "\\"));
+        registerBookPdf.setFileName(StringUtils.substringAfterLast(url, File.separator));
+        registerBookPdf.setOrgName(accessPdf.getOrgName());
+        if (StringUtils.isEmpty(url) || StringUtils.isEmpty(registerBookPdf.getFileName())) {
+            throw new SystemException(ErrorMsgConstants.GENERATE_PDF_ERROR);
+        }
+        registerBookPdfService.save(registerBookPdf);
+        CoreMonitoringRetrievalTask tem = new CoreMonitoringRetrievalTask();
+        tem.setId(accessPdfVO.getTaskId());
+        tem.setPdfUrl(url);
+        coreMonitoringRetrievalTaskMapper.updateCoreMonitoringRetrievalTask(tem);
+        return url;
+    }
+    public AccessPdf buildSafetyCheckRegisterBookData(AccessPdfVO accessPdfVO) {
+        AccessPdf accessPdf = new AccessPdf();
+        accessPdf.setTaskTitle("标题");
+        final SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
+        String dateStr = format.format(accessPdfVO.getTaskStartTime());
+        accessPdf.setTaskStartTime(dateStr);
+        accessPdf.setCheckUser(accessPdfVO.getCheckUser());
+        accessPdf.setOrgId(accessPdfVO.getOrgId());
+        accessPdf.setOrgName(accessPdfVO.getOrgName());
+        List<AccessDataVo> dataVos = new ArrayList<>();
+        List<AccessDataVo> accessDataVos = baseMapper.selectPointByTask(accessPdfVO.getTaskId());
+        for (AccessDataVo vo :
+                accessDataVos) {
+            AccessDataVo v = new AccessDataVo();
+            v.setHostName(vo.getHostName());
+            v.setVideoChannelName(vo.getVideoChannelName());
+            v.setProject(vo.getProject());
+            v.setSituation(vo.getSituation());
+            v.setAbnormalIllustrate(vo.getAbnormalIllustrate());
+            dataVos.add(v);
+        }
+        accessPdf.setDataVos(dataVos);
+        return accessPdf;
+    }
 }

+ 27 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/vo/AccessPdfVO.java

@@ -0,0 +1,27 @@
+package com.xunmei.core.access.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author :LuoWei
+ * @date : 2023/12/18
+ */
+@Data
+public class AccessPdfVO {
+    private Long taskId;
+    private Long orgId;
+    private String orgName;
+    private String hostName;
+    private String videoChannelName;
+    private String project;
+    private String situation;
+    private String abnormalIllustrate;
+    private String cycle;
+    private Date startTime;
+    private Date endTime;
+    private String checkUser;
+    private Date taskStartTime;
+}

+ 12 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/vo/MonitorInfoVO.java

@@ -0,0 +1,12 @@
+package com.xunmei.core.access.vo;
+
+import lombok.Data;
+
+/**
+ * @author :LuoWei
+ * @date : 2023/12/18
+ */
+@Data
+public class MonitorInfoVO {
+
+}

+ 9 - 5
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -768,8 +768,8 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         String staticsPath = RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getStaticPathPrefix(), ErrorMsgConstants.QUERY_FILE_PATH_ERROR).getData();
         String orgName = task.getOrgName();
         String drillSite = task.getDrillSite();
-        String startTime = DateUtil.format(task.getDrillStartTime(), "yyyy年MM月dd日 HH:mm");
-        String endTime = DateUtil.format(task.getDrillEndTime(), "HH:mm");
+        String startTime = DateUtil.format(task.getDrillStartTime(), "yyyy年MM月dd日 HH时mm分");
+        String endTime = DateUtil.format(task.getDrillEndTime(), "HH时mm分");
         String drillTime = startTime + " - " + endTime;
         String hostName = task.getHostName() == null ? StringUtil.EMPTY_STRING : task.getHostName();
         String typeText = task.getTypeText() == null ? StringUtil.EMPTY_STRING : task.getTypeText();
@@ -783,17 +783,21 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         data.put("drillTime", StringUtils.isNotEmpty(drillTime) ? drillTime : StringUtil.EMPTY_STRING);
         data.put("hostName", StringUtils.isNotEmpty(hostName) ? hostName : StringUtil.EMPTY_STRING);
         data.put("typeText", StringUtils.isNotEmpty(typeText) ? typeText : StringUtil.EMPTY_STRING);
-        data.put("imageData", getFileRealPath(Arrays.asList(task.getImageList().split(",")), prefixPath, staticsPath));
+        data.put("fileImage", getFileRealPath(Arrays.asList(task.getImageList().split(",")), prefixPath, staticsPath));
         data.put("recorderName", StringUtils.isNotEmpty(recorderName) ? recorderName : StringUtil.EMPTY_STRING);
         data.put("presetCase", StringUtils.isNotEmpty(presetCase) ? "预设案由: " + presetCase : StringUtil.EMPTY_STRING);
         data.put("drillSituation", StringUtils.isNotEmpty(drillSituation) ? "演练情况: " + drillSituation : StringUtil.EMPTY_STRING);
         data.put("comment", StringUtils.isNotEmpty(comment) ? "点评总结: " + comment : StringUtil.EMPTY_STRING);
         List<CoreDrillTaskToUser> taskUserList = task.getTaskUserList();
         if (ObjectUtil.isEmpty(taskUserList)) {
-            data.put("image", new ArrayList<>());
+            data.put("signImage", new ArrayList<>());
         } else {
             List<String> collect = taskUserList.stream().filter(item -> item.getType() == 1 && ObjectUtil.isNotEmpty(item.getSignImage())).map(CoreDrillTaskToUser::getSignImage).collect(Collectors.toList());
-            data.put("image", getFileRealPath(collect, prefixPath, staticsPath));
+            /*final String str = collect.get(0);
+            for (int i = 0; i < 6; i++) {
+                collect.add(str);
+            }*/
+            data.put("signImage", getFileRealPath(collect, prefixPath, staticsPath));
         }
         return data;
     }

+ 10 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -793,14 +793,20 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         data.put("address", StringUtils.isNotEmpty(address) ? address : StringUtil.EMPTY_STRING);
         data.put("hostName", StringUtils.isNotEmpty(hostName) ? hostName : StringUtil.EMPTY_STRING);
         data.put("recorderName", StringUtils.isNotEmpty(recorderName) ? recorderName : StringUtil.EMPTY_STRING);
-        data.put("content", StringUtils.isNotEmpty(content) ? "内容: " + content : StringUtil.EMPTY_STRING);
-        data.put("note", StringUtils.isNotEmpty(note) ? "总结: " + note : StringUtil.EMPTY_STRING);
+        data.put("content", StringUtils.isNotEmpty(content) ? content : StringUtil.EMPTY_STRING);
+        data.put("note", StringUtils.isNotEmpty(note) ? note : StringUtil.EMPTY_STRING);
         List<CoreEduTrainingTaskToUser> taskUserList = task.getTaskUserList();
         if (ObjectUtil.isEmpty(taskUserList)) {
-            data.put("image", new ArrayList<>());
+            data.put("signImage", new ArrayList<>());
         } else {
             List<String> collect = taskUserList.stream().filter(item -> item.getType() == 1 && ObjectUtil.isNotEmpty(item.getSignImage())).map(CoreEduTrainingTaskToUser::getSignImage).collect(Collectors.toList());
-            data.put("image", getFileRealPath(collect, prefixPath, staticsPath));
+            data.put("signImage", getFileRealPath(collect, prefixPath, staticsPath));
+        }
+        if (ObjectUtil.isEmpty(task.getImageList())) {
+            data.put("fileImage", new ArrayList<>());
+        } else {
+            final List<String> collect = Arrays.stream(task.getImageList().split(",")).collect(Collectors.toList());
+            data.put("fileImage", getFileRealPath(collect, prefixPath, staticsPath));
         }
         return data;
     }

+ 4 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reportForms/safetyInspect/service/impl/SafetyInspectServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.utils.DateHelper;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
@@ -99,6 +100,9 @@ public class SafetyInspectServiceImpl implements SafetyInspectService {
         //判断机构类型,如果机构类型大于行社,都展示行社数据
         SysOrg sysOrg = orgService.selectSysOrgById(safetyInspectDTO.getOrgId(), SecurityConstants.INNER);
         List<SysOrg> sysOrgs;
+        if (null==sysOrg.getType()){
+            return  Collections.EMPTY_LIST;
+        }
         if (sysOrg.getType() < 3 || sysOrg.getShortName().endsWith("地区行社") || sysOrg.getType() == 9) {
             sysOrgs = orgService.selectSysOrgByPathAndType(sysOrg.getPath(), 3, SecurityConstants.INNER);
         } else if (sysOrg.getType() == 3) {

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

@@ -126,6 +126,39 @@
         ORDER BY     a.parent_id ASC,
         a.create_time desc
     </select>
+    <select id="selectPointByTask" resultType="com.xunmei.system.api.domain.AccessDataVo">
+        SELECT
+            e.device_name AS hostName,
+            d.device_name AS videoChannelName,
+            c.project AS project,
+            IF
+                ( c.situation = 0, '正常', '异常' ) AS situation,
+            c.abnormal_illustrate AS abnormalIllustrate
+        FROM
+            core_monitoring_task_registration a
+                LEFT JOIN core_monitoring_task_registration_monitor b ON a.id = b.task_registration_id
+                LEFT JOIN core_monitoring_task_monitor_info c ON c.task_monitor_id = b.id
+                LEFT JOIN sys_device d ON b.video_channel = d.id
+                LEFT JOIN sys_device e ON e.id = d.host_id
+        WHERE
+            c.project IS NOT NULL
+          AND a.task_id = #{taskId}
+    </select>
+    <select id="selectTask" resultType="com.xunmei.core.access.vo.AccessPdfVO">
+        SELECT
+            a.id AS taskId,
+            org_id AS orgId,
+            org_name AS orgName,
+            cycle AS cycle,
+            plan_start_time AS startTime,
+            plan_end_time AS endTime,
+            b.task_start_time AS taskStartTime
+        FROM
+            core_monitoring_retrieval_task a
+                LEFT JOIN core_monitoring_task_registration b ON a.id = b.task_id
+        WHERE
+           a. id = #{taskId}
+    </select>
 
     <insert id="insertTMonitoringRetrievalPlan" parameterType="com.xunmei.core.access.domain.TMonitoringRetrievalPlan">
         insert into t_monitoring_retrieval_plan

+ 4 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskMapper.xml

@@ -422,6 +422,10 @@
                 ymd_halfyear =
                 #{ymdHalfyear},
             </if>
+            <if test="pdfUrl !=null">
+                pdf_url=
+                #{pdfUrl},
+            </if>
             <if test="ymdQuarter != null">
                 ymd_quarter =
                 #{ymdQuarter},

+ 7 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/controller/SysFileController.java

@@ -7,6 +7,7 @@ import com.xunmei.common.core.utils.file.FileUtils;
 import com.xunmei.file.service.ISysFileService;
 import com.xunmei.file.utils.DesUtil;
 import com.xunmei.file.vo.FileBase64Vo;
+import com.xunmei.system.api.domain.AccessPdf;
 import com.xunmei.system.api.domain.SafeCheckTaskRegisterBookVo;
 import com.xunmei.system.api.domain.SysFile;
 import io.swagger.annotations.ApiOperation;
@@ -161,6 +162,12 @@ public class SysFileController {
         return R.ok(sysFileService.generateSafeCheckPdf(data));
 
     }
+    @ApiOperation(value = "生成监控调阅pdf")
+    @PostMapping(value = "/generateAccessPdf")
+    R<String> generateAccessPdf(@RequestBody AccessPdf data) throws Exception {
+        return R.ok(sysFileService.generateAccessPdf(data));
+
+    }
     @ApiOperation(value = "预案演练pdf")
     @PostMapping(value = "/generateDrillPdf")
     R<String> generateDrillPdf(@RequestBody Map<String, Object> data) throws Exception {

+ 2 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/ISysFileService.java

@@ -3,6 +3,7 @@ package com.xunmei.file.service;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
 import com.xunmei.file.vo.FileBase64Vo;
+import com.xunmei.system.api.domain.AccessPdf;
 import com.xunmei.system.api.domain.SafeCheckTaskRegisterBookVo;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -51,6 +52,7 @@ public interface ISysFileService
     String generateResumptionPdf(Map<String, Object> data) throws Exception;
 
     String generateSafeCheckPdf(SafeCheckTaskRegisterBookVo data) throws Exception;
+    String generateAccessPdf(AccessPdf data) throws Exception;
     String getRelativePath(String path);
 
 

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

@@ -1,15 +1,13 @@
 package com.xunmei.file.service;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
 import com.lowagie.text.*;
-import com.lowagie.text.pdf.BaseFont;
-import com.lowagie.text.pdf.PdfPCell;
-import com.lowagie.text.pdf.PdfPTable;
-import com.lowagie.text.pdf.PdfWriter;
+import com.lowagie.text.pdf.*;
 import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.domain.IdName;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
@@ -23,16 +21,19 @@ import com.xunmei.common.core.utils.uuid.UUID;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.file.utils.FileDownUtils;
 import com.xunmei.file.utils.FileUploadUtils;
+import com.xunmei.file.utils.PdfPageHelperEvent;
 import com.xunmei.file.utils.PdfUtil;
 import com.xunmei.file.vo.FileBase64Vo;
 import com.xunmei.file.vo.ItextPdfTableVo;
 import com.xunmei.file.vo.PdfFilePathVo;
+import com.xunmei.system.api.domain.AccessPdf;
 import com.xunmei.system.api.domain.SafeCheckTaskRegisterBookVo;
 import com.xunmei.system.api.vo.SysOrgVO;
 import io.netty.util.internal.StringUtil;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.text.StringEscapeUtils;
+import org.apache.poi.ss.usermodel.Footer;
 import org.apache.tools.zip.ZipEntry;
 import org.apache.tools.zip.ZipOutputStream;
 import org.slf4j.Logger;
@@ -89,7 +90,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     @Autowired
     private StringRedisTemplate redisTemplate;
 
-    private  PdfFilePathVo getLocalFilePath(String businessType, String fileName) {
+    private PdfFilePathVo getLocalFilePath(String businessType, String fileName) {
         // 验证输入
         if (isValidFileName(fileName)) {
             throw new IllegalArgumentException("Invalid file name");
@@ -97,7 +98,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         final String path = File.separator + businessType +
                 File.separator +
                 DateUtil.format(new Date(), "yyyy" + File.separator + "MM" + File.separator + "dd" +
-                File.separator);
+                        File.separator);
         String filePath = localFilePath + path;
         // 规范化路径
         String absolutePath = Paths.get(filePath).toAbsolutePath().normalize().toString();
@@ -114,7 +115,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         return pathVo;
     }
 
-    private  boolean isValidFileName(String fileName) {
+    private boolean isValidFileName(String fileName) {
         /*
           a-zA-Z:匹配所有大写和小写字母;
           0-9:匹配所有数字;
@@ -198,6 +199,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
             }
         }
     }
+
     @Override
     public String getRelativePath(String path) {
         if (ObjectUtil.isEmpty(path)) {
@@ -238,8 +240,13 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         final PdfPTable table = pdfTableVo.getTable();
         final BaseFont fs = pdfTableVo.getFs();
         final Font tableFont = pdfTableVo.getTableFont();
+
+        writer.setPageEvent(new PdfPageHelperEvent(ListUtil.split((List<String>) data.get("fileImage"), 6).size() + 1, writer, fs,tableFont));
+        document.open();
         PdfUtil.dealHeader(document, fs, "学 习 教 育 记 录", 24);
         PdfUtil.dealEduBody(document, table, tableFont, data);
+
+
         document.close();
         writer.close();
         log.info("教育培训登记簿生成结束,当前绝对地址为:{}", afterStr);
@@ -247,6 +254,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         return this.prefix + pathVo.getRelativePath();
     }
 
+
     @Override
     public String generateResumptionPdf(Map<String, Object> data) throws Exception {
         PdfFilePathVo pathVo = getLocalFilePath("resumption", data.get("fileName").toString());
@@ -284,7 +292,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         final Font tableFont = pdfTableVo.getTableFont();
         Font font = new Font(fs, 9, Font.NORMAL);
 
-        PdfUtil.dealHeader(document, fs, data.getTaskTitle()+"情况表", 14);
+        PdfUtil.dealHeader(document, fs, data.getTaskTitle() + "情况表", 14);
         //日期
         String orgName = "被查支行: " + data.getOrgName();
         String checkUser = "检查人: " + data.getCheckUserInfo();
@@ -320,6 +328,51 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     }
 
     @Override
+    public String generateAccessPdf(AccessPdf data) throws Exception {
+        PdfFilePathVo pathVo = getLocalFilePath("access", data.getDest());
+        String afterStr = StringEscapeUtils.escapeEcmaScript(pathVo.getAbsolutePath());
+        log.info("开始生成监控调阅登记簿,当前绝对地址为:{}", afterStr);
+        final ItextPdfTableVo pdfTableVo = PdfUtil.createTable(pathVo.getAbsolutePath(), 46, 7);
+        final Document document = pdfTableVo.getDocument();
+        final PdfWriter writer = pdfTableVo.getWriter();
+        final PdfPTable table = pdfTableVo.getTable();
+        final BaseFont fs = pdfTableVo.getFs();
+        final Font tableFont = pdfTableVo.getTableFont();
+        Font font = new Font(fs, 9, Font.NORMAL);
+        PdfUtil.dealHeader(document, fs, data.getOrgName()+data.getPlanCycle()+"("+data.getStartTime()+"~"+data.getEndTime()+")", 14);
+        String checkTime =  data.getTaskStartTime();
+        String checkUser = "检查人: " + data.getCheckUser();
+   /*     PdfPCell orgCell = new PdfPCell(new Phrase(orgName, font));
+        orgCell.setColspan(16);
+        orgCell.setRowspan(1);
+        orgCell.setBorder(Rectangle.NO_BORDER);
+        orgCell.setHorizontalAlignment(Element.ALIGN_LEFT);*/
+        PdfPCell checkUserCell1 = new PdfPCell(new Phrase(checkUser, font));
+        checkUserCell1.setColspan(15);
+        PdfPCell checkUserCell = new PdfPCell(new Phrase(checkUser, font));
+        checkUserCell.setColspan(20);
+        checkUserCell.setRowspan(1);
+        checkUserCell.setBorder(Rectangle.NO_BORDER);
+        checkUserCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+
+        PdfPCell dateStrCell = new PdfPCell(new Phrase(checkTime, font));
+        dateStrCell.setColspan(10);
+        dateStrCell.setRowspan(1);
+        dateStrCell.setBorder(Rectangle.NO_BORDER);
+        dateStrCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+      //  table.addCell(orgCell);
+        table.addCell(checkUserCell);
+        table.addCell(dateStrCell);
+        Font titleFont = new Font(fs, 8, Font.NORMAL);
+        PdfUtil.dealAccessPBody(document, table, tableFont, titleFont, data.getDataVos());
+        document.close();
+        writer.close();
+        log.info("监控调阅登记簿生成结束,当前绝对地址为:{}", afterStr);
+        //此处返回  /statics/edu/xxx.pdf
+        return this.prefix + pathVo.getRelativePath();
+    }
+
+    @Override
     public String generateDrillPdf(Map<String, Object> data) throws Exception {
         PdfFilePathVo pathVo = getLocalFilePath("drill", data.get("fileName").toString());
         String afterStr = StringEscapeUtils.escapeEcmaScript(pathVo.getAbsolutePath());
@@ -331,8 +384,13 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         final PdfPTable table = pdfTableVo.getTable();
         final BaseFont fs = pdfTableVo.getFs();
         final Font tableFont = pdfTableVo.getTableFont();
+
+        writer.setPageEvent(new PdfPageHelperEvent(ListUtil.split((List<String>) data.get("fileImage"), 6).size() + 1, writer, fs,tableFont));
+        document.open();
         PdfUtil.dealHeader(document, fs, "预 案 演 练 记 录", 24);
         PdfUtil.dealDrillBody(document, table, tableFont, data);
+
+
         document.close();
         writer.close();
         log.info("预案演练登记簿生成结束,当前绝对地址为:{}", afterStr);
@@ -914,7 +972,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         }
         Arrays.stream(files)
                 .filter(file -> file.getName().startsWith(CacheConstants.REGISTER_PDF_FILE_KEY))
-                .filter(file->file.getName().endsWith(".zip"))
+                .filter(file -> file.getName().endsWith(".zip"))
                 .forEach(FileUtil::del);
     }
 }

+ 102 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfPageHelperEvent.java

@@ -0,0 +1,102 @@
+package com.xunmei.file.utils;
+
+import com.lowagie.text.*;
+import com.lowagie.text.pdf.BaseFont;
+import com.lowagie.text.pdf.PdfContentByte;
+import com.lowagie.text.pdf.PdfPageEvent;
+import com.lowagie.text.pdf.PdfWriter;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.IOException;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/12/18 20:18
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class PdfPageHelperEvent implements PdfPageEvent {
+
+    private Integer totalPageSize;
+
+    private PdfWriter writer;
+
+    private BaseFont fs;
+    private Font tableFont;
+
+    @Override
+    public void onOpenDocument(PdfWriter pdfWriter, Document document) {
+
+    }
+
+    @Override
+    public void onStartPage(PdfWriter pdfWriter, Document document) {
+       /* try {
+            PdfUtil.createWatermark(document,pdfWriter,tableFont,"水印测试");
+        } catch (DocumentException | IOException e) {
+            throw new RuntimeException(e);
+        }*/
+    }
+
+    @Override
+    public void onEndPage(PdfWriter pdfWriter, Document document) {
+        PdfContentByte cb = writer.getDirectContent();// 得到层
+        cb.saveState(); // 开始
+        cb.beginText();
+        cb.setFontAndSize(fs, 10); // Header
+   /*             float x = document.top(-20);// 位置 // 左
+                cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "H-Left", document.left(), x, 0); // 中
+                cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "第" + writer.getCurrentPageNumber() + "页", (document.right() + document.left()) / 2, x, 0); // 右
+                cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "H-Right", document.right(), x, 0); */
+        float y = document.bottom(10); // 左
+        cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "", document.left(), y, 0); // 中
+        cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "第" + writer.getCurrentPageNumber() + "页/共" + totalPageSize + "页", (document.right() + document.left()) / 2, y, 0); // 右
+        cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "", document.right(), y, 0);
+        cb.endText();
+        cb.restoreState();
+
+    }
+
+    @Override
+    public void onCloseDocument(PdfWriter pdfWriter, Document document) {
+
+    }
+
+    @Override
+    public void onParagraph(PdfWriter pdfWriter, Document document, float v) {
+
+    }
+
+    @Override
+    public void onParagraphEnd(PdfWriter pdfWriter, Document document, float v) {
+
+    }
+
+    @Override
+    public void onChapter(PdfWriter pdfWriter, Document document, float v, Paragraph paragraph) {
+
+    }
+
+    @Override
+    public void onChapterEnd(PdfWriter pdfWriter, Document document, float v) {
+
+    }
+
+    @Override
+    public void onSection(PdfWriter pdfWriter, Document document, float v, int i, Paragraph paragraph) {
+
+    }
+
+    @Override
+    public void onSectionEnd(PdfWriter pdfWriter, Document document, float v) {
+
+    }
+
+    @Override
+    public void onGenericTag(PdfWriter pdfWriter, Document document, Rectangle rectangle, String s) {
+
+    }
+}

+ 118 - 108
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java

@@ -1,12 +1,14 @@
 package com.xunmei.file.utils;
 
 
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.lowagie.text.*;
 import com.lowagie.text.pdf.*;
 import com.xunmei.file.vo.ItextPdfTableVo;
 import com.xunmei.file.vo.PdfFilePathVo;
+import com.xunmei.system.api.domain.AccessDataVo;
 import com.xunmei.system.api.domain.CheckDataVo;
 import com.xunmei.system.api.domain.ResumptionPdf;
 import com.xunmei.system.api.domain.SafeCheckTaskRegisterBookVo;
@@ -144,6 +146,19 @@ public class PdfUtil {
         document.add(p);
     }
 
+    public static void dealEduHeader(PdfPTable table, BaseFont fs, String title, int fontSize) {
+        //文件title
+        PdfPCell pdfPCell = new PdfPCell();
+        final Paragraph p = new Paragraph(new Chunk(title, new Font(fs, fontSize)));
+        p.setAlignment(Paragraph.ALIGN_CENTER);
+        // 文件title 段落下空白
+        p.setSpacingAfter(10f);
+        pdfPCell.setColspan(6);
+        pdfPCell.addElement(p);
+        pdfPCell.setBorder(Rectangle.BOTTOM);
+        table.addCell(pdfPCell);
+    }
+
     public static void dealEduBody(Document document, PdfPTable table, Font tableFont, Map<String, Object> data) throws Exception {
         //第一行
         createPDFCell(tableFont, table, "时间", Element.ALIGN_MIDDLE, 1, 1);
@@ -157,29 +172,29 @@ public class PdfUtil {
         createPDFCell(tableFont, table, data.get("recorderName").toString(), Element.ALIGN_MIDDLE, 2, 1);
 
         //内容
-        final PdfPCell pCell = createPDFCell(tableFont, table, "内容", Element.ALIGN_MIDDLE, 1, 140);
-        pCell.setFixedHeight(100);
-        final PdfPCell content = createPDFCell(tableFont, table, data.get("content").toString(), Element.ALIGN_MIDDLE, 5, 140);
-        content.setFixedHeight(100);
+        createPDFCell(tableFont, table, "内容", Element.ALIGN_MIDDLE, 1, 140);
+        createPDFCell(tableFont, table, data.get("content").toString(), Element.ALIGN_LEFT, 5, 140);
         createPDFCell(tableFont, table, "总结", Element.ALIGN_MIDDLE, 1, 140);
-        createPDFCell(tableFont, table, data.get("note").toString(), Element.ALIGN_MIDDLE, 5, 140);
+        createPDFCell(tableFont, table, data.get("note").toString(), Element.ALIGN_LEFT, 5, 140);
         createPDFCell(tableFont, table, "参会人员签字", Element.ALIGN_MIDDLE, 1, 140);
-        final PdfPTable imageTable = getImage((List<String>) data.get("image"), 3, 100, 100, 3);
-        //图片填充
-        final PdfPCell cell = new PdfPCell();
-        cell.setNoWrap(false);
-        cell.setPaddingLeft(8f);
-        cell.setPaddingRight(8f);
-        cell.setPaddingBottom(8f);
-        cell.setPaddingTop(8f);
-        cell.setColspan(5);
-        cell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
-        cell.addElement(imageTable);
-        table.addCell(cell);
-
+        dealEduImageCell((List<String>) data.get("signImage"), table, 5, 30, 30);
         document.add(table);
+
+        //第二页
+        //按6份等分图片数组,一页只显示6张
+        final List<List<String>> listList = ListUtil.split((List<String>) data.get("fileImage"), 6);
+        for (List<String> stringList : listList) {
+            PdfPTable innerTable = new PdfPTable(6);
+            createPDFCell(tableFont, innerTable, "图片附件", Element.ALIGN_MIDDLE, 1, 1);
+            innerTable.setSpacingBefore(10f);
+            //一行展示一张图片
+            dealEduImageCell(new ArrayList<>(stringList), innerTable, 2, 150, 200);
+            document.newPage();
+            document.add(innerTable);
+        }
     }
 
+
     public static void dealResumptionBody(Document document, PdfPTable table, Font tableFont, Map<String, Object> data) throws Exception {
         PdfUtil.createPDFCell(tableFont, table, "检查内容", Element.ALIGN_CENTER, 6, 0);
         PdfUtil.createPDFCell(tableFont, table, "检查情况", Element.ALIGN_CENTER, 0, 0);
@@ -310,122 +325,110 @@ public class PdfUtil {
     }
 
     public static void dealDrillBody(Document document, PdfPTable table, Font tableFont, Map<String, Object> data) throws Exception {
-        table.setSplitLate(false);
-        table.setSplitRows(true);
         //第一行
         createPDFCell(tableFont, table, "演练单位", Element.ALIGN_CENTER, 1, 1);
         createPDFCell(tableFont, table, data.get("orgName").toString(), Element.ALIGN_CENTER, 2, 1);
         createPDFCell(tableFont, table, "地点", Element.ALIGN_CENTER, 1, 1);
         createPDFCell(tableFont, table, data.get("drillSite").toString(), Element.ALIGN_CENTER, 2, 1);
         //第二行
-        createPDFCell(tableFont, table, "演练时间", Element.ALIGN_CENTER, 1, 1);
-        createPDFCell(tableFont, table, data.get("drillTime").toString(), Element.ALIGN_CENTER, 2, 1);
-        createPDFCell(tableFont, table, "演练项目", Element.ALIGN_CENTER, 1, 1);
-        createPDFCell(tableFont, table, data.get("typeText").toString(), Element.ALIGN_CENTER, 2, 1);
-        //第三行
         createPDFCell(tableFont, table, "指挥人", Element.ALIGN_CENTER, 1, 1);
         createPDFCell(tableFont, table, data.get("hostName").toString(), Element.ALIGN_CENTER, 2, 1);
         createPDFCell(tableFont, table, "记录人", Element.ALIGN_CENTER, 1, 1);
         createPDFCell(tableFont, table, data.get("recorderName").toString(), Element.ALIGN_CENTER, 2, 1);
-
+        //第三行
+        createPDFCell(tableFont, table, "演练时间", Element.ALIGN_CENTER, 1, 1);
+        createPDFCell(tableFont, table, data.get("drillTime").toString(), Element.ALIGN_LEFT, 5, 1);
+        createPDFCell(tableFont, table, "演练项目", Element.ALIGN_CENTER, 1, 1);
+        createPDFCell(tableFont, table, data.get("typeText").toString(), Element.ALIGN_LEFT, 5, 1);
         //预设案由
-        PdfPCell contentCell = new PdfPCell();
-        contentCell.setColspan(6);
-        final Paragraph presetCase = new Paragraph(new Chunk(data.get("presetCase").toString(), tableFont));
-        presetCase.setSpacingAfter(8F);
-        contentCell.addElement(presetCase);
-        contentCell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
-        table.addCell(contentCell);
-        dealDrillImageCell(data.get("drillSituation").toString(), tableFont, (List<String>) data.get("imageData"), table);
-        dealDrillImageCell("参会演练人员(签字):", tableFont, (List<String>) data.get("image"), table);
-       /* //演练情况
-        PdfPCell noteCell = new PdfPCell();
-        noteCell.setColspan(6);
-        Paragraph noteParagraph = new Paragraph(new Chunk(data.get("drillSituation").toString(), tableFont));
-        noteParagraph.setSpacingAfter(8F);
-        noteCell.addElement(noteParagraph);
-        noteCell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
-        final List<String> imageDataList = (List<String>) data.get("imageData");
-        final int imageDataAddNums = imageDataList.size() % 3;
-        for (int i = 0; i < 3 - imageDataAddNums; i++) {
-            imageDataList.add("black.png");
-        }
-        PdfPTable imageDataInnerTable = new PdfPTable(3);
-        for (String str : imageDataList) {
-            Image imageData = convertFileToByteArray(new File(str));
-            if (imageData != null) {
-                imageData.scaleAbsolute(130, 130);
-            }
-            PdfPCell cell = new PdfPCell(imageData);
-            cell.setBorder(Rectangle.NO_BORDER);
-            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
-            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
-            imageDataInnerTable.addCell(cell);
-        }
-        noteCell.addElement(imageDataInnerTable);
-        table.addCell(noteCell);
+        createPDFCell(tableFont, table, "预设案由", Element.ALIGN_MIDDLE, 1, 140);
+        createPDFCell(tableFont, table, data.get("presetCase").toString(), Element.ALIGN_LEFT, 5, 140);
+        //演练情况
+        createPDFCell(tableFont, table, "演练情况", Element.ALIGN_MIDDLE, 1, 140);
+        createPDFCell(tableFont, table, data.get("drillSituation").toString(), Element.ALIGN_LEFT, 5, 140);
+        //点评总结
+        createPDFCell(tableFont, table, "点评总结", Element.ALIGN_MIDDLE, 1, 140);
+        createPDFCell(tableFont, table, data.get("comment").toString(), Element.ALIGN_LEFT, 5, 140);
+        //参会人员签字
+        createPDFCell(tableFont, table, "参会人员签字", Element.ALIGN_MIDDLE, 1, 140);
+        dealEduImageCell((List<String>) data.get("signImage"), table, 5, 30, 30);
+        document.add(table);
 
+        //第二页
+        //按6份等分图片数组,一页只显示6张
+        final List<List<String>> listList = ListUtil.split((List<String>) data.get("fileImage"), 6);
+        for (List<String> stringList : listList) {
+            PdfPTable innerTable = new PdfPTable(6);
+            createPDFCell(tableFont, innerTable, "图片附件", Element.ALIGN_MIDDLE, 1, 1);
+            innerTable.setSpacingBefore(10f);
+            //一行展示一张图片
+            dealEduImageCell(new ArrayList<>(stringList), innerTable, 2, 150, 200);
+            document.newPage();
+             document.add(innerTable);
+         }
+    }
+
+    public static void dealDrillImageCell( List<String> imageList, PdfPTable table) throws Exception {
         //签字区域
-        PdfPCell signCell = new PdfPCell();
-        signCell.setColspan(6);
-        final Paragraph paragraph1 = new Paragraph(new Chunk("参会演练人员(签字):", tableFont));
-        paragraph1.setSpacingAfter(8F);
-        signCell.addElement(paragraph1);
-        signCell.setBorder(Rectangle.LEFT | Rectangle.RIGHT);
-        final List<String> imageList = (List<String>) data.get("image");
+        PdfPCell outCell = new PdfPCell();
+        outCell.setColspan(5);
+        outCell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
         final int imageAddNums = imageList.size() % 3;
-        for (int i = 0; i < 3 - imageAddNums; i++) {
-            imageList.add("black.png");
+        if (imageAddNums != 0) {
+            for (int i = 0; i < 3 - imageAddNums; i++) {
+                imageList.add("black.png");
+            }
         }
         PdfPTable imageInnerTable = new PdfPTable(3);
-        for (String str : imageList) {
-            Image imageData = convertFileToByteArray(new File(str));
+        for (String image : imageList) {
+            Image imageData = convertFileToByteArray(new File(image));
             if (imageData != null) {
-                imageData.scaleAbsolute(130, 130);
+                imageData.scaleAbsolute(120, 120);
             }
-            PdfPCell cell = new PdfPCell(imageData);
-            cell.setBorder(Rectangle.NO_BORDER);
-            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
-            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
-            imageInnerTable.addCell(cell);
+            PdfPCell innerCell = new PdfPCell(imageData);
+            innerCell.setBorder(Rectangle.NO_BORDER);
+            innerCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+            innerCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+            imageInnerTable.addCell(innerCell);
         }
-        signCell.addElement(imageInnerTable);
-        table.addCell(signCell);*/
-
-
-        //点评总结
-        PdfPCell commentCell = new PdfPCell();
-        commentCell.setColspan(6);
-        commentCell.addElement(new Paragraph(new Chunk(data.get("comment").toString(), tableFont)));
-        table.addCell(commentCell);
-        document.add(table);
+        outCell.addElement(imageInnerTable);
+        table.addCell(outCell);
     }
 
-    public static void dealDrillImageCell(String chunk, Font tableFont, List<String> imageList, PdfPTable table) throws Exception {
+    public static void dealEduImageCell(List<String> imageList, PdfPTable table, Integer imageNumsOfRow, Integer imageWith, Integer imageHigh) throws Exception {
         //签字区域
         PdfPCell outCell = new PdfPCell();
+        outCell.setNoWrap(false);
         outCell.setColspan(6);
-        final Paragraph paragraph1 = new Paragraph(new Chunk(chunk, tableFont));
-        paragraph1.setSpacingAfter(8F);
-        outCell.addElement(paragraph1);
-        outCell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
-        final int imageAddNums = imageList.size() % 3;
-        for (int i = 0; i < 3 - imageAddNums; i++) {
-            imageList.add("black.png");
+        //  outCell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
+        final int imageAddNums = imageList.size() % imageNumsOfRow;
+        if (imageAddNums != 0) {
+            for (int i = 0; i < imageNumsOfRow - imageAddNums; i++) {
+                imageList.add("black.png");
+            }
         }
-        PdfPTable imageInnerTable = new PdfPTable(3);
+        PdfPTable imageInnerTable = new PdfPTable(imageNumsOfRow);
+        imageInnerTable.setSplitRows(false);
+        imageInnerTable.setSplitLate(true);
         for (String image : imageList) {
             Image imageData = convertFileToByteArray(new File(image));
             if (imageData != null) {
-                imageData.scaleAbsolute(120, 120);
+                imageData.scaleAbsolute(imageWith, imageHigh);
             }
             PdfPCell innerCell = new PdfPCell(imageData);
+            innerCell.setNoWrap(false);
+            innerCell.setPaddingTop(8f);
+            innerCell.setPaddingLeft(8f);
+            innerCell.setPaddingRight(8f);
+            innerCell.setPaddingBottom(8f);
             innerCell.setBorder(Rectangle.NO_BORDER);
             innerCell.setHorizontalAlignment(Element.ALIGN_CENTER);
             innerCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
             imageInnerTable.addCell(innerCell);
         }
         outCell.addElement(imageInnerTable);
+        table.setSplitRows(false);
+        table.setSplitLate(true);
         table.addCell(outCell);
     }
 
@@ -464,15 +467,6 @@ public class PdfUtil {
                 cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                 innerTable.addCell(cell);
             }
-            //实际上这儿永远不会存在不满足3个的情况,因为上面会根据图片数量补全到十二个
-            //具体补全数量可以根据实际图片大小与页面尺寸来调整
-           /* int size = row.size();
-            while (size < 3) {
-                PdfPCell emptyCell = new PdfPCell();
-                emptyCell.setBorder(Rectangle.NO_BORDER);
-                innerTable.addCell(emptyCell);
-                size++;
-            }*/
         }
         PdfPTable outerTable = new PdfPTable(1);
         PdfPCell innerCell = new PdfPCell(innerTable);
@@ -509,7 +503,23 @@ public class PdfUtil {
             throw new RuntimeException(e);
         }
     }
-
+    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, 0);
+        PdfUtil.createPDFCell(tableTitleFont, table, "视频主机", Element.ALIGN_MIDDLE, 5, 0);
+        PdfUtil.createPDFCell(tableTitleFont, table, "视频通道", Element.ALIGN_MIDDLE, 5, 0);
+        PdfUtil.createPDFCell(tableTitleFont, table, "项目", Element.ALIGN_MIDDLE, 5, 0);
+        PdfUtil.createPDFCell(tableTitleFont, table, "检查情况", Element.ALIGN_MIDDLE, 2, 0);
+        PdfUtil.createPDFCell(tableTitleFont, table, "说明", Element.ALIGN_MIDDLE, 17, 0);
+        for (int i = 1; i <= data.size(); i++) {
+            PdfUtil.createPDFCell(tableFont, table, String.valueOf(i), Element.ALIGN_MIDDLE, 2, 0, 10);
+            PdfUtil.createPDFCell(tableFont, table, data.get(i - 1).getHostName(), Element.ALIGN_MIDDLE, 5, 0, 10);
+            PdfUtil.createPDFCell(tableFont, table, data.get(i - 1).getVideoChannelName(), Element.ALIGN_MIDDLE, 5, 0, 10);
+            PdfUtil.createPDFCell(tableFont, table, data.get(i - 1).getProject(), Element.ALIGN_MIDDLE, 5, 0, 10);
+            PdfUtil.createPDFCell(tableFont, table, data.get(i - 1).getSituation().equals("0") ? "正常" : "异常", Element.ALIGN_MIDDLE, 2, 0, 10);
+            PdfUtil.createPDFCell(tableFont, table, data.get(i - 1).getAbnormalIllustrate(), Element.ALIGN_MIDDLE, 17, 0, 10);
+     }
+        document.add(table);
+    }
     public static void dealSafeCheckPBody(Document document, PdfPTable table, Font tableFont, Font tableTitleFont, List<CheckDataVo> data) throws DocumentException {
         PdfUtil.createPDFCell(tableTitleFont, table, "序号", Element.ALIGN_MIDDLE, 2, 0);
         PdfUtil.createPDFCell(tableTitleFont, table, "检查内容", Element.ALIGN_MIDDLE, 5, 0);