From 62dc709d73d6653a0c85cf36c398955e95baacdc Mon Sep 17 00:00:00 2001
From: nidapeng <jp@doumee.com>
Date: 星期二, 30 四月 2024 17:18:35 +0800
Subject: [PATCH] 最新版本

---
 server/system_service/src/main/java/com/doumee/api/cloud/SystemTraceLogCloudController.java             |    3 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/TasksCloudController.java                |   84 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarsCloudController.java                 |  100 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/InterfaceLogCloudController.java         |   90 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitEventCloudController.java           |   90 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HkSyncCloudController.java               |   99 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/StagingCloudController.java              |   66 
 server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java                  |   28 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarUseBookCloudController.java           |   83 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CompanyCloudController.java              |  180 ++
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/EmpowerCloudController.java              |   90 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerLogCloudController.java      |   83 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformJobCloudController.java          |   84 +
 server/system_service/src/main/java/com/doumee/api/cloud/SystemUserCloudController.java                 |    3 
 server/system_service/src/main/java/com/doumee/api/cloud/SystemLoginLogCloudController.java             |    3 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveCloudController.java              |   91 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerParamCloudController.java    |   83 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CategoryCloudController.java             |  101 +
 server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java                 |    2 
 server/system_service/src/main/java/com/doumee/api/cloud/SystemPermissionCloudController.java           |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarDriverCloudController.java            |   84 +
 server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java             |    2 
 server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java                     |    2 
 server/system_service/src/main/java/com/doumee/api/cloud/SystemMonitorCloudController.java              |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformCloudController.java             |   84 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitReasonCloudController.java          |   91 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceEventCloudController.java          |   94 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ProblemLogCloudController.java           |   91 +
 server/system_service/src/main/java/com/doumee/api/cloud/SystemDepartmentCloudController.java           |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberCardCloudController.java           |  125 +
 server/system_service/src/main/java/com/doumee/api/cloud/SystemPositionCloudController.java             |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceCloudController.java               |  109 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformShowParamCloudController.java    |   83 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitsCloudController.java               |  116 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitProblemsCloudController.java        |   90 +
 server/system_service/src/main/java/com/doumee/api/cloud/SystemDictCloudController.java                 |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarBookCloudController.java              |   84 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/TrainTimeCloudController.java            |   91 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberCloudController.java               |  276 +++
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveParamCloudController.java         |  101 +
 server/system_service/src/main/java/com/doumee/api/cloud/SystemMenuCloudController.java                 |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ERPSyncCloudController.java              |   45 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/FormParamCloudController.java            |   83 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarParksCloudController.java             |   83 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformInterfaceLogCloudController.java |   83 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarEventCloudController.java             |  103 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/UserActionCloudController.java           |   91 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitParkCloudController.java            |   90 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitProblemLogCloudController.java      |   90 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformLogCloudController.java          |   83 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ProblemsCloudController.java             |   90 +
 server/system_service/src/main/java/com/doumee/api/cloud/NoticesCloudController.java                    |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformQueueCloudController.java        |   83 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerCloudController.java         |   84 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberRoleCloudController.java           |   90 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/RetentionCloudController.java            |   90 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformGroupCloudController.java        |   83 +
 server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java       |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ParkBookCloudController.java             |   97 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitorCloudController.java              |   91 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java                      |    3 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceRoleCloudController.java           |  104 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveTemplCloudController.java         |   84 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ParksCloudController.java                |   97 +
 64 files changed, 4,608 insertions(+), 41 deletions(-)

diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/NoticesCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/NoticesCloudController.java
index 02ec8e0..26880b7 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/NoticesCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/NoticesCloudController.java
@@ -24,7 +24,7 @@
  */
 @Api(tags = "绯荤粺娑堟伅淇℃伅琛�")
 @RestController
