From df4f35d1fb191f0f8f84d568bc35f1de04d752ff Mon Sep 17 00:00:00 2001
From: zhangyue <zhangyue@zcloudchina.com>
Date: Mon, 8 Jan 2024 10:30:17 +0800
Subject: [PATCH] =?UTF-8?q?=E9=97=A8=E5=8F=A3=E9=97=A8=E7=A6=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pom.xml                                       |  38 +-
 .../gatemachine/GateAreaController.java       |  57 +++
 .../gatemachine/GateMachineController.java    |  59 +++
 .../gatemachine/GateVideoController.java      | 225 ++++++++++++
 .../gatemachine/GateAreaMapper.java           |  25 ++
 .../gatemachine/GateMachineMapper.java        |  46 +++
 .../gatemachine/GateVideoMapper.java          |  75 ++++
 .../service/gatemachine/GateAreaService.java  |  23 ++
 .../gatemachine/GateMachineService.java       |  46 +++
 .../service/gatemachine/GateVideoService.java |  75 ++++
 .../gatemachine/impl/GateAreaServiceImpl.java |  55 +++
 .../impl/GateMachineServiceImpl.java          | 234 ++++++++++++
 .../impl/GateVideoServiceImpl.java            | 120 ++++++
 src/main/java/com/zcloud/util/ReturnMap.java  | 146 ++++++++
 .../util/examUntil/BaseResultInterface.java   |  18 +
 .../zcloud/util/examUntil/BizException.java   |  84 +++++
 .../util/examUntil/CodeMessageEnum.java       | 197 ++++++++++
 .../zcloud/util/examUntil/ErrorOperation.java |  14 +
 .../examUntil/GlobalExceptionHandler.java     |  94 +++++
 .../util/examUntil/HttpContextUtils.java      |  54 +++
 .../examUntil/UserChangeRecordConfig.java     |  99 +++++
 src/main/resources/application-dev.properties |  61 +++
 ...properties => application-prod.properties} |  52 ++-
 src/main/resources/application.properties     |  77 +---
 src/main/resources/application3.properties    |  72 ----
 .../datasource/gatemachine/GateAreaMapper.xml | 103 ++++++
 .../gatemachine/GateMachineMapper.xml         | 346 ++++++++++++++++++
 .../gatemachine/GateVideoMapper.xml           | 263 +++++++++++++
 28 files changed, 2589 insertions(+), 169 deletions(-)
 create mode 100644 src/main/java/com/zcloud/controller/gatemachine/GateAreaController.java
 create mode 100644 src/main/java/com/zcloud/controller/gatemachine/GateMachineController.java
 create mode 100644 src/main/java/com/zcloud/controller/gatemachine/GateVideoController.java
 create mode 100644 src/main/java/com/zcloud/mapper/datasource/gatemachine/GateAreaMapper.java
 create mode 100644 src/main/java/com/zcloud/mapper/datasource/gatemachine/GateMachineMapper.java
 create mode 100644 src/main/java/com/zcloud/mapper/datasource/gatemachine/GateVideoMapper.java
 create mode 100644 src/main/java/com/zcloud/service/gatemachine/GateAreaService.java
 create mode 100644 src/main/java/com/zcloud/service/gatemachine/GateMachineService.java
 create mode 100644 src/main/java/com/zcloud/service/gatemachine/GateVideoService.java
 create mode 100644 src/main/java/com/zcloud/service/gatemachine/impl/GateAreaServiceImpl.java
 create mode 100644 src/main/java/com/zcloud/service/gatemachine/impl/GateMachineServiceImpl.java
 create mode 100644 src/main/java/com/zcloud/service/gatemachine/impl/GateVideoServiceImpl.java
 create mode 100644 src/main/java/com/zcloud/util/ReturnMap.java
 create mode 100644 src/main/java/com/zcloud/util/examUntil/BaseResultInterface.java
 create mode 100644 src/main/java/com/zcloud/util/examUntil/BizException.java
 create mode 100644 src/main/java/com/zcloud/util/examUntil/CodeMessageEnum.java
 create mode 100644 src/main/java/com/zcloud/util/examUntil/ErrorOperation.java
 create mode 100644 src/main/java/com/zcloud/util/examUntil/GlobalExceptionHandler.java
 create mode 100644 src/main/java/com/zcloud/util/examUntil/HttpContextUtils.java
 create mode 100644 src/main/java/com/zcloud/util/examUntil/UserChangeRecordConfig.java
 create mode 100644 src/main/resources/application-dev.properties
 rename src/main/resources/{application-2.properties => application-prod.properties} (55%)
 delete mode 100644 src/main/resources/application3.properties
 create mode 100644 src/main/resources/mybatis/datasource/gatemachine/GateAreaMapper.xml
 create mode 100644 src/main/resources/mybatis/datasource/gatemachine/GateMachineMapper.xml
 create mode 100644 src/main/resources/mybatis/datasource/gatemachine/GateVideoMapper.xml

diff --git a/pom.xml b/pom.xml
index a046f419..729cfb84 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
 	<modelVersion>4.0.0</modelVersion>
 
 	<groupId>com.zcloud</groupId>
-	<artifactId>qa-prevention-gwj</artifactId>
+	<artifactId>qa-prevention-cmt</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
 	<packaging>war</packaging><!-- 以war运行是改成war -->
 
@@ -29,6 +29,8 @@
 	</properties>
 
 	<dependencies>
+
+
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-web</artifactId>
@@ -462,6 +464,40 @@
 			<version>5.0.5</version>
 		</dependency>
 	</dependencies>
+	<profiles>
+		<!--开发环境-->
+		<profile>
+			<id>dev</id>
+			<activation>
+				<!--默认激活-->
+				<activeByDefault>true</activeByDefault>
+			</activation>
+			<properties>
+				<spring.profiles.active>dev</spring.profiles.active>
+			</properties>
+		</profile>
+		<!--测试环境-->
+		<profile>
+			<id>test</id>
+			<properties>
+				<spring.profiles.active>test</spring.profiles.active>
+			</properties>
+		</profile>
+		<!--正式环境-->
+		<profile>
+			<id>prod</id>
+			<properties>
+				<spring.profiles.active>prod</spring.profiles.active>
+			</properties>
+		</profile>
+		<!--本地测试-->
+		<profile>
+			<id>localtest</id>
+			<properties>
+				<spring.profiles.active>localtest</spring.profiles.active>
+			</properties>
+		</profile>
+	</profiles>
 	<build>
 		<!-- <finalName>qa-prevention-gwj</finalName>
 		<plugins>
