|
@@ -3,20 +3,22 @@ package com.huimv.env.input.server;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.huimv.env.input.entity.Chengzhong;
|
|
|
-import com.huimv.env.input.service.IChengzhongService;
|
|
|
+import com.huimv.env.common.entity.EnvElectricity;
|
|
|
+import com.huimv.env.common.entity.EnvWarning;
|
|
|
+import com.huimv.env.common.entity.EnvWater;
|
|
|
+import com.huimv.env.common.service.IEnvElectricityService;
|
|
|
+import com.huimv.env.common.service.IEnvWaterService;
|
|
|
import com.huimv.env.input.utils.ModBusUtils;
|
|
|
import io.netty.buffer.ByteBuf;
|
|
|
import io.netty.buffer.Unpooled;
|
|
|
|
|
|
import io.netty.channel.*;
|
|
|
-import io.netty.util.CharsetUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.tomcat.util.codec.binary.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.nio.charset.Charset;
|
|
|
import java.text.ParseException;
|
|
|
import java.util.Date;
|
|
@@ -40,10 +42,11 @@ import static com.huimv.env.input.utils.ModBusUtils.hexStr2Bytes;
|
|
|
@Slf4j
|
|
|
public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
|
|
|
private StringBuilder askTextSb = null;
|
|
|
-
|
|
|
@Autowired
|
|
|
- private IChengzhongService chengzhongService;
|
|
|
+ private IEnvWaterService envWaterService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IEnvElectricityService envElectricityService;
|
|
|
//
|
|
|
public void appendClientAsk(String text) {
|
|
|
if (this.askTextSb == null) {
|
|
@@ -52,6 +55,7 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
|
|
|
askTextSb.append(text);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
@Override
|
|
|
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
|
|
|
Channel channel = ctx.channel();
|
|
@@ -60,43 +64,73 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
|
|
|
byte[] bytes = new byte[byteBuf.readableBytes()];
|
|
|
byteBuf.readBytes(bytes);
|
|
|
String str = ModBusUtils.bytes2HexString(bytes);
|
|
|
-// saveWeight(str);
|
|
|
System.out.println("收到的数据:"+str);
|
|
|
- Thread.sleep(10*1000);
|
|
|
-// channel.writeAndFlush(Unpooled.copiedBuffer(hexStr2Bytes("1F 03 00 2A 00 01 A6 7C")));
|
|
|
- channel.writeAndFlush(Unpooled.copiedBuffer(hexStr2Bytes("1D 03 00 00 00 02 C6 57")));
|
|
|
+ String cmd = saveWaterAndEle(str);
|
|
|
+ Thread.sleep(5*60*1000);
|
|
|
+ System.out.println(cmd);
|
|
|
+ channel.writeAndFlush(Unpooled.copiedBuffer(hexStr2Bytes(cmd)));
|
|
|
super.channelRead(ctx, msg);
|
|
|
}
|
|
|
- private void saveWeight(String str) {
|
|
|
- try {
|
|
|
- if (null != str && str.split(" ").length > 7){
|
|
|
- String[] s = str.split(" ");
|
|
|
|
|
|
- String macAddr = s[0]+s[1]+ s[2]+s[3]+ s[4]+s[5];
|
|
|
- Integer i = countWeight(s);
|
|
|
- Chengzhong chengzhong = new Chengzhong();
|
|
|
- chengzhong.setCreatTime(new Date());
|
|
|
- chengzhong.setMacAddr(macAddr);
|
|
|
-// int i = Integer.parseInt(weight, 16);
|
|
|
- /* if (i>60000){
|
|
|
- i=0;
|
|
|
- }*/
|
|
|
- chengzhong.setWeight(i);
|
|
|
- Chengzhong one = chengzhongService.getOne(new QueryWrapper<Chengzhong>().orderByDesc("id").eq("mac_addr", macAddr).last("limit 1"));
|
|
|
- int num = i;
|
|
|
- if (ObjectUtil.isNotEmpty(one)){
|
|
|
- num = i -one.getWeight();
|
|
|
- }
|
|
|
- System.out.println(i);
|
|
|
- chengzhong.setNum(num);
|
|
|
- chengzhongService.save(chengzhong);
|
|
|
+ private String saveWaterAndEle(String str) {
|
|
|
+ String[] s = str.split(" ");
|
|
|
+
|
|
|
+ //读水表
|
|
|
+ String cmd ="1D 03 00 00 00 02 C6 57";
|
|
|
+ //读电表
|
|
|
+// String cmd ="1C 04 01 00 00 02 73 BA";
|
|
|
+ if (s.length>10 || s.length<7){
|
|
|
+ return cmd;
|
|
|
+ }
|
|
|
+ String val = s[3]+s[4]+s[5]+s[6];
|
|
|
+ System.out.println("val=" +val);
|
|
|
+ Date now = new Date();
|
|
|
+ //水表
|
|
|
+ if (str.startsWith("1D 03")){
|
|
|
+ System.out.println("水表");
|
|
|
+ int waterOrigValue = Integer.parseInt(val, 16);
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(waterOrigValue);
|
|
|
+ EnvWater oldEnvWater = envWaterService.getOne(new QueryWrapper<EnvWater>().orderByDesc("id").last("limit 1"));
|
|
|
+ BigDecimal originalValue = oldEnvWater.getOriginalValue();
|
|
|
+ EnvWater envWater = new EnvWater();
|
|
|
+ envWater.setOriginalValue(bigDecimal);
|
|
|
+ int i = bigDecimal.compareTo(originalValue);
|
|
|
+ if (ObjectUtil.isNotEmpty(oldEnvWater) && i>0){
|
|
|
+ envWater.setHandleValue(bigDecimal.subtract(oldEnvWater.getOriginalValue()).divide(new BigDecimal(100)));
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
- System.out.println(e);
|
|
|
+ envWater.setUpdateTime(now);
|
|
|
+ envWater.setFarmId(27);
|
|
|
+ envWaterService.save(envWater);
|
|
|
+ cmd = "1C 04 01 00 00 02 73 BA";
|
|
|
}
|
|
|
-
|
|
|
+ //电表
|
|
|
+ if (str.startsWith("1C 04")){
|
|
|
+ try {
|
|
|
+ System.out.println("电表");
|
|
|
+ int eleOrigValue = Integer.parseInt(val, 16);
|
|
|
+ Float f = Float.intBitsToFloat(eleOrigValue);
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(f);
|
|
|
+ EnvElectricity oldEnvWater = envElectricityService.getOne(new QueryWrapper<EnvElectricity>().orderByDesc("id").last("limit 1"));
|
|
|
+ BigDecimal originalValue = oldEnvWater.getOriginalValue();
|
|
|
+ EnvElectricity envElectricity = new EnvElectricity();
|
|
|
+ envElectricity.setOriginalValue(bigDecimal);
|
|
|
+ int i = bigDecimal.compareTo(originalValue);
|
|
|
+ if (ObjectUtil.isNotEmpty(oldEnvWater) && i>0){
|
|
|
+ envElectricity.setHandleValue(bigDecimal.subtract(oldEnvWater.getOriginalValue()));
|
|
|
+ }
|
|
|
+ envElectricity.setUpdateTime(now);
|
|
|
+ envElectricity.setFarmId(27);
|
|
|
+ envElectricityService.save(envElectricity);
|
|
|
+ }catch (Exception e){
|
|
|
+ System.out.println(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return cmd;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
private Integer countWeight(String[] s) {
|
|
|
int count = 48;
|
|
|
return (Integer.parseInt(s[8], 16) -count)
|