-@RequestMapping("/cloudService/business/notices")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/notices")
 public class NoticesCloudController extends BaseController {
     @Autowired
     private NoticesService noticesService;
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java
index 686491a..fa6223a 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemCloudController.java
@@ -22,7 +22,7 @@
 @Trace(exclude = true)
 @Slf4j
 @RestController
-@RequestMapping("/cloudService/system")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system")
 public class SystemCloudController extends BaseController {
 
     @Autowired
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java
index 06bf14d..b1c5efd 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java
@@ -29,7 +29,7 @@
  * @date 2023/03/21 14:49
  */
 @RestController
-@RequestMapping("/cloudService/system/dataPermission")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/dataPermission")
 @Api(tags = "绯荤粺鏁版嵁鏉冮檺")
 public class SystemDataPermissionCloudController extends BaseController {
 
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDepartmentCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDepartmentCloudController.java
index 9791e39..fc3363a 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDepartmentCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDepartmentCloudController.java
@@ -32,7 +32,7 @@
  */
 @Api(tags = "閮ㄩ棬")
 @RestController
-@RequestMapping("/cloudService/system/department")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/department")
 public class SystemDepartmentCloudController extends BaseController {
 
     @Autowired
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictCloudController.java
index e8cd5f2..7363da8 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictCloudController.java
@@ -28,7 +28,7 @@
  */
 @Api(tags = "绯荤粺瀛楀吀")
 @RestController
-@RequestMapping("/cloudService/system/dict")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/dict")
 public class SystemDictCloudController extends BaseController {
 
     @Autowired
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java
index f6e30dd..9c1b455 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDictDataCloudController.java
@@ -30,7 +30,7 @@
  */
 @Api(tags = "瀛楀吀鏁版嵁")
 @RestController
-@RequestMapping("/cloudService/system/dictData")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/dictData")
 public class SystemDictDataCloudController extends BaseController {
 
     @Autowired
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemLoginLogCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemLoginLogCloudController.java
index 4dab053..6a2a031 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemLoginLogCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemLoginLogCloudController.java
@@ -6,6 +6,7 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.dao.system.dto.QuerySystemLoginLogDTO;
 import com.doumee.dao.system.model.SystemLoginLog;
 import com.doumee.service.system.SystemLoginLogService;
@@ -24,7 +25,7 @@
  * @date 2023/03/21 14:49
  */
 @RestController
-@RequestMapping("/cloudService/system/loginLog")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/loginLog")
 @Api(tags = "鐧诲綍鏃ュ織")
 public class SystemLoginLogCloudController extends BaseController {
 
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemMenuCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemMenuCloudController.java
index 10a742d..39fc0cf 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemMenuCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemMenuCloudController.java
@@ -26,7 +26,7 @@
  */
 @Api(tags = "绯荤粺鑿滃崟")
 @RestController
-@RequestMapping("/cloudService/system/menu")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/menu")
 public class SystemMenuCloudController extends BaseController {
 
     @Autowired
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemMonitorCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemMonitorCloudController.java
index f82cfb5..303ada4 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemMonitorCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemMonitorCloudController.java
@@ -21,7 +21,7 @@
 @Api(tags = "绯荤粺鐩戝惉")
 @Trace(exclude = true)
 @RestController
-@RequestMapping("/cloudService/system/monitor")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/monitor")
 public class SystemMonitorCloudController extends BaseController {
 
     @ApiOperation("鑾峰彇绯荤粺淇℃伅")
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemPermissionCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemPermissionCloudController.java
index fa0e12a..833d79d 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemPermissionCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemPermissionCloudController.java
@@ -28,7 +28,7 @@
  */
 @Api(tags = "绯荤粺鏉冮檺")
 @RestController
-@RequestMapping("/cloudService/system/permission")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/permission")
 public class SystemPermissionCloudController extends BaseController {
 
     @Autowired
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemPositionCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemPositionCloudController.java
index 791dcff..ea2c728 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemPositionCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemPositionCloudController.java
@@ -31,7 +31,7 @@
  */
 @Api(tags = "宀椾綅")
 @RestController
-@RequestMapping("/cloudService/system/position")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/position")
 public class SystemPositionCloudController extends BaseController {
 
     @Autowired
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java
index 27ba244..ac5d5f0 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java
@@ -29,7 +29,7 @@
  */
 @Api(tags = "绯荤粺瑙掕壊")
 @RestController
-@RequestMapping("/cloudService/system/role")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/role")
 public class SystemRoleCloudController extends BaseController {
 
     @Autowired
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemTraceLogCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemTraceLogCloudController.java
index e08a818..2f4ce98 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemTraceLogCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemTraceLogCloudController.java
@@ -5,6 +5,7 @@
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.dao.system.dto.QuerySystemTraceLogDTO;
 import com.doumee.dao.system.model.SystemTraceLog;
 import com.doumee.service.system.SystemTraceLogService;
@@ -24,7 +25,7 @@
  */
 @Api(tags = "璺熻釜鏃ュ織")
 @RestController
-@RequestMapping("/cloudService/system/traceLog")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/traceLog")
 public class SystemTraceLogCloudController extends BaseController {
 
     @Autowired
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemUserCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemUserCloudController.java
index 815f5c7..a35d13a 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemUserCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemUserCloudController.java
@@ -9,6 +9,7 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.dao.system.dto.CreateSystemUserDTO;
 import com.doumee.dao.system.dto.CreateUserRoleDTO;
 import com.doumee.dao.system.dto.QuerySystemUserDTO;
@@ -31,7 +32,7 @@
  */
 @Api(tags = "鐢ㄦ埛")
 @RestController
-@RequestMapping("/cloudService/system/user")
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/system/user")
 public class SystemUserCloudController extends BaseController {
 
     @Autowired
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveCloudController.java
new file mode 100644
index 0000000..3445ccd
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveCloudController.java
@@ -0,0 +1,91 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Approve;
+import com.doumee.service.business.ApproveService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/12/28 14:09
+ */
+@Api(tags = "瀹℃壒淇℃伅璁板綍琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/approve")
+public class ApproveCloudController extends BaseController {
+
+    @Autowired
+    private ApproveService approveService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:approve:create")
+    public ApiResponse create(@RequestBody Approve approve) {
+        return ApiResponse.success(approveService.create(approve));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:approve:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        approveService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:approve:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        approveService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:approve:update")
+    public ApiResponse updateById(@RequestBody Approve approve) {
+        approveService.updateById(approve);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:approve:query")
+    public ApiResponse<PageData<Approve>> findPage (@RequestBody PageWrap<Approve> pageWrap) {
+        return ApiResponse.success(approveService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:approve:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Approve> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Approve.class).export(approveService.findPage(pageWrap).getRecords(), "瀹℃壒淇℃伅璁板綍琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:approve:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(approveService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveParamCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveParamCloudController.java
new file mode 100644
index 0000000..6ac8639
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveParamCloudController.java
@@ -0,0 +1,101 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.ApproveParam;
+import com.doumee.dao.business.vo.ApproveParamDataVO;
+import com.doumee.service.business.ApproveParamService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/12/28 11:46
+ */
+@Api(tags = "瀹℃壒妯$増閰嶇疆淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/approveParam")
+public class ApproveParamCloudController extends BaseController {
+
+    @Autowired
+    private ApproveParamService approveParamService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:approveparam:create")
+    public ApiResponse create(@RequestBody ApproveParam approveParam) {
+        return ApiResponse.success(approveParamService.create(approveParam));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:approveparam:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        approveParamService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:approveparam:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        approveParamService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:approveparam:update")
+    public ApiResponse updateById(@RequestBody ApproveParam approveParam) {
+        approveParamService.updateById(approveParam);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:approveparam:query")
+    public ApiResponse<PageData<ApproveParam>> findPage (@RequestBody PageWrap<ApproveParam> pageWrap) {
+        return ApiResponse.success(approveParamService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:approveparam:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<ApproveParam> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(ApproveParam.class).export(approveParamService.findPage(pageWrap).getRecords(), "瀹℃壒妯$増閰嶇疆淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:approveparam:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(approveParamService.findById(id));
+    }
+
+
+    @ApiOperation("鑾峰彇閰嶇疆淇℃伅")
+    @GetMapping("/getApproveParamData")
+    @CloudRequiredPermission("business:approveparam:query")
+    public ApiResponse<ApproveParamDataVO> getApproveParamData() {
+        return ApiResponse.success(approveParamService.getApproveParamData());
+    }
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveTemplCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveTemplCloudController.java
new file mode 100644
index 0000000..e78ea17
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ApproveTemplCloudController.java
@@ -0,0 +1,84 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.ApproveTempl;
+import com.doumee.service.business.ApproveTemplService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "瀹℃壒妯$増淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/approveTempl")
+public class ApproveTemplCloudController extends BaseController {
+
+    @Autowired
+    private ApproveTemplService approveTemplService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:approvetempl:create")
+    public ApiResponse create(@RequestBody ApproveTempl approveTempl) {
+        return ApiResponse.success(approveTemplService.create(approveTempl));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:approvetempl:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        approveTemplService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:approvetempl:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        approveTemplService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:approvetempl:update")
+    public ApiResponse updateById(@RequestBody ApproveTempl approveTempl) {
+        approveTemplService.updateById(approveTempl);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:approvetempl:query")
+    public ApiResponse<PageData<ApproveTempl>> findPage (@RequestBody PageWrap<ApproveTempl> pageWrap) {
+        return ApiResponse.success(approveTemplService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:approvetempl:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<ApproveTempl> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(ApproveTempl.class).export(approveTemplService.findPage(pageWrap).getRecords(), "瀹℃壒妯$増淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:approvetempl:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(approveTemplService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarBookCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarBookCloudController.java
new file mode 100644
index 0000000..ee8cc09
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarBookCloudController.java
@@ -0,0 +1,84 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.CarBook;
+import com.doumee.service.business.CarBookService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "杞﹁締棰勭害璁板綍淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/carBook")
+public class CarBookCloudController extends BaseController {
+
+    @Autowired
+    private CarBookService carBookService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:carbook:create")
+    public ApiResponse create(@RequestBody CarBook carBook) {
+        return ApiResponse.success(carBookService.create(carBook));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:carbook:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        carBookService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:carbook:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        carBookService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:carbook:update")
+    public ApiResponse updateById(@RequestBody CarBook carBook) {
+        carBookService.updateById(carBook);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:carbook:query")
+    public ApiResponse<PageData<CarBook>> findPage (@RequestBody PageWrap<CarBook> pageWrap) {
+        return ApiResponse.success(carBookService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:carbook:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CarBook> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CarBook.class).export(carBookService.findPage(pageWrap).getRecords(), "杞﹁締棰勭害璁板綍淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:carbook:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(carBookService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarDriverCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarDriverCloudController.java
new file mode 100644
index 0000000..9977355
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarDriverCloudController.java
@@ -0,0 +1,84 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.CarDriver;
+import com.doumee.service.business.CarDriverService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "鍙告満淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/carDriver")
+public class CarDriverCloudController extends BaseController {
+
+    @Autowired
+    private CarDriverService carDriverService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:cardriver:create")
+    public ApiResponse create(@RequestBody CarDriver carDriver) {
+        return ApiResponse.success(carDriverService.create(carDriver));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:cardriver:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        carDriverService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:cardriver:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        carDriverService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:cardriver:update")
+    public ApiResponse updateById(@RequestBody CarDriver carDriver) {
+        carDriverService.updateById(carDriver);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:cardriver:query")
+    public ApiResponse<PageData<CarDriver>> findPage (@RequestBody PageWrap<CarDriver> pageWrap) {
+        return ApiResponse.success(carDriverService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:cardriver:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CarDriver> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CarDriver.class).export(carDriverService.findPage(pageWrap).getRecords(), "鍙告満淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:cardriver:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(carDriverService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarEventCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarEventCloudController.java
new file mode 100644
index 0000000..ed34a40
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarEventCloudController.java
@@ -0,0 +1,103 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.admin.response.CarEventDTO;
+import com.doumee.dao.business.model.CarEvent;
+import com.doumee.service.business.CarEventService;
+import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/carEvent")
+public class CarEventCloudController extends BaseController {
+
+    @Autowired
+    private HkSyncParkServiceImpl hkSyncParkService;
+
+    @Autowired
+    private CarEventService carEventService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+//    @CloudRequiredPermission("business:carevent:create")
+    public ApiResponse create(@RequestBody CarEvent carEvent) {
+        return ApiResponse.success(carEventService.create(carEvent));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:carevent:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        carEventService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:carevent:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        carEventService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:carevent:update")
+    public ApiResponse updateById(@RequestBody CarEvent carEvent) {
+        carEventService.updateById(carEvent);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    //@CloudRequiredPermission("business:carevent:query")
+    public ApiResponse<PageData<CarEventDTO>> findPage (@RequestBody PageWrap<CarEvent> pageWrap) {
+        return ApiResponse.success(carEventService.findVisitCarPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    //@CloudRequiredPermission("business:carevent:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CarEvent> pageWrap, HttpServletResponse response) {
+//        ExcelExporter.build(CarEventVo.class).exportWithFirstAndEnd (carEventService.findPageExcel(pageWrap),"鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃", null, "鍋滆溅鍦轰簨浠舵帹閫佽褰曞鍑烘姤琛�",null , response);
+        ExcelExporter.build(CarEventDTO.class).export(carEventService.findVisitCarPage(pageWrap).getRecords(), "鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃", response);
+    }
+    @ApiOperation("鏍规嵁鏃ユ湡(starttime)鍚屾杩囪溅鏁版嵁")
+    @PostMapping("/syncByDate")
+    @CloudRequiredPermission("business:carevent:sync")
+    public ApiResponse syncByDate(@RequestBody CarEvent param) {
+        hkSyncParkService.syncParkRecords(param.getCreateDate());
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:carevent:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(carEventService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarParksCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarParksCloudController.java
new file mode 100644
index 0000000..f31e62d
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarParksCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.CarParks;
+import com.doumee.service.business.CarParksService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "鍋滆溅搴撲俊鎭〃")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/carParks")
+public class CarParksCloudController extends BaseController {
+
+    @Autowired
+    private CarParksService carParksService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:carparks:create")
+    public ApiResponse create(@RequestBody CarParks carParks) {
+        return ApiResponse.success(carParksService.create(carParks));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:carparks:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        carParksService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:carparks:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        carParksService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:carparks:update")
+    public ApiResponse updateById(@RequestBody CarParks carParks) {
+        carParksService.updateById(carParks);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:carparks:query")
+    public ApiResponse<PageData<CarParks>> findPage (@RequestBody PageWrap<CarParks> pageWrap) {
+        return ApiResponse.success(carParksService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:carparks:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CarParks> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CarParks.class).export(carParksService.findPage(pageWrap).getRecords(), "鍋滆溅搴撲俊鎭〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:carparks:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(carParksService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarUseBookCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarUseBookCloudController.java
new file mode 100644
index 0000000..cf639e5
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarUseBookCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.CarUseBook;
+import com.doumee.service.business.CarUseBookService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "杞﹁締_鐢ㄨ溅鐢宠淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/carUseBook")
+public class CarUseBookCloudController extends BaseController {
+
+    @Autowired
+    private CarUseBookService carUseBookService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:carusebook:create")
+    public ApiResponse create(@RequestBody CarUseBook carUseBook) {
+        return ApiResponse.success(carUseBookService.create(carUseBook));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:carusebook:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        carUseBookService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:carusebook:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        carUseBookService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:carusebook:update")
+    public ApiResponse updateById(@RequestBody CarUseBook carUseBook) {
+        carUseBookService.updateById(carUseBook);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:carusebook:query")
+    public ApiResponse<PageData<CarUseBook>> findPage (@RequestBody PageWrap<CarUseBook> pageWrap) {
+        return ApiResponse.success(carUseBookService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:carusebook:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CarUseBook> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CarUseBook.class).export(carUseBookService.findPage(pageWrap).getRecords(), "杞﹁締_鐢ㄨ溅鐢宠淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:carusebook:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(carUseBookService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarsCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarsCloudController.java
new file mode 100644
index 0000000..38b1f29
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CarsCloudController.java
@@ -0,0 +1,100 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Cars;
+import com.doumee.service.business.CarsService;
+import com.doumee.service.business.impl.hksync.fhk.HkSyncVehicleFromHKServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "杞﹁締淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/cars")
+public class CarsCloudController extends BaseController {
+
+    @Autowired
+    private CarsService carsService;
+    @Autowired
+    private HkSyncVehicleFromHKServiceImpl hkSyncVehicleFromHKService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:cars:create")
+    public ApiResponse create(@RequestBody Cars cars) {
+        return ApiResponse.success(carsService.create(cars));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:cars:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        carsService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:cars:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        carsService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:cars:update")
+    public ApiResponse updateById(@RequestBody Cars cars) {
+        carsService.updateById(cars);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("鍏ㄩ噺鍚屾杞﹁締淇℃伅")
+    @PostMapping("/sync")
+    @CloudRequiredPermission("business:cars:sync")
+    public ApiResponse sync(@RequestBody Cars cars) {
+        hkSyncVehicleFromHKService.syncVehicleData();
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:cars:query")
+    public ApiResponse<PageData<Cars>> findPage (@RequestBody PageWrap<Cars> pageWrap) {
+        return ApiResponse.success(carsService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:cars:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Cars> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Cars.class).export(carsService.findPage(pageWrap).getRecords(), "杞﹁締淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:cars:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(carsService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CategoryCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CategoryCloudController.java
new file mode 100644
index 0000000..5f186c4
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CategoryCloudController.java
@@ -0,0 +1,101 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Category;
+import com.doumee.service.business.CategoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "鍒嗙被淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/category")
+public class CategoryCloudController extends BaseController {
+
+    @Autowired
+    private CategoryService categoryService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:category:create")
+    public ApiResponse create(@RequestBody Category category) {
+        return ApiResponse.success(categoryService.create(category));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:category:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        categoryService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:category:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        categoryService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:category:update")
+    public ApiResponse updateById(@RequestBody Category category) {
+        categoryService.updateById(category);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:category:query")
+    public ApiResponse<PageData<Category>> findPage (@RequestBody PageWrap<Category> pageWrap) {
+        return ApiResponse.success(categoryService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:category:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Category> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Category.class).export(categoryService.findPage(pageWrap).getRecords(), "鍒嗙被淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:category:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(categoryService.findById(id));
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/findListByStatus")
+    @CloudRequiredPermission("business:category:query")
+    public ApiResponse<List<Category>> findListByStatus(@RequestParam("type") Integer type){
+        Category category = new Category();
+        category.setIsdeleted(Constants.ZERO);
+        category.setStatus(Constants.ZERO);
+        category.setType(type);
+        return ApiResponse.success(categoryService.findList(category));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CompanyCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CompanyCloudController.java
new file mode 100644
index 0000000..d795fa8
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/CompanyCloudController.java
@@ -0,0 +1,180 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.DataSyncConfig;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.admin.request.UpdateCompanySortDTO;
+import com.doumee.dao.admin.response.CompanyDTO;
+import com.doumee.dao.business.model.Company;
+import com.doumee.service.business.CompanyService;
+import com.doumee.service.business.ext.ERPSyncService;
+import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromHKServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "浼佷笟淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/company")
+public class CompanyCloudController extends BaseController {
+
+    @Autowired
+    private CompanyService companyService;
+
+    @Autowired
+    private ERPSyncService erpSyncService;
+    @Autowired
+    private HkSyncOrgUserFromHKServiceImpl hkSyncOrgUserFHKService;
+    @Autowired
+    private DataSyncConfig dataSyncConfig;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:company:create")
+    public ApiResponse create(@RequestBody Company company) {
+        return ApiResponse.success(companyService.create(company));
+    }
+
+    @PreventRepeat
+    @ApiOperation("鍒涘缓鍔冲姟鍏徃")
+    @PostMapping("/createLaborServices")
+    @CloudRequiredPermission("business:company:create")
+    public ApiResponse<Integer> createLaborServices(@RequestBody Company company){
+        return ApiResponse.success(companyService.createLaborServices(company));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:company:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        companyService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:company:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        companyService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:company:update")
+    public ApiResponse updateById(@RequestBody Company company) {
+        companyService.updateById(company);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:company:query")
+    public ApiResponse<PageData<Company>> findPage (@RequestBody PageWrap<Company> pageWrap) {
+        return ApiResponse.success(companyService.findPage(pageWrap));
+    }
+
+    @ApiOperation("缁勭粐鏍戞煡璇�")
+    @GetMapping("/tree")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "type", dataType = "Integer", value = "绫诲瀷 0鍔冲姟鍏徃 1鍐呴儴缁勭粐", required = true),
+    })
+    @CloudRequiredPermission("business:company:query")
+    public ApiResponse<List<Company>> tree (@RequestParam Integer type) {
+        return ApiResponse.success(companyService.companyTree(type));
+    }
+
+
+    @ApiOperation("鎺掑簭")
+    @PostMapping("/updateSort")
+    @CloudRequiredPermission("business:company:query")
+    public ApiResponse updateSort (@Validated @RequestBody UpdateCompanySortDTO dto) {
+        companyService.updateSort(dto);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("淇敼鐘舵��")
+    @PostMapping("/updateStatusById")
+    @CloudRequiredPermission("business:company:update")
+    public ApiResponse updateStatusById(@RequestBody Company company) {
+        companyService.updateStatusById(company);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:company:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Company> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Company.class).export(companyService.findPage(pageWrap).getRecords(), "浼佷笟淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:company:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(companyService.findById(id));
+    }
+
+    @ApiOperation("鏍规嵁鍒嗙被ID鏌ヨ")
+    @PostMapping("/findLaborServicesList")
+    @CloudRequiredPermission("business:company:query")
+    public ApiResponse<List<Company>> findLaborServicesList(Company query){
+        Company company = new Company();
+        company.setIsdeleted(Constants.ZERO);
+        company.setType(query.getType());
+        company.setCategoryId(query.getCategoryId());
+        return ApiResponse.success(companyService.findList(company));
+    }
+
+
+    /**
+     * 鏌ヨ閮ㄩ棬鍙婂叾瀛愰儴闂ㄤ俊鎭�
+     * @param type 0 鏌ヨ鎵�鏈変俊鎭� 1 鏌ヨ鍐呴儴淇℃伅
+     * @return
+     */
+    @ApiOperation("鏍规嵁绫诲瀷鏌ヨ缁勭粐淇℃伅")
+    @GetMapping("/findCompanyTreePage")
+    @CloudRequiredPermission("business:company:query")
+    public ApiResponse<List<CompanyDTO>> findCompanyTreePage(Integer type){
+        return ApiResponse.success(companyService.findCompanyTreePage(type));
+    }
+
+
+
+    @ApiOperation("鍏ㄩ噺閮ㄩ棬淇℃伅鍚屾")
+    @PostMapping("/syncAll")
+    @CloudRequiredPermission("business:company:sync")
+    public ApiResponse sync(){
+        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp){
+            return ApiResponse.success( erpSyncService.syncCompany(null));
+        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk){
+             hkSyncOrgUserFHKService.syncOrgData();
+            return ApiResponse.success("鍚屾鎴愬姛");
+        }
+        return ApiResponse.failed("鏃犳晥鎿嶄綔");
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceCloudController.java
new file mode 100644
index 0000000..076c928
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceCloudController.java
@@ -0,0 +1,109 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Device;
+import com.doumee.service.business.DeviceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "璁惧淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/device")
+public class DeviceCloudController extends BaseController {
+
+    @Autowired
+    private DeviceService deviceService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:device:create")
+    public ApiResponse create(@RequestBody Device device) {
+        return ApiResponse.success(deviceService.create(device));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:device:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        deviceService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("淇敼鏄惁闂ㄧ鍏ュ彛")
+    @PostMapping("/updateEntranceById")
+    @CloudRequiredPermission("business:company:update")
+    public ApiResponse updateStatusById(@RequestBody Device param) {
+        Device d = new Device();
+        d.setId(param.getId());
+        d.setEditDate(new Date());
+        d.setIsEntrance(Constants.formatIntegerNum(param.getIsEntrance()));
+        deviceService.updateById(d);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:device:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        deviceService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:device:update")
+    public ApiResponse updateById(@RequestBody Device device) {
+        deviceService.updateById(device);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:device:query")
+    public ApiResponse<PageData<Device>> findPage (@RequestBody PageWrap<Device> pageWrap) {
+        return ApiResponse.success(deviceService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:device:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Device> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Device.class).export(deviceService.findPage(pageWrap).getRecords(), "璁惧淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:device:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(deviceService.findById(id));
+    }
+
+    @ApiOperation("鑾峰彇闂ㄧ闆嗗悎-鎻愪緵缁欓棬绂佺粍")
+    @PostMapping("/getList")
+    @CloudRequiredPermission("business:device:query")
+    public ApiResponse findList(@RequestBody Device device) {
+        return ApiResponse.success(deviceService.findIdAndNameList(device));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceEventCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceEventCloudController.java
new file mode 100644
index 0000000..33fed61
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceEventCloudController.java
@@ -0,0 +1,94 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.admin.response.DeviceEventDTO;
+import com.doumee.dao.business.model.DeviceEvent;
+import com.doumee.service.business.DeviceEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/deviceEvent")
+public class DeviceEventCloudController extends BaseController {
+
+    @Autowired
+    private DeviceEventService deviceEventService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+//    @CloudRequiredPermission("business:deviceevent:create")
+    public ApiResponse create(@RequestBody DeviceEvent deviceEvent) {
+        return ApiResponse.success(deviceEventService.create(deviceEvent));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:deviceevent:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        deviceEventService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:deviceevent:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        deviceEventService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:deviceevent:update")
+    public ApiResponse updateById(@RequestBody DeviceEvent deviceEvent) {
+        deviceEventService.updateById(deviceEvent);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    //@CloudRequiredPermission("business:deviceevent:query")
+    public ApiResponse<PageData<DeviceEventDTO>> findPage (@RequestBody PageWrap<DeviceEvent> pageWrap) {
+        return ApiResponse.success(deviceEventService.findDeviceEventDTOPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    //@CloudRequiredPermission("business:deviceevent:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<DeviceEvent> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(DeviceEventDTO.class).export(deviceEventService.findDeviceEventDTOPage(pageWrap).getRecords(), "闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃", response);
+    }
+//    public void exportExcel (@RequestBody PageWrap<DeviceEvent> pageWrap, HttpServletResponse response) {
+//        ExcelExporter.build(DeviceEventVo.class).export(deviceEventService.findDeviceEventExcel(pageWrap), "闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃", response);
+//    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:deviceevent:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(deviceEventService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceRoleCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceRoleCloudController.java
new file mode 100644
index 0000000..e00853b
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/DeviceRoleCloudController.java
@@ -0,0 +1,104 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.DeviceRole;
+import com.doumee.service.business.DeviceRoleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "闂ㄧ瑙掕壊淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/deviceRole")
+public class DeviceRoleCloudController extends BaseController {
+
+    @Autowired
+    private DeviceRoleService deviceRoleService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:devicerole:create")
+    public ApiResponse create(@RequestBody DeviceRole deviceRole) {
+        return ApiResponse.success(deviceRoleService.create(deviceRole));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:devicerole:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        deviceRoleService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:devicerole:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        deviceRoleService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:devicerole:update")
+    public ApiResponse updateById(@RequestBody DeviceRole deviceRole) {
+        deviceRoleService.updateById(deviceRole);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼榛樿闂ㄧ缁勭姸鎬�")
+    @PostMapping("/updateStatusById")
+    @CloudRequiredPermission("business:devicerole:update")
+    public ApiResponse updateStatusById(@RequestBody DeviceRole deviceRole) {
+        deviceRoleService.updateStatusById(deviceRole);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("榛樿涓嬪彂闂ㄧ缁勮鑹�")
+    @PostMapping("/updateMemberRole")
+    public ApiResponse updateMemberRole(@RequestBody DeviceRole deviceRole) {
+        deviceRoleService.updateMemberRole(deviceRole);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:devicerole:query")
+    public ApiResponse<PageData<DeviceRole>> findPage (@RequestBody PageWrap<DeviceRole> pageWrap) {
+        return ApiResponse.success(deviceRoleService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:devicerole:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<DeviceRole> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(DeviceRole.class).export(deviceRoleService.findPage(pageWrap).getRecords(), "闂ㄧ瑙掕壊淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:devicerole:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(deviceRoleService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ERPSyncCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ERPSyncCloudController.java
new file mode 100644
index 0000000..18f994e
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ERPSyncCloudController.java
@@ -0,0 +1,45 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.erp.model.openapi.request.erp.OrgListRequest;
+import com.doumee.core.erp.model.openapi.request.erp.UserListRequest;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.service.business.ext.ERPSyncService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "ERP鏁版嵁鍚屾鎺ュ彛")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/erpsync")
+public class ERPSyncCloudController extends BaseController {
+    @Autowired
+    private ERPSyncService erpSyncService;
+
+    @PreventRepeat
+    @ApiOperation("銆怑RP銆戝叏閲忓悓姝RP缁勭粐鎺ュ彛")
+    @PostMapping("/getCompanies")
+    @CloudRequiredPermission("business:erpsync:company")
+    public ApiResponse getCompanies(@RequestBody OrgListRequest param) {
+        String result = erpSyncService.syncCompany(param);
+        return ApiResponse.success(result);
+    }
+    @PreventRepeat
+    @ApiOperation("銆怑RP銆戝叏閲忓悓姝RP浜哄憳鎺ュ彛")
+    @PostMapping("/getUsers")
+    @CloudRequiredPermission("business:erpsync:users")
+    public ApiResponse getUsers(@RequestBody UserListRequest param) {
+        String result = erpSyncService.syncUsers(param);
+        return ApiResponse.success(result);
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/EmpowerCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/EmpowerCloudController.java
new file mode 100644
index 0000000..0601c1c
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/EmpowerCloudController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Empower;
+import com.doumee.service.business.EmpowerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "浜哄憳鎺堟潈瀵煎叆璁板綍")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/empower")
+public class EmpowerCloudController extends BaseController {
+
+    @Autowired
+    private EmpowerService empowerService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:empower:create")
+    public ApiResponse create(@RequestBody Empower empower) {
+        return ApiResponse.success(empowerService.create(empower));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:empower:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        empowerService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:empower:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        empowerService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:empower:update")
+    public ApiResponse updateById(@RequestBody Empower empower) {
+        empowerService.updateById(empower);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:empower:query")
+    public ApiResponse<PageData<Empower>> findPage (@RequestBody PageWrap<Empower> pageWrap) {
+        return ApiResponse.success(empowerService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:empower:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Empower> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Empower.class).export(empowerService.findPage(pageWrap).getRecords(), "鎺堟潈璁板綍", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:empower:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(empowerService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/FormParamCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/FormParamCloudController.java
new file mode 100644
index 0000000..0b7fa6b
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/FormParamCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.FormParam;
+import com.doumee.service.business.FormParamService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "琛ㄥ崟閰嶇疆淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/formParam")
+public class FormParamCloudController extends BaseController {
+
+    @Autowired
+    private FormParamService formParamService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:formparam:create")
+    public ApiResponse create(@RequestBody FormParam formParam) {
+        return ApiResponse.success(formParamService.create(formParam));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:formparam:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        formParamService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:formparam:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        formParamService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:formparam:update")
+    public ApiResponse updateById(@RequestBody FormParam formParam) {
+        formParamService.updateById(formParam);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:formparam:query")
+    public ApiResponse<PageData<FormParam>> findPage (@RequestBody PageWrap<FormParam> pageWrap) {
+        return ApiResponse.success(formParamService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:formparam:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<FormParam> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(FormParam.class).export(formParamService.findPage(pageWrap).getRecords(), "琛ㄥ崟閰嶇疆淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:formparam:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(formParamService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerCloudController.java
new file mode 100644
index 0000000..658129d
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerCloudController.java
@@ -0,0 +1,84 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.HiddenDanger;
+import com.doumee.service.business.HiddenDangerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "闅愭偅淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/hiddenDanger")
+public class HiddenDangerCloudController extends BaseController {
+
+    @Autowired
+    private HiddenDangerService hiddenDangerService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:hiddendanger:create")
+    public ApiResponse create(@RequestBody HiddenDanger hiddenDanger) {
+        return ApiResponse.success(hiddenDangerService.create(hiddenDanger));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:hiddendanger:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        hiddenDangerService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:hiddendanger:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        hiddenDangerService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:hiddendanger:update")
+    public ApiResponse updateById(@RequestBody HiddenDanger hiddenDanger) {
+        hiddenDangerService.updateById(hiddenDanger);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:hiddendanger:query")
+    public ApiResponse<PageData<HiddenDanger>> findPage (@RequestBody PageWrap<HiddenDanger> pageWrap) {
+        return ApiResponse.success(hiddenDangerService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:hiddendanger:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<HiddenDanger> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(HiddenDanger.class).export(hiddenDangerService.findPage(pageWrap).getRecords(), "闅愭偅淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:hiddendanger:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(hiddenDangerService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerLogCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerLogCloudController.java
new file mode 100644
index 0000000..88b3b4f
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerLogCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.HiddenDangerLog;
+import com.doumee.service.business.HiddenDangerLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "鐞嗚碃鎿嶄綔鍘嗗彶琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/hiddenDangerLog")
+public class HiddenDangerLogCloudController extends BaseController {
+
+    @Autowired
+    private HiddenDangerLogService hiddenDangerLogService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:hiddendangerlog:create")
+    public ApiResponse create(@RequestBody HiddenDangerLog hiddenDangerLog) {
+        return ApiResponse.success(hiddenDangerLogService.create(hiddenDangerLog));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:hiddendangerlog:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        hiddenDangerLogService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:hiddendangerlog:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        hiddenDangerLogService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:hiddendangerlog:update")
+    public ApiResponse updateById(@RequestBody HiddenDangerLog hiddenDangerLog) {
+        hiddenDangerLogService.updateById(hiddenDangerLog);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:hiddendangerlog:query")
+    public ApiResponse<PageData<HiddenDangerLog>> findPage (@RequestBody PageWrap<HiddenDangerLog> pageWrap) {
+        return ApiResponse.success(hiddenDangerLogService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:hiddendangerlog:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<HiddenDangerLog> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(HiddenDangerLog.class).export(hiddenDangerLogService.findPage(pageWrap).getRecords(), "鐞嗚碃鎿嶄綔鍘嗗彶琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:hiddendangerlog:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(hiddenDangerLogService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerParamCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerParamCloudController.java
new file mode 100644
index 0000000..86ed0b8
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HiddenDangerParamCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.HiddenDangerParam;
+import com.doumee.service.business.HiddenDangerParamService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/hiddenDangerParam")
+public class HiddenDangerParamCloudController extends BaseController {
+
+    @Autowired
+    private HiddenDangerParamService hiddenDangerParamService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:hiddendangerparam:create")
+    public ApiResponse create(@RequestBody HiddenDangerParam hiddenDangerParam) {
+        return ApiResponse.success(hiddenDangerParamService.create(hiddenDangerParam));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:hiddendangerparam:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        hiddenDangerParamService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:hiddendangerparam:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        hiddenDangerParamService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:hiddendangerparam:update")
+    public ApiResponse updateById(@RequestBody HiddenDangerParam hiddenDangerParam) {
+        hiddenDangerParamService.updateById(hiddenDangerParam);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:hiddendangerparam:query")
+    public ApiResponse<PageData<HiddenDangerParam>> findPage (@RequestBody PageWrap<HiddenDangerParam> pageWrap) {
+        return ApiResponse.success(hiddenDangerParamService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:hiddendangerparam:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<HiddenDangerParam> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(HiddenDangerParam.class).export(hiddenDangerParamService.findPage(pageWrap).getRecords(), "闅愭偅鍖哄煙閰嶇疆绫诲瀷淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:hiddendangerparam:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(hiddenDangerParamService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HkSyncCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HkSyncCloudController.java
new file mode 100644
index 0000000..6566b03
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/HkSyncCloudController.java
@@ -0,0 +1,99 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
+import com.doumee.core.haikang.model.param.request.EventSubRequest;
+import com.doumee.core.haikang.model.param.request.ParkListRequest;
+import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest;
+import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
+import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.service.business.impl.hksync.HkSyncDeviceServiceImpl;
+import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl;
+import com.doumee.service.business.impl.hksync.HkSyncPrivilegeServiceImpl;
+import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "娴峰悍鏁版嵁鍚屾鎺ュ彛")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/hksync")
+public class HkSyncCloudController extends BaseController {
+
+    @Autowired
+    private HkSyncDeviceServiceImpl hkSyncDeviceService;
+    @Autowired
+    private HkSyncParkServiceImpl hkSyncParkService;
+    @Autowired
+    private HkSyncPrivilegeServiceImpl hkSyncPrivilegeService;
+    @Autowired
+    private HkSyncPushServiceImpl hkSyncPushService;
+
+    @PreventRepeat
+    @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ラ棬绂佽澶囨帴鍙�")
+    @PostMapping("/syncDevices")
+    @CloudRequiredPermission("business:hksync:device")
+    public ApiResponse syncHkDevices(@RequestBody AcsDeviceListRequest param) {
+        String result = hkSyncDeviceService.syncHkDevices(param);
+        return ApiResponse.success(result);
+    }
+    @PreventRepeat
+    @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ュ仠杞﹀簱鎺ュ彛")
+    @PostMapping("/syncParks")
+    @CloudRequiredPermission("business:hksync:park")
+    public ApiResponse syncHkParks(@RequestBody ParkListRequest param) {
+        String result = hkSyncParkService.syncHkParks(param);
+        return ApiResponse.success(result);
+    }
+    @PreventRepeat
+    @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ヨ瀹㈡潈闄愮粍鎺ュ彛")
+    @PostMapping("/syncPrivilege")
+    @CloudRequiredPermission("business:hksync:privilege")
+    public ApiResponse syncPrivilege(@RequestBody PrivilegeGroupRequest param) {
+        String result = hkSyncPrivilegeService.syncPrivilege(param);
+        return ApiResponse.success(result);
+    }
+//    @PreventRepeat
+    @ApiOperation("銆愭捣搴枫�戦棬绂佷簨浠惰闃呮帹閫佸鎺ュ鐞嗘帴鍙�")
+    @PostMapping("/push/acs")
+    public ApiResponse pushAcs(  HttpServletRequest request,@RequestBody EventAcsRequest param, HttpServletResponse response) {
+        String result = hkSyncPushService.dealAcsEvent(param,response);
+        return ApiResponse.success(result);
+    }
+//    @PreventRepeat
+    @ApiOperation("銆愭捣搴枫�戣瀹簨浠惰闃呮帹閫佸鎺ュ鐞嗘帴鍙�")
+    @PostMapping("/push/visit")
+    public ApiResponse pushVisit(@RequestBody EventVisitRequest param, HttpServletResponse response) {
+        String result = hkSyncPushService.dealVisitEvent(param,response);
+        return ApiResponse.success(result);
+    }
+//    @PreventRepeat
+    @ApiOperation("銆愭捣搴枫�戝仠杞﹀満浜嬩欢璁㈤槄鎺ㄩ�佸鎺ュ鐞嗘帴鍙�")
+    @PostMapping("/push/parks")
+    public ApiResponse pushParks(@RequestBody EventParkRequest param, HttpServletResponse response) {
+        String result = hkSyncPushService.dealParkEvent(param,response);
+        return ApiResponse.success(result);
+    }
+    @PreventRepeat
+    @ApiOperation("銆愭捣搴枫�戝彇娑堣闃呬簨浠�")
+    @PostMapping("/cancelEventSub")
+    public ApiResponse cancelEventSub(@RequestBody EventSubRequest param, HttpServletResponse response) {
+         hkSyncPushService.cancelEventSub();
+        return ApiResponse.success(null);
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/InterfaceLogCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/InterfaceLogCloudController.java
new file mode 100644
index 0000000..4e07fe1
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/InterfaceLogCloudController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.InterfaceLog;
+import com.doumee.service.business.InterfaceLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "涓夋柟骞冲彴鎺ュ彛浜や簰璁板綍")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/interfaceLog")
+public class InterfaceLogCloudController extends BaseController {
+
+    @Autowired
+    private InterfaceLogService interfaceLogService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:interfacelog:create")
+    public ApiResponse create(@RequestBody InterfaceLog interfaceLog) {
+        return ApiResponse.success(interfaceLogService.create(interfaceLog));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:interfacelog:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        interfaceLogService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:interfacelog:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        interfaceLogService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:interfacelog:update")
+    public ApiResponse updateById(@RequestBody InterfaceLog interfaceLog) {
+        interfaceLogService.updateById(interfaceLog);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:interfacelog:query")
+    public ApiResponse<PageData<InterfaceLog>> findPage (@RequestBody PageWrap<InterfaceLog> pageWrap) {
+        return ApiResponse.success(interfaceLogService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:interfacelog:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<InterfaceLog> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(InterfaceLog.class).export(interfaceLogService.findPage(pageWrap).getRecords(), "涓夋柟骞冲彴鎺ュ彛浜や簰璁板綍", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:interfacelog:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(interfaceLogService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberCardCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberCardCloudController.java
new file mode 100644
index 0000000..ec5ba78
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberCardCloudController.java
@@ -0,0 +1,125 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.MemberCard;
+import com.doumee.service.business.MemberCardService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "鐢ㄦ埛鍗$墖缁戝畾淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/memberCard")
+public class MemberCardCloudController extends BaseController {
+
+    @Autowired
+    private MemberCardService memberCardService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:membercard:create")
+    public ApiResponse create(@RequestBody MemberCard memberCard) {
+        return ApiResponse.success(memberCardService.create(memberCard));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:membercard:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        memberCardService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:membercard:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        memberCardService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:membercard:update")
+    public ApiResponse updateById(@RequestBody MemberCard memberCard) {
+        memberCardService.updateById(memberCard);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎸傚け鎿嶄綔")
+    @PostMapping("/batchLoss")
+    @CloudRequiredPermission("business:membercard:update")
+    public ApiResponse batchLoss(@RequestBody List<MemberCard> memberCards) {
+        memberCardService.updateByIdInBatch(memberCards,0);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("瑙f寕鎿嶄綔")
+    @PostMapping("/batchUnLoss")
+    @CloudRequiredPermission("business:membercard:update")
+    public ApiResponse batchUnLoss(@RequestBody List<MemberCard> memberCards) {
+        memberCardService.updateByIdInBatch(memberCards,1);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("閫�鍗℃搷浣�")
+    @PostMapping("/refundCard")
+    @CloudRequiredPermission("business:membercard:update")
+    public ApiResponse refundCard(@RequestBody MemberCard memberCard) {
+        memberCardService.updateRefundCard(memberCard);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:membercard:query")
+    public ApiResponse<PageData<MemberCard>> findPage (@RequestBody PageWrap<MemberCard> pageWrap) {
+        return ApiResponse.success(memberCardService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:membercard:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<MemberCard> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(MemberCard.class).export(memberCardService.findPage(pageWrap).getRecords(), "鐢ㄦ埛鍗$墖缁戝畾淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:membercard:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(memberCardService.findById(id));
+    }
+
+
+    @ApiOperation("鏍规嵁鏉′欢鏌ヨ鍙敤鍗″彿")
+    @PostMapping("/queryCard")
+    //@CloudRequiredPermission("business:membercard:query")
+    public ApiResponse<List<MemberCard>> queryCard () {
+        MemberCard card = new MemberCard();
+        return ApiResponse.success(memberCardService.findList(card));
+    }
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberCloudController.java
new file mode 100644
index 0000000..0efc9cf
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberCloudController.java
@@ -0,0 +1,276 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.DataSyncConfig;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.admin.request.LaborMemberDTO;
+import com.doumee.dao.admin.request.MemberQuery;
+import com.doumee.dao.admin.response.MemberInfoDTO;
+import com.doumee.dao.business.model.Member;
+import com.doumee.service.business.MemberService;
+import com.doumee.service.business.ext.ERPSyncService;
+import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromHKServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "浜哄憳淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/member")
+public class MemberCloudController extends BaseController {
+    @Autowired
+    private ERPSyncService erpSyncService;
+    @Autowired
+    private HkSyncOrgUserFromHKServiceImpl hkSyncOrgUserFHKService;
+    @Autowired
+    private DataSyncConfig dataSyncConfig;
+
+    @Autowired
+    private MemberService memberService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:member:create")
+    public ApiResponse create(@RequestBody Member member) {
+        return ApiResponse.success(memberService.create(member));
+    }
+
+    @PreventRepeat
+    @ApiOperation("鍒涘缓鍔冲姟浜哄憳淇℃伅")
+    @PostMapping("/laborMemberCreate")
+    @CloudRequiredPermission("business:member:create")
+    public ApiResponse<Integer> laborMemberCreate(@RequestBody LaborMemberDTO member){
+        return ApiResponse.success(memberService.laborMemberCreate(member));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:member:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        memberService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:member:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        memberService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍛樺伐鏉冮檺涓嬪彂")
+    @GetMapping("/roleAuth/{id}")
+    @CloudRequiredPermission("business:empower:create")
+    public ApiResponse roleAuthById(@PathVariable Integer id) {
+        memberService.roleAuthById(id);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("鍚屾浜鸿劯淇℃伅")
+    @PostMapping("/updateFace")
+    public ApiResponse updateFace(@RequestBody Member member) {
+        memberService.updateFace(member);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("寮哄埗鍒犻櫎瀹夐槻骞冲彴浜哄憳淇℃伅")
+    @PostMapping("/delHkForce")
+    public ApiResponse delHkForce(@RequestBody Member member) {
+        memberService.delHkForce(member);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("閲嶆柊涓嬪彂浜鸿劯")
+    @PostMapping("/empowerByList")
+    public ApiResponse empowerByList(@RequestBody Member member) {
+        memberService.empowerByList(member);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:member:update")
+    public ApiResponse updateById(@RequestBody Member member) {
+        memberService.updateById(member);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID 绂佸惎鐢�  ")
+    @PostMapping("/updateStatusById")
+    @CloudRequiredPermission("business:member:update")
+    public ApiResponse updateStatusById(@RequestBody Member member){
+        memberService.updateStatusById(member);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("浜哄憳绉婚櫎/瑙e喕")
+    @PostMapping("/updateRemoveStatusById")
+    @CloudRequiredPermission("business:member:update")
+    public ApiResponse updateRemoveStatusById(@RequestBody List<Member> list){
+        if(list.size()>0){
+            memberService.updateRemoveStatusById(list);
+            return ApiResponse.success(null);
+        }else{
+            return ApiResponse.failed("鍙傛暟閿欒");
+        }
+
+    }
+
+    @ApiOperation("浜哄憳鎷夐粦/鍐荤粨")
+    @PostMapping("/updateVisitsStatusById")
+    @CloudRequiredPermission("business:member:update")
+    public ApiResponse updateVisitsStatusById(@RequestBody Member member){
+        memberService.updateVisitsStatusById(member);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("鎵归噺鎷夐粦")
+    @GetMapping("/batchBlock")
+    @CloudRequiredPermission("business:member:delete")
+    public ApiResponse batchBlock(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        memberService.batchBlock(idList,2);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍐荤粨")
+    @GetMapping("/batchFreeze")
+    @CloudRequiredPermission("business:member:delete")
+    public ApiResponse batchFreeze(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        memberService.batchBlock(idList,1);
+        return ApiResponse.success(null);
+    }
+
+
+
+    @ApiOperation("鏄惁鍙嫓璁跨姸鎬佷慨鏀�")
+    @PostMapping("/updateCanVisitById")
+    @CloudRequiredPermission("business:member:update")
+    public ApiResponse updateCanVisitById(@RequestBody Member member){
+        memberService.updateCanVisitById(member);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:member:query")
+    public ApiResponse<PageData<Member>> findPage (@RequestBody PageWrap<Member> pageWrap) {
+        return ApiResponse.success(memberService.findPage(pageWrap));
+    }
+
+    @ApiOperation("鍒嗛〉鍔冲姟鐢ㄦ埛淇℃伅鏌ヨ")
+    @PostMapping("/findLaborMemberInfoPage")
+    @CloudRequiredPermission("business:member:query")
+    public ApiResponse<PageData<MemberInfoDTO>> findLaborMemberInfoPage(@RequestBody PageWrap<MemberInfoDTO> pageWrap){
+        return ApiResponse.success(memberService.findLaborMemberInfoPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:member:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Member> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Member.class).export(memberService.findPage(pageWrap).getRecords(), "浜哄憳淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:member:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(memberService.findById(id));
+    }
+
+
+
+
+    /**
+     *
+     * 鍒嗛〉鏌ヨ鍐呴儴浜哄憳淇℃伅
+     * @param pageWrap
+     * @return
+     */
+    @ApiOperation("鍒嗛〉鏌ヨ鍐呴儴浜哄憳淇℃伅")
+    @PostMapping("/findMemberInfoPage")
+    @CloudRequiredPermission("business:member:query")
+    public ApiResponse<PageData<MemberInfoDTO>> findMemberInfoPage(@RequestBody PageWrap<MemberQuery> pageWrap){
+        if(pageWrap.getModel().getType().equals(Constants.memberType.visitor)){
+            return ApiResponse.success(memberService.findVisitPage(pageWrap));
+        }else if(pageWrap.getModel().getType().equals(Constants.memberType.internal)){
+            return ApiResponse.success(memberService.findMemberInfoPage(pageWrap));
+        }else {
+            return ApiResponse.success(null);
+        }
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ璁垮浜哄憳淇℃伅")
+    @PostMapping("/findVisitPage")
+    @CloudRequiredPermission("business:member:query")
+    public ApiResponse<PageData<MemberInfoDTO>> findVisitPage (@RequestBody PageWrap<MemberQuery> pageWrap) {
+        return ApiResponse.success(memberService.findVisitPage(pageWrap));
+    }
+
+
+    @ApiOperation("寮傚父浜哄憳鍐荤粨/鎷夐粦")
+    @PostMapping("/findUnusualPage")
+    @CloudRequiredPermission("business:member:query")
+    public ApiResponse<PageData<MemberInfoDTO>> findUnusualPage (@RequestBody PageWrap<MemberQuery> pageWrap) {
+        return ApiResponse.success(memberService.findUnusualPage(pageWrap));
+    }
+
+    @ApiOperation("鏍规嵁绫诲瀷鏌ヨ浜哄憳淇℃伅")
+    @PostMapping("/findTypeMemberInfo")
+    //@CloudRequiredPermission("business:member:query")
+    public ApiResponse<List<Member>> findTypeMemberInfo (@RequestBody Member member) {
+        return ApiResponse.success(memberService.findList(member));
+    }
+
+    @ApiOperation("鍏ㄩ噺淇℃伅鍚屾")
+    @PostMapping("/syncAll")
+    @CloudRequiredPermission("business:member:sync")
+    public ApiResponse sync(){
+        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp){
+            erpSyncService.syncUsers(null);
+        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk){
+            hkSyncOrgUserFHKService.syncUserData();
+        }
+        return ApiResponse.success("鍚屾鎴愬姛");
+    }
+
+
+
+    @ApiOperation("娴嬭瘯浜哄憳鍐荤粨")
+    @PostMapping("/testFreeFz")
+    public ApiResponse testFreeFz() {
+        memberService.memberFreeze();
+        return ApiResponse.success(null);
+    }
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberRoleCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberRoleCloudController.java
new file mode 100644
index 0000000..da0db76
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/MemberRoleCloudController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.MemberRole;
+import com.doumee.service.business.MemberRoleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "浜哄憳瑙掕壊鍏宠仈淇℃伅")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/memberRole")
+public class MemberRoleCloudController extends BaseController {
+
+    @Autowired
+    private MemberRoleService memberRoleService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:memberrole:create")
+    public ApiResponse create(@RequestBody MemberRole memberRole) {
+        return ApiResponse.success(memberRoleService.create(memberRole));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:memberrole:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        memberRoleService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:memberrole:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        memberRoleService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:memberrole:update")
+    public ApiResponse updateById(@RequestBody MemberRole memberRole) {
+        memberRoleService.updateById(memberRole);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:memberrole:query")
+    public ApiResponse<PageData<MemberRole>> findPage (@RequestBody PageWrap<MemberRole> pageWrap) {
+        return ApiResponse.success(memberRoleService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:memberrole:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<MemberRole> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(MemberRole.class).export(memberRoleService.findPage(pageWrap).getRecords(), "浜哄憳瑙掕壊鍏宠仈淇℃伅", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:memberrole:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(memberRoleService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ParkBookCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ParkBookCloudController.java
new file mode 100644
index 0000000..9a7b965
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ParkBookCloudController.java
@@ -0,0 +1,97 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.ParkBook;
+import com.doumee.service.business.ParkBookService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "杞﹁締棰勭害璁板綍淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/parkBook")
+public class ParkBookCloudController extends BaseController {
+
+    @Autowired
+    private ParkBookService parkBookService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:parkbook:create")
+    public ApiResponse create(@RequestBody ParkBook parkBook) {
+        return ApiResponse.success(parkBookService.create(parkBook));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:parkbook:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        parkBookService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:parkbook:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        parkBookService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:parkbook:update")
+    public ApiResponse updateById(@RequestBody ParkBook parkBook) {
+        parkBookService.updateById(parkBook);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("閲嶆柊涓嬪彂")
+    @PostMapping("/reUpdate")
+    @CloudRequiredPermission("business:parkbook:update")
+    public ApiResponse reUpdate(@RequestBody ParkBook parkBook) {
+        parkBookService.reUpdate(parkBook);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:parkbook:query")
+    public ApiResponse<PageData<ParkBook>> findPage (@RequestBody PageWrap<ParkBook> pageWrap) {
+        return ApiResponse.success(parkBookService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:parkbook:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<ParkBook> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(ParkBook.class).export(parkBookService.findPage(pageWrap).getRecords(), "杞﹁締棰勭害璁板綍淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:parkbook:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(parkBookService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ParksCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ParksCloudController.java
new file mode 100644
index 0000000..cb59122
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ParksCloudController.java
@@ -0,0 +1,97 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Parks;
+import com.doumee.service.business.ParksService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "鍋滆溅搴撲俊鎭〃")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/parks")
+public class ParksCloudController extends BaseController {
+
+    @Autowired
+    private ParksService parksService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:parks:create")
+    public ApiResponse create(@RequestBody Parks parks) {
+        return ApiResponse.success(parksService.create(parks));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:parks:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        parksService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:parks:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        parksService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:parks:update")
+    public ApiResponse updateById(@RequestBody Parks parks) {
+        parksService.updateById(parks);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:parks:query")
+    public ApiResponse<PageData<Parks>> findPage (@RequestBody PageWrap<Parks> pageWrap) {
+        return ApiResponse.success(parksService.findPage(pageWrap));
+    }
+
+    @ApiOperation("鎵�灞炲仠杞﹀満鍒楄〃")
+    @PostMapping("/findList")
+    @CloudRequiredPermission("business:parks:query")
+    public ApiResponse<List<Parks>> findList (@RequestBody Parks parks) {
+        return ApiResponse.success(parksService.findList(parks));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:parks:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Parks> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Parks.class).export(parksService.findPage(pageWrap).getRecords(), "鍋滆溅搴撲俊鎭〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:parks:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(parksService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformCloudController.java
new file mode 100644
index 0000000..c3e5820
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformCloudController.java
@@ -0,0 +1,84 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Platform;
+import com.doumee.service.business.PlatformService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "鏈堝彴淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/platform")
+public class PlatformCloudController extends BaseController {
+
+    @Autowired
+    private PlatformService platformService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:platform:create")
+    public ApiResponse create(@RequestBody Platform platform) {
+        return ApiResponse.success(platformService.create(platform));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:platform:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        platformService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:platform:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        platformService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:platform:update")
+    public ApiResponse updateById(@RequestBody Platform platform) {
+        platformService.updateById(platform);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:platform:query")
+    public ApiResponse<PageData<Platform>> findPage (@RequestBody PageWrap<Platform> pageWrap) {
+        return ApiResponse.success(platformService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:platform:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Platform> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Platform.class).export(platformService.findPage(pageWrap).getRecords(), "鏈堝彴淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:platform:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(platformService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformGroupCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformGroupCloudController.java
new file mode 100644
index 0000000..fa40abb
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformGroupCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.PlatformGroup;
+import com.doumee.service.business.PlatformGroupService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "鏈堝彴_鍒嗙粍淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/platformGroup")
+public class PlatformGroupCloudController extends BaseController {
+
+    @Autowired
+    private PlatformGroupService platformGroupService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:platformgroup:create")
+    public ApiResponse create(@RequestBody PlatformGroup platformGroup) {
+        return ApiResponse.success(platformGroupService.create(platformGroup));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:platformgroup:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        platformGroupService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:platformgroup:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        platformGroupService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:platformgroup:update")
+    public ApiResponse updateById(@RequestBody PlatformGroup platformGroup) {
+        platformGroupService.updateById(platformGroup);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:platformgroup:query")
+    public ApiResponse<PageData<PlatformGroup>> findPage (@RequestBody PageWrap<PlatformGroup> pageWrap) {
+        return ApiResponse.success(platformGroupService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:platformgroup:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<PlatformGroup> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(PlatformGroup.class).export(platformGroupService.findPage(pageWrap).getRecords(), "鏈堝彴_鍒嗙粍淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:platformgroup:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(platformGroupService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformInterfaceLogCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformInterfaceLogCloudController.java
new file mode 100644
index 0000000..596f874
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformInterfaceLogCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.PlatformInterfaceLog;
+import com.doumee.service.business.PlatformInterfaceLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/platformInterfaceLog")
+public class PlatformInterfaceLogCloudController extends BaseController {
+
+    @Autowired
+    private PlatformInterfaceLogService platformInterfaceLogService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:platforminterfacelog:create")
+    public ApiResponse create(@RequestBody PlatformInterfaceLog platformInterfaceLog) {
+        return ApiResponse.success(platformInterfaceLogService.create(platformInterfaceLog));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:platforminterfacelog:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        platformInterfaceLogService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:platforminterfacelog:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        platformInterfaceLogService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:platforminterfacelog:update")
+    public ApiResponse updateById(@RequestBody PlatformInterfaceLog platformInterfaceLog) {
+        platformInterfaceLogService.updateById(platformInterfaceLog);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:platforminterfacelog:query")
+    public ApiResponse<PageData<PlatformInterfaceLog>> findPage (@RequestBody PageWrap<PlatformInterfaceLog> pageWrap) {
+        return ApiResponse.success(platformInterfaceLogService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:platforminterfacelog:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<PlatformInterfaceLog> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(PlatformInterfaceLog.class).export(platformInterfaceLogService.findPage(pageWrap).getRecords(), "浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:platforminterfacelog:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(platformInterfaceLogService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformJobCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformJobCloudController.java
new file mode 100644
index 0000000..4976ab9
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformJobCloudController.java
@@ -0,0 +1,84 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.PlatformJob;
+import com.doumee.service.business.PlatformJobService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "鏈堝彴璋冨害浣滀笟淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/platformJob")
+public class PlatformJobCloudController extends BaseController {
+
+    @Autowired
+    private PlatformJobService platformJobService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:platformjob:create")
+    public ApiResponse create(@RequestBody PlatformJob platformJob) {
+        return ApiResponse.success(platformJobService.create(platformJob));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:platformjob:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        platformJobService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:platformjob:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        platformJobService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:platformjob:update")
+    public ApiResponse updateById(@RequestBody PlatformJob platformJob) {
+        platformJobService.updateById(platformJob);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:platformjob:query")
+    public ApiResponse<PageData<PlatformJob>> findPage (@RequestBody PageWrap<PlatformJob> pageWrap) {
+        return ApiResponse.success(platformJobService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:platformjob:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<PlatformJob> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(PlatformJob.class).export(platformJobService.findPage(pageWrap).getRecords(), "鏈堝彴璋冨害浣滀笟淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:platformjob:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(platformJobService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformLogCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformLogCloudController.java
new file mode 100644
index 0000000..3676262
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformLogCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.PlatformLog;
+import com.doumee.service.business.PlatformLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/platformLog")
+public class PlatformLogCloudController extends BaseController {
+
+    @Autowired
+    private PlatformLogService platformLogService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:platformlog:create")
+    public ApiResponse create(@RequestBody PlatformLog platformLog) {
+        return ApiResponse.success(platformLogService.create(platformLog));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:platformlog:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        platformLogService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:platformlog:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        platformLogService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:platformlog:update")
+    public ApiResponse updateById(@RequestBody PlatformLog platformLog) {
+        platformLogService.updateById(platformLog);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:platformlog:query")
+    public ApiResponse<PageData<PlatformLog>> findPage (@RequestBody PageWrap<PlatformLog> pageWrap) {
+        return ApiResponse.success(platformLogService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:platformlog:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<PlatformLog> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(PlatformLog.class).export(platformLogService.findPage(pageWrap).getRecords(), "鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:platformlog:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(platformLogService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformQueueCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformQueueCloudController.java
new file mode 100644
index 0000000..f61fef5
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformQueueCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.PlatformQueue;
+import com.doumee.service.business.PlatformQueueService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "鏈堝彴_鍙彿鎺掗槦淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/platformQueue")
+public class PlatformQueueCloudController extends BaseController {
+
+    @Autowired
+    private PlatformQueueService platformQueueService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:platformqueue:create")
+    public ApiResponse create(@RequestBody PlatformQueue platformQueue) {
+        return ApiResponse.success(platformQueueService.create(platformQueue));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:platformqueue:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        platformQueueService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:platformqueue:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        platformQueueService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:platformqueue:update")
+    public ApiResponse updateById(@RequestBody PlatformQueue platformQueue) {
+        platformQueueService.updateById(platformQueue);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:platformqueue:query")
+    public ApiResponse<PageData<PlatformQueue>> findPage (@RequestBody PageWrap<PlatformQueue> pageWrap) {
+        return ApiResponse.success(platformQueueService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:platformqueue:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<PlatformQueue> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(PlatformQueue.class).export(platformQueueService.findPage(pageWrap).getRecords(), "鏈堝彴_鍙彿鎺掗槦淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:platformqueue:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(platformQueueService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformShowParamCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformShowParamCloudController.java
new file mode 100644
index 0000000..a121986
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/PlatformShowParamCloudController.java
@@ -0,0 +1,83 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.PlatformShowParam;
+import com.doumee.service.business.PlatformShowParamService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/platformShowParam")
+public class PlatformShowParamCloudController extends BaseController {
+
+    @Autowired
+    private PlatformShowParamService platformShowParamService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:platformshowparam:create")
+    public ApiResponse create(@RequestBody PlatformShowParam platformShowParam) {
+        return ApiResponse.success(platformShowParamService.create(platformShowParam));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:platformshowparam:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        platformShowParamService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:platformshowparam:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        platformShowParamService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:platformshowparam:update")
+    public ApiResponse updateById(@RequestBody PlatformShowParam platformShowParam) {
+        platformShowParamService.updateById(platformShowParam);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:platformshowparam:query")
+    public ApiResponse<PageData<PlatformShowParam>> findPage (@RequestBody PageWrap<PlatformShowParam> pageWrap) {
+        return ApiResponse.success(platformShowParamService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:platformshowparam:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<PlatformShowParam> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(PlatformShowParam.class).export(platformShowParamService.findPage(pageWrap).getRecords(), "鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:platformshowparam:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(platformShowParamService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ProblemLogCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ProblemLogCloudController.java
new file mode 100644
index 0000000..660e6c9
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ProblemLogCloudController.java
@@ -0,0 +1,91 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.ProblemLog;
+import com.doumee.dao.business.vo.ProblemLogVo;
+import com.doumee.service.business.ProblemLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "璁垮绛旈璁板綍琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/problemLog")
+public class ProblemLogCloudController extends BaseController {
+
+    @Autowired
+    private ProblemLogService problemLogService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+//    @CloudRequiredPermission("business:problemlog:create")
+    public ApiResponse create(@RequestBody ProblemLog problemLog) {
+        return ApiResponse.success(problemLogService.create(problemLog));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:problemlog:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        problemLogService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:problemlog:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        problemLogService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:problemlog:update")
+    public ApiResponse updateById(@RequestBody ProblemLog problemLog) {
+        problemLogService.updateById(problemLog);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+//    @CloudRequiredPermission("business:problemlog:query")
+    public ApiResponse<PageData<ProblemLog>> findPage (@RequestBody PageWrap<ProblemLog> pageWrap) {
+        return ApiResponse.success(problemLogService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+//    @CloudRequiredPermission("business:problemlog:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<ProblemLog> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(ProblemLogVo.class).export(problemLogService.findPageExcel(pageWrap), "璁垮绛旈璁板綍琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:problemlog:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(problemLogService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ProblemsCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ProblemsCloudController.java
new file mode 100644
index 0000000..2ee5416
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/ProblemsCloudController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Problems;
+import com.doumee.service.business.ProblemsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "璇曢淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/problems")
+public class ProblemsCloudController extends BaseController {
+
+    @Autowired
+    private ProblemsService problemsService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:problems:create")
+    public ApiResponse create(@RequestBody Problems problems) {
+        return ApiResponse.success(problemsService.create(problems));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:problems:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        problemsService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:problems:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        problemsService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:problems:updateById")
+    public ApiResponse updateById(@RequestBody Problems problems) {
+        problemsService.updateById(problems);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:problems:query")
+    public ApiResponse<PageData<Problems>> findPage (@RequestBody PageWrap<Problems> pageWrap) {
+        return ApiResponse.success(problemsService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    //@CloudRequiredPermission("business:problems:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Problems> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Problems.class).export(problemsService.findPage(pageWrap).getRecords(), "璇曢淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    //@CloudRequiredPermission("business:problems:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(problemsService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/RetentionCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/RetentionCloudController.java
new file mode 100644
index 0000000..a1ec1c5
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/RetentionCloudController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Retention;
+import com.doumee.service.business.RetentionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "鍦ㄥ巶浜哄憳淇℃伅 琛紙婊炵暀锛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/retention")
+public class RetentionCloudController extends BaseController {
+
+    @Autowired
+    private RetentionService retentionService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:retention:create")
+    public ApiResponse create(@RequestBody Retention retention) {
+        return ApiResponse.success(retentionService.create(retention));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:retention:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        retentionService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:retention:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        retentionService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:retention:update")
+    public ApiResponse updateById(@RequestBody Retention retention) {
+        retentionService.updateById(retention);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    //@CloudRequiredPermission("business:retention:query")
+    public ApiResponse<PageData<Retention>> findPage (@RequestBody PageWrap<Retention> pageWrap) {
+        return ApiResponse.success(retentionService.findTrainTimePage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    //@CloudRequiredPermission("business:retention:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Retention> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Retention.class).export(retentionService.findTrainTimePage(pageWrap).getRecords(), "瀹炴椂鍦ㄥ満浜哄憳", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:retention:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(retentionService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/StagingCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/StagingCloudController.java
new file mode 100644
index 0000000..dd0bb00
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/StagingCloudController.java
@@ -0,0 +1,66 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.admin.response.StagingDataVO;
+import com.doumee.dao.business.model.Visits;
+import com.doumee.service.business.MemberService;
+import com.doumee.service.business.VisitsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/2/26 11:00
+ */
+@Api(tags = "宸ヤ綔鍙版暟鎹�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/staging")
+public class StagingCloudController extends BaseController {
+
+
+    @Autowired
+    private MemberService memberService;
+
+    @Autowired
+    private VisitsService visitsService;
+
+
+
+    @ApiOperation("澶撮儴鏁版嵁")
+    @GetMapping("/head")
+    public ApiResponse<StagingDataVO> head() {
+        return ApiResponse.success("鏌ヨ鎴愬姛",memberService.stagingHead(new StagingDataVO()));
+    }
+
+
+    @ApiOperation("涓讳綋鏁版嵁")
+    @GetMapping("/body")
+    public ApiResponse<StagingDataVO> body() {
+        return ApiResponse.success("鏌ヨ鎴愬姛",memberService.stagingBody(new StagingDataVO()));
+    }
+
+
+    @ApiOperation("瓒呮椂棰勮浜哄憳")
+    @PostMapping("/timeoutPage")
+    public ApiResponse<PageData<Visits>> timeoutPage (@RequestBody PageWrap<Visits> pageWrap) {
+        pageWrap.getModel().setLevelStatus(Constants.ZERO);
+        return ApiResponse.success(visitsService.retentionPage(pageWrap));
+    }
+
+    @ApiOperation("瓒呮椂棰勮浜哄憳绂诲満")
+    @GetMapping("/level")
+//    @RequiresPermissions("business:visits:level")
+    public ApiResponse level (@RequestParam Integer visitId) {
+        visitsService.visitLevel(visitId);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/TasksCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/TasksCloudController.java
new file mode 100644
index 0000000..30be0c5
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/TasksCloudController.java
@@ -0,0 +1,84 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Tasks;
+import com.doumee.service.business.TasksService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "瀹夐槻涓嬪彂骞冲彴浠诲姟淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/tasks")
+public class TasksCloudController extends BaseController {
+
+    @Autowired
+    private TasksService tasksService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:tasks:create")
+    public ApiResponse create(@RequestBody Tasks tasks) {
+        return ApiResponse.success(tasksService.create(tasks));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:tasks:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        tasksService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:tasks:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        tasksService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:tasks:update")
+    public ApiResponse updateById(@RequestBody Tasks tasks) {
+        tasksService.updateById(tasks);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:tasks:query")
+    public ApiResponse<PageData<Tasks>> findPage (@RequestBody PageWrap<Tasks> pageWrap) {
+        return ApiResponse.success(tasksService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:tasks:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Tasks> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Tasks.class).export(tasksService.findPage(pageWrap).getRecords(), "瀹夐槻涓嬪彂骞冲彴浠诲姟淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:tasks:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(tasksService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/TrainTimeCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/TrainTimeCloudController.java
new file mode 100644
index 0000000..702345b
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/TrainTimeCloudController.java
@@ -0,0 +1,91 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.TrainTime;
+import com.doumee.service.business.TrainTimeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "浜哄憳鍩硅鏈夋晥鏈熻褰�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/trainTime")
+public class TrainTimeCloudController extends BaseController {
+
+    @Autowired
+    private TrainTimeService trainTimeService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:traintime:create")
+    public ApiResponse create(@RequestBody TrainTime trainTime) {
+        return ApiResponse.success(trainTimeService.create(trainTime));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:traintime:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        trainTimeService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:traintime:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        trainTimeService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:traintime:update")
+    public ApiResponse updateById(@RequestBody TrainTime trainTime) {
+        trainTimeService.updateById(trainTime);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:traintime:query")
+    public ApiResponse<PageData<TrainTime>> findPage (@RequestBody PageWrap<TrainTime> pageWrap) {
+        return ApiResponse.success(trainTimeService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:traintime:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<TrainTime> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(TrainTime.class).export(trainTimeService.findPage(pageWrap).getRecords(), "浜哄憳鍩硅鏈夋晥鏈熻褰�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:traintime:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(trainTimeService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/UserActionCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/UserActionCloudController.java
new file mode 100644
index 0000000..d7cfa65
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/UserActionCloudController.java
@@ -0,0 +1,91 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.UserAction;
+import com.doumee.service.business.UserActionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/12/14 13:57
+ */
+@Api(tags = "浜哄憳鎿嶄綔璁板綍鏃ュ織")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/userAction")
+public class UserActionCloudController extends BaseController {
+
+    @Autowired
+    private UserActionService userActionService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:useraction:create")
+    public ApiResponse create(@RequestBody UserAction userAction) {
+        return ApiResponse.success(userActionService.create(userAction));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:useraction:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        userActionService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:useraction:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        userActionService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:useraction:update")
+    public ApiResponse updateById(@RequestBody UserAction userAction) {
+        userActionService.updateById(userAction);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:useraction:query")
+    public ApiResponse<PageData<UserAction>> findPage (@RequestBody PageWrap<UserAction> pageWrap) {
+        return ApiResponse.success(userActionService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:useraction:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<UserAction> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(UserAction.class).export(userActionService.findPage(pageWrap).getRecords(), "浜哄憳鎿嶄綔璁板綍鏃ュ織", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:useraction:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(userActionService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitEventCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitEventCloudController.java
new file mode 100644
index 0000000..9db5269
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitEventCloudController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.VisitEvent;
+import com.doumee.service.business.VisitEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "璁垮浜嬩欢鎺ㄩ�佽褰曡〃")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/visitEvent")
+public class VisitEventCloudController extends BaseController {
+
+    @Autowired
+    private VisitEventService visitEventService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:visitevent:create")
+    public ApiResponse create(@RequestBody VisitEvent visitEvent) {
+        return ApiResponse.success(visitEventService.create(visitEvent));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:visitevent:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        visitEventService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:visitevent:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        visitEventService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:visitevent:update")
+    public ApiResponse updateById(@RequestBody VisitEvent visitEvent) {
+        visitEventService.updateById(visitEvent);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:visitevent:query")
+    public ApiResponse<PageData<VisitEvent>> findPage (@RequestBody PageWrap<VisitEvent> pageWrap) {
+        return ApiResponse.success(visitEventService.findVisitPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:visitevent:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<VisitEvent> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(VisitEvent.class).export(visitEventService.findPageExcel(pageWrap), "璁垮鍑哄叆浜嬩欢_" + System.currentTimeMillis(), response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:visitevent:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(visitEventService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitParkCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitParkCloudController.java
new file mode 100644
index 0000000..cf6ca73
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitParkCloudController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.VisitPark;
+import com.doumee.service.business.VisitParkService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 15:44
+ */
+@Api(tags = "璁垮鎶ュ鍋滆溅搴撳叧鑱旇〃")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/visitPark")
+public class VisitParkCloudController extends BaseController {
+
+    @Autowired
+    private VisitParkService visitParkService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:visitpark:create")
+    public ApiResponse create(@RequestBody VisitPark visitPark) {
+        return ApiResponse.success(visitParkService.create(visitPark));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:visitpark:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        visitParkService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:visitpark:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        visitParkService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:visitpark:update")
+    public ApiResponse updateById(@RequestBody VisitPark visitPark) {
+        visitParkService.updateById(visitPark);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:visitpark:query")
+    public ApiResponse<PageData<VisitPark>> findPage (@RequestBody PageWrap<VisitPark> pageWrap) {
+        return ApiResponse.success(visitParkService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:visitpark:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<VisitPark> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(VisitPark.class).export(visitParkService.findPage(pageWrap).getRecords(), "璁垮鎶ュ鍋滆溅搴撳叧鑱旇〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:visitpark:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(visitParkService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitProblemLogCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitProblemLogCloudController.java
new file mode 100644
index 0000000..1a9f271
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitProblemLogCloudController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.VisitProblemLog;
+import com.doumee.service.business.VisitProblemLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 15:44
+ */
+@Api(tags = "璁垮绛旈璁板綍琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/visitProblemLog")
+public class VisitProblemLogCloudController extends BaseController {
+
+    @Autowired
+    private VisitProblemLogService visitProblemLogService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:visitproblemlog:create")
+    public ApiResponse create(@RequestBody VisitProblemLog visitProblemLog) {
+        return ApiResponse.success(visitProblemLogService.create(visitProblemLog));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:visitproblemlog:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        visitProblemLogService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:visitproblemlog:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        visitProblemLogService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:visitproblemlog:update")
+    public ApiResponse updateById(@RequestBody VisitProblemLog visitProblemLog) {
+        visitProblemLogService.updateById(visitProblemLog);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:visitproblemlog:query")
+    public ApiResponse<PageData<VisitProblemLog>> findPage (@RequestBody PageWrap<VisitProblemLog> pageWrap) {
+        return ApiResponse.success(visitProblemLogService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:visitproblemlog:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<VisitProblemLog> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(VisitProblemLog.class).export(visitProblemLogService.findPage(pageWrap).getRecords(), "璁垮绛旈璁板綍琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:visitproblemlog:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(visitProblemLogService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitProblemsCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitProblemsCloudController.java
new file mode 100644
index 0000000..364a503
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitProblemsCloudController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.VisitProblems;
+import com.doumee.service.business.VisitProblemsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 15:44
+ */
+@Api(tags = "璇曢淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/visitProblems")
+public class VisitProblemsCloudController extends BaseController {
+
+    @Autowired
+    private VisitProblemsService visitProblemsService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:visitproblems:create")
+    public ApiResponse create(@RequestBody VisitProblems visitProblems) {
+        return ApiResponse.success(visitProblemsService.create(visitProblems));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:visitproblems:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        visitProblemsService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:visitproblems:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        visitProblemsService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:visitproblems:update")
+    public ApiResponse updateById(@RequestBody VisitProblems visitProblems) {
+        visitProblemsService.updateById(visitProblems);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:visitproblems:query")
+    public ApiResponse<PageData<VisitProblems>> findPage (@RequestBody PageWrap<VisitProblems> pageWrap) {
+        return ApiResponse.success(visitProblemsService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:visitproblems:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<VisitProblems> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(VisitProblems.class).export(visitProblemsService.findPage(pageWrap).getRecords(), "璇曢淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:visitproblems:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(visitProblemsService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitReasonCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitReasonCloudController.java
new file mode 100644
index 0000000..0a17a48
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitReasonCloudController.java
@@ -0,0 +1,91 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.VisitReason;
+import com.doumee.service.business.VisitReasonService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 15:44
+ */
+@Api(tags = "璁垮浜嬬敱淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/visitReason")
+public class VisitReasonCloudController extends BaseController {
+
+    @Autowired
+    private VisitReasonService visitReasonService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:visitreason:create")
+    public ApiResponse create(@RequestBody VisitReason visitReason) {
+        return ApiResponse.success(visitReasonService.create(visitReason));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:visitreason:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        visitReasonService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:visitreason:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        visitReasonService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:visitreason:update")
+    public ApiResponse updateById(@RequestBody VisitReason visitReason) {
+        visitReasonService.updateById(visitReason);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:visitreason:query")
+    public ApiResponse<PageData<VisitReason>> findPage (@RequestBody PageWrap<VisitReason> pageWrap) {
+        return ApiResponse.success(visitReasonService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:visitreason:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<VisitReason> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(VisitReason.class).export(visitReasonService.findPage(pageWrap).getRecords(), "璁垮浜嬬敱淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:visitreason:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(visitReasonService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitorCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitorCloudController.java
new file mode 100644
index 0000000..ae43c57
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitorCloudController.java
@@ -0,0 +1,91 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Visitor;
+import com.doumee.service.business.VisitorService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 15:44
+ */
+@Api(tags = "璁垮淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/visitor")
+public class VisitorCloudController extends BaseController {
+
+    @Autowired
+    private VisitorService visitorService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:visitor:create")
+    public ApiResponse create(@RequestBody Visitor visitor) {
+        return ApiResponse.success(visitorService.create(visitor));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:visitor:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        visitorService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:visitor:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        visitorService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:visitor:update")
+    public ApiResponse updateById(@RequestBody Visitor visitor) {
+        visitorService.updateById(visitor);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:visitor:query")
+    public ApiResponse<PageData<Visitor>> findPage (@RequestBody PageWrap<Visitor> pageWrap) {
+        return ApiResponse.success(visitorService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:visitor:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Visitor> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Visitor.class).export(visitorService.findPage(pageWrap).getRecords(), "璁垮淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:visitor:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(visitorService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitsCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitsCloudController.java
new file mode 100644
index 0000000..414be68
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/cloud/VisitsCloudController.java
@@ -0,0 +1,116 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Visits;
+import com.doumee.service.business.VisitsService;
+import com.doumee.service.business.impl.hksync.fhk.HkSyncVisitFromHKServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "璁垮鐢宠淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/visits")
+public class VisitsCloudController extends BaseController {
+
+    @Autowired
+    private VisitsService visitsService;
+    @Autowired
+    private HkSyncVisitFromHKServiceImpl hkSyncVisitFromHKService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/create")
+    @CloudRequiredPermission("business:visits:create")
+    public ApiResponse create(@RequestBody Visits visits) {
+        return ApiResponse.success(visitsService.create(visits));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:visits:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        visitsService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:visits:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        visitsService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:visits:update")
+    public ApiResponse updateById(@RequestBody Visits visits) {
+        visitsService.updateById(visits);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("鍙栨秷棰勭害")
+    @GetMapping("/visitCancel")
+    @CloudRequiredPermission("business:visits:cancel")
+    public ApiResponse visitCancel(@RequestParam Integer visitId) {
+        visitsService.visitCancel(visitId);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁鏃ユ湡(starttime)鍚屾璁垮鏁版嵁")
+    @PostMapping("/syncByDate")
+    @CloudRequiredPermission("business:visits:sync")
+    public ApiResponse syncByDate(@RequestBody Visits visits) {
+        hkSyncVisitFromHKService.syncVistAppointData(visits.getStarttime());
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:visits:query")
+    public ApiResponse<PageData<Visits>> findPage (@RequestBody PageWrap<Visits> pageWrap) {
+        return ApiResponse.success(visitsService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:visits:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Visits> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Visits.class).export(visitsService.findPage(pageWrap).getRecords(), "璁垮鐢宠淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:visits:query")
+    public ApiResponse<Visits> findById(@PathVariable Integer id) {
+        return ApiResponse.success(visitsService.findById(id));
+    }
+
+    @ApiOperation("婊炵暀浜哄憳")
+    @PostMapping("/retentionPage")
+    @CloudRequiredPermission("business:visits:query")
+    public ApiResponse<PageData<Visits>> retentionPage (@RequestBody PageWrap<Visits> pageWrap) {
+        pageWrap.getModel().setLevelStatus(Constants.ZERO);
+        return ApiResponse.success(visitsService.retentionPage(pageWrap));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java
index 80d8074..7b49e8d 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java
@@ -1,5 +1,6 @@
 package com.doumee.config.shiro;
 
+import com.doumee.core.utils.Constants;
 import org.apache.shiro.mgt.SecurityManager;
 import org.apache.shiro.session.mgt.SessionManager;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
@@ -99,7 +100,7 @@
         map.put("/system/initCompany", "anon");
         map.put("/system/logout", "anon");
         map.put("/common/captcha", "anon");
-        map.put("/cloudService/**", "anon");
+        map.put(Constants.CLOUD_SERVICE_URL_INDEX+"/**", "anon");
         map.put("/statistics/**", "anon");
         map.put("/business/hksync/push/**", "anon");
         map.put("/business/member/empowerByList", "anon");
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
index 439defd..0111d86 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -46,42 +46,18 @@
                 .version(version)
                 .build();
     }
- /*   @Bean
-    public Docket getDocket() {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(this.getApiInfo()).groupName("銆愮郴缁熺鐞嗘帴鍙PI銆�")
-                .host(host)
-                .select()
-                .apis( basePackage("com.doumee.api.system;"))
-                // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
-//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
-                .paths(PathSelectors.any())
-                .build();
-    }*/
     @Bean
-    public Docket getDocket2() {
+    public Docket getDocket() {
         return new Docket(DocumentationType.SWAGGER_2)
                 .apiInfo(this.getApiInfo()).groupName("default")
                 .host(host)
                 .select()
-                .apis( basePackage("com.doumee.api.cloud;com.doumee.api.business;com.doumee.api.common"))
+                .apis( basePackage("com.doumee.api.cloud,com.doumee.api.common"))
                 // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
 //                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                 .paths(PathSelectors.any())
                 .build();
     }
-   /* @Bean
-    public Docket getDocket1() {
-        return new Docket(DocumentationType.SWAGGER_2)
-            .apiInfo(this.getApiInfo()).groupName("銆愬叕鍏辨帴鍙PI銆�")
-            .host(host)
-            .select()
-            .apis( basePackage("com.doumee.api.common"))
-            // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
-//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
-            .paths(PathSelectors.any())
-            .build();
-    }*/
     /**
      * 閲嶅啓basePackage鏂规硶锛屼娇鑳藉瀹炵幇澶氬寘璁块棶锛屽鍒惰创涓婂幓
      * @author  teavamc

--
Gitblit v1.9.3