diff --git a/src/main/java/com/zcloud/controller/gatemachine/GateAreaController.java b/src/main/java/com/zcloud/controller/gatemachine/GateAreaController.java
new file mode 100644
index 00000000..6dd09f92
--- /dev/null
+++ b/src/main/java/com/zcloud/controller/gatemachine/GateAreaController.java
@@ -0,0 +1,57 @@
+package com.zcloud.controller.gatemachine;
+
+import com.zcloud.controller.base.BaseController;
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+import com.zcloud.service.gatemachine.GateAreaService;
+import com.zcloud.util.ReturnMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+@RestController
+@RequestMapping("/gateArea")
+public class GateAreaController extends BaseController {
+
+    @Resource
+    private GateAreaService gateAreaService;
+
+
+    @RequestMapping(value = "/page")
+    public ReturnMap page(Page page) {
+        ReturnMap returnMap = new ReturnMap();
+        PageData pageData = this.getPageData();
+        page.setPd(pageData);
+        List<PageData> data = gateAreaService.getDatalistpage(page);
+        returnMap.put("varList", data);
+        returnMap.put("page", page);
+        return returnMap;
+    }
+
+    @RequestMapping(value = "/edit")
+    public ReturnMap edit() {
+        PageData pd = this.getPageData();
+        gateAreaService.edit(pd);
+        return ReturnMap.ok();
+    }
+    @RequestMapping(value = "/removeByIds")
+    public ReturnMap removeByIds() {
+        PageData pageData = this.getPageData();
+        gateAreaService.removeByIds(pageData);
+        return ReturnMap.ok();
+    }
+    @RequestMapping(value = "/add")
+    public ReturnMap add() {
+        PageData pageData = this.getPageData();
+        gateAreaService.save(pageData);
+        return ReturnMap.ok();
+    }
+
+}
diff --git a/src/main/java/com/zcloud/controller/gatemachine/GateMachineController.java b/src/main/java/com/zcloud/controller/gatemachine/GateMachineController.java
new file mode 100644
index 00000000..2d3b48f9
--- /dev/null
+++ b/src/main/java/com/zcloud/controller/gatemachine/GateMachineController.java
@@ -0,0 +1,59 @@
+package com.zcloud.controller.gatemachine;
+
+import com.zcloud.controller.base.BaseController;
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+import com.zcloud.service.gatemachine.GateMachineService;
+import com.zcloud.util.ReturnMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+@RestController
+@RequestMapping("/gateMachine")
+public class GateMachineController extends BaseController {
+
+    @Resource
+    private GateMachineService gateMachineService;
+
+
+
+    @RequestMapping(value = "/page")
+    public ReturnMap page(Page page) {
+        PageData pageData = this.getPageData();
+        page.setPd(pageData);
+        ArrayList<PageData> data = gateMachineService.getDatalistpage(page);
+        ReturnMap returnMap = new ReturnMap();
+        returnMap.put("varList", data);
+        returnMap.put("page", page);
+        return returnMap;
+    }
+
+
+    @RequestMapping(value = "/edit")
+    public ReturnMap edit() {
+        PageData pd = this.getPageData();
+        gateMachineService.edit(pd);
+        return ReturnMap.ok();
+    }
+    @RequestMapping(value = "/removeByIds")
+    public ReturnMap removeByIds() {
+        PageData pageData = this.getPageData();
+        gateMachineService.removeByIds(pageData);
+        return ReturnMap.ok();
+    }
+    @RequestMapping(value = "/add")
+    public ReturnMap add() {
+        PageData pageData = this.getPageData();
+        gateMachineService.save(pageData);
+        return ReturnMap.ok();
+    }
+
+}
diff --git a/src/main/java/com/zcloud/controller/gatemachine/GateVideoController.java b/src/main/java/com/zcloud/controller/gatemachine/GateVideoController.java
new file mode 100644
index 00000000..bd5b35f9
--- /dev/null
+++ b/src/main/java/com/zcloud/controller/gatemachine/GateVideoController.java
@@ -0,0 +1,225 @@
+package com.zcloud.controller.gatemachine;
+
+import com.zcloud.controller.base.BaseController;
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+import com.zcloud.service.gatemachine.GateVideoService;
+import com.zcloud.util.DateUtil;
+import com.zcloud.util.Jurisdiction;
+import com.zcloud.util.Tools;
+import com.zcloud.util.hk.HKUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 说明:视频管理
+ * 作者:luoxiaobao
+ * 时间:2021-05-10
+ * 官网:www.zcloudchina.com
+ */
+@Controller
+@RequestMapping("/gateVideo")
+public class GateVideoController extends BaseController {
+
+	@Autowired
+	private GateVideoService gateVideoService;
+
+	/**新增
+	 * @param
+	 * @throws Exception
+	 */
+	@RequestMapping(value="/add")
+	@ResponseBody
+	public Object add() throws Exception{
+		Map<String,Object> map = new HashMap<String,Object>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+		pd = this.getPageData();
+		pd.put("GATEVIDEO_ID", this.get32UUID());	//主键
+		pd.put("OPDATE", DateUtil.date2Str(new Date()));	//操作日期
+		pd.put("OPUSER", Jurisdiction.getUsername());	//操作人
+		pd.put("ISDELETE", "0");	//是否删除
+		gateVideoService.save(pd);
+		map.put("result", errInfo);
+		return map;
+	}
+
+	/**删除
+	 * @param out
+	 * @throws Exception
+	 */
+	@RequestMapping(value="/delete")
+	@ResponseBody
+	public Object delete() throws Exception{
+		Map<String,String> map = new HashMap<String,String>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+		pd = this.getPageData();
+		gateVideoService.delete(pd);
+		map.put("result", errInfo);				//返回结果
+		return map;
+	}
+
+	/**修改
+	 * @param
+	 * @throws Exception
+	 */
+	@RequestMapping(value="/edit")
+	@ResponseBody
+	public Object edit() throws Exception{
+		Map<String,Object> map = new HashMap<String,Object>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+		pd = this.getPageData();
+		gateVideoService.edit(pd);
+		map.put("result", errInfo);
+		return map;
+	}
+
+	/**定位
+	 * @param
+	 * @throws Exception
+	 */
+	@RequestMapping(value="/savePosition")
+	@ResponseBody
+	public Object savePosition() throws Exception{
+		Map<String,Object> map = new HashMap<String,Object>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+		pd = this.getPageData();
+		gateVideoService.savePosition(pd);
+		map.put("result", errInfo);
+		return map;
+	}
+
+	@RequestMapping(value="/goAllVideo")
+	@ResponseBody
+	public Object goAllVideo() throws Exception{
+		Map<String,Object> map = new HashMap<String,Object>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+		pd = this.getPageData();
+
+		String DATA_IDS = pd.getString("DATA_IDS");
+		if(Tools.notEmpty(DATA_IDS)){
+			String ArrayDATA_IDS[] = DATA_IDS.split(",");
+			pd.put("ArrayDATA_IDS", ArrayDATA_IDS);
+		}
+		List<PageData>	videoList = gateVideoService.listBo(pd);	//根据ID读取
+		for (PageData video : videoList) {
+			if(video.get("INDEXCODE")!=null && !"".equals(video.getString("INDEXCODE"))){
+				Map<String, Object> data = HKUtil.camerasPreviewURLs(video.getString("INDEXCODE"), "hls");
+				video.put("HLSVIDEOURL", data);
+				Map<String, Object> resData = (Map<String, Object>) data.get("data");
+				video.put("GBSVIDEOURL",resData.get("url"));
+			}
+		}
+		map.put("videoList", videoList);
+		map.put("result", errInfo);
+		return map;
+	}
+
+	/**列表
+	 * @param page
+	 * @throws Exception
+	 */
+	@RequestMapping(value="/list")
+	@ResponseBody
+	public Object list(Page page) throws Exception{
+		Map<String,Object> map = new HashMap<String,Object>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+		pd = this.getPageData();
+		String KEYWORDS = pd.getString("KEYWORDS");						//关键词检索条件
+		if(Tools.notEmpty(KEYWORDS))pd.put("KEYWORDS", KEYWORDS.trim());
+
+		pd.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());
+		page.setPd(pd);
+
+		List<PageData>	varList = gateVideoService.list(page);	//列出VideoManager列表
+		map.put("varList", varList);
+		map.put("page", page);
+		map.put("result", errInfo);
+		return map;
+	}
+
+	@RequestMapping(value="/listAllForMap")
+	@ResponseBody
+	public Object listAllForMap() throws Exception{
+		Map<String,Object> map = new HashMap<String,Object>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+
+		List<PageData>	videoList = gateVideoService.listAllForMap(pd);	//根据ID读取
+		map.put("videoList", videoList);
+		map.put("result", errInfo);
+		return map;
+	}
+
+	@RequestMapping(value="/editIsShow")
+	@ResponseBody
+	public Object editIsShow() throws Exception{
+		Map<String,Object> map = new HashMap<String,Object>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+		pd = this.getPageData();
+		PageData epd = new PageData();
+		epd.put("ISSHOW", '0');
+		epd.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());
+		gateVideoService.editIsShowBycorpinfoid(epd);	//根据ID读取
+
+		pd.put("ISSHOW", '1');
+		gateVideoService.editIsShow(pd);	//根据ID读取
+		map.put("pd", pd);
+		map.put("result", errInfo);
+		return map;
+	}
+	 /**去修改页面获取数据
+	 * @param
+	 * @throws Exception
+	 */
+	@RequestMapping(value="/goEdit")
+	@ResponseBody
+	public Object goEdit() throws Exception{
+		Map<String,Object> map = new HashMap<String,Object>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+		pd = this.getPageData();
+		pd = gateVideoService.findById(pd);	//根据ID读取
+		map.put("pd", pd);
+		map.put("result", errInfo);
+		return map;
+	}
+
+	 /**批量删除
+	 * @param
+	 * @throws Exception
+	 */
+	@RequestMapping(value="/deleteAll")
+	@ResponseBody
+	public Object deleteAll() throws Exception{
+		Map<String,Object> map = new HashMap<String,Object>();
+		String errInfo = "success";
+		PageData pd = new PageData();
+		pd = this.getPageData();
+		String DATA_IDS = pd.getString("DATA_IDS");
+		if(Tools.notEmpty(DATA_IDS)){
+			String ArrayDATA_IDS[] = DATA_IDS.split(",");
+			gateVideoService.deleteAll(ArrayDATA_IDS);
+			errInfo = "success";
+		}else{
+			errInfo = "error";
+		}
+		map.put("result", errInfo);				//返回结果
+		return map;
+	}
+
+
+}
diff --git a/src/main/java/com/zcloud/mapper/datasource/gatemachine/GateAreaMapper.java b/src/main/java/com/zcloud/mapper/datasource/gatemachine/GateAreaMapper.java
new file mode 100644
index 00000000..fc116e36
--- /dev/null
+++ b/src/main/java/com/zcloud/mapper/datasource/gatemachine/GateAreaMapper.java
@@ -0,0 +1,25 @@
+package com.zcloud.mapper.datasource.gatemachine;
+
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+@Mapper
+public interface GateAreaMapper {
+    List<PageData> getDatalistPage(Page page);
+
+    void edit(PageData pd);
+
+    void removeByIds(PageData pageData);
+
+    void save(PageData pageData);
+
+    List<PageData> getGatePosition(PageData pageData);
+}
diff --git a/src/main/java/com/zcloud/mapper/datasource/gatemachine/GateMachineMapper.java b/src/main/java/com/zcloud/mapper/datasource/gatemachine/GateMachineMapper.java
new file mode 100644
index 00000000..8f7ce6ba
--- /dev/null
+++ b/src/main/java/com/zcloud/mapper/datasource/gatemachine/GateMachineMapper.java
@@ -0,0 +1,46 @@
+package com.zcloud.mapper.datasource.gatemachine;
+
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+@Mapper
+public interface GateMachineMapper {
+    ArrayList<PageData> getDatalistPage(Page page);
+
+    void edit(PageData pd);
+
+    void removeByIds(PageData pageData);
+
+    void save(PageData pageData);
+
+    List<PageData> getOnlineGateMachine(PageData pageData);
+
+    List<PageData> getTodayInOutCount(PageData pageData);
+
+    // 弃用 因需求变更
+    List<PageData> getGatePosition(PageData pageData);
+
+    PageData getGateMachineInfoById(PageData pageData);
+
+    List<PageData> getPersonRecordCountByEId(PageData gateMachineInfo);
+
+    List<PageData> getCarRecordCountByEId(PageData gateMachineInfo);
+
+    List<PageData> getCarRecordCountByCorpId(PageData gateMachineInfo);
+
+    /**
+     * 今天闸机的进出记录
+     * @param gateMachineInfo
+     * @return
+     */
+    List<PageData> getPersonRecordListAllByIdlistPage(Page page);
+}
diff --git a/src/main/java/com/zcloud/mapper/datasource/gatemachine/GateVideoMapper.java b/src/main/java/com/zcloud/mapper/datasource/gatemachine/GateVideoMapper.java
new file mode 100644
index 00000000..f8a41232
--- /dev/null
+++ b/src/main/java/com/zcloud/mapper/datasource/gatemachine/GateVideoMapper.java
@@ -0,0 +1,75 @@
+package com.zcloud.mapper.datasource.gatemachine;
+
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+
+import java.util.List;
+
+/**
+ * 说明:视频管理
+ * 作者:luoxiaobao
+ * 时间:2021-05-10
+ * 官网:www.zcloudchina.com
+ */
+public interface GateVideoMapper {
+
+	/**新增
+	 * @param pd
+	 * @throws Exception
+	 */
+	void save(PageData pd);
+
+	/**删除
+	 * @param pd
+	 * @throws Exception
+	 */
+	void delete(PageData pd);
+
+	/**修改
+	 * @param pd
+	 * @throws Exception
+	 */
+	void edit(PageData pd);
+	void savePosition(PageData pd);
+	void editIsShow(PageData pd);
+	void editIsShowBycorpinfoid(PageData pd);
+
+	/**列表
+	 * @param page
+	 * @throws Exception
+	 */
+	List<PageData> datalistPage(Page page);
+
+	/**列表(全部)
+	 * @param pd
+	 * @throws Exception
+	 */
+	List<PageData> listAll(PageData pd);
+
+	/**列表(全部)
+	 * @param pd
+	 * @throws Exception
+	 */
+	List<PageData> listBo(PageData pd);
+
+	/**通过id获取数据
+	 * @param pd
+	 * @throws Exception
+	 */
+	PageData findById(PageData pd);
+
+	/**批量删除
+	 * @param ArrayDATA_IDS
+	 * @throws Exception
+	 */
+	void deleteAll(String[] ArrayDATA_IDS);
+
+    PageData findByCode(PageData pd);
+
+	List<PageData> listAllForMap(PageData pd);
+
+	List<PageData> getPointsInfo(PageData pd);
+
+	List<PageData> getCameraPosition(PageData pageData);
+}
+
diff --git a/src/main/java/com/zcloud/service/gatemachine/GateAreaService.java b/src/main/java/com/zcloud/service/gatemachine/GateAreaService.java
new file mode 100644
index 00000000..67a3b70e
--- /dev/null
+++ b/src/main/java/com/zcloud/service/gatemachine/GateAreaService.java
@@ -0,0 +1,23 @@
+package com.zcloud.service.gatemachine;
+
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+
+import java.util.List;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+public interface GateAreaService {
+
+
+    List<PageData> getDatalistpage(Page page);
+
+    void edit(PageData pd);
+
+    void removeByIds(PageData pageData);
+
+    void save(PageData pageData);
+}
diff --git a/src/main/java/com/zcloud/service/gatemachine/GateMachineService.java b/src/main/java/com/zcloud/service/gatemachine/GateMachineService.java
new file mode 100644
index 00000000..64de16f0
--- /dev/null
+++ b/src/main/java/com/zcloud/service/gatemachine/GateMachineService.java
@@ -0,0 +1,46 @@
+package com.zcloud.service.gatemachine;
+
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+public interface GateMachineService {
+
+
+    ArrayList<PageData> getDatalistpage(Page page);
+
+    void edit(PageData pd);
+
+    void removeByIds(PageData pageData);
+
+    void save(PageData pageData);
+
+    PageData getOnlineGateMachine(PageData pageData);
+
+    List<PageData> getGatePosition(PageData pageData);
+
+    PageData getGateMachineInfoById(PageData pageData);
+
+
+    List<PageData> getPersonRecordCountByEId(PageData gateMachineInfo);
+    List<PageData> getTodayInOutCount(PageData pd);
+
+    List<PageData> getCarRecordCountByEId(PageData gateMachineInfo);
+
+    List<PageData> getCarRecordCountByCorpId(PageData gateMachineInfo);
+
+    /**
+     * 一公司
+     * 今天闸机的进出记录
+     * @param gateMachineInfo
+     * @return
+     */
+    List<PageData> getPersonRecordListAllByEId(Page page);
+}
diff --git a/src/main/java/com/zcloud/service/gatemachine/GateVideoService.java b/src/main/java/com/zcloud/service/gatemachine/GateVideoService.java
new file mode 100644
index 00000000..81dea391
--- /dev/null
+++ b/src/main/java/com/zcloud/service/gatemachine/GateVideoService.java
@@ -0,0 +1,75 @@
+package com.zcloud.service.gatemachine;
+
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+
+import java.util.List;
+
+/**
+ * 说明:视频管理
+ * 作者:luoxiaobao
+ * 时间:2021-05-10
+ * 官网:www.zcloudchina.com
+ */
+public interface GateVideoService {
+
+	/**新增
+	 * @param pd
+	 * @throws Exception
+	 */
+	public void save(PageData pd)throws Exception;
+
+	/**删除
+	 * @param pd
+	 * @throws Exception
+	 */
+	public void delete(PageData pd)throws Exception;
+
+	/**修改
+	 * @param pd
+	 * @throws Exception
+	 */
+	public void edit(PageData pd)throws Exception;
+	public void savePosition(PageData pd)throws Exception;
+	public void editIsShowBycorpinfoid(PageData pd)throws Exception;
+	public void editIsShow(PageData pd)throws Exception;
+
+	/**列表
+	 * @param page
+	 * @throws Exception
+	 */
+	public List<PageData> list(Page page)throws Exception;
+
+	/**列表(全部)
+	 * @param pd
+	 * @throws Exception
+	 */
+	public List<PageData> listBo(PageData pd)throws Exception;
+
+	/**列表(全部)
+	 * @param pd
+	 * @throws Exception
+	 */
+	public List<PageData> listAll(PageData pd)throws Exception;
+
+	/**通过id获取数据
+	 * @param pd
+	 * @throws Exception
+	 */
+	public PageData findById(PageData pd)throws Exception;
+
+	/**批量删除
+	 * @param ArrayDATA_IDS
+	 * @throws Exception
+	 */
+	public void deleteAll(String[] ArrayDATA_IDS)throws Exception;
+
+	public PageData findByCode(PageData video)throws Exception;
+
+	public List<PageData> listAllForMap(PageData pd)throws Exception;
+
+	public List<PageData> getPointsInfo(PageData pd)throws Exception;
+
+    List<PageData> getCameraPosition(PageData pageData);
+}
+
diff --git a/src/main/java/com/zcloud/service/gatemachine/impl/GateAreaServiceImpl.java b/src/main/java/com/zcloud/service/gatemachine/impl/GateAreaServiceImpl.java
new file mode 100644
index 00000000..74a2f2cb
--- /dev/null
+++ b/src/main/java/com/zcloud/service/gatemachine/impl/GateAreaServiceImpl.java
@@ -0,0 +1,55 @@
+package com.zcloud.service.gatemachine.impl;
+
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+import com.zcloud.mapper.datasource.gatemachine.GateAreaMapper;
+import com.zcloud.service.gatemachine.GateAreaService;
+import com.zcloud.util.InitPageDataUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+@Service
+public class GateAreaServiceImpl implements GateAreaService {
+
+
+    @Resource
+    private GateAreaMapper gateAreaMapper;
+
+    @Resource
+    private InitPageDataUtil initPageDataUtil;
+
+
+    @Override
+    public List<PageData> getDatalistpage(Page page) {
+        return gateAreaMapper.getDatalistPage(page);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void edit(PageData pd) {
+        initPageDataUtil.initEdit(pd);
+        gateAreaMapper.edit(pd);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void removeByIds(PageData pageData) {
+        initPageDataUtil.initEdit(pageData);
+        gateAreaMapper.removeByIds(pageData);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void save(PageData pageData) {
+        initPageDataUtil.initSave(pageData,"GATE_AREA_ID");
+        gateAreaMapper.save(pageData);
+    }
+}
diff --git a/src/main/java/com/zcloud/service/gatemachine/impl/GateMachineServiceImpl.java b/src/main/java/com/zcloud/service/gatemachine/impl/GateMachineServiceImpl.java
new file mode 100644
index 00000000..5bbb5529
--- /dev/null
+++ b/src/main/java/com/zcloud/service/gatemachine/impl/GateMachineServiceImpl.java
@@ -0,0 +1,234 @@
+package com.zcloud.service.gatemachine.impl;
+
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+import com.zcloud.mapper.datasource.gatemachine.GateAreaMapper;
+import com.zcloud.mapper.datasource.gatemachine.GateMachineMapper;
+import com.zcloud.mapper.datasource.gatemachine.GateVideoMapper;
+import com.zcloud.service.gatemachine.GateMachineService;
+import com.zcloud.service.keyProjects.VideoManagerService;
+import com.zcloud.util.InitPageDataUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+@Service
+public class GateMachineServiceImpl implements GateMachineService {
+
+
+    @Resource
+    private GateMachineMapper gateMachineMapper;
+    @Resource
+    private GateAreaMapper gateAreaMapper;
+
+    @Resource
+    private GateVideoMapper gateVideoMapper;
+
+    @Resource
+    private InitPageDataUtil initPageDataUtil;
+
+
+    @Override
+    public ArrayList<PageData> getDatalistpage(Page page) {
+        return gateMachineMapper.getDatalistPage(page);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void edit(PageData pd) {
+        initPageDataUtil.initEdit(pd);
+        gateMachineMapper.edit(pd);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void removeByIds(PageData pageData) {
+        String[] dataIds = pageData.getString("DATA_IDS").split(",");
+        initPageDataUtil.initEdit(pageData);
+        if (dataIds.length > 0) {
+            pageData.put("item", dataIds);
+            gateMachineMapper.removeByIds(pageData);
+        }
+    }
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void save(PageData pageData) {
+        initPageDataUtil.initSave(pageData, "GATE_MACHINE_ID");
+        gateMachineMapper.save(pageData);
+    }
+
+    @Override
+    public PageData getOnlineGateMachine(PageData pageData) {
+        List<PageData> gateMachineList = gateMachineMapper.getOnlineGateMachine(pageData);
+        PageData value = new PageData();
+        gateMachineList.forEach(item -> {
+            value.put(item.getString("TYPE"), item.getString("COUNT"));
+        });
+        return value;
+    }
+
+    @Resource
+    private VideoManagerService videoManagerService;
+
+    @Override
+    public List<PageData> getGatePosition(PageData pageData) {
+        // todo 需求变更,现在闸机变成了区域
+        if (pageData.getString("TYPE").equals("PERSON")) {
+            pageData.put("GATE_AREA_TYPE", 0);
+            // 人闸机定位
+        }
+
+        if (pageData.getString("TYPE").equals("CAR")) {
+            // 车闸机定位
+            pageData.put("GATE_AREA_TYPE", 1);
+        }
+        if (pageData.getString("TYPE").equals("CAMERA")) {
+            // 摄像头定位
+           return gateVideoMapper.getCameraPosition(pageData);
+        }
+
+        return gateAreaMapper.getGatePosition(pageData);
+    }
+
+    @Override
+    public PageData getGateMachineInfoById(PageData pageData) {
+        return gateMachineMapper.getGateMachineInfoById(pageData);
+    }
+
+    @Override
+
+    public List<PageData> getPersonRecordCountByEId(PageData gateMachineInfo) {
+        return gateMachineMapper.getPersonRecordCountByEId(gateMachineInfo);
+    }
+
+    @Override
+    public List<PageData> getTodayInOutCount(PageData pd) {
+        List<PageData> todayInOutCount = gateMachineMapper.getTodayInOutCount(pd);
+        // 当日进出 闸机数
+        // 0 海域消防泵房南 1 大庆路与消防南路 2 一期停泊泊位 3 107 4 105 5 南北入口 6
+        int[] counts = {0, 0, 0, 0, 0, 0};
+        PageData pageData = new PageData();
+        pageData.put("todayInOutCountList", todayInOutCount);
+        for (PageData item : todayInOutCount) {
+            // 海域消防泵房南入口
+            if ("65270348-1df7-494a-b2e5-32f6b19d040b".equals(item.getString("EQUIPMENTID"))) {
+                counts[0] += Integer.parseInt(item.getString("COUNT"));
+            }
+            if ("44d9a3be-a778-4988-bb7d-04d8d87c53c3".equals(item.getString("EQUIPMENTID"))) {
+                counts[0] -= Integer.parseInt(item.getString("COUNT"));
+            }
+            // 大庆路与消防南路出口
+            if ("189a90f0-5022-4df3-b2ac-1e276ce3585e".equals(item.getString("EQUIPMENTID"))) {
+                counts[1] -= Integer.parseInt(item.getString("COUNT"));
+            }
+            if ("9cfcbc32-9466-4b44-a0cd-533a87e8a839".equals(item.getString("EQUIPMENTID"))) {
+                counts[1] += Integer.parseInt(item.getString("COUNT"));
+            }
+            // 一期泊位出口
+            if ("466988ac-d58c-4d9e-8065-74d9a8ad1ec9".equals(item.getString("EQUIPMENTID"))) {
+                counts[2] -= Integer.parseInt(item.getString("COUNT"));
+            }
+            if ("f2293484-667e-4e4b-bbeb-831938c541e0".equals(item.getString("EQUIPMENTID"))) {
+                counts[2] += Integer.parseInt(item.getString("COUNT"));
+            }
+            // 107出口
+            if ("89e68dc2-8951-41e5-80ed-0e3ded220e1e".equals(item.getString("EQUIPMENTID"))) {
+                counts[3] -= Integer.parseInt(item.getString("COUNT"));
+            }
+            if ("cdf76fde-f2c5-4981-83a6-eb696ab2a76b".equals(item.getString("EQUIPMENTID"))) {
+                counts[3] += Integer.parseInt(item.getString("COUNT"));
+            }
+            // 105出口
+            if ("2ccf4d42-114c-4427-9f25-c1895de0ce48".equals(item.getString("EQUIPMENTID"))) {
+                counts[4] -= Integer.parseInt(item.getString("COUNT"));
+            }
+            if ("7de29a72-8937-4b40-94b9-00afaee13034".equals(item.getString("EQUIPMENTID"))) {
+                counts[4] += Integer.parseInt(item.getString("COUNT"));
+            }
+            // 南入口
+            if ("bfc2d476-ab57-4f1c-9186-8dd3d3f76d2a".equals(item.getString("EQUIPMENTID"))) {
+                counts[5] += Integer.parseInt(item.getString("COUNT"));
+            }
+            if ("96943c10-be7c-4798-9271-473176c1f047".equals(item.getString("EQUIPMENTID"))) {
+                counts[5] -= Integer.parseInt(item.getString("COUNT"));
+            }
+            // 北入口
+            if ("9652687e-b679-4be0-bd2a-b110b44e06d1".equals(item.getString("EQUIPMENTID"))) {
+                counts[5] += Integer.parseInt(item.getString("COUNT"));
+            }
+            if ("059fd7c8-8ec9-4444-8123-3b6a08b8a1dd".equals(item.getString("EQUIPMENTID"))) {
+                counts[5] -= Integer.parseInt(item.getString("COUNT"));
+            }
+//            AND f.EQUIPMENTID NOT IN ( '96943c10-be7c-4798-9271-473176c1f047', '059fd7c8-8ec9-4444-8123-3b6a08b8a1dd' )
+//            96943c10-be7c-4798-9271-473176c1f047	60	南出口
+//            059fd7c8-8ec9-4444-8123-3b6a08b8a1dd	128	北出口
+        }
+        List<PageData> dataArrayList = new ArrayList<>();
+        for (int i = 0; i < counts.length; i++) {
+            PageData value = new PageData();
+            if (i == 0) {
+                value.put("title", "海域消防泵房南闸机");
+                value.put("count", counts[0]);
+            }
+            if (i == 1) {
+                value.put("title", "大庆路与消防南路闸机");
+                value.put("count", counts[1]);
+            }
+            if (i == 2) {
+                value.put("title", "一期停泊泊位闸机");
+                value.put("count", counts[2]);
+            }
+            if (i == 3) {
+                value.put("title", "107闸机");
+                value.put("count", counts[3]);
+            }
+            if (i == 4) {
+                value.put("title", "105闸机");
+                value.put("count", counts[4]);
+            }
+            if (i == 5) {
+                value.put("title", "其他区域");
+                value.put("count", counts[5]
+                        -counts[4]
+                        -counts[3]
+                        -counts[2]
+                        -counts[1]
+                        -counts[0]
+                );
+            }
+            value.put("company", "人");
+            dataArrayList.add(value);
+        }
+        return dataArrayList;
+    }
+
+    @Override
+    public List<PageData> getCarRecordCountByEId(PageData gateMachineInfo) {
+        return gateMachineMapper.getCarRecordCountByEId(gateMachineInfo);
+    }
+
+    @Override
+    public List<PageData> getCarRecordCountByCorpId(PageData gateMachineInfo) {
+        return gateMachineMapper.getCarRecordCountByCorpId(gateMachineInfo);
+    }
+
+    /**
+     * 一公司人员进出记录的详情
+     * @param page
+     * @return
+     */
+    public List<PageData> getPersonRecordListAllByEId(Page page) {
+        return gateMachineMapper.getPersonRecordListAllByIdlistPage(page);
+    }
+
+}
diff --git a/src/main/java/com/zcloud/service/gatemachine/impl/GateVideoServiceImpl.java b/src/main/java/com/zcloud/service/gatemachine/impl/GateVideoServiceImpl.java
new file mode 100644
index 00000000..27b0ee85
--- /dev/null
+++ b/src/main/java/com/zcloud/service/gatemachine/impl/GateVideoServiceImpl.java
@@ -0,0 +1,120 @@
+package com.zcloud.service.gatemachine.impl;
+
+import com.zcloud.entity.Page;
+import com.zcloud.entity.PageData;
+import com.zcloud.mapper.datasource.gatemachine.GateVideoMapper;
+import com.zcloud.service.gatemachine.GateVideoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 说明:视频管理
+ * 作者:luoxiaobao
+ * 时间:2021-05-10
+ * 官网:www.zcloudchina.com
+ */
+@Service
+@Transactional //开启事物
+public class GateVideoServiceImpl implements GateVideoService {
+
+	@Autowired
+	private GateVideoMapper gateVideoMapper;
+
+	/**新增
+	 * @param pd
+	 * @throws Exception
+	 */
+	public void save(PageData pd)throws Exception{
+		gateVideoMapper.save(pd);
+	}
+
+	/**删除
+	 * @param pd
+	 * @throws Exception
+	 */
+	public void delete(PageData pd)throws Exception{
+		gateVideoMapper.delete(pd);
+	}
+
+	/**修改
+	 * @param pd
+	 * @throws Exception
+	 */
+	public void edit(PageData pd)throws Exception{
+		gateVideoMapper.edit(pd);
+	}
+	public void savePosition(PageData pd)throws Exception{
+		gateVideoMapper.savePosition(pd);
+	}
+	public void editIsShowBycorpinfoid(PageData pd)throws Exception{
+		gateVideoMapper.editIsShowBycorpinfoid(pd);
+	}
+	public void editIsShow(PageData pd)throws Exception{
+		gateVideoMapper.editIsShow(pd);
+	}
+
+	/**列表
+	 * @param page
+	 * @throws Exception
+	 */
+	public List<PageData> list(Page page)throws Exception{
+		return gateVideoMapper.datalistPage(page);
+	}
+
+	/**列表(全部)
+	 * @param pd
+	 * @throws Exception
+	 */
+	public List<PageData> listBo(PageData pd)throws Exception{
+		return gateVideoMapper.listBo(pd);
+	}
+
+	/**列表(全部)
+	 * @param pd
+	 * @throws Exception
+	 */
+	public List<PageData> listAll(PageData pd)throws Exception{
+		return gateVideoMapper.listAll(pd);
+	}
+
+	/**通过id获取数据
+	 * @param pd
+	 * @throws Exception
+	 */
+	public PageData findById(PageData pd)throws Exception{
+		return gateVideoMapper.findById(pd);
+	}
+
+	/**批量删除
+	 * @param ArrayDATA_IDS
+	 * @throws Exception
+	 */
+	public void deleteAll(String[] ArrayDATA_IDS)throws Exception{
+		gateVideoMapper.deleteAll(ArrayDATA_IDS);
+	}
+
+	/**通过CODE获取数据
+	 * @param pd
+	 * @throws Exception
+	 */
+	public PageData findByCode(PageData pd)throws Exception{
+		return gateVideoMapper.findByCode(pd);
+	}
+
+	public List<PageData> listAllForMap(PageData pd)throws Exception{
+		return gateVideoMapper.listAllForMap(pd);
+	}
+
+	public List<PageData> getPointsInfo(PageData pd)throws Exception{
+		return gateVideoMapper.getPointsInfo(pd);
+	}
+
+	@Override
+	public List<PageData> getCameraPosition(PageData pageData) {
+		return gateVideoMapper.getCameraPosition(pageData);
+	}
+}
+
diff --git a/src/main/java/com/zcloud/util/ReturnMap.java b/src/main/java/com/zcloud/util/ReturnMap.java
new file mode 100644
index 00000000..ab82ecfb
--- /dev/null
+++ b/src/main/java/com/zcloud/util/ReturnMap.java
@@ -0,0 +1,146 @@
+package com.zcloud.util;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+
+import com.zcloud.util.examUntil.CodeMessageEnum;
+import org.apache.http.HttpStatus;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description: R类
+ **/
+public class ReturnMap extends HashMap<String, Object> {
+    /**
+     * 序列ID
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * R的无参构造, 初始化信息
+     */
+    public ReturnMap() {
+        put("code", 0);
+        put("msg", "success");
+        put("result", "success");
+    }
+
+    /**
+     * error1: 返回默认error
+     *
+     * @return 返回默认error
+     */
+    public static ReturnMap error() {
+        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常, 请联系管理员");
+    }
+
+    /**
+     * error2
+     *
+     * @param msg 错误信息
+     * @return 返回自定义信息的error
+     */
+    public static ReturnMap error(String msg) {
+        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
+    }
+
+    public static ReturnMap error(CodeMessageEnum codeMessageEnum, String uri) {
+        return error(codeMessageEnum.getCode(), codeMessageEnum.getMessage(), uri);
+    }
+
+    /**
+     * 原先R的code和msg被覆盖
+     *
+     * @param code 错误码
+     * @param msg  错误信息
+     * @return 自定义的错误码和错误信息
+     */
+    public static ReturnMap error(int code, String msg) {
+        ReturnMap r = new ReturnMap();
+        r.put("code", code);
+        r.put("result", "error");
+        r.put("msg", msg);
+        return r;
+    }
+
+    public static ReturnMap error(String code, String msg) {
+        ReturnMap r = new ReturnMap();
+        r.put("code", code);
+        r.put("result", "error");
+        r.put("msg", msg);
+        return r;
+    }
+
+    public static ReturnMap error(String code, String msg, String uri) {
+        ReturnMap r = new ReturnMap();
+        r.put("code", code);
+        r.put("result", "error");
+        r.put("msg", msg);
+        r.put("uri", uri);
+        return r;
+    }
+
+    /**
+     * ok1
+     * 加入了msg
+     *
+     * @param msg
+     * @return
+     */
+    public static ReturnMap ok(String msg) {
+        ReturnMap r = new ReturnMap();
+        r.put("msg", msg);
+        return r;
+    }
+
+    /**
+     * ok2: 加入了map
+     *
+     * @param map
+     * @return
+     */
+    public static ReturnMap ok(Map<String, Object> map) {
+        ReturnMap r = new ReturnMap();
+        r.putAll(map);
+        return r;
+    }
+
+    /**
+     * ok3: 直接返回"0", "success"
+     *
+     * @return
+     */
+    public static ReturnMap ok() {
+        return new ReturnMap();
+    }
+
+    /**
+     * 放入自定义的key和value, 然后返回
+     *
+     * @param key
+     * @param value
+     * @return
+     */
+    @Override
+    public ReturnMap put(String key, Object value) {
+        super.put(key, value);
+        return this;
+    }
+
+    /**
+     * 得到这个对象的code
+     *
+     * @return
+     */
+    public Integer getCode() {
+        return (Integer) this.get("code");
+    }
+}
+
+
+
diff --git a/src/main/java/com/zcloud/util/examUntil/BaseResultInterface.java b/src/main/java/com/zcloud/util/examUntil/BaseResultInterface.java
new file mode 100644
index 00000000..5b28ac67
--- /dev/null
+++ b/src/main/java/com/zcloud/util/examUntil/BaseResultInterface.java
@@ -0,0 +1,18 @@
+package com.zcloud.util.examUntil;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+/**
+ * @desc 对象返回到前端以及异常抛出的接口类
+ */
+public interface BaseResultInterface {
+
+
+    String getCode();
+
+
+    String getMessage();
+}
diff --git a/src/main/java/com/zcloud/util/examUntil/BizException.java b/src/main/java/com/zcloud/util/examUntil/BizException.java
new file mode 100644
index 00000000..795390b9
--- /dev/null
+++ b/src/main/java/com/zcloud/util/examUntil/BizException.java
@@ -0,0 +1,84 @@
+package com.zcloud.util.examUntil;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+
+public class BizException extends RuntimeException implements BaseResultInterface {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 错误码
+     */
+    private String code;
+
+    /**
+     * 错误信息
+     */
+    private String message;
+
+    public BizException() {
+        super();
+    }
+
+    public BizException(CodeMessageEnum codeMessageEnum) {
+        super(codeMessageEnum.getCode(),new Throwable());
+        this.code = codeMessageEnum.getCode();
+        this.message = codeMessageEnum.getMessage();
+    }
+
+    public BizException(CodeMessageEnum codeMessageEnum, Throwable cause) {
+        super(codeMessageEnum.getCode(), cause);
+        this.code = codeMessageEnum.getCode();
+        this.message = codeMessageEnum.getMessage();
+    }
+    public BizException (CodeMessageEnum codeMessageEnum, Throwable cause,String details) {
+        super(codeMessageEnum.getCode(), cause);
+        this.code = codeMessageEnum.getCode();
+        this.message = codeMessageEnum.getMessage() + details;
+    }
+    public BizException(CodeMessageEnum codeMessageEnum, String message, Throwable cause) {
+        super(codeMessageEnum.getCode(), cause);
+        this.code = codeMessageEnum.getCode();
+        this.message = message;
+    }
+
+    public BizException(String message) {
+        super(message);
+        this.message = message;
+    }
+
+    public BizException(String code, String message) {
+        super(code);
+        this.code = code;
+        this.message = message;
+    }
+
+    public BizException(String code, String message, Throwable cause) {
+        super(code, cause);
+        this.code = code;
+        this.message = message;
+    }
+
+    @Override
+    public Throwable fillInStackTrace() {
+        return this;
+    }
+
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    @Override
+    public String getMessage() {
+        return this.message;
+    }
+}
+
+
diff --git a/src/main/java/com/zcloud/util/examUntil/CodeMessageEnum.java b/src/main/java/com/zcloud/util/examUntil/CodeMessageEnum.java
new file mode 100644
index 00000000..2ac51a53
--- /dev/null
+++ b/src/main/java/com/zcloud/util/examUntil/CodeMessageEnum.java
@@ -0,0 +1,197 @@
+package com.zcloud.util.examUntil;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+public enum CodeMessageEnum implements BaseResultInterface {
+
+    /** ********* 0000成功 *************** */
+    SUCCESS("0000", "成功!"),
+    SUCCESS_LOGIN("0001", "用户登录成功"),
+    SUCCESS_LOGOUT("0002", "用户退出成功"),
+
+    /* 默认失败 */
+    COMMON_FAIL("999", "失败"),
+
+    /** ********* 1xxx系统错误 *************** */
+    SERVER_BUSY("1001", "服务器正忙,请稍后再试!"),
+    INTERNAL_SERVER_ERROR("1002", "服务器内部错误"),
+    NOT_FOUND("1003", "未找到该资源!"),
+    REQUEST_METHOD_ERROR("1004", "接口请求方法异常"),
+    SQL_SYNTAX_ERROR_EXCEPTION("1005", "SQL语法错误异常"),
+    NULL_POINT_ERROR_EXCEPTION("1006", "空指针异常信息"),
+    INNER_FRAME_EXCEPTION("1007", "内部框架执行异常"),
+    PARSE_TOKEN_EXCEPTION("1008", "解析token异常"),
+    TOKEN_NOT_EXIST("1009", "token不存在"),
+    TOKEN_SIGNATURE_EXCEPTION("1010", "token签名异常"),
+    TOKEN_EXPIRE("1011", "token过期,请重新登录"),
+    IMG_TYPE_NOT_CONFIG("1012", "请配置图片类型"),
+    NOT_CONFIG_FILE_DIR("1013", "请配置文件路径"),
+    UPLOAD_FILE_ERROR("1014", "文件上传失败"),
+    FILE_NOT_EXIST("1015", "文件不存在"),
+    FILE_HAS_DELETED("1016", "文件已被删除"),
+    DRIVER_CLASS_NOT_FOUND("1017", "数据库的连接驱动正在加载中..."),
+    TRY_CONNECT_DATABASE_ERROR("1018", "尝试连接数据库失败"),
+    CLOSE_CONNECT_DATABASE_ERROR("1019", "关闭数据库连接失败"),
+    DATABASE_NAME_NOT_EXIST("1020", "数据库名称不存在"),
+    CLOSE_DATASOURCE_ERROR("1021", "释放数据库资源异常"),
+    DRUID_DATASOURCE_ERROR("1022", "数据源创建中..."),
+    CREATE_DATABASE_ERROR("1023", "创建数据库失败"),
+    CREATE_TABLE_ERROR("1024", "创建表失败"),
+    UPDATE_TABLE_FIELD_ERROR("1025", "更新表字段失败"),
+    DELETE_TABLE_FIELD_ERROR("1026", "删除表字段失败"),
+    QUERY_ROLE_ERROR("1027", "查询角色失败"),
+    UPDATE_GROUP_ERROR("1028", "更新接口组失败"),
+    DELETE_GROUP_ERROR("1029", "删除接口组失败"),
+    SAVE_INTERFACE_ERROR("1030", "保存接口信息失败"),
+
+    /**
+     * ******2xxx参数错误 *********************
+     */
+    BODY_NOT_MATCH("2001", "请求的数据格式不符"),
+    SIGNATURE_NOT_MATCH("2002", "请求的数字签名不匹配!"),
+    REQUEST_PATH_NOT_MATCH("2003", "当前请求路径没有权限!"),
+    NOT_UPLOAD_FILE_NAME_ERROR("2004", "上传的文件名不存在,请重新上传"),
+    NOT_SUPPORT_IMG_TYPE("2005", "图片格式不正确,请重新上传"),
+    NOT_SUPPORT_USERNAME_TYPE("2006", "excel用户名不能为空"),
+    NOT_SUPPORT_ROLE_TYPE("2007", "角色不存在"),
+    NOT_SUPPORT_DEPT_TYPE("2008", "部门不存在"),
+    SQL_INJECT_NOT_ALLOWED("2009", "参数中存在数据库关键字,请修改"),
+    TABLE_FIELD_NOT_EXIST("2010", "表字段不存在"),
+    FILE_PICTURE_IS_NULL("2011", "附件不存在"),
+    FILE_PICTURE_DELETE("2012", "删除附件失败"),
+    DIC_BIANMA_REPEAT("2013", "字典编码重复"),
+
+
+
+
+
+    /** *********** 3xxx用户错误 ******************* */
+    USER_NOT_LOGIN("3001", "用户未登录"),
+    USER_ACCOUNT_EXPIRED("3002", "账号已过期"),
+    USER_CREDENTIALS_ERROR("3003", "用户名或密码错误"),
+    USER_CREDENTIALS_EXPIRED("3004", "密码过期"),
+    USER_ACCOUNT_NOT_BIND_ENTERPRISE("3005", "当前账号未绑定企业"),
+    USER_ACCOUNT_LOCKED("3006", "账号被锁定"),
+    USER_ACCOUNT_NOT_EXIST("3007", "账号不存在"),
+    USER_ACCOUNT_ALREADY_EXIST("3008", "账号已存在"),
+    USER_ACCOUNT_USE_BY_OTHERS("3009", "账号下线"),
+    USER_NO_PERMISSION("3010", "当前账号没有此权限"),
+    USERNAME_NOT_BLANK("3011", "用户不能为空"),
+    USER_LOGIN_ERROR("3012", "用户登录失败"),
+    USER_LOGOUT_ERROR("3013", "用户退出失败"),
+    USER_ACCOUNT_USE_BY_OTHERS_ERROR("3014", "账号下线异常"),
+    USER_ACCESS_DENIED("3015", "权限认证失败"),
+    USERNAME_EXIST_ERROR("3016", "用户名重名"),
+
+    ROLE_NAME_ALREADY_EXIST("3101", "角色已存在"),
+
+    /** ********** 4xxx业务错误 *********************** */
+    ENTERPRISE_NOT_EXIST("4001", "当前企业不存在"),
+    APP_KEY_EXIST("4002", "应用key已存在"),
+    APP_NOT_EXIST("4003", "应用不存在"),
+    APP_PAGE_NAME_EXIST("4004", "当前页面名称已存在"),
+    APP_PAGE_KEY_EXIST("4005", "当前页面key已存在"),
+    APP_PAGE_NOT_EXIST("4006", "当前页面不存在,或已删除"),
+    APP_PAGE_TYPE_ERROR("4007", "页面类型有误"),
+    APP_PAGE_HOME_IS_NOT_EXIST("4008", "请设置首页"),
+    CAN_NOT_DELETE_HOME_PAGE("4009", "请勿删除首页"),
+    DELETE_PAGE_ERROR("4010", "删除页面失败"),
+    CONFIG_CUSTOM_ERROR("4011", "配置自定义页面失败"),
+    APP_PAGE_PARENT_NOT_EXIST("4012", "当前页面的父级页面不存在,或已删除"),
+    DATASOURCE_NAME_EXIST("4013", "当前数据源名称已经存在,请修改后重试"),
+    DATASOURCE_NOT_EXIST("4014", "当前数据源不存在"),
+    DATASOURCE_HAS_DELETED("4015", "当前数据源已删除"),
+    MODEL_NOT_EXIST("4016", "当前模型不存在"),
+    MODEL_HAS_DELETED("4017", "当前模型已删除"),
+    MODEL_NAME_HAS_EXIST("4018", "当前模型名称已存在"),
+    DATASOURCE_NOT_CONFIG("4019", "数据源配置为空,请联系管理员"),
+    DATASOURCE_NOT_CONFIG_DIALECT("4020", "未配置数据源的类型"),
+    DATASOURCE_NOT_CONFIG_DRIVER_CLASS_NAME("4021", "未配置数据源的驱动"),
+    DEPT_USER_EXIST("4022", "部门下存在用户"),
+    NOT_CONFIG_PAGE_BUTTON_TYPE("4023", "未配置按钮雷星"),
+    MODEL_PAGE_RELATION_MODEL("4024", "已关联当前模型页面"),
+    MODEL_PAGE_NOT_EXIST("4025", "模型页面不存在或已被删除"),
+    MODEL_HAS_RELATION_MODEL_PAGE("4026", "当前模型已关联模型页面,不允许删除"),
+    FORM_NOT_EXIST("4027", "模型表单不存在"),
+    READ_FILE_ERROR("4028", "读取模型页面的模板文件失败"),
+    MODEL_PAGE_CONTENT_NULL("4029", "未配置模型页面的模板文件"),
+    NOT_CONFIG_QUERY_SQL("4030", "未配置查询语句"),
+    APP_PAGE_BUTTON_OPTION_VALUE_ERROR("4031", "未配置接口"),
+    DELETE_COLUMN_ERROR("4032", "删除当前失败"),
+    INSERT_DATA_ERROR("4033", "新建数据失败"),
+    EDIT_DATA_ERROR("4034", "编辑数据失败"),
+    DATASOURCE_HAS_MODELS("4035", "当前数据源存在模型,不允许删除"),
+    NOT_CONFIG_FORM_API("4036", "未配置模型表单页的接口信息"),
+    PLEASE_WRITE_AT_LEAST_DATA("4037", "请至少填写一行数据"),
+    AMIS_PAGE_ERROR("4038", "分页参数异常"),
+    QUERY_APP_PAGE_QUERY_FIELD_ERROR("4039", "查询搜素参数异常"),
+    REQUEST_PARAM_NOT_IN_APP_PAGE_QUERY_FIELD("4040", "请求参数不在查询数据表中"),
+    STYLE_LANGUAGE_ON_CSS("4041", "自定义css中的样式语言不能为空"),
+    APP_CONFIG_TYPE_NOT_EXIST("4042", "不支持当前应用设置的类型"),
+    APP_CONFIG_NOT_EXIST_OR_DELETED("4043", "当前设置不存在或已被删除"),
+    APP_HAS_CONFIG_ON_THIS_TYPE("4044", "当前应用设置的类型已存在,请更新"),
+    NOT_SUPPORT_COMPONENT_FRAME("4045", "不支持当前组件框架"),
+    NOT_SUPPORT_COMPONENT_TYPE("4046", "不支持当前组件类型"),
+    CURRENT_APP_KEY_EXIST("4047", "当前应用的组件key已存在"),
+    CREATE_CUSTOM_COMPONENT_ERROR("4048", "新增自定义组件失败"),
+    APP_CUSTOM_COMPONENT_NOT_EXIST("4049", "当前组件不存在或已被删除"),
+    UPDATE_CUSTOM_COMPONENT_ERROR("4050", "更新自定义组件失败"),
+    DELETED_CUSTOM_COMPONENT_ERROR("4051", "删除自定义组件失败"),
+    INSERT_COMPONENT_DEPENDENCE_ERROR("4052", "新增自定义组件依赖项失败"),
+    DELETE_COMPONENT_DEPENDENCE_ERROR("4053", "删除自定义组件依赖项失败"),
+    CURRENT_COMPONENT_DEPENDENCE_NOT_EXIST("4054", "当前自定义组件依赖项不存在或已被删除"),
+    CURRENT_APP_NAME_EXIST("4055", "当前应用的组件名称已存在"),
+    NOT_SUPPORT_DATASOURCE_FROM("4056", "不支持当前的数据库来源"),
+    JDBC_CONFIG_ERROR("4057", "平台内置的数据源配置有误"),
+    NOT_SUPPORT_MODEL_TYPE("4058", "不支持当前的页面模板"),
+    NOT_SUPPORT_CUSTOM_PAGE("4059", "暂不支持自定义页面"),
+    FORM_PAGE_ON_DEVELOPING("4060", "自定义页面的该功能正在开发中..."),
+    APP_PAGE_QUERY_FIELD_NOT_EXIST("4061", "当前查询条件不存在,或已被删除"),
+    APP_PAGE_BUTTON_NOT_EXIST("4062", "当前页面按钮不存在,或已被删除"),
+    TABLE_KEY_MORE_THEN_ONE("4063", "主键超过一个"),
+    TABLE_KEY_LESS_THEN_ONE("4064", "主键必须存在"),
+    TABLE_KEY_MUST_BE_INT("4065", "主键必须为整数类型"),
+    TABLE_FIELD_MUST_EXIST("4066", "必须存在表字段"),
+    CURRENT_MODEL_PAGE_HAS_CONVERSION_CUSTOM_PAGE("4067", "当前模型页面已转成自定义页面"),
+    NOT_SUPPORT_RELEASE_STATUS("4068", "发布版本状态有误"),
+    APP_FORM_BUTTON_NOT_EXIST("4067", "当前表单按钮不存在,或已被删除"),
+    DATASOURCE_KEY_EXIST_ERROR("4068","数据源key已存在")
+    ;
+
+    CodeMessageEnum(String code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    /** 返回到前端的code值 */
+    private String code;
+
+    /** 返回到前端的code对应的message值 */
+    private String message;
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    @Override
+    public String getMessage() {
+        return this.message;
+    }
+
+//    public static CodeVo getJsonObjectByCode(String code) {
+//        CodeVo codeVo = new CodeVo();
+//        if (Tools.isEmpty(code)) {
+//            return codeVo;
+//        }
+//        for (CodeMessageEnum enumObj : CodeMessageEnum.values()) {
+//            if (enumObj.getCode().equals(code)) {
+//                return new CodeVo(code, enumObj.message);
+//            }
+//        }
+//        return codeVo;
+//    }
+}
diff --git a/src/main/java/com/zcloud/util/examUntil/ErrorOperation.java b/src/main/java/com/zcloud/util/examUntil/ErrorOperation.java
new file mode 100644
index 00000000..6489d786
--- /dev/null
+++ b/src/main/java/com/zcloud/util/examUntil/ErrorOperation.java
@@ -0,0 +1,14 @@
+package com.zcloud.util.examUntil;
+
+import java.lang.annotation.*;
+
+/**
+ * @Description: 异常拦截接口
+ * @Author: dearLin
+ * @Date: 2023/3/8
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface ErrorOperation {
+}
diff --git a/src/main/java/com/zcloud/util/examUntil/GlobalExceptionHandler.java b/src/main/java/com/zcloud/util/examUntil/GlobalExceptionHandler.java
new file mode 100644
index 00000000..138f443f
--- /dev/null
+++ b/src/main/java/com/zcloud/util/examUntil/GlobalExceptionHandler.java
@@ -0,0 +1,94 @@
+package com.zcloud.util.examUntil;
+
+/**
+ * 说明:TODO
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+
+
+import com.zcloud.util.ReturnMap;
+import org.mybatis.spring.MyBatisSystemException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import javax.servlet.http.HttpServletRequest;
+
+import static com.zcloud.util.examUntil.CodeMessageEnum.SERVER_BUSY;
+
+
+/**
+ *  全局异常
+ */
+@RestControllerAdvice(annotations  = {ErrorOperation.class})
+//@Slf4j
+public class GlobalExceptionHandler {
+
+    /**
+     * 业务异常类
+     *
+     */
+    @ExceptionHandler(value = BizException.class)
+    @ResponseBody
+    public ReturnMap bizExceptionHandler(HttpServletRequest req, BizException e) {
+        e.printStackTrace();
+//        log.error("发生业务异常: {}, 请求接口: {}", e.getMessage(), req.getRequestURI());
+        return ReturnMap.error("2001" ,e.getMessage(), req.getRequestURI());
+    }
+
+
+    /**
+     * 空指针异常
+     *
+     * @param e 异常信息
+     * @param req 请求
+     */
+    @ExceptionHandler(value = NullPointerException.class)
+    @ResponseBody
+    public ReturnMap exceptionHandler(HttpServletRequest req, NullPointerException e) {
+        e.printStackTrace();
+//        log.error("空指针异常信息: {}, 请求接口: {}", e, req.getRequestURI());
+        return ReturnMap.error(SERVER_BUSY, req.getRequestURI());
+    }
+
+    /**
+     * 接口请求方法异常
+     *
+     */
+    @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
+    @ResponseBody
+    public ReturnMap methodNotSupportedExceptionHandler(HttpServletRequest req, Exception e) {
+        e.printStackTrace();
+//        log.error("请求方法异常信息: {},请求接口: {}", e, req.getRequestURI());
+        return ReturnMap.error(SERVER_BUSY, req.getRequestURI());
+    }
+
+    /**
+     * SQL 语法错误异常
+     */
+    @ExceptionHandler(value = MyBatisSystemException.class)
+    @ResponseBody
+    public ReturnMap sqlSyntaxErrorExceptionHandler(HttpServletRequest req, Exception e) {
+        e.printStackTrace();
+//        log.error("MyBatis系统异常信息: {},请求接口: {}", e, req.getRequestURI());
+        return ReturnMap.error(SERVER_BUSY, req.getRequestURI());
+    }
+
+
+
+    /**
+     * 其他异常信息
+     *
+     * @param req
+     * @param e
+     */
+    @ExceptionHandler(value = Exception.class)
+    @ResponseBody
+    public ReturnMap exceptionHandler(HttpServletRequest req, Exception e) {
+        e.printStackTrace();
+//        log.error("未知异常: {}, 请求接口: {}", e, req.getRequestURI());
+        return ReturnMap.error(SERVER_BUSY, req.getRequestURI());
+    }
+}
diff --git a/src/main/java/com/zcloud/util/examUntil/HttpContextUtils.java b/src/main/java/com/zcloud/util/examUntil/HttpContextUtils.java
new file mode 100644
index 00000000..fcae61ef
--- /dev/null
+++ b/src/main/java/com/zcloud/util/examUntil/HttpContextUtils.java
@@ -0,0 +1,54 @@
+package com.zcloud.util.examUntil;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 说明:获取请求参数工具类
+ * 作者:wangxuan
+ * 官网:www.zcloudchina.com
+ */
+public class HttpContextUtils {
+    public static HttpServletRequest getHttpServletRequest() {
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        if(requestAttributes == null){
+            return null;
+        }
+
+        return ((ServletRequestAttributes) requestAttributes).getRequest();
+    }
+
+    public static Map<String, String> getParameterMap(HttpServletRequest request) {
+        Enumeration<String> parameters = request.getParameterNames();
+
+        Map<String, String> params = new HashMap<>();
+        while (parameters.hasMoreElements()) {
+            String parameter = parameters.nextElement();
+            String value = request.getParameter(parameter);
+            if (StringUtils.isNotBlank(value)) {
+                params.put(parameter, value);
+            }
+        }
+
+        return params;
+    }
+
+    public static String getDomain(){
+        HttpServletRequest request = getHttpServletRequest();
+        StringBuffer url = request.getRequestURL();
+        return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString();
+    }
+
+    public static String getOrigin(){
+        HttpServletRequest request = getHttpServletRequest();
+        return request.getHeader(HttpHeaders.ORIGIN);
+    }
+}
diff --git a/src/main/java/com/zcloud/util/examUntil/UserChangeRecordConfig.java b/src/main/java/com/zcloud/util/examUntil/UserChangeRecordConfig.java
new file mode 100644
index 00000000..a4091bc6
--- /dev/null
+++ b/src/main/java/com/zcloud/util/examUntil/UserChangeRecordConfig.java
@@ -0,0 +1,99 @@
+package com.zcloud.util.examUntil;
+
+import com.alibaba.fastjson.JSON;
+import com.zcloud.entity.PageData;
+import com.zcloud.util.DateUtil;
+import com.zcloud.util.Jurisdiction;
+import com.zcloud.util.UuidUtil;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: TODO
+ * @Author: dearLin
+ * @Date: 2023/8/17/017 15:10
+ * @Param:
+ * @Return:
+ */
+public class UserChangeRecordConfig {
+
+    public static final String PC = "pc端";
+    public static final String APP = "app端";
+    public static final String APP_EDIT_BASE_INFO = "app端修改用户基础信息";
+    public static final String APP_EDIT_CORP_BASE_INFO = "app端修改用户就职信息";
+    public static final String PC_EDIT_BASE_INFO = "pc端修改用户基础信息";
+    public static final String PC_IMPROT_USER_BASE_INFO = "pc端导入用户信息";
+    public static final String PC_EDIT_CORP_BASE_INFO = "pc端修改用户就职信息";
+    public static final String PC_DEL_CORP_BASE_INFO = "pc端解除用户服务信息";
+
+
+    public static final String PC_IMPROT_USER_BASE_img = "img端导入用户信息";
+    /**
+     * @Description: 修改信息
+     * @Author: dearLin
+     * @Date: 2023/8/17/017 15:47
+     * @Param: [java.util.List<com.zcloud.entity.PageData>, com.zcloud.entity.PageData] [logUserList, user]
+     * @Return: java.util.List<com.zcloud.entity.PageData>
+     */
+    public static List<PageData> editUserLogPc(List<PageData> logUserList, PageData user) {
+        user.put("CREATTIME", DateUtil.date2Str(new Date()));
+        user.put("CHANGE_RECORD_ID", UuidUtil.get32UUID());
+        user.put("CHANGE_DATA", JSON.toJSONString(user));
+        user.put("CREATOR", Jurisdiction.getUSER_ID());
+        user.put("CREATOR_NAME", Jurisdiction.getUsername());
+        logUserList.add(user);
+        return logUserList;
+    }
+
+    /**
+     * @Description: 导入用户信息
+     * @Author: dearLin
+     * @Date: 2023/8/17/017 15:47
+     * @Param: [java.util.List<com.zcloud.entity.PageData>, com.zcloud.entity.PageData] [logUserList, user]
+     * @Return: java.util.List<com.zcloud.entity.PageData>
+     */
+    public static void importUserLogPc(PageData user) {
+        user.put("CREATTIME", DateUtil.date2Str(new Date()));
+        user.put("CHANGE_RECORD_ID", UuidUtil.get32UUID());
+        user.put("CHANGE_DATA", JSON.toJSONString(user));
+        user.put("CREATOR", Jurisdiction.getUSER_ID());
+        user.put("CREATOR_NAME", Jurisdiction.getUsername());
+        user.put("REAMKE", "人员被" + Jurisdiction.getUsername() + "导入,就职于:" + user.getString("CORPINFO_NAME") + "。部门:" + user.getString("DEPARTMENT_NAME"));
+    }
+
+    /**
+     * @Description: 导入修改用户信息
+     * @Author: dearLin
+     * @Date: 2023/8/17/017 15:47
+     * @Param: [java.util.List<com.zcloud.entity.PageData>, com.zcloud.entity.PageData] [logUserList, user]
+     * @Return: java.util.List<com.zcloud.entity.PageData>
+     */
+    public static void importEditUserLogPc(PageData user) {
+        user.put("CREATTIME", DateUtil.date2Str(new Date()));
+        user.put("CHANGE_RECORD_ID", UuidUtil.get32UUID());
+        user.put("CHANGE_DATA", JSON.toJSONString(user));
+        user.put("CREATOR", Jurisdiction.getUSER_ID());
+        user.put("CREATOR_NAME", Jurisdiction.getUsername());
+        user.put("REAMKE", "人员被" + Jurisdiction.getUsername() + "导入更新,就职于:" + user.getString("CORPINFO_NAME") + "。部门:" + user.getString("DEPARTMENT_NAME"));
+
+    }
+
+    /**
+     * @Description: 解除服务关系
+     * @Author: dearLin
+     * @Date: 2023/8/17/017 15:47
+     * @Param: [java.util.List<com.zcloud.entity.PageData>, com.zcloud.entity.PageData] [logUserList, user]
+     * @Return: java.util.List<com.zcloud.entity.PageData>
+     */
+    public static List<PageData> clearRelation(List<PageData> logUserList, PageData user) {
+        user.put("CREATTIME", DateUtil.date2Str(new Date()));
+        user.put("CHANGE_RECORD_ID", UuidUtil.get32UUID());
+        user.put("CHANGE_DATA", JSON.toJSONString(user));
+        user.put("CREATOR", Jurisdiction.getUSER_ID());
+        user.put("CREATOR_NAME", Jurisdiction.getUsername());
+        user.put("REAMKE", "人员被" + Jurisdiction.getUsername() + "解除服务关系,曾就职于:" + user.getString("CORPINFO_NAME") + "。部门:" + user.getString("DEPARTMENT_NAME"));
+        logUserList.add(user);
+        return logUserList;
+    }
+}
diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties
new file mode 100644
index 00000000..c5980987
--- /dev/null
+++ b/src/main/resources/application-dev.properties
@@ -0,0 +1,61 @@
+datasource.no1.driver-class-name: com.mysql.cj.jdbc.Driver
+datasource.no1.url=jdbc:mysql://192.168.0.18:3306/qa-cmt-prevention?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
+datasource.no1.username=root
+datasource.no1.password=root
+datasource.no2.driver-class-name:  com.mysql.cj.jdbc.Driver
+datasource.no2.url=jdbc:mysql://192.168.0.18:3306/qa-cmt-regulatory?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
+datasource.no2.username=root
+datasource.no2.password=root
+
+
+
+#druid\u8FDE\u63A5\u6C60
+spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
+#\u6700\u5927\u6D3B\u8DC3\u6570
+spring.datasource.maxActive: 20
+#\u521D\u59CB\u5316\u6570\u91CF
+spring.datasource.initialSize: 1
+#\u6700\u5927\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u65F6\u95F4
+spring.datasource.maxWait: 60000
+#\u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5PSCache\u7684\u5927\u5C0F
+spring.datasource.poolPreparedStatements: true
+spring.datasource.maxPoolPreparedStatementPerConnectionSize: 20
+#\u901A\u8FC7connectionProperties\u5C5E\u6027\u6765\u6253\u5F00mergeSql\u529F\u80FD\uFF1B\u6162SQL\u8BB0\u5F55
+#connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+spring.datasource.minIdle: 1
+spring.datasource.timeBetweenEvictionRunsMillis: 60000
+spring.datasource.minEvictableIdleTimeMillis: 300000
+spring.datasource.validationQuery: select 1 from dual
+spring.datasource.testWhileIdle: true
+spring.datasource.testOnBorrow: false
+spring.datasource.testOnReturn: false
+#\u914D\u7F6E\u76D1\u63A7\u7EDF\u8BA1\u62E6\u622A\u7684filters\uFF0C\u53BB\u6389\u540E\u76D1\u63A7\u754C\u9762sql\u5C06\u65E0\u6CD5\u7EDF\u8BA1,'wall'\u7528\u4E8E\u9632\u706B\u5899
+filters: stat, wall, log4j
+
+#\u7F13\u5B58\u914D\u7F6E\u6587\u4EF6\u4F4D\u7F6E
+spring.cache.ehcache.cofnig=ehcache.xml
+
+#\u914D\u7F6E\u8FD9\u53E5\u8BDD,\u63A7\u5236\u53F0\u8F93\u51FAsql\u8BED\u53E5
+logging.level.com.zcloud.mapper=debug
+
+#\u4E0A\u4F20\u6587\u4EF6\u5927\u5C0F\u9650\u5236
+spring.servlet.multipart.max-file-size=500MB
+spring.servlet.multipart.max-request-size=500MB
+
+#activiti\u6A21\u578B\u68C0\u6D4B
+spring.activiti.check-process-definitions=false
+
+#\u5B57\u7B26
+spring.http.encoding.charset=UTF-8
+spring.http.encoding.force=true
+spring.http.encoding.enabled=true
+# \u5173\u95EDspringboot\u542F\u52A8\u65F6\u7684banner
+spring.main.banner-mode=off
+#jar\u5305\u90E8\u7F72\u65F6\u53BB\u6389\u6CE8\u91CA
+#web.upload-path=h:/
+#web.front-path=h:/
+#spring.resources.static-locations=file:${web.upload-path},file:${web.front-path}
+#
+preventionxgf.api.url=http://192.168.0.18:8993/qa-prevention-xgf/
+qa-regulatory-gwj.api.url=http://192.168.0.18:8092/qa-regulatory-gwj/
+
diff --git a/src/main/resources/application-2.properties b/src/main/resources/application-prod.properties
similarity index 55%
rename from src/main/resources/application-2.properties
rename to src/main/resources/application-prod.properties
index 9ffd3872..a2a0619e 100644
--- a/src/main/resources/application-2.properties
+++ b/src/main/resources/application-prod.properties
@@ -1,16 +1,12 @@
-spring.application.name=qa-prevention-gwj
-server.port=8091
-#数据源  172.24.151.16  39.103.224.166  39.101.130.96 192.168.192.202  gwjsjkzcloud888888
+
 datasource.no1.driver-class-name: com.mysql.cj.jdbc.Driver
-datasource.no1.url=jdbc:mysql://39.101.130.96:33068/qa-gwj-prevention?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
+datasource.no1.url=jdbc:mysql://192.168.0.18:3306/qa-cmt-prevention?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
 datasource.no1.username=root
-datasource.no1.password=Mysql@zcloud88888
+datasource.no1.password=root
 datasource.no2.driver-class-name:  com.mysql.cj.jdbc.Driver
-datasource.no2.url=jdbc:mysql://39.101.130.96:33068/qa-gwj-regulatory?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
+datasource.no2.url=jdbc:mysql://192.168.0.18:3306/qa-cmt-regulatory?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
 datasource.no2.username=root
-datasource.no2.password=Mysql@zcloud88888
-
-
+datasource.no2.password=root
 #datasource.no1.driver-class-name: com.mysql.cj.jdbc.Driver
 #datasource.no1.url=jdbc:mysql://192.168.192.202:33068/qa-gwj-prevention?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
 #datasource.no1.username=root
@@ -20,18 +16,18 @@ datasource.no2.password=Mysql@zcloud88888
 #datasource.no2.username=root
 #datasource.no2.password=gwjsjkzcloud888888
 
-#druid连接池
+#druid\u8FDE\u63A5\u6C60
 spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
-#最大活跃数
+#\u6700\u5927\u6D3B\u8DC3\u6570
 spring.datasource.maxActive: 20
-#初始化数量
+#\u521D\u59CB\u5316\u6570\u91CF
 spring.datasource.initialSize: 1
-#最大连接等待超时时间
+#\u6700\u5927\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u65F6\u95F4
 spring.datasource.maxWait: 60000
-#打开PSCache,并且指定每个连接PSCache的大小
+#\u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5PSCache\u7684\u5927\u5C0F
 spring.datasource.poolPreparedStatements: true
 spring.datasource.maxPoolPreparedStatementPerConnectionSize: 20
-#通过connectionProperties属性来打开mergeSql功能;慢SQL记录
+#\u901A\u8FC7connectionProperties\u5C5E\u6027\u6765\u6253\u5F00mergeSql\u529F\u80FD\uFF1B\u6162SQL\u8BB0\u5F55
 #connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
 spring.datasource.minIdle: 1
 spring.datasource.timeBetweenEvictionRunsMillis: 60000
@@ -40,34 +36,34 @@ spring.datasource.validationQuery: select 1 from dual
 spring.datasource.testWhileIdle: true
 spring.datasource.testOnBorrow: false
 spring.datasource.testOnReturn: false
-#配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
+#\u914D\u7F6E\u76D1\u63A7\u7EDF\u8BA1\u62E6\u622A\u7684filters\uFF0C\u53BB\u6389\u540E\u76D1\u63A7\u754C\u9762sql\u5C06\u65E0\u6CD5\u7EDF\u8BA1,'wall'\u7528\u4E8E\u9632\u706B\u5899
 filters: stat, wall, log4j
 
-#缓存配置文件位置
+#\u7F13\u5B58\u914D\u7F6E\u6587\u4EF6\u4F4D\u7F6E
 spring.cache.ehcache.cofnig=ehcache.xml
 
-#配置这句话,控制台输出sql语句
+#\u914D\u7F6E\u8FD9\u53E5\u8BDD,\u63A7\u5236\u53F0\u8F93\u51FAsql\u8BED\u53E5
 logging.level.com.zcloud.mapper=debug
 
-#上传文件大小限制
+#\u4E0A\u4F20\u6587\u4EF6\u5927\u5C0F\u9650\u5236
 spring.servlet.multipart.max-file-size=500MB
 spring.servlet.multipart.max-request-size=500MB
 
-#activiti模型检测
+#activiti\u6A21\u578B\u68C0\u6D4B
 spring.activiti.check-process-definitions=false
 
-#字符
+#\u5B57\u7B26
 spring.http.encoding.charset=UTF-8
 spring.http.encoding.force=true
 spring.http.encoding.enabled=true
-# 关闭springboot启动时的banner
+# \u5173\u95EDspringboot\u542F\u52A8\u65F6\u7684banner
 spring.main.banner-mode=off
-#jar包部署时去掉注释
+#jar\u5305\u90E8\u7F72\u65F6\u53BB\u6389\u6CE8\u91CA
 #web.upload-path=h:/
 #web.front-path=h:/
 #spring.resources.static-locations=file:${web.upload-path},file:${web.front-path}
-
-preventionxgf.api.url=http://192.168.0.45:8088/
-qa-regulatory-gwj.api.url=http://192.168.0.45:8092/
-
-
+#\u6B63\u5F0F
+#preventionxgf.api.url=http://192.168.192.201:8993/qa-prevention-xgf/
+#qa-regulatory-gwj.api.url=http://192.168.192.201:8092/qa-regulatory-gwj/
+preventionxgf.api.url=http://192.168.0.18:8993/qa-prevention-xgf/
+qa-regulatory-gwj.api.url=http://192.168.0.18:8092/qa-regulatory-gwj/
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index bc934404..8547d6f2 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,72 +1,13 @@
-spring.application.name=qa-prevention-gwj
-server.port=8091
-#数据源  172.24.151.16  39.103.224.166  39.101.130.96 192.168.192.202  gwjsjkzcloud888888
-#datasource.no1.driver-class-name: com.mysql.cj.jdbc.Driver
-#datasource.no1.url=jdbc:mysql://39.101.130.96:33068/qa-gwj-prevention?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
-#datasource.no1.username=root
-#datasource.no1.password=Mysql@zcloud88888
-#datasource.no2.driver-class-name:  com.mysql.cj.jdbc.Driver
-#datasource.no2.url=jdbc:mysql://39.101.130.96:33068/qa-gwj-regulatory?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
-#datasource.no2.username=root
-#datasource.no2.password=Mysql@zcloud88888
+spring.application.name=qa-prevention-cmt
+server.port=8095
+
+#??
+#spring.profiles.active=local
+#\uFFFD\uFFFD\uFFFD\uFFFD31\u02B1\u02B9\uFFFD\uFFFD
+spring.profiles.active=dev
+#??
+#spring.profiles.active=master
 
 
-datasource.no1.driver-class-name: com.mysql.cj.jdbc.Driver
-datasource.no1.url=jdbc:mysql://192.168.192.202:33068/qa-gwj-prevention?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
-datasource.no1.username=root
-datasource.no1.password=gwjsjkzcloud888888
-datasource.no2.driver-class-name:  com.mysql.cj.jdbc.Driver
-datasource.no2.url=jdbc:mysql://192.168.192.202:33068/qa-gwj-regulatory?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
-datasource.no2.username=root
-datasource.no2.password=gwjsjkzcloud888888
 
-#druid连接池
-spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
-#最大活跃数
-spring.datasource.maxActive: 20
-#初始化数量
-spring.datasource.initialSize: 1
-#最大连接等待超时时间
-spring.datasource.maxWait: 60000
-#打开PSCache,并且指定每个连接PSCache的大小
-spring.datasource.poolPreparedStatements: true
-spring.datasource.maxPoolPreparedStatementPerConnectionSize: 20
-#通过connectionProperties属性来打开mergeSql功能;慢SQL记录
-#connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
-spring.datasource.minIdle: 1
-spring.datasource.timeBetweenEvictionRunsMillis: 60000
-spring.datasource.minEvictableIdleTimeMillis: 300000
-spring.datasource.validationQuery: select 1 from dual
-spring.datasource.testWhileIdle: true
-spring.datasource.testOnBorrow: false
-spring.datasource.testOnReturn: false
-#配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
-filters: stat, wall, log4j
-
-#缓存配置文件位置
-spring.cache.ehcache.cofnig=ehcache.xml
-
-#配置这句话,控制台输出sql语句
-logging.level.com.zcloud.mapper=debug
-
-#上传文件大小限制
-spring.servlet.multipart.max-file-size=500MB
-spring.servlet.multipart.max-request-size=500MB
-
-#activiti模型检测
-spring.activiti.check-process-definitions=false
-
-#字符
-spring.http.encoding.charset=UTF-8
-spring.http.encoding.force=true
-spring.http.encoding.enabled=true
-# 关闭springboot启动时的banner
-spring.main.banner-mode=off
-#jar包部署时去掉注释
-#web.upload-path=h:/
-#web.front-path=h:/
-#spring.resources.static-locations=file:${web.upload-path},file:${web.front-path}
-
-preventionxgf.api.url=http://192.168.192.201:8993/qa-prevention-xgf/
-qa-regulatory-gwj.api.url=http://192.168.192.201:8092/qa-regulatory-gwj/
 
diff --git a/src/main/resources/application3.properties b/src/main/resources/application3.properties
deleted file mode 100644
index bc934404..00000000
--- a/src/main/resources/application3.properties
+++ /dev/null
@@ -1,72 +0,0 @@
-spring.application.name=qa-prevention-gwj
-server.port=8091
-#数据源  172.24.151.16  39.103.224.166  39.101.130.96 192.168.192.202  gwjsjkzcloud888888
-#datasource.no1.driver-class-name: com.mysql.cj.jdbc.Driver
-#datasource.no1.url=jdbc:mysql://39.101.130.96:33068/qa-gwj-prevention?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
-#datasource.no1.username=root
-#datasource.no1.password=Mysql@zcloud88888
-#datasource.no2.driver-class-name:  com.mysql.cj.jdbc.Driver
-#datasource.no2.url=jdbc:mysql://39.101.130.96:33068/qa-gwj-regulatory?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
-#datasource.no2.username=root
-#datasource.no2.password=Mysql@zcloud88888
-
-
-datasource.no1.driver-class-name: com.mysql.cj.jdbc.Driver
-datasource.no1.url=jdbc:mysql://192.168.192.202:33068/qa-gwj-prevention?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
-datasource.no1.username=root
-datasource.no1.password=gwjsjkzcloud888888
-datasource.no2.driver-class-name:  com.mysql.cj.jdbc.Driver
-datasource.no2.url=jdbc:mysql://192.168.192.202:33068/qa-gwj-regulatory?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
-datasource.no2.username=root
-datasource.no2.password=gwjsjkzcloud888888
-
-#druid连接池
-spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
-#最大活跃数
-spring.datasource.maxActive: 20
-#初始化数量
-spring.datasource.initialSize: 1
-#最大连接等待超时时间
-spring.datasource.maxWait: 60000
-#打开PSCache,并且指定每个连接PSCache的大小
-spring.datasource.poolPreparedStatements: true
-spring.datasource.maxPoolPreparedStatementPerConnectionSize: 20
-#通过connectionProperties属性来打开mergeSql功能;慢SQL记录
-#connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
-spring.datasource.minIdle: 1
-spring.datasource.timeBetweenEvictionRunsMillis: 60000
-spring.datasource.minEvictableIdleTimeMillis: 300000
-spring.datasource.validationQuery: select 1 from dual
-spring.datasource.testWhileIdle: true
-spring.datasource.testOnBorrow: false
-spring.datasource.testOnReturn: false
-#配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
-filters: stat, wall, log4j
-
-#缓存配置文件位置
-spring.cache.ehcache.cofnig=ehcache.xml
-
-#配置这句话,控制台输出sql语句
-logging.level.com.zcloud.mapper=debug
-
-#上传文件大小限制
-spring.servlet.multipart.max-file-size=500MB
-spring.servlet.multipart.max-request-size=500MB
-
-#activiti模型检测
-spring.activiti.check-process-definitions=false
-
-#字符
-spring.http.encoding.charset=UTF-8
-spring.http.encoding.force=true
-spring.http.encoding.enabled=true
-# 关闭springboot启动时的banner
-spring.main.banner-mode=off
-#jar包部署时去掉注释
-#web.upload-path=h:/
-#web.front-path=h:/
-#spring.resources.static-locations=file:${web.upload-path},file:${web.front-path}
-
-preventionxgf.api.url=http://192.168.192.201:8993/qa-prevention-xgf/
-qa-regulatory-gwj.api.url=http://192.168.192.201:8092/qa-regulatory-gwj/
-
diff --git a/src/main/resources/mybatis/datasource/gatemachine/GateAreaMapper.xml b/src/main/resources/mybatis/datasource/gatemachine/GateAreaMapper.xml
new file mode 100644
index 00000000..3cbba08b
--- /dev/null
+++ b/src/main/resources/mybatis/datasource/gatemachine/GateAreaMapper.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zcloud.mapper.datasource.gatemachine.GateAreaMapper">
+    <sql id="table"> mk_gate_area </sql>
+    <sql id="filed">
+        f.GATE_AREA_ID,
+        f.GATE_AREA_NAME,
+        f.GATE_AREA_TYPE,
+        f.LATITUDE,
+        f.LONGITUDE,
+        f.CORPINFO_ID,
+        f.ISDELETE,
+        f.CREATOR,
+        f.CREATTIME,
+        f.OPERATOR,
+        f.OPERATTIME
+    </sql>
+    <insert id="save">
+        INSERT INTO <include refid="table"></include>
+        (
+            GATE_AREA_ID,
+            GATE_AREA_NAME,
+            GATE_AREA_TYPE,
+            LATITUDE,
+            LONGITUDE,
+            CORPINFO_ID,
+            ISDELETE,
+            CREATOR,
+            CREATTIME,
+            OPERATOR,
+            OPERATTIME
+         )
+        VALUES (
+                   #{GATE_AREA_ID},
+                   #{GATE_AREA_NAME},
+                   #{GATE_AREA_TYPE},
+                   #{LATITUDE},
+                   #{LONGITUDE},
+                   #{CORPINFO_ID},
+                   #{ISDELETE},
+                   #{CREATOR},
+                   #{CREATTIME},
+                   #{OPERATOR},
+                   #{OPERATTIME}
+                )
+    </insert>
+    <select id="getDatalistPage" resultType="com.zcloud.entity.PageData">
+        select <include refid="filed"></include>, CONCAT_WS('--', f.LATITUDE,f.LONGITUDE) LONGTITUDEANDLATITUDE,
+        (select count(1) from BUS_GATEVIDEO v where v.GATE_AREA_ID = f.GATE_AREA_ID and v.ISDELETE = '0') as VIDEO_COUNT,
+        (select count(1) from mk_gate_machine m where m.GATE_AREA_ID = f.GATE_AREA_ID and m.ISDELETE = '0') as GATE_COUNT
+        from
+        <include refid="table"></include> f where f.ISDELETE = 0
+        <if test="pd.GATE_AREA_NAME != null and pd.GATE_AREA_NAME != ''">
+            and f.GATE_AREA_NAME like CONCAT(CONCAT('%', #{pd.GATE_AREA_NAME}),'%')
+        </if>
+        <if test="pd.CORPINFO_ID != null and pd.CORPINFO_ID != ''">
+            and f.CORPINFO_ID = #{pd.CORPINFO_ID}
+        </if>
+        <if test="pd.GATE_AREA_TYPE != null and pd.GATE_AREA_TYPE != ''">
+            and f.GATE_AREA_TYPE = #{pd.GATE_AREA_TYPE}
+        </if>
+        order by f.OPERATTIME desc
+    </select>
+    <select id="getGatePosition" resultType="com.zcloud.entity.PageData">
+        select LONGITUDE,
+        LATITUDE,
+        GATE_AREA_NAME,
+        '${TYPE}' TYPE,
+        GATE_AREA_ID id
+        FROM
+        mk_gate_area
+        WHERE
+        isdelete = 0 and GATE_AREA_TYPE = #{GATE_AREA_TYPE}
+        <if test="AREA != null and AREA != ''">
+            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
+        </if>
+        <if test="CORPINFO_ID != null and CORPINFO_ID != ''">
+            and CORPINFO_ID = #{CORPINFO_ID}
+        </if>
+    </select>
+    <update id="edit">
+        update
+        <include refid="table"></include>
+        set
+        GATE_AREA_NAME = #{GATE_AREA_NAME},
+        GATE_AREA_TYPE = #{GATE_AREA_TYPE},
+        LONGITUDE = #{LONGITUDE},
+        LATITUDE = #{LATITUDE},
+        CORPINFO_ID = #{CORPINFO_ID},
+        OPERATOR = #{OPERATOR},
+        OPERATTIME = #{OPERATTIME}
+        where
+        GATE_AREA_ID = #{GATE_AREA_ID}
+    </update>
+    <update id="removeByIds">
+        update mk_gate_area
+        set ISDELETE = 1
+        where GATE_AREA_ID in
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </update>
+</mapper>
diff --git a/src/main/resources/mybatis/datasource/gatemachine/GateMachineMapper.xml b/src/main/resources/mybatis/datasource/gatemachine/GateMachineMapper.xml
new file mode 100644
index 00000000..9340db14
--- /dev/null
+++ b/src/main/resources/mybatis/datasource/gatemachine/GateMachineMapper.xml
@@ -0,0 +1,346 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zcloud.mapper.datasource.gatemachine.GateMachineMapper">
+    <sql id="table">  mk_gate_machine </sql>
+
+    <sql id="filed">
+        f
+        .
+        GATE_MACHINE_ID
+        ,
+        f.GATE_MACHINE_TYPE,
+        f.EQUIPMENTID,
+        f.GATE_MACHINE_MODEL,
+        f.GATE_MACHINE_NAME,
+        f.STATE,
+        f.DESCR,
+        f.LATITUDE,
+        f.LONGITUDE,
+        f.CORPINFO_ID,
+        f.CREATOR,
+        f.CREATTIME,
+        f.OPERATOR,
+        f.OPERATTIME,
+        f.REMAKE
+    </sql>
+    <insert id="save">
+        INSERT INTO mk_gate_machine
+        (
+         GATE_MACHINE_ID,
+         GATE_AREA_ID,
+         GATE_MACHINE_NAME,
+         GATE_MACHINE_TYPE,
+         EQUIPMENTID,
+         GATE_MACHINE_MODEL,
+         STATE,
+         DESCR,
+         LONGITUDE,
+         LATITUDE,
+         CORPINFO_ID,
+         CREATOR,
+         CREATTIME,
+         OPERATOR,
+         OPERATTIME)
+        VALUES (#{GATE_MACHINE_ID},
+                #{GATE_AREA_ID},
+                #{GATE_MACHINE_NAME},
+                #{GATE_MACHINE_TYPE},
+                #{EQUIPMENTID},
+                #{GATE_MACHINE_MODEL},
+                #{STATE},
+                #{DESCR},
+                #{LONGITUDE},
+                #{LATITUDE},
+                #{CORPINFO_ID},
+                #{CREATOR},
+                #{CREATTIME},
+                #{OPERATOR},
+                #{OPERATTIME})
+    </insert>
+    <select id="getDatalistPage" resultType="com.zcloud.entity.PageData">
+        select <include refid="filed"></include>, CONCAT_WS('--', f.LATITUDE,f.LONGITUDE) LONGTITUDEANDLATITUDE
+        from
+        mk_gate_machine f where ISDELETE = 0
+        <if test="pd.GATE_MACHINE_NAME != null and pd.GATE_MACHINE_NAME != ''">
+            and f.GATE_MACHINE_NAME like CONCAT(CONCAT('%', #{pd.GATE_MACHINE_NAME}),'%')
+        </if>
+        <if test="pd.GATE_AREA_ID != null and pd.GATE_AREA_ID != ''">
+            and f.GATE_AREA_ID = #{pd.GATE_AREA_ID}
+        </if>
+        <if test="pd.GATE_MACHINE_TYPE != null and pd.GATE_MACHINE_TYPE != ''">
+            and f.GATE_MACHINE_TYPE = #{pd.GATE_MACHINE_TYPE}
+        </if>
+        <if test="pd.GATE_MACHINE_MODEL != null and pd.GATE_MACHINE_MODEL != ''">
+            and f.GATE_MACHINE_MODEL like CONCAT(CONCAT('%', #{pd.GATE_MACHINE_MODEL}),'%')
+        </if>
+    </select>
+    <select id="getOnlineGateMachine" resultType="com.zcloud.entity.PageData">
+        SELECT
+        'PERSON_OUT' TYPE,
+        COUNT( 1 ) COUNT
+        FROM
+        `bus_carduser` f
+        WHERE
+        f.TIME BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+        AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
+        AND STATE = 1
+        <if test="AREA != null and AREA != ''">
+            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
+        </if>
+        <if test="CORP_INFO_ID != null and CORP_INFO_ID != ''">
+            and CORPINFO_ID = #{CORP_INFO_ID}
+        </if>
+        UNION ALL
+        SELECT
+        'PERSON_IN' TYPE,
+        COUNT( 1 ) count
+        FROM
+        `bus_carduser` f
+        WHERE
+        f.TIME BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+        AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
+        AND STATE = 0
+        <if test="AREA != null and AREA != ''">
+            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
+        </if>
+        <if test="CORP_INFO_ID != null and CORP_INFO_ID != ''">
+            and CORPINFO_ID = #{CORP_INFO_ID}
+        </if>
+        UNION ALL
+        SELECT
+        'CAR_IN' TYPE,
+        IFNULL( COUNT( 1 ), 0 ) COUNT
+        FROM
+        bus_foreigncar c
+        WHERE
+        c.ISDELETE = 0 and
+        c.TIME_IN BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+        AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
+        <if test="AREA != null and AREA != ''">
+            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
+        </if>
+        <if test="CORP_INFO_ID != null and CORP_INFO_ID != ''">
+            and CORPINFO_ID = #{CORP_INFO_ID}
+        </if>
+        UNION ALL
+        SELECT
+        'CAR_OUT' TYPE,
+        IFNULL( COUNT( 1 ), 0 ) COUNT
+        FROM
+        bus_foreigncar c
+        WHERE
+        c.ISDELETE = 0 and
+        c.TIME_OUT BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+        AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
+        <if test="AREA != null and AREA != ''">
+            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
+        </if>
+        <if test="CORP_INFO_ID != null and CORP_INFO_ID != ''">
+            and CORPINFO_ID = #{CORP_INFO_ID}
+        </if>
+        UNION ALL
+        SELECT
+        'CAMERA' TYPE,
+        IFNULL( COUNT( 1 ), 0 ) COUNT
+        FROM
+        bus_gatevideo v
+        LEFT JOIN mk_gate_area o on v.GATE_AREA_ID = o.GATE_AREA_ID
+        WHERE
+        v.isdelete = 0
+        <if test="AREA != null and AREA != ''">
+            and o.CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
+        </if>
+        <if test="CORP_INFO_ID != null and CORP_INFO_ID != ''">
+            and o.CORPINFO_ID = #{CORP_INFO_ID}
+        </if>
+
+    </select>
+    <select id="getTodayInOutCount" resultType="com.zcloud.entity.PageData">
+        SELECT
+            f.EQUIPMENTID,
+            COUNT( 1 ) COUNT,
+	        m.GATE_MACHINE_NAME
+        FROM
+            bus_carduser f
+            LEFT JOIN mk_gate_machine m ON f.EQUIPMENTID = m.EQUIPMENTID
+        WHERE
+            f.TIME > CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+        <if test="AREA != null and AREA != ''">
+            and m.CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
+        </if>
+        <if test="CORP_INFO_ID != null and CORP_INFO_ID != ''">
+            and m.CORPINFO_ID = #{CORP_INFO_ID}
+        </if>
+        <if test="CORPINFO_ID != null and CORPINFO_ID != ''">
+            and m.CORPINFO_ID = #{CORPINFO_ID}
+        </if>
+
+        GROUP BY
+            f.EQUIPMENTID
+        ORDER BY
+            GATE_MACHINE_NAME DESC
+    </select>
+    <select id="getGatePosition" resultType="com.zcloud.entity.PageData">
+        select LONGITUDE,
+        LATITUDE,
+        GATE_MACHINE_NAME,
+        '${TYPE}' TYPE,
+        GATE_MACHINE_ID id
+        FROM
+        mk_gate_machine
+        WHERE
+        isdelete = 0
+        and GATE_MACHINE_TYPE =  #{GATE_MACHINE_TYPE}
+        <if test="AREA != null and AREA != ''">
+            and CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
+        </if>
+        <if test="CORP_INFO_ID != null and CORP_INFO_ID != ''">
+            and CORPINFO_ID = #{CORP_INFO_ID}
+        </if>
+    </select>
+    <select id="getGateMachineInfoById" resultType="com.zcloud.entity.PageData">
+        SELECT
+            r.GATE_AREA_NAME,
+            GROUP_CONCAT( f.GATE_MACHINE_NAME ) GATE_MACHINE_NAME,
+            GROUP_CONCAT( DISTINCT f.GATE_MACHINE_MODEL ) GATE_MACHINE_MODEL,
+            GROUP_CONCAT( DISTINCT r.CORPINFO_ID ) CORPINFO_ID,
+            GROUP_CONCAT( f.EQUIPMENTID ) EQUIPMENTID
+        FROM
+                mk_gate_machine f
+                LEFT JOIN mk_gate_area r ON r.GATE_AREA_ID = f.GATE_AREA_ID
+
+                left join bus_gatevideo v on v.GATE_AREA_ID = f.GATE_AREA_ID
+        WHERE
+            f.ISDELETE = 0
+        <if test="GATE_AREA_ID != null and GATE_AREA_ID != ''" >
+            and  f.GATE_AREA_ID = #{GATE_AREA_ID}
+        </if>
+        <if test="GATEVIDEO_ID != null and GATEVIDEO_ID != ''" >
+            AND v.GATEVIDEO_ID = #{GATEVIDEO_ID}
+        </if>
+
+        GROUP BY
+            f.GATE_AREA_ID
+    </select>
+    <select id="getPersonRecordCountByEId" resultType="com.zcloud.entity.PageData">
+        SELECT
+            COUNT( 1 ) COUNT,
+	        CASE
+		STATE
+		WHEN 0 THEN
+		'PERSON_IN' ELSE 'PERSON_OUT'
+        END TYPE
+        FROM
+            bus_carduser
+        WHERE
+            EQUIPMENTID in <foreach collection="array" item="item" open="(" separator="," close=")">
+        #{item}
+    </foreach>
+        AND TIME  BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+          AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
+        GROUP BY
+            STATE
+    </select>
+    <select id="getCarRecordCountByEId" resultType="com.zcloud.entity.PageData">
+        SELECT
+            COUNT( 1 ) COUNT,
+	        'CAR_IN' TYPE
+        FROM
+            bus_foreigncar
+        WHERE
+            EQUIPMENTID in
+            <foreach collection="array" item="item" open="(" separator="," close=")">
+                 #{item}
+            </foreach>
+          AND TIME_IN BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+          AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' ) UNION ALL
+        SELECT
+            COUNT( 1 ) COUNT,
+	        'CAR_OUT' TYPE
+        FROM
+            bus_foreigncar
+        WHERE
+        EQUIPMENTID in
+        <foreach collection="array" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        AND TIME_OUT BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+          AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
+    </select>
+    <select id="getCarRecordCountByCorpId" resultType="com.zcloud.entity.PageData">
+        SELECT
+        COUNT( 1 ) COUNT,
+        'CAR_IN' TYPE
+        FROM
+        bus_foreigncar
+        WHERE
+            ISDELETE = 0
+        and CORPINFO_ID = #{CORPINFO_ID}
+        AND TIME_IN BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+        AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' ) UNION ALL
+        SELECT
+        COUNT( 1 ) COUNT,
+        'CAR_OUT' TYPE
+        FROM
+        bus_foreigncar
+        WHERE
+            ISDELETE = 0
+        and CORPINFO_ID = #{CORPINFO_ID}
+        AND TIME_OUT BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+        AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
+    </select>
+
+    <update id="edit">
+        update
+        <include refid="table"></include>
+        set
+        GATE_MACHINE_TYPE = #{GATE_MACHINE_TYPE},
+        GATE_MACHINE_MODEL = #{GATE_MACHINE_MODEL},
+        GATE_MACHINE_NAME = #{GATE_MACHINE_NAME},
+        STATE = #{STATE},
+        DESCR = #{DESCR},
+        LONGITUDE = #{LONGITUDE},
+        LATITUDE = #{LATITUDE},
+        CORPINFO_ID = #{CORPINFO_ID},
+        OPERATOR = #{OPERATOR},
+        OPERATTIME = #{OPERATTIME},
+        REMAKE = #{REMAKE}
+        where
+        GATE_MACHINE_ID = #{GATE_MACHINE_ID}
+    </update>
+
+    <update id="removeByIds">
+        update mk_gate_machine
+        set ISDELETE = 1
+        where GATE_MACHINE_ID in
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </update>
+
+
+    <select id="getPersonRecordListAllByIdlistPage" resultType="com.zcloud.entity.PageData">
+        SELECT
+            f.*
+        from   bus_carduser f
+        WHERE
+            1=1
+          and f.EQUIPMENTID in (select EQUIPMENTID from mk_gate_machine where GATE_AREA_ID = #{pd.GATE_AREA_ID})
+          AND f.TIME  BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+            AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
+        order by f.time desc
+    </select>
+
+
+    <select id="listHkDoor" resultType="com.zcloud.entity.PageData">
+        SELECT
+            f.*
+        from   bus_carduser f
+        WHERE
+            1=1
+          and f.EQUIPMENTID in (select EQUIPMENTID from mk_gate_machine where GATE_AREA_ID = #{pd.GATE_AREA_ID})
+          AND f.TIME  BETWEEN CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 00:00:00' )
+            AND CONCAT( DATE_FORMAT( now(), '%Y-%m-%d' ), ' 23:59:59' )
+        order by f.time desc
+    </select>
+</mapper>
diff --git a/src/main/resources/mybatis/datasource/gatemachine/GateVideoMapper.xml b/src/main/resources/mybatis/datasource/gatemachine/GateVideoMapper.xml
new file mode 100644
index 00000000..54c3ee8c
--- /dev/null
+++ b/src/main/resources/mybatis/datasource/gatemachine/GateVideoMapper.xml
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zcloud.mapper.datasource.gatemachine.GateVideoMapper">
+
+	<!--表名 -->
+	<sql id="tableName">
+		BUS_GATEVIDEO
+	</sql>
+
+	<!--数据字典表名 -->
+	<sql id="dicTableName">
+		SYS_DICTIONARIES
+	</sql>
+
+	<!-- 字段 -->
+	<sql id="Field">
+		f.GATE_AREA_ID,
+		f.VIDEONAME,
+		f.OPDATE,
+		f.OPUSER,
+		f.ISDELETE,
+		f.CODE,
+	    f.PLATFORMVIDEOMANAGEMENT_ID,
+		f.GATEVIDEO_ID,
+		f.LATITUDE,
+		f.LONGITUDE
+	</sql>
+
+	<!-- 字段用于新增 -->
+	<sql id="Field2">
+		GATE_AREA_ID,
+		VIDEONAME,
+		OPDATE,
+		OPUSER,
+		ISDELETE,
+		CODE,
+	    PLATFORMVIDEOMANAGEMENT_ID,
+		GATEVIDEO_ID,
+		LATITUDE,
+		LONGITUDE
+	</sql>
+
+	<!-- 字段值 -->
+	<sql id="FieldValue">
+		#{GATE_AREA_ID},
+		#{VIDEONAME},
+		#{OPDATE},
+		#{OPUSER},
+		#{ISDELETE},
+		#{CODE},
+		#{PLATFORMVIDEOMANAGEMENT_ID},
+		#{GATEVIDEO_ID},
+		#{LATITUDE},
+		#{LONGITUDE}
+	</sql>
+
+	<!-- 新增-->
+	<insert id="save" parameterType="pd">
+		insert into
+	<include refid="tableName"></include>
+		(
+	<include refid="Field2"></include>
+		) values (
+	<include refid="FieldValue"></include>
+		)
+	</insert>
+
+	<!-- 删除-->
+	<delete id="delete" parameterType="pd">
+		update
+		<include refid="tableName"></include>
+		set
+			ISDELETE = '1'
+		where
+			GATEVIDEO_ID = #{GATEVIDEO_ID}
+	</delete>
+
+	<!-- 修改 -->
+	<update id="edit" parameterType="pd">
+		update
+		<include refid="tableName"></include>
+		set
+			<if test="GATE_AREA_ID != null and GATE_AREA_ID != ''"><!-- 关键词检索 -->
+				GATE_AREA_ID = #{GATE_AREA_ID},
+			</if>
+			<if test="VIDEONAME != null and VIDEONAME != ''"><!-- 关键词检索 -->
+				VIDEONAME = #{VIDEONAME},
+			</if>
+			<if test="PLATFORMVIDEOMANAGEMENT_ID != null and PLATFORMVIDEOMANAGEMENT_ID != ''"><!-- 关键词检索 -->
+				PLATFORMVIDEOMANAGEMENT_ID = #{PLATFORMVIDEOMANAGEMENT_ID},
+			</if>
+			<if test="CODE != null and CODE != ''"><!-- 关键词检索 -->
+				CODE = #{CODE},
+			</if>
+			GATEVIDEO_ID = GATEVIDEO_ID
+		where
+			GATEVIDEO_ID = #{GATEVIDEO_ID}
+	</update>
+
+	<!-- 定位 -->
+	<update id="savePosition" parameterType="pd">
+		update
+		<include refid="tableName"></include>
+		set
+			LATITUDE = #{LATITUDE},
+			LONGITUDE = #{LONGITUDE}
+		where
+		GATEVIDEO_ID = #{GATEVIDEO_ID}
+	</update>
+
+	<update id="editIsShowBycorpinfoid" parameterType="pd">
+		update
+		<include refid="tableName"></include>
+		set CODE= #{CODE}
+		where
+		GATE_AREA_ID = #{GATE_AREA_ID}
+	</update>
+	<update id="editIsShow" parameterType="pd">
+		update
+		<include refid="tableName"></include>
+		set CODE= #{CODE}
+		where
+			GATEVIDEO_ID = #{GATEVIDEO_ID}
+	</update>
+	<!-- 通过ID获取数据 -->
+	<select id="findById" parameterType="pd" resultType="pd">
+		select
+		<include refid="Field"></include>
+		from
+		<include refid="tableName"></include> f
+		where
+			 f.ISDELETE = '0'
+		<if test="GATEVIDEO_ID != null and GATEVIDEO_ID != ''"><!-- 关键词检索 -->
+			and f.GATEVIDEO_ID=#{GATEVIDEO_ID}
+		</if>
+		<if test="GATE_AREA_ID != null and GATE_AREA_ID != ''"><!-- 关键词检索 -->
+			and f.GATE_AREA_ID=#{GATE_AREA_ID}
+		</if>
+		<if test="CODE != null and CODE != ''"><!-- 关键词检索 -->
+			and f.CODE=#{CODE}
+		</if>
+	</select>
+
+	<!-- 通过CODE获取数据 -->
+	<select id="findByCode" parameterType="pd" resultType="pd">
+		select
+		<include refid="Field"></include>
+		from
+		<include refid="tableName"></include> f
+		where
+			f.CODE=#{CODE}
+	</select>
+	<!-- 列表 -->
+	<select id="datalistPage" parameterType="page" resultType="pd">
+		select
+		<include refid="Field"></include>,
+		pv.INDEXCODE
+		from
+		<include refid="tableName"></include> f
+		left join `qa-gwj-regulatory`.bus_platformvideomanagement pv on pv.PLATFORMVIDEOMANAGEMENT_ID = f.PLATFORMVIDEOMANAGEMENT_ID
+		where f.ISDELETE = '0'
+		<if test="pd.GATE_AREA_ID != null and pd.GATE_AREA_ID != ''"><!-- 关键词检索 -->
+			and f.GATE_AREA_ID=#{pd.GATE_AREA_ID}
+		</if>
+		<if test="pd.KEYWORDS != null and pd.KEYWORDS != ''"><!-- 关键词检索 -->
+			and
+				(
+					f.VIDEONAME LIKE CONCAT(CONCAT('%', #{pd.KEYWORDS}),'%')
+				)
+		</if>
+	</select>
+
+	<!-- 列表(全部) -->
+	<select id="listAll" parameterType="pd" resultType="pd">
+		select
+		<include refid="Field"></include>
+		from
+		<include refid="tableName"></include> f
+		where f.ISDELETE = '0'
+			<if test="GATE_AREA_ID != null and GATE_AREA_ID != ''"><!-- 关键词检索 -->
+			and f.GATE_AREA_ID=#{GATE_AREA_ID}
+		</if>
+			<if test="CODE != null and CODE != ''"><!-- 关键词检索 -->
+			and f.CODE=#{CODE}
+		</if>
+	</select>
+
+	<!-- 列表(全部) -->
+	<select id="listBo" parameterType="pd" resultType="pd">
+		select
+		f.VIDEONAME,
+		f.OPDATE,
+		f.OPUSER,
+		f.ISDELETE,
+		f.GATEVIDEO_ID,
+		pv.INDEXCODE
+		from
+		<include refid="tableName"></include> f
+		left join `qa-gwj-regulatory`.bus_platformvideomanagement pv on pv.PLATFORMVIDEOMANAGEMENT_ID = f.PLATFORMVIDEOMANAGEMENT_ID
+		where f.ISDELETE = '0'
+		<if test="CORPINFO_ID != null and CORPINFO_ID != ''"><!-- 关键词检索 -->
+			and f.CORPINFO_ID=#{CORPINFO_ID}
+		</if>
+		<if test="ArrayDATA_IDS != null and ArrayDATA_IDS != ''"><!-- 关键词检索 -->
+			and GATEVIDEO_ID in
+			<foreach item="item" index="index" collection="ArrayDATA_IDS" open="(" separator="," close=")">
+				#{item}
+			</foreach>
+		</if>
+
+	</select>
+	<!-- 批量删除 -->
+	<delete id="deleteAll" parameterType="String">
+		update
+		<include refid="tableName"></include>
+		set
+			ISDELETE = '1'
+		where
+			GATEVIDEO_ID in
+		<foreach item="item" index="index" collection="ArrayDATA_IDS" open="(" separator="," close=")">
+                 #{item}
+		</foreach>
+	</delete>
+
+	<!-- 列表(全部) -->
+	<select id="listAllForMap" parameterType="pd" resultType="pd">
+		select
+		f.*
+		from
+		<include refid="tableName"></include> f
+		where f.ISDELETE = '0' and f.LATITUDE is not null and f.LONGITUDE is not null
+	</select>
+
+	<!-- 消防点位已定位 -->
+	<select id="getPointsInfo" parameterType="pd" resultType="pd">
+		select
+		f.*
+		from
+		<include refid="tableName"></include> f
+		where f.ISDELETE = '0' and f.LATITUDE is not null and f.LONGITUDE is not null
+	</select>
+	<select id="getCameraPosition" resultType="com.zcloud.entity.PageData">
+		SELECT
+		GATEVIDEO_ID AS id,
+		VIDEONAME AS `NAME`,
+		'CAMERA' AS TYPE,
+		v.LATITUDE,
+		v.LONGITUDE
+		FROM
+		bus_gatevideo v
+		LEFT JOIN mk_gate_machine o on v.GATE_AREA_ID = o.GATE_AREA_ID
+		WHERE
+		v.ISDELETE = 0
+		and v.LATITUDE is not null and v.LONGITUDE is not null
+		<if test="AREA != null and AREA != ''">
+			and o.CORPINFO_ID in (select CORPINFO_ID from bus_corp_info where AREA = #{AREA} and ISDELETE = 0)
+		</if>
+		<if test="CORPINFO_ID != null and CORPINFO_ID != ''">
+			and o.CORPINFO_ID = #{CORPINFO_ID}
+		</if>
+	</select>
+
+</mapper>