From 5df732ffe16b3f162422c2db61a78458e28c7f8d Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 10 十月 2025 14:45:29 +0800
Subject: [PATCH] 钥匙柜开发 天气预警通知

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                   |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java                   |   23 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetLogCloudController.java          |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java                      |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkVersionMapper.java                   |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java  |   89 +---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java        |    2 
 server/system_service/src/main/java/com/doumee/dao/business/model/Member.java                              |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkIccardMapper.java                    |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WarningService.java                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java |   74 ++-
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java                    |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java               |   11 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkIccardService.java               |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WarningServiceImpl.java       |  146 ++++++++
 server/visits/admin_timer/src/main/java/com/doumee/api/WeatherTimerController.java                         |   42 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java        |   18 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetGridService.java          |    6 
 server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java                             |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java                |   52 ++-
 server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java                   |   56 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkIccardServiceImpl.java      |  132 +++++---
 server/system_service/src/main/java/com/doumee/core/utils/WeatherUtil.java                                 |   29 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetGridCloudController.java         |   25 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkVersionServiceImpl.java     |  138 +++++---
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkIccardCloudController.java              |   27 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkVersionCloudController.java             |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java                         |    5 
 28 files changed, 691 insertions(+), 238 deletions(-)

diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index e83550f..6635af7 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -55,6 +55,10 @@
     public static final String SIGN_IN_QRCODE_PREFIX ="SIGN_IN_QRCODE_PREFIX" ;
 
 
+    public static final String WEATHER_CONFIG ="WEATHER_CONFIG" ;
+    public static final String REQUEST_URL ="REQUEST_URL" ;
+    public static final String LOCATION ="LOCATION" ;
+    public static final String API_KEY ="API_KEY" ;
     //琚嫓璁夸汉淇℃伅鏍¢獙鏂瑰紡锛�0鎵嬫満鍙峰崟鐙牎楠� 1鎵嬫満鍙峰拰濮撳悕缁勫悎鏍¢獙锛�
     public static final String BEVISITED_USER_VALID = "BEVISITED_USER_VALID";
     public static final String LW_BEVISITED_USER_VALID = "LW_BEVISITED_USER_VALID";
@@ -108,6 +112,7 @@
     public static final String FTP_USERNAME ="FTP_USERNAME" ;
     public static final String FTP_PWD ="FTP_PWD" ;
     public static final String COMPANY_DOCUMENTS ="COMPANY_DOCUMENTS" ;
+    public static final String APP_FILE ="APP_FILE" ;
 
     public static final String FTP_RESOURCE_PATH ="FTP_RESOURCE_PATH" ;
     public static final String FTP_LOCAL_RESOURCE_PATH ="FTP_LOCAL_RESOURCE_PATH" ;
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/WeatherUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/WeatherUtil.java
new file mode 100644
index 0000000..9322a46
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/utils/WeatherUtil.java
@@ -0,0 +1,29 @@
+package com.doumee.core.utils;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/10/10 11:31
+ */
+@Slf4j
+public class WeatherUtil {
+
+    //API鍦板潃锛� https://dev.qweather.com/docs/api/warning/weather-warning/
+    private static final String apiPath = "/v7/warning/now";
+
+    public  static  String getWeatherWarningInfo(String apiUrl,String apiKey,String location){
+        String url = apiUrl + apiPath + "?key=" + apiKey + "&location=" + location;
+        log.error(DateUtil.getCurrDateTime() + "澶╂皵璇锋眰鍦板潃锛�"+url);
+        String response = HttpsUtil.get(url,false);
+        log.error(DateUtil.getCurrDateTime() + "澶╂皵璇锋眰杩斿洖锛�"+response);
+        return response;
+    }
+
+
+
+
+
+}
diff --git a/server/system_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/system_service/src/main/java/com/doumee/dao/business/model/Member.java
index 50a0bb2..4ea043a 100644
--- a/server/system_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/system_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -300,4 +300,9 @@
     @ApiModelProperty(value = "鏄惁鏌ヨ鍥哄畾浜哄憳锛�0=鍚︼紱1=鏄�" )
     @TableField(exist = false)
     private Integer querySpecial;
+
+    @ApiModelProperty(value = "鏄惁鏌ヨ閽ュ寵鏌滄牎楠屼汉鍛橈細0=鍚︼紱1=鏄�" )
+    @TableField(exist = false)
+    private Integer queryAuth;
+
 }
diff --git a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
index 6835b17..9ca13c0 100644
--- a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
+++ b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -103,5 +103,11 @@
     @PostMapping("/timer/platformJob/sendUnFinishNotice")
     ApiResponse sendUnFinishNotice();
 
+    @ApiOperation("銆愰拤閽夋暟鎹�戦拤閽塼oken瀹氭椂鍣ㄦ帴鍙�")
+    @PostMapping("/timer/dingTalkToken/updateDingTalkTokenOrigin")
+    ApiResponse updateDingTalkTokenOrigin() throws Exception;
 
+    @ApiOperation("銆愬ぉ姘斾俊鎭�戝畾鏃跺悓姝ュぉ姘旈璀�")
+    @PostMapping("/timer/weather/syncWeatherInfo")
+    ApiResponse syncWeatherInfo();
 }
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java
new file mode 100644
index 0000000..6c3d90c
--- /dev/null
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java
@@ -0,0 +1,56 @@
+package com.doumee.api;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.dingTalk.DingTalk;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.core.wx.WXConstant;
+import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.service.business.third.model.ApiResponse;
+import com.doumee.service.system.SystemDictDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.DefaultSecurityManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "閽夐拤token瀹氭椂鍣ㄦ帴鍙�")
+@RestController
+@RequestMapping("/timer/dingTalkToken")
+public class DingTalkTokenTimerController extends BaseController {
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private SystemDictDataService systemDictDataService;
+
+    @Autowired
+    private DingTalk dingTalk;
+    /**
+     * 鏄惁寮�鍙戣��
+     */
+    @Value("${debug_model}")
+    private Boolean timing;
+
+    @ApiOperation("寮�鍚畾鏃舵洿鏂伴拤閽変笟鍔oken")
+    @PostMapping("/updateDingTalkTokenOrigin")
+    public ApiResponse updateDingTalkTokenOrigin() throws Exception {
+        dingTalk.updTokenInfo();
+        return ApiResponse.success("寮�鍚畾鏃舵洿鏂板井淇″叕浼楀彿accesstoken鎴愬姛");
+    }
+
+
+
+}
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/WeatherTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/WeatherTimerController.java
new file mode 100644
index 0000000..0b1a90b
--- /dev/null
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/WeatherTimerController.java
@@ -0,0 +1,42 @@
+package com.doumee.api;
+
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.dingTalk.DingTalk;
+import com.doumee.service.business.WarningService;
+import com.doumee.service.business.third.model.ApiResponse;
+import com.doumee.service.system.SystemDictDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "澶╂皵棰勮鍚屾")
+@RestController
+@RequestMapping("/timer/weather")
+public class WeatherTimerController extends BaseController {
+    @Autowired
+    private WarningService warningService;
+
+    /**
+     * 鏄惁寮�鍙戣��
+     */
+    @Value("${debug_model}")
+    private Boolean timing;
+
+    @ApiOperation("瀹氭椂鍚屾澶╂皵棰勮淇℃伅")
+    @PostMapping("/syncWeatherInfo")
+    public ApiResponse syncWeatherInfo(){
+        warningService.getWeatherInfo();
+        return ApiResponse.success("瀹氭椂鍚屾澶╂皵棰勮淇℃伅");
+    }
+
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetGridCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetGridCloudController.java
index 14dcffe..2bbca3c 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetGridCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetGridCloudController.java
@@ -6,6 +6,7 @@
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.JkCabinetGrid;
+import com.doumee.dao.business.model.JkIccard;
 import com.doumee.service.business.JkCabinetGridService;
 import com.doumee.service.business.third.model.ApiResponse;
 import com.doumee.service.business.third.model.PageData;
@@ -64,7 +65,27 @@
     @PostMapping("/updateById")
     @CloudRequiredPermission("business:jkcabinetgrid:update")
     public ApiResponse updateById(@RequestBody JkCabinetGrid jkCabinetGrid,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        jkCabinetGrid.setLoginUserInfo(getLoginUser(token));
         jkCabinetGridService.updateById(jkCabinetGrid);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("鏍规嵁ID淇敼鐘舵��")
+    @PostMapping("/updateStatusById")
+    @CloudRequiredPermission("business:jkcabinetgrid:update")
+    public ApiResponse updateStatusById(@RequestBody JkCabinetGrid jkCabinetGrid, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        jkCabinetGrid.setLoginUserInfo(this.getLoginUser(token));
+        jkCabinetGridService.updateStatusById(jkCabinetGrid);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("瑙g粦閽ュ寵")
+    @PostMapping("/unBindKeys")
+    @CloudRequiredPermission("business:jkcabinetgrid:update")
+    public ApiResponse unBindKeys(@RequestBody List<Integer> idList, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        jkCabinetGridService.unBindKeys(idList);
         return ApiResponse.success(null);
     }
 
@@ -88,4 +109,8 @@
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(jkCabinetGridService.findById(id));
     }
+
+
+
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetLogCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetLogCloudController.java
index b04f026..b0dbcb2 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetLogCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCabinetLogCloudController.java
@@ -79,7 +79,7 @@
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:jkcabinetlog:exportExcel")
     public void exportExcel (@RequestBody PageWrap<JkCabinetLog> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        ExcelExporter.build(JkCabinetLog.class).export(jkCabinetLogService.findPage(pageWrap).getRecords(), "閽ュ寵鏌滃紑鍏抽棬璁板綍", response);
+        ExcelExporter.build(JkCabinetLog.class).export(jkCabinetLogService.findPage(pageWrap).getRecords(), "閽ュ寵鏌滃紑鍏抽棬璁板綍_"+System.currentTimeMillis(), response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkIccardCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkIccardCloudController.java
index c8657a1..0639ce6 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkIccardCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkIccardCloudController.java
@@ -5,6 +5,7 @@
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.JkCabinet;
 import com.doumee.dao.business.model.JkIccard;
 import com.doumee.service.business.JkIccardService;
 import com.doumee.service.business.third.model.ApiResponse;
@@ -35,14 +36,15 @@
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
     @CloudRequiredPermission("business:jkiccard:create")
-    public ApiResponse create(@RequestBody JkIccard jkIccard) {
+    public ApiResponse create(@RequestBody JkIccard jkIccard,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        jkIccard.setLoginUserInfo(getLoginUser(token));
         return ApiResponse.success(jkIccardService.create(jkIccard));
     }
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
     @CloudRequiredPermission("business:jkiccard:delete")
-    public ApiResponse deleteById(@PathVariable Integer id) {
+    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         jkIccardService.deleteById(id);
         return ApiResponse.success(null);
     }
@@ -50,7 +52,7 @@
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
     @CloudRequiredPermission("business:jkiccard:delete")
-    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         String [] idArray = ids.split(",");
         List<Integer> idList = new ArrayList<>();
         for (String id : idArray) {
@@ -63,29 +65,40 @@
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
     @CloudRequiredPermission("business:jkiccard:update")
-    public ApiResponse updateById(@RequestBody JkIccard jkIccard) {
+    public ApiResponse updateById(@RequestBody JkIccard jkIccard,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        jkIccard.setLoginUserInfo(getLoginUser(token));
         jkIccardService.updateById(jkIccard);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("鏍规嵁ID淇敼鐘舵��")
+    @PostMapping("/updateStatusById")
+    @CloudRequiredPermission("business:jkiccard:update")
+    public ApiResponse updateStatusById(@RequestBody JkIccard jkIccard, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        jkIccard.setLoginUserInfo(this.getLoginUser(token));
+        jkIccardService.updateStatusById(jkIccard);
         return ApiResponse.success(null);
     }
 
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @CloudRequiredPermission("business:jkiccard:query")
-    public ApiResponse<PageData<JkIccard>> findPage (@RequestBody PageWrap<JkIccard> pageWrap) {
+    public ApiResponse<PageData<JkIccard>> findPage (@RequestBody PageWrap<JkIccard> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(jkIccardService.findPage(pageWrap));
     }
 
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:jkiccard:exportExcel")
-    public void exportExcel (@RequestBody PageWrap<JkIccard> pageWrap, HttpServletResponse response) {
+    public void exportExcel (@RequestBody PageWrap<JkIccard> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         ExcelExporter.build(JkIccard.class).export(jkIccardService.findPage(pageWrap).getRecords(), "閽ュ寵鏌淚C鍗′俊鎭〃", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:jkiccard:query")
-    public ApiResponse findById(@PathVariable Integer id) {
+    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(jkIccardService.findById(id));
     }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkVersionCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkVersionCloudController.java
index ef9edbc..c099b4a 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkVersionCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkVersionCloudController.java
@@ -35,14 +35,15 @@
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
     @CloudRequiredPermission("business:jkversion:create")
-    public ApiResponse create(@RequestBody JkVersion jkVersion) {
+    public ApiResponse create(@RequestBody JkVersion jkVersion,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        jkVersion.setLoginUserInfo(this.getLoginUser(token));
         return ApiResponse.success(jkVersionService.create(jkVersion));
     }
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
     @CloudRequiredPermission("business:jkversion:delete")
-    public ApiResponse deleteById(@PathVariable Integer id) {
+    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         jkVersionService.deleteById(id);
         return ApiResponse.success(null);
     }
@@ -50,7 +51,7 @@
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
     @CloudRequiredPermission("business:jkversion:delete")
-    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         String [] idArray = ids.split(",");
         List<Integer> idList = new ArrayList<>();
         for (String id : idArray) {
@@ -63,7 +64,8 @@
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
     @CloudRequiredPermission("business:jkversion:update")
-    public ApiResponse updateById(@RequestBody JkVersion jkVersion) {
+    public ApiResponse updateById(@RequestBody JkVersion jkVersion,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        jkVersion.setLoginUserInfo(this.getLoginUser(token));
         jkVersionService.updateById(jkVersion);
         return ApiResponse.success(null);
     }
@@ -71,21 +73,21 @@
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @CloudRequiredPermission("business:jkversion:query")
-    public ApiResponse<PageData<JkVersion>> findPage (@RequestBody PageWrap<JkVersion> pageWrap) {
+    public ApiResponse<PageData<JkVersion>> findPage (@RequestBody PageWrap<JkVersion> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(jkVersionService.findPage(pageWrap));
     }
 
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:jkversion:exportExcel")
-    public void exportExcel (@RequestBody PageWrap<JkVersion> pageWrap, HttpServletResponse response) {
+    public void exportExcel (@RequestBody PageWrap<JkVersion> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         ExcelExporter.build(JkVersion.class).export(jkVersionService.findPage(pageWrap).getRecords(), "浜ゆ帶-閽ュ寵鏌滅粓绔増鏈俊鎭〃", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:jkversion:query")
-    public ApiResponse findById(@PathVariable Integer id) {
+    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(jkVersionService.findById(id));
     }
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
index 2291752..84273d6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
@@ -373,7 +373,7 @@
      * api 鍦板潃 https://open.dingtalk.com/document/orgapp/asynchronous-sending-of-enterprise-session-messages
      * @throws ApiException
      */
-    public void workInfoOANotice(Long agentId,String userIds,OapiMessageCorpconversationAsyncsendV2Request.Msg msg){
+    public Boolean workInfoOANotice(Long agentId,String userIds,OapiMessageCorpconversationAsyncsendV2Request.Msg msg){
         try{
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
             OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
@@ -384,13 +384,14 @@
             request.setMsg(msg);
             OapiMessageCorpconversationAsyncsendV2Response rsp = client.execute(request, "60c2df248ca93d4eafb4a04a2330d3d3");//getToken());
             if(rsp.getErrcode().equals(Constants.DD_ERR_CODE)){
-
+                return true;
             }else{
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),rsp.getMessage());
             }
         }catch (ApiException apiException){
 
         }
+        return false;
 
     }
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkIccardMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkIccardMapper.java
index 571c5e3..32b5378 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkIccardMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkIccardMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.JkIccard;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2025/09/28 09:01
  */
-public interface JkIccardMapper extends BaseMapper<JkIccard> {
+public interface JkIccardMapper extends MPJJoinMapper<JkIccard> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkVersionMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkVersionMapper.java
index 0e6ef61..b1d0375 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkVersionMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkVersionMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.JkVersion;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2025/09/28 09:01
  */
-public interface JkVersionMapper extends BaseMapper<JkVersion> {
+public interface JkVersionMapper extends MPJJoinMapper<JkVersion> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java
index 8e30971..b4d4302 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java
@@ -77,6 +77,17 @@
     @ExcelColumn(name="杩愯鐘舵��")
     private Integer workingStatus;
 
+    @ApiModelProperty(value = "鏉垮彿")
+    @ExcelColumn(name="鏉垮彿")
+    private String boardCode;
+
+    @ApiModelProperty(value = "閫氶亾鍙�")
+    @ExcelColumn(name="閫氶亾鍙�")
+    private String channelCode;
+
+
+
+
     @ApiModelProperty(value = "缁戝畾鐘舵�� 0鏈粦瀹氾紱1宸茬粦瀹�", example = "1")
     @TableField(exist = false)
     private Integer bindStatus;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
index 63bd3e6..81db5e1 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.service.business.third.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -22,70 +23,87 @@
 public class JkCabinetLog  extends LoginUserModel {
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
     @TableId(type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelColumn(name="寮�闂ㄦ椂闂�",index = 0,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 16)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
     private String info;
 
     @ApiModelProperty(value = "閽ュ寵鏌滅紪鐮侊紙鍏宠仈jk_cabinet)", example = "1")
-    @ExcelColumn(name="閽ュ寵鏌滅紪鐮侊紙鍏宠仈jk_cabinet)")
     private Integer cabinetId;
 
     @ApiModelProperty(value = "閽ュ寵鏌滄牸缂栫爜(鍏宠仈jk_cabinet_grid)", example = "1")
-    @ExcelColumn(name="閽ュ寵鏌滄牸缂栫爜(鍏宠仈jk_cabinet_grid)")
     private Integer gridId;
 
     @ApiModelProperty(value = "楠岃瘉鏂瑰紡 0鍒疯劯 1鍒峰崱", example = "1")
-    @ExcelColumn(name="楠岃瘉鏂瑰紡 0鍒疯劯 1鍒峰崱")
+    @ExcelColumn(name="鏍¢獙鏂瑰紡",index = 2,width = 10,valueMapping = "0=浜鸿劯;1=鍒峰崱;2=绠$悊鎺堟潈;")
     private Integer authType;
 
     @ApiModelProperty(value = "杞﹁締缂栫爜锛堝叧鑱攃ars)", example = "1")
-    @ExcelColumn(name="杞﹁締缂栫爜锛堝叧鑱攃ars)")
     private Integer carId;
 
     @ApiModelProperty(value = "閽ュ寵缂栫爜(鍏宠仈jk_keys)", example = "1")
-    @ExcelColumn(name="閽ュ寵缂栫爜(鍏宠仈jk_keys)")
     private Integer keyId;
 
     @ApiModelProperty(value = "浜哄憳缂栫爜锛堝叧鑱攎ember)", example = "1")
-    @ExcelColumn(name="浜哄憳缂栫爜锛堝叧鑱攎ember)")
     private Integer memberId;
 
     @ApiModelProperty(value = "閽ュ寵淇℃伅锛堣溅鐗屽彿-閽ュ寵缂栫爜锛�")
-    @ExcelColumn(name="閽ュ寵淇℃伅锛堣溅鐗屽彿-閽ュ寵缂栫爜锛�")
+    @ExcelColumn(name="閽ュ寵",index = 5,width = 16)
     private String keyInfo;
 
     @ApiModelProperty(value = "棰嗗彇瑙勫垯 0闅忚溅 1闅忔淳杞﹀崟", example = "1")
-    @ExcelColumn(name="棰嗗彇瑙勫垯 0闅忚溅 1闅忔淳杞﹀崟")
     private Integer roleType;
 
     @ApiModelProperty(value = "鐘舵�� 0鎴愬姛 1澶辫触", example = "1")
-    @ExcelColumn(name="鐘舵�� 0鎴愬姛 1澶辫触")
+    @ExcelColumn(name="鐘舵��",index = 6,width = 10,valueMapping = "0=鎴愬姛;1=澶辫触;")
     private Integer status;
 
+    @ApiModelProperty(value = "鎿嶄綔浜洪儴闂�", example = "1",hidden = true)
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
+    @ExcelColumn(name="鎿嶄綔浜�",index = 1,width = 2)
+    @TableField(exist = false)
+    private String memberName;
+
+    @ApiModelProperty(value = "閽ュ寵鏌滃悕绉�", example = "1")
+    @ExcelColumn(name="鎵�灞為挜鍖欐煖",index = 3,width = 12)
+    @TableField(exist = false)
+    private String cabinetName;
+
+    @ApiModelProperty(value = "鏌滄牸缂栧彿", example = "1")
+    @ExcelColumn(name="鏌滄牸缂栧彿",index = 4,width = 12)
+    @TableField(exist = false)
+    private String gridCode;
+
+    @ApiModelProperty(value = "鏌ヨ寮�濮嬫椂闂� yyyy-MM-dd ")
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startDate;
+
+    @ApiModelProperty(value = "鏌ヨ缁撴潫鏃堕棿 yyyy-MM-dd ")
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endDate;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java
index 9bc6a43..c4f781e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkIccard.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.service.business.third.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -72,4 +73,12 @@
     @ExcelColumn(name="閽ュ寵鏌滅紪鐮侊紙鍏宠仈jk_cabinet)")
     private Integer cabinetId;
 
+    @ApiModelProperty(value = "鍏宠仈浜哄憳绫诲瀷锛�0=鍙告満锛�1=鏍¢獙浜哄憳", example = "1")
+    @ExcelColumn(name="鍏宠仈浜哄憳绫诲瀷锛�0=鍙告満锛�1=鏍¢獙浜哄憳")
+    private Integer userType;
+
+    @ApiModelProperty(value = "浜哄憳鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String memberName;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java
index 198fb8c..edf02f8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java
@@ -77,6 +77,7 @@
     @ExcelColumn(name=" 鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭 3缁翠慨淇濆吇")
     private Integer status;
 
+
     @ApiModelProperty(value = "瀛樻斁浣嶇疆", example = "1")
     @TableField(exist = false)
     private String gridCode;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java
index bf6fc75..a8db838 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.service.business.third.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -9,6 +10,8 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -84,4 +87,24 @@
     @ExcelColumn(name="骞冲彴绫诲瀷 0Android 1IOS")
     private Integer type;
 
+    @ApiModelProperty(value = "鏂囦欢澶у皬 鍗曚綅锛圞B锛�", example = "1")
+    @ExcelColumn(name="鏂囦欢澶у皬 鍗曚綅锛圞B锛�")
+    private Integer fileSize;
+
+    @ApiModelProperty(value = "鏂囦欢澶у皬 鍗曚綅锛圡B锛�", example = "1")
+    @TableField(exist = false)
+    private double fileSizeMb;
+
+
+    @ApiModelProperty(value = "鍒涘缓浜哄悕绉�", example = "1")
+    @TableField(exist = false)
+    private String createUserName;
+
+    @ApiModelProperty(value = "apk鍏ㄨ矾寰�", example = "1")
+    @TableField(exist = false)
+    private String fullFileUrl;
+
+
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetGridService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetGridService.java
index f3080cd..f08d092 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetGridService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetGridService.java
@@ -96,11 +96,7 @@
      */
     long count(JkCabinetGrid jkCabinetGrid);
 
-    /**
-     * 缁戝畾閽ュ寵
-     * @param jkCabinetGrid
-     */
-    void bindingKeys(JkCabinetGrid jkCabinetGrid);
+    void updateStatusById(JkCabinetGrid jkCabinetGrid);
 
     void unBindKeys(List<Integer> idList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkIccardService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkIccardService.java
index b209b97..b9f531a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkIccardService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkIccardService.java
@@ -94,4 +94,6 @@
      * @return long
      */
     long count(JkIccard jkIccard);
+
+    void updateStatusById(JkIccard jkIccard);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WarningService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WarningService.java
index db51aba..c06822a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WarningService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WarningService.java
@@ -97,4 +97,6 @@
     long count(Warning warning);
 
     void updateStatus(Warning param);
+
+    void getWeatherInfo();
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
index 0cdc384..4cc4c61 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
@@ -9,6 +9,7 @@
 import com.doumee.dao.business.model.Cars;
 import com.doumee.dao.business.model.JkCabinet;
 import com.doumee.dao.business.model.JkKeys;
+import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.JkCabinetGridMapper;
@@ -72,7 +73,47 @@
 
     @Override
     public void updateById(JkCabinetGrid jkCabinetGrid) {
-        jkCabinetGridMapper.updateById(jkCabinetGrid);
+        if(Objects.isNull(jkCabinetGrid)
+                || Objects.isNull(jkCabinetGrid.getId())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = jkCabinetGrid.getLoginUserInfo();
+        JkCabinetGrid model = jkCabinetGridMapper.selectById(jkCabinetGrid.getId());
+        if(Objects.isNull(model)|| Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(Objects.nonNull(jkCabinetGrid.getKeyId())){
+            if(Objects.nonNull(model.getKeyId())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸茬粦瀹氾紝璇峰嬁閲嶅缁戝畾");
+            }
+            JkKeys keysModel = jkKeysMapper.selectById(jkCabinetGrid.getKeyId());
+            if(Objects.isNull(keysModel)|| Constants.equalsInteger(keysModel.getIsdeleted(),Constants.ONE)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY);
+            }
+            if(!Constants.equalsInteger(keysModel.getStatus(), (Constants.ZERO))){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閽ュ寵宸茶缁戝畾锛岃閫夋嫨鍏朵粬閽ュ寵缁戝畾");
+            }
+            //鏇存柊閽ュ寵鏌滀俊鎭�
+            jkCabinetGridMapper.update(new UpdateWrapper<JkCabinetGrid>().lambda()
+                    .set(JkCabinetGrid::getKeyId,jkCabinetGrid.getKeyId())
+                    .set(JkCabinetGrid::getEditor,loginUserInfo.getId())
+                    .set(JkCabinetGrid::getEditDate,DateUtil.getCurrDateTime())
+                    .set(JkCabinetGrid::getEditDate, DateUtil.getCurrDateTime())
+                    .eq(JkCabinetGrid::getId,jkCabinetGrid.getId()));
+            //鏍囪閽ュ寵淇℃伅
+            jkKeysMapper.update(new UpdateWrapper<JkKeys>().lambda()
+                    .set(JkKeys::getStatus,Constants.ONE)
+                    .eq(JkKeys::getId,jkCabinetGrid.getKeyId())
+            );
+            return;
+        }else if(Objects.nonNull(jkCabinetGrid.getChannelCode())||Objects.nonNull(jkCabinetGrid.getBoardCode())){
+            jkCabinetGridMapper.update(new UpdateWrapper<JkCabinetGrid>().lambda()
+                    .set(Objects.nonNull(jkCabinetGrid.getChannelCode()),JkCabinetGrid::getChannelCode,jkCabinetGrid.getChannelCode())
+                    .set(Objects.nonNull(jkCabinetGrid.getBoardCode()),JkCabinetGrid::getBoardCode,jkCabinetGrid.getBoardCode())
+                    .set(JkCabinetGrid::getEditDate, DateUtil.getCurrDateTime())
+                    .eq(JkCabinetGrid::getId,jkCabinetGrid.getId()));
+        }
     }
 
     @Override
@@ -133,38 +174,17 @@
     }
 
     @Override
-    public void bindingKeys(JkCabinetGrid jkCabinetGrid){
+    public void updateStatusById(JkCabinetGrid jkCabinetGrid) {
         if(Objects.isNull(jkCabinetGrid)
-        || Objects.isNull(jkCabinetGrid.getId())
-        || Objects.isNull(jkCabinetGrid.getKeyId())){
+                || Objects.isNull(jkCabinetGrid.getId())
+                || Objects.isNull(jkCabinetGrid.getStatus())){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-        JkCabinetGrid model = jkCabinetGridMapper.selectById(jkCabinetGrid.getId());
-        if(Objects.isNull(model)|| Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY);
-        }
-        if(Objects.nonNull(model.getKeyId())){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸茬粦瀹氾紝璇峰嬁閲嶅缁戝畾");
-        }
-        JkKeys keysModel = jkKeysMapper.selectById(jkCabinetGrid.getKeyId());
-        if(Objects.isNull(keysModel)|| Constants.equalsInteger(keysModel.getIsdeleted(),Constants.ONE)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY);
-        }
-        if(!Constants.equalsInteger(keysModel.getStatus(), (Constants.ZERO))){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閽ュ寵宸茶缁戝畾锛岃閫夋嫨鍏朵粬閽ュ寵缁戝畾");
-        }
-        //鏇存柊閽ュ寵鏌滀俊鎭�
-        jkCabinetGridMapper.update(new UpdateWrapper<JkCabinetGrid>().lambda()
-                .set(JkCabinetGrid::getKeyId,jkCabinetGrid.getKeyId())
+        jkCabinetGridMapper.update(null,new UpdateWrapper<JkCabinetGrid>()
+                .lambda().set(JkCabinetGrid::getStatus,jkCabinetGrid.getStatus())
                 .set(JkCabinetGrid::getEditDate, DateUtil.getCurrDateTime())
                 .eq(JkCabinetGrid::getId,jkCabinetGrid.getId()));
-        //鏍囪閽ュ寵淇℃伅
-        jkKeysMapper.update(new UpdateWrapper<JkKeys>().lambda()
-                .set(JkKeys::getStatus,Constants.ONE)
-                .eq(JkKeys::getId,jkCabinetGrid.getKeyId())
-        );
     }
-
 
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java
index 4b57d27..7e36a98 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java
@@ -1,20 +1,24 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.JkCabinetLogMapper;
-import com.doumee.dao.business.model.JkCabinetLog;
 import com.doumee.service.business.JkCabinetLogService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 閽ュ寵鏌滃紑鍏抽棬璁板綍Service瀹炵幇
@@ -87,69 +91,34 @@
     @Override
     public PageData<JkCabinetLog> findPage(PageWrap<JkCabinetLog> pageWrap) {
         IPage<JkCabinetLog> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<JkCabinetLog> queryWrapper = new QueryWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
         JkCabinetLog model = pageWrap.getModel();
-
-
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(JkCabinetLog::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(JkCabinetLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(JkCabinetLog::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(JkCabinetLog::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getInfo() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getInfo, pageWrap.getModel().getInfo());
-        }
-        if (pageWrap.getModel().getCabinetId() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getCabinetId, pageWrap.getModel().getCabinetId());
-        }
-        if (pageWrap.getModel().getGridId() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getGridId, pageWrap.getModel().getGridId());
-        }
-        if (pageWrap.getModel().getAuthType() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getAuthType, pageWrap.getModel().getAuthType());
-        }
-        if (pageWrap.getModel().getCarId() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getCarId, pageWrap.getModel().getCarId());
-        }
-        if (pageWrap.getModel().getKeyId() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getKeyId, pageWrap.getModel().getKeyId());
-        }
-        if (pageWrap.getModel().getMemberId() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getMemberId, pageWrap.getModel().getMemberId());
-        }
-        if (pageWrap.getModel().getKeyInfo() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getKeyInfo, pageWrap.getModel().getKeyInfo());
-        }
-        if (pageWrap.getModel().getRoleType() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getRoleType, pageWrap.getModel().getRoleType());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(JkCabinetLog::getStatus, pageWrap.getModel().getStatus());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        MPJLambdaWrapper<JkCabinetLog> wrapper = new MPJLambdaWrapper<JkCabinetLog>()
+                .selectAll(JkCabinetLog.class)
+                .selectAs(Member::getName,JkCabinetLog::getMemberName)
+                .selectAs(Company::getName,JkCabinetLog::getCompanyName)
+                .selectAs(JkCabinet::getName,JkCabinetLog::getCabinetName)
+                .selectAs(JkCabinetGrid::getCode,JkCabinetLog::getGridCode)
+                .leftJoin(JkCabinet.class,JkCabinet::getId,JkCabinetLog::getCabinetId)
+                .leftJoin(JkCabinetGrid.class,JkCabinetGrid::getId,JkCabinetLog::getGridId)
+                .leftJoin(Member.class,Member::getId,JkCabinetLog::getMemberId)
+                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                .ge(Objects.nonNull(model.getStartDate()),JkCabinetLog::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()))
+                .le(Objects.nonNull(model.getEndDate()),JkCabinetLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()))
+                .like(StringUtils.isNotBlank(model.getMemberName()),Member::getName,model.getMemberName())
+                .eq(Objects.nonNull(model.getCabinetId()),JkCabinetLog::getCabinetId,model.getCabinetId())
+                .eq(Objects.nonNull(model.getKeyId()),JkCabinetLog::getKeyId,model.getKeyId())
+                .eq(Objects.nonNull(model.getAuthType()),JkCabinetLog::getAuthType,model.getAuthType())
+                .eq(Objects.nonNull(model.getStatus()),JkCabinetLog::getStatus,model.getStatus())
+                .eq(JkCabinetLog::getIsdeleted, Constants.ZERO)
+                .orderByDesc(JkCabinetLog::getCreateDate);
+        IPage<JkCabinetLog>  iPage = jkCabinetLogMapper.selectJoinPage(page,JkCabinetLog.class,wrapper);
+        for (JkCabinetLog jkCabinetLog:iPage.getRecords()) {
+            if(StringUtils.isNotBlank(jkCabinetLog.getCompanyName())&&StringUtils.isNotBlank(jkCabinetLog.getMemberName())){
+                jkCabinetLog.setMemberName(jkCabinetLog.getMemberName() + " - " + jkCabinetLog.getCompanyName() );
             }
         }
-        return PageData.from(jkCabinetLogMapper.selectPage(page, queryWrapper));
+        return PageData.from(iPage);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkIccardServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkIccardServiceImpl.java
index 0964dc4..fee5ff9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkIccardServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkIccardServiceImpl.java
@@ -1,5 +1,12 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.core.utils.Utils;
@@ -10,11 +17,15 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 閽ュ寵鏌淚C鍗′俊鎭〃Service瀹炵幇
@@ -29,13 +40,38 @@
 
     @Override
     public Integer create(JkIccard jkIccard) {
+        if(Objects.isNull(jkIccard)
+            || StringUtils.isBlank(jkIccard.getCode())
+            || Objects.isNull(jkIccard.getStatus())
+            || Objects.isNull(jkIccard.getMemberId())
+            || Objects.isNull(jkIccard.getUserType())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        LoginUserInfo loginUserInfo = jkIccard.getLoginUserInfo();
+        jkIccard.setCreateDate(new Date());
+        jkIccard.setCreator(loginUserInfo.getId());
+        jkIccard.setEditDate(jkIccard.getCreateDate());
+        jkIccard.setEditor(jkIccard.getCreator());
+        jkIccard.setIsdeleted(Constants.ZERO);
+        //鏌ヨ缂栧彿鏄惁閲嶅
+        if(jkIccardMapper.selectCount(new QueryWrapper<JkIccard>().lambda().eq(JkIccard::getCode,jkIccard.getCode()).eq(JkIccard::getIsdeleted,Constants.ZERO))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"IC鍗″彿宸插瓨鍦紒");
+        }
         jkIccardMapper.insert(jkIccard);
         return jkIccard.getId();
     }
 
     @Override
     public void deleteById(Integer id) {
-        jkIccardMapper.deleteById(id);
+        JkIccard jkIccard = jkIccardMapper.selectById(id);
+        if(Objects.isNull(jkIccard)||Constants.equalsInteger(jkIccard.getIsdeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(Constants.equalsInteger(jkIccard.getStatus(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚敤鏁版嵁鏃犳硶杩涜鍒犻櫎锛�");
+        }
     }
 
     @Override
@@ -54,6 +90,25 @@
 
     @Override
     public void updateById(JkIccard jkIccard) {
+        if(Objects.isNull(jkIccard)
+                || Objects.isNull(jkIccard.getId())
+                || StringUtils.isBlank(jkIccard.getCode())
+                || Objects.isNull(jkIccard.getStatus())
+                || Objects.isNull(jkIccard.getMemberId())
+                || Objects.isNull(jkIccard.getUserType())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo loginUserInfo = jkIccard.getLoginUserInfo();
+        jkIccard.setCreateDate(new Date());
+        jkIccard.setCreator(loginUserInfo.getId());
+        jkIccard.setEditDate(jkIccard.getCreateDate());
+        jkIccard.setEditor(jkIccard.getCreator());
+        jkIccard.setIsdeleted(Constants.ZERO);
+        //鏌ヨ缂栧彿鏄惁閲嶅
+        if(jkIccardMapper.selectCount(new QueryWrapper<JkIccard>().lambda().ne(JkIccard::getId,jkIccard.getId()).eq(JkIccard::getCode,jkIccard.getCode()).eq(JkIccard::getIsdeleted,Constants.ZERO))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"IC鍗″彿宸插瓨鍦紒");
+        }
         jkIccardMapper.updateById(jkIccard);
     }
 
@@ -87,54 +142,20 @@
     @Override
     public PageData<JkIccard> findPage(PageWrap<JkIccard> pageWrap) {
         IPage<JkIccard> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<JkIccard> queryWrapper = new QueryWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(JkIccard::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(JkIccard::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(JkIccard::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(JkIccard::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(JkIccard::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(JkIccard::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(JkIccard::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(JkIccard::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getInfo() != null) {
-            queryWrapper.lambda().eq(JkIccard::getInfo, pageWrap.getModel().getInfo());
-        }
-        if (pageWrap.getModel().getMemberId() != null) {
-            queryWrapper.lambda().eq(JkIccard::getMemberId, pageWrap.getModel().getMemberId());
-        }
-        if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(JkIccard::getCode, pageWrap.getModel().getCode());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(JkIccard::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(JkIccard::getName, pageWrap.getModel().getName());
-        }
-        if (pageWrap.getModel().getCabinetId() != null) {
-            queryWrapper.lambda().eq(JkIccard::getCabinetId, pageWrap.getModel().getCabinetId());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(jkIccardMapper.selectPage(page, queryWrapper));
+        JkIccard model = pageWrap.getModel();
+        MPJLambdaWrapper<JkIccard> wrapper = new MPJLambdaWrapper<JkIccard>()
+                .selectAll(JkIccard.class)
+                .selectAs(Member::getName,JkIccard::getMemberName)
+                .leftJoin(Member.class,Member::getId,JkIccard::getMemberId)
+                .eq(JkIccard::getIsdeleted,Constants.ZERO)
+                .eq(Objects.nonNull(model.getStatus()),JkIccard::getStatus,model.getStatus())
+                .like(StringUtils.isNotBlank(model.getCode()),JkIccard::getCode,model.getCode())
+                .like(StringUtils.isNotBlank(model.getMemberName()),Member::getName,model.getMemberName())
+                .orderByDesc(JkIccard::getCreateDate)
+                ;
+        IPage<JkIccard> iPage = jkIccardMapper.selectJoinPage(page,JkIccard.class,wrapper);
+        return PageData.from(iPage);
     }
 
     @Override
@@ -142,4 +163,19 @@
         QueryWrapper<JkIccard> wrapper = new QueryWrapper<>(jkIccard);
         return jkIccardMapper.selectCount(wrapper);
     }
+
+    @Override
+    public void updateStatusById(JkIccard jkIccard) {
+        if(Objects.isNull(jkIccard)
+                || Objects.isNull(jkIccard.getId())
+                || Objects.isNull(jkIccard.getStatus())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        jkIccardMapper.update(null,new UpdateWrapper<JkIccard>()
+                .lambda().set(JkIccard::getStatus,jkIccard.getStatus())
+                .set(JkIccard::getEditDate, DateUtil.getCurrDateTime())
+                .eq(JkIccard::getId,jkIccard.getId()));
+    }
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java
index e80144f..713869d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java
@@ -76,6 +76,7 @@
         jkKeys.setEditor(loginUserInfo.getId());
         jkKeys.setIsdeleted(Constants.ZERO);
         jkKeys.setStatus(Constants.ZERO);
+        jkKeys.setCarCode(cars.getCode());
         jkKeysMapper.insert(jkKeys);
         return jkKeys.getId();
     }
@@ -136,6 +137,7 @@
         LoginUserInfo loginUserInfo = jkKeys.getLoginUserInfo();
         jkKeys.setEditDate(new Date());
         jkKeys.setEditor(loginUserInfo.getId());
+        jkKeys.setCarCode(cars.getCode());
         jkKeysMapper.updateById(jkKeys);
     }
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkVersionServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkVersionServiceImpl.java
index 9a360c2..7bc2a7c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkVersionServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkVersionServiceImpl.java
@@ -1,5 +1,14 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.model.JkCabinet;
+import com.doumee.dao.business.model.JkCabinetLog;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.core.utils.Utils;
@@ -10,11 +19,16 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.java.Log;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 浜ゆ帶-閽ュ寵鏌滅粓绔増鏈俊鎭〃Service瀹炵幇
@@ -27,15 +41,39 @@
     @Autowired
     private JkVersionMapper jkVersionMapper;
 
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+
     @Override
     public Integer create(JkVersion jkVersion) {
+        if(Objects.isNull(jkVersion)
+                || Objects.isNull(jkVersion.getType())
+                || Objects.isNull(jkVersion.getIsForce())
+                || StringUtils.isBlank(jkVersion.getVersionInfo())
+                || StringUtils.isBlank(jkVersion.getFileUrl())
+                || Objects.isNull(jkVersion.getFileSize())
+                || StringUtils.isBlank(jkVersion.getName())
+                || StringUtils.isBlank(jkVersion.getContent())
+        ){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
+        }
+        LoginUserInfo loginUserInfo = jkVersion.getLoginUserInfo();
+        jkVersion.setCreateDate(new Date());
+        jkVersion.setCreator(loginUserInfo.getId());
+        jkVersion.setEditDate(jkVersion.getCreateDate());
+        jkVersion.setEditor(jkVersion.getCreator());
+        jkVersion.setIsdeleted(Constants.ZERO);
         jkVersionMapper.insert(jkVersion);
         return jkVersion.getId();
     }
 
     @Override
     public void deleteById(Integer id) {
-        jkVersionMapper.deleteById(id);
+        jkVersionMapper.update(null,new UpdateWrapper<JkVersion>().lambda()
+                .set(JkVersion::getIsdeleted,Constants.ONE)
+                .eq(JkVersion::getId,id));
+//        jkVersionMapper.deleteById(id);
     }
 
     @Override
@@ -54,6 +92,21 @@
 
     @Override
     public void updateById(JkVersion jkVersion) {
+        if(Objects.isNull(jkVersion)
+                || Objects.isNull(jkVersion.getId())
+                || Objects.isNull(jkVersion.getType())
+                || Objects.isNull(jkVersion.getIsForce())
+                || StringUtils.isBlank(jkVersion.getVersionInfo())
+                || StringUtils.isBlank(jkVersion.getFileUrl())
+                || Objects.isNull(jkVersion.getFileSize())
+                || StringUtils.isBlank(jkVersion.getName())
+                || StringUtils.isBlank(jkVersion.getContent())
+        ){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
+        }
+        LoginUserInfo loginUserInfo = jkVersion.getLoginUserInfo();
+        jkVersion.setEditDate(new Date());
+        jkVersion.setEditor(loginUserInfo.getId());
         jkVersionMapper.updateById(jkVersion);
     }
 
@@ -67,9 +120,18 @@
         }
     }
 
+
+
+
     @Override
     public JkVersion findById(Integer id) {
-        return jkVersionMapper.selectById(id);
+        JkVersion jkVersion = jkVersionMapper.selectById(id);
+        if(Objects.nonNull(jkVersion)&&StringUtils.isNotBlank(jkVersion.getFileUrl())){
+            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_LOCAL_RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.APP_FILE).getCode();
+            jkVersion.setFullFileUrl(path + jkVersion.getFileUrl());
+        }
+        return jkVersion;
     }
 
     @Override
@@ -87,63 +149,27 @@
     @Override
     public PageData<JkVersion> findPage(PageWrap<JkVersion> pageWrap) {
         IPage<JkVersion> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<JkVersion> queryWrapper = new QueryWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(JkVersion::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(JkVersion::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(JkVersion::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(JkVersion::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(JkVersion::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(JkVersion::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(JkVersion::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(JkVersion::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getInfo() != null) {
-            queryWrapper.lambda().eq(JkVersion::getInfo, pageWrap.getModel().getInfo());
-        }
-        if (pageWrap.getModel().getVersionInfo() != null) {
-            queryWrapper.lambda().eq(JkVersion::getVersionInfo, pageWrap.getModel().getVersionInfo());
-        }
-        if (pageWrap.getModel().getFileUrl() != null) {
-            queryWrapper.lambda().eq(JkVersion::getFileUrl, pageWrap.getModel().getFileUrl());
-        }
-        if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(JkVersion::getName, pageWrap.getModel().getName());
-        }
-        if (pageWrap.getModel().getContent() != null) {
-            queryWrapper.lambda().eq(JkVersion::getContent, pageWrap.getModel().getContent());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(JkVersion::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getTitle() != null) {
-            queryWrapper.lambda().eq(JkVersion::getTitle, pageWrap.getModel().getTitle());
-        }
-        if (pageWrap.getModel().getIsForce() != null) {
-            queryWrapper.lambda().eq(JkVersion::getIsForce, pageWrap.getModel().getIsForce());
-        }
-        if (pageWrap.getModel().getType() != null) {
-            queryWrapper.lambda().eq(JkVersion::getType, pageWrap.getModel().getType());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        JkVersion model = pageWrap.getModel();
+        MPJLambdaWrapper<JkVersion> wrapper = new MPJLambdaWrapper<JkVersion>()
+                .selectAll(JkVersion.class)
+                .selectAs(SystemUser::getRealname,JkVersion::getCreateUserName)
+                .select(" ROUND( t.file_size / 1024, 2) ", JkVersion::getFileSizeMb)
+                .leftJoin(SystemUser.class,SystemUser::getId,JkVersion::getCreator)
+                .eq(JkVersion::getIsdeleted,Constants.ZERO)
+                .eq(Objects.nonNull(model.getIsForce()),JkVersion::getIsForce,model.getIsForce())
+                .like(StringUtils.isNotBlank(model.getVersionInfo()),JkVersion::getVersionInfo,model.getVersionInfo())
+                .orderByDesc(JkVersion::getVersionInfo,JkVersion::getCreateDate)
+                ;
+        IPage<JkVersion> iPage = jkVersionMapper.selectJoinPage(page,JkVersion.class,wrapper);
+        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_LOCAL_RESOURCE_PATH).getCode()
+                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.APP_FILE).getCode();
+        for (JkVersion jkVersion:iPage.getRecords()) {
+            if(Objects.nonNull(jkVersion)&&StringUtils.isNotBlank(jkVersion.getFileUrl())){
+                jkVersion.setFullFileUrl(path + jkVersion.getFileUrl());
             }
         }
-        return PageData.from(jkVersionMapper.selectPage(page, queryWrapper));
+        return PageData.from(iPage);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 40f62c5..01b1d19 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -96,6 +96,9 @@
     private MemberJoinMapper memberJoinMapper;
 
     @Autowired
+    private JkCabinetMapper jkCabinetMapper;
+
+    @Autowired
     private TrainTimeMapper trainTimeMapper;
 
     @Autowired
@@ -1211,6 +1214,21 @@
                 queryWrapper.apply(" find_in_set('"+companySpecialId+"',REPLACE(t3.company_path,'/',',')) ");
             }
         }
+        if(null != member.getQueryAuth() && Constants.equalsInteger(member.getQueryAuth(),Constants.ONE)){
+            List<JkCabinet> jkCabinets = jkCabinetMapper.selectList(new QueryWrapper<JkCabinet>().lambda()
+                    .eq(JkCabinet::getIsdeleted,Constants.ZERO)
+                    .isNotNull(JkCabinet::getAuthMemberId)
+            );
+            if(CollectionUtils.isNotEmpty(jkCabinets)){
+                List<String> memberIdList = new ArrayList<>();
+                List<String> authMemberId = jkCabinets.stream().map(i->i.getAuthMemberId()).collect(Collectors.toList());
+                for (String s:authMemberId) {
+                    memberIdList.addAll(Arrays.asList(s.split(","))) ;
+                }
+                queryWrapper.in(Member::getId,memberIdList);
+            }
+
+        }
         queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
         queryWrapper.eq(Member::getWorkStatus,Constants.ZERO);
         queryWrapper.orderByAsc(Member::getPinyin);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WarningServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WarningServiceImpl.java
index 6b7263d..1ea06ee 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WarningServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WarningServiceImpl.java
@@ -1,38 +1,69 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.dingTalk.DingTalk;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
-import com.doumee.dao.business.model.Category;
-import com.doumee.dao.business.model.PlatformGroup;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.WeatherUtil;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.MemberMapper;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.WarningMapper;
-import com.doumee.dao.business.model.Warning;
 import com.doumee.service.business.WarningService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 鎶ヨ璁板綍淇℃伅琛⊿ervice瀹炵幇
  * @author 姹熻箘韫�
  * @date 2025/09/28 09:01
  */
+@Slf4j
 @Service
 public class WarningServiceImpl implements WarningService {
 
     @Autowired
     private WarningMapper warningMapper;
+
+    @Autowired
+    private WarningRuleMapper warningRuleMapper;
+
+    @Autowired
+    private WarningRuleDetailMapper warningRuleDetailMapper;
+
+    @Autowired
+    private WarningPushMapper warningPushMapper;
+
+    @Autowired
+    private WarningEventMapper warningEventMapper;
+
+    @Autowired
+    private DingTalk dingTalk;
+
+    @Autowired
+    private MemberMapper memberMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
 
     @Override
     public Integer create(Warning warning) {
@@ -213,4 +244,107 @@
         model.setEditor(param.getLoginUserInfo().getId());
         warningMapper.updateById(model);
     }
+
+
+    /**
+     * 瀹氭椂鑾峰彇澶╂皵淇℃伅鎵ц
+     */
+    @Override
+    public void getWeatherInfo(){
+        try{
+            String response = WeatherUtil.getWeatherWarningInfo(systemDictDataBiz.queryByCode(Constants.WEATHER_CONFIG,Constants.REQUEST_URL).getCode(),
+                    systemDictDataBiz.queryByCode(Constants.WEATHER_CONFIG,Constants.API_KEY).getCode(),
+                    systemDictDataBiz.queryByCode(Constants.WEATHER_CONFIG,Constants.LOCATION).getCode());
+            if(StringUtils.isBlank(response)){
+                log.error("鏃犺繑鍥炴暟鎹�");
+            }
+            JSONObject jsonObject = JSONObject.parseObject(response);
+            if(jsonObject.getString("code").equals("200")){
+                if(jsonObject.containsKey("warning")){
+                    Warning warning = warningMapper.selectOne(new QueryWrapper<Warning>().lambda()
+                            .eq(Warning::getType,Constants.FOUR).eq(Warning::getIsdeleted,Constants.ZERO).last("limt 1"));
+                    if(Objects.isNull(warning)){
+                        return;
+                    }
+                    //鏌ヨ閫氱煡浜哄憳
+                    List<WarningRule> warningRuleList = warningRuleMapper.selectList(new QueryWrapper<WarningRule>().lambda()
+                            .eq(WarningRule::getIsdeleted,Constants.ZERO)
+                            .apply(" id in ( select w.RULE_ID from warning_rule_detail w where w.WARNING_ID = '"+warning.getId()+"' and w.ISDELETED = 0  ) ")
+                    );
+                    List<Member> memberList = new ArrayList<>();
+                    if(org.apache.commons.collections.CollectionUtils.isNotEmpty(warningRuleList)){
+                        List<String> memberIdStr =  warningRuleList.stream().map(i->i.getMemberIds()).collect(Collectors.toList());
+                        if(org.apache.commons.collections.CollectionUtils.isNotEmpty(memberIdStr)){
+                            List<String> memberIdList = new ArrayList<>();
+                            for (String s:memberIdStr) {
+                                memberIdList.addAll(
+                                        Arrays.asList(s.split(","))
+                                );
+                            }
+                            memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO)
+                                    .notIn(Member::getErpId)
+                                    .in(Member::getId,memberIdList)
+                            );
+                        }
+                    }
+                    JSONArray jsonArray = jsonObject.getJSONArray("warning");
+                    for (int i = 0; i < jsonArray.size(); i++) {
+                        List<WarningPush> warningPushList = new ArrayList<>();
+                        JSONObject  weatherInfo = jsonArray.getJSONObject(i);
+                        String code = weatherInfo.getString("id");
+                        String title = weatherInfo.getString("title");
+                        String text = weatherInfo.getString("text");
+                        //瀛樺湪棰勮 鍒欏瓨鍌ㄩ璀︿俊鎭�
+                        if(warningEventMapper.selectCount(new QueryWrapper<WarningEvent>()
+                                .lambda()
+                                .eq(WarningEvent::getEventId,code)
+                        )>Constants.ZERO){
+                            continue;
+                        }
+
+                        WarningEvent warningEvent = new WarningEvent();
+                        warningEvent.setCreateDate(new Date());
+                        warningEvent.setIsdeleted(Constants.ZERO);
+                        warningEvent.setWarningId(warning.getId());
+                        warningEvent.setTitle(title);
+                        warningEvent.setContent(text);
+                        warningEvent.setEventId(code);
+                        warningEvent.setHappenTime(DateUtil.getCurrDateTime());
+                        warningEvent.setJsonContent(weatherInfo.toJSONString());
+                        warningEventMapper.insert(warningEvent);
+                        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)&&memberList.size()>Constants.ZERO){
+                            List<String> ddUserIdList = memberList.stream().map(j->j.getErpId()).collect(Collectors.toList());
+                            //鍙戦�佹帹閫侀拤閽夋秷鎭�
+                            Boolean isSuccess = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
+                                    String.join(",",ddUserIdList),
+                                    dingTalk.getWeatherNoticeMsg(title,text));
+                            for (Member member:memberList) {
+                                WarningPush warningPush = new WarningPush();
+                                warningPush.setCreateDate(new Date());
+                                warningPush.setWarningId(warning.getId());
+                                warningPush.setTitle(warningEvent.getTitle());
+                                warningPush.setContent(warningEvent.getContent());
+                                warningPush.setStatus(isSuccess?Constants.ONE:Constants.TWO);
+                                warningPush.setPushType(Constants.ZERO);
+                                warningPush.setMemberId(member.getId());
+                                warningPushList.add(warningPush);
+                            }
+                        }
+                        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(warningPushList)){
+                            warningPushMapper.insert(warningPushList);
+                        }
+                    }
+                }
+            }
+        }catch (Exception e){
+
+        }
+
+
+
+
+    }
+
+
+
 }

--
Gitblit v1.9.3