From c7450a8e1724528046af3683d49eaf0a06785130 Mon Sep 17 00:00:00 2001
From: huanghongfa <huanghongfa123456>
Date: 星期五, 30 七月 2021 14:02:02 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/test' into test

---
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwDangerReportService.java              |   55 +
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationServeExcelListen.java                             | 1093 ++++++++++++--------
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java                             |  267 +++++
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwSafetyWorkRecordVO.java                         |  135 ++
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordPageDTO.java                       |   12 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwSafetyWorkRecordServiceImpl.java |   70 +
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportExcelVO.java                        |   59 +
 springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ComSwPatrolRecordApi.java                                          |  100 +
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationMistakeExcelVO.java                  |  148 ++
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationServeExcelVO.java                    |    3 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwPatrolRecordService.java              |   11 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwDangerReportHandleDTO.java                     |   64 +
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwSafetyWorkRecordService.java          |   27 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java                                  |   96 +
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/exceptions/ServiceException.java                                         |    8 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordMapper.xml                                            |   44 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/enums/SafeWordStatusEnum.java                                            |    7 
 springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java                  |  208 +++
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordStatisticsVO.java                   |   35 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComSwDangerReportDO.java                 |   12 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwDangerReportDAO.java                      |   32 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwPatrolRecordServiceImpl.java     |   35 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordReportMapper.xml                                      |   26 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwSafetyWorkRecordMapper.xml                                        |   66 +
 springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/PopulationApi.java                         |    4 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordVO.java                             |    8 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java                      |  127 ++
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwSafetyWorkRecordDAO.java                  |   13 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComMngPopulationServiceImpl.java      |   23 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml                                            |  121 ++
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwDangerReportRectifyDTO.java                    |   49 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java     |  156 +++
 springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommonDataApi.java                         |    6 
 33 files changed, 2,603 insertions(+), 517 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ComSwPatrolRecordApi.java b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ComSwPatrolRecordApi.java
index 89e57a2..025af16 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ComSwPatrolRecordApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ComSwPatrolRecordApi.java
@@ -1,17 +1,18 @@
 package com.panzhihua.applets.api;
 
 import com.panzhihua.common.controller.BaseController;
+import com.panzhihua.common.model.dtos.community.ComSwDangerReportRectifyDTO;
 import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordAddDTO;
 import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
 import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.community.ComSwDangerReportVO;
+import com.panzhihua.common.model.vos.community.ComSwPatrolRecordVO;
+import com.panzhihua.common.model.vos.community.ComSwSafetyWorkRecordVO;
 import com.panzhihua.common.service.community.CommunityService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 
@@ -34,10 +35,13 @@
      * @param comSwPatrolRecordPageDTO 查询参数
      * @return 分页集合
      */
-    @ApiOperation(value = "分页查询巡查记录")
+    @ApiOperation(value = "分页查询巡查记录", response = ComSwPatrolRecordVO.class)
     @PostMapping("/pagePatrolRecord")
     public R pagePatrolRecord(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
         Long communityId = this.getCommunityId();
+        if (comSwPatrolRecordPageDTO.getSelectPerson().equals(1)) {
+            comSwPatrolRecordPageDTO.setPatrolPerson(String.valueOf(this.getLoginUserInfo().getUserId()));
+        }
         comSwPatrolRecordPageDTO.setCommunityId(communityId);
         return communityService.pagePatrolRecord(comSwPatrolRecordPageDTO);
     }
@@ -55,5 +59,91 @@
         return communityService.addPatrolRecord(comSwPatrolRecordAddDTO);
     }
 
+    /**
+     * 根据巡查记录id查询详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 巡查记录详情查询结果
+     */
+    @ApiOperation(value = "根据巡查记录id查询详情", response = ComSwPatrolRecordVO.class)
+    @PostMapping("/detailPatrolRecord")
+    public R detailPatrolRecord(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
+        return communityService.detailPatrolRecord(patrolRecordId);
+    }
+
+    /**
+     * 分页查询安全工作记录
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 安全工作记录分页集合
+     */
+    @ApiOperation(value = "分页查询安全工作记录", response = ComSwSafetyWorkRecordVO.class)
+    @PostMapping("/pageSafetyWorkRecord")
+    public R pageSafetyWorkRecord(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
+        Long communityId = this.getCommunityId();
+        comSwPatrolRecordPageDTO.setCommunityId(communityId);
+        return communityService.pageSafetyWorkRecord(comSwPatrolRecordPageDTO);
+    }
+
+    /**
+     * 根据安全工作记录id查询详情
+     *
+     * @param safetyWorkRecordId 安全工作记录
+     * @return 安全工作记录详情查询结果
+     */
+    @ApiOperation(value = "根据安全工作记录id查询详情", response = ComSwSafetyWorkRecordVO.class)
+    @PostMapping("/detailSafetyWorkRecord")
+    public R detailSafetyWorkRecord(@RequestParam(value = "safetyWorkRecordId") Long safetyWorkRecordId) {
+        return communityService.detailSafetyWorkRecord(safetyWorkRecordId);
+    }
+
+    /**
+     * 分页查询隐患报告
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 隐患报告分页集合
+     */
+    @ApiOperation(value = "分页查询隐患报告", response = ComSwDangerReportVO.class)
+    @PostMapping("/pageDangerReport")
+    public R pageDangerReport(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
+        Long communityId = this.getCommunityId();
+        comSwPatrolRecordPageDTO.setCommunityId(communityId);
+        return communityService.pageDangerReport(comSwPatrolRecordPageDTO);
+    }
+
+    /**
+     * 根据隐患报告id查询详情
+     *
+     * @param dangerReportId 隐患报告id
+     * @return 隐患报告详情查询结果
+     */
+    @ApiOperation(value = "根据隐患报告id查询详情", response = ComSwDangerReportVO.class)
+    @PostMapping("/detailDangerReport")
+    public R detailDangerReport(@RequestParam(value = "dangerReportId") Long dangerReportId) {
+        return communityService.detailDangerReport(dangerReportId);
+    }
+
+    /**
+     * 根据巡查记录id查询隐患报告详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 隐患报告详情查询结果
+     */
+    @ApiOperation(value = "根据巡查记录id查询隐患报告详情", response = ComSwDangerReportVO.class)
+    @PostMapping("/detailDangerReportByPrId")
+    public R detailDangerReportByPrId(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
+        return communityService.detailDangerReportByPrId(patrolRecordId);
+    }
+
+    /**
+     * 整改隐患报告
+     *
+     * @param comSwDangerReportRectifyDTO 隐患报告整改参数
+     * @return 整改结果
+     */
+    @ApiOperation(value = "整改隐患报告")
+    @PostMapping("/rectifyDangerReport")
+    public R rectifyDangerReport(@RequestBody ComSwDangerReportRectifyDTO comSwDangerReportRectifyDTO){
+        return communityService.rectifyDangerReport(comSwDangerReportRectifyDTO);
+    }
+
 }
 
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/enums/SafeWordStatusEnum.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/enums/SafeWordStatusEnum.java
index dca5e2d..8a6d3f5 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/enums/SafeWordStatusEnum.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/enums/SafeWordStatusEnum.java
@@ -10,10 +10,9 @@
 @Getter
 public enum SafeWordStatusEnum
 {
-    DCK(1, "待查看"),
-    DCL(2, "待处理"),
-    YCL(3, "已处理"),
-    YZG(4, "已整改");
+    DCL(1, "待处理"),
+    YCL(2, "已处理"),
+    YZG(3, "已整改");
 
     private final Integer code;
     private final String name;
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/exceptions/ServiceException.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/exceptions/ServiceException.java
index 7285a2d..fd8f7d5 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/exceptions/ServiceException.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/exceptions/ServiceException.java
@@ -10,6 +10,7 @@
 
     private String code;
     private String msg;
+    private String data;
     public ServiceException() {
         super();
     }
@@ -27,6 +28,13 @@
         this.msg = errorMsg;
     }
 
