5 Commits 4223afb63c ... e98c297087

Author SHA1 Message Date
  zhangqian e98c297087 controller返回格式调整 1 year ago
  zhangqian 02d8d2ffb5 合并pom文件冲突 1 year ago
  zhangqian 1151604e1e 日志调整 1 year ago
  zhangqian a89bec72f1 修改门禁控制代码 1 year ago
  zhangqian fb8e829a73 登录更新设备状态 1 year ago

+ 8 - 0
pom.xml

@@ -80,6 +80,14 @@
             <version>2.6.2</version>
         </dependency>
 
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.20</version>
+            <scope>provided</scope>
+        </dependency>
+
         <!-- for video updated -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 17 - 10
src/main/java/com/greentech/gateservice/controller/GateController.java

@@ -1,11 +1,14 @@
 package com.greentech.gateservice.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.greentech.gateservice.util.LoginModule;
 import com.netsdk.common.Res;
 import com.netsdk.lib.NetSDKLib;
 import com.netsdk.lib.ToolKits;
 import com.sun.jna.Memory;
 import com.sun.jna.Pointer;
+import com.greentech.gateservice.util.Resonse;
+import org.apache.http.HttpResponse;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
@@ -15,7 +18,8 @@ import javax.swing.*;
 @RestController
 public class GateController {
     @RequestMapping("/open/door")
-    public String openDoor(@RequestParam String sn){
+    public JSONObject openDoor(@RequestParam String sn){
+
         NetSDKLib.NET_CTRL_ACCESS_OPEN openInfo = new NetSDKLib.NET_CTRL_ACCESS_OPEN();
         openInfo.nChannelID = 0;
         openInfo.emOpenDoorType = NetSDKLib.EM_OPEN_DOOR_TYPE.EM_OPEN_DOOR_TYPE_REMOTE;
@@ -30,24 +34,27 @@ public class GateController {
                 //获取handle句柄和设备信息
                 NetSDKLib.NET_DEVICEINFO_Ex value = LoginModule.m_stDeviceInfo.get(key);
                 String deviceSn = new String(value.sSerialNumber);
-                if (deviceSn.equals(sn)) {
+                System.out.println("内存sn:"+deviceSn+"传入sn:"+sn);
+                boolean f = deviceSn.trim().equalsIgnoreCase(sn.trim());
+                System.out.println(f);
+                if (f) {
                     boolean ret = LoginModule.netsdk.CLIENT_ControlDeviceEx(key,
                             NetSDKLib.CtrlType.CTRLTYPE_CTRL_ACCESS_OPEN, pointer, null, 10000);
                     if (!ret) {
                         JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
                                 JOptionPane.ERROR_MESSAGE);
-                        return "开门失败";
+                        return Resonse.ResponseError("开门失败");
                     }
-                    return "开门成功";
+                    return Resonse.ResponseSuccess("开门成功");
                 }
 
             }
         }
-        return "未发现设备";
+        return Resonse.ResponseError("未发现设备");
     }
 
     @RequestMapping("/close/door")
-    public String closeDoor(@RequestParam String sn){
+    public JSONObject closeDoor(@RequestParam String sn){
         final NetSDKLib.NET_CTRL_ACCESS_CLOSE close = new NetSDKLib.NET_CTRL_ACCESS_CLOSE();
         close.nChannelID = 0; // 对应的门编号 - 如何开全部的门
         close.write();
@@ -58,19 +65,19 @@ public class GateController {
                 //获取handle句柄和设备信息
                 NetSDKLib.NET_DEVICEINFO_Ex value = LoginModule.m_stDeviceInfo.get(key);
                 String deviceSn = new String(value.sSerialNumber);
-                if (deviceSn.equals(sn)) {
+                if (deviceSn.trim().equalsIgnoreCase(sn.trim())) {
                     boolean result = LoginModule.netsdk.CLIENT_ControlDeviceEx(key,
                             NetSDKLib.CtrlType.CTRLTYPE_CTRL_ACCESS_CLOSE, close.getPointer(), null, 5000);
                     close.read();
                     if (!result) {
                         JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
                                 JOptionPane.ERROR_MESSAGE);
-                        return "关门失败";
+                        return Resonse.ResponseError("关门失败");
                     }
-                    return "关门成功";
+                    return Resonse.ResponseError("关门成功");
                 }
             }
         }
-        return "未发现设备";
+        return Resonse.ResponseError("未发现设备");
     }
 }

+ 40 - 5
src/main/java/com/greentech/gateservice/init/BatchLogin.java

