Commit dec6dc50 authored by 王夏晖's avatar 王夏晖

完善连接网关,发送指令

parent 3c5affeb
...@@ -11,6 +11,9 @@ import org.springframework.web.bind.annotation.GetMapping; ...@@ -11,6 +11,9 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/** /**
* 命令操作activity * 命令操作activity
* @author David * @author David
...@@ -37,7 +40,11 @@ public class InstructionsController { ...@@ -37,7 +40,11 @@ public class InstructionsController {
login[5] = 0x05; login[5] = 0x05;
login[6] = 0x06; login[6] = 0x06;
login[7] = 0x2a; login[7] = 0x2a;
String result = SocketUtils.connectServerWithTCPSocket(login, 1); String ip = getIp(phoneNumber);
if(ip==null){
return GenResponse.fail("网关ip获取失败");
}
String result = SocketUtils.connectServerWithTCPSocket(login, 1,ip,9999);
if("01".equals(result)) { if("01".equals(result)) {
return GenResponse.success("1", "登录成功", true); return GenResponse.success("1", "登录成功", true);
} else if("00".equals(result)) { } else if("00".equals(result)) {
...@@ -61,12 +68,16 @@ public class InstructionsController { ...@@ -61,12 +68,16 @@ public class InstructionsController {
open[0] = 0x54; open[0] = 0x54;
open[1] = 0x59; open[1] = 0x59;
open[2] = 0x54; open[2] = 0x54;
open[3] = 0x01; open[3] = 0x00;
open[4] = 0x01; open[4] = 0x01;
open[5] = 0x00; open[5] = 0x00;
open[6] = Byte.valueOf("0x" + number); open[6] = 0x01;
open[7] = 0x2d; open[7] = 0x2d;
String result = SocketUtils.connectServerWithTCPSocket(open, 1); String ip = getIp(phoneNumber);
if(ip==null){
return GenResponse.fail("网关ip获取失败");
}
String result = SocketUtils.connectServerWithTCPSocket(open, 1,ip,9999);
if("01".equals(result)) { if("01".equals(result)) {
return GenResponse.success("1", "开锁成功", true); return GenResponse.success("1", "开锁成功", true);
} else if("00".equals(result)) { } else if("00".equals(result)) {
...@@ -94,9 +105,13 @@ public class InstructionsController { ...@@ -94,9 +105,13 @@ public class InstructionsController {
open[3] = 0x01; open[3] = 0x01;
open[4] = 0x01; open[4] = 0x01;
open[5] = 0x00; open[5] = 0x00;
open[6] = Byte.valueOf("0x" + number); open[6] = 0x01;
open[7] = 0x01; open[7] = 0x01;
String result = SocketUtils.connectServerWithTCPSocket(open, 1); String ip = getIp(phoneNumber);
if(ip==null){
return GenResponse.fail("网关ip获取失败");
}
String result = SocketUtils.connectServerWithTCPSocket(open, 1,ip,9999);
if("01".equals(result)) { if("01".equals(result)) {
return GenResponse.success("1", "安防码学习成功", true); return GenResponse.success("1", "安防码学习成功", true);
} else if("00".equals(result)) { } else if("00".equals(result)) {
...@@ -109,4 +124,46 @@ public class InstructionsController { ...@@ -109,4 +124,46 @@ public class InstructionsController {
} }
} }
@GetMapping("/securityCancel")
public ResponseEntity<Boolean> securityCancel(String phoneNumber, String number) {
if(number.length() < 2) {
number = "0" + number;
}
User user = userService.getByPhoneNumber(phoneNumber);
if(user != null) {
byte[] open = new byte[8];
open[0] = 0x54;
open[1] = 0x59;
open[2] = 0x54 ;
open[3] = 0x30;
open[4] = 0x01;
open[5] = 0x00;
open[6] = 0x00;
open[7] = (byte)0xF1;
String ip = getIp(phoneNumber);
if(ip==null){
return GenResponse.fail("网关ip获取失败");
}
String result = SocketUtils.connectServerWithTCPSocket(open, 1,ip,9999);
if("01".equals(result)) {
return GenResponse.success("1", "撤防成功", true);
} else if("00".equals(result)) {
return GenResponse.fail("撤防失败");
} else {
return GenResponse.fail("撤防失败");
}
} else {
return GenResponse.fail("撤防失败");
}
}
public String getIp(String phone){
List<Map<String,Object>> list = userService.queryIpByUser(phone);
if(list!=null){
return list.get(0).get("ip")!=null?list.get(0).get("ip").toString():null;
}
return null;
}
} }
...@@ -14,4 +14,6 @@ public interface GatewayDao extends BaseDao<Gateway> { ...@@ -14,4 +14,6 @@ public interface GatewayDao extends BaseDao<Gateway> {
*/ */
Gateway getByPhoneNumber(String phoneNumber); Gateway getByPhoneNumber(String phoneNumber);
void updateIpByMac(Gateway gateway);
} }
...@@ -7,6 +7,9 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -7,6 +7,9 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
/** /**
* *
* <br> * <br>
...@@ -18,4 +21,6 @@ public interface UserDao extends BaseDao<User> { ...@@ -18,4 +21,6 @@ public interface UserDao extends BaseDao<User> {
@Select("SELECT * FROM tb_user WHERE temphone = #{phoneNumber}") @Select("SELECT * FROM tb_user WHERE temphone = #{phoneNumber}")
User getUserByPhoneNumber(@Param("phoneNumber") String phoneNumber); User getUserByPhoneNumber(@Param("phoneNumber") String phoneNumber);
List<Map<String,Object>> queryIpByUser(@Param("phone") String phone);
} }
...@@ -36,4 +36,8 @@ public class GatewayService extends BaseService<Gateway, String> { ...@@ -36,4 +36,8 @@ public class GatewayService extends BaseService<Gateway, String> {
} }
return flag; return flag;
} }
public void updateIpByMac(Gateway gateway){
dao.updateIpByMac(gateway);
}
} }
...@@ -9,6 +9,7 @@ import com.adc.da.znks.entity.User; ...@@ -9,6 +9,7 @@ import com.adc.da.znks.entity.User;
import com.adc.da.znks.page.UserPage; import com.adc.da.znks.page.UserPage;
import com.adc.da.znks.util.SecurityUtils; import com.adc.da.znks.util.SecurityUtils;
import org.apache.http.util.Asserts; import org.apache.http.util.Asserts;
import org.apache.ibatis.annotations.Param;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -18,7 +19,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -18,7 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <br> * <br>
...@@ -43,7 +44,7 @@ public class UserService extends BaseService<User, String> { ...@@ -43,7 +44,7 @@ public class UserService extends BaseService<User, String> {
public Boolean getUserByPhoneNumber(String phoneNumber) { public Boolean getUserByPhoneNumber(String phoneNumber) {
Boolean flag = false; Boolean flag = false;
User user = dao.getUserByPhoneNumber(phoneNumber); User user = dao.getUserByPhoneNumber(phoneNumber);
if (user != null) { if(user != null) {
flag = true; flag = true;
} }
return flag; return flag;
...@@ -60,29 +61,19 @@ public class UserService extends BaseService<User, String> { ...@@ -60,29 +61,19 @@ public class UserService extends BaseService<User, String> {
public boolean updatePassword(User user) { public boolean updatePassword(User user) {
List<String> encryptList = encryptList(user.getPlainPassword()); List<String> encryptList = encryptList(user.getPlainPassword());
Asserts.notNull(encryptList, "encrypt list must not be null."); Asserts.notNull(encryptList, "encrypt list must not be null.");
user.setEncryptkey(encryptList.get(0));
user.setPassword(encryptList.get(1));
UserPage userPage = new UserPage(); UserPage userPage = new UserPage();
userPage.setTemphone(user.getTemphone()); user.setTemphone(user.getTemphone());
List<User> users = dao.queryByList(userPage); User findUser = dao.queryByList(userPage).get(0);
if (CollectionUtils.isEmpty(users)) {//通过验证码登录时,用户不存在,新增用户 User updateUser = new User();
user.setId(UUID.randomUUID()); updateUser.setPassword(encryptList.get(1));
user.setPassword(encryptList.get(1)); updateUser.setEncryptkey(encryptList.get(0));
user.setEncryptkey(encryptList.get(0)); int result = dao.updateByPrimaryKeySelective(updateUser);
dao.insert(user); if (result != 0) {
return true; return true;
} else { } else {
// return false;
User findUser = dao.queryByList(userPage).get(0);
logger.info("findUser: {}", findUser);
User updateUser = new User();
updateUser.setPassword(encryptList.get(1));
updateUser.setEncryptkey(encryptList.get(0));
updateUser.setId(findUser.getId());
int result = dao.updateByPrimaryKeySelective(updateUser);
if (result != 0) {
return true;
} else {
return false;
}
} }
} }
...@@ -133,4 +124,8 @@ public class UserService extends BaseService<User, String> { ...@@ -133,4 +124,8 @@ public class UserService extends BaseService<User, String> {
} }
public List<Map<String,Object>> queryIpByUser(String phone){
return dao.queryIpByUser(phone);
}
} }
...@@ -21,13 +21,12 @@ public class SocketUtils { ...@@ -21,13 +21,12 @@ public class SocketUtils {
public static String connectServerWithTCPSocket(byte[] msg, int resultLength) { public static String connectServerWithTCPSocket(byte[] msg, int resultLength,String host,int port) {
String hex = null; String hex = null;
Socket socket = null; Socket socket = null;
//创建socket //创建socket
try { try {
socket = new Socket("127.0.0.1", 9999);//ip+端口号 socket = new Socket(host, port);//ip+端口号
//socket = new Socket("10.10.100.254", 8899);//ip+端口号
System.out.println("socket连接成功"); System.out.println("socket连接成功");
//向服务器端发送消息 //向服务器端发送消息
...@@ -84,6 +83,18 @@ public class SocketUtils { ...@@ -84,6 +83,18 @@ public class SocketUtils {
} }
public static void main(String[] args) { public static void main(String[] args) {
byte[] request = new byte[23];
request[0] = 0x4d;
request[1] = 0x41;
request[2] = 0x43;
request[3] = 0x5F;
request[4] = 0x52;
request[5] = 0x45;
request[6] = 0x51;
request[7] = 0x55;
request[8] = 0x45;
request[9] = 0x53;
request[10] = 0x54;
// 登录码 // 登录码
byte[] login = new byte[8]; byte[] login = new byte[8];
...@@ -95,7 +106,7 @@ public class SocketUtils { ...@@ -95,7 +106,7 @@ public class SocketUtils {
login[5] = 0x05; // 第5位密码 login[5] = 0x05; // 第5位密码
login[6] = 0x06; // 第6位密码 login[6] = 0x06; // 第6位密码
login[7] = 0x2a; // 尾 login[7] = 0x2a; // 尾
//connectServerWithTCPSocket(login); connectServerWithTCPSocket(login,1,"127.0.0.1",9999);
// 门锁安防码学习 // 门锁安防码学习
byte[] device = new byte[8]; byte[] device = new byte[8];
...@@ -107,7 +118,7 @@ public class SocketUtils { ...@@ -107,7 +118,7 @@ public class SocketUtils {
device[5] = 0x00; // 房间码 device[5] = 0x00; // 房间码
device[6] = 0x00; // 设备编码 device[6] = 0x00; // 设备编码
device[7] = 0x01; // 功能码 安防码学习默认01 device[7] = 0x01; // 功能码 安防码学习默认01
connectServerWithTCPSocket(device, 8); //connectServerWithTCPSocket(device, 8);
// 门锁设备码学习/ 开锁指令 // 门锁设备码学习/ 开锁指令
byte[] open = new byte[8]; byte[] open = new byte[8];
......
package com.adc.da.znks.util.netty; package com.adc.da.znks.util.netty;
import com.adc.da.znks.util.SocketUtils;
import io.netty.bootstrap.ServerBootstrap; import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelInitializer;
...@@ -7,6 +8,8 @@ import io.netty.channel.EventLoopGroup; ...@@ -7,6 +8,8 @@ import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.bytes.ByteArrayDecoder;
import io.netty.handler.codec.bytes.ByteArrayEncoder;
public class NettyServer { public class NettyServer {
private final int port; private final int port;
...@@ -26,8 +29,15 @@ public class NettyServer { ...@@ -26,8 +29,15 @@ public class NettyServer {
@Override @Override
protected void initChannel(SocketChannel ch) throws Exception { protected void initChannel(SocketChannel ch) throws Exception {
System.out.println("connected...; Client:" + ch.remoteAddress()); System.out.println("connected...; Client:" + ch.remoteAddress().getHostString());
//發送請求指令
connectGateway(ch.remoteAddress().getHostString(),8899);
ch.pipeline().addLast(new ByteArrayEncoder());
ch.pipeline().addLast(new ByteArrayDecoder());
ch.pipeline().addLast(new ServerHandler()); // 客户端触发操作 ch.pipeline().addLast(new ServerHandler()); // 客户端触发操作
} }
}); });
ChannelFuture cf = sb.bind().sync(); // 服务器异步创建绑定 ChannelFuture cf = sb.bind().sync(); // 服务器异步创建绑定
...@@ -37,4 +47,20 @@ public class NettyServer { ...@@ -37,4 +47,20 @@ public class NettyServer {
group.shutdownGracefully().sync(); // 释放线程池资源 group.shutdownGracefully().sync(); // 释放线程池资源
} }
} }
public void connectGateway(String host,int port){
byte[] request = new byte[23];
request[0] = 0x4d;
request[1] = 0x41;
request[2] = 0x43;
request[3] = 0x5F;
request[4] = 0x52;
request[5] = 0x45;
request[6] = 0x51;
request[7] = 0x55;
request[8] = 0x45;
request[9] = 0x53;
request[10] = 0x54;
SocketUtils.connectServerWithTCPSocket(request,1,host,port);
}
} }
\ No newline at end of file
package com.adc.da.znks.util.netty; package com.adc.da.znks.util.netty;
import com.adc.da.znks.entity.Gateway;
import com.adc.da.znks.service.GatewayService;
import com.adc.da.znks.service.UserService;
import com.adc.da.znks.util.SocketUtils;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerAdapter;
import oracle.jdbc.proxy.annotation.Post;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ServerHandler extends ChannelInboundHandlerAdapter { public class ServerHandler extends ChannelInboundHandlerAdapter {
@Autowired
private GatewayService gatewayService;
public static ServerHandler serverHandler;
@PostConstruct
public void init(){
serverHandler = this;
serverHandler.gatewayService = this.gatewayService;
}
@Override @Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.out.println("server channelRead...; received:" + msg); System.out.println("server channelRead...; received:" + msg);
System.out.println(convertByteBufToString((ByteBuf) msg)); String remoteAddress = ctx.channel().remoteAddress().toString();
String host = remoteAddress.substring(1,remoteAddress.lastIndexOf(":"));
System.out.println("网关IP地址:" + host);
byte[] result = (byte[])msg;
System.out.println(SocketUtils.bytesToHex(result,0,result.length));
String mac = SocketUtils.bytesToHex(result,0,result.length);
Gateway gateway = new Gateway();
gateway.setIp(host);
gateway.setMacAddress(mac);
serverHandler.gatewayService.updateIpByMac(gateway);
//ctx.write(msg); //ctx.write(msg);
} }
......
...@@ -40,4 +40,8 @@ ...@@ -40,4 +40,8 @@
and tb_user.temphone = #{phoneNumber} and tb_user.temphone = #{phoneNumber}
</select> </select>
<update id="updateIpByMac" parameterType="com.adc.da.znks.entity.Gateway">
update tb_gateway set ip = #{ip} where mac_address = #{macAddress}
</update>
</mapper> </mapper>
...@@ -137,4 +137,9 @@ ...@@ -137,4 +137,9 @@
</if> </if>
</select> </select>
<select id="queryIpByUser" resultType="java.util.Map" parameterType="java.util.Map">
select way.ip from tb_user ur,tb_gateway way where ur.id = way.user_id
and ur.temphone = #{phone}
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment