From 9958c9393c8c3a5e2350fa9023e14cbbf74b0d9a Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期五, 31 十月 2025 12:05:24 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/wuhuyancao' into wuhuyancao

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                                       |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkVersion.java                                       |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java                                 |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/QueryUserByCodeDTO.java                                |   22 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkKeys.java                                          |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java                      |   80 ++++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkKeysServiceImpl.java                            |   17 +
 server/visits/dmvisit_admin/src/main/resources/bootstrap.yml                                                                   |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetLogService.java                               |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitRequest.java     |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseInfoRequest.java   |   19 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java                     |  148 ++++++++++++++--
 server/visits/admin_timer/src/main/java/com/doumee/api/JkCabinetTimerController.java                                           |   40 ++++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java                                     |   11 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OptGridDTO.java                                        |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AlcoholTestAlarmDTO.java                               |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkIccardService.java                                   |    3 
 server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java                                          |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java                         |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseRequest.java       |   14 +
 server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java                                                 |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AbnormalOpenGridDTO.java                               |   25 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java                                    |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkIccardServiceImpl.java                          |   15 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/cabinet/CabinetController.java                                  |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseParamRequest.java  |   18 ++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java                                    |    9 +
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitDataRequest.java |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java                                      |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java                                             |    1 
 30 files changed, 437 insertions(+), 56 deletions(-)

diff --git a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
index c3298bb..1a03476 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -150,7 +150,7 @@
 
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
-    public void create(CreateSystemUserDTO systemUser) {
+    public void  create(CreateSystemUserDTO systemUser) {
         // 楠岃瘉鐢ㄦ埛鍚�
         SystemUser queryUserDto = new SystemUser();
         queryUserDto.setUsername(systemUser.getUsername());
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 392fe0a..e3459ae 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
@@ -790,7 +790,7 @@
                 String t = reversedHex.substring(i*2,i*2+2);
                 result += new StringBuilder(t).reverse().toString();
             }
-            return result;
+            return result.toUpperCase();
         }catch (Exception e){
 
         }
@@ -1130,7 +1130,7 @@
         WAIT_CALL(2, "宸茬鍒�","宸茬鍒�"),
         IN_WAIT(3, "鍏ュ洯绛夊緟","鍏ュ洯绛夊緟" ),
         CALLED(4, "宸插彨鍙�","宸插彨鍙�" ),
-         WORKING(5, "浣滀笟涓�","浣滀笟涓�" ),
+        WORKING(5, "浣滀笟涓�","浣滀笟涓�" ),
         DONE(6, "浣滀笟瀹屾垚 ","浣滀笟瀹屾垚" ),
         TRANSFERING(7, "杞Щ涓�","杞Щ涓�" ),
         EXCEPTION(8, "寮傚父鎸傝捣","寮傚父鎸傝捣" ),
@@ -1194,7 +1194,7 @@
         IN_CITY_CAR_USE(3, "鍏溅甯傚唴鐢ㄨ溅 ", "鍏溅甯傚唴鐢ㄨ溅 "),
         OUT_CITY_CAR_USE(4, "鍏溅瀹ゅ鐢ㄨ溅 ", "鍏溅瀹ゅ鐢ㄨ溅 "),
         CITY_WLC_BOOK(5, "甯傚叕鍙哥墿娴佽溅棰勭害 ", "5甯傚叕鍙哥墿娴佽溅棰勭害 "),
-        PLATFROM_REASON(6, "鏈堝彴鍏ュ洯鍘熷洜瀹℃壒 ", "鏈堝彴鍏ュ洯鍘熷洜瀹℃壒 "),
+        PLATFROM_REASON(6, "鏈堝彴鍏ュ洯鍘熷洜瀹℃壒 ", "鏈堝彴鍏ュ洯鍘熷洜瀹℃壒 ")
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -1523,9 +1523,9 @@
 
 
     public  enum WarningConfig {
-        ALARM_TEST(10002, "閰掔簿娴嬭瘯"),
-        GRID_TIME_OUT_INFO(10003, "寮�闂ㄨ秴鏃舵湭鍏抽棴"),
-        KEY_TIME_OUT_BACK(10004, "閽ュ寵瓒呮椂鏈綊杩�"),
+        ALARM_TEST(10002, "銆愰挜鍖欐煖銆戦厭绮炬祴璇曞紓甯�"),
+        GRID_TIME_OUT_INFO(10003, "銆愰挜鍖欐煖銆戝紑闂ㄨ秴鏃舵湭鍏抽棴"),
+        KEY_TIME_OUT_BACK(10004, "銆愰挜鍖欐煖銆戦挜鍖欒秴鏃舵湭褰掕繕"),
         ;
         // 鎴愬憳鍙橀噺
         private int key;
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 3464add..fd72b31 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
@@ -115,4 +115,7 @@
     @PostMapping("/timer/systemUserJob/jobForOpenProhibitStatus")
     ApiResponse jobForOpenProhibitStatus();
 
+    @ApiOperation("銆愰挜鍖欐煖銆戝畾鏃跺彂閫侀挜鍖欐湭鍙婃椂褰掕繕閫氱煡")
+    @PostMapping("/timer/jkCabinet/timeOutUnBackAlarm")
+    ApiResponse timeOutUnBackAlarm();
 }
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/JkCabinetTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/JkCabinetTimerController.java
new file mode 100644
index 0000000..fba3f5e
--- /dev/null
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/JkCabinetTimerController.java
@@ -0,0 +1,40 @@
+package com.doumee.api;
+
+import com.doumee.service.business.JkCabinetLogService;
+import com.doumee.service.business.JkCustomerService;
+import com.doumee.service.business.impl.JkCabinetGridServiceImpl;
+import com.doumee.service.business.third.model.ApiResponse;
+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.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/jkCabinet")
+public class JkCabinetTimerController extends BaseController {
+    @Autowired
+    private JkCabinetLogService jkCabinetLogService;
+
+    @Autowired
+    private JkCabinetGridServiceImpl impl;
+
+
+    @ApiOperation("瀹氭椂鍙戦�侀挜鍖欐湭鍙婃椂褰掕繕閫氱煡")
+    @PostMapping("/timeOutUnBackAlarm")
+    public ApiResponse timeOutUnBackAlarm() {
+        jkCabinetLogService.timeOutUnBackAlarm(impl);
+        return ApiResponse.success("瀹氭椂鍙戦�侀挜鍖欐湭鍙婃椂褰掕繕閫氱煡");
+    }
+
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
index 65d569e..5d1cdd4 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -7,6 +7,7 @@
 import com.doumee.config.annotation.LoginNoRequired;
 import com.doumee.config.jwt.JwtProperties;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.haikang.model.HKConstants;
 import com.doumee.core.haikang.model.param.BaseResponse;
 import com.doumee.core.haikang.model.param.request.*;
 import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
@@ -171,6 +172,14 @@
         String result = hkSyncPushService.dealVisitEvent(param,response);
         return ApiResponse.success(result);
     }
+    @ApiOperation("銆愭捣搴枫�戝叾浠栬闃呬簨浠惰闃呮帹閫佸鎺ュ鐞嗘帴鍙�")
+    @PostMapping("/push/notice")
+    @LoginNoRequired
+    public ApiResponse pushNotice(@RequestBody EventVisitRequest param, HttpServletResponse response){
+        String result = hkSyncPushService.dealVisitEvent(param,response);
+
+        return ApiResponse.success(result);
+    }
     @ApiOperation("銆愭捣搴枫�戣瀹CCM浜嬩欢璁㈤槄鎺ㄩ�佸鎺ュ鐞嗘帴鍙�")
     @PostMapping("/push/visitIccm")
     @LoginNoRequired
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/cabinet/CabinetController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/cabinet/CabinetController.java
index f9f1183..cc05592 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/cabinet/CabinetController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/cabinet/CabinetController.java
@@ -183,9 +183,9 @@
     @LoginNoRequired
     @ApiOperation("鑾峰彇IC鍗$敤鎴蜂富閿� - 鍙告満")
     @PostMapping("/getMemberIdByCode")
-    public ApiResponse<Integer> getMemberIdByCode(@RequestParam String code) {
-        this.saveInterfaceLog(Constants.strToJson("code",code), null,"getMemberIdByCode","鑾峰彇IC鍗$敤鎴蜂富閿� - 鍙告満");
-        return ApiResponse.success(jkIccardService.getMemberIdByCode(code));
+    public ApiResponse<Integer> getMemberIdByCode(@RequestBody QueryUserByCodeDTO dto) {
+        this.saveInterfaceLog(JSONObject.toJSONString(dto), null,"getMemberIdByCode","鑾峰彇IC鍗$敤鎴蜂富閿� - 鍙告満");
+        return ApiResponse.success(jkIccardService.getMemberIdByCode(dto));
     }
 
     private void saveInterfaceLog(String s, String result,String url,String name) {
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
index 9dc10e9..86e11a3 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: dev
+    active: test
   application:
     name: visitsAdmin
     # 瀹夊叏閰嶇疆
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 2832e4e..cbb22b6 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
@@ -519,7 +519,6 @@
 
     /**
      * 瀹夐槻/娑堥槻 markdown
-     * @param hiddenDanger
      * @return
      */
     public OapiMessageCorpconversationAsyncsendV2Request.Msg getAlarmNoticeMsg(String areaName,String submitTime,String infoType){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseInfoRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseInfoRequest.java
new file mode 100644
index 0000000..53821ce
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseInfoRequest.java
@@ -0,0 +1,19 @@
+package com.doumee.core.haikang.model.param.request.event.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitDataRequest;
+import lombok.Data;
+
+@Data
+public class EventBaseInfoRequest {
+    private String  eventId;//	String	浜嬩欢鍞竴鏍囪瘑	鏄�	64
+    private String  srcIndex;//	String	浜嬩欢婧愮紪鍙凤紝鐗╃悊璁惧鏄祫婧愮紪鍙�	鏄�	64
+    private String  srcType;//	String	浜嬩欢婧愮被鍨�	鏄�	16
+    private Integer  eventType	;//Number	浜嬩欢绫诲瀷	鏄�
+    private String  srcName;//	String	浜嬩欢婧愬悕绉�	鍚�	64
+    private Integer   status	;//Number	浜嬩欢鐘舵��	鏄�		0-鐬椂1-寮�濮�2-鍋滄3-浜嬩欢鑴夊啿4-浜嬩欢鑱斿姩缁撴灉鏇存柊5-寮傛鍥剧墖涓婁紶
+    private Integer  timeout	;//Number	鑴夊啿瓒呮椂鏃堕棿	鏄�		鍗曚綅锛氱
+    private String  happenTime	;//String	浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂达級	鏄�	64
+    private String   srcParentIndex	;//String	浜嬩欢鍙戠敓鐨勪簨浠舵簮鐖惰澶囩紪鍙�	鍚�	64
+    private JSONObject data;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseParamRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseParamRequest.java
new file mode 100644
index 0000000..f743d60
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseParamRequest.java
@@ -0,0 +1,18 @@
+package com.doumee.core.haikang.model.param.request.event.base;
+
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EventBaseParamRequest {
+
+
+    private String   sendTime;//	P	String	浜嬩欢浠庢帴鏀惰�咃紙绋嬪簭澶勭悊鍚庯級鍙戝嚭鐨勬椂闂�	鏄�	32	浜嬩欢鍙戦�佹椂闂�
+    private String    ability;//	P	String	浜嬩欢绫诲埆	鏄�	64	鏍囪瘑鍋滆溅鍦轰簨浠�
+    private String[] uids;//	String[]	鐢ㄦ埛id	鍚�	涓嶉檺
+    private String[] clients	;//String[]	缁勪欢鏍囪瘑	鍚�	涓嶉檺
+    private List<EventBaseInfoRequest> events;//	P	Events[]	浜嬩欢淇℃伅	鏄�	涓嶉檺
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseRequest.java
new file mode 100644
index 0000000..014e535
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/base/EventBaseRequest.java
@@ -0,0 +1,14 @@
+package com.doumee.core.haikang.model.param.request.event.base;
+
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitParamRequest;
+import lombok.Data;
+
+@Data
+public class EventBaseRequest {
+
+//    private String  parkIndexCodes	;//	string	False	鍋滆溅搴撳敮涓�鏍囪瘑闆嗗悎  澶氫釜鍊间娇鐢ㄨ嫳鏂囬�楀彿鍒嗛殧锛屼笉瓒呰繃1000涓�
+
+    private String   method	;//	String	鏂规硶鍚嶏紝鐢ㄤ簬鏍囪瘑鎶ユ枃鐢ㄩ��	鏄�	16	浜嬩欢鍥哄畾OnEventNotify
+    private EventBaseParamRequest params	;//	Params	浜嬩欢鍙傛暟淇℃伅	鏄�	涓嶉檺	鍏蜂綋鍙傛暟淇℃伅
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitDataRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitDataRequest.java
index 8db98a6..cf5e81f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitDataRequest.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitDataRequest.java
@@ -6,7 +6,6 @@
 
 @Data
 public class EventVisitDataRequest {
-
         private String   visitorId	;//String	璁垮id	鏄�	64	瀵瑰簲璁垮鏉ヨ璁板綍涓殑orderId瀛楁
         private String   personName;//	String	濮撳悕	鏄�	32
         private Integer  sex;//	Number	鎬у埆	鏄�		1-鐢�2-濂�
@@ -27,5 +26,4 @@
         private String   svrIndexCode;//	String	鍥剧墖瀛樺偍鏈嶅姟鍣ㄥ敮涓�鏍囪瘑	鍚�
         private String   beVisitedPersonId;//	String	琚闂汉Id	鏄�
         private String   beVisitedPersonOrgId;//	String	琚闂汉鎵�灞炵粍缁嘔d	鏄�
-
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitRequest.java
index 4093801..67b7e46 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitRequest.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitRequest.java
@@ -5,8 +5,7 @@
 @Data
 public class EventVisitRequest {
 
-//    private String  parkIndexCodes	;//	string	False	鍋滆溅搴撳敮涓�鏍囪瘑闆嗗悎  澶氫釜鍊间娇鐢ㄨ嫳鏂囬�楀彿鍒嗛殧锛屼笉瓒呰繃1000涓�
-
+//    private String  parkIndexCodes;//	string	False	鍋滆溅搴撳敮涓�鏍囪瘑闆嗗悎  澶氫釜鍊间娇鐢ㄨ嫳鏂囬�楀彿鍒嗛殧锛屼笉瓒呰繃1000涓�
     private String   method	;//	String	鏂规硶鍚嶏紝鐢ㄤ簬鏍囪瘑鎶ユ枃鐢ㄩ��	鏄�	16	浜嬩欢鍥哄畾OnEventNotify
     private EventVisitParamRequest params	;//	Params	浜嬩欢鍙傛暟淇℃伅	鏄�	涓嶉檺	鍏蜂綋鍙傛暟淇℃伅
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AbnormalOpenGridDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AbnormalOpenGridDTO.java
new file mode 100644
index 0000000..1c77070
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AbnormalOpenGridDTO.java
@@ -0,0 +1,25 @@
+package com.doumee.dao.business.dto;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/10/11 16:01
+ */
+@Data
+public class AbnormalOpenGridDTO {
+
+    @ApiModelProperty(value = "閽ュ寵鏌滀富閿�")
+    private Integer cabinetId;
+
+    @ApiModelProperty(value = "鏉垮彿")
+    private String boardCode;
+
+    @ApiModelProperty(value = "閫氶亾鍙�")
+    private String channelCode;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AlcoholTestAlarmDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AlcoholTestAlarmDTO.java
index 6be2ee6..bca03f5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AlcoholTestAlarmDTO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/AlcoholTestAlarmDTO.java
@@ -18,5 +18,8 @@
     @ApiModelProperty(value = "閰掔簿搴︽暟")
     private String alcoholNum;
 
+    @ApiModelProperty(value = "閽ュ寵鏌滀富閿�")
+    private Integer cabinetId;
+
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java
index 362dbdb..54b81ac 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java
@@ -25,4 +25,6 @@
     @ApiModelProperty(value = "鐢ㄦ埛涓婚敭")
     private Integer memberId;
 
+    @ApiModelProperty(value = "寮�鍚柟寮忥細0=绯荤粺寮�鍚紱1=鎵嬪姩寮�鍚�")
+    private Integer openType;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OptGridDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OptGridDTO.java
index 64db8b0..377601c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OptGridDTO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OptGridDTO.java
@@ -21,4 +21,6 @@
     @ApiModelProperty(value = "鏌滄牸涓婚敭鍒楄〃")
     private List<Integer> gridIdList;
 
+    @ApiModelProperty(value = "寮�鍚柟寮忥細0=绯荤粺寮�鍚紱1=鎵嬪姩寮�鍚�")
+    private Integer openType;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/QueryUserByCodeDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/QueryUserByCodeDTO.java
new file mode 100644
index 0000000..6f09e1b
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/QueryUserByCodeDTO.java
@@ -0,0 +1,22 @@
+package com.doumee.dao.business.dto;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.service.business.third.model.LoginUserModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/10/11 16:01
+ */
+@Data
+public class QueryUserByCodeDTO {
+
+    @ApiModelProperty(value = "IC鍗″彿")
+    private String code;
+
+    @ApiModelProperty(value = "鍏宠仈浜哄憳绫诲瀷锛�0=鍙告満锛�1=鏍¢獙浜哄憳", example = "1")
+    private Integer userType;
+}
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 101647a..475a4e7 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
@@ -44,7 +44,7 @@
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
     private Integer isdeleted;
 
-    @ApiModelProperty(value = "澶囨敞")
+    @ApiModelProperty(value = "澶囨敞 璁板綍寮�闂ㄦ柟寮�")
     private String info;
 
     @ApiModelProperty(value = "閽ュ寵鏌滅紪鐮侊紙鍏宠仈jk_cabinet)", example = "1")
@@ -90,6 +90,8 @@
     @ApiModelProperty(value = "鎿嶄綔鍚庨挜鍖欑姸鎬侊細0鏈彉鍖�;1宸插綊杩�;2宸插�熷嚭;", example = "1")
     private Integer keyStatus;
 
+    @ApiModelProperty(value = "鏄惁鍙戦�侀�氱煡锛�0=鍚︼紱1=鏄紱", example = "1")
+    private Integer isNotice;
 
     @ApiModelProperty(value = "褰掕繕鏃堕棿")
     @TableField(exist = false)
@@ -101,7 +103,7 @@
     private String companyName;
 
     @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
-    @ExcelColumn(name="鎿嶄綔浜�",index = 1,width = 2)
+    @ExcelColumn(name="鎿嶄綔浜�",index = 1,width = 12)
     @TableField(exist = false)
     private String memberName;
 
@@ -125,4 +127,8 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date endDate;
 
+    @ApiModelProperty(value = "鎵�鍦ㄤ綅缃�")
+    @TableField(exist = false)
+    private String location;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java
index d9f55d4..3773e1c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java
@@ -79,7 +79,7 @@
     private String sortno;
 
     @ApiModelProperty(value = "缁忕含搴�", example = "1")
-    @ExcelColumn(name="缁忕含搴�",index = 3,width = 10)
+    @ExcelColumn(name="缁忕含搴�",index = 4,width = 10)
     @TableField(exist = false)
     private String locationInfo;
     @ApiModelProperty(value = "閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)", example = "1")
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 edf02f8..02dcd88 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
@@ -78,6 +78,11 @@
     private Integer status;
 
 
+    @ApiModelProperty(value = "鏍囩鏄庣爜 鍔犲瘑鍚庣敓鎴� rfid_lable", example = "1")
+    @ExcelColumn(name="鏍囩鏄庣爜 鍔犲瘑鍚庣敓鎴� rfid_lable")
+    private String rfidCode;
+
+
     @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 2c33dd2..7798d8d 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
@@ -35,7 +35,6 @@
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @ExcelColumn(name="鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
@@ -44,7 +43,6 @@
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
     @ExcelColumn(name="鏇存柊鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java
index 8faea00..3a8d5a2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningPush.java
@@ -82,7 +82,7 @@
     @ApiModelProperty(value = "鎵�鍦ㄤ綅缃�")
     //@ExcelColumn(name="鎺ㄩ�佹爣璇�")
     private String pushId;
-    @ApiModelProperty(value = "鎺ㄩ�佹爣璇�")
+    @ApiModelProperty(value = "鎵�鍦ㄤ綅缃�")
     @ExcelColumn(name="鎵�鍦ㄤ綅缃�",width=10,index = 5)
     private String region;
 
@@ -94,6 +94,15 @@
     //@ExcelColumn(name="鎺ㄩ�佹柟寮� 0閽夐拤閫氱煡")
     private Integer pushType;
 
+    @ApiModelProperty(value = "浜哄憳缂栫爜锛屽涓互,鍒嗗壊", example = "1")
+    //@ExcelColumn(name="鎺ㄩ�佹柟寮� 0閽夐拤閫氱煡")
+    private String memberIds;
+
+    @ApiModelProperty(value = "浜哄憳鍚嶇О锛屽涓互,鍒嗗壊", example = "1")
+    //@ExcelColumn(name="鎺ㄩ�佹柟寮� 0閽夐拤閫氱煡")
+    private String memberNames;
+
+
     @ApiModelProperty(value = "浜嬩欢鍒嗙被 0=瀹夐槻浜嬩欢锛�1=娑堥槻浜嬩欢锛�2=杞﹁浇浜嬩欢锛�3=閽ュ寵鏌滀簨浠讹紱 4=澶╂皵棰勮锛�", example = "1")
     @ExcelColumn(name="浜嬩欢鍒嗙被",valueMapping = "0=瀹夐槻浜嬩欢;1=娑堥槻浜嬩欢;2=杞﹁浇浜嬩欢;3=閽ュ寵鏌滀簨浠�;4=澶╂皵棰勮;",width=10,index = 3)
     @TableField(exist = false)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetLogService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetLogService.java
index 4f7cd26..35e17eb 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetLogService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCabinetLogService.java
@@ -2,6 +2,7 @@
 
 import com.doumee.dao.business.dto.TelecomCabinetLogDTO;
 import com.doumee.dao.business.vo.TelecomJkCabinetLogVO;
+import com.doumee.service.business.impl.JkCabinetGridServiceImpl;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.dao.business.model.JkCabinetLog;
@@ -103,4 +104,8 @@
      * @return
      */
     List<TelecomJkCabinetLogVO> getLogListForTelecom(TelecomCabinetLogDTO model);
+
+
+    void timeOutUnBackAlarm(JkCabinetGridServiceImpl impl);
+
 }
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 4e8aa50..8077c0c 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
@@ -1,5 +1,6 @@
 package com.doumee.service.business;
 
+import com.doumee.dao.business.dto.QueryUserByCodeDTO;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
 import com.doumee.dao.business.model.JkIccard;
@@ -97,5 +98,5 @@
 
     void updateStatusById(JkIccard jkIccard);
 
-    Integer getMemberIdByCode(String code);
+    Integer getMemberIdByCode(QueryUserByCodeDTO dto);
 }
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 72875bd..b1115ac 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
@@ -1,6 +1,7 @@
 package com.doumee.service.business.impl;
 
 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.dingTalk.DingTalkStream;
@@ -58,14 +59,20 @@
     @Autowired
     private JkCabinetLogMapper jkCabinetLogMapper;
 
-    @Autowired
-    private WarningMapper warningMapper;
 
     @Autowired
     private MemberMapper memberMapper;
 
     @Autowired
+    private WarningMapper warningMapper;
+    @Autowired
     private WarningRuleMapper warningRuleMapper;
+
+    @Autowired
+    private WarningPushMapper warningPushMapper;
+    
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Autowired
     private DingTalk dingTalk;
@@ -179,7 +186,7 @@
         MPJLambdaWrapper<JkCabinetGrid> wrapper = new MPJLambdaWrapper<JkCabinetGrid>()
                 .selectAll(JkCabinetGrid.class)
                 .selectAs(JkCabinet::getName,JkCabinetGrid::getCabinetName)
-                .selectAs(JkKeys::getCode,JkCabinetGrid::getKeyCode)
+                .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
                 .leftJoin(JkCabinet.class,JkCabinet::getId,JkCabinetGrid::getCabinetId)
                 .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                 .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
@@ -310,7 +317,7 @@
         }
         List<JkCabinetGrid> jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
                 new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
-                        .selectAs(JkKeys::getCode,JkCabinetGrid::getKeyCode)
+                        .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
                         .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
                         .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
                 .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
@@ -392,6 +399,8 @@
                     jkCabinetLog.setAuthType(Constants.TWO);
                     jkCabinetLog.setMemberId(loginUserInfo.getMemberId());
                     jkCabinetLog.setStatus(Constants.ZERO);
+                    jkCabinetLog.setIsNotice(Constants.ZERO);
+                    jkCabinetLog.setInfo(Objects.isNull(dto.getOpenType())||Constants.equalsInteger(dto.getOpenType(),Constants.ZERO)?"绯荤粺寮�鍚�":"鎵嬪姩寮�鍚�");
                     if(Objects.nonNull(jkCabinetGrid.getKeyId())){
                         jkCabinetLog.setKeyId(jkCabinetGrid.getKeyId());
                         JkKeys jkKeys = jkKeysMapper.selectById(jkCabinetGrid.getKeyId());
@@ -406,6 +415,7 @@
                     jkCabinetLog.setType(Constants.ZERO);
                     jkCabinetLogs.add(jkCabinetLog);
                 }
+
                 jkCabinetLogMapper.insert(jkCabinetLogs);
             }
         }
@@ -464,18 +474,50 @@
                     }
                 }
             }
+            jkCabinetLog.setIsNotice(Constants.ZERO);
             jkCabinetLog.setType(Constants.ONE);
             jkCabinetLogMapper.insert(jkCabinetLog);
             //鏌ヨ閽ュ寵鐨勫紑闂ㄨ褰� 杩涜娣诲姞鍏抽棬璁板綍涓婚敭
-            jkCabinetLogMapper.update(null,new UpdateWrapper<JkCabinetLog>().lambda()
-                    .set(JkCabinetLog::getCloseLogId,jkCabinetLog.getId())
-                    .eq(JkCabinetLog::getKeyId,jkCabinetLog.getKeyId())
-                    .eq(JkCabinetLog::getType,Constants.ZERO)
-                    .isNull(JkCabinetLog::getCloseLogId));
+            if(Constants.equalsInteger(dto.getKeyStatus(),Constants.ONE)){
+                jkCabinetLogMapper.update(null,new UpdateWrapper<JkCabinetLog>().lambda()
+                        .set(JkCabinetLog::getCloseLogId,jkCabinetLog.getId())
+                        .eq(JkCabinetLog::getKeyId,jkCabinetLog.getKeyId())
+                        .eq(JkCabinetLog::getType,Constants.ONE)
+                        .eq(JkCabinetLog::getKeyStatus,Constants.TWO)
+                        .isNull(JkCabinetLog::getCloseLogId));
+            }
+
         }
     }
 
 
+
+//    public void saveAbnormalOpenGridLog(AbnormalOpenGridDTO dto){
+//        if(Objects.isNull(dto)
+//                || StringUtils.isBlank(dto.getBoardCode())
+//                || StringUtils.isBlank(dto.getBoardCode())
+//                || Objects.isNull(dto.getCabinetId())
+//                || Objects.isNull(dto.getKeyStatus())
+//                || Objects.isNull(dto.getAuthType())
+//        ){
+//            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+//        }
+//        JkCabinetGrid jkCabinetGrid = jkCabinetGridMapper.selectOne(new QueryWrapper<JkCabinetGrid>().lambda().eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
+//                .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
+//                .eq(JkCabinetGrid::getId,dto.getGridId())
+//                .last(" limit 1 ")
+//        );
+//        JkCabinetLog jkCabinetLog = new JkCabinetLog();
+//        jkCabinetLog.setCreateDate(new Date());
+//        jkCabinetLog.setIsdeleted(Constants.ZERO);
+//        jkCabinetLog.setCabinetId(dto.getCabinetId());
+//        jkCabinetLog.setGridId(jkCabinetGrid.getId());
+//        jkCabinetLog.setAuthType(dto.getAuthType());
+//        jkCabinetLog.setMemberId(dto.getMemberId());
+//        jkCabinetLog.setKeyStatus(Constants.ZERO);
+//        jkCabinetLog.setStatus(Constants.ZERO);
+//
+//    }
 
 
     /**
@@ -512,7 +554,7 @@
             }
             jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
                     new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
-                            .selectAs(JkKeys::getCode,JkCabinetGrid::getKeyCode)
+                            .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
                             .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
                             .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
                             .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
@@ -551,10 +593,8 @@
         if(Objects.isNull(jkCabinetGrid)){
             return ;
         }
-//        LoginUserInfo loginUserInfo = openGridDriverDTO.getLoginUserInfo();
         JkCabinetLog jkCabinetLog = new JkCabinetLog();
         jkCabinetLog.setCreateDate(new Date());
-//        jkCabinetLog.setCreator(loginUserInfo.getId());
         jkCabinetLog.setIsdeleted(Constants.ZERO);
         jkCabinetLog.setCabinetId(openGridDriverDTO.getCabinetId());
         jkCabinetLog.setGridId(jkCabinetGrid.getId());
@@ -562,6 +602,7 @@
         jkCabinetLog.setMemberId(openGridDriverDTO.getMemberId());
         jkCabinetLog.setType(Constants.ZERO);
         jkCabinetLog.setStatus(Constants.ZERO);
+        jkCabinetLog.setInfo(Objects.isNull(openGridDriverDTO.getOpenType())||Constants.equalsInteger(openGridDriverDTO.getOpenType(),Constants.ZERO)?"绯荤粺寮�鍚�":"鎵嬪姩寮�鍚�");
         if(Objects.nonNull(jkCabinetGrid.getKeyId())){
             jkCabinetLog.setKeyId(jkCabinetGrid.getKeyId());
             JkKeys jkKeys = jkKeysMapper.selectById(jkCabinetGrid.getKeyId());
@@ -573,6 +614,7 @@
                 jkCabinetLog.setRoleType(jkKeys.getRoleType());
             }
         }
+        jkCabinetLog.setIsNotice(Constants.ZERO);
         jkCabinetLogMapper.insert(jkCabinetLog);
     }
 
@@ -593,8 +635,9 @@
 
             if(Objects.nonNull(jkCabinetGrid)){
                 log.error("鏌滄牸寮�闂ㄨ秴鏃舵湭鍏抽棴鍛婅淇℃伅锛歿}"+JSONObject.toJSONString(jkCabinetGrid));
+                Constants.WarningConfig warningConfig = Constants.WarningConfig.GRID_TIME_OUT_INFO;
                 Warning warning = warningMapper.selectOne(new QueryWrapper<Warning>().lambda()
-                        .eq(Warning::getType,Constants.THREE).eq(Warning::getCode,Constants.WarningConfig.GRID_TIME_OUT_INFO.getKey()).eq(Warning::getIsdeleted,Constants.ZERO).last("limt 1"));
+                        .eq(Warning::getType,Constants.THREE).eq(Warning::getCode,warningConfig.getKey()).eq(Warning::getIsdeleted,Constants.ZERO).last("limt 1"));
                 if(Objects.isNull(warning)){
                     return;
                 }
@@ -602,10 +645,33 @@
                 if(CollectionUtils.isEmpty(memberList)){
                     return;
                 }
-                //todo 瀛樺偍寮傚父鏃ュ織
+                JkCabinet jkCabinet = jkCabinetMapper.selectById(dto.getCabinetId());
+                // 瀛樺偍寮傚父鏃ュ織
+                WarningPush warningPush = new WarningPush();
+                warningPush.setCreateDate(new Date());
+                warningPush.setIsdeleted(Constants.ZERO);
+                warningPush.setWarningId(warning.getId());
+                warningPush.setTitle(warningConfig.getInfo());
+                String content = "銆愰挜鍖欐煖-"+jkCabinetGrid.getCabinetName()+"銆戜笅銆愭煖鏍�-"+jkCabinetGrid.getCode()+"銆戣秴鏃舵湭鍏抽棴";
+                warningPush.setContent(content);
+                warningPush.setStatus(Constants.ZERO);
+                warningPush.setPushType(Constants.ZERO);
+                warningPush.setRegion(Objects.nonNull(jkCabinet)&&StringUtils.isNotBlank(jkCabinet.getLocation())?jkCabinet.getLocation():"鏈煡浣嶇疆");
+                warningPush.setMemberIds(
+                        StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+                );
+                warningPush.setMemberIds(
+                        StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+                );
+                warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i->i.getName()).collect(Collectors.toList()),",")
+                );
+                //todo 鏆傛椂鍏抽棴 閽夐拤閫氱煡
 
-
-            }else{
+//            Boolean noticeFlag = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
+//                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
+//                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),content));
+//            warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
+                warningPushMapper.insert(warningPush);
 
             }
         }
@@ -638,9 +704,6 @@
             }
         }
         return memberList;
-
-
-
     }
 
 
@@ -656,8 +719,10 @@
                             .last(" limit 1 ")
                     );
 
+            JkCabinet jkCabinet = jkCabinetMapper.selectById(dto.getCabinetId());
+            Constants.WarningConfig warningConfig = Constants.WarningConfig.ALARM_TEST;
             Warning warning = warningMapper.selectOne(new QueryWrapper<Warning>().lambda()
-                    .eq(Warning::getType,Constants.THREE).eq(Warning::getCode,Constants.WarningConfig.KEY_TIME_OUT_BACK.getKey()).eq(Warning::getIsdeleted,Constants.ZERO).last("limt 1"));
+                    .eq(Warning::getType,Constants.THREE).eq(Warning::getCode,warningConfig.getKey()).eq(Warning::getIsdeleted,Constants.ZERO).last("limt 1"));
             if(Objects.isNull(warning)){
                 return;
             }
@@ -665,8 +730,44 @@
             if(CollectionUtils.isEmpty(memberList)){
                 return;
             }
-            //todo 瀛樺偍寮傚父鏃ュ織
-
+            // 瀛樺偍寮傚父鏃ュ織
+            WarningPush warningPush = new WarningPush();
+            warningPush.setCreateDate(new Date());
+            warningPush.setIsdeleted(Constants.ZERO);
+            warningPush.setWarningId(warning.getId());
+            warningPush.setTitle(warningConfig.getInfo());
+            String content = "";
+            if(Objects.nonNull(systemUser.getRealname())){
+                content = content + systemUser.getRealname();
+            }
+            if(Objects.nonNull(jkCabinet)){
+                content = content + "浜�"+jkCabinet.getName()+"閽ュ寵鏌�";
+            }
+            content = content + "閰掔簿妫�娴嬪紓甯�";
+            warningPush.setContent(content + "閰掔簿妫�娴嬪紓甯革紝閰掔簿搴︽暟銆�"+dto.getAlcoholNum()+"掳銆�");
+            if(Objects.nonNull(dto.getAlcoholNum())){
+                content = content + "锛岄厭绮惧害鏁般��"+dto.getAlcoholNum()+"掳銆�";
+            }
+            warningPush.setContent(content);
+            warningPush.setStatus(Constants.ZERO);
+            warningPush.setPushType(Constants.ZERO);
+            warningPush.setRegion(Objects.nonNull(jkCabinet)&&StringUtils.isNotBlank(jkCabinet.getLocation())?jkCabinet.getLocation():"鏈煡浣嶇疆");
+            warningPush.setMemberId(dto.getMemberId());
+            warningPush.setMemberIds(
+                    StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+            );
+            warningPush.setMemberIds(
+                    StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+            );
+            warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i->i.getName()).collect(Collectors.toList()),",")
+            );
+            //todo 鏆傛椂鍏抽棴 閽夐拤閫氱煡
+            
+//            Boolean noticeFlag = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
+//                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
+//                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),warningConfig.getInfo()));
+//            warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
+            warningPushMapper.insert(warningPush);
             //瀛樺偍寮傚父鏃ュ織
             if(Objects.nonNull(systemUser)){
                 log.error("鍙告満閰掔簿妫�娴嬶紝瓒呭嚭閰掔簿鍊煎憡璀︿俊鎭細{}"+JSONObject.toJSONString(systemUser));
@@ -675,4 +776,7 @@
     }
 
 
+
+
+
 }
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 3147486..6d202cd 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,7 +1,11 @@
 package com.doumee.service.business.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.WarningMapper;
+import com.doumee.dao.business.WarningPushMapper;
+import com.doumee.dao.business.WarningRuleMapper;
 import com.doumee.dao.business.dto.TelecomCabinetLogDTO;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.TelecomJkCabinetLogVO;
@@ -21,8 +25,10 @@
 import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 閽ュ寵鏌滃紑鍏抽棬璁板綍Service瀹炵幇
@@ -35,6 +41,16 @@
     @Autowired
     private JkCabinetLogMapper jkCabinetLogMapper;
 
+    @Autowired
+    private WarningMapper warningMapper;
+    @Autowired
+    private WarningRuleMapper warningRuleMapper;
+
+    @Autowired
+    private WarningPushMapper warningPushMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
     @Override
     public Integer create(JkCabinetLog jkCabinetLog) {
         jkCabinetLogMapper.insert(jkCabinetLog);
@@ -154,6 +170,7 @@
                 .ge(Objects.nonNull(model.getStartDate()),JkCabinetLog::getCreateDate, Utils.Date.getStart(model.getStartDate()))
                 .le(Objects.nonNull(model.getEndDate()),JkCabinetLog::getCreateDate, Utils.Date.getEnd(model.getEndDate()))
                 .eq(JkCabinetLog::getIsdeleted, Constants.ZERO)
+                .eq(JkCabinetLog::getType,Constants.ONE)
                 .eq(JkCabinetLog::getKeyStatus,Constants.TWO)
                 .orderByDesc(JkCabinetLog::getCreateDate);
         List<JkCabinetLog> jkCabinetLogs = jkCabinetLogMapper.selectJoinList(JkCabinetLog.class,wrapper);
@@ -171,5 +188,68 @@
 
 
 
+    @Override
+    public void timeOutUnBackAlarm(JkCabinetGridServiceImpl impl){
+        Constants.WarningConfig warningConfig = Constants.WarningConfig.KEY_TIME_OUT_BACK;
+        Warning warning = warningMapper.selectOne(new QueryWrapper<Warning>().lambda()
+                .eq(Warning::getType,Constants.THREE).eq(Warning::getCode,warningConfig.getKey()).eq(Warning::getIsdeleted,Constants.ZERO).last("limt 1"));
+        if(Objects.isNull(warning)){
+            return;
+        }
+        MPJLambdaWrapper<JkCabinetLog> wrapper = new MPJLambdaWrapper<JkCabinetLog>()
+                .selectAll(JkCabinetLog.class)
+                .selectAs(Member::getName,JkCabinetLog::getMemberName)
+                .selectAs(JkKeys::getCode,JkCabinetLog::getCarCode)
+                .selectAs(JkCabinet::getLocation,JkCabinetLog::getLocation)
+                .leftJoin(JkCabinet.class,JkCabinet::getId,JkCabinetLog::getCabinetId)
+                .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetLog::getKeyId)
+                .leftJoin(Member.class,Member::getId,JkCabinetLog::getMemberId)
+                .eq(JkCabinetLog::getIsdeleted,Constants.ZERO)
+                .eq(JkCabinetLog::getType,Constants.ONE)
+                .eq(JkCabinetLog::getIsNotice,Constants.ZERO)
+                .eq(JkKeys::getStatus,Constants.TWO)
+                .isNull(JkCabinetLog::getCloseLogId)
+                .apply(" now() >  DATE_ADD(t.CREATE_DATE, INTERVAL ifnull(t1.USE_TIME,0) MINUTE) ")
+                .orderByDesc(JkCabinetLog::getCreateDate);
+        List<JkCabinetLog> jkCabinetLogs = jkCabinetLogMapper.selectJoinList(JkCabinetLog.class,wrapper);
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(jkCabinetLogs)){
+            List<Member> memberList = impl.getWarningList(warning);
+
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
+                for (JkCabinetLog jkCabinetLog:jkCabinetLogs) {
+                    WarningPush warningPush = new WarningPush();
+                    warningPush.setCreateDate(new Date());
+                    warningPush.setIsdeleted(Constants.ZERO);
+                    warningPush.setWarningId(warning.getId());
+                    warningPush.setTitle(warningConfig.getInfo());
+                    String content = "銆愯溅杈�-"+jkCabinetLog.getCarCode()+"閽ュ寵銆戠敱+"+(StringUtils.isNotBlank(jkCabinetLog.getMemberName())?jkCabinetLog.getMemberName():"鏈煡浜哄憳")+"鍊熷嚭锛岃秴鏃舵湭褰掕繕";
+                    warningPush.setContent(content);
+                    warningPush.setStatus(Constants.ZERO);
+                    warningPush.setPushType(Constants.ZERO);
+                    warningPush.setRegion( StringUtils.isNotBlank(jkCabinetLog.getLocation())?jkCabinetLog.getLocation():"鏈煡浣嶇疆");
+                    warningPush.setMemberIds(
+                            StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+                    );
+                    warningPush.setMemberIds(
+                            StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+                    );
+                    warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i->i.getName()).collect(Collectors.toList()),",")
+                    );
+                    //todo 鏆傛椂鍏抽棴 閽夐拤閫氱煡
+
+    //            Boolean noticeFlag = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
+    //                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
+    //                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),content));
+    //            warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
+                    warningPushMapper.insert(warningPush);
+
+                }
+            }
+        }
+
+
+    }
+
+
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java
index 1332ee3..7f25156 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java
@@ -85,7 +85,7 @@
             || Objects.isNull(jkCabinet.getSortType())
             || (
                 Constants.equalsInteger(jkCabinet.getNoType(),Constants.ONE)
-                && ( Objects.isNull(jkCabinet.getNoIndex()) || Objects.isNull(jkCabinet.getNoLength()) || StringUtils.isBlank(jkCabinet.getNoPrefix()) )
+                && ( Objects.isNull(jkCabinet.getNoIndex()) || Objects.isNull(jkCabinet.getNoLength()) )
                 )
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
@@ -134,7 +134,7 @@
             if(Constants.equalsInteger(jkCabinet.getNoType(),Constants.ZERO)){
                 grid.setCode(StringUtils.leftPad(startNo.toString(),maxNum.toString().length()+1,"0"));
             }else{
-                grid.setCode(jkCabinet.getNoPrefix() +  StringUtils.leftPad(startNo.toString(),jkCabinet.getNoLength(),"0"));
+                grid.setCode(StringUtils.isNotBlank(jkCabinet.getNoPrefix())?jkCabinet.getNoPrefix():"" +  StringUtils.leftPad(startNo.toString(),jkCabinet.getNoLength(),"0"));
             }
 
             jkCabinetGridList.add(grid);
@@ -412,7 +412,7 @@
                 jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class, new MPJLambdaWrapper<JkCabinetGrid>()
                 .selectAll(JkCabinetGrid.class)
                 .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
-                .selectAs(JkKeys::getCode,JkCabinetGrid::getKeyCode)
+                .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
                 .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
                 .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                 .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
@@ -504,7 +504,7 @@
             List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                     .eq(Member::getIsdeleted,Constants.ZERO)
                     .isNotNull(Member::getFaceImg)
-                    .apply(" FIND_IN_SET( id ,'"+jkCabinet.getManagerId()+"') ")
+                    .apply(" FIND_IN_SET( id ,'"+jkCabinet.getAuthMemberId()+"') ")
             );
             if(CollectionUtils.isNotEmpty(memberList)){
                 for (Member member:memberList) {
@@ -541,7 +541,7 @@
                             .selectAll(JkCabinetGrid.class)
                             .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
                             .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
-                            .selectAs(JkKeys::getCode,JkCabinetGrid::getKeyCode)
+                            .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
                             .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                             .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                             .eq(JkCabinetGrid::getCabinetId,jkCabinet.getId())
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 7900f83..aa6b0dc 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
@@ -4,6 +4,7 @@
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.dto.QueryUserByCodeDTO;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.third.model.LoginUserInfo;
@@ -181,16 +182,24 @@
 
 
     @Override
-    public Integer getMemberIdByCode(String code){
+    public Integer getMemberIdByCode(QueryUserByCodeDTO dto){
+        if(Objects.isNull(dto)
+        || Objects.isNull(dto.getUserType())
+        || StringUtils.isBlank(dto.getCode())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
         JkIccard jkIccard = jkIccardMapper.selectOne(new QueryWrapper<JkIccard>().lambda()
                 .eq(JkIccard::getIsdeleted,Constants.ZERO)
-                .eq(JkIccard::getStatus,Constants.ONE)
-                .eq(JkIccard::getCode,code)
+                .eq(JkIccard::getUserType,dto.getUserType())
+                .eq(JkIccard::getCode,dto.getCode())
                 .last(" limit 1 ")
         );
         if(Objects.isNull(jkIccard)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
+        if(!Constants.equalsInteger(jkIccard.getStatus(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝褰撳墠IC鍗″凡琚鐢紒");
+        }
         return jkIccard.getMemberId();
 
     }
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 2082dc5..20134ae 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
@@ -49,7 +49,7 @@
         || Objects.isNull(jkKeys.getCarId())
         || Objects.isNull(jkKeys.getRoleType())
         || StringUtils.isBlank(jkKeys.getCode())
-        || StringUtils.isBlank(jkKeys.getRfidLable())
+        || StringUtils.isBlank(jkKeys.getRfidCode())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
@@ -65,10 +65,15 @@
         if(Objects.nonNull(carsKeys)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠杞﹁締宸茶閽ュ寵["+carsKeys.getCode()+"]缁戝畾浣跨敤锛�");
         }
-        JkKeys rfidKeys = jkKeysMapper.selectOne(new QueryWrapper<JkKeys>().lambda().eq(JkKeys::getRfidLable,jkKeys.getRfidLable()).eq(JkKeys::getIsdeleted,Constants.ZERO).last("limit 1"));
+        JkKeys rfidKeys = jkKeysMapper.selectOne(new QueryWrapper<JkKeys>().lambda().eq(JkKeys::getRfidCode,jkKeys.getRfidCode()).eq(JkKeys::getIsdeleted,Constants.ZERO).last("limit 1"));
         if(Objects.nonNull(rfidKeys)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠RFID鏍囩宸茶閽ュ寵["+rfidKeys.getCode()+"]浣跨敤锛�");
         }
+        String lable = Constants.getRFIDNumber(jkKeys.getRfidCode());
+        if(StringUtils.isEmpty(lable)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"RFID鏍囩璁剧疆澶辫触銆愭牸寮忎笉姝g‘銆�");
+        }
+        jkKeys.setRfidLable(lable);
         LoginUserInfo loginUserInfo = jkKeys.getLoginUserInfo();
         jkKeys.setCreateDate(new Date());
         jkKeys.setEditDate(jkKeys.getCreateDate());
@@ -114,10 +119,15 @@
                 || Objects.isNull(jkKeys.getCarId())
                 || Objects.isNull(jkKeys.getRoleType())
                 || StringUtils.isBlank(jkKeys.getCode())
-                || StringUtils.isBlank(jkKeys.getRfidLable())
+                || StringUtils.isBlank(jkKeys.getRfidCode())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        String lable = Constants.getRFIDNumber(jkKeys.getRfidCode());
+        if(StringUtils.isEmpty(lable)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"RFID鏍囩璁剧疆澶辫触銆愭牸寮忎笉姝g‘銆�");
+        }
+        jkKeys.setRfidLable(lable);
         //鏌ヨ缂栧彿鏄惁閲嶅
         if(jkKeysMapper.selectCount(new QueryWrapper<JkKeys>().lambda().ne(JkKeys::getId,jkKeys.getId()).eq(JkKeys::getCode,jkKeys.getCode()).eq(JkKeys::getIsdeleted,Constants.ZERO))>Constants.ZERO){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閽ュ寵缂栧彿宸插瓨鍦紒");
@@ -134,6 +144,7 @@
         if(Objects.nonNull(rfidKeys)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠RFID鏍囩宸茶閽ュ寵["+rfidKeys.getCode()+"]浣跨敤锛�");
         }
+
         LoginUserInfo loginUserInfo = jkKeys.getLoginUserInfo();
         jkKeys.setEditDate(new Date());
         jkKeys.setEditor(loginUserInfo.getId());

--
Gitblit v1.9.3