From 87c0cb5ed6477f1760034bcf1de608102b29e442 Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Mon, 29 Jan 2024 18:34:07 +0800
Subject: [PATCH] 九小场所检查

---
 src/main/java/org/springblade/modules/patrol/dto/PatrolGroupDTO.java                      |   17 
 src/main/java/org/springblade/common/utils/NodeTreeUtil.java                              |   27 
 src/main/java/org/springblade/modules/patrol/vo/PatrolGroupItemVO.java                    |   18 
 src/main/java/org/springblade/modules/patrol/service/IPatrolGroupItemService.java         |   45 +
 src/main/java/org/springblade/modules/patrol/service/IPatrolRecordService.java            |   58 +
 src/main/java/org/springblade/modules/patrol/mapper/PatrolRecordMapper.xml                |  244 ++++++
 src/main/java/org/springblade/modules/patrol/controller/PatrolGroupController.java        |  178 +++++
 src/main/java/org/springblade/modules/place/controller/PlaceCheckController.java          |    6 
 src/main/java/org/springblade/modules/place/entity/PlaceCheckEntity.java                  |   64 -
 src/main/java/org/springblade/modules/place/service/impl/PlaceCheckServiceImpl.java       |   26 
 src/main/java/org/springblade/modules/place/mapper/PlaceCheckMapper.xml                   |   52 +
 src/main/java/org/springblade/modules/patrol/service/IPatrolGroupService.java             |   46 +
 src/main/java/org/springblade/modules/patrol/dto/PatrolGroupItemDTO.java                  |   18 
 src/main/java/org/springblade/modules/place/vo/PlaceCheckVO.java                          |    9 
 src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupItemMapper.xml             |   77 ++
 src/main/java/org/springblade/modules/patrol/controller/PatrolRecordController.java       |  171 ++++
 src/main/java/org/springblade/modules/patrol/mapper/PatrolRecordMapper.java               |   27 
 src/main/java/org/springblade/modules/patrol/dto/PatrolRecordDTO.java                     |   18 
 src/main/java/org/springblade/modules/patrol/entity/PatrolRecord.java                     |   75 ++
 src/main/java/org/springblade/modules/patrol/vo/PatrolGroupVO.java                        |   22 
 src/main/java/org/springblade/modules/place/service/IPlaceCheckService.java               |    1 
 src/main/java/org/springblade/modules/patrol/vo/PatrolRecordVO.java                       |   72 ++
 src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml                    |   47 
 src/main/java/org/springblade/modules/patrol/controller/PatrolGroupItemController.java    |  122 +++
 src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupMapper.xml                 |  212 ++++++
 src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java        |    1 
 src/main/java/org/springblade/modules/patrol/entity/PatrolGroup.java                      |   61 +
 src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupMapper.java                |   41 +
 src/main/java/org/springblade/modules/patrol/entity/PatrolGroupItem.java                  |   70 ++
 src/main/java/org/springblade/modules/patrol/service/impl/PatrolGroupServiceImpl.java     |   71 ++
 src/main/java/org/springblade/modules/article/vo/ArticleVO.java                           |    7 
 src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupItemMapper.java            |   21 
 src/main/java/org/springblade/modules/task/vo/TaskReportForRepairsVO.java                 |   10 
 src/main/java/org/springblade/modules/patrol/service/impl/PatrolRecordServiceImpl.java    |   96 ++
 src/main/java/org/springblade/modules/patrol/service/impl/PatrolGroupItemServiceImpl.java |   43 +
 src/main/java/org/springblade/modules/task/mapper/TaskReportForRepairsMapper.xml          |   27 
 36 files changed, 2,037 insertions(+), 63 deletions(-)

diff --git a/src/main/java/org/springblade/common/utils/NodeTreeUtil.java b/src/main/java/org/springblade/common/utils/NodeTreeUtil.java
index 7568fd1..c867cf4 100644
--- a/src/main/java/org/springblade/common/utils/NodeTreeUtil.java
+++ b/src/main/java/org/springblade/common/utils/NodeTreeUtil.java
@@ -3,6 +3,7 @@
 import org.springblade.common.node.TreeIntegerNode;
 import org.springblade.common.node.TreeLongNode;
 import org.springblade.common.node.TreeStringNode;
+import org.springblade.core.tool.node.TreeNode;
 import org.springblade.modules.doorplateAddress.vo.DoorplateAddressVOTree;
 import org.springblade.modules.house.vo.HouseTree;
 
@@ -117,4 +118,30 @@
 		}
 		return tree;
 	}
+
+
+	/**
+	 * list 转 tree 组织机构
+	 * @param parentList
+	 * @param childrenList
+	 * @return
+	 */
+	public  static List<TreeNode> getNodeTree(List<TreeNode> parentList, List<TreeNode> childrenList){
+		// 遍历
+		for (TreeNode parentNode : parentList) {
+			// 判断是否有孩子
+			if (parentNode.getHasChildren()) {
+				List<TreeNode> tree = new ArrayList<>();
+				// 遍历子集合
+				for (TreeNode childrenNode : childrenList) {
+					if (parentNode.getId().equals(childrenNode.getParentId())) {
+						tree.add(childrenNode);
+					}
+				}
+				// 设置孩子节点
+				parentNode.setChildren(tree);
+			}
+		}
+		return parentList;
+	}
 }
diff --git a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
index 8ef1f6b..508f73e 100644
--- a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
+++ b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
@@ -180,45 +180,64 @@
     </select>
 
     <!--查询资讯分页列表信息-->
-    <select id="selectArticlePage" resultType="org.springblade.modules.article.entity.Article">
-        select * from jczz_article
+    <select id="selectArticlePage" resultType="org.springblade.modules.article.vo.ArticleVO">
+        SELECT
+        ja.*,
+        br.`village_name` communityName,
+        br.town_name streetName
+        FROM
+        jczz_article ja
+        LEFT JOIN jczz_district jd ON ja.district_id = jd.id
+        LEFT JOIN blade_region br on br.`code` = jd.community_code
         where 1=1
-        and is_deleted = 0
+        and ja.is_deleted = 0
+        <if test="article.propertyFlag!=null ">
+            and ja.district_id IS NOT NULL
+            <if test="article.communityName!=null and article.communityName!=''">
+                and br.`village_name` like concat('%',#{article.communityName},'%')
+            </if>
+
+            <if test="article.streetName!=null and article.streetName!=''">
+                and br.town_name like concat('%',#{article.streetName},'%')
+            </if>
+        </if>
+
+
         <if test="article.title!=null and article.title!=''">
-            and title like concat('%',#{article.title},'%')
+            and ja.title like concat('%',#{article.title},'%')
         </if>
         <if test="article.sourceName!=null and article.sourceName!=''">
-            and source_name like concat('%',#{article.sourceName},'%')
+            and ja.source_name like concat('%',#{article.sourceName},'%')
         </if>
         <if test="article.startTime!=null and article.startTime!=''">
-            and create_time&gt;=#{article.startTime}
+            and ja.create_time&gt;=#{article.startTime}
         </if>
         <if test="article.endTime!=null and article.endTime!=''">
-            and create_time&lt;=#{article.endTime}
+            and ja.create_time&lt;=#{article.endTime}
         </if>
         <if test="article.publish!=null and article.publish!=''">
-            and publish = #{article.publish}
+            and ja.publish = #{article.publish}
         </if>
         <if test="article.articleType!=null and article.articleType!=''">
-            and article_type like concat('%',#{article.articleType},'%')
+            and ja.article_type like concat('%',#{article.articleType},'%')
         </if>
-        <if test="article.type != null ">and type = #{article.type}</if>
+        <if test="article.type != null ">and ja.type = #{article.type}</if>
 
         <if test="article.keyword!=null and article.keyword!=''">
-            AND CONCAT(title,source_name)
+            AND CONCAT(ja.title,ja.source_name)
             LIKE CONCAT ('%', #{article.keyword},'%')
         </if>
         <if test="article.districtIdList != null and article.districtIdList.size() > 0 ">
-            and (article_range like
+            and (ja.article_range like
             <foreach collection="article.districtIdList" separator=" or article_range like" item="id">'%${id}%'
             </foreach>
             )
-            and district_id in
+            and ja.district_id in
             <foreach collection="article.districtIdList" index="index" item="item" open="(" separator="," close=")">
                 #{item}
             </foreach>
         </if>
-        order by id desc
+        order by ja.create_time desc
     </select>
 
     <!--查询资讯敏感词预警-->
diff --git a/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java b/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
index 3a72e67..1a6b910 100644
--- a/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
+++ b/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
@@ -71,6 +71,7 @@
 			if (districtIds.size() == 0) {
 				return page.setRecords(new ArrayList<>());
 			}
+			article.setPropertyFlag(1);
 		}
 		if (userRole.contains("jdgly")) {
 			List<String> regionChildCodesList = SysCache.getRegionChildCodesByDeptId(AuthUtil.getDeptId());
diff --git a/src/main/java/org/springblade/modules/article/vo/ArticleVO.java b/src/main/java/org/springblade/modules/article/vo/ArticleVO.java
index 8818a14..d1ddabc 100644
--- a/src/main/java/org/springblade/modules/article/vo/ArticleVO.java
+++ b/src/main/java/org/springblade/modules/article/vo/ArticleVO.java
@@ -80,4 +80,11 @@
 
 	private List<String> districtIdList;
 
+	// 物业标记
+	private Integer propertyFlag;
+
+	private String streetName;
+
+	private String communityName;
+
 }
diff --git a/src/main/java/org/springblade/modules/patrol/controller/PatrolGroupController.java b/src/main/java/org/springblade/modules/patrol/controller/PatrolGroupController.java
new file mode 100644
index 0000000..711c550
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/controller/PatrolGroupController.java
@@ -0,0 +1,178 @@
+package org.springblade.modules.patrol.controller;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.modules.patrol.entity.PatrolGroup;
+import org.springblade.modules.patrol.service.IPatrolGroupService;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description: 巡查指标组
+ */
+@Slf4j
+@Api(tags = "巡查指标组")
+@RestController
+@RequestMapping("/patrol/patrolGroup")
+@AllArgsConstructor
+public class PatrolGroupController extends BladeController {
+	private IPatrolGroupService patrolGroupService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param patrolGroup
+	 */
+	@ApiOperation(value = "巡查指标组-分页列表查询", notes = "巡查指标组-分页列表查询")
+	@GetMapping(value = "/list")
+	public R queryPageList(PatrolGroup patrolGroup, Query query) {
+//		IPage<PatrolGroup> pageList = patrolGroupService.selectPatrolConfig(Condition.getPage(query),patrolGroup);
+		IPage<PatrolGroup> pageList = patrolGroupService.page(Condition.getPage(query), Condition.getQueryWrapper(patrolGroup));
+		return R.data(pageList);
+	}
+
+	/**
+	 * 添加
+	 *
+	 * @param patrolGroup
+	 * @return
+	 */
+	@ApiOperation(value = "巡查指标组-添加", notes = "巡查指标组-添加")
+	@PostMapping(value = "/add")
+	public R add(@RequestBody PatrolGroup patrolGroup) {
+		return R.data(patrolGroupService.save(patrolGroup));
+	}
+
+	/**
+	 * 编辑
+	 *
+	 * @param patrolGroup
+	 * @return
+	 */
+	@ApiOperation(value = "巡查指标组-编辑", notes = "巡查指标组-编辑")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+	public R edit(@RequestBody PatrolGroup patrolGroup) {
+		return R.data(patrolGroupService.updateById(patrolGroup));
+	}
+
+	/**
+	 * 通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value = "巡查指标组-通过id删除", notes = "巡查指标组-通过id删除")
+	@PostMapping(value = "/delete")
+	public R delete(@RequestParam(name = "id", required = true) String id) {
+		return R.data(patrolGroupService.removeById(id));
+	}
+
+	/**
+	 * 批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@ApiOperation(value = "巡查指标组-批量删除", notes = "巡查指标组-批量删除")
+	@PostMapping(value = "/deleteBatch")
+	public R deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+		return R.data(patrolGroupService.removeByIds(Arrays.asList(ids.split(","))));
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value = "巡查指标组-通过id查询", notes = "巡查指标组-通过id查询")
+	@GetMapping(value = "/queryById")
+	public R queryById(@RequestParam(name = "id", required = true) String id) {
+		PatrolGroup patrolGroup = patrolGroupService.getById(id);
+		return R.data(patrolGroup);
+	}
+
+	/**
+	 * 根据工程id查询巡查指标组
+	 *
+	 * @return
+	 */
+	@ApiOperation(value = "巡查指标组-根据工程id查询巡查指标组", notes = "巡查指标组-根据工程id查询巡查指标组")
+	@GetMapping(value = "/getPatrolGroupByProjectId")
+	public R queryTree(@RequestParam(name = "projectId", required = true) String projectId) {
+		List<PatrolGroup> list = patrolGroupService.getPatrolGroupByProjectId(projectId);
+		return R.data(list);
+	}
+
+	/**
+	 * 获取全部指标组
+	 *
+	 * @return
+	 */
+	@ApiOperation(value = "获取全部指标组", notes = "获取全部指标组")
+	@GetMapping(value = "/all")
+	public R getAll() {
+		List<PatrolGroup> list = patrolGroupService.list();
+		return R.data(list);
+	}
+
+	/**
+	 * 查询巡查项树数据
+	 * @return
+	 */
+	@ApiOperation(value = "查询巡查项树数据", notes = "查询巡查项树数据")
+	@GetMapping(value = "/getPatrolGroupTree")
+	public R getPatrolGroupTree() {
+		return R.data(patrolGroupService.getPatrolGroupTree());
+	}
+
+	/**
+	 * 根据项id查询组id
+	 * @return
+	 */
+	@ApiOperation(value = "根据项id查询组id", notes = "根据项id查询组id")
+	@GetMapping(value = "/getPatrolGroupByItemId")
+	public R getPatrolGroupByItemId(String itemIds) {
+		return R.data(patrolGroupService.getPatrolGroupByItemId(itemIds));
+	}
+
+	/**
+	 * 根据任务id获取巡查项,可判断是否已选
+	 */
+	@GetMapping(value = "/getAllPatrolGroupByTaskId")
+	public R getAllPatrolGroupByTaskId(String taskId) {
+		return R.data(patrolGroupService.getAllPatrolGroupByTaskId(taskId));
+	}
+
+	/**
+	 * 根据任务id获取巡查组,返回组下的record
+	 */
+	@GetMapping(value = "/getPatrolGroupDTO")
+	public R getPatrolGroupDTO(String taskId) {
+		return R.data(patrolGroupService.getPatrolGroupDTO(taskId));
+	}
+
+	/**
+	 * 根据任务id获取巡查组
+	 */
+	@GetMapping(value = "/getPatrolGroupByTaskId")
+	public R getPatrolGroupByTaskId(String taskId) {
+		return R.data(patrolGroupService.getPatrolGroupByTaskId(taskId));
+	}
+
+	/**
+	 * 根据任务id获取巡查组,返回组下的record(web任务详情)
+	 */
+	@GetMapping(value = "/getGroupDTORecord")
+	public R getGroupDTORecord(String taskId){
+		return R.data(patrolGroupService.getGroupDTORecord(taskId));
+	}
+}
diff --git a/src/main/java/org/springblade/modules/patrol/controller/PatrolGroupItemController.java b/src/main/java/org/springblade/modules/patrol/controller/PatrolGroupItemController.java
new file mode 100644
index 0000000..16bd29e
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/controller/PatrolGroupItemController.java
@@ -0,0 +1,122 @@
+package org.springblade.modules.patrol.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.modules.patrol.entity.PatrolGroupItem;
+import org.springblade.modules.patrol.service.IPatrolGroupItemService;
+import org.springblade.modules.patrol.vo.PatrolGroupItemVO;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description: 巡查指标项目
+ */
+@Slf4j
+@Api(tags="巡查指标项目")
+@RestController
+@RequestMapping("/patrol/patrolGroupItem")
+@AllArgsConstructor
+public class PatrolGroupItemController extends BladeController {
+
+	private IPatrolGroupItemService patrolGroupItemService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param patrolGroupItem
+	 * @return
+	 */
+	@ApiOperation(value="巡查指标项目-分页列表查询", notes="巡查指标项目-分页列表查询")
+	@GetMapping(value = "/list")
+	public R queryPageList(PatrolGroupItemVO patrolGroupItem, Query query) {
+		IPage<PatrolGroupItemVO> pageList = patrolGroupItemService.selectPatrolConfig(Condition.getPage(query),patrolGroupItem);
+		return R.data(pageList);
+	}
+
+	/**
+	 * 列表查询
+	 *
+	 * @param patrolGroupItem
+	 * @return
+	 */
+	@ApiOperation(value="巡查指标项目-列表查询", notes="巡查指标项目-列表查询")
+	@GetMapping(value = "/queryList")
+	public R queryList(PatrolGroupItemVO patrolGroupItem) {
+		List<PatrolGroupItemVO> list = patrolGroupItemService.selectPatrolGroupItemList(patrolGroupItem);
+		return R.data(list);
+	}
+
+	/**
+	 * 添加
+	 *
+	 * @param patrolGroupItem
+	 * @return
+	 */
+	@ApiOperation(value="巡查指标项目-添加", notes="巡查指标项目-添加")
+	@PostMapping(value = "/add")
+	public R add(@RequestBody PatrolGroupItem patrolGroupItem) {
+		return R.data(patrolGroupItemService.save(patrolGroupItem));
+	}
+
+	/**
+	 * 编辑
+	 *
+	 * @param patrolGroupItem
+	 * @return
+	 */
+	@ApiOperation(value="巡查指标项目-编辑", notes="巡查指标项目-编辑")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public R edit(@RequestBody PatrolGroupItem patrolGroupItem) {
+		return R.data(patrolGroupItemService.updateById(patrolGroupItem));
+	}
+
+	/**
+	 * 通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="巡查指标项目-通过id删除", notes="巡查指标项目-通过id删除")
+	@PostMapping(value = "/delete")
+	public R delete(@RequestParam(name="id",required=true) String id) {
+		return R.data(patrolGroupItemService.removeById(id));
+	}
+
+	/**
+	 * 批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@ApiOperation(value="巡查指标项目-批量删除", notes="巡查指标项目-批量删除")
+	@PostMapping(value = "/deleteBatch")
+	public R deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		return R.data(patrolGroupItemService.removeByIds(Arrays.asList(ids.split(","))));
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="巡查指标项目-通过id查询", notes="巡查指标项目-通过id查询")
+	@GetMapping(value = "/queryById")
+	public R queryById(@RequestParam(name="id",required=true) String id) {
+		PatrolGroupItem patrolGroupItem = patrolGroupItemService.getById(id);
+		return R.data(patrolGroupItem);
+	}
+
+
+
+}
diff --git a/src/main/java/org/springblade/modules/patrol/controller/PatrolRecordController.java b/src/main/java/org/springblade/modules/patrol/controller/PatrolRecordController.java
new file mode 100644
index 0000000..cfd4a6a
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/controller/PatrolRecordController.java
@@ -0,0 +1,171 @@
+package org.springblade.modules.patrol.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.modules.patrol.entity.PatrolRecord;
+import org.springblade.modules.patrol.service.IPatrolRecordService;
+import org.springblade.modules.patrol.vo.PatrolGroupItemVO;
+import org.springblade.modules.patrol.vo.PatrolRecordVO;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+* @Description: 巡查记录
+*/
+@Slf4j
+@Api(tags="巡查记录")
+@RestController
+@RequestMapping("/patrol/patrolRecord")
+@AllArgsConstructor
+public class PatrolRecordController extends BladeController {
+   private IPatrolRecordService patrolRecordService;
+
+   /**
+    * 分页列表查询
+    */
+   @ApiOperation(value="巡查记录-分页列表查询", notes="巡查记录-分页列表查询")
+   @GetMapping(value = "/list")
+   public R queryPageList(PatrolRecordVO patrolRecord, Query query) {
+       IPage<PatrolRecord> pageList = patrolRecordService.selectPatrolRecord(Condition.getPage(query),patrolRecord);
+       return R.data(pageList);
+   }
+
+    /**
+     * 获取所有巡查记录
+     */
+    @ApiOperation(value="获取所有巡查类型", notes="获取所有巡查类型")
+    @GetMapping(value = "/all")
+   public R getAll(PatrolRecord patrolRecord){
+       List<PatrolRecord> list = patrolRecordService.list(Condition.getQueryWrapper(patrolRecord));
+       return R.data(list);
+   }
+
+   /**
+    * 添加
+    */
+   @ApiOperation(value="巡查记录-添加", notes="巡查记录-添加")
+   @PostMapping(value = "/add")
+   public R add(@RequestBody PatrolRecord patrolRecord) {
+       return R.data(patrolRecordService.save(patrolRecord));
+   }
+
+   /**
+    * 编辑
+    */
+   @ApiOperation(value="巡查记录-编辑", notes="巡查记录-编辑")
+   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+   public R edit(@RequestBody PatrolRecord patrolRecord) {
+       return R.data(patrolRecordService.updateById(patrolRecord));
+   }
+
+   /**
+    * 通过id删除
+    *
+    * @param id
+    * @return
+    */
+   @ApiOperation(value="巡查记录-通过id删除", notes="巡查记录-通过id删除")
+   @PostMapping(value = "/delete")
+   public R delete(@RequestParam(name="id",required=true) String id) {
+       return R.data(patrolRecordService.removeById(id));
+   }
+
+   /**
+    * 批量删除
+    *
+    * @param ids
+    * @return
+    */
+   @ApiOperation(value="巡查记录-批量删除", notes="巡查记录-批量删除")
+   @PostMapping(value = "/deleteBatch")
+   public R deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+       return R.data(patrolRecordService.removeByIds(Arrays.asList(ids.split(","))));
+   }
+
+   /**
+    * 通过id查询
+    *
+    * @param id
+    * @return
+    */
+   @ApiOperation(value="巡查记录-通过id查询", notes="巡查记录-通过id查询")
+   @GetMapping(value = "/queryById")
+   public R queryById(@RequestParam(name="id",required=true) String id) {
+	   PatrolRecordVO patrolRecordVO = patrolRecordService.getDetail(id);
+	   return R.data(patrolRecordVO);
+   }
+
+	/**
+	 * 通过taskId,itemsIds查询(用来判断是否完成任务)
+	 * @return
+	 */
+	@ApiOperation(value="巡查记录-通过taskId,itemsIds查询", notes="巡查记录-通过taskId,itemsIds查询")
+	@GetMapping(value = "/getPatrolRecordByTaskId")
+	public R getPatrolRecordByTaskId(String taskId,String itemIds) {
+		List<PatrolGroupItemVO> list = patrolRecordService.getPatrolRecordByTaskId(taskId,itemIds);
+		return R.data(list);
+	}
+
+	/**
+	 * 通过taskId,itemsIds查询(用来查询巡查记录)
+	 * @return
+	 */
+	@ApiOperation(value="巡查记录-通过itemId查询", notes="巡查记录-通过itemId查询")
+	@GetMapping(value = "/getByTaskIdAndItemId")
+	public R getByTaskIdAndItemId(String taskId,String itemIds){
+		List<PatrolRecordVO> list = patrolRecordService.getByTaskIdAndItemId(taskId,itemIds);
+		return R.data(list);
+	}
+
+	/**
+	 * 通过itemIds查询(用于巡查上报时的回显)
+	 *
+	 * @return
+	 */
+	@ApiOperation(value="巡查指标项目-通过itemIds查询", notes="巡查指标项目-通过itemIds查询")
+	@GetMapping(value = "/getItemByItemIds")
+	public R getItemByItemIds(String itemIds,String groupId,String taskId){
+		List list = patrolRecordService.getItemByItemIds(itemIds,groupId,taskId);
+		return R.data(list);
+	}
+
+	/**
+	 * 通过任务id和组id获取记录表中的数据,用于数据回显
+	 *
+	 * @return
+	 */
+	@GetMapping(value = "/getByTaskIdAndGroupId")
+	public R getByTaskIdAndGroupId(PatrolRecordVO patrolRecordVO){
+		List<PatrolRecord> list = patrolRecordService.getByTaskIdAndGroupId(patrolRecordVO);
+		return R.data(list);
+	}
+
+	/**
+	 * 记录更新并且新增数据(适用于app处理)
+	 */
+	// @ApiOperation(value="巡查记录-记录更新并且新增数据", notes="巡查记录-记录更新并且新增数据")
+	// @RequestMapping(value = "/updateThenSaveBatch", method = {RequestMethod.PUT,RequestMethod.POST})
+	// public R updateThenSaveBatch(@RequestBody RecordBatchVO recordBatchVO){
+	// 	return R.data(patrolRecordService.updateThenSaveBatch(recordBatchVO));
+	// }
+
+	/**
+	 * 获取历史记录
+	 */
+	@ApiOperation(value="巡查记录-获取历史记录", notes="巡查记录-获取历史记录")
+	@RequestMapping(value = "/getHistoryRecord", method = {RequestMethod.PUT,RequestMethod.POST})
+	public R getHistoryRecord(PatrolRecordVO patrolRecordVO){
+		return R.data(patrolRecordService.getHistoryRecord(patrolRecordVO));
+	}
+
+}
diff --git a/src/main/java/org/springblade/modules/patrol/dto/PatrolGroupDTO.java b/src/main/java/org/springblade/modules/patrol/dto/PatrolGroupDTO.java
new file mode 100644
index 0000000..417d956
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/dto/PatrolGroupDTO.java
@@ -0,0 +1,17 @@
+package org.springblade.modules.patrol.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springblade.modules.patrol.entity.PatrolGroup;
+
+/**
+ * 巡查指标组对象 jczz_patrol_group
+ *
+ * @author ${context.author}
+ * @date 2024-01-29 13:40:49
+ */
+@ApiModel(value = "PatrolGroupDTO对象")
+@Data
+public class PatrolGroupDTO extends PatrolGroup {
+
+}
diff --git a/src/main/java/org/springblade/modules/patrol/dto/PatrolGroupItemDTO.java b/src/main/java/org/springblade/modules/patrol/dto/PatrolGroupItemDTO.java
new file mode 100644
index 0000000..8a3845c
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/dto/PatrolGroupItemDTO.java
@@ -0,0 +1,18 @@
+package org.springblade.modules.patrol.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springblade.modules.patrol.entity.PatrolGroupItem;
+
+/**
+ * 巡查指标项目对象 jczz_patrol_group_item
+ *
+ * @author ${context.author}
+ * @date 2024-01-29 13:40:49
+ */
+@ApiModel(value = "PatrolGroupItemDTO对象")
+@Data
+public class PatrolGroupItemDTO extends PatrolGroupItem {
+
+}
diff --git a/src/main/java/org/springblade/modules/patrol/dto/PatrolRecordDTO.java b/src/main/java/org/springblade/modules/patrol/dto/PatrolRecordDTO.java
new file mode 100644
index 0000000..3dfa9dc
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/dto/PatrolRecordDTO.java
@@ -0,0 +1,18 @@
+package org.springblade.modules.patrol.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springblade.modules.patrol.entity.PatrolRecord;
+
+/**
+ * 巡查记录表对象 jczz_patrol_record
+ *
+ * @author ${context.author}
+ * @date 2024-01-29 13:40:49
+ */
+@ApiModel(value = "PatrolRecordDTO对象")
+@Data
+public class PatrolRecordDTO extends PatrolRecord {
+
+}
diff --git a/src/main/java/org/springblade/modules/patrol/entity/PatrolGroup.java b/src/main/java/org/springblade/modules/patrol/entity/PatrolGroup.java
new file mode 100644
index 0000000..d7c7b0c
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/entity/PatrolGroup.java
@@ -0,0 +1,61 @@
+package org.springblade.modules.patrol.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 巡查指标组对象 jczz_patrol_group
+ *
+ * @author ${context.author}
+ * @date 2024-01-29 13:40:49
+ */
+@ApiModel(value = "PatrolGroup对象" , description = "巡查指标组")
+@Data
+@TableName("jczz_patrol_group")
+public class PatrolGroup implements Serializable
+{
+	private static final long serialVersionUID = 1L;
+
+
+
+	/** 主键 */
+	@ApiModelProperty(value = "主键ID", example = "")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/** 名称 */
+	@ApiModelProperty(value = "名称", example = "")
+	@TableField("name")
+	private String name;
+
+	/** 创建人 */
+	@ApiModelProperty(value = "创建人", example = "")
+	@TableField("create_user")
+	private Long createUser;
+
+	/** 创建时间 */
+	@ApiModelProperty(value = "创建时间", example = "")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	@TableField("create_time")
+	private Date createTime;
+
+	/** 修改时间 */
+	@ApiModelProperty(value = "修改时间", example = "")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	@TableField("update_time")
+	private Date updateTime;
+
+	/** 是否已删除 0: 否 1:是 */
+	@ApiModelProperty(value = "是否已删除 0: 否 1:是", example = "")
+	@TableField("is_deleted")
+	private Integer isDeleted;
+}
diff --git a/src/main/java/org/springblade/modules/patrol/entity/PatrolGroupItem.java b/src/main/java/org/springblade/modules/patrol/entity/PatrolGroupItem.java
new file mode 100644
index 0000000..3e49593
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/entity/PatrolGroupItem.java
@@ -0,0 +1,70 @@
+package org.springblade.modules.patrol.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 巡查指标项目对象 jczz_patrol_group_item
+ *
+ * @author ${context.author}
+ * @date 2024-01-29 13:40:49
+ */
+@ApiModel(value = "PatrolGroupItem对象" , description = "巡查指标项目")
+@Data
+@TableName("jczz_patrol_group_item")
+public class PatrolGroupItem implements Serializable
+{
+	private static final long serialVersionUID = 1L;
+
+
+	/** 主键 */
+	@ApiModelProperty(value = "主键ID", example = "")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/** 内容组id */
+	@ApiModelProperty(value = "内容组id", example = "")
+	@TableField("group_id")
+	private Integer groupId;
+
+	/** 名称 */
+	@ApiModelProperty(value = "名称", example = "")
+	@TableField("items_name")
+	private String itemsName;
+
+	/** 名称说明 */
+	@ApiModelProperty(value = "名称说明", example = "")
+	@TableField("description")
+	private String description;
+
+	/** 创建人 */
+	@ApiModelProperty(value = "创建人", example = "")
+	@TableField("create_user")
+	private Long createUser;
+
+	/** 创建时间 */
+	@ApiModelProperty(value = "创建时间", example = "")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	@TableField("create_time")
+	private Date createTime;
+
+	/** 修改时间 */
+	@ApiModelProperty(value = "修改时间", example = "")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	@TableField("update_time")
+	private Date updateTime;
+
+	/** 是否已删除 0: 否 1:是 */
+	@ApiModelProperty(value = "是否已删除 0: 否 1:是", example = "")
+	@TableField("is_deleted")
+	private Integer isDeleted;
+}
diff --git a/src/main/java/org/springblade/modules/patrol/entity/PatrolRecord.java b/src/main/java/org/springblade/modules/patrol/entity/PatrolRecord.java
new file mode 100644
index 0000000..4c62bc2
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/entity/PatrolRecord.java
@@ -0,0 +1,75 @@
+package org.springblade.modules.patrol.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 巡查记录表对象 jczz_patrol_record
+ *
+ * @author ${context.author}
+ * @date 2024-01-29 13:40:49
+ */
+@ApiModel(value = "PatrolRecord对象" , description = "巡查记录表")
+@Data
+@TableName("jczz_patrol_record")
+public class PatrolRecord implements Serializable
+{
+	private static final long serialVersionUID = 1L;
+
+
+
+	/** 主键 */
+	@ApiModelProperty(value = "主键ID", example = "")
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/** 内容项id */
+	@ApiModelProperty(value = "内容项id", example = "")
+	@TableField("item_id")
+	private Integer itemId;
+
+	/** 场所检查id */
+	@ApiModelProperty(value = "场所检查id", example = "")
+	@TableField("place_check_id")
+	private Long placeCheckId;
+
+	/** 是否存在隐患 0:存在 1 不存在 */
+	@ApiModelProperty(value = "是否存在隐患 0:存在 1 不存在", example = "")
+	@TableField("state")
+	private Integer state;
+
+	/** 备注 */
+	@ApiModelProperty(value = "备注", example = "")
+	@TableField("remark")
+	private String remark;
+
+	/** 照片 */
+	@ApiModelProperty(value = "照片", example = "")
+	@TableField("image_urls")
+	private String imageUrls;
+
+	/** 创建人 */
+	@ApiModelProperty(value = "创建人", example = "")
+	@TableField("create_user")
+	private Long createUser;
+
+	/** 修改时间 */
+	@ApiModelProperty(value = "修改时间", example = "")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	@TableField("create_time")
+	private Date createTime;
+
+	/** 是否删除 0: 否 1:是 */
+	@ApiModelProperty(value = "是否删除 0: 否 1:是", example = "")
+	@TableField("is_deleted")
+	private Integer isDeleted;
+}
diff --git a/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupItemMapper.java b/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupItemMapper.java
new file mode 100644
index 0000000..39e23d9
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupItemMapper.java
@@ -0,0 +1,21 @@
+package org.springblade.modules.patrol.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.patrol.entity.PatrolGroupItem;
+import org.springblade.modules.patrol.vo.PatrolGroupItemVO;
+
+import java.util.List;
+
+/**
+ * @Description: 巡查指标项目
+ */
+public interface PatrolGroupItemMapper extends BaseMapper<PatrolGroupItem> {
+
+    List<PatrolGroupItemVO> selectPatrolGroupItemList(@Param("patrolGroupItem") PatrolGroupItemVO patrolGroupItem);
+
+    PatrolGroupItemVO getPatrolGroupItemVOById(@Param("id") Long id);
+
+	List<PatrolGroupItem> getItemByItemIds(@Param("itemIds") String itemIds, @Param("groupId") String groupId);
+}
diff --git a/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupItemMapper.xml b/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupItemMapper.xml
new file mode 100644
index 0000000..e5b09f1
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupItemMapper.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.patrol.mapper.PatrolGroupItemMapper">
+
+    <select id="selectPatrolGroupItemList" resultType="org.springblade.modules.patrol.vo.PatrolGroupItemVO">
+        SELECT
+            spgi.id,spgi.group_id,spgi.items_name,spgi.description,
+            spg.name as groupName
+        FROM jczz_patrol_group_ITEM spgi
+        left join jczz_patrol_group spg on spg.id = spgi.group_id
+        WHERE spgi.is_deleted = 0
+        <if test="patrolGroupItem.groupId != null and patrolGroupItem.groupId != '' ">
+            and spgi.group_id = #{patrolGroupItem.groupId}
+        </if>
+        <if test="patrolGroupItem.itemsName !=null and patrolGroupItem.itemsName !=''">
+            AND spgi.items_name LIKE CONCAT('%',#{patrolGroupItem.itemsName},'%')
+        </if>
+        <if test="patrolGroupItem.description !=null and patrolGroupItem.description !=''">
+            AND spgi.description LIKE CONCAT('%',#{patrolGroupItem.description},'%')
+        </if>
+    </select>
+    <select id="getPatrolGroupItemVOById" resultType="org.springblade.modules.patrol.vo.PatrolGroupItemVO">
+        SELECT item.id,item.items_name,item.description,item.group_id,b.name groupName
+        FROM jczz_patrol_group_item item
+        LEFT JOIN sm_patrol_group b ON b.id = item.group_id
+        WHERE item.is_deleted = 0
+        AND item.id = #{id}
+    </select>
+    <select id="getItemByItemIds" resultType="org.springblade.modules.patrol.entity.PatrolGroupItem">
+        SELECT ID,GROUP_ID,ITEMS_NAME,DESCRIPTION FROM jczz_patrol_group_ITEM
+        WHERE ID IN
+        <foreach collection="itemIds.split(',')" item="item" index="index" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        AND is_deleted = 0 AND group_id = #{groupId}
+    </select>
+
+<!--    <resultMap type="org.springblade.modules.dto.PatrolGroupDTO" id="PatrolGroupDTOResult">-->
+<!--        <result property="id"    column="id"    />-->
+<!--        <result property="name"    column="name"    />-->
+<!--        <result property="createUser"    column="create_user"    />-->
+<!--        <result property="createTime"    column="create_time"    />-->
+<!--        <result property="updateTime"    column="update_time"    />-->
+<!--        <result property="isDeleted"    column="is_deleted"    />-->
+<!--    </resultMap>-->
+
+    <sql id="selectPatrolGroup">
+    	select
+	        id,
+	        name,
+	        create_user,
+	        create_time,
+	        update_time,
+	        is_deleted
+		from
+        	jczz_patrol_group
+    </sql>
+
+<!--    <select id="selectPatrolGroupById" parameterType="long" resultMap="PatrolGroupDTOResult">-->
+<!--        <include refid="selectPatrolGroup"/>-->
+<!--        where-->
+<!--        id = #{id}-->
+<!--    </select>-->
+
+<!--    <select id="selectPatrolGroupList" parameterType="org.springblade.modules.dto.PatrolGroupDTO" resultMap="PatrolGroupDTOResult">-->
+<!--        <include refid="selectPatrolGroup"/>-->
+<!--        <where>-->
+<!--            <if test="id != null "> and id = #{id}</if>-->
+<!--            <if test="name != null  and name != ''"> and name = #{name}</if>-->
+<!--            <if test="createUser != null "> and create_user = #{createUser}</if>-->
+<!--            <if test="createTime != null "> and create_time = #{createTime}</if>-->
+<!--            <if test="updateTime != null "> and update_time = #{updateTime}</if>-->
+<!--            <if test="isDeleted != null "> and is_deleted = #{isDeleted}</if>-->
+<!--        </where>-->
+<!--    </select>-->
+
+</mapper>
diff --git a/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupMapper.java b/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupMapper.java
new file mode 100644
index 0000000..b612278
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupMapper.java
@@ -0,0 +1,41 @@
+package org.springblade.modules.patrol.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.modules.patrol.dto.PatrolGroupDTO;
+import org.springblade.modules.patrol.entity.PatrolGroup;
+import org.springblade.modules.patrol.vo.PatrolGroupVO;
+
+import java.util.List;
+
+/**
+ * @Description: 巡查指标组
+ */
+public interface PatrolGroupMapper extends BaseMapper<PatrolGroup> {
+
+	List<PatrolGroup> getPatrolGroupByProjectId(@Param("projectId") String projectId);
+
+	/**
+	 * 查询巡查项树数据
+	 * @return
+	 */
+    List<TreeNode> getPatrolGroupTree();
+
+	/**
+	 * 查询巡查项树数据
+	 * @return
+	 */
+	List<TreeNode> getPatrolGroupItemTree();
+
+    List<PatrolGroup> getPatrolGroupByItemId(@Param("itemIds") String itemIds);
+
+	List<PatrolGroupVO> getAllPatrolGroupByTaskId(@Param("taskId") String taskId);
+
+    List<PatrolGroupDTO> getPatrolGroupDTO(@Param("taskId") String taskId);
+
+	List<PatrolGroup> getPatrolGroupByTaskId(String taskId);
+
+	List<PatrolGroupDTO> getGroupDTORecord(@Param("taskId")String taskId);
+}
diff --git a/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupMapper.xml b/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupMapper.xml
new file mode 100644
index 0000000..85450d6
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/mapper/PatrolGroupMapper.xml
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.patrol.mapper.PatrolGroupMapper">
+
+    <select id="getPatrolGroupByProjectId" resultType="org.springblade.modules.patrol.entity.PatrolGroup">
+        SELECT g.id,g.name
+        FROM jczz_patrol_group g
+        WHERE g.is_deleted = 0
+        AND g.project_id = #{projectId}
+    </select>
+
+    <!--查询巡查项树数据-->
+<!--    <select id="getPatrolGroupTree" resultType="org.springblade.core.tool.node.TreeNode" >-->
+<!--        (-->
+<!--        SELECT-->
+<!--        spg.id,-->
+<!--        spg.name,-->
+<!--        0 as parentId,-->
+<!--        (-->
+<!--            SELECT-->
+<!--                CASE WHEN count(1) > 0 THEN 1 ELSE 0 END-->
+<!--            FROM-->
+<!--                jczz_patrol_group_item-->
+<!--            WHERE-->
+<!--                group_id = spg.id and is_deleted = 0-->
+<!--        ) AS "has_children"-->
+<!--        FROM jczz_patrol_group spg where spg.is_deleted = 0-->
+<!--        )-->
+<!--        union all-->
+<!--        (-->
+<!--        SELECT-->
+<!--        spgi.id,-->
+<!--        spgi.items_name as name,-->
+<!--        spgi.group_id as parentId,-->
+<!--        false AS hasChildren-->
+<!--        FROM jczz_patrol_group_item spgi where spgi.is_deleted = 0-->
+<!--        )-->
+<!--    </select>-->
+
+
+    <!--查询巡查项树数据-->
+    <select id="getPatrolGroupTree" resultType="org.springblade.core.tool.node.TreeNode" >
+        SELECT
+        spg.id,
+        spg.name as title,
+        0 as parentId,
+        (
+            SELECT
+                CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+            FROM
+                jczz_patrol_group_item
+            WHERE
+                group_id = spg.id and is_deleted = 0
+        ) AS "has_children"
+        FROM jczz_patrol_group spg where spg.is_deleted = 0
+    </select>
+
+    <!--查询巡查项树数据-->
+    <select id="getPatrolGroupItemTree" resultType="org.springblade.core.tool.node.TreeNode" >
+        SELECT
+            spgi.id,
+            spgi.items_name as title,
+            spgi.group_id as parentId,
+            false AS hasChildren
+        FROM jczz_patrol_group_item spgi where spgi.is_deleted = 0
+    </select>
+    <select id="getPatrolGroupByItemId" resultType="org.springblade.modules.patrol.entity.PatrolGroup">
+        SELECT distinct b.ID,b.NAME FROM
+        (
+            SELECT ID,GROUP_ID FROM SM_PATROL_GROUP_ITEM WHERE ID IN
+            <foreach collection="itemIds.split(',')" item="item" index="index" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        ) a ,SM_PATROL_GROUP b
+        WHERE b.is_deleted = 0 AND a.group_id = b.id
+    </select>
+    <select id="getAllPatrolGroupByTaskId" resultType="org.springblade.modules.patrol.vo.PatrolGroupVO">
+        SELECT G.*,IF(C.GROUP_ID,1,2) isSelect,IFNULL(C.problemCount,0) problemCount  FROM SM_PATROL_GROUP G
+        LEFT JOIN (
+            <!--获取巡查记录表中的已选项,并获取问题数量-->
+            SELECT DISTINCT I.GROUP_ID,D.problemCount FROM SM_PATROL_RECORD R
+            INNER JOIN SM_PATROL_GROUP_ITEM I ON R.ITEM_ID = I.ID
+            LEFT JOIN (
+                SELECT I.GROUP_ID,COUNT(*) problemCount FROM SM_PATROL_RECORD R
+                INNER JOIN SM_PATROL_GROUP_ITEM I ON R.ITEM_ID = I.ID
+                WHERE R.IS_DELETED = 0 AND R.TASK_ID = #{taskId}
+                AND R.STATUS = 2
+                AND R.SOLUTION = 2
+                AND R.state = 0
+                GROUP BY I.GROUP_ID
+            )D ON D.GROUP_ID = I.GROUP_ID
+            WHERE R.IS_DELETED = 0 AND R.TASK_ID = #{taskId}
+        )C ON C.GROUP_ID = G.ID
+        WHERE IS_DELETED = 0
+        ORDER BY G.CREATE_TIME
+    </select>
+
+    <resultMap id="patrolGroupDTO" type="org.springblade.modules.patrol.dto.PatrolGroupDTO">
+        <id property="id" column="id"/>
+        <result property="name" column="gname"/>
+        <collection property="patrolRecordVOList" javaType="java.util.List" ofType="org.springblade.modules.patrol.vo.PatrolRecordVO">
+            <result property="id" column="rId"/>
+            <result property="videos" column="videos" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+            <result property="images" column="images" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+            <result property="status" column="status"/>
+            <result property="isDeleted" column="isDeleted"/>
+            <result property="itemId" column="itemId"/>
+            <result property="itemsName" column="itemsName"/>
+            <result property="taskId" column="taskId"/>
+            <result property="solution" column="solution"/>
+            <result property="content" column="content"/>
+        </collection>
+    </resultMap>
+
+
+    <select id="getPatrolGroupDTO" resultMap="patrolGroupDTO">
+       SELECT G.ID,
+              G.NAME AS gname,
+             R.ID AS rId,
+              R.VIDEOS,
+              R.IMAGES,
+              R.STATUS,
+              R.IS_DELETED,
+              R.ITEM_ID  AS itemId,
+        I.ITEMS_NAME AS itemsName,
+              R.TASK_ID AS taskId ,
+              R.SOLUTION,
+              R.CONTENT
+       FROM SM_PATROL_GROUP G
+       LEFT JOIN SM_PATROL_GROUP_ITEM I ON I.GROUP_ID = G.ID
+       LEFT JOIN SM_PATROL_RECORD R ON R.ITEM_ID = I.ID
+       WHERE G.IS_DELETED = 0
+       AND R.STATUS = 2 AND R.state = 0 AND R.SOLUTION = 2
+       AND R.TASK_ID = #{taskId}
+    </select>
+
+
+    <select id="getPatrolGroupByTaskId" resultType="org.springblade.modules.patrol.entity.PatrolGroup">
+       SELECT G.ID,G.NAME FROM SM_PATROL_GROUP G
+       LEFT JOIN SM_PATROL_GROUP_ITEM I ON I.GROUP_ID = G.ID
+       LEFT JOIN SM_PATROL_REPORT R ON R.ITEM_ID = I.ID
+       WHERE G.IS_DELETED = 0
+       AND R.STATUS = 2
+       AND R.TASK_ID = #{taskId}
+    </select>
+    <select id="getGroupDTORecord" resultMap="patrolGroupDTO">
+        SELECT G.ID,
+               G.NAME AS gname,
+               R.ID AS rId,
+               R.VIDEOS,
+               R.IMAGES,
+               R.STATUS,
+               R.IS_DELETED,
+               R.ITEM_ID  AS itemId,
+               I.ITEMS_NAME AS itemsName,
+               R.TASK_ID AS taskId ,
+               R.SOLUTION,
+               R.CONTENT
+        FROM SM_PATROL_GROUP G
+                 LEFT JOIN SM_PATROL_GROUP_ITEM I ON I.GROUP_ID = G.ID
+                 LEFT JOIN SM_PATROL_RECORD R ON R.ITEM_ID = I.ID
+        WHERE G.IS_DELETED = 0
+          AND R.STATUS = 2
+          AND R.TASK_ID = #{taskId}
+    </select>
+
+
+<!--    <resultMap type="org.springblade.modules.dto.PatrolGroupItemDTO" id="PatrolGroupItemDTOResult">-->
+<!--        <result property="id"    column="id"    />-->
+<!--        <result property="groupId"    column="group_id"    />-->
+<!--        <result property="itemsName"    column="items_name"    />-->
+<!--        <result property="description"    column="description"    />-->
+<!--        <result property="createUser"    column="create_user"    />-->
+<!--        <result property="createTime"    column="create_time"    />-->
+<!--        <result property="updateTime"    column="update_time"    />-->
+<!--        <result property="isDeleted"    column="is_deleted"    />-->
+<!--    </resultMap>-->
+
+    <sql id="selectPatrolGroupItem">
+    	select
+	        id,
+	        group_id,
+	        items_name,
+	        description,
+	        create_user,
+	        create_time,
+	        update_time,
+	        is_deleted
+		from
+        	jczz_patrol_group_item
+    </sql>
+
+<!--    <select id="selectPatrolGroupItemById" parameterType="long" resultMap="PatrolGroupItemDTOResult">-->
+<!--        <include refid="selectPatrolGroupItem"/>-->
+<!--        where-->
+<!--        id = #{id}-->
+<!--    </select>-->
+
+<!--    <select id="selectPatrolGroupItemList" parameterType="org.springblade.modules.dto.PatrolGroupItemDTO" resultMap="PatrolGroupItemDTOResult">-->
+<!--        <include refid="selectPatrolGroupItem"/>-->
+<!--        <where>-->
+<!--            <if test="id != null "> and id = #{id}</if>-->
+<!--            <if test="groupId != null "> and group_id = #{groupId}</if>-->
+<!--            <if test="itemsName != null  and itemsName != ''"> and items_name = #{itemsName}</if>-->
+<!--            <if test="description != null  and description != ''"> and description = #{description}</if>-->
+<!--            <if test="createUser != null "> and create_user = #{createUser}</if>-->
+<!--            <if test="createTime != null "> and create_time = #{createTime}</if>-->
+<!--            <if test="updateTime != null "> and update_time = #{updateTime}</if>-->
+<!--            <if test="isDeleted != null "> and is_deleted = #{isDeleted}</if>-->
+<!--        </where>-->
+<!--    </select>-->
+</mapper>
diff --git a/src/main/java/org/springblade/modules/patrol/mapper/PatrolRecordMapper.java b/src/main/java/org/springblade/modules/patrol/mapper/PatrolRecordMapper.java
new file mode 100644
index 0000000..fa5e3ce
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/mapper/PatrolRecordMapper.java
@@ -0,0 +1,27 @@
+package org.springblade.modules.patrol.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.patrol.dto.PatrolGroupDTO;
+import org.springblade.modules.patrol.entity.PatrolRecord;
+import org.springblade.modules.patrol.vo.PatrolRecordVO;
+
+import java.util.List;
+
+public interface PatrolRecordMapper extends BaseMapper<PatrolRecord> {
+	List<PatrolRecord> selectPatrolRecord(IPage<PatrolRecord> page, @Param("patrolRecord") PatrolRecordVO patrolRecord);
+
+	PatrolRecordVO getDetail(@Param("id") String id);
+
+    PatrolRecord selectPatrolRecordByTaskIdAndItemId(@Param("taskId") String taskId, @Param("itemId") Long itemId);
+
+	List<PatrolRecordVO> getByTaskIdAndItemId(@Param("taskId") String taskId, @Param("itemIds") String itemIds);
+
+	PatrolRecordVO getPatrolRecordVO(@Param("itemId") Long itemId, @Param("taskId") String taskId);
+
+    List<PatrolRecord> getByTaskIdAndGroupId(@Param("vo") PatrolRecordVO patrolRecordVO);
+
+    List<PatrolGroupDTO> getHistoryRecord(@Param("vo") PatrolRecordVO patrolRecordVO);
+}
diff --git a/src/main/java/org/springblade/modules/patrol/mapper/PatrolRecordMapper.xml b/src/main/java/org/springblade/modules/patrol/mapper/PatrolRecordMapper.xml
new file mode 100644
index 0000000..c0e6225
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/mapper/PatrolRecordMapper.xml
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.patrol.mapper.PatrolRecordMapper">
+
+    <resultMap id="selectPatrolRecordList" type="org.springblade.modules.patrol.vo.PatrolRecordVO">
+        <result column="id" property="id"/>
+        <result column="patrol_type" property="patrolType"/>
+        <result column="device_ids" property="deviceIds"/>
+        <result column="images" property="images"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="videos" property="videos"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="content" property="content"/>
+        <result column="status" property="status"/>
+        <result column="item_id" property="itemId"/>
+        <result column="task_id" property="taskId"/>
+        <result column="patrol_route" property="patrolRoute"/>
+        <result column="taskRoute" property="taskRoute"/>
+        <result property="groupName" column="groupName"/>
+        <result property="groupId" column="groupId"/>
+        <result property="itemsName" column="itemsName"/>
+        <result property="description" column="description"/>
+        <result property="patrolTime" column="update_time"/>
+        <result property="phone" column="phone"/>
+        <result property="toUserId" column="create_user"/>
+        <result property="toUserName" column="real_name"/>
+        <result property="taskName" column="taskName"/>
+
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+
+        <result column="update_time" property="updateTime"/>
+
+    </resultMap>
+
+    <select id="selectPatrolRecord" resultMap="selectPatrolRecordList">
+        SELECT
+        record.id,record.patrol_type,record.device_ids,record.images,record.videos,record.content,record.status,record.item_id,record.task_id,record.patrol_route,record.create_time,record.update_time,record.solution,
+        task.route_coordinates taskRoute,task.title taskName,
+        item.items_name itemsName,item.description,
+        u.real_name,res."name" resName,res."guid" resGuid,res."res_reg_code" resRegCode,res."res_loc" resLoc
+        FROM SM_PATROL_RECORD record
+        LEFT JOIN sm_patrol_type type ON type.id = record.patrol_type
+        LEFT JOIN sm_patrol_task task ON task.id = record.task_id
+        LEFT JOIN sjzt_md."att_res_base" res ON task.project_id = res."guid"
+        LEFT JOIN jczz_patrol_group_item item ON item.id = record.item_id
+        LEFT JOIN BLADE_USER u ON u.id = record.create_user
+        WHERE record.is_deleted = 0
+        <if test="patrolRecord.status !=null and patrolRecord.status != '' ">
+            AND record.status = #{patrolRecord.status}
+        </if>
+        <if test="patrolRecord.patrolType !=null and patrolRecord.patrolType !=''">
+            AND record.patrolType = #{patrolRecord.patrolType}
+        </if>
+        <if test="patrolRecord.taskId !=null and patrolRecord.taskId !=''">
+            AND record.task_id = #{patrolRecord.taskId}
+        </if>
+        <if test="patrolRecord.resName != null and patrolRecord.resName !=''">
+            AND res."name" LIKE CONCAT('%',#{patrolRecord.resName},'%')
+        </if>
+        ORDER BY record.create_time DESC
+    </select>
+    <select id="getDetail" resultMap="selectPatrolRecordList">
+        SELECT
+            record.id,record.patrol_type,record.images,record.videos,record.content,record.status,record.item_id,record.content,record.task_id,record.patrol_route,record.create_user,record.solution,
+            item.description,
+            u.phone
+        FROM SM_PATROL_RECORD record
+        LEFT JOIN sm_patrol_type type ON type.id = record.patrol_type
+        LEFT JOIN sm_patrol_task task ON task.id = record.task_id
+        LEFT JOIN jczz_patrol_group_item item ON item.id = record.item_id
+        LEFT JOIN BLADE_USER u ON u.id = record.create_user
+        WHERE record.is_deleted = 0
+        AND record.id =#{id}
+    </select>
+    <select id="selectPatrolRecordByTaskIdAndItemId" resultType="org.springblade.modules.patrol.entity.PatrolRecord">
+        SELECT id FROM sm_patrol_record WHERE is_deleted = 0 AND task_id = #{taskId} AND item_id = #{itemId}
+    </select>
+
+    <select id="getByTaskIdAndItemId" resultMap="selectPatrolRecordList">
+        SELECT r.id,r.patrol_type,r.device_ids,r.images,r.videos,r.content,r.status,r.item_id,r.task_id,r.update_time,r.solution,
+        c.name groupName,c.id groupId,c.items_name itemsName,c.description,
+        u.real_name
+        FROM SM_PATROL_RECORD r
+        LEFT JOIN
+        (SELECT g.ID,g.NAME,a.id itemId, a.items_name,description FROM
+        (
+        SELECT ID,GROUP_ID,items_name,description FROM SM_PATROL_GROUP_ITEM WHERE ID IN
+        <foreach collection="itemIds.split(',')" item="item" index="index" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        ) a ,SM_PATROL_GROUP g
+        WHERE g.is_deleted = 0 AND a.group_id = g.id) c
+
+        ON c.itemId = r.item_id
+        LEFT JOIN SM_PATROL_TASK t ON t.id = r.task_id
+        LEFT JOIN BLADE_USER u ON u.id = r.create_user
+        where r.task_id = #{taskId}
+    </select>
+    <select id="getPatrolRecordVO" resultMap="selectPatrolRecordList">
+        SELECT r.id,r.patrol_type,r.device_ids,r.images,r.videos,r.content,r.status,r.item_id,r.task_id,r.create_user,r.create_dept,r.solution,
+        i.items_name itemsName,i.description
+        FROM sm_patrol_record r
+        LEFT JOIN jczz_patrol_group_item i ON i.id = r.item_id
+        WHERE r.is_deleted = 0
+        AND r.item_id = #{itemId}
+        AND r.task_id = #{taskId}
+    </select>
+    <select id="getByTaskIdAndGroupId" resultMap="selectPatrolRecordList">
+        SELECT
+               c.group_id AS groupId,
+               r.id,
+               r.patrol_type,
+               r.device_ids,
+               r.images,
+               r.videos,
+               r.content,
+               r.status,
+               r.item_id,
+               r.task_id,
+               r.create_user,
+               r.create_dept,
+               r.solution,
+                C.items_name AS itemsName,
+               C.description
+        FROM SM_PATROL_RECORD r
+        RIGHT JOIN (
+         SELECT B.ID,B.GROUP_ID,B.ITEMS_NAME,B.DESCRIPTION
+         FROM SM_PATROL_GROUP A
+         INNER JOIN SM_PATROL_GROUP_ITEM B ON A.ID = B.GROUP_ID
+         WHERE  1=1
+         <if test="vo.groupId != null and vo.groupId !=''">
+            AND  B.GROUP_ID = #{vo.groupId}
+         </if>
+         ORDER BY B.GROUP_ID
+        )C ON C.ID = r.ITEM_ID
+        WHERE  r.state = 0
+        <if test="vo.taskId != null and vo.taskId !=''">
+           AND r.task_id = #{vo.taskId}
+        </if>
+        <if test="vo.flowTaskId != null and vo.flowTaskId !=''">
+            AND r.flow_task_id = #{vo.flowTaskId}
+        </if>
+    </select>
+
+    <resultMap id="patrolGroupDTO" type="org.springblade.modules.patrol.dto.PatrolGroupDTO">
+        <id property="id" column="id"/>
+        <result property="name" column="gname"/>
+        <collection property="patrolRecordVOList" javaType="java.util.List" ofType="org.springblade.modules.patrol.vo.PatrolRecordVO">
+            <result property="id" column="rId"/>
+            <result property="videos" column="videos" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+            <result property="images" column="images" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+            <result property="status" column="status"/>
+            <result property="isDeleted" column="isDeleted"/>
+            <result property="itemId" column="itemId"/>
+            <result property="itemsName" column="itemsName"/>
+            <result property="taskId" column="taskId"/>
+            <result property="solution" column="solution"/>
+            <result property="content" column="content"/>
+        </collection>
+    </resultMap>
+
+    <select id="getHistoryRecord" resultMap="patrolGroupDTO">
+
+        SELECT G.ID,
+               G.NAME AS gname,
+               R.ID AS rId,
+               R.VIDEOS,
+               R.IMAGES,
+               R.STATUS,
+               R.IS_DELETED,
+               R.ITEM_ID  AS itemId,
+               I.ITEMS_NAME AS itemsName,
+               R.TASK_ID AS taskId ,
+               R.SOLUTION,
+               R.CONTENT
+        FROM SM_PATROL_GROUP G
+                 LEFT JOIN SM_PATROL_GROUP_ITEM I ON I.GROUP_ID = G.ID
+                 LEFT JOIN SM_PATROL_RECORD R ON R.ITEM_ID = I.ID
+        WHERE G.IS_DELETED = 0
+          <if test="vo.flowTaskId != null and vo.flowTaskId !='' ">
+              AND R.FLOW_TASK_ID = #{vo.flowTaskId}
+          </if>
+         <if test="vo.taskId !=null and vo.taskId !='' ">
+             AND R.TASK_ID = #{vo.taskId}
+         </if>
+        <if test="vo.recordType !=null and vo.recordType !=''">
+            AND R.record_type = #{vo.recordType}
+        </if>
+
+    </select>
+
+
+
+<!--    <resultMap type="org.springblade.modules.dto.PatrolRecordDTO" id="PatrolRecordDTOResult">-->
+<!--        <result property="id"    column="id"    />-->
+<!--        <result property="itemId"    column="item_id"    />-->
+<!--        <result property="placeCheckId"    column="place_check_id"    />-->
+<!--        <result property="state"    column="state"    />-->
+<!--        <result property="remark"    column="remark"    />-->
+<!--        <result property="imageUrls"    column="image_urls"    />-->
+<!--        <result property="createUser"    column="create_user"    />-->
+<!--        <result property="createTime"    column="create_time"    />-->
+<!--        <result property="isDeleted"    column="is_deleted"    />-->
+<!--    </resultMap>-->
+
+    <sql id="selectPatrolRecord">
+    	select
+	        id,
+	        item_id,
+	        place_check_id,
+	        state,
+	        remark,
+	        image_urls,
+	        create_user,
+	        create_time,
+	        is_deleted
+		from
+        	jczz_patrol_record
+    </sql>
+
+<!--    <select id="selectPatrolRecordById" parameterType="long" resultMap="PatrolRecordDTOResult">-->
+<!--        <include refid="selectPatrolRecord"/>-->
+<!--        where-->
+<!--        id = #{id}-->
+<!--    </select>-->
+
+<!--    <select id="selectPatrolRecordList" parameterType="org.springblade.modules.dto.PatrolRecordDTO" resultMap="PatrolRecordDTOResult">-->
+<!--        <include refid="selectPatrolRecord"/>-->
+<!--        <where>-->
+<!--            <if test="id != null "> and id = #{id}</if>-->
+<!--            <if test="itemId != null "> and item_id = #{itemId}</if>-->
+<!--            <if test="placeCheckId != null "> and place_check_id = #{placeCheckId}</if>-->
+<!--            <if test="state != null "> and state = #{state}</if>-->
+<!--            <if test="remark != null  and remark != ''"> and remark = #{remark}</if>-->
+<!--            <if test="imageUrls != null  and imageUrls != ''"> and image_urls = #{imageUrls}</if>-->
+<!--            <if test="createUser != null "> and create_user = #{createUser}</if>-->
+<!--            <if test="createTime != null "> and create_time = #{createTime}</if>-->
+<!--            <if test="isDeleted != null "> and is_deleted = #{isDeleted}</if>-->
+<!--        </where>-->
+<!--    </select>-->
+
+
+</mapper>
diff --git a/src/main/java/org/springblade/modules/patrol/service/IPatrolGroupItemService.java b/src/main/java/org/springblade/modules/patrol/service/IPatrolGroupItemService.java
new file mode 100644
index 0000000..812289e
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/service/IPatrolGroupItemService.java
@@ -0,0 +1,45 @@
+package org.springblade.modules.patrol.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.patrol.entity.PatrolGroupItem;
+import org.springblade.modules.patrol.vo.PatrolGroupItemVO;
+
+import java.util.List;
+
+/**
+ * @Description: 巡查指标项目
+ */
+public interface IPatrolGroupItemService extends IService<PatrolGroupItem> {
+
+	/**
+	 * 查询全部
+	 * @param patrolGroupItem
+	 * @return
+	 */
+    List<PatrolGroupItemVO> selectPatrolGroupItemList(PatrolGroupItemVO patrolGroupItem);
+
+	/**
+	 * 自定义分页
+	 * @param page
+	 * @param patrolGroupItem
+	 * @return
+	 */
+	IPage<PatrolGroupItemVO> selectPatrolConfig(IPage<PatrolGroupItemVO> page, PatrolGroupItemVO patrolGroupItem);
+
+	/**
+	 * 获取vo数据
+	 * @param id
+	 * @return
+	 */
+    PatrolGroupItemVO getPatrolGroupItemVOById(Long id);
+
+	/**
+	 * 获取项集合
+	 * @param itemIds 指标项ids
+	 * @param groupId 组id
+	 * @return
+	 */
+	List<PatrolGroupItem> getItemByItemIds(String itemIds, String groupId);
+}
diff --git a/src/main/java/org/springblade/modules/patrol/service/IPatrolGroupService.java b/src/main/java/org/springblade/modules/patrol/service/IPatrolGroupService.java
new file mode 100644
index 0000000..6a2a5f3
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/service/IPatrolGroupService.java
@@ -0,0 +1,46 @@
+package org.springblade.modules.patrol.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.patrol.dto.PatrolGroupDTO;
+import org.springblade.modules.patrol.entity.PatrolGroup;
+import org.springblade.modules.patrol.vo.PatrolGroupVO;
+
+import java.util.List;
+
+/**
+ * @Description: 巡查指标组
+ */
+public interface IPatrolGroupService extends IService<PatrolGroup> {
+
+	/**
+	 * 自定义分页查询
+	 * @param page
+	 * @param patrolGroup
+	 * @return
+	 */
+	IPage<PatrolGroup> selectPatrolConfig(IPage<Object> page, PatrolGroup patrolGroup);
+
+	List<PatrolGroup> getPatrolGroupByProjectId(String projectId);
+
+	/**
+	 * 查询巡查项树数据
+	 * @return
+	 */
+    Object getPatrolGroupTree();
+
+	/**
+	 * 获取组
+	 * @param itemIds 项ids
+	 * @return
+	 */
+	List<PatrolGroup> getPatrolGroupByItemId(String itemIds);
+
+	List<PatrolGroupVO> getAllPatrolGroupByTaskId(String taskId);
+
+    List<PatrolGroupDTO> getPatrolGroupDTO(String taskId);
+
+	List<PatrolGroup> getPatrolGroupByTaskId(String taskId);
+
+	List<PatrolGroupDTO> getGroupDTORecord(String taskId);
+}
diff --git a/src/main/java/org/springblade/modules/patrol/service/IPatrolRecordService.java b/src/main/java/org/springblade/modules/patrol/service/IPatrolRecordService.java
new file mode 100644
index 0000000..d98414a
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/service/IPatrolRecordService.java
@@ -0,0 +1,58 @@
+package org.springblade.modules.patrol.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.patrol.dto.PatrolGroupDTO;
+import org.springblade.modules.patrol.entity.PatrolRecord;
+import org.springblade.modules.patrol.vo.PatrolGroupItemVO;
+import org.springblade.modules.patrol.vo.PatrolRecordVO;
+
+import java.util.List;
+
+public interface IPatrolRecordService extends IService<PatrolRecord> {
+	/**
+	 * 自定义分页查询
+	 * @param page
+	 * @param patrolRecord
+	 * @return
+	 */
+	IPage<PatrolRecord> selectPatrolRecord(IPage<PatrolRecord> page, PatrolRecordVO patrolRecord);
+
+	/**
+	 * 获取详情
+	 * @param id
+	 * @return
+	 */
+    PatrolRecordVO getDetail(String id);
+
+	/**
+	 * 根据任务id查询巡查记录表中的内容
+	 * @param taskId
+	 * @param itemIds
+	 * @return
+	 */
+	List<PatrolGroupItemVO> getPatrolRecordByTaskId(String taskId, String itemIds);
+
+	/**
+	 * 通过taskId,itemsIds查询(用来查询巡查记录)
+	 * @param taskId 任务id
+	 * @param itemIds 项ids
+	 * @return
+	 */
+	List<PatrolRecordVO> getByTaskIdAndItemId(String taskId, String itemIds);
+
+	/**
+	 * 用于app巡查上报
+	 * @param itemIds
+	 * @param groupId
+	 * @param taskId
+	 * @return
+	 */
+	List getItemByItemIds(String itemIds, String groupId, String taskId);
+
+	List<PatrolRecord> getByTaskIdAndGroupId(PatrolRecordVO patrolRecordVO);
+
+    // Boolean updateThenSaveBatch(RecordBatchVO recordBatchVO);
+
+	List<PatrolGroupDTO> getHistoryRecord(PatrolRecordVO patrolRecordVO);
+}
diff --git a/src/main/java/org/springblade/modules/patrol/service/impl/PatrolGroupItemServiceImpl.java b/src/main/java/org/springblade/modules/patrol/service/impl/PatrolGroupItemServiceImpl.java
new file mode 100644
index 0000000..b31d4fa
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/service/impl/PatrolGroupItemServiceImpl.java
@@ -0,0 +1,43 @@
+package org.springblade.modules.patrol.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springblade.modules.patrol.entity.PatrolGroupItem;
+import org.springblade.modules.patrol.mapper.PatrolGroupItemMapper;
+import org.springblade.modules.patrol.service.IPatrolGroupItemService;
+import org.springblade.modules.patrol.vo.PatrolGroupItemVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 巡查指标项目
+ */
+@Service
+@AllArgsConstructor
+public class PatrolGroupItemServiceImpl extends ServiceImpl<PatrolGroupItemMapper, PatrolGroupItem> implements IPatrolGroupItemService {
+
+	@Override
+	public List<PatrolGroupItemVO> selectPatrolGroupItemList(PatrolGroupItemVO patrolGroupItem) {
+		return baseMapper.selectPatrolGroupItemList(patrolGroupItem);
+	}
+
+	@Override
+	public IPage<PatrolGroupItemVO> selectPatrolConfig(IPage<PatrolGroupItemVO> page, PatrolGroupItemVO patrolGroupItem) {
+		return page.setRecords(baseMapper.selectPatrolGroupItemList(patrolGroupItem));
+	}
+
+	@Override
+	public PatrolGroupItemVO getPatrolGroupItemVOById(Long id) {
+		return baseMapper.getPatrolGroupItemVOById(id);
+	}
+
+	@Override
+	public List<PatrolGroupItem> getItemByItemIds(String itemIds, String groupId) {
+		return baseMapper.getItemByItemIds(itemIds,groupId);
+	}
+
+
+}
diff --git a/src/main/java/org/springblade/modules/patrol/service/impl/PatrolGroupServiceImpl.java b/src/main/java/org/springblade/modules/patrol/service/impl/PatrolGroupServiceImpl.java
new file mode 100644
index 0000000..3bcd5e4
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/service/impl/PatrolGroupServiceImpl.java
@@ -0,0 +1,71 @@
+package org.springblade.modules.patrol.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.common.utils.NodeTreeUtil;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.modules.patrol.dto.PatrolGroupDTO;
+import org.springblade.modules.patrol.entity.PatrolGroup;
+import org.springblade.modules.patrol.mapper.PatrolGroupMapper;
+import org.springblade.modules.patrol.service.IPatrolGroupService;
+import org.springblade.modules.patrol.vo.PatrolGroupVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 巡查指标组
+ */
+@Service
+public class PatrolGroupServiceImpl extends ServiceImpl<PatrolGroupMapper, PatrolGroup> implements IPatrolGroupService {
+
+	@Override
+	public IPage<PatrolGroup> selectPatrolConfig(IPage<Object> page, PatrolGroup patrolGroup) {
+		return null;
+	}
+
+	@Override
+	public List<PatrolGroup> getPatrolGroupByProjectId(String projectId) {
+		return baseMapper.getPatrolGroupByProjectId(projectId);
+	}
+
+	/**
+	 * 查询巡查项树数据
+	 * @return
+	 */
+	@Override
+	public Object getPatrolGroupTree() {
+		// 查询父树目录
+		List<TreeNode> patrolGroupTree = baseMapper.getPatrolGroupTree();
+		// 查询孩子树目录
+		List<TreeNode> patrolGroupItemTree = baseMapper.getPatrolGroupItemTree();
+		// 数据处理
+		return NodeTreeUtil.getNodeTree(patrolGroupTree,patrolGroupItemTree);
+	}
+
+	@Override
+	public List<PatrolGroup> getPatrolGroupByItemId(String itemIds) {
+		return baseMapper.getPatrolGroupByItemId(itemIds);
+	}
+
+	@Override
+	public List<PatrolGroupVO> getAllPatrolGroupByTaskId(String taskId) {
+		return baseMapper.getAllPatrolGroupByTaskId(taskId);
+	}
+
+	@Override
+	public List<PatrolGroupDTO> getPatrolGroupDTO(String taskId) {
+		return baseMapper.getPatrolGroupDTO(taskId);
+	}
+
+	@Override
+	public List<PatrolGroup> getPatrolGroupByTaskId(String taskId) {
+		return baseMapper.getPatrolGroupByTaskId(taskId);
+	}
+
+	@Override
+	public List<PatrolGroupDTO> getGroupDTORecord(String taskId) {
+		return baseMapper.getGroupDTORecord(taskId);
+	}
+}
diff --git a/src/main/java/org/springblade/modules/patrol/service/impl/PatrolRecordServiceImpl.java b/src/main/java/org/springblade/modules/patrol/service/impl/PatrolRecordServiceImpl.java
new file mode 100644
index 0000000..1fc1d0f
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/service/impl/PatrolRecordServiceImpl.java
@@ -0,0 +1,96 @@
+package org.springblade.modules.patrol.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.modules.patrol.dto.PatrolGroupDTO;
+import org.springblade.modules.patrol.entity.PatrolGroupItem;
+import org.springblade.modules.patrol.entity.PatrolRecord;
+import org.springblade.modules.patrol.mapper.PatrolRecordMapper;
+import org.springblade.modules.patrol.service.IPatrolGroupItemService;
+import org.springblade.modules.patrol.service.IPatrolRecordService;
+import org.springblade.modules.patrol.vo.PatrolGroupItemVO;
+import org.springblade.modules.patrol.vo.PatrolRecordVO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class PatrolRecordServiceImpl extends ServiceImpl<PatrolRecordMapper, PatrolRecord> implements IPatrolRecordService {
+	IPatrolGroupItemService patrolGroupItemService;
+
+	@Override
+	public IPage<PatrolRecord> selectPatrolRecord(IPage<PatrolRecord> page, PatrolRecordVO patrolRecord) {
+		return page.setRecords(baseMapper.selectPatrolRecord(page, patrolRecord));
+	}
+
+	@Override
+	public PatrolRecordVO getDetail(String id) {
+		return baseMapper.getDetail(id);
+	}
+
+	@Override
+	public List<PatrolGroupItemVO> getPatrolRecordByTaskId(String taskId, String itemIds) {
+		List<Long> longList = Func.toLongList(itemIds);
+		List<PatrolGroupItemVO> patrolGroupItemVOList = new ArrayList<>();
+		longList.forEach(e -> {
+			PatrolRecord patrolRecord = baseMapper.selectPatrolRecordByTaskIdAndItemId(taskId, e);
+			if (ObjectUtil.isEmpty(patrolRecord)) {
+				PatrolGroupItemVO patrolGroupItemVO = patrolGroupItemService.getPatrolGroupItemVOById(e);
+				patrolGroupItemVOList.add(patrolGroupItemVO);
+			}
+		});
+
+		return patrolGroupItemVOList;
+	}
+
+	@Override
+	public List<PatrolRecordVO> getByTaskIdAndItemId(String taskId, String itemIds) {
+		return baseMapper.getByTaskIdAndItemId(taskId, itemIds);
+	}
+
+	@Override
+	public List getItemByItemIds(String itemIds, String groupId, String taskId) {
+		List<PatrolGroupItem> itemList = patrolGroupItemService.getItemByItemIds(itemIds, groupId);
+		List<PatrolRecord> patrolRecordList = new ArrayList<>();
+		itemList.forEach(item -> {
+			PatrolRecordVO one = baseMapper.getPatrolRecordVO(item.getId(), taskId);
+			if (ObjectUtil.isNotEmpty(one)) {
+				patrolRecordList.add(one);
+			}
+		});
+
+		if (patrolRecordList.size() > 0) {
+			return patrolRecordList;
+		} else {
+			return itemList;
+		}
+	}
+
+	@Override
+	public List<PatrolRecord> getByTaskIdAndGroupId(PatrolRecordVO patrolRecordVO) {
+		return baseMapper.getByTaskIdAndGroupId(patrolRecordVO);
+	}
+
+	// @Override
+	// @Transactional(rollbackFor = Exception.class)
+	// public Boolean updateThenSaveBatch(RecordBatchVO recordBatchVO) {
+	//
+	//
+	// 	boolean b = updateBatchById(recordBatchVO.getUpdateList());
+	// 	boolean b1 = saveBatch(recordBatchVO.getAddList());
+	//
+	// 	return b && b1;
+	// }
+
+	@Override
+	public List<PatrolGroupDTO> getHistoryRecord(PatrolRecordVO patrolRecordVO) {
+		return baseMapper.getHistoryRecord(patrolRecordVO);
+	}
+}
diff --git a/src/main/java/org/springblade/modules/patrol/vo/PatrolGroupItemVO.java b/src/main/java/org/springblade/modules/patrol/vo/PatrolGroupItemVO.java
new file mode 100644
index 0000000..8b74544
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/vo/PatrolGroupItemVO.java
@@ -0,0 +1,18 @@
+package org.springblade.modules.patrol.vo;
+
+import lombok.Data;
+import org.springblade.modules.patrol.entity.PatrolGroupItem;
+
+/**
+ * 巡查组明细 vo
+ * @author zhongrj
+ * @date 2023-03-31
+ */
+@Data
+public class PatrolGroupItemVO extends PatrolGroupItem {
+
+	/**
+	 * 组名称
+	 */
+	private String groupName;
+}
diff --git a/src/main/java/org/springblade/modules/patrol/vo/PatrolGroupVO.java b/src/main/java/org/springblade/modules/patrol/vo/PatrolGroupVO.java
new file mode 100644
index 0000000..9fb7d37
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/vo/PatrolGroupVO.java
@@ -0,0 +1,22 @@
+package org.springblade.modules.patrol.vo;
+
+import lombok.Data;
+import org.springblade.modules.patrol.entity.PatrolGroup;
+
+/**
+ * 巡查组vo
+ */
+@Data
+public class PatrolGroupVO extends PatrolGroup {
+
+	/**
+	 * 是否在记录表中
+	 */
+	private String isSelect;
+
+	/**
+	 * 问题数量
+	 */
+	private Integer problemCount;
+
+}
diff --git a/src/main/java/org/springblade/modules/patrol/vo/PatrolRecordVO.java b/src/main/java/org/springblade/modules/patrol/vo/PatrolRecordVO.java
new file mode 100644
index 0000000..0599008
--- /dev/null
+++ b/src/main/java/org/springblade/modules/patrol/vo/PatrolRecordVO.java
@@ -0,0 +1,72 @@
+package org.springblade.modules.patrol.vo;
+
+import lombok.Data;
+import org.springblade.modules.patrol.entity.PatrolRecord;
+
+@Data
+public class PatrolRecordVO extends PatrolRecord {
+
+	/**
+	 * 任务巡查路线
+	 */
+	private String taskRoute;
+
+	/**
+	 * 组名称
+	 */
+	private String groupName;
+
+	/**
+	 * 组id
+	 */
+	private String groupId;
+
+	/**
+	 * 项名称
+	 */
+	private String itemsName;
+
+	/**
+	 * 项描述
+	 */
+	private String description;
+
+	/**
+	 * 巡查时间
+	 */
+	private String patrolTime;
+
+	/**
+	 * 巡查人id
+	 */
+	private String toUserId;
+	/**
+	 * 巡查人名
+	 */
+	private String toUserName;
+	/**
+	 * 联系方式
+	 */
+	private String phone;
+	/**
+	 * 任务名称
+	 */
+	private String taskName;
+
+	/**
+	 * 水库编码
+	 */
+	private String resGuid;
+	/**
+	 * 水库名称
+	 */
+	private String resName;
+	/**
+	 * 水库注册登记码
+	 */
+	private String resRegCode;
+	/**
+	 * 水库所在位置
+	 */
+	private String resLoc;
+}
diff --git a/src/main/java/org/springblade/modules/place/controller/PlaceCheckController.java b/src/main/java/org/springblade/modules/place/controller/PlaceCheckController.java
index ab07052..cdb9f7f 100644
--- a/src/main/java/org/springblade/modules/place/controller/PlaceCheckController.java
+++ b/src/main/java/org/springblade/modules/place/controller/PlaceCheckController.java
@@ -88,8 +88,8 @@
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "新增", notes = "传入placeCheck")
-	public R save(@Valid @RequestBody PlaceCheckEntity placeCheck) {
-		return R.status(placeCheckService.save(placeCheck));
+	public R save(@Valid @RequestBody PlaceCheckVO placeCheck) throws Exception {
+		return R.status(placeCheckService.savePlace(placeCheck));
 	}
 
 	/**
@@ -108,7 +108,7 @@
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入placeCheck")
-	public R submit(@Valid @RequestBody PlaceCheckEntity placeCheck) {
+	public R submit(@Valid @RequestBody PlaceCheckVO placeCheck) {
 		return R.status(placeCheckService.saveOrUpdate(placeCheck));
 	}
 
diff --git a/src/main/java/org/springblade/modules/place/entity/PlaceCheckEntity.java b/src/main/java/org/springblade/modules/place/entity/PlaceCheckEntity.java
index 0f82bcf..23e004b 100644
--- a/src/main/java/org/springblade/modules/place/entity/PlaceCheckEntity.java
+++ b/src/main/java/org/springblade/modules/place/entity/PlaceCheckEntity.java
@@ -42,57 +42,41 @@
 public class PlaceCheckEntity implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-	/**
-	 * 主键
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty("主键id")
+
+	/** 主键id */
+	@ApiModelProperty(value = "主键ID", example = "")
 	@TableId(value = "id", type = IdType.ASSIGN_ID)
 	private Long id;
 
-	/**
-	 * 门牌地址编码
-	 */
-	@ApiModelProperty(value = "门牌地址编码")
+	/** 门牌地址编码 */
+	@ApiModelProperty(value = "门牌地址编码", example = "")
+	@TableField("house_code")
 	private String houseCode;
-	/**
-	 * 备注
-	 */
-	@ApiModelProperty(value = "备注")
+
+	/** 其他隐患问题 */
+	@ApiModelProperty(value = "其他隐患问题", example = "")
+	@TableField("remark")
 	private String remark;
-	/**
-	 * 照片
-	 */
-	@ApiModelProperty(value = "照片")
-	private String imageUrls;
-	/**
-	 * 签名路径
-	 */
-	@ApiModelProperty(value = "签名路径")
+
+	/** 签名路径 */
+	@ApiModelProperty(value = "签名路径", example = "")
+	@TableField("signature_path")
 	private String signaturePath;
 
-	/**
-	 * 创建人
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	@ApiModelProperty("创建人")
-	@TableField(fill = FieldFill.INSERT)
+	/** 创建人 */
+	@ApiModelProperty(value = "创建人", example = "")
+	@TableField("create_user")
 	private Long createUser;
 
-	/**
-	 * 创建时间
-	 */
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	@ApiModelProperty("创建时间")
-	@TableField(fill = FieldFill.INSERT)
+	/** 创建时间 */
+	@ApiModelProperty(value = "创建时间", example = "")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	@TableField("create_time")
 	private Date createTime;
 
-	/**
-	 * 是否删除
-	 */
-	@TableLogic
-	@ApiModelProperty("是否已删除 0:否  1:是")
+	/** 是否删除 0:否  1:是 */
+	@ApiModelProperty(value = "是否删除 0:否  1:是", example = "")
+	@TableField("is_deleted")
 	private Integer isDeleted;
 
 }
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceCheckMapper.xml b/src/main/java/org/springblade/modules/place/mapper/PlaceCheckMapper.xml
index 3626570..6c8adfb 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceCheckMapper.xml
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceCheckMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="org.springblade.modules.place.mapper.PlaceCheckMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="placeCheckResultMap" type="org.springblade.modules.place.entity.PlaceCheckEntity">
+    <resultMap id="placeCheckResultMap" type="org.springblade.modules.place.vo.PlaceCheckVO">
         <result column="id" property="id"/>
         <result column="house_code" property="houseCode"/>
         <result column="remark" property="remark"/>
@@ -12,6 +12,12 @@
         <result column="create_user" property="createUser"/>
         <result column="create_time" property="createTime"/>
         <result column="is_deleted" property="isDeleted"/>
+
+        <collection property="patrolRecordVOList" column="id" select="selectTaskRepairStepList"
+                    javaType="java.util.List" ofType="org.springblade.modules.patrol.entity.PatrolRecord"
+                    autoMapping="true">
+            <id property="placeCheckId" column="id"/>
+        </collection>
     </resultMap>
 
     <!--自定义分页查询-->
@@ -29,4 +35,48 @@
     </select>
 
 
+<!--    <resultMap type="org.springblade.modules.dto.PlaceCheckDTO" id="PlaceCheckDTOResult">-->
+<!--        <result property="id"    column="id"    />-->
+<!--        <result property="houseCode"    column="house_code"    />-->
+<!--        <result property="remark"    column="remark"    />-->
+<!--        <result property="signaturePath"    column="signature_path"    />-->
+<!--        <result property="createUser"    column="create_user"    />-->
+<!--        <result property="createTime"    column="create_time"    />-->
+<!--        <result property="isDeleted"    column="is_deleted"    />-->
+<!--    </resultMap>-->
+
+    <sql id="selectPlaceCheck">
+    	select
+	        id,
+	        house_code,
+	        remark,
+	        signature_path,
+	        create_user,
+	        create_time,
+	        is_deleted
+		from
+        	jczz_place_check
+    </sql>
+
+<!--    <select id="selectPlaceCheckById" parameterType="long" resultMap="PlaceCheckDTOResult">-->
+<!--        <include refid="selectPlaceCheck"/>-->
+<!--        where-->
+<!--        id = #{id}-->
+<!--    </select>-->
+
+<!--    <select id="selectPlaceCheckList" parameterType="org.springblade.modules.dto.PlaceCheckDTO" resultMap="PlaceCheckDTOResult">-->
+<!--        <include refid="selectPlaceCheck"/>-->
+<!--        <where>-->
+<!--            <if test="id != null "> and id = #{id}</if>-->
+<!--            <if test="houseCode != null  and houseCode != ''"> and house_code = #{houseCode}</if>-->
+<!--            <if test="remark != null  and remark != ''"> and remark = #{remark}</if>-->
+<!--            <if test="signaturePath != null  and signaturePath != ''"> and signature_path = #{signaturePath}</if>-->
+<!--            <if test="createUser != null "> and create_user = #{createUser}</if>-->
+<!--            <if test="createTime != null "> and create_time = #{createTime}</if>-->
+<!--            <if test="isDeleted != null "> and is_deleted = #{isDeleted}</if>-->
+<!--        </where>-->
+<!--    </select>-->
+
+
+
 </mapper>
diff --git a/src/main/java/org/springblade/modules/place/service/IPlaceCheckService.java b/src/main/java/org/springblade/modules/place/service/IPlaceCheckService.java
index afd1da1..d8ad3f1 100644
--- a/src/main/java/org/springblade/modules/place/service/IPlaceCheckService.java
+++ b/src/main/java/org/springblade/modules/place/service/IPlaceCheckService.java
@@ -40,4 +40,5 @@
 	IPage<PlaceCheckVO> selectPlaceCheckPage(IPage<PlaceCheckVO> page, PlaceCheckVO placeCheck);
 
 
+    Boolean savePlace(PlaceCheckVO placeCheck) throws Exception;
 }
diff --git a/src/main/java/org/springblade/modules/place/service/impl/PlaceCheckServiceImpl.java b/src/main/java/org/springblade/modules/place/service/impl/PlaceCheckServiceImpl.java
index c33fdf7..66a937a 100644
--- a/src/main/java/org/springblade/modules/place/service/impl/PlaceCheckServiceImpl.java
+++ b/src/main/java/org/springblade/modules/place/service/impl/PlaceCheckServiceImpl.java
@@ -17,6 +17,9 @@
 package org.springblade.modules.place.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.modules.patrol.entity.PatrolRecord;
+import org.springblade.modules.patrol.service.IPatrolRecordService;
 import org.springblade.modules.place.entity.PlaceCheckEntity;
 import org.springblade.modules.place.vo.PlaceCheckVO;
 import org.springblade.modules.place.mapper.PlaceCheckMapper;
@@ -24,6 +27,10 @@
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 场所检查表 服务实现类
@@ -39,5 +46,22 @@
 		return page.setRecords(baseMapper.selectPlaceCheckPage(page, placeCheck));
 	}
 
-
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Boolean savePlace(PlaceCheckVO placeCheck) throws Exception {
+		boolean save = save(placeCheck);
+		if (save) {
+			IPatrolRecordService bean = SpringUtil.getBean(IPatrolRecordService.class);
+			List<PatrolRecord> patrolRecordVOList = placeCheck.getPatrolRecordVOList();
+			patrolRecordVOList.stream().forEach(item -> {
+				item.setPlaceCheckId(placeCheck.getId());
+			});
+			boolean b = bean.saveBatch(placeCheck.getPatrolRecordVOList());
+			if (b) {
+				return b;
+			}
+			throw new Exception("保存失败!");
+		}
+		return false;
+	}
 }
diff --git a/src/main/java/org/springblade/modules/place/vo/PlaceCheckVO.java b/src/main/java/org/springblade/modules/place/vo/PlaceCheckVO.java
index dbcf011..01e6168 100644
--- a/src/main/java/org/springblade/modules/place/vo/PlaceCheckVO.java
+++ b/src/main/java/org/springblade/modules/place/vo/PlaceCheckVO.java
@@ -16,10 +16,16 @@
  */
 package org.springblade.modules.place.vo;
 
+import liquibase.pro.packaged.P;
+import org.springblade.modules.grid.entity.GridPatrolRecordEntity;
+import org.springblade.modules.patrol.entity.PatrolRecord;
+import org.springblade.modules.patrol.vo.PatrolRecordVO;
 import org.springblade.modules.place.entity.PlaceCheckEntity;
 import org.springblade.core.tool.node.INode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+
+import java.util.List;
 
 /**
  * 场所检查表 视图实体类
@@ -42,4 +48,7 @@
 	 */
 	private String endTime;
 
+
+	private List<PatrolRecord> patrolRecordVOList;
+
 }
diff --git a/src/main/java/org/springblade/modules/task/mapper/TaskReportForRepairsMapper.xml b/src/main/java/org/springblade/modules/task/mapper/TaskReportForRepairsMapper.xml
index 32bbdde..e7b0ec4 100644
--- a/src/main/java/org/springblade/modules/task/mapper/TaskReportForRepairsMapper.xml
+++ b/src/main/java/org/springblade/modules/task/mapper/TaskReportForRepairsMapper.xml
@@ -152,16 +152,36 @@
         jtrfr.lat,
         jtrfr.address,
         jtrfr.view_type,
+        br.town_name streetName,
+        jg.grid_name,
+        jda.aoi_name,
+        br.village_name communityName,
         jda.address_name as addressName
         from jczz_task_report_for_repairs jtrfr
         left join jczz_doorplate_address jda on jda.address_code = jtrfr.address_code
-        left join jczz_grid_range jgr on jgr.house_code = jtrfr.address_code
-        left join jczz_grid jg on jg.id = jgr.grid_id and jg.is_deleted = 0
+        LEFT JOIN jczz_house jh on jh.house_code=jtrfr.address_code
+        left join jczz_grid jg on jg.grid_code = jh.grid_code and jg.is_deleted = 0
         left join blade_region br on br.code = jg.community_code
         where jtrfr.is_deleted = 0
         <if test="vo.createUser != null and vo.createUser != ''">
             AND jtrfr.create_user = #{vo.createUser}
         </if>
+
+        <if test="vo.streetName != null and vo.streetName != ''">
+            AND br.town_name like concat('%',#{vo.streetName},'%')
+        </if>
+        <if test="vo.communityName != null and vo.communityName != ''">
+            AND br.village_name like concat('%',#{vo.communityName},'%')
+        </if>
+
+        <if test="vo.gridName != null and vo.gridName != ''">
+            AND jg.grid_name like concat('%',#{vo.gridName},'%')
+        </if>
+
+        <if test="vo.aoiName != null and vo.aoiName != ''">
+            AND jda.aoi_name like concat('%',#{vo.aoiName},'%')
+        </if>
+
         <if test="vo.type != null">
             AND jtrfr.type = #{vo.type}
         </if>
@@ -208,8 +228,7 @@
                         or jtrfr.confirm_user_id = #{vo.confirmUserId})
                     </when>
                     <otherwise>
-                        and (jda.address_code in ('')
-                        or jtrfr.confirm_user_id = #{vo.confirmUserId})
+                        and (jtrfr.confirm_user_id = #{vo.confirmUserId})
                     </otherwise>
                 </choose>
             </if>
diff --git a/src/main/java/org/springblade/modules/task/vo/TaskReportForRepairsVO.java b/src/main/java/org/springblade/modules/task/vo/TaskReportForRepairsVO.java
index 835eb5a..0e1abf8 100644
--- a/src/main/java/org/springblade/modules/task/vo/TaskReportForRepairsVO.java
+++ b/src/main/java/org/springblade/modules/task/vo/TaskReportForRepairsVO.java
@@ -17,6 +17,7 @@
 package org.springblade.modules.task.vo;
 
 import io.swagger.annotations.ApiModelProperty;
+import liquibase.pro.packaged.S;
 import org.springblade.modules.task.entity.TaskRepairAppraiseEntity;
 import org.springblade.modules.task.entity.TaskRepairStepEntity;
 import org.springblade.modules.task.entity.TaskReportForRepairsEntity;
@@ -58,6 +59,15 @@
 	 */
 	private String regionCode;
 
+	private String streetName;
+
+	private String communityName;
+	// 网格名称
+	private String gridName;
+
+	// 小区名称
+	private String aoiName;
+
 	/**
 	 * 事件步骤
 	 */

--
Gitblit v1.9.3