@@ -3,7 +3,9 @@ package com.greentech.gateservice.init;
 import com.greentech.gateservice.entity.GateInfo;
 import com.greentech.gateservice.entity.GateInfoImpl;
 import com.greentech.gateservice.mapper.GateInfoMapper;
+import lombok.Data;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -13,33 +15,66 @@ import com.sun.jna.Pointer;
 import java.util.List;
 
 @Component
+@Data
 @RequestMapping("crud")
 public class BatchLogin implements CommandLineRunner {
     @Autowired
     GateInfoMapper crudMapper;
 
+    @Value("${customer.project}")
+    private int project;
+
     @Override
     public void run(String... args) throws Exception {
         System.out.println("--初始化设备连接开始--");
-
         LoginModule.init(new NetSDKLib.fDisConnect() {
             @Override
             public void invoke(NetSDKLib.LLong lLong, String s, int i, Pointer pointer) {
-                //连接删除map配置 需考虑加锁 同步更新数据库状态
-                //LoginModule.m_stDeviceInfo.remove(lLong);
+                synchronized(LoginModule.lock) {
+                    for (NetSDKLib.LLong key : LoginModule.m_stDeviceInfo.keySet()) {
+
+                        //获取handle句柄和设备信息
+                        NetSDKLib.NET_DEVICEINFO_Ex value = LoginModule.m_stDeviceInfo.get(key);
+                        String deviceSn = new String(value.sSerialNumber);
+                        if (lLong.longValue() == key.longValue()) {
+                            //先查询单条设备信息
+                            GateInfoImpl gateImpl = new GateInfoImpl();
+                            GateInfoImpl.Criteria c = gateImpl.createCriteria();
+                            c.andSerialNumEqualTo(deviceSn);
+                            List<GateInfo> list = crudMapper.selectByExample(gateImpl);
+                            if (list.isEmpty()) {
+                                System.err.println("未查询到设备信息");
+                            }
+                            GateInfo g = list.get(0);
+                            byte b = 0;
+                            g.setStatus(b);
+                            crudMapper.updateByPrimaryKey(g);
+                            break;
+                        }
+                    }
+                    LoginModule.m_stDeviceInfo.remove(lLong);
+                }
             }
         }, new NetSDKLib.fHaveReConnect() {
             @Override
             public void invoke(NetSDKLib.LLong lLong, String s, int i, Pointer pointer) {
                 //重新连接写入map 配置 更新数据库状态
+                System.out.println("断线重连:"+s);
             }
         });
         //查询所有的门禁设备 并登录
         GateInfoImpl gateImpl = new GateInfoImpl();
+        GateInfoImpl.Criteria criteria = gateImpl.createCriteria();
+        criteria.andProjectIdEqualTo(project);
         List<GateInfo> list = crudMapper.selectByExample(gateImpl);
         for (GateInfo row: list) {
-            System.out.println(row.getIp());
-            LoginModule.login(row.getIp(),row.getPort(),row.getUserName(),row.getPassword());
+            boolean flag = LoginModule.login(row.getIp(),row.getPort(),row.getUserName(),row.getPassword());
+            if (flag) {
+                System.out.println("--设备连接成功--");
+                byte b = 1;
+                row.setStatus(b);
+                crudMapper.updateByPrimaryKey(row);
+            }
         }
         System.out.println("--初始化设备连接结束--");
     }

+ 27 - 5
src/main/java/com/greentech/gateservice/task/GateLogService.java

@@ -7,7 +7,11 @@ import com.netsdk.common.Res;
 import com.netsdk.lib.NetSDKLib;
 import com.netsdk.lib.ToolKits;
 import com.sun.jna.Memory;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestMapping;
 
@@ -19,11 +23,18 @@ import java.util.Calendar;
 import java.util.Date;
 
 @RequestMapping("crud")
+@Data
+@Component
 @Service
 public class GateLogService {
+
+    @Autowired
     GateOplogMapper gateOplogMapper;
 
-    @Scheduled(cron = "0 * * * * *")
+    @Value("${customer.project}")
+    private int project;
+
+    @Scheduled(cron = "0 0 * * * *")
     public void syncLog() {
         System.out.println("--开始执行日志查询同步任务--");
         String format = "yyyy-MM-dd HH:mm:ss";
@@ -32,9 +43,9 @@ public class GateLogService {
         LocalDateTime now = LocalDateTime.now();
         LocalDateTime startTime = now.minusHours(1);
         NetSDKLib.NET_TIME s = new NetSDKLib.NET_TIME();
-        s.setTime(startTime.getYear(),startTime.getMonthValue(),startTime.getDayOfMonth(),0,0,0);
+        s.setTime(startTime.getYear(),startTime.getMonthValue(),startTime.getDayOfMonth(),startTime.getHour(),0,0);
         NetSDKLib.NET_TIME e = new NetSDKLib.NET_TIME();
-        e.setTime(startTime.getYear(),startTime.getMonthValue(),startTime.getDayOfMonth(),23,59,59);
+        e.setTime(startTime.getYear(),startTime.getMonthValue(),startTime.getDayOfMonth(),startTime.getHour(),59,59);
 
         synchronized(LoginModule.lock){
             for (NetSDKLib.LLong key : LoginModule.m_stDeviceInfo.keySet()) {
@@ -82,6 +93,7 @@ public class GateLogService {
                 System.out.println("CLIENT_FindNextRecord success!");
                 ToolKits.GetPointerDataToStructArr(outNextParam.pRecordList, rets);
 
+                System.out.println("开始时间:"+s.toStringTimeEx() + "结束时间:"+e.toStringTimeEx());
                 System.out.println("查询到的结果数量:"+outNextParam.nRetRecordNum+"最大数量:"+outNextParam.nMaxRecordNum);
                 for (int i = 0; i < outNextParam.nRetRecordNum; i++) {
                     String szCardName = new String(rets[i].szCardName);
@@ -91,10 +103,16 @@ public class GateLogService {
                     //bStatus 开门结果
                     GateOplog opLog = new GateOplog();
                     opLog.setGateName("");
-                    opLog.setProjectId(0);
+                    opLog.setProjectId(project);
                     opLog.setUserName(szCardName);
                     opLog.setEventType(openMethod);
-                    opLog.setStatus("");
+                    if (rets[i].emDirection == NetSDKLib.NET_ENUM_DIRECTION_ACCESS_CTL.NET_ENUM_DIRECTION_ENTRY) {
+                        opLog.setStatus("进门");
+                    } else if (rets[i].emDirection ==  NetSDKLib.NET_ENUM_DIRECTION_ACCESS_CTL.NET_ENUM_DIRECTION_EXIT) {
+                        opLog.setStatus("出门");
+                    } else {
+                        opLog.setStatus("");
+                    }
                     opLog.setSerialNum(new String(value.sSerialNumber));
 
                     Date d = new Date();
@@ -104,6 +122,10 @@ public class GateLogService {
                         System.err.println("解析时间发生错误: " + excep.getMessage());
                     }
                     opLog.setCreatedTime(d);
+                    opLog.setCheckType("");
+                    byte isDelete = 0;
+                    opLog.setIsDelete(isDelete);
+
                     gateOplogMapper.insert(opLog);
                 }
                 //断开查询句柄

+ 1 - 0
src/main/java/com/greentech/gateservice/util/LoginModule.java

@@ -100,6 +100,7 @@ public class LoginModule {
         } else {
             //维护登录设备和句柄信息
             m_stDeviceInfo.put(singleLoginHandle,deviceInnfo);
+            System.out.println(new String(deviceInnfo.sSerialNumber));
             System.out.println("Login Success [ " + m_strIp + " ]");
             return true;
         }

+ 21 - 0
src/main/java/com/greentech/gateservice/util/Resonse.java

@@ -0,0 +1,21 @@
+package com.greentech.gateservice.util;
+
+import com.alibaba.fastjson.JSONObject;
+import jdk.nashorn.internal.runtime.regexp.JoniRegExp;
+
+public class Resonse {
+    public static JSONObject ResponseSuccess(Object data) {
+        JSONObject o = new JSONObject();
+        o.put("code",200);
+        o.put("msg","操作成功");
+        o.put("data",data);
+        return o;
+    }
+    public static JSONObject ResponseError(Object data) {
+        JSONObject o = new JSONObject();
+        o.put("code",200);
+        o.put("msg","操作失败");
+        o.put("data",data);
+        return o;
+    }
+}

+ 4 - 1
src/main/resources/application-dev.yml

@@ -5,4 +5,7 @@ spring:
     url: jdbc:mysql://47.96.12.136:33069/ws_iot?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false
     username: root
     password: PXDN93VRKU221107
-    driver-class-name: com.mysql.cj.jdbc.Driver
+    driver-class-name: com.mysql.cj.jdbc.Driver
+
+customer:
+  project: 92