+    public ServiceException(String errorCode, String errorMsg,String data) {
+        super(errorCode);
+        this.code = errorCode;
+        this.msg = errorMsg;
+        this.data = data;
+    }
+
     public ServiceException(String errorCode, String errorMsg, Throwable cause) {
         super(errorCode, cause);
         this.code = errorCode;
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationServeExcelListen.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationServeExcelListen.java
index f5f0949..1d55fa8 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationServeExcelListen.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationServeExcelListen.java
@@ -1,21 +1,31 @@
 package com.panzhihua.common.listen;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.google.common.collect.Lists;
 import com.panzhihua.common.constants.BcDictionaryConstants;
 import com.panzhihua.common.enums.*;
+import com.panzhihua.common.excel.CustomSheetWriteHandler;
 import com.panzhihua.common.exceptions.ServiceException;
 import com.panzhihua.common.model.vos.BcDictionaryVO;
 import com.panzhihua.common.model.vos.R;
 import com.panzhihua.common.model.vos.community.ComMngPopulationImportErrorVO;
+import com.panzhihua.common.model.vos.community.ComMngPopulationMistakeExcelVO;
 import com.panzhihua.common.model.vos.community.ComMngPopulationServeExcelVO;
 import com.panzhihua.common.service.community.CommunityService;
 import com.panzhihua.common.utlis.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.util.ObjectUtils;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -35,114 +45,142 @@
 
     private Map<Integer, String> headData;
 
+    private String userName;
+    // FTP 登录密码
+    private String password;
+    // FTP 服务器地址IP地址
+    private String host;
+    // FTP 端口
+    private int port;
+    private String excelUrl;
 
-    public ComMngPopulationServeExcelListen(CommunityService communityService, Long communityId) {
-        this.communityService = communityService;
-        this.communityId = communityId;
-    }
+    public static String loadUrl;
 
-    /**
-     * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
-     */
-    private static final int BATCH_COUNT = 5000;
-    List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
-
-    @Override
-    public void invoke(Map<Integer, String> data, AnalysisContext context) {
-        list.add(data);
-        if (list.size() >= BATCH_COUNT) {
-            saveData();
-            list.clear();
+    public ComMngPopulationServeExcelListen(CommunityService communityService, Long communityId, String userName, String password, String host, int port, String excelUrl) {
+            this.communityService = communityService;
+            this.communityId = communityId;
+            this.userName = userName;
+            this.password = password;
+            this.host = host;
+            this.port = port;
+            this.excelUrl = excelUrl;
         }
-    }
 
-    /**
-     * 这里会一行行的返回头
-     *
-     * @param headMap
-     * @param context
-     */
-    @Override
-    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
-        headSize = headMap.size();
-        headData = headMap;
-    }
+        /**
+         * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
+         */
+        private static final int BATCH_COUNT = 5000;
+        List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
 
-    @Override
-    public void doAfterAllAnalysed(AnalysisContext context) {
-        saveData();
-        log.info("所有数据解析完成!");
-    }
+        @Override
+        public void invoke(Map<Integer, String> data, AnalysisContext context) {
+            list.add(data);
+            if (list.size() >= BATCH_COUNT) {
+                saveData();
+                list.clear();
+            }
+        }
 
-    /**
-     * 不是固定的列只能手动处理
-     */
-    private void saveData() {
-        R<List<BcDictionaryVO>> dictionaryR = communityService.listDictionaryByKey(BcDictionaryConstants.FAMILY);
+        /**
+         * 这里会一行行的返回头
+         *
+         * @param headMap
+         * @param context
+         */
+        @Override
+        public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
+            headSize = headMap.size();
+            headData = headMap;
+        }
 
-        Map<String,String> dictMap = dictionaryR.getData().stream().collect(Collectors.toMap(BcDictionaryVO::getDictName,BcDictionaryVO::getDictValue));
+        @Override
+        public void doAfterAllAnalysed(AnalysisContext context) {
+            saveData();
+            log.info("所有数据解析完成!");
+        }
+
+        /**
+         * 不是固定的列只能手动处理
+         */
+        private void saveData() {
+            R<List<BcDictionaryVO>> dictionaryR = communityService.listDictionaryByKey(BcDictionaryConstants.FAMILY);
+
+            Map<String,String> dictMap = dictionaryR.getData().stream().collect(Collectors.toMap(BcDictionaryVO::getDictName,BcDictionaryVO::getDictValue));
 //        Map<String,Integer> dictMap = new HashMap<>();
 //        for(BcDictionaryVO vo : dictionaryR.getData()){
 //            dictMap.put(vo.getDictName(),Integer.valueOf(vo.getDictValue()));
 //        }
 
 
-        int index = 2;
-        try {
-            ArrayList<ComMngPopulationServeExcelVO> voList = Lists.newArrayList();
-            List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
-            for (Map<Integer, String> oneData : list) {
-                ComMngPopulationServeExcelVO vo = new ComMngPopulationServeExcelVO();
-                //姓名和身份证都为空,为空户,无需操作,否则就解析年龄,性别,出生年月日
-                if(StringUtils.isNotEmpty(oneData.get(0)) || StringUtils.isNotEmpty(oneData.get(1))){
-                    if(StringUtils.isEmpty(oneData.get(0))){
-                        ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第1列");
-                        importErrorVO.setErrorMsg("名字不可为空,请填写姓名");
-                        populationImportErrorVOList.add(importErrorVO);
-                        index++;
-                        continue;
-                    }
-                    vo.setName(oneData.get(0));
-                    if(StringUtils.isEmpty(oneData.get(1))){
-                        ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第2列"+oneData.get(1));
-                        importErrorVO.setErrorMsg("身份证号不可为空,请填写身份证号");
-                        populationImportErrorVOList.add(importErrorVO);
-                        index++;
-                        continue;
-                    }
+            int index = 2;
+            try {
+                ArrayList<ComMngPopulationServeExcelVO> voList = Lists.newArrayList();
+                List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
+                ArrayList<ComMngPopulationMistakeExcelVO> mistakes = Lists.newArrayList();
+                for (Map<Integer, String> oneData : list) {
+                    ComMngPopulationServeExcelVO vo = new ComMngPopulationServeExcelVO();
+                    //姓名和身份证都为空,为空户,无需操作,否则就解析年龄,性别,出生年月日
+                    if(StringUtils.isNotEmpty(oneData.get(0)) || StringUtils.isNotEmpty(oneData.get(1))){
+                        if(StringUtils.isEmpty(oneData.get(0))){
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第1列");
+                            importErrorVO.setErrorMsg("名字不可为空,请填写姓名");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("名字不可为空,请填写姓名");
+                            mistakes.add(mistake);
+                            continue;
+                        }
+                        vo.setName(oneData.get(0));
+                        if(StringUtils.isEmpty(oneData.get(1))){
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第2列"+oneData.get(1));
+                            importErrorVO.setErrorMsg("身份证号不可为空,请填写身份证号");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("身份证号不可为空,请填写身份证号");
+                            mistakes.add(mistake);
+                            continue;
+                        }
 
-                    //判断身份证号码位数
-                    if(oneData.get(1).length() != 18){
-                        ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第2列"+oneData.get(1));
-                        importErrorVO.setErrorMsg("身份证号位数有误,请检查身份证号码是否正确");
-                        populationImportErrorVOList.add(importErrorVO);
-                        index++;
-                        continue;
-                    }
-                    vo.setCardNo(oneData.get(1).toUpperCase());
-                    //根据身份证号码解析年龄以及性别
-                    //获取用户生日
-                    String birthday = vo.getCardNo().substring(6, 14);
-                    if(StringUtils.isNotEmpty(birthday)){
-                        String year = birthday.substring(0,4);
-                        String month = birthday.substring(4,6);
-                        String day = birthday.substring(6,8);
-                        vo.setBirthday(year + "-" + month + "-" + day);
-                    }
+                        //判断身份证号码位数
+                        if(oneData.get(1).length() != 18){
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第2列"+oneData.get(1));
+                            importErrorVO.setErrorMsg("身份证号位数有误,请检查身份证号码是否正确");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("身份证号位数有误,请检查身份证号码是否正确");
+                            mistakes.add(mistake);
+                            continue;
+                        }
+                        vo.setCardNo(oneData.get(1).toUpperCase());
+                        //根据身份证号码解析年龄以及性别
+                        //获取用户生日
+                        String birthday = vo.getCardNo().substring(6, 14);
+                        if(StringUtils.isNotEmpty(birthday)){
+                            String year = birthday.substring(0,4);
+                            String month = birthday.substring(4,6);
+                            String day = birthday.substring(6,8);
+                            vo.setBirthday(year + "-" + month + "-" + day);
+                        }
 //                    //设置用户年龄
 //                    vo.setAge(AgeUtils.getAgeFromBirthTime(birthday));
-                    //获取用户性别
-                    int sex = Integer.parseInt(vo.getCardNo().substring(16, 17));
-                    if(sex%2 == 1){
-                        vo.setSex(PopulSexEnum.nan.getCode());
-                    }else{
-                        vo.setSex(PopulSexEnum.nv.getCode());
+                        //获取用户性别
+                        int sex = Integer.parseInt(vo.getCardNo().substring(16, 17));
+                        if(sex%2 == 1){
+                            vo.setSex(PopulSexEnum.nan.getCode());
+                        }else{
+                            vo.setSex(PopulSexEnum.nv.getCode());
+                        }
                     }
-                }
-                if(StringUtils.isNotEmpty(oneData.get(2))){
+                    if(StringUtils.isNotEmpty(oneData.get(2))){
 //                    String nation = oneData.get(2);
 //                    if(!nation.contains("族")){
 //                        ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
@@ -152,26 +190,44 @@
 //                        index++;
 //                        continue;
 //                    }
-                    vo.setNation(oneData.get(2));
-                }
-                if(StringUtils.isNotEmpty(oneData.get(3))){
-                    vo.setPoliticalOutlook(PopulPoliticalOutlookEnum.getCodeByName(oneData.get(3)));
-                }
-                if(StringUtils.isNotEmpty(oneData.get(4))){
-                    Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(4));
-                    if(isOk.equals(-1)){
-                        ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第5列");
-                        importErrorVO.setErrorMsg("您填写的是否租住有误");
-                        populationImportErrorVOList.add(importErrorVO);
-                        index++;
-                        continue;
+                        vo.setNation(oneData.get(2));
                     }
-                    vo.setIsRent(isOk);
-                }else {
-                    vo.setIsRent(PopulHouseUseEnum.getCodeByName("否"));
-                }
-                if(StringUtils.isNotEmpty(oneData.get(5))){
+                    if(StringUtils.isNotEmpty(oneData.get(3))){
+                        vo.setPoliticalOutlook(PopulPoliticalOutlookEnum.getCodeByName(oneData.get(3)));
+                        Integer isOk = PopulPoliticalOutlookEnum.getCodeByName(oneData.get(3));
+                        if(isOk.equals(-1)){
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第4列");
+                            importErrorVO.setErrorMsg("您填写的政治面貌有误");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的政治面貌有误");
+                            mistakes.add(mistake);
+                            continue;
+                        }
+                        vo.setPoliticalOutlook(isOk);
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(4))){
+                        Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(4));
+                        if(isOk.equals(-1)){
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第5列");
+                            importErrorVO.setErrorMsg("您填写的是否租住有误");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的是否租住有误");
+                            mistakes.add(mistake);
+                            continue;
+                        }
+                        vo.setIsRent(isOk);
+                    }else {
+                        vo.setIsRent(PopulHouseUseEnum.getCodeByName("否"));
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(5))){
 
 //                    String ra = convertRelation(oneData.get(5));
 //
@@ -188,150 +244,204 @@
 //                        vo.setRelation(Integer.valueOf(relation));
 //                    }
 //                    String relation = convertMarriage(oneData.get(5));
-                    Integer isOk = PopulRelationEnum.getCodeByName(oneData.get(5));
+                        Integer isOk = PopulRelationEnum.getCodeByName(oneData.get(5));
 
-                    if(isOk.equals(-1)){
+                        if(isOk.equals(-1)){
 //                        vo.setMarriageStr(ma);
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第6列");
+                            importErrorVO.setErrorMsg("您填写的与户主关系有误");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的与户主关系有误");
+                            mistakes.add(mistake);
+                            continue;
+                        }else{
+                            vo.setRelation(isOk);
+                        }
+                    }
+                    if(StringUtils.isEmpty(oneData.get(6))){
                         ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第6列");
-                        importErrorVO.setErrorMsg("您填写的与户主关系有误");
+                        importErrorVO.setErrorPosition("第" + index + "行,第7列");
+                        importErrorVO.setErrorMsg("街路巷不可为空");
                         populationImportErrorVOList.add(importErrorVO);
                         index++;
+                        ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                        setMistake(oneData, mistake);
+                        mistake.setMistake("街路巷不可为空");
+                        mistakes.add(mistake);
                         continue;
-                    }else{
-                        vo.setRelation(isOk);
                     }
-                }
-                if(StringUtils.isEmpty(oneData.get(6))){
-                    ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                    importErrorVO.setErrorPosition("第" + index + "行,第7列");
-                    importErrorVO.setErrorMsg("街路巷不可为空");
-                    populationImportErrorVOList.add(importErrorVO);
-                    index++;
-                    continue;
-                }
-                vo.setRoad(oneData.get(6));
-                if(StringUtils.isEmpty(oneData.get(7))){
-                    ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                    importErrorVO.setErrorPosition("第" + index + "行,第8列");
-                    importErrorVO.setErrorMsg("小区号不可为空");
-                    populationImportErrorVOList.add(importErrorVO);
-                    index++;
-                    continue;
-                }
-                vo.setDoorNo(oneData.get(7).trim());
-                if(StringUtils.isEmpty(oneData.get(8))){
-                    ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                    importErrorVO.setErrorPosition("第" + index + "行,第9列");
-                    importErrorVO.setErrorMsg("楼排号不可为空");
-                    populationImportErrorVOList.add(importErrorVO);
-                    index++;
-                    continue;
-                }
-                vo.setFloor(oneData.get(8).trim());
-                if(StringUtils.isEmpty(oneData.get(9))){
-                    ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                    importErrorVO.setErrorPosition("第" + index + "行,第10列");
-                    importErrorVO.setErrorMsg("单元号不可为空");
-                    populationImportErrorVOList.add(importErrorVO);
-                    index++;
-                    continue;
-                }
-                vo.setUnitNo(oneData.get(9).trim());
-                if(StringUtils.isEmpty(oneData.get(10))){
-                    ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                    importErrorVO.setErrorPosition("第" + index + "行,第11列");
-                    importErrorVO.setErrorMsg("户室不可为空");
-                    populationImportErrorVOList.add(importErrorVO);
-                    index++;
-                    continue;
-                }
-                vo.setHouseNo(oneData.get(10).trim());
-                if(StringUtils.isNotEmpty(oneData.get(11))){
-                    vo.setBuildPurpose(oneData.get(11).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(12))){
-                    vo.setBuildArea(oneData.get(12).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(13))){
-                    Integer isOk = PopulHouseStatusEnum.getCodeByName(oneData.get(13).trim());
-                    if(isOk.equals(-1)){
+                    vo.setRoad(oneData.get(6));
+                    if(StringUtils.isEmpty(oneData.get(7))){
                         ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第14列");
-                        importErrorVO.setErrorMsg("您填写的房屋状态有误");
+                        importErrorVO.setErrorPosition("第" + index + "行,第8列");
+                        importErrorVO.setErrorMsg("小区号不可为空");
                         populationImportErrorVOList.add(importErrorVO);
                         index++;
+                        ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                        setMistake(oneData, mistake);
+                        mistake.setMistake("小区号不可为空");
+                        mistakes.add(mistake);
                         continue;
                     }
-                    vo.setHouseStatus(isOk);
-                }
-                if(StringUtils.isNotEmpty(oneData.get(14))){
-                    Integer isOk = PopulHousePurposeEnum.getCodeByName(oneData.get(14).trim());
-                    if(isOk.equals(-1)){
+                    vo.setDoorNo(oneData.get(7).trim());
+                    if(StringUtils.isEmpty(oneData.get(8))){
                         ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第15列");
-                        importErrorVO.setErrorMsg("您填写的房屋用途有误");
+                        importErrorVO.setErrorPosition("第" + index + "行,第9列");
+                        importErrorVO.setErrorMsg("楼排号不可为空");
                         populationImportErrorVOList.add(importErrorVO);
                         index++;
+                        ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                        setMistake(oneData, mistake);
+                        mistake.setMistake("楼排号不可为空");
+                        mistakes.add(mistake);
                         continue;
                     }
-                    vo.setHousePurpose(PopulHousePurposeEnum.getCodeByName(oneData.get(14).trim()));
-                }
-                if(StringUtils.isNotEmpty(oneData.get(15))){
-                    Integer isOk = PopulHouseControlStatusEnum.getCodeByName(oneData.get(15));
-                    if(isOk.equals(-1)){
+                    vo.setFloor(oneData.get(8).trim());
+                    if(StringUtils.isEmpty(oneData.get(9))){
                         ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第16列");
-                        importErrorVO.setErrorMsg("您填写的管控状态有误");
+                        importErrorVO.setErrorPosition("第" + index + "行,第10列");
+                        importErrorVO.setErrorMsg("单元号不可为空");
                         populationImportErrorVOList.add(importErrorVO);
                         index++;
+                        ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                        setMistake(oneData, mistake);
+                        mistake.setMistake("单元号不可为空");
+                        mistakes.add(mistake);
                         continue;
                     }
-                    vo.setControlStatus(isOk);
-                }
+                    vo.setUnitNo(oneData.get(9).trim());
+                    if(StringUtils.isEmpty(oneData.get(10))){
+                        ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                        importErrorVO.setErrorPosition("第" + index + "行,第11列");
+                        importErrorVO.setErrorMsg("户室不可为空");
+                        populationImportErrorVOList.add(importErrorVO);
+                        index++;
+                        ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                        setMistake(oneData, mistake);
+                        mistake.setMistake("户室不可为空");
+                        mistakes.add(mistake);
+                        continue;
+                    }
+                    vo.setHouseNo(oneData.get(10).trim());
+                    if(StringUtils.isNotEmpty(oneData.get(11))){
+                        vo.setBuildPurpose(oneData.get(11).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(12))){
+                        vo.setBuildArea(oneData.get(12).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(13))){
+                        Integer isOk = PopulHouseStatusEnum.getCodeByName(oneData.get(13).trim());
+                        if(isOk.equals(-1)){
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第14列");
+                            importErrorVO.setErrorMsg("您填写的房屋状态有误");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的房屋状态有误");
+                            mistakes.add(mistake);
+                            continue;
+                        }
+                        vo.setHouseStatus(isOk);
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(14))){
+                        Integer isOk = PopulHousePurposeEnum.getCodeByName(oneData.get(14).trim());
+                        if(isOk.equals(-1)){
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第15列");
+                            importErrorVO.setErrorMsg("您填写的房屋用途有误");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的房屋用途有误");
+                            mistakes.add(mistake);
+                            continue;
+                        }
+                        vo.setHousePurpose(PopulHousePurposeEnum.getCodeByName(oneData.get(14).trim()));
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(15))){
+                        Integer isOk = PopulHouseControlStatusEnum.getCodeByName(oneData.get(15));
+                        if(isOk.equals(-1)){
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第16列");
+                            importErrorVO.setErrorMsg("您填写的管控状态有误");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的管控状态有误");
+                            mistakes.add(mistake);
+                            continue;
+                        }
+                        vo.setControlStatus(isOk);
+                    }
 
-                if(StringUtils.isNotEmpty(oneData.get(16))){
-                    vo.setPhone(oneData.get(16).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(17))){
-                    vo.setNativePlace(oneData.get(17).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(18))){
-                    vo.setCultureLevel(PopulCultureLevelEnum.getCodeByName(oneData.get(18)));
-                }
-                if(StringUtils.isNotEmpty(oneData.get(19))){
+                    if(StringUtils.isNotEmpty(oneData.get(16))){
+                        vo.setPhone(oneData.get(16).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(17))){
+                        vo.setNativePlace(oneData.get(17).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(18))){
+                        vo.setCultureLevel(PopulCultureLevelEnum.getCodeByName(oneData.get(18)));
+                        Integer isOk = PopulCultureLevelEnum.getCodeByName(oneData.get(18));
+                        if(isOk.equals(-1)){
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第19列");
+                            importErrorVO.setErrorMsg("您填写的文化程度有误");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的文化程度有误");
+                            mistakes.add(mistake);
+                            continue;
+                        }
+                        vo.setCultureLevel(isOk);
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(19))){
 //                    String ma = convertMarriage(oneData.get(19));
-                    Integer isOk = PopulMarriageEnum.getCodeByName(oneData.get(19));
-                    if(isOk.equals(-1)){
+                        Integer isOk = PopulMarriageEnum.getCodeByName(oneData.get(19));
+                        if(isOk.equals(-1)){
 //                        vo.setMarriageStr(ma);
-                        ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第20列");
-                        importErrorVO.setErrorMsg("您填写的婚姻状况有误");
-                        populationImportErrorVOList.add(importErrorVO);
-                        index++;
-                        continue;
-                    }else{
-                        vo.setMarriage(isOk);
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第20列");
+                            importErrorVO.setErrorMsg("您填写的婚姻状况有误");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的婚姻状况有误");
+                            mistakes.add(mistake);
+                            continue;
+                        }else{
+                            vo.setMarriage(isOk);
+                        }
+
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(20))){
+                        vo.setHealthy(oneData.get(20).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(21))){
+                        vo.setBloodType(oneData.get(21).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(22))){
+                        vo.setReligion(oneData.get(22).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(23))){
+                        vo.setProfession(oneData.get(23).trim());
                     }
 
-                }
-                if(StringUtils.isNotEmpty(oneData.get(20))){
-                    vo.setHealthy(oneData.get(20).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(21))){
-                    vo.setBloodType(oneData.get(21).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(22))){
-                    vo.setReligion(oneData.get(22).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(23))){
-                    vo.setProfession(oneData.get(23).trim());
-                }
-
-                if(StringUtils.isNotEmpty(oneData.get(24))){
-                    vo.setWorkCompany(oneData.get(24).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(25))){
+                    if(StringUtils.isNotEmpty(oneData.get(24))){
+                        vo.setWorkCompany(oneData.get(24).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(25))){
                         Integer isOk = PopulOutOrLocalEnum.getCodeByName(oneData.get(25));
                         if(isOk.equals(-1)){
                             ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
@@ -339,94 +449,102 @@
                             importErrorVO.setErrorMsg("您填写的本地/外地有误");
                             populationImportErrorVOList.add(importErrorVO);
                             index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的本地/外地有误");
+                            mistakes.add(mistake);
                             continue;
                         }
                         vo.setOutOrLocal(isOk);
-                }else {
-                    vo.setOutOrLocal(PopulOutOrLocalEnum.getCodeByName("本地"));
-                }
-                if(StringUtils.isNotEmpty(oneData.get(26))){
-                    vo.setCensusRegister(oneData.get(26).trim());
-                }
-                if(StringUtils.isEmpty(oneData.get(27))){
-                    vo.setResidence(0);
-                }else{
-                    vo.setResidence(PopulIsOkEnum.getCodeByName(oneData.get(27).trim()));
-                }
-                if(StringUtils.isNotEmpty(oneData.get(28))){
-                    Integer isOk = PopulPersonTypeEnum.getCodeByName(oneData.get(28));
-                    if(isOk.equals(-1)){
-                        ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-                        importErrorVO.setErrorPosition("第" + index + "行,第29列");
-                        importErrorVO.setErrorMsg("您填写的人员类型有误");
-                        populationImportErrorVOList.add(importErrorVO);
-                        index++;
+                    }else {
+                        vo.setOutOrLocal(PopulOutOrLocalEnum.getCodeByName("本地"));
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(26))){
+                        vo.setCensusRegister(oneData.get(26).trim());
+                    }
+                    if(StringUtils.isEmpty(oneData.get(27))){
+                        vo.setResidence(0);
+                    }else{
+                        vo.setResidence(PopulIsOkEnum.getCodeByName(oneData.get(27).trim()));
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(28))){
+                        Integer isOk = PopulPersonTypeEnum.getCodeByName(oneData.get(28));
+                        if(isOk.equals(-1)){
+                            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                            importErrorVO.setErrorPosition("第" + index + "行,第29列");
+                            importErrorVO.setErrorMsg("您填写的人员类型有误");
+                            populationImportErrorVOList.add(importErrorVO);
+                            index++;
+                            ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                            setMistake(oneData, mistake);
+                            mistake.setMistake("您填写的人员类型有误");
+                            mistakes.add(mistake);
+                            continue;
+                        }
+                        vo.setPersonType(isOk);
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(29))){
+                        vo.setCountry(oneData.get(29).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(30))){
+                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-dd-MM HH:mm:ss");
+                        vo.setDateOfDeparture(simpleDateFormat.parse(oneData.get(30)));
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(31))){
+                        vo.setPersonStatus(oneData.get(31).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(32))){
+                        vo.setMonthlyIncome(oneData.get(32).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(33))){
+                        vo.setFamilyStatus(oneData.get(33).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(34))){
+                        vo.setGoalInChina(oneData.get(34).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(35))){
+                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-dd-MM HH:mm:ss");
+                        vo.setDateOfArrival(simpleDateFormat.parse(oneData.get(35)));
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(36))){
+                        vo.setRemark(oneData.get(36).trim());
+                    }
+
+                    if(StringUtils.isNotEmpty(oneData.get(37))){
+                        vo.setIdCardPositive(oneData.get(37).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(38))){
+                        vo.setIdCardBack(oneData.get(38).trim());
+                    }
+                    if(StringUtils.isNotEmpty(oneData.get(39))){
+                        vo.setHouseHold(oneData.get(39).trim());
+                    }
+                    if(StringUtils.isEmpty(oneData.get(40))){
+                        vo.setDeath(0);
+                    }else{
+                        vo.setDeath(PopulIsOkEnum.getCodeByName(oneData.get(40).trim()));
+                    }
+                    for (int i = 41; i < headSize; i++) {
+                        if (oneData.get(i) != null && oneData.get(i).equals("是")) {
+                            vo.getUserTagStr().add(headData.get(i).substring(0,headData.get(i).indexOf("(")));
+                        }
+                    }
+
+                    //将重复的数据进行MD5加密实现去重
+                    String distinct = vo.getName() + vo.getCardNo() + vo.getRoad() + vo.getDoorNo() + vo.getFloor() + vo.getUnitNo() + vo.getHouseNo();
+                    try {
+                        String distinctPass = PayUtil.MD5(distinct);
+                        if(StringUtils.isNotEmpty(distinctPass)){
+                            vo.setDistinctPass(distinctPass);
+                        }
+                    }catch (Exception e){
+                        log.error("组装MD5加密字段失败,数据表格行数:" + index);
                         continue;
                     }
-                    vo.setPersonType(isOk);
+                    voList.add(vo);
+                    index++;
                 }
-                if(StringUtils.isNotEmpty(oneData.get(29))){
-                    vo.setCountry(oneData.get(29).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(30))){
-                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-dd-MM HH:mm:ss");
-                    vo.setDateOfDeparture(simpleDateFormat.parse(oneData.get(30)));
-                }
-                if(StringUtils.isNotEmpty(oneData.get(31))){
-                    vo.setPersonStatus(oneData.get(31).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(32))){
-                    vo.setMonthlyIncome(oneData.get(32).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(33))){
-                    vo.setFamilyStatus(oneData.get(33).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(34))){
-                    vo.setGoalInChina(oneData.get(34).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(35))){
-                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-dd-MM HH:mm:ss");
-                    vo.setDateOfArrival(simpleDateFormat.parse(oneData.get(35)));
-                }
-                if(StringUtils.isNotEmpty(oneData.get(36))){
-                    vo.setRemark(oneData.get(36).trim());
-                }
-
-                if(StringUtils.isNotEmpty(oneData.get(37))){
-                    vo.setIdCardPositive(oneData.get(37).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(38))){
-                    vo.setIdCardBack(oneData.get(38).trim());
-                }
-                if(StringUtils.isNotEmpty(oneData.get(39))){
-                    vo.setHouseHold(oneData.get(39).trim());
-                }
-                if(StringUtils.isEmpty(oneData.get(40))){
-                    vo.setDeath(0);
-                }else{
-                    vo.setDeath(PopulIsOkEnum.getCodeByName(oneData.get(40).trim()));
-                }
-                for (int i = 41; i < headSize; i++) {
-                    if (oneData.get(i) != null && oneData.get(i).equals("是")) {
-                        vo.getUserTagStr().add(headData.get(i).substring(0,headData.get(i).indexOf("(")));
-                    }
-                }
-
-                //将重复的数据进行MD5加密实现去重
-                String distinct = vo.getName() + vo.getCardNo() + vo.getRoad() + vo.getDoorNo() + vo.getFloor() + vo.getUnitNo() + vo.getHouseNo();
-                try {
-                    String distinctPass = PayUtil.MD5(distinct);
-                    if(StringUtils.isNotEmpty(distinctPass)){
-                        vo.setDistinctPass(distinctPass);
-                    }
-                }catch (Exception e){
-                    log.error("组装MD5加密字段失败,数据表格行数:" + index);
-                    continue;
-                }
-                voList.add(vo);
-                index++;
-            }
-            //客户需要暂时注释,等客户处理完成需要恢复
+                //客户需要暂时注释,等客户处理完成需要恢复
 //            if(populationImportErrorVOList.isEmpty()){
 //                R r = communityService.listSavePopulationServeExcelVO(voList, communityId);
 //                if (!R.isOk(r)) {
@@ -435,137 +553,242 @@
 //            }else{
 //                throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
 //            }
-            //根据list中的IdCard城市来去重
-            List<ComMngPopulationServeExcelVO> newVoList = voList.stream().filter(ListUtils.distinctByKey(ComMngPopulationServeExcelVO::getDistinctPass)).collect(Collectors.toList());
-            R r = communityService.listSavePopulationServeExcelVO(newVoList, communityId);
-            if (!R.isOk(r)) {
-                String errMsg = r.getMsg();
-                List<ComMngPopulationImportErrorVO> errorList = JSON.parseArray(errMsg,ComMngPopulationImportErrorVO.class);
-                if(!errorList.isEmpty()){
-                    populationImportErrorVOList.addAll(errorList);
-                }
-                throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
-            }else{
-                if(!populationImportErrorVOList.isEmpty()){
+                //根据list中的IdCard城市来去重
+                List<ComMngPopulationServeExcelVO> newVoList = voList.stream().filter(ListUtils.distinctByKey(ComMngPopulationServeExcelVO::getDistinctPass)).collect(Collectors.toList());
+                R r = communityService.listSavePopulationServeExcelVO(newVoList, communityId);
+                if (!R.isOk(r)) {
+                    List<ComMngPopulationMistakeExcelVO> list = JSONArray.parseArray(JSONArray.toJSONString(r.getData()), ComMngPopulationMistakeExcelVO.class);
+                    String errMsg = r.getMsg();
+                    List<ComMngPopulationImportErrorVO> errorList = JSON.parseArray(errMsg,ComMngPopulationImportErrorVO.class);
+                    if(!errorList.isEmpty()){
+                        populationImportErrorVOList.addAll(errorList);
+                    }
+                    mistakes.addAll(list);
+                    R result = mistakeExportPopulation(mistakes);
+                    loadUrl = (String)result.getData();
+                    ComMngPopulationImportErrorVO comMngPopulationImportErrorVO = new ComMngPopulationImportErrorVO();
+                    comMngPopulationImportErrorVO.setErrorPosition("loadUrl");
+                    comMngPopulationImportErrorVO.setErrorMsg(loadUrl);
+                    populationImportErrorVOList.add(comMngPopulationImportErrorVO);
                     throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
+                }else{
+//                mistakes.addAll((List<ComMngPopulationMistakeExcelVO>)r.getData());
+                    R result = mistakeExportPopulation(mistakes);
+                    loadUrl = (String)result.getData();
+                    if(!populationImportErrorVOList.isEmpty()){
+                        ComMngPopulationImportErrorVO comMngPopulationImportErrorVO = new ComMngPopulationImportErrorVO();
+                        comMngPopulationImportErrorVO.setErrorPosition("loadUrl");
+                        comMngPopulationImportErrorVO.setErrorMsg(loadUrl);
+                        populationImportErrorVOList.add(comMngPopulationImportErrorVO);
+                        throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
+                    }
                 }
+            } catch (NumberFormatException e) {
+                e.printStackTrace();
+                List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
+                ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                importErrorVO.setErrorPosition("第" + index + "行");
+                importErrorVO.setErrorMsg("数据格式有误,请检查文档内数据");
+                populationImportErrorVOList.add(importErrorVO);
+                throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
+            } catch (ParseException e1) {
+                e1.printStackTrace();
+                List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
+                ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
+                importErrorVO.setErrorPosition("第" + index + "行");
+                importErrorVO.setErrorMsg("数据格式有误,请检查文档内数据");
+                populationImportErrorVOList.add(importErrorVO);
+                throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
             }
-        } catch (NumberFormatException e) {
-            e.printStackTrace();
-            List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
-            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-            importErrorVO.setErrorPosition("第" + index + "行");
-            importErrorVO.setErrorMsg("数据格式有误,请检查文档内数据");
-            populationImportErrorVOList.add(importErrorVO);
-            throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
-        } catch (ParseException e1) {
-            e1.printStackTrace();
-            List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
-            ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
-            importErrorVO.setErrorPosition("第" + index + "行");
-            importErrorVO.setErrorMsg("数据格式有误,请检查文档内数据");
-            populationImportErrorVOList.add(importErrorVO);
-            throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
-        }
-    }
-
-    private String convertMarriage(String ma) {
-
-        if(Objects.equals("已",ma) || Objects.equals("一",ma)){
-            ma = "已婚";
-        }else if(Objects.equals("未",ma) || Objects.equals("未婚婚",ma)){
-            ma = "未婚";
-        }else if(Objects.equals("初",ma)){
-            ma = "初婚";
-        }else if(Objects.equals("再",ma)){
-            ma = "再婚";
-        }else if(Objects.equals("复",ma)){
-            ma = "复婚";
-        }else if(Objects.equals("丧",ma) || Objects.equals("丧偶偶",ma)){
-            ma = "丧偶";
-        }else if(Objects.equals("离",ma) || Objects.equals("离异",ma) || Objects.equals("离异婚",ma)){
-            ma = "离婚";
-        }else if(Objects.equals("分",ma)){
-            ma = "分居";
         }
 
-        return ma;
-    }
-
-    private String convertRelation(String ra) {
-        if(ra.contains("户主")){
-            ra = "户主";
-        }else if(Objects.equals(ra,"女儿")){
-            ra = "女";
-        }else if(Objects.equals(ra,"儿子") || Objects.equals(ra,"儿")){
-            ra = "子";
-        }else if(Objects.equals(ra,"大女")){
-            ra = "长女";
-        }else if(Objects.equals(ra,"二女") || Objects.equals(ra,"此女")){
-            ra = "次女";
-        }else if(Objects.equals(ra,"二子")){
-            ra = "次子";
-        }else if(Objects.equals(ra,"长男") || ra.contains("长子")){
-            ra = "长子";
-        }else if(Objects.equals(ra,"非亲属") || ra.contains("女友")  || ra.contains("女朋友")
-                || ra.contains("男友") || ra.contains("男朋友")){
-            ra = "其他";
-        }else if(Objects.equals(ra,"姐")){
-            ra = "姐姐";
-        }else if(Objects.equals(ra,"户主")){
-            ra = "本人";
-        }else if(Objects.equals(ra,"妻子") || Objects.equals(ra,"媳妇")){
-            ra = "妻";
-        }else if(Objects.equals(ra,"哥") || Objects.equals(ra,"哥哥")){
-            ra = "兄";
-        }else if(Objects.equals(ra,"丈夫")){
-            ra = "夫";
-        }else if(Objects.equals(ra,"丈母娘")){
-            ra = "岳母";
-        }else if(Objects.equals(ra,"继子") || Objects.equals(ra,"养子")){
-            ra = "养子或继子";
-        }else if(Objects.equals(ra,"继女") || Objects.equals(ra,"养女")){
-            ra = "养女或继女";
-        }else if(ra.contains("儿媳")||ra.contains("长媳")){
-            ra = "儿媳";
-        }else if(Objects.equals(ra,"三姨") || Objects.equals(ra,"姨姨")){
-            ra = "姨母";
-        }else if(Objects.equals(ra,"二外孙女")){
-            ra = "外孙女";
-        }else if(Objects.equals(ra,"外孙")){
-            ra = "外孙子";
-        }else if(Objects.equals(ra,"侄儿")){
-            ra = "侄子";
-        }else if(ra.contains("表")){
-            ra = "表兄弟、表姐妹";
-        }else if(Objects.equals(ra,"继父") || Objects.equals(ra,"养父")){
-            ra = "继父或养父";
-        }else if(Objects.equals(ra,"父")){
-            ra = "父亲";
-        }else if(Objects.equals(ra,"弟弟")){
-            ra = "弟";
-        }else if(Objects.equals(ra,"孙")){
-            ra = "孙子";
-        }else if(Objects.equals(ra,"孙媳妇") || Objects.equals(ra,"外孙媳妇")){
-            ra = "孙媳妇或外孙媳妇";
-        }else if(Objects.equals(ra,"妹")){
-            ra = "妹妹";
-        }else if(Objects.equals(ra,"祖父母")){
-            ra = "祖父母或外祖父母";
-        }else if(Objects.equals(ra,"姐妹") || Objects.equals(ra,"兄弟")){
-            ra = "兄弟姐妹";
-        }else if(Objects.equals(ra,"其他姐妹") || Objects.equals(ra,"其他兄弟")){
-            ra = "其他兄弟姐妹";
-        }else if(Objects.equals(ra,"奶奶")){
-            ra = "祖母";
-        }else if(Objects.equals(ra,"爷爷")){
-            ra = "祖父";
-        }else if(Objects.equals(ra,"爷爷")){
-            ra = "祖父";
-        }else if(ra.contains("堂")){
-            ra = "堂兄弟、堂姐妹";
+        private void setMistake(Map<Integer, String> map, ComMngPopulationMistakeExcelVO vo){
+            vo.setName(map.get(0));
+            vo.setCardNo(map.get(1));
+            vo.setNation(map.get(2));
+            vo.setPoliticalOutlook(map.get(3));
+            vo.setIsRent(map.get(4));
+            vo.setRelation(map.get(5));
+            vo.setRoad(map.get(6));
+            vo.setDoorNo(map.get(7));
+            vo.setFloor(map.get(8));
+            vo.setUnitNo(map.get(9));
+            vo.setHouseNo(map.get(10));
+            vo.setBuildPurpose(map.get(11));
+            vo.setBuildArea(map.get(12));
+            vo.setHouseStatus(map.get(13));
+            vo.setHousePurpose(map.get(14));
+            vo.setControlStatus(map.get(15));
+            vo.setPhone(map.get(16));
+            vo.setNativePlace(map.get(17));
+            vo.setCultureLevel(map.get(18));
+            vo.setMarriage(map.get(19));
+            vo.setHealthy(map.get(20));
+            vo.setBloodType(map.get(21));
+            vo.setReligion(map.get(22));
+            vo.setProfession(map.get(23));
+            vo.setWorkCompany(map.get(24));
+            vo.setOutOrLocal(map.get(25));
+            vo.setCensusRegister(map.get(26));
+            vo.setResidence(map.get(27));
+//        vo.setAddress(map.get(28));
+            vo.setPersonType(map.get(28));
+            vo.setCountry(map.get(29));
+            vo.setStringOfDeparture(map.get(30));
+            vo.setPersonStatus(map.get(31));
+            vo.setMonthlyIncome(map.get(32));
+            vo.setFamilyStatus(map.get(33));
+            vo.setGoalInChina(map.get(34));
+            vo.setStringOfArrival(map.get(35));
+            vo.setRemark(map.get(36));
+            vo.setIdCardPositive(map.get(37));
+            vo.setIdCardBack(map.get(38));
+            vo.setHouseHold(map.get(39));
+            vo.setDeath(map.get(40));
         }
 
-        return ra;
-    }
+        private R mistakeExportPopulation(List<ComMngPopulationMistakeExcelVO> vo) {
+            //生成动态模板excel通过ftp工具上传到主节点,然后返回模板下载地址
+            String ftpUrl = "/mnt/data/web/excel/";
+            String name = "实有人口错误数据.xlsx";
+            try {
+                SFTPUtil sftp = new SFTPUtil(userName, password, host, port);
+                sftp.login();
+                boolean existDir = sftp.isExistDir(ftpUrl + name);
+                if (!existDir) {
+                    String property = System.getProperty("user.dir");
+                    String fileName = property + File.separator + name;
+                    // 这里 需要指定写用哪个class去写
+                    ExcelWriter excelWriter = null;
+                    InputStream inputStream = null;
+                    try {
+                        excelWriter = EasyExcel.write(fileName, ComMngPopulationMistakeExcelVO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).registerWriteHandler(new CustomSheetWriteHandler()).build();
+                        WriteSheet writeSheet = EasyExcel.writerSheet("实有人口错误数据").build();
+                        excelWriter.write(vo, writeSheet);
+                        excelWriter.finish();
+                        File file = new File(fileName);
+                        inputStream = new FileInputStream(file);
+                        sftp.uploadMore(ftpUrl, name, inputStream);
+                        sftp.logout();
+                        inputStream.close();
+                        String absolutePath = file.getAbsolutePath();
+                        boolean delete = file.delete();
+                        log.info("删除excel【{}】结果【{}】", absolutePath, delete);
+                    } finally {
+                        // 千万别忘记finish 会帮忙关闭流
+                        if (inputStream != null) {
+                            inputStream.close();
+                        }
+                        if (excelWriter != null) {
+                            excelWriter.finish();
+                        }
+                    }
+                }
+                return R.ok(excelUrl + name);
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.error("文件传输失败【{}】", e.getMessage());
+                return R.fail();
+            }
+        }
+
+        private String convertMarriage(String ma) {
+
+            if(Objects.equals("已",ma) || Objects.equals("一",ma)){
+                ma = "已婚";
+            }else if(Objects.equals("未",ma) || Objects.equals("未婚婚",ma)){
+                ma = "未婚";
+            }else if(Objects.equals("初",ma)){
+                ma = "初婚";
+            }else if(Objects.equals("再",ma)){
+                ma = "再婚";
+            }else if(Objects.equals("复",ma)){
+                ma = "复婚";
+            }else if(Objects.equals("丧",ma) || Objects.equals("丧偶偶",ma)){
+                ma = "丧偶";
+            }else if(Objects.equals("离",ma) || Objects.equals("离异",ma) || Objects.equals("离异婚",ma)){
+                ma = "离婚";
+            }else if(Objects.equals("分",ma)){
+                ma = "分居";
+            }
+
+            return ma;
+        }
+
+        private String convertRelation(String ra) {
+            if(ra.contains("户主")){
+                ra = "户主";
+            }else if(Objects.equals(ra,"女儿")){
+                ra = "女";
+            }else if(Objects.equals(ra,"儿子") || Objects.equals(ra,"儿")){
+                ra = "子";
+            }else if(Objects.equals(ra,"大女")){
+                ra = "长女";
+            }else if(Objects.equals(ra,"二女") || Objects.equals(ra,"此女")){
+                ra = "次女";
+            }else if(Objects.equals(ra,"二子")){
+                ra = "次子";
+            }else if(Objects.equals(ra,"长男") || ra.contains("长子")){
+                ra = "长子";
+            }else if(Objects.equals(ra,"非亲属") || ra.contains("女友")  || ra.contains("女朋友")
+                    || ra.contains("男友") || ra.contains("男朋友")){
+                ra = "其他";
+            }else if(Objects.equals(ra,"姐")){
+                ra = "姐姐";
+            }else if(Objects.equals(ra,"户主")){
+                ra = "本人";
+            }else if(Objects.equals(ra,"妻子") || Objects.equals(ra,"媳妇")){
+                ra = "妻";
+            }else if(Objects.equals(ra,"哥") || Objects.equals(ra,"哥哥")){
+                ra = "兄";
+            }else if(Objects.equals(ra,"丈夫")){
+                ra = "夫";
+            }else if(Objects.equals(ra,"丈母娘")){
+                ra = "岳母";
+            }else if(Objects.equals(ra,"继子") || Objects.equals(ra,"养子")){
+                ra = "养子或继子";
+            }else if(Objects.equals(ra,"继女") || Objects.equals(ra,"养女")){
+                ra = "养女或继女";
+            }else if(ra.contains("儿媳")||ra.contains("长媳")){
+                ra = "儿媳";
+            }else if(Objects.equals(ra,"三姨") || Objects.equals(ra,"姨姨")){
+                ra = "姨母";
+            }else if(Objects.equals(ra,"二外孙女")){
+                ra = "外孙女";
+            }else if(Objects.equals(ra,"外孙")){
+                ra = "外孙子";
+            }else if(Objects.equals(ra,"侄儿")){
+                ra = "侄子";
+            }else if(ra.contains("表")){
+                ra = "表兄弟、表姐妹";
+            }else if(Objects.equals(ra,"继父") || Objects.equals(ra,"养父")){
+                ra = "继父或养父";
+            }else if(Objects.equals(ra,"父")){
+                ra = "父亲";
+            }else if(Objects.equals(ra,"弟弟")){
+                ra = "弟";
+            }else if(Objects.equals(ra,"孙")){
+                ra = "孙子";
+            }else if(Objects.equals(ra,"孙媳妇") || Objects.equals(ra,"外孙媳妇")){
+                ra = "孙媳妇或外孙媳妇";
+            }else if(Objects.equals(ra,"妹")){
+                ra = "妹妹";
+            }else if(Objects.equals(ra,"祖父母")){
+                ra = "祖父母或外祖父母";
+            }else if(Objects.equals(ra,"姐妹") || Objects.equals(ra,"兄弟")){
+                ra = "兄弟姐妹";
+            }else if(Objects.equals(ra,"其他姐妹") || Objects.equals(ra,"其他兄弟")){
+                ra = "其他兄弟姐妹";
+            }else if(Objects.equals(ra,"奶奶")){
+                ra = "祖母";
+            }else if(Objects.equals(ra,"爷爷")){
+                ra = "祖父";
+            }else if(Objects.equals(ra,"爷爷")){
+                ra = "祖父";
+            }else if(ra.contains("堂")){
+                ra = "堂兄弟、堂姐妹";
+            }
+
+            return ra;
+        }
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwDangerReportHandleDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwDangerReportHandleDTO.java
new file mode 100644
index 0000000..a6f5803
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwDangerReportHandleDTO.java
@@ -0,0 +1,64 @@
+package com.panzhihua.common.model.dtos.community;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *  隐患报告处理DTO
+ */
+@Data
+@ApiModel("隐患报告处理DTO")
+public class ComSwDangerReportHandleDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 隐患报告id
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("隐患报告id")
+    private Long dangerReportId;
+
+    /**
+     * 社区id
+     */
+    @ApiModelProperty("社区id")
+    private Long communityId;
+
+    /**
+     * 社区处理建议
+     */
+    @ApiModelProperty("社区处理建议")
+    private String communitySuggestion;
+
+    /**
+     * 街道安全人员管理建议
+     */
+    @ApiModelProperty("街道安全人员管理建议")
+    private String streetSuggestion;
+
+    /**
+     * 承办记录
+     */
+    @ApiModelProperty("承办记录")
+    private String undertakeRecord;
+
+    /**
+     * 领导意见
+     */
+    @ApiModelProperty("领导意见")
+    private String leaderSuggestion;
+
+    /**
+     * 指派人员
+     */
+    @ApiModelProperty("指派人员")
+    private String assignPerson;
+
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwDangerReportRectifyDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwDangerReportRectifyDTO.java
new file mode 100644
index 0000000..f727a87
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwDangerReportRectifyDTO.java
@@ -0,0 +1,49 @@
+package com.panzhihua.common.model.dtos.community;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  隐患报告整改DTO
+ */
+@Data
+@ApiModel("隐患报告整改DTO")
+public class ComSwDangerReportRectifyDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 隐患报告id
+     */
+    @ApiModelProperty("隐患报告id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long dangerReportId;
+
+    /**
+     * 社区id
+     */
+    @ApiModelProperty("社区id")
+    private Long communityId;
+
+    /**
+     * 采取措施
+     */
+    @ApiModelProperty("采取措施")
+    private String takeSteps;
+
+    /**
+     * 采取措施照片
+     */
+    @ApiModelProperty("采取措施照片")
+    private String stepsPhoto;
+
+    /**
+     * 整改人员
+     */
+    @ApiModelProperty("整改人员")
+    private String rectifyPerson;
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordPageDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordPageDTO.java
index 0ea2119..1706212 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordPageDTO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComSwPatrolRecordPageDTO.java
@@ -58,4 +58,16 @@
     @ApiModelProperty("巡查人员")
     private String patrolPerson;
 
+    /**
+     * 状态(1.待查看 2.待处理 3.待整改 4.已整改)
+     */
+    @ApiModelProperty("状态(1.待处理 2.待整改 3.已整改)")
+    private String status;
+
+    /**
+     * 查看人(1.全部 2.只看我的)
+     */
+    @ApiModelProperty("查看人(1.全部 2.只看我的)")
+    private Integer selectPerson;
+
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationMistakeExcelVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationMistakeExcelVO.java
new file mode 100644
index 0000000..5fdd5cf
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationMistakeExcelVO.java
@@ -0,0 +1,148 @@
+package com.panzhihua.common.model.vos.community;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.google.common.collect.Lists;
+import com.panzhihua.common.model.helper.encrypt.EncryptDecryptClass;
+import com.panzhihua.common.model.helper.encrypt.EncryptDecryptField;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 批量导入实有人口
+ * @author: llming
+ */
+@Data
+@EncryptDecryptClass
+public class ComMngPopulationMistakeExcelVO implements Serializable {
+
+    @ExcelProperty(value = "姓名", index = 0)
+    private String name;
+
+    @EncryptDecryptField
+    private String cardNo;
+
+    @ExcelProperty(value = "民族", index = 2)
+    private String nation;
+
+    @ExcelProperty(value = "政治面貌(群众/中共党员/共青团员)", index = 3)
+    private String politicalOutlook;
+
+    @ExcelProperty(value = "是否租住", index = 4)
+    private String isRent;
+
+    @ExcelProperty(value = "与户主关系(户主/配偶/子女/孙女/父母/其他)", index = 5)
+    private String relation;
+
+    @ExcelProperty(value = "街/路/巷", index = 6)
+    private String road;
+
+    @ExcelProperty(value = "小区号(政府对于每个小区都有特定编号)", index = 7)
+    private String doorNo;
+
+    @ExcelProperty(value = "楼排号", index = 8)
+    private String floor;
+
+    @ExcelProperty(value = "单元号", index = 9)
+    private String unitNo;
+
+    @ExcelProperty(value = "户室(四位数表示。前两位楼层,后两位户号)", index = 10)
+    private String houseNo;
+
+    @ExcelProperty(value = "建筑用途", index = 11)
+    private String buildPurpose;
+
+    @ExcelProperty(value = "建筑面积", index = 12)
+    private String buildArea;
+
+    @ExcelProperty(value = "房屋状态(自住/租住/其他)", index = 13)
+    private String houseStatus;
+
+    @ExcelProperty(value = "房屋用途(住宅/公寓/宿舍/仓库/其他)", index = 14)
+    private String housePurpose;
+
+    @ExcelProperty(value = "管控状态(常规/关注/管控)", index = 15)
+    private String controlStatus;
+
+    @ExcelProperty(value = "联系方式", index = 16)
+    private String phone;
+
+    @ExcelProperty(value = "籍贯", index = 17)
+    private String nativePlace;
+
+    @ExcelProperty(value = "文化程度(1.小学 2.初中 3.高中 4.中专 5.大专 6.本科 7.硕士 8.博士 9.其他)", index = 18)
+    private String cultureLevel;
+
+    @ExcelProperty(value = "婚姻状况(1.未婚 2.已婚 3.离异 4.丧偶 5.分居 6.其他)", index = 19)
+    private String marriage;
+
+    @ExcelProperty(value = "健康状况", index = 20)
+    private String healthy;
+
+    @ExcelProperty(value = "血型", index = 21)
+    private String bloodType;
+
+    @ExcelProperty(value = "宗教信仰", index = 22)
+    private String religion;
+
+    @ExcelProperty(value = "职业", index = 23)
+    private String profession;
+
+    @ExcelProperty(value = "工作单位/学校", index = 24)
+    private String workCompany;
+
+    @ExcelProperty(value = "本地/外地", index = 25)
+    private String outOrLocal;
+
+    @ExcelProperty(value = "户口所在地", index = 26)
+    private String censusRegister;
+
+    @ExcelProperty(value = "是否居住地(是/否)", index = 27)
+    private String residence;
+
+//    @ExcelProperty(value = "居住地址", index = 28)
+//    private String address;
+
+    @ExcelProperty(value = "人员类型(户籍人员/留守人员/外地人员/境外人员)", index = 28)
+    private String personType;
+
+    @ExcelProperty(value = "国家", index = 29)
+    private String country;
+
+    @ExcelProperty(value = "离开日期(境外人员填写)", index = 30)
+    private String StringOfDeparture;
+
+    @ExcelProperty(value = "人员状态(正常/失联/出国)", index = 31)
+    private String personStatus;
+
+    @ExcelProperty(value = "月收入情况", index = 32)
+    private String monthlyIncome;
+
+    @ExcelProperty(value = "家庭情况", index = 33)
+    private String familyStatus;
+
+    @ExcelProperty(value = "来华目的(境外人员填写)", index = 34)
+    private String goalInChina;
+
+    @ExcelProperty(value = "抵达日期(境外人员填写)", index = 35)
+    private String StringOfArrival;
+
+    @ExcelProperty(value = "备注", index = 36)
+    private String remark;
+
+    @ExcelProperty(value = "证件照(人面像)照片", index = 37)
+    private String idCardPositive;
+
+    @ExcelProperty(value = "证件照(国徽面)照片", index = 38)
+    private String idCardBack;
+
+    @ExcelProperty(value = "户口本照片", index = 39)
+    private String houseHold;
+
+    @ExcelProperty(value = "是否死亡(是/否)", index = 40)
+    private String death;
+
+    @ExcelProperty(value = "错误信息", index = 41)
+    private String mistake;
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationServeExcelVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationServeExcelVO.java
index 0789848..90c6a02 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationServeExcelVO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationServeExcelVO.java
@@ -172,6 +172,9 @@
     @ExcelProperty(value = "特殊情况(重大病史/孕)(是/否)", index = 49)
     private Integer specialCase;
 
+    @ExcelProperty(value = "错误信息", index = 50)
+    private Integer mistake;
+
 
     /**
      * 去重字段,使用(姓名+身份证号+街路巷+小区号+楼牌号+单元号+户室)组合字段进行MD5加密实现去重
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportExcelVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportExcelVO.java
new file mode 100644
index 0000000..b36c017
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportExcelVO.java
@@ -0,0 +1,59 @@
+package com.panzhihua.common.model.vos.community;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.panzhihua.common.model.helper.encrypt.EncryptDecryptClass;
+import com.panzhihua.common.model.helper.encrypt.EncryptDecryptField;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @description: 批量导出隐患报告台账管理
+ * @author: Null
+ * @date: 2021/7/28 17:11
+ */
+@Data
+public class ComSwDangerReportExcelVO implements Serializable {
+    /**
+     * 小区名称
+     */
+    @ExcelProperty(value = "安全隐患地址" ,index = 0)
+    private String address;
+    /**
+     * 隐患简述
+     */
+    @ExcelProperty(value = "隐患简述" ,index = 1)
+    private String dagerDescription;
+
+    /**
+     * 隐患类型
+     */
+    @ExcelProperty(value = "隐患类型" ,index = 2)
+    private String dangerType;
+
+    /**
+     * 风险等级
+     */
+    @ExcelProperty(value = "风险等级" ,index = 3)
+    private String dangerLevel;
+
+    /**
+     * 巡查人员
+     */
+    @ExcelProperty(value = "巡查人员" ,index = 4)
+    private String patrolPerson;
+
+    /**
+     * 联系电话
+     */
+    @ExcelProperty(value = "联系电话" ,index = 5)
+    private String patrolPersonPhone;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注" ,index = 6)
+    private String remark;
+
+}
+
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java
new file mode 100644
index 0000000..86de551
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java
@@ -0,0 +1,267 @@
+package com.panzhihua.common.model.vos.community;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @auther txb
+ * @create 2021-07-23 14:38:38
+ * @describe 社区》安全工作》巡查记录实体类
+ */
+
+@Data
+@ApiModel("隐患报告表")
+public class ComSwDangerReportVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 隐患报告id
+     */
+    @ApiModelProperty("隐患报告id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 社区id
+     */
+    @ApiModelProperty("社区id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long communityId;
+
+    /**
+     * 巡查时间
+     */
+    @ApiModelProperty("巡查时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date PatrolTime;
+
+    /**
+     * 天气
+     */
+    @ApiModelProperty("天气")
+    private String weather;
+
+    /**
+     * 温度
+     */
+    @ApiModelProperty("温度")
+    private String temperature;
+
+    /**
+     * 风
+     */
+    @ApiModelProperty("风")
+    private String wind;
+
+    /**
+    * (取字典表国家标准编码)巡查类型(1.防火巡查2.防汛巡查3.防疫巡查)
+    */
+    @ApiModelProperty("巡查类型(1.防火巡查2.防汛巡查3.防疫巡查),多条以逗号隔开")
+    private String patrolType;
+
+    /**
+    * 巡查人员,多个以逗号隔开
+    */
+    @ApiModelProperty("巡查人员,多个以逗号隔开")
+    private String patrolPerson;
+
+    /**
+     * 巡查人员联系电话,多个以逗号隔开
+     */
+    @ApiModelProperty("巡查人员联系电话,多个以逗号隔开")
+    private String patrolPersonPhone;
+
+    /**
+     * 巡查地址
+     */
+    @ApiModelProperty("巡查地址")
+    private String address;
+
+    /**
+    * 巡查记录
+    */
+    @ApiModelProperty("巡查记录")
+    private String recordContent;
+
+    /**
+    * 发现记录
+    */
+    @ApiModelProperty("发现记录")
+    private String findRecord;
+
+    /**
+    * 记录照片
+    */
+    @ApiModelProperty("记录照片")
+    private String recordPhoto;
+
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+    /**
+    * 隐患名称
+    */
+    @ApiModelProperty("隐患名称")
+    private String dagerName;
+
+    /**
+    * 排查时间
+    */
+    @ApiModelProperty("排查时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date checkTime;
+
+    /**
+    * 主体部门、单位或个人全称
+    */
+    @ApiModelProperty("主体部门、单位或个人全称")
+    private String unitName;
+
+    /**
+    * 隐患简述
+    */
+    @ApiModelProperty("隐患简述")
+    private String dagerDescription;
+
+    /**
+     * 隐患编号
+     */
+    @ApiModelProperty("隐患编号")
+    private Integer dangerNo;
+
+    /**
+     * 隐患类型(1.火灾隐患 2.汛情隐患 3.疫情隐患)
+     */
+    @ApiModelProperty("隐患类型(1.火灾隐患 2.汛情隐患 3.疫情隐患)")
+    private String dangerType;
+
+    /**
+     * 状态(1.待查看 2.待处理 3.待整改 4.已整改)
+     */
+    @ApiModelProperty("状态(1.待处理 2.待整改 3.已整改)")
+    private String status;
+
+    /**
+     * 风险等级(1.红色预警 2.橙色预警 3.黄色预警 4.蓝色预警)
+     */
+    @ApiModelProperty("风险等级(1.红色预警 2.橙色预警 3.黄色预警 4.蓝色预警)")
+    private String dangerLevel;
+
+    /**
+    * 采取措施
+    */
+    @ApiModelProperty("采取措施")
+    private String takeSteps;
+
+    /**
+    * 采取措施照片
+    */
+    @ApiModelProperty("采取措施照片")
+    private String stepsPhoto;
+
+    /**
+    * 整改人员
+    */
+    @ApiModelProperty("整改人员")
+    private String rectifyPerson;
+
+    /**
+     * 整改人员联系电话,多个以逗号隔开
+     */
+    @ApiModelProperty("整改人员联系电话,多个以逗号隔开")
+    private String rectifyPersonPhone;
+
+    /**
+     * 整改时间
+     */
+    @ApiModelProperty("整改时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date rectifyTime;
+
+    /**
+     * 社区处理建议
+     */
+    @ApiModelProperty("社区处理建议")
+    private String communitySuggestion;
+
+    /**
+     * 街道安全人员管理建议
+     */
+    @ApiModelProperty("街道安全人员管理建议")
+    private String streetSuggestion;
+
+    /**
+     * 承办记录
+     */
+    @ApiModelProperty("承办记录")
+    private String undertakeRecord;
+
+    /**
+     * 领导意见
+     */
+    @ApiModelProperty("领导意见")
+    private String leaderSuggestion;
+
+    /**
+     * 指派人员
+     */
+    @ApiModelProperty("指派人员")
+    private String assignPerson;
+
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createAt;
+
+    /**
+    * 更新时间
+    */
+    @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateAt;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty("创建人")
+    private Long createBy;
+
+    /**
+     * 是否指派
+     */
+    @ApiModelProperty("是否指派(1.是 0.否)")
+    private Integer isAssign;
+
+
+
+    /**
+     * 巡查类型
+     */
+    public interface patrolType{
+        int huo = 1;
+        int xun = 2;
+        int yi = 3;
+    }
+
+    /**
+     * 是否
+     */
+    public interface isOk{
+        int yes = 1;
+        int no = 0;
+    }
+}
\ No newline at end of file
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordStatisticsVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordStatisticsVO.java
new file mode 100644
index 0000000..625099b
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordStatisticsVO.java
@@ -0,0 +1,35 @@
+package com.panzhihua.common.model.vos.community;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 巡查记录统计返回参数
+ */
+@Data
+@ApiModel("巡查记录统计返回参数")
+public class ComSwPatrolRecordStatisticsVO {
+
+    /**
+     * 巡查记录总数
+     */
+    @ApiModelProperty("巡查记录总数")
+    private Long patrolRecordTotal;
+    /**
+     * 防火巡查
+     */
+    @ApiModelProperty("防火巡查")
+    private Integer localTotal;
+    /**
+     * 防汛巡查
+     */
+    @ApiModelProperty("防汛巡查")
+    private Integer outTotal;
+    /**
+     * 防疫巡查
+     */
+    @ApiModelProperty("防疫巡查")
+    private Integer specialTotal;
+
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordVO.java
index 7ab44f8..03c27cd 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordVO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordVO.java
@@ -49,7 +49,7 @@
      */
     @ApiModelProperty("巡查时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private Date PatrolTime;
+    private Date patrolTime;
 
     /**
      * 天气
@@ -210,6 +210,12 @@
     private Long createBy;
 
     /**
+     * 安全记录/隐患报告显示按钮
+     */
+    @ApiModelProperty("安全记录/隐患报告显示按钮(1.查看安全工作记录 2.隐患报告待填写 3.查看隐患报告)")
+    private Integer displayButton;
+
+    /**
      * 巡查类型
      */
     public interface patrolType{
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwSafetyWorkRecordVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwSafetyWorkRecordVO.java
new file mode 100644
index 0000000..2ee565f
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwSafetyWorkRecordVO.java
@@ -0,0 +1,135 @@
+package com.panzhihua.common.model.vos.community;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @auther txb
+ * @create 2021-07-23 14:38:38
+ * @describe 社区》安全工作》巡查记录实体类
+ */
+
+@Data
+@ApiModel("安全工作记录表")
+public class ComSwSafetyWorkRecordVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 安全工作记录id
+     */
+    @ApiModelProperty("巡查记录id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 社区id
+     */
+    @ApiModelProperty("社区id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long communityId;
+
+    /**
+     * 巡查时间
+     */
+    @ApiModelProperty("巡查时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date PatrolTime;
+
+    /**
+     * 天气
+     */
+    @ApiModelProperty("天气")
+    private String weather;
+
+    /**
+     * 温度
+     */
+    @ApiModelProperty("温度")
+    private String temperature;
+
+    /**
+     * 风
+     */
+    @ApiModelProperty("风")
+    private String wind;
+
+    /**
+    * (取字典表国家标准编码)巡查类型(1.防火巡查2.防汛巡查3.防疫巡查)
+    */
+    @ApiModelProperty("巡查类型(1.防火巡查2.防汛巡查3.防疫巡查),多条以逗号隔开")
+    private String patrolType;
+
+    /**
+    * 巡查人员
+    */
+    @ApiModelProperty("巡查人员")
+    private String patrolPerson;
+
+    /**
+     * 巡查地址
+     */
+    @ApiModelProperty("巡查地址")
+    private String address;
+
+    /**
+    * 巡查记录
+    */
+    @ApiModelProperty("巡查记录")
+    private String recordContent;
+
+    /**
+    * 发现记录
+    */
+    @ApiModelProperty("发现记录")
+    private String findRecord;
+
+    /**
+    * 记录照片
+    */
+    @ApiModelProperty("记录照片")
+    private String recordPhoto;
+
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createAt;
+
+    /**
+    * 更新时间
+    */
+    @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateAt;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty("创建人")
+    private Long createBy;
+
+    /**
+     * 巡查类型
+     */
+    public interface patrolType{
+        int huo = 1;
+        int xun = 2;
+        int yi = 3;
+    }
+}
\ No newline at end of file
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
index 23be7d9..528017c 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -3751,6 +3751,102 @@
     R addPatrolRecord(@RequestBody ComSwPatrolRecordAddDTO comSwPatrolRecordAddDTO);
 
     /**
+     * 根据巡查记录id查询详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 巡查记录详情查询结果
+     */
+    @PostMapping("/patrolRecord/detail")
+    R detailPatrolRecord(@RequestParam("patrolRecordId") Long patrolRecordId);
+
+    /**
+     * 分页查询安全工作记录
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 安全工作记录分页集合
+     */
+    @PostMapping("/patrolRecord/safetyWorkRecord/page")
+    R pageSafetyWorkRecord(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO);
+
+    /**
+     * 根据安全工作记录id查询详情
+     *
+     * @param safetyWorkRecordId 安全工作记录
+     * @return 安全工作记录详情查询结果
+     */
+    @PostMapping("/patrolRecord/safetyWorkRecord/detail")
+    R detailSafetyWorkRecord(@RequestParam(value = "safetyWorkRecordId") Long safetyWorkRecordId);
+
+    /**
+     * 根据巡查记录id查询安全工作记录详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 安全工作记录详情查询结果
+     */
+    @PostMapping("/patrolRecord/safetyWorkRecord/detailByPrId")
+    R detailSafetyWorkRecordByPrId(@RequestParam(value = "patrolRecordId") Long patrolRecordId);
+
+    /**
+     * 分页查询隐患报告
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 隐患报告分页集合
+     */
+    @PostMapping("/patrolRecord/dangerReport/page")
+    R pageDangerReport(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO);
+
+    /**
+     * 根据隐患报告id查询详情
+     *
+     * @param dangerReportId 隐患报告id
+     * @return 隐患报告详情查询结果
+     */
+    @PostMapping("/patrolRecord/dangerReport/detail")
+    R detailDangerReport(@RequestParam(value = "dangerReportId") Long dangerReportId);
+
+    /**
+     * 根据巡查记录id查询隐患报告详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 隐患报告详情查询结果
+     */
+    @PostMapping("/patrolRecord/dangerReport/detailByPrId")
+    R detailDangerReportByPrId(@RequestParam(value = "patrolRecordId") Long patrolRecordId);
+
+    /**
+     * 处理隐患报告
+     *
+     * @param comSwDangerReportHandleDTO 隐患报告处理参数
+     * @return 处理结果
+     */
+    @PostMapping("/patrolRecord/dangerReport/handle")
+    R handleDangerReport(@RequestBody ComSwDangerReportHandleDTO comSwDangerReportHandleDTO);
+
+    /**
+     * 整改隐患报告
+     *
+     * @param comSwDangerReportRectifyDTO 隐患报告整改参数
+     * @return 整改结果
+     */
+    @PostMapping("/patrolRecord/dangerReport/rectify")
+    R rectifyDangerReport(@RequestBody ComSwDangerReportRectifyDTO comSwDangerReportRectifyDTO);
+
+    /**
+     * 隐患报告台账导出
+     *
+     * @param dangerReportIds
+     * @return
+     */
+    @PostMapping("/patrolRecord/dangerReport/export")
+    R exportDangerReport(@RequestBody List<Long> dangerReportIds);
+
+    /**
+     * 巡查记录统计接口
+     *
+     * @return 统计结果
+     */
+    @PostMapping("/patrolRecord/statistics")
+    R patrolRecordStatistics(@RequestParam(value = "communityId") Long communityId);
+
+    /**
      * 小程序-查询积分说明
      * @return  积分说明
      */
diff --git a/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java b/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java
index 2714cc9..1c8be1d 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/ComSwPatrolRecordApi.java
@@ -1,20 +1,32 @@
 package com.panzhihua.community_backstage.api;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSONArray;
 import com.panzhihua.common.controller.BaseController;
+import com.panzhihua.common.model.dtos.community.ComSwDangerReportHandleDTO;
 import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordAddDTO;
 import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
+import com.panzhihua.common.model.dtos.community.ExportComMngCarExcelDTO;
 import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.community.*;
 import com.panzhihua.common.service.community.CommunityService;
+import com.panzhihua.common.utlis.SFTPUtil;
+import com.panzhihua.community_backstage.excel.CustomSheetWriteHandler;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
 
 /**
  * @auther txb
@@ -30,12 +42,28 @@
     @Resource
     private CommunityService communityService;
 
+    // FTP 登录用户名
+    @Value("${ftp.username}")
+    private String userName;
+    // FTP 登录密码
+    @Value("${ftp.password}")
+    private String password;
+    // FTP 服务器地址IP地址
+    @Value("${ftp.host}")
+    private String host;
+    // FTP 端口
+    @Value("${ftp.port}")
+    private int port;
+    @Value("${excel.userurl}")
+    private String excelUrl;
+
+
     /**
      * 分页查询巡查记录
      * @param comSwPatrolRecordPageDTO 查询参数
      * @return 分页集合
      */
-    @ApiOperation(value = "分页查询巡查记录")
+    @ApiOperation(value = "分页查询巡查记录", response = ComSwPatrolRecordVO.class)
     @PostMapping("/pagePatrolRecord")
     public R pagePatrolRecord(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
         Long communityId = this.getCommunityId();
@@ -56,5 +84,175 @@
         return communityService.addPatrolRecord(comSwPatrolRecordAddDTO);
     }
 
+    /**
+     * 根据巡查记录id查询详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 巡查记录详情查询结果
+     */
+    @ApiOperation(value = "根据巡查记录id查询详情")
+    @PostMapping("/detailPatrolRecord")
+    public R detailPatrolRecord(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
+        return communityService.detailPatrolRecord(patrolRecordId);
+    }
+
+    /**
+     * 分页查询安全工作记录
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 安全工作记录分页集合
+     */
+    @ApiOperation(value = "分页查询安全工作记录")
+    @PostMapping("/pageSafetyWorkRecord")
+    public R pageSafetyWorkRecord(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
+        Long communityId = this.getCommunityId();
+        comSwPatrolRecordPageDTO.setCommunityId(communityId);
+        return communityService.pageSafetyWorkRecord(comSwPatrolRecordPageDTO);
+    }
+
+    /**
+     * 根据安全工作记录id查询详情
+     *
+     * @param safetyWorkRecordId 安全工作记录
+     * @return 安全工作记录详情查询结果
+     */
+    @ApiOperation(value = "根据安全工作记录id查询详情")
+    @PostMapping("/detailSafetyWorkRecord")
+    public R detailSafetyWorkRecord(@RequestParam(value = "safetyWorkRecordId") Long safetyWorkRecordId) {
+        return communityService.detailSafetyWorkRecord(safetyWorkRecordId);
+    }
+
+    /**
+     * 根据巡查记录id查询安全工作记录详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 安全工作记录详情查询结果
+     */
+    @ApiOperation(value = "根据巡查记录id查询安全工作记录详情")
+    @PostMapping("/detailSafetyWorkRecordByPrId")
+    public R detailSafetyWorkRecordByPrId(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
+        return communityService.detailSafetyWorkRecordByPrId(patrolRecordId);
+    }
+
+    /**
+     * 分页查询隐患报告
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 隐患报告分页集合
+     */
+    @ApiOperation(value = "分页查询隐患报告")
+    @PostMapping("/pageDangerReport")
+    public R pageDangerReport(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
+        Long communityId = this.getCommunityId();
+        comSwPatrolRecordPageDTO.setCommunityId(communityId);
+        return communityService.pageDangerReport(comSwPatrolRecordPageDTO);
+    }
+
+    /**
+     * 根据隐患报告id查询详情
+     *
+     * @param dangerReportId 隐患报告id
+     * @return 隐患报告详情查询结果
+     */
+    @ApiOperation(value = "根据隐患报告id查询详情")
+    @PostMapping("/detailDangerReport")
+    public R detailDangerReport(@RequestParam(value = "dangerReportId") Long dangerReportId) {
+        return communityService.detailDangerReport(dangerReportId);
+    }
+
+    /**
+     * 根据巡查记录id查询隐患报告详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 隐患报告详情查询结果
+     */
+    @ApiOperation(value = "根据隐患报告id查询详情")
+    @PostMapping("/detailDangerReportByPrId")
+    public R detailDangerReportByPrId(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
+        return communityService.detailDangerReportByPrId(patrolRecordId);
+    }
+
+    /**
+     * 处理隐患报告
+     *
+     * @param comSwDangerReportHandleDTO 隐患报告处理参数
+     * @return 处理结果
+     */
+    @ApiOperation(value = "处理隐患报告")
+    @PostMapping("/handleDangerReport")
+    public R handleDangerReport(@RequestBody ComSwDangerReportHandleDTO comSwDangerReportHandleDTO){
+        return communityService.handleDangerReport(comSwDangerReportHandleDTO);
+    }
+
+    /**
+     * 导出台账-隐患报告
+     *
+     * @param dangerReportIds 隐患报告ids
+     * @return 隐患报告导出结果
+     */
+    @ApiOperation(value = "导出台账-隐患报告")
+    @PostMapping("/danger/export")
+    public R exportComMngCar(@RequestBody List<Long> dangerReportIds) {
+        String url = excelUrl;
+        String name = "隐患报告台账导出数据.xlsx";
+        String ftpUrl = "/mnt/data/web/excel/";
+        //导出勾选了的隐患报告,不勾选则导出本页数据
+        R r = communityService.exportDangerReport(dangerReportIds);
+        if (R.isOk(r)) {
+            List<ComSwDangerReportExcelVO> comSwDangerReportExcelVOS = JSONArray.parseArray(JSONArray.toJSONString(r.getData()), ComSwDangerReportExcelVO.class);
+            try {
+                SFTPUtil sftp = new SFTPUtil(userName, password, host, port);
+                sftp.login();
+                boolean existDir = sftp.isExistDir(ftpUrl + name);
+                if (!existDir) {
+                    String property = System.getProperty("user.dir");
+                    String fileName = property + File.separator + name;
+                    // 这里 需要指定写用哪个class去写
+                    ExcelWriter excelWriter = null;
+                    InputStream inputStream = null;
+                    try {
+                        excelWriter = EasyExcel.write(fileName, ComSwDangerReportExcelVO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).registerWriteHandler(new CustomSheetWriteHandler()).build();
+                        WriteSheet writeSheet = EasyExcel.writerSheet("隐患报告台账导出数据").build();
+                        excelWriter.write(comSwDangerReportExcelVOS, writeSheet);
+                        excelWriter.finish();
+                        File file = new File(fileName);
+                        inputStream = new FileInputStream(file);
+                        sftp.uploadMore(ftpUrl, name, inputStream);
+                        sftp.logout();
+                        inputStream.close();
+                        String absolutePath = file.getAbsolutePath();
+                        boolean delete = file.delete();
+                        log.info("删除excel【{}】结果【{}】", absolutePath, delete);
+                    } finally {
+                        // 千万别忘记finish 会帮忙关闭流
+                        if (inputStream != null) {
+                            inputStream.close();
+                        }
+                        if (excelWriter != null) {
+                            excelWriter.finish();
+                        }
+                    }
+                }
+                return R.ok(url + name);
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.error("文件传输失败【{}】", e.getMessage());
+                return R.fail();
+            }
+        }
+        return R.fail("未查询到隐患报告");
+    }
+
+    /**
+     * 巡查记录统计接口
+     *
+     * @return 统计结果
+     */
+    @ApiOperation(value = "巡查记录统计接口", response = ComSwPatrolRecordStatisticsVO.class)
+    @PostMapping("/patrolRecordStatistics")
+    public R patrolRecordStatistics() {
+        //获取登陆用户绑定社区id
+        Long communityId = this.getLoginUserInfo().getCommunityId();
+        return communityService.patrolRecordStatistics(communityId);
+    }
+
 }
 
diff --git a/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommonDataApi.java b/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommonDataApi.java
index 6b0ed37..3be69af 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommonDataApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/CommonDataApi.java
@@ -9,9 +9,7 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.jcraft.jsch.SftpException;
-import com.panzhihua.common.constants.Constants;
 import com.panzhihua.common.controller.BaseController;
-import com.panzhihua.common.enums.PopulIsOkEnum;
 import com.panzhihua.common.enums.PopulPoliticalOutlookEnum;
 import com.panzhihua.common.enums.PopulSexEnum;
 import com.panzhihua.common.listen.*;
@@ -21,17 +19,13 @@
 import com.panzhihua.common.model.vos.R;
 import com.panzhihua.common.model.vos.community.*;
 import com.panzhihua.common.model.vos.user.ComMngTagVO;
-import com.panzhihua.common.model.vos.user.ComMngUserTagVO;
 import com.panzhihua.common.model.vos.user.InputUserInfoVO;
-import com.panzhihua.common.model.vos.user.UserElectronicFileVO;
 import com.panzhihua.common.service.community.CommunityService;
 import com.panzhihua.common.service.user.UserService;
-import com.panzhihua.common.utlis.FileUtil;
 import com.panzhihua.common.utlis.SFTPUtil;
 import com.panzhihua.common.validated.AddGroup;
 import com.panzhihua.community_backstage.easyexcel.UploadEexcelUserDTOListener;
 import com.panzhihua.community_backstage.excel.CustomSheetWriteHandler;
-import com.panzhihua.community_backstage.model.dto.ExcelExportDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
diff --git a/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/PopulationApi.java b/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/PopulationApi.java
index 07aae74..48281e0 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/PopulationApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/PopulationApi.java
@@ -90,7 +90,7 @@
         InputStream inputStream = null;
         try {
             inputStream = file.getInputStream();
-            ComMngPopulationServeExcelListen comMngPopulationServeExcelListen = new ComMngPopulationServeExcelListen(communityService, this.getCommunityId());
+            ComMngPopulationServeExcelListen comMngPopulationServeExcelListen = new ComMngPopulationServeExcelListen(communityService, this.getCommunityId(),userName,password,host,port,excelUrl);
             EasyExcel.read(inputStream, null, comMngPopulationServeExcelListen).sheet().doRead();
         } catch (IOException e) {
             log.error("导入模板失败【{}】", e.getMessage());
@@ -134,7 +134,7 @@
         try {
             Long communityId = Long.valueOf(request.getParameter("communityId"));
             inputStream = file.getInputStream();
-            ComMngPopulationServeExcelListen comMngPopulationServeExcelListen = new ComMngPopulationServeExcelListen(communityService, communityId);
+            ComMngPopulationServeExcelListen comMngPopulationServeExcelListen = new ComMngPopulationServeExcelListen(communityService, communityId,userName,password,host,port,excelUrl);
             EasyExcel.read(inputStream, null, comMngPopulationServeExcelListen).sheet().doRead();
         } catch (IOException e) {
             log.error("导入模板失败【{}】", e.getMessage());
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java
index 3f3d5cb..5b366ee 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComSwPatrolRecordApi.java
@@ -1,17 +1,20 @@
 package com.panzhihua.service_community.api;
 
+import com.panzhihua.common.model.dtos.community.ComSwDangerReportHandleDTO;
+import com.panzhihua.common.model.dtos.community.ComSwDangerReportRectifyDTO;
 import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordAddDTO;
 import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
 import com.panzhihua.common.model.vos.R;
+import com.panzhihua.service_community.dao.ComSwSafetyWorkRecordDAO;
+import com.panzhihua.service_community.service.ComSwDangerReportService;
 import com.panzhihua.service_community.service.ComSwPatrolRecordService;
+import com.panzhihua.service_community.service.ComSwSafetyWorkRecordService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * @auther txb
@@ -26,10 +29,16 @@
     @Resource
     private ComSwPatrolRecordService comSwPatrolRecordService;
 
+    @Resource
+    private ComSwSafetyWorkRecordService comSwSafetyWorkRecordService;
+
+    @Resource
+    private ComSwDangerReportService comSwDangerReportService;
+
     /**
      * 分页查询巡查记录
      * @param comSwPatrolRecordPageDTO 查询参数
-     * @return 分页集合
+     * @return 巡查记录分页集合
      */
     @PostMapping("/page")
     public R pagePatrolRecord(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
@@ -47,5 +56,113 @@
         return comSwPatrolRecordService.addPatrolRecord(comSwPatrolRecordAddDTO);
     }
 
+    /**
+     * 根据巡查记录id查询详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 巡查记录详情查询结果
+     */
+    @PostMapping("/detail")
+    public R detailPatrolRecord(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
+        return comSwPatrolRecordService.detailPatrolRecord(patrolRecordId);
+    }
+
+    /**
+     * 分页查询安全工作记录
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 安全工作记录分页集合
+     */
+    @PostMapping("/safetyWorkRecord/page")
+    public R pageSafetyWorkRecord(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
+        return comSwSafetyWorkRecordService.pageSafetyWorkRecord(comSwPatrolRecordPageDTO);
+    }
+
+    /**
+     * 根据安全工作记录id查询详情
+     *
+     * @param safetyWorkRecordId 安全工作记录
+     * @return 安全工作记录详情查询结果
+     */
+    @PostMapping("/safetyWorkRecord/detail")
+    public R detailSafetyWorkRecord(@RequestParam(value = "safetyWorkRecordId") Long safetyWorkRecordId) {
+        return comSwSafetyWorkRecordService.detailSafetyWorkRecord(safetyWorkRecordId);
+    }
+
+    /**
+     * 根据巡查记录id查询安全工作记录详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 安全工作记录详情查询结果
+     */
+    @PostMapping("/safetyWorkRecord/detailByPrId")
+    public R detailSafetyWorkRecordByPrId(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
+        return comSwSafetyWorkRecordService.detailSafetyWorkRecordByPrId(patrolRecordId);
+    }
+
+    /**
+     * 分页查询隐患报告
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 隐患报告分页集合
+     */
+    @PostMapping("/dangerReport/page")
+    public R pageDangerReport(@RequestBody ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO){
+        return comSwDangerReportService.pageDangerReport(comSwPatrolRecordPageDTO);
+    }
+
+    /**
+     * 根据隐患报告id查询详情
+     *
+     * @param dangerReportId 隐患报告id
+     * @return 隐患报告详情查询结果
+     */
+    @PostMapping("/dangerReport/detail")
+    public R detailDangerReport(@RequestParam(value = "dangerReportId") Long dangerReportId) {
+        return comSwDangerReportService.detailDangerReport(dangerReportId);
+    }
+
+    /**
+     * 根据巡查记录id查询隐患报告详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 隐患报告详情查询结果
+     */
+    @PostMapping("/dangerReport/detailByPrId")
+    public R detailDangerReportByPrId(@RequestParam(value = "patrolRecordId") Long patrolRecordId) {
+        return comSwDangerReportService.detailDangerReportByPrId(patrolRecordId);
+    }
+
+    /**
+     * 处理隐患报告
+     *
+     * @param comSwDangerReportHandleDTO 隐患报告处理参数
+     * @return 处理结果
+     */
+    @PostMapping("/dangerReport/handle")
+    public R handleDangerReport(@RequestBody ComSwDangerReportHandleDTO comSwDangerReportHandleDTO){
+        return comSwDangerReportService.handleDangerReport(comSwDangerReportHandleDTO);
+    }
+
+    /**
+     * 整改隐患报告
+     *
+     * @param comSwDangerReportRectifyDTO 隐患报告整改参数
+     * @return 整改结果
+     */
+    @PostMapping("/dangerReport/rectify")
+    public R rectifyDangerReport(@RequestBody ComSwDangerReportRectifyDTO comSwDangerReportRectifyDTO){
+        return comSwDangerReportService.rectifyDangerReport(comSwDangerReportRectifyDTO);
+    }
+
+    /**
+     * 隐患报告台账导出
+     *
+     * @param dangerReportIds
+     * @return
+     */
+    @PostMapping("/dangerReport/export")
+    public R exportDangerReport(@RequestBody List<Long> dangerReportIds){
+        return comSwDangerReportService.exportDangerReport(dangerReportIds);
+    }
+
 }
 
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwDangerReportDAO.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwDangerReportDAO.java
index 714dca3..445f6dd 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwDangerReportDAO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwDangerReportDAO.java
@@ -1,8 +1,18 @@
 package com.panzhihua.service_community.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
+import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.community.ComSwDangerReportExcelVO;
+import com.panzhihua.common.model.vos.community.ComSwDangerReportVO;
+import com.panzhihua.common.model.vos.community.ComSwSafetyWorkRecordVO;
 import com.panzhihua.service_community.model.dos.ComSwDangerReportDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @auther txb
@@ -12,4 +22,26 @@
 @Mapper
 public interface ComSwDangerReportDAO extends BaseMapper<ComSwDangerReportDO> {
 
+    /**
+     * 分页查询隐患报告
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 隐患报告分页集合
+     */
+    IPage<ComSwDangerReportVO> pageDangerReport(Page page, @Param("comSwPatrolRecordDTO") ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO);
+
+    /**
+     * 根据隐患报告id查询详情
+     *
+     * @param dangerReportId 隐患报告id
+     * @return 隐患报告详情查询结果
+     */
+    ComSwDangerReportVO detailDangerReport(@Param("dangerReportId") Long dangerReportId);
+
+    /**
+     * 根据隐患报告id批量查询详情
+     *
+     * @param dangerReportIds 隐患报告ids
+     * @return
+     */
+    List<ComSwDangerReportExcelVO> exportDangerReport(@Param("dangerReportIds") List<Long> dangerReportIds);
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwSafetyWorkRecordDAO.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwSafetyWorkRecordDAO.java
index 2a07c2a..4da9108 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwSafetyWorkRecordDAO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComSwSafetyWorkRecordDAO.java
@@ -1,8 +1,14 @@
 package com.panzhihua.service_community.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
+import com.panzhihua.common.model.vos.community.ComSwPatrolRecordVO;
+import com.panzhihua.common.model.vos.community.ComSwSafetyWorkRecordVO;
 import com.panzhihua.service_community.model.dos.ComSwSafetyWorkRecordDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @auther txb
@@ -12,4 +18,11 @@
 @Mapper
 public interface ComSwSafetyWorkRecordDAO extends BaseMapper<ComSwSafetyWorkRecordDO> {
 
+    /**
+     * 分页查询安全工作记录
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 安全工作记录分页集合
+     */
+    IPage<ComSwSafetyWorkRecordVO> pageSafetyWorkRecord(Page page, @Param("comSwPatrolRecordDTO") ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO);
+
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComSwDangerReportDO.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComSwDangerReportDO.java
index b5bba68..40bd988 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComSwDangerReportDO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComSwDangerReportDO.java
@@ -41,7 +41,7 @@
     private String dangerType;
 
     /**
-    * 状态(1.待查看 2.待处理 3.待整改 4.已整改)
+    * 状态(1.待处理 2.待整改 3.已整改)
     */
     private String status;
 
@@ -106,6 +106,16 @@
     private String undertakeRecord;
 
     /**
+     * 领导意见
+     */
+    private String leaderSuggestion;
+
+    /**
+     * 指派人员
+     */
+    private String assignPerson;
+
+    /**
     * 备注
     */
     private String remark;
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwDangerReportService.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwDangerReportService.java
index 66a5362..c9bd748 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwDangerReportService.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwDangerReportService.java
@@ -1,7 +1,16 @@
 package com.panzhihua.service_community.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.panzhihua.common.model.dtos.community.ComSwDangerReportHandleDTO;
+import com.panzhihua.common.model.dtos.community.ComSwDangerReportRectifyDTO;
+import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
+import com.panzhihua.common.model.vos.R;
 import com.panzhihua.service_community.model.dos.ComSwDangerReportDO;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
 
 /**
  * @auther txb
@@ -10,4 +19,50 @@
  */
 public interface ComSwDangerReportService extends IService<ComSwDangerReportDO> {
 
+    /**
+     * 分页查询隐患报告
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 隐患报告分页集合
+     */
+    R pageDangerReport(ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO);
+
+    /**
+     * 根据隐患报告id查询详情
+     *
+     * @param dangerReportId 隐患报告id
+     * @return 隐患报告详情查询结果
+     */
+    R detailDangerReport(Long dangerReportId);
+
+    /**
+     * 根据巡查记录id查询隐患报告详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 隐患报告详情查询结果
+     */
+    R detailDangerReportByPrId(Long patrolRecordId);
+
+    /**
+     * 处理隐患报告
+     *
+     * @param comSwDangerReportHandleDTO 隐患报告处理参数
+     * @return 处理结果
+     */
+    R handleDangerReport(ComSwDangerReportHandleDTO comSwDangerReportHandleDTO);
+
+    /**
+     * 整改隐患报告
+     *
+     * @param comSwDangerReportRectifyDTO 隐患报告整改参数
+     * @return 整改结果
+     */
+    R rectifyDangerReport(ComSwDangerReportRectifyDTO comSwDangerReportRectifyDTO);
+
+    /**
+     * 隐患报告台账导出
+     *
+     * @param dangerReportIds
+     * @return
+     */
+    R exportDangerReport(List<Long> dangerReportIds);
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwPatrolRecordService.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwPatrolRecordService.java
index 69a77a4..e17d2d0 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwPatrolRecordService.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwPatrolRecordService.java
@@ -7,6 +7,7 @@
 import com.panzhihua.service_community.model.dos.ComSwPatrolRecordDO;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * @auther txb
@@ -17,6 +18,7 @@
 
     /**
      * 分页查询巡查记录
+     *
      * @param comSwPatrolRecordPageDTO 查询参数
      * @return 分页集合
      */
@@ -24,8 +26,17 @@
 
     /**
      * 新增巡查记录
+     *
      * @param comSwPatrolRecordAddDTO 新增参数
      * @return 新增结果
      */
     R addPatrolRecord(ComSwPatrolRecordAddDTO comSwPatrolRecordAddDTO);
+
+    /**
+     * 根据巡查记录id查询详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 巡查记录详情查询结果
+     */
+    R detailPatrolRecord(Long patrolRecordId);
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwSafetyWorkRecordService.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwSafetyWorkRecordService.java
index d43fc43..4ee7be1 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwSafetyWorkRecordService.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComSwSafetyWorkRecordService.java
@@ -1,7 +1,12 @@
 package com.panzhihua.service_community.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
+import com.panzhihua.common.model.vos.R;
 import com.panzhihua.service_community.model.dos.ComSwSafetyWorkRecordDO;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * @auther txb
@@ -10,4 +15,26 @@
  */
 public interface ComSwSafetyWorkRecordService extends IService<ComSwSafetyWorkRecordDO> {
 
+    /**
+     * 分页查询安全工作记录
+     * @param comSwPatrolRecordPageDTO 查询参数
+     * @return 安全工作记录分页集合
+     */
+    R pageSafetyWorkRecord(ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO);
+
+    /**
+     * 根据安全工作记录id查询详情
+     *
+     * @param safetyWorkRecordId 安全工作记录
+     * @return 安全工作记录详情查询结果
+     */
+    R detailSafetyWorkRecord(Long safetyWorkRecordId);
+
+    /**
+     * 根据巡查记录id查询安全工作记录详情
+     *
+     * @param patrolRecordId 巡查记录id
+     * @return 安全工作记录详情查询结果
+     */
+    R detailSafetyWorkRecordByPrId(Long patrolRecordId);
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComMngPopulationServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComMngPopulationServiceImpl.java
index a5aa7e2..a2ea07c 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComMngPopulationServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComMngPopulationServiceImpl.java
@@ -363,6 +363,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R listSavePopulation(List<ComMngPopulationServeExcelVO> list, Long communityId) throws Exception {
+        List<ComMngPopulationMistakeExcelVO> mistakes = new ArrayList<>();
         List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
         //查询该社区
         ComActDO comActDO = comActDAO.selectById(communityId);
@@ -400,6 +401,11 @@
                 importErrorVO.setErrorPosition("街路巷:" + vo.getRoad() + ",小区号:" + vo.getDoorNo());
                 populationImportErrorVOList.add(importErrorVO);
 //                index++;
+                ComMngPopulationMistakeExcelVO mistake = new ComMngPopulationMistakeExcelVO();
+                BeanUtils.copyProperties(vo,mistake);
+                setMistake(mistake, vo);
+                mistake.setMistake("街路巷或小区号不存在,请先在“小区管理”中添加该小区:街路巷:"+ vo.getRoad() +",小区号:" + vo.getDoorNo());
+                mistakes.add(mistake);
                 continue;
             }
 
@@ -467,7 +473,7 @@
         this.saveBatch(populationDOList);*/
 
         if (!populationImportErrorVOList.isEmpty()) {
-            return R.fail(JSON.toJSONString(populationImportErrorVOList));
+            return R.fail(mistakes,JSON.toJSONString(populationImportErrorVOList));
         }
         return R.ok();
     }
@@ -1908,4 +1914,19 @@
         return R.ok(this.baseMapper.getVillagePopulationAdmin(new Page(villagePopulationDTO.getPageNum(),villagePopulationDTO.getPageSize()),villagePopulationDTO));
     }
 
+    private void setMistake(ComMngPopulationMistakeExcelVO mvo, ComMngPopulationServeExcelVO vo){
+        mvo.setPoliticalOutlook(PopulPoliticalOutlookEnum.getCnDescByName(vo.getPoliticalOutlook()));
+        mvo.setIsRent(PopulHouseUseEnum.getCnDescByName(vo.getIsRent()));
+        mvo.setRelation(PopulRelationEnum.getCnDescByName(vo.getRelation()));
+        mvo.setHouseStatus(PopulHouseStatusEnum.getCnDescByName(vo.getHouseStatus()));
+        mvo.setHousePurpose(PopulHousePurposeEnum.getCnDescByName(vo.getHousePurpose()));
+        mvo.setControlStatus(PopulHouseControlStatusEnum.getCnDescByName(vo.getControlStatus()));
+        mvo.setCultureLevel(PopulCultureLevelEnum.getCnDescByName(vo.getCultureLevel()));
+        mvo.setMarriage(PopulMarriageEnum.getCnDescByName(vo.getMarriage()));
+        mvo.setOutOrLocal(PopulOutOrLocalEnum.getCnDescByName(vo.getOutOrLocal()));
+        mvo.setResidence(PopulRelationEnum.getCnDescByName(vo.getResidence()));
+        mvo.setPersonType(PopulPersonTypeEnum.getCnDescByName(vo.getPersonType()));
+        mvo.setDeath(PopulOutOrLocalEnum.getCnDescByName(vo.getDeath()));
+    }
+
 }
\ No newline at end of file
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java
index c3d443b..a659935 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwDangerReportServiceImpl.java
@@ -1,11 +1,37 @@
 package com.panzhihua.service_community.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.panzhihua.common.enums.SafeWordStatusEnum;
+import com.panzhihua.common.model.dtos.community.ComSwDangerReportHandleDTO;
+import com.panzhihua.common.model.dtos.community.ComSwDangerReportRectifyDTO;
+import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
+import com.panzhihua.common.model.vos.LoginUserInfoVO;
+import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.community.ComMngCarExcelVO;
+import com.panzhihua.common.model.vos.community.ComSwDangerReportExcelVO;
+import com.panzhihua.common.model.vos.community.ComSwDangerReportVO;
+import com.panzhihua.common.model.vos.community.ComSwSafetyWorkRecordVO;
+import com.panzhihua.common.service.user.UserService;
+import com.panzhihua.common.utlis.StringUtils;
 import com.panzhihua.service_community.dao.ComSwDangerReportDAO;
+import com.panzhihua.service_community.dao.ComSwPatrolRecordDAO;
+import com.panzhihua.service_community.dao.ComSwPatrolRecordReportDAO;
 import com.panzhihua.service_community.model.dos.ComSwDangerReportDO;
+import com.panzhihua.service_community.model.dos.ComSwPatrolRecordDO;
+import com.panzhihua.service_community.model.dos.ComSwPatrolRecordReportDO;
+import com.panzhihua.service_community.model.dos.ComSwSafetyWorkRecordDO;
 import com.panzhihua.service_community.service.ComSwDangerReportService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * @auther txb
@@ -16,4 +42,134 @@
 @Service
 public class ComSwDangerReportServiceImpl extends ServiceImpl<ComSwDangerReportDAO, ComSwDangerReportDO> implements ComSwDangerReportService {
 
+    @Resource
+    private ComSwDangerReportDAO comSwDangerReportDAO;
+
+    @Resource
+    private ComSwPatrolRecordDAO comSwPatrolRecordDAO;
+
+    @Resource
+    private ComSwPatrolRecordReportDAO comSwPatrolRecordReportDAO;
+
+    @Resource
+    private UserService userService;
+
+    @Override
+    public R pageDangerReport(ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO) {
+        Page page = new Page<>();
+        Long pageNum = comSwPatrolRecordPageDTO.getPageNum();
+        Long pageSize = comSwPatrolRecordPageDTO.getPageSize();
+        if (null == pageNum || 0 == pageNum) {
+            pageNum = 1L;
+        }
+        if (null == pageSize || 0 == pageSize) {
+            pageSize = 10L;
+        }
+        page.setSize(pageSize);
+        page.setCurrent(pageNum);
+
+        IPage<ComSwDangerReportVO> iPage = comSwDangerReportDAO.pageDangerReport(page, comSwPatrolRecordPageDTO);
+        if (!iPage.getRecords().isEmpty()) {
+            iPage.getRecords().forEach(comSwDangerReportVO -> {
+                if (StringUtils.isNotEmpty(comSwDangerReportVO.getAssignPerson())) {
+                    comSwDangerReportVO.setIsAssign(ComSwDangerReportVO.isOk.no);
+                }else {
+                    comSwDangerReportVO.setIsAssign(ComSwDangerReportVO.isOk.yes);
+                }
+                List<String> patrolUserIds = Arrays.asList(comSwDangerReportVO.getPatrolPerson().split(","));
+                List<String> patrolPhones = new ArrayList<>();
+                for (String userId : patrolUserIds) {
+                    LoginUserInfoVO loginUserInfoVO = userService.getUserInfoByUserId(userId).getData();
+                    patrolPhones.add(loginUserInfoVO.getPhone());
+                }
+                comSwDangerReportVO.setPatrolPersonPhone(StringUtils.join(patrolPhones,","));
+
+                List<String> rectifyUserIds = Arrays.asList(comSwDangerReportVO.getRectifyPerson().split(","));
+                List<String> rectifyPhones = new ArrayList<>();
+                for (String userId : rectifyUserIds) {
+                    LoginUserInfoVO loginUserInfoVO = userService.getUserInfoByUserId(userId).getData();
+                    rectifyPhones.add(loginUserInfoVO.getPhone());
+                }
+                comSwDangerReportVO.setRectifyPersonPhone(StringUtils.join(rectifyPhones,","));
+            });
+        }
+        return R.ok(iPage);
+    }
+
+    @Override
+    public R detailDangerReport(Long dangerReportId) {
+        ComSwDangerReportDO comSwDangerReportDO = comSwDangerReportDAO.selectById(dangerReportId);
+        if (null == comSwDangerReportDO) {
+            return R.fail("该隐患报告不存在");
+        }
+        ComSwDangerReportVO comSwDangerReportVO = new ComSwDangerReportVO();
+        ComSwPatrolRecordReportDO comSwPatrolRecordReportDO = comSwPatrolRecordReportDAO.selectOne(new QueryWrapper<ComSwPatrolRecordReportDO>().lambda().eq(ComSwPatrolRecordReportDO::getReportId, dangerReportId));
+        if (null != comSwPatrolRecordReportDO) {
+            ComSwPatrolRecordDO comSwPatrolRecordDO = comSwPatrolRecordDAO.selectById(comSwPatrolRecordReportDO.getPatrolRecordId());
+            BeanUtils.copyProperties(comSwPatrolRecordDO, comSwDangerReportVO);
+        }
+        BeanUtils.copyProperties(comSwDangerReportDO, comSwDangerReportVO);
+        return R.ok(comSwDangerReportVO);
+    }
+
+    @Override
+    public R detailDangerReportByPrId(Long patrolRecordId) {
+        ComSwPatrolRecordDO comSwPatrolRecordDO = comSwPatrolRecordDAO.selectById(patrolRecordId);
+        ComSwDangerReportVO comSwDangerReportVO = new ComSwDangerReportVO();
+        ComSwPatrolRecordReportDO comSwPatrolRecordReportDO = comSwPatrolRecordReportDAO.selectOne(new QueryWrapper<ComSwPatrolRecordReportDO>().lambda().eq(ComSwPatrolRecordReportDO::getPatrolRecordId, patrolRecordId));
+        if (null != comSwPatrolRecordReportDO) {
+            ComSwDangerReportDO comSwDangerReportDO = comSwDangerReportDAO.selectById(comSwPatrolRecordReportDO.getReportId());
+            if (null == comSwDangerReportDO) {
+                return R.fail("该隐患报告不存在");
+            }
+            BeanUtils.copyProperties(comSwDangerReportDO, comSwDangerReportVO);
+        }
+        BeanUtils.copyProperties(comSwPatrolRecordDO, comSwDangerReportVO);
+        return R.ok(comSwDangerReportVO);
+    }
+
+    @Override
+    public R handleDangerReport(ComSwDangerReportHandleDTO comSwDangerReportHandleDTO) {
+        ComSwDangerReportDO comSwDangerReportDO = comSwDangerReportDAO.selectById(comSwDangerReportHandleDTO.getDangerReportId());
+        if (null == comSwDangerReportDO) {
+            return R.fail("该隐患报告不存在");
+        }
+        BeanUtils.copyProperties(comSwDangerReportHandleDTO, comSwDangerReportDO);
+        comSwDangerReportDO.setStatus(String.valueOf(SafeWordStatusEnum.YCL.getCode()));
+        int update = comSwDangerReportDAO.updateById(comSwDangerReportDO);
+        if (update > 0) {
+            return R.ok();
+        }
+        return R.fail("处理失败");
+    }
+
+    @Override
+    public R rectifyDangerReport(ComSwDangerReportRectifyDTO comSwDangerReportRectifyDTO) {
+        ComSwDangerReportDO comSwDangerReportDO = comSwDangerReportDAO.selectById(comSwDangerReportRectifyDTO.getDangerReportId());
+        if (null == comSwDangerReportDO) {
+            return R.fail("该隐患报告不存在");
+        }
+        BeanUtils.copyProperties(comSwDangerReportRectifyDTO, comSwDangerReportDO);
+        comSwDangerReportDO.setStatus(String.valueOf(SafeWordStatusEnum.YZG.getCode()));
+        int update = comSwDangerReportDAO.updateById(comSwDangerReportDO);
+        if (update > 0) {
+            return R.ok();
+        }
+        return R.fail("整改失败");
+    }
+
+    @Override
+    public R exportDangerReport(List<Long> dangerReportIds) {
+        List<ComSwDangerReportExcelVO> list = comSwDangerReportDAO.exportDangerReport(dangerReportIds);
+        list.forEach(comSwDangerReportExcelVO -> {
+            List<String> patrolUserIds = Arrays.asList(comSwDangerReportExcelVO.getPatrolPerson().split(","));
+            List<String> patrolPhones = new ArrayList<>();
+            for (String userId : patrolUserIds) {
+                LoginUserInfoVO loginUserInfoVO = userService.getUserInfoByUserId(userId).getData();
+                patrolPhones.add(loginUserInfoVO.getPhone());
+            }
+            comSwDangerReportExcelVO.setPatrolPersonPhone(StringUtils.join(patrolPhones,","));
+        });
+        return R.ok(list);
+    }
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwPatrolRecordServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwPatrolRecordServiceImpl.java
index 86e844c..47097d4 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwPatrolRecordServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwPatrolRecordServiceImpl.java
@@ -1,5 +1,6 @@
 package com.panzhihua.service_community.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -7,16 +8,15 @@
 import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordAddDTO;
 import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
 import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.community.ComMngRealAssetsVO;
 import com.panzhihua.common.model.vos.community.ComSwPatrolRecordVO;
 import com.panzhihua.common.utlis.Snowflake;
+import com.panzhihua.common.utlis.StringUtils;
 import com.panzhihua.service_community.dao.ComSwDangerReportDAO;
 import com.panzhihua.service_community.dao.ComSwPatrolRecordDAO;
 import com.panzhihua.service_community.dao.ComSwPatrolRecordReportDAO;
 import com.panzhihua.service_community.dao.ComSwSafetyWorkRecordDAO;
-import com.panzhihua.service_community.model.dos.ComSwDangerReportDO;
-import com.panzhihua.service_community.model.dos.ComSwPatrolRecordDO;
-import com.panzhihua.service_community.model.dos.ComSwPatrolRecordReportDO;
-import com.panzhihua.service_community.model.dos.ComSwSafetyWorkRecordDO;
+import com.panzhihua.service_community.model.dos.*;
 import com.panzhihua.service_community.service.ComSwPatrolRecordService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -85,7 +85,7 @@
             comSwDangerReportDO.setId(dangerReportId);
             comSwPatrolRecordReportDO.setReportId(dangerReportId);
             comSwDangerReportDO.setDangerType(comSwPatrolRecordAddDTO.getPatrolType());
-            if (comSwPatrolRecordAddDTO.getIsRectifyImmediately().intValue() == ComSwPatrolRecordAddDTO.isOk.yes) {
+            if (comSwPatrolRecordAddDTO.getIsRectifyImmediately().intValue() == ComSwPatrolRecordAddDTO.isOk.yes && StringUtils.isNotEmpty(comSwPatrolRecordAddDTO.getTakeSteps())) {
                 comSwDangerReportDO.setStatus(String.valueOf(SafeWordStatusEnum.YZG.getCode()));
             }
             comSwDangerReportDO.setRectifyTime(new Date());
@@ -102,4 +102,29 @@
         comSwPatrolRecordReportDAO.insert(comSwPatrolRecordReportDO);
         return R.ok();
     }
+
+    @Override
+    public R detailPatrolRecord(Long patrolRecordId) {
+        ComSwPatrolRecordDO comSwPatrolRecordDO = comSwPatrolRecordDAO.selectById(patrolRecordId);
+        if (null == comSwPatrolRecordDO) {
+            return R.fail("该巡查记录不存在");
+        }
+        ComSwPatrolRecordVO comSwPatrolRecordVO = new ComSwPatrolRecordVO();
+        BeanUtils.copyProperties(comSwPatrolRecordDO, comSwPatrolRecordVO);
+        ComSwPatrolRecordReportDO comSwPatrolRecordReportDO = comSwPatrolRecordReportDAO.selectOne(new QueryWrapper<ComSwPatrolRecordReportDO>().lambda().eq(ComSwPatrolRecordReportDO::getPatrolRecordId, patrolRecordId));
+        if (null != comSwPatrolRecordReportDO) {
+            if (comSwPatrolRecordVO.getIsHiddenDanger().equals(ComSwPatrolRecordVO.isOk.yes)) {
+                if (null != comSwDangerReportDAO.selectById(comSwPatrolRecordReportDO.getReportId())) {
+                    comSwPatrolRecordVO.setDisplayButton(3);
+                }else {
+                    comSwPatrolRecordVO.setDisplayButton(2);
+                }
+            }else{
+                if (null != comSwSafetyWorkRecordDAO.selectById(comSwPatrolRecordReportDO.getReportId())) {
+                    comSwPatrolRecordVO.setDisplayButton(1);
+                }
+            }
+        }
+        return R.ok(comSwPatrolRecordVO);
+    }
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwSafetyWorkRecordServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwSafetyWorkRecordServiceImpl.java
index 2ba916f..e331396 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwSafetyWorkRecordServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwSafetyWorkRecordServiceImpl.java
@@ -1,11 +1,25 @@
 package com.panzhihua.service_community.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.panzhihua.common.model.dtos.community.ComSwPatrolRecordPageDTO;
+import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.community.ComSwPatrolRecordVO;
+import com.panzhihua.common.model.vos.community.ComSwSafetyWorkRecordVO;
+import com.panzhihua.service_community.dao.ComSwPatrolRecordDAO;
+import com.panzhihua.service_community.dao.ComSwPatrolRecordReportDAO;
 import com.panzhihua.service_community.dao.ComSwSafetyWorkRecordDAO;
+import com.panzhihua.service_community.model.dos.ComSwPatrolRecordDO;
+import com.panzhihua.service_community.model.dos.ComSwPatrolRecordReportDO;
 import com.panzhihua.service_community.model.dos.ComSwSafetyWorkRecordDO;
 import com.panzhihua.service_community.service.ComSwSafetyWorkRecordService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
 
 /**
  * @auther txb
@@ -16,4 +30,60 @@
 @Service
 public class ComSwSafetyWorkRecordServiceImpl extends ServiceImpl<ComSwSafetyWorkRecordDAO, ComSwSafetyWorkRecordDO> implements ComSwSafetyWorkRecordService {
 
+    @Resource
+    private ComSwSafetyWorkRecordDAO comSwSafetyWorkRecordDAO;
+
+    @Resource
+    private ComSwPatrolRecordDAO comSwPatrolRecordDAO;
+
+    @Resource
+    private ComSwPatrolRecordReportDAO comSwPatrolRecordReportDAO;
+
+    @Override
+    public R pageSafetyWorkRecord(ComSwPatrolRecordPageDTO comSwPatrolRecordPageDTO) {
+        Page page = new Page<>();
+        Long pageNum = comSwPatrolRecordPageDTO.getPageNum();
+        Long pageSize = comSwPatrolRecordPageDTO.getPageSize();
+        if (null == pageNum || 0 == pageNum) {
+            pageNum = 1L;
+        }
+        if (null == pageSize || 0 == pageSize) {
+            pageSize = 10L;
+        }
+        page.setSize(pageSize);
+        page.setCurrent(pageNum);
+
+        IPage<ComSwSafetyWorkRecordVO> iPage = comSwSafetyWorkRecordDAO.pageSafetyWorkRecord(page, comSwPatrolRecordPageDTO);
+        return R.ok(iPage);
+    }
+
+    @Override
+    public R detailSafetyWorkRecord(Long safetyWorkRecordId) {
+        ComSwSafetyWorkRecordDO swSafetyWorkRecordDO = comSwSafetyWorkRecordDAO.selectById(safetyWorkRecordId);
+        if (null == swSafetyWorkRecordDO) {
+            return R.fail("该安全工作记录不存在");
+        }
+        ComSwPatrolRecordReportDO comSwPatrolRecordReportDO = comSwPatrolRecordReportDAO.selectOne(new QueryWrapper<ComSwPatrolRecordReportDO>().lambda().eq(ComSwPatrolRecordReportDO::getReportId, safetyWorkRecordId));
+        ComSwSafetyWorkRecordVO comSwSafetyWorkRecordVO = new ComSwSafetyWorkRecordVO();
+        if (null != comSwPatrolRecordReportDO) {
+            ComSwPatrolRecordDO comSwPatrolRecordDO = comSwPatrolRecordDAO.selectById(comSwPatrolRecordReportDO.getPatrolRecordId());
+            BeanUtils.copyProperties(comSwPatrolRecordDO, comSwSafetyWorkRecordVO);
+        }
+        return R.ok(comSwSafetyWorkRecordVO);
+    }
+
+    @Override
+    public R detailSafetyWorkRecordByPrId(Long patrolRecordId) {
+        ComSwPatrolRecordDO comSwPatrolRecordDO = comSwPatrolRecordDAO.selectById(patrolRecordId);
+        ComSwPatrolRecordReportDO comSwPatrolRecordReportDO = comSwPatrolRecordReportDAO.selectOne(new QueryWrapper<ComSwPatrolRecordReportDO>().lambda().eq(ComSwPatrolRecordReportDO::getPatrolRecordId, patrolRecordId));
+        if (null != comSwPatrolRecordReportDO) {
+            ComSwSafetyWorkRecordDO comSwSafetyWorkRecordDO = comSwSafetyWorkRecordDAO.selectById(comSwPatrolRecordReportDO.getReportId());
+            if (null == comSwSafetyWorkRecordDO) {
+                return R.fail("该安全工作记录不存在");
+            }
+        }
+        ComSwSafetyWorkRecordVO comSwSafetyWorkRecordVO = new ComSwSafetyWorkRecordVO();
+        BeanUtils.copyProperties(comSwPatrolRecordDO, comSwSafetyWorkRecordVO);
+        return R.ok(comSwSafetyWorkRecordVO);
+    }
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml
index ac33a16..bb722f8 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwDangerReportMapper.xml
@@ -21,6 +21,8 @@
                 <result column="community_suggestion" property="communitySuggestion" />
                 <result column="street_suggestion" property="streetSuggestion" />
                 <result column="undertake_record" property="undertakeRecord" />
+                <result column="leader_suggestion" property="leaderSuggestion" />
+                <result column="assign_person" property="assignPerson" />
                 <result column="remark" property="remark" />
                 <result column="create_at" property="createAt" />
                 <result column="create_by" property="createBy" />
@@ -33,4 +35,123 @@
     id, danger_no, danger_name, danger_type, status, danger_level, check_time, unit_name, dager_description, is_rectify_immediately, take_steps, steps_photo, rectify_person, rectify_time, community_suggestion, street_suggestion, undertake_record, remark, create_at, create_by, update_at, update_by
     </sql>
 
+    <select id="pageDangerReport" resultType="com.panzhihua.common.model.vos.community.ComSwDangerReportVO">
+        SELECT
+            csdr.id,
+            cspr.community_id AS communityId,
+            cspr.patrol_time AS patrolTime,
+            cspr.weather,
+            cspr.temperature,
+            cspr.wind,
+            cspr.patrol_type AS patrolType,
+            cspr.patrol_person AS patrolPerson,
+            cspr.address,
+            cspr.record_content AS recordContent,
+            cspr.find_record AS findRecord,
+            cspr.record_photo AS recordPhoto,
+            cspr.create_at AS createAt,
+            cspr.create_by AS createBy,
+            csdr.remark,
+            csdr.danger_name AS dangerName,
+            csdr.check_time AS checkTime,
+            csdr.unit_name AS unitName,
+            csdr.dager_description AS dagerDescription,
+            csdr.danger_no AS dangerNo,
+            csdr.danger_type AS dangerType,
+            csdr.status,
+            csdr.danger_level AS dangerLevel,
+            csdr.take_steps AS takeSteps,
+            csdr.steps_photo AS stepsPhoto,
+            csdr.rectify_person AS rectifyPerson,
+            csdr.rectify_time AS rectifyTime,
+            csdr.community_suggestion AS communitySuggestion,
+            csdr.street_suggestion AS streetSuggestion,
+            csdr.undertake_record AS undertakeRecord,
+            csdr.leader_suggestion AS leaderSuggestion,
+            csdr.assign_person AS assignPerson
+        FROM
+            com_sw_danger_report as csdr
+                left join com_sw_patrol_record_report as csprr on csprr.report_id = csdr.id
+                left join com_sw_patrol_record as cspr on csprr.patrol_record_id = cspr.id
+        <where>
+            <if test='comSwPatrolRecordDTO.communityId != null and comSwPatrolRecordDTO.communityId != ""'>
+                AND cspr.community_id = #{comSwPatrolRecordDTO.communityId}
+            </if>
+            <if test='comSwPatrolRecordDTO.patrolPerson != null and comSwPatrolRecordDTO.patrolPerson != ""'>
+                AND cspr.patrol_person LIKE concat('%',#{comSwPatrolRecordDTO.patrolPerson},'%')
+            </if>
+            <if test='comSwPatrolRecordDTO.patrolType != null and comSwPatrolRecordDTO.patrolType != ""'>
+                AND cspr.patrol_type = #{comSwPatrolRecordDTO.patrolType}
+            </if>
+            <if test='comSwPatrolRecordDTO.status != null and comSwPatrolRecordDTO.status != ""'>
+                AND cspr.patrol_type = #{comSwPatrolRecordDTO.patrolType}
+            </if>
+            <if test='comSwPatrolRecordDTO.patrolAtBegin != null '>
+                AND cspr.patrol_time <![CDATA[ >= ]]> #{comSwPatrolRecordDTO.patrolTime}
+            </if>
+            <if test='comSwPatrolRecordDTO.patrolAtEnd != null '>
+                AND cspr.patrol_time <![CDATA[ <= ]]> #{comSwPatrolRecordDTO.patrolTime}
+            </if>
+        </where>
+        order by csdr.create_at desc
+    </select>
+
+    <select id="detailDangerReport" resultType="com.panzhihua.common.model.vos.community.ComSwDangerReportVO">
+        SELECT
+        csdr.id,
+        cspr.community_id AS communityId,
+        cspr.patrol_time AS patrolTime,
+        cspr.weather,
+        cspr.temperature,
+        cspr.wind,
+        cspr.patrol_type AS patrolType,
+        cspr.patrol_person AS patrolPerson,
+        cspr.address,
+        cspr.record_content AS recordContent,
+        cspr.find_record AS findRecord,
+        cspr.record_photo AS recordPhoto,
+        cspr.create_at AS createAt,
+        cspr.create_by AS createBy,
+        csdr.remark,
+        csdr.danger_name AS dangerName,
+        csdr.check_time AS checkTime,
+        csdr.unit_name AS unitName,
+        csdr.dager_description AS dagerDescription,
+        csdr.danger_no AS dangerNo,
+        csdr.danger_type AS dangerType,
+        csdr.status,
+        csdr.danger_level AS dangerLevel,
+        csdr.take_steps AS takeSteps,
+        csdr.steps_photo AS stepsPhoto,
+        csdr.rectify_person AS rectifyPerson,
+        csdr.rectify_time AS rectifyTime,
+        csdr.community_suggestion AS communitySuggestion,
+        csdr.street_suggestion AS streetSuggestion,
+        csdr.undertake_record AS undertakeRecord,
+        csdr.leader_suggestion AS leaderSuggestion,
+        csdr.assign_person AS assignPerson
+        FROM
+        com_sw_danger_report as csdr
+        left join com_sw_patrol_record_report as csprr on csprr.report_id = csdr.id
+        left join com_sw_patrol_record as cspr on csprr.patrol_record_id = cspr.id
+        where csdr.id = #{dangerReportId}
+    </select>
+
+    <select id="exportDangerReport" resultType="com.panzhihua.common.model.vos.community.ComSwDangerReportExcelVO" parameterType="java.util.List">
+        SELECT
+            cspr.patrol_person AS patrolPerson,
+            cspr.address,
+            csdr.remark,
+            csdr.dager_description AS dagerDescription,
+            csdr.danger_type AS dangerType,
+            csdr.danger_level AS dangerLevel
+        FROM
+            com_sw_danger_report as csdr
+                left join com_sw_patrol_record_report as csprr on csprr.report_id = csdr.id
+                left join com_sw_patrol_record as cspr on csprr.patrol_record_id = cspr.id
+        where csdr.id in
+        <foreach collection="dangerReportIds" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordMapper.xml b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordMapper.xml
index 35dee8f..3a5fcd3 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordMapper.xml
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordMapper.xml
@@ -35,35 +35,35 @@
 
     <select id="pagePatrolRecord" resultType="com.panzhihua.common.model.vos.community.ComSwPatrolRecordVO">
         SELECT
-        cspr.id,
-        cspr.community_id AS communityId,
-        cspr.patrol_time AS patrolTime,
-        cspr.weather,
-        cspr.temperature,
-        cspr.wind,
-        cspr.patrol_type AS patrolType,
-        cspr.patrol_person AS patrolPerson,
-        cspr.address,
-        cspr.record_content AS recordContent,
-        cspr.find_record AS findRecord,
-        cspr.record_photo AS recordPhoto,
-        cspr.remark,
-        cspr.succession_person AS successionPerson,
-        cspr.succession_time AS successionTime,
-        cspr.create_at AS createAt,
-        cspr.create_by AS createBy,
-        csprr.report_id AS reportId
+            cspr.id,
+            cspr.community_id AS communityId,
+            cspr.patrol_time AS patrolTime,
+            cspr.weather,
+            cspr.temperature,
+            cspr.wind,
+            cspr.patrol_type AS patrolType,
+            cspr.patrol_person AS patrolPerson,
+            cspr.address,
+            cspr.record_content AS recordContent,
+            cspr.find_record AS findRecord,
+            cspr.record_photo AS recordPhoto,
+            cspr.remark,
+            cspr.succession_person AS successionPerson,
+            cspr.succession_time AS successionTime,
+            cspr.create_at AS createAt,
+            cspr.create_by AS createBy,
+            csprr.report_id AS reportId
         FROM
-        com_sw_patrol_record as cspr
+            com_sw_patrol_record as cspr
         left join com_sw_patrol_record_report as csprr on csprr.patrol_record_id = cspr.id
         <where>
-            <if test='comSwPatrolRecordDTO.communityId != null and comSwPatrolRecordDTO.communityId != &quot;&quot;'>
+            <if test='comSwPatrolRecordDTO.communityId != null and comSwPatrolRecordDTO.communityId != ""'>
                 AND cspr.community_id = #{comSwPatrolRecordDTO.communityId}
             </if>
-            <if test='comSwPatrolRecordDTO.patrolPerson != null and comSwPatrolRecordDTO.patrolPerson != &quot;&quot;'>
+            <if test='comSwPatrolRecordDTO.patrolPerson != null and comSwPatrolRecordDTO.patrolPerson != ""'>
                 AND cspr.patrol_person LIKE concat('%',#{comSwPatrolRecordDTO.patrolPerson},'%')
             </if>
-            <if test='comSwPatrolRecordDTO.patrolType != null and comSwPatrolRecordDTO.patrolType != &quot;&quot;'>
+            <if test='comSwPatrolRecordDTO.patrolType != null and comSwPatrolRecordDTO.patrolType != ""'>
                 AND cspr.patrol_type = #{comSwPatrolRecordDTO.patrolType}
             </if>
             <if test='comSwPatrolRecordDTO.patrolAtBegin != null '>
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordReportMapper.xml b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordReportMapper.xml
index 93b4027..8ac3a8c 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordReportMapper.xml
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwPatrolRecordReportMapper.xml
@@ -2,20 +2,20 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.panzhihua.service_community.dao.ComSwPatrolRecordReportDAO">
 
-        <!-- 通用查询映射结果 -->
-        <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComSwPatrolRecordReportDO">
-                    <id column="id" property="id" />
-                    <result column="patrol_record_id" property="patrolRecordId" />
-                    <result column="report_id" property="reportId" />
-                    <result column="create_at" property="createAt" />
-                    <result column="create_by" property="createBy" />
-                    <result column="update_at" property="updateAt" />
-                    <result column="update_by" property="updateBy" />
-        </resultMap>
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComSwPatrolRecordReportDO">
+                <id column="id" property="id" />
+                <result column="patrol_record_id" property="patrolRecordId" />
+                <result column="report_id" property="reportId" />
+                <result column="create_at" property="createAt" />
+                <result column="create_by" property="createBy" />
+                <result column="update_at" property="updateAt" />
+                <result column="update_by" property="updateBy" />
+    </resultMap>
 
-        <!-- 通用查询结果列 -->
-        <sql id="Base_Column_List">
-        id, patrol_record_id, report_id, create_at, create_by, update_at, update_by
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+    id, patrol_record_id, report_id, create_at, create_by, update_at, update_by
     </sql>
 
 </mapper>
\ No newline at end of file
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwSafetyWorkRecordMapper.xml b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwSafetyWorkRecordMapper.xml
index 51c2b93..88b3522 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwSafetyWorkRecordMapper.xml
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComSwSafetyWorkRecordMapper.xml
@@ -2,19 +2,61 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.panzhihua.service_community.dao.ComSwSafetyWorkRecordDAO">
 
-        <!-- 通用查询映射结果 -->
-        <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComSwSafetyWorkRecordDO">
-                    <id column="id" property="id" />
-                    <result column="remark" property="remark" />
-                    <result column="create_at" property="createAt" />
-                    <result column="create_by" property="createBy" />
-                    <result column="update_at" property="updateAt" />
-                    <result column="update_by" property="updateBy" />
-        </resultMap>
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.panzhihua.service_community.model.dos.ComSwSafetyWorkRecordDO">
+        <id column="id" property="id" />
+        <result column="remark" property="remark" />
+        <result column="create_at" property="createAt" />
+        <result column="create_by" property="createBy" />
+        <result column="update_at" property="updateAt" />
+        <result column="update_by" property="updateBy" />
+    </resultMap>
 
-        <!-- 通用查询结果列 -->
-        <sql id="Base_Column_List">
-        id, remark, create_at, create_by, update_at, update_by
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+    id, remark, create_at, create_by, update_at, update_by
     </sql>
 
+    <select id="pageSafetyWorkRecord" resultType="com.panzhihua.common.model.vos.community.ComSwSafetyWorkRecordVO">
+        SELECT
+        csswr.id,
+        cspr.community_id AS communityId,
+        cspr.patrol_time AS patrolTime,
+        cspr.weather,
+        cspr.temperature,
+        cspr.wind,
+        cspr.patrol_type AS patrolType,
+        cspr.patrol_person AS patrolPerson,
+        cspr.address,
+        cspr.record_content AS recordContent,
+        cspr.find_record AS findRecord,
+        cspr.record_photo AS recordPhoto,
+        csswr.remark,
+        cspr.create_at AS createAt,
+        cspr.create_by AS createBy
+        FROM
+        com_sw_safety_work_record as csswr
+        left join com_sw_patrol_record_report as csprr on csprr.report_id = csswr.id
+        left join com_sw_patrol_record as cspr on csprr.patrol_record_id = cspr.id
+        <where>
+            <if test='comSwPatrolRecordDTO.communityId != null and comSwPatrolRecordDTO.communityId != ""'>
+                AND cspr.community_id = #{comSwPatrolRecordDTO.communityId}
+            </if>
+            <if test='comSwPatrolRecordDTO.patrolPerson != null and comSwPatrolRecordDTO.patrolPerson != ""'>
+                AND cspr.patrol_person LIKE concat('%',#{comSwPatrolRecordDTO.patrolPerson},'%')
+            </if>
+            <if test='comSwPatrolRecordDTO.patrolType != null and comSwPatrolRecordDTO.patrolType != ""'>
+                AND cspr.patrol_type = #{comSwPatrolRecordDTO.patrolType}
+            </if>
+            <if test='comSwPatrolRecordDTO.patrolAtBegin != null '>
+                AND cspr.patrol_time <![CDATA[ >= ]]> #{comSwPatrolRecordDTO.patrolTime}
+            </if>
+            <if test='comSwPatrolRecordDTO.patrolAtEnd != null '>
+                AND cspr.patrol_time <![CDATA[ <= ]]> #{comSwPatrolRecordDTO.patrolTime}
+            </if>
+        </where>
+        order by csswr.create_at desc
+    </select>
+
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.7.1