From a08f28be2302ce139aecb34765296e2b47afd129 Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Thu, 04 Mar 2021 00:05:36 +0800
Subject: [PATCH] 体温数据插入
---
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/MyNettyDecode.java | 126 +++++++++++++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServer.java | 92 +++++++++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/ParseString.java | 14 +
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/impl/AnimalHeatServiceImpl.java | 39 ++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java | 6
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/NettyProPool.java | 53 ++++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/entity/BladeAnimalHeat.java | 4
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServerHandler.java | 105 +++++++++++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/NettyConstant.java | 12 +
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/AnimalHeatService.java | 10 +
10 files changed, 456 insertions(+), 5 deletions(-)
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java
index 3134d19..9aa3a84 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/JfptApplication.java
@@ -19,6 +19,7 @@
import org.springblade.core.cloud.feign.EnableBladeFeign;
import org.springblade.core.launch.BladeApplication;
import org.springblade.jfpt.nettyServer.Server;
+import org.springblade.jfpt.nettyTcpServer.TcpServer;
import org.springblade.jfpt.nettyUdpServer.server.UdpServer;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -39,8 +40,9 @@
@Override
public void run(String... args) throws Exception {
- Server server=new Server(8088);
- UdpServer udpServer=new UdpServer(8099);
+ //Server server=new Server(8088);
+ TcpServer server=new TcpServer(8088);
+ //UdpServer udpServer=new UdpServer(8099);
}
}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/MyNettyDecode.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/MyNettyDecode.java
new file mode 100644
index 0000000..e78319f
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/MyNettyDecode.java
@@ -0,0 +1,126 @@
+package org.springblade.jfpt.nettyTcpServer;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ */
+public class MyNettyDecode extends ByteToMessageDecoder {
+ public final int BASE_LENGTH = 4 + 4 ;
+
+// @Override
+// protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
+// System.out.println("byteBuf = " + byteBuf.readableBytes());
+// // 可读长度必须大于基本长度
+// if (byteBuf.readableBytes() >= BASE_LENGTH) {
+// // 防止socket字节流攻击
+// // 防止,客户端传来的数据过大
+// // 因为,太大的数据,是不合理的
+// if (byteBuf.readableBytes() > 202048) {
+// byteBuf.skipBytes(byteBuf.readableBytes());
+// }
+//
+// // 记录包头开始的index
+// int beginReader;
+//
+// while (true) {
+// // 获取包头开始的index
+// beginReader = byteBuf.readerIndex();
+// // 标记包头开始的index
+// byteBuf.markReaderIndex();
+// // 读到了协议的开始标志,结束while循环
+// if (byteBuf.readInt() == NettyConstant.HEAD_DATA) {
+// break;
+// }
+//
+// // 未读到包头,略过一个字节
+// // 每次略过,一个字节,去读取,包头信息的开始标记
+// byteBuf.resetReaderIndex();
+// byteBuf.readByte();
+//
+// // 当略过,一个字节之后,
+// // 数据包的长度,又变得不满足
+// // 此时,应该结束。等待后面的数据到达
+// if (byteBuf.readableBytes() < BASE_LENGTH) {
+// return;
+// }
+// }
+//
+// // 消息的长度
+//
+// int length = byteBuf.readInt();
+// // 判断请求数据包数据是否到齐
+// if (byteBuf.readableBytes() < length) {
+// // 还原读指针
+// byteBuf.readerIndex(beginReader);
+// return;
+// }
+//
+// // 读取data数据
+// byte[] data = new byte[length];
+// byteBuf.readBytes(data);
+// System.out.println("byteBuf末尾 = " + byteBuf);
+//
+// NettyProPool protocol = new NettyProPool(data.length, data);
+// list.add(protocol);
+// System.out.println("list = " + list);
+// }
+// }
+
+ static final int PACKET_SIZE = 110088;
+
+ // 用来临时保留没有处理过的请求报文
+ ByteBuf tempMsg = Unpooled.buffer();
+
+ /**
+ * @param ctx
+ * @param in 请求的数据
+ * @param out 将粘在一起的报文拆分后的结果保留起来
+ * @throws Exception
+ */
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
+ System.out.println(Thread.currentThread() + "收到了一次数据包,长度是:" + in.readableBytes());
+
+ // 合并报文
+ ByteBuf message = null;
+ int tmpMsgSize = tempMsg.readableBytes();
+ System.out.println("tmpMsgSize = " + tmpMsgSize);
+ // 如果暂存有上一次余下的请求报文,则合并
+ if (tmpMsgSize > 0) {
+ message = Unpooled.buffer();
+ message.writeBytes(tempMsg);
+ message.writeBytes(in);
+ System.out.println("合并:上一数据包余下的长度为:" + tmpMsgSize + ",合并后长度为:" + message.readableBytes());
+ } else {
+ message = in;
+ }
+
+ int size = message.readableBytes();
+ int counter = size / PACKET_SIZE;
+ for (int i = 0; i < counter; i++) {
+ byte[] request = new byte[PACKET_SIZE];
+ // 每次从总的消息中读取220个字节的数据
+ message.readBytes(request);
+
+ // 将拆分后的结果放入out列表中,交由后面的业务逻辑去处理
+ out.add(Unpooled.copiedBuffer(request));
+ }
+
+ // 多余的报文存起来
+ // 第一个报文: i+ 暂存
+ // 第二个报文: 1 与第一次
+ size = message.readableBytes();
+ if (size != 0) {
+ System.out.println("多余的数据长度:" + size);
+ // 剩下来的数据放到tempMsg暂存
+ tempMsg.clear();
+ tempMsg.writeBytes(message.readBytes(size));
+ }
+ }
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/NettyConstant.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/NettyConstant.java
new file mode 100644
index 0000000..8d2886a
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/NettyConstant.java
@@ -0,0 +1,12 @@
+package org.springblade.jfpt.nettyTcpServer;
+
+/**
+ * 自定义协议常量
+ */
+public class NettyConstant {
+ /**
+ * 自定义协议开始
+ */
+ public static final int HEAD_DATA = 0*76;
+
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/NettyProPool.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/NettyProPool.java
new file mode 100644
index 0000000..02b1a0f
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/NettyProPool.java
@@ -0,0 +1,53 @@
+package org.springblade.jfpt.nettyTcpServer;
+
+
+public class NettyProPool {
+
+ /**
+ * 协议开始的标志,16进制为 0*76
+ */
+ private int haed_data=NettyConstant.HEAD_DATA;
+
+ /**
+ * 传送的长度
+ */
+ private int contentLength;
+
+ /**
+ * 传送的内容
+ */
+ private byte[] content;
+
+ public NettyProPool(int contentLength) {
+ this.contentLength = contentLength;
+ }
+
+ public int getContentLength() {
+ return contentLength;
+ }
+
+ public void setContentLength(int contentLength) {
+ this.contentLength = contentLength;
+ }
+
+ public NettyProPool(int contentLength, byte[] content) {
+ this.contentLength = contentLength;
+ this.content = content;
+ }
+
+ public byte[] getContent() {
+ return content;
+ }
+
+ public void setContent(byte[] content) {
+ this.content = content;
+ }
+
+ public int getHaed_data() {
+ return haed_data;
+ }
+
+ public void setHaed_data(int haed_data) {
+ this.haed_data = haed_data;
+ }
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/ParseString.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/ParseString.java
new file mode 100644
index 0000000..ac47ea6
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/ParseString.java
@@ -0,0 +1,14 @@
+package org.springblade.jfpt.nettyTcpServer;
+
+import io.swagger.models.auth.In;
+
+public class ParseString {
+ public static Integer[] stringToInts(String s){
+ String[] split = s.split(",");
+ Integer[] n = new Integer[split.length];
+ for(int i = 0;i<split.length;i++){
+ n[i] = Integer.parseInt(split[i]);
+ }
+ return n;
+ }
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServer.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServer.java
new file mode 100644
index 0000000..f322210
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServer.java
@@ -0,0 +1,92 @@
+package org.springblade.jfpt.nettyTcpServer;
+
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.*;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.ServerSocketChannel;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.DelimiterBasedFrameDecoder;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.LengthFieldPrepender;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LoggingHandler;
+
+import java.nio.ByteOrder;
+import java.nio.charset.Charset;
+
+
+public class TcpServer {
+ private int port;
+ private ServerSocketChannel serverSocketChannel;
+
+ public TcpServer(int port){
+ this.port = port;
+ bind();
+ }
+
+ private void bind() {
+ Thread thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ //服务端要建立两个group,一个负责接收客户端的连接,一个负责处理数据传输
+ //连接处理group
+ EventLoopGroup boss = new NioEventLoopGroup();
+ //事件处理group
+ EventLoopGroup worker = new NioEventLoopGroup();
+ ServerBootstrap bootstrap = new ServerBootstrap();
+ // 绑定处理group
+ bootstrap.group(boss, worker).channel(NioServerSocketChannel.class)
+ //保持连接数
+ .option(ChannelOption.SO_BACKLOG, 128)
+ //有数据立即发送
+ .option(ChannelOption.TCP_NODELAY, true)
+ //保持连接
+ .childOption(ChannelOption.SO_KEEPALIVE, true)
+ .childOption(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(512*250))
+ .childHandler(new NettyChannelHandler());
+
+ //绑定端口,同步等待成功
+ ChannelFuture future;
+ try {
+ future = bootstrap.bind(port).sync();
+ if (future.isSuccess()) {
+ serverSocketChannel = (ServerSocketChannel) future.channel();
+ System.out.println("服务端启动成功,端口:"+port);
+ } else {
+ System.out.println("服务端启动失败!");
+ }
+
+ //等待服务监听端口关闭,就是由于这里会将线程阻塞,导致无法发送信息,所以我这里开了线程
+ future.channel().closeFuture().sync();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ finally {
+ //优雅地退出,释放线程池资源
+ boss.shutdownGracefully();
+ worker.shutdownGracefully();
+ }
+ }
+ });
+ thread.start();
+ }
+
+
+
+ private class NettyChannelHandler extends ChannelInitializer<SocketChannel> {
+
+ @Override
+ protected void initChannel(SocketChannel socketChannel)
+ throws Exception {
+ //socketChannel.pipeline().addLast(new MyNettyDecode());
+ //socketChannel.pipeline().addLast(new StringDecoder(Charset.forName("UTF-8")));
+ //socketChannel.pipeline().addLast("decoder", new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE,0,4,0,4));
+ //socketChannel.pipeline().addLast("encoder", new LengthFieldPrepender(4, false));
+ socketChannel.pipeline().addLast(new TcpServerHandler());
+ }
+ }
+
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServerHandler.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServerHandler.java
new file mode 100644
index 0000000..7d113a5
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyTcpServer/TcpServerHandler.java
@@ -0,0 +1,105 @@
+package org.springblade.jfpt.nettyTcpServer;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import org.springblade.jfpt.alarm.service.IAlarmService;
+import org.springblade.jfpt.equipment.service.IEquipmentService;
+import org.springblade.jfpt.nettyServer.NettyConfig;
+import org.springblade.jfpt.nettyUdpServer.service.AnimalHeatService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import javax.annotation.PostConstruct;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component
+public class TcpServerHandler extends ChannelInboundHandlerAdapter {
+
+ private String reg_LA ="LA[d]{8}[d|A-F]{12}[d|A-F]{8}[d|A-Z]{2}[d|A-F]{4}[x2A][d|A-F]{6}[#@]";
+ private String reg_LB = "LB[\\d|A-F]{12}[\\x2A].*[#@]";
+ private String reg_LB2 = "LB[\\d|A-F]{6}[\\x2A].*[#@]";
+ private String reg_LD = "LD[d]{8}[d|A-F]{12}:[A-Z]{4}[\\x2A].*[#@]";
+
+
+ private ConcurrentHashMap<String, Channel> sessionChannelMap = new ConcurrentHashMap<String, Channel>();
+
+ @Autowired
+ private org.springblade.jfpt.catalog.service.catalogService catalogService;
+
+ @Autowired
+ private org.springblade.jfpt.Netty.service.nettyService nettyService;
+
+ @Autowired
+ private IEquipmentService equipmentService;
+
+ @Autowired
+ private IAlarmService alarmService;
+
+ private static TcpServerHandler tcpServerHandler;
+
+ @Autowired
+ private AnimalHeatService animalHeatService;
+
+ @PostConstruct
+ public void init() {
+ tcpServerHandler = this;
+ }
+ /**
+ * 客户端与服务端创建连接的时候调用
+ */
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ System.out.println("CTX:"+ctx.channel());
+ System.out.println("客户端与服务端连接开始...");
+// ChannelId id = ctx.channel().id();
+// String s = id.toString();
+ //NettyConfig.group.add(ctx.channel());
+ }
+
+ /**
+ * 客户端与服务端断开连接时调用
+ */
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ System.out.println("客户端与服务端连接关闭...");
+ NettyConfig.group.remove(ctx.channel());
+ }
+
+ /**
+ * 服务端接收客户端发送过来的数据结束之后调用
+ */
+ @Override
+ public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
+ ctx.flush();
+ System.out.println("信息接收完毕...");
+ }
+
+ /**
+ * 工程出现异常的时候调用
+ */
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+ /**
+ * 服务端处理客户端websocket请求的核心方法,这里接收了客户端发来的信息
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext channelHandlerContext, Object info) throws Exception {
+ System.out.println("接收到了:"+info);
+ ByteBuf buf = (ByteBuf) info;
+ byte[] req = new byte[buf.readableBytes()];
+ buf.readBytes(req);
+ String body = new String(req, "UTF-8");
+ String content = body;
+ System.out.println("接收客户端数据:" + body);
+ //插入数据
+ tcpServerHandler.animalHeatService.save(body);
+
+ }
+
+
+}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/entity/BladeAnimalHeat.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/entity/BladeAnimalHeat.java
index 4fe43d1..b7efffd 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/entity/BladeAnimalHeat.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/entity/BladeAnimalHeat.java
@@ -37,10 +37,10 @@
private Float tempRed;// float(4,2) DEFAULT NULL COMMENT '当前人员的温度',
@TableField("person_rect")
- private String personRect;// varchar(63) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '人脸位置二位数组,[left,top,right,bottom]',
+ private String[] personRect;// varchar(63) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '人脸位置二位数组,[left,top,right,bottom]',
@TableField("person_rect_red")
- private String personRectRed;// varchar(63) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '红外人脸位置二位数组,[left,top,right,bottom]',
+ private Integer[] personRectRed;// varchar(63) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '红外人脸位置二位数组,[left,top,right,bottom]',
@TableField("create_time")
private Date createTime;// datetime DEFAULT NULL COMMENT '创建时间',
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/AnimalHeatService.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/AnimalHeatService.java
index 9d7a0c2..11d92a4 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/AnimalHeatService.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/AnimalHeatService.java
@@ -1,7 +1,15 @@
package org.springblade.jfpt.nettyUdpServer.service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.jfpt.nettyUdpServer.entity.BladeAnimalHeat;
+
/**
* 体温监测服务层接口层
*/
-public interface AnimalHeatService {
+public interface AnimalHeatService extends IService<BladeAnimalHeat> {
+ /**
+ * 插入体温数据
+ * @param body 温度数据
+ */
+ void save(String body);
}
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/impl/AnimalHeatServiceImpl.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/impl/AnimalHeatServiceImpl.java
index 7313a91..f6f906a 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/impl/AnimalHeatServiceImpl.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/nettyUdpServer/service/impl/AnimalHeatServiceImpl.java
@@ -1,12 +1,22 @@
package org.springblade.jfpt.nettyUdpServer.service.impl;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.jfpt.nettyTcpServer.ParseString;
import org.springblade.jfpt.nettyUdpServer.entity.BladeAnimalHeat;
import org.springblade.jfpt.nettyUdpServer.mapper.AnimalHeatMapper;
import org.springblade.jfpt.nettyUdpServer.service.AnimalHeatService;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.lang.reflect.Array;
+import java.util.Map;
+import static org.springblade.core.tool.utils.DateUtil.now;
+/**
+ * 体温数据服务层
+ *
+ */
@Service
public class AnimalHeatServiceImpl extends ServiceImpl<AnimalHeatMapper, BladeAnimalHeat> implements AnimalHeatService {
@Override
@@ -14,4 +24,33 @@
return false;
}
+ /**
+ * 新增体温数据
+ * @param body 体温数据
+ */
+ @Override
+ @Transactional
+ public void save(String body) {
+ //1.截取信息
+ int i = body.indexOf("{");
+ //2.从 { 处开始截取
+ int length = body.length();
+ //3.截取
+ String dataBody = body.substring(i, length);
+ System.out.println("dataBody = " + dataBody);
+ //4.数据转换
+ Map<String,Object> data = (Map<String, Object>) JSONObject.parse(dataBody);
+ System.out.println("data = " + data);
+ //5.创建体温数据对象
+ BladeAnimalHeat bladeAnimalHeat = new BladeAnimalHeat();
+ //6.取出数据,封装数据到对象
+ bladeAnimalHeat.setPicture(data.get("picture").toString());
+ String temp_red =data.get("temp_red").toString();
+ bladeAnimalHeat.setTempRed(Float.parseFloat(temp_red.substring(1,temp_red.length()-1)));
+ String person_rects = data.get("person_rect").toString();
+ bladeAnimalHeat.setPersonRect(person_rects.substring(2,person_rects.length()-2).split(","));
+ bladeAnimalHeat.setCreateTime(now());
+ //7.插入数据
+ int idata = baseMapper.insert(bladeAnimalHeat);
+ }
}
--
Gitblit v1.9.3