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

完善连接网关,发送指令

parent 3c5affeb
......@@ -11,6 +11,9 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* 命令操作activity
* @author David
......@@ -37,7 +40,11 @@ public class InstructionsController {
login[5] = 0x05;
login[6] = 0x06;
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)) {
return GenResponse.success("1", "登录成功", true);
} else if("00".equals(result)) {
......@@ -61,12 +68,16 @@ public class InstructionsController {
open[0] = 0x54;
open[1] = 0x59;
open[2] = 0x54;
open[3] = 0x01;
open[3] = 0x00;
open[4] = 0x01;
open[5] = 0x00;
open[6] = Byte.valueOf("0x" + number);
open[6] = 0x01;
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)) {
return GenResponse.success("1", "开锁成功", true);
} else if("00".equals(result)) {
......@@ -94,9 +105,13 @@ public class InstructionsController {
open[3] = 0x01;
open[4] = 0x01;
open[5] = 0x00;
open[6] = Byte.valueOf("0x" + number);
open[6] = 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)) {
return GenResponse.success("1", "安防码学习成功", true);
} else if("00".equals(result)) {
......@@ -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> {
*/
Gateway getByPhoneNumber(String phoneNumber);
void updateIpByMac(Gateway gateway);
}
......@@ -7,6 +7,9 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
/**
*
* <br>
......@@ -18,4 +21,6 @@ public interface UserDao extends BaseDao<User> {
@Select("SELECT * FROM tb_user WHERE temphone = #{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> {
}
return flag;
}
public void updateIpByMac(Gateway gateway){
dao.updateIpByMac(gateway);
}
}
......@@ -9,6 +9,7 @@ import com.adc.da.znks.entity.User;
import com.adc.da.znks.page.UserPage;
import com.adc.da.znks.util.SecurityUtils;
import org.apache.http.util.Asserts;
import org.apache.ibatis.annotations.Param;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -18,7 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* <br>
......@@ -43,7 +44,7 @@ public class UserService extends BaseService<User, String> {
public Boolean getUserByPhoneNumber(String phoneNumber) {
Boolean flag = false;
User user = dao.getUserByPhoneNumber(phoneNumber);
if (user != null) {
if(user != null) {
flag = true;
}
return flag;
......@@ -60,29 +61,19 @@ public class UserService extends BaseService<User, String> {
public boolean updatePassword(User user) {
List<String> encryptList = encryptList(user.getPlainPassword());
Asserts.notNull(encryptList, "encrypt list must not be null.");
user.setEncryptkey(encryptList.get(0));
user.setPassword(encryptList.get(1));
UserPage userPage = new UserPage();
userPage.setTemphone(user.getTemphone());
List<User> users = dao.queryByList(userPage);
if (CollectionUtils.isEmpty(users)) {//通过验证码登录时,用户不存在,新增用户
user.setId(UUID.randomUUID());
user.setPassword(encryptList.get(1));
user.setEncryptkey(encryptList.get(0));
dao.insert(user);
user.setTemphone(user.getTemphone());
User findUser = dao.queryByList(userPage).get(0);
User updateUser = new User();
updateUser.setPassword(encryptList.get(1));
updateUser.setEncryptkey(encryptList.get(0));
int result = dao.updateByPrimaryKeySelective(updateUser);
if (result != 0) {
return true;
} else {
//
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;
}
return false;
}
}
......@@ -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 {
public static String connectServerWithTCPSocket(byte[] msg, int resultLength) {
public static String connectServerWithTCPSocket(byte[] msg, int resultLength,String host,int port) {
String hex = null;
Socket socket = null;
//创建socket
try {
socket = new Socket("127.0.0.1", 9999);//ip+端口号
//socket = new Socket("10.10.100.254", 8899);//ip+端口号
socket = new Socket(host, port);//ip+端口号
System.out.println("socket连接成功");
//向服务器端发送消息
......@@ -84,6 +83,18 @@ public class SocketUtils {
}
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];
......@@ -95,7 +106,7 @@ public class SocketUtils {
login[5] = 0x05; // 第5位密码
login[6] = 0x06; // 第6位密码
login[7] = 0x2a; // 尾
//connectServerWithTCPSocket(login);
connectServerWithTCPSocket(login,1,"127.0.0.1",9999);
// 门锁安防码学习
byte[] device = new byte[8];
......@@ -107,7 +118,7 @@ public class SocketUtils {
device[5] = 0x00; // 房间码
device[6] = 0x00; // 设备编码
device[7] = 0x01; // 功能码 安防码学习默认01
connectServerWithTCPSocket(device, 8);
//connectServerWithTCPSocket(device, 8);
// 门锁设备码学习/ 开锁指令
byte[] open = new byte[8];
......
package com.adc.da.znks.util.netty;
import com.adc.da.znks.util.SocketUtils;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
......@@ -7,6 +8,8 @@ import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.bytes.ByteArrayDecoder;
import io.netty.handler.codec.bytes.ByteArrayEncoder;
public class NettyServer {
private final int port;
......@@ -26,8 +29,15 @@ public class NettyServer {
@Override
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()); // 客户端触发操作
}
});
ChannelFuture cf = sb.bind().sync(); // 服务器异步创建绑定
......@@ -37,4 +47,20 @@ public class NettyServer {
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;
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.Unpooled;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
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 {
@Autowired
private GatewayService gatewayService;
public static ServerHandler serverHandler;
@PostConstruct
public void init(){
serverHandler = this;
serverHandler.gatewayService = this.gatewayService;
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
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);
}
......
......@@ -40,4 +40,8 @@
and tb_user.temphone = #{phoneNumber}
</select>
<update id="updateIpByMac" parameterType="com.adc.da.znks.entity.Gateway">
update tb_gateway set ip = #{ip} where mac_address = #{macAddress}
</update>
</mapper>
......@@ -137,4 +137,9 @@
</if>
</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>
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