From c64ccd4c5d6a41298bff2ea2ff6686e88f967f21 Mon Sep 17 00:00:00 2001
From: wty <419034340@qq.com>
Date: Wed, 24 May 2023 16:18:41 +0800
Subject: [PATCH 1/2] add new feature
---
xiuosiot-backend/pom.xml | 9 +-
.../xiuos/Interceptor/AroundLogAspect.java | 6 +-
.../java/com/aiit/xiuos/Utils/HexUtil.java | 240 ++++++++++--------
.../xiuos/controller/DeviceController.java | 4 +-
.../controller/DeviceDataController.java | 13 +
.../controller/DeviceDataRuleController.java | 29 +++
.../xiuos/controller/LoginController.java | 12 +-
.../aiit/xiuos/controller/UserController.java | 4 +
.../dao/mappers/DeviceDataRuleMapper.java | 17 ++
.../xiuos/dao/mappers/GZJCDataMapper.java | 6 +-
.../com/aiit/xiuos/model/DeviceDataRule.java | 27 ++
.../com/aiit/xiuos/mqtt/PushCallback.java | 1 +
.../xiuos/scheduled/GZJCTaskScheduled.java | 6 +-
.../aiit/xiuos/scheduled/TaskScheduled.java | 13 +-
.../xiuos/service/DeviceDataRuleService.java | 10 +
.../com/aiit/xiuos/service/GZJCService.java | 4 +-
.../impl/DeviceDataRuleServiceImpl.java | 32 +++
.../xiuos/service/impl/GZJCServiceImpl.java | 10 +-
.../aiit/xiuos/tdengine/TDengineJDBCUtil.java | 56 ++--
.../src/main/resources/banner.txt | 5 +
.../main/resources/mappers/GZJCDataMapper.xml | 12 +-
21 files changed, 357 insertions(+), 159 deletions(-)
create mode 100644 xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataRuleController.java
create mode 100644 xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/DeviceDataRuleMapper.java
create mode 100644 xiuosiot-backend/src/main/java/com/aiit/xiuos/model/DeviceDataRule.java
create mode 100644 xiuosiot-backend/src/main/java/com/aiit/xiuos/service/DeviceDataRuleService.java
create mode 100644 xiuosiot-backend/src/main/java/com/aiit/xiuos/service/impl/DeviceDataRuleServiceImpl.java
diff --git a/xiuosiot-backend/pom.xml b/xiuosiot-backend/pom.xml
index 4ee70ba..39caece 100644
--- a/xiuosiot-backend/pom.xml
+++ b/xiuosiot-backend/pom.xml
@@ -155,7 +155,13 @@
commons-lang
2.6
-
+
+
+ junit
+ junit
+ 4.13
+ test
+
@@ -222,6 +228,7 @@
*.yml
**/*.xml
+ **/*.txt
false
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/Interceptor/AroundLogAspect.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/Interceptor/AroundLogAspect.java
index 81a1591..9eae3fe 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/Interceptor/AroundLogAspect.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/Interceptor/AroundLogAspect.java
@@ -39,6 +39,10 @@ public class AroundLogAspect {
public void excludeLogPointcut() {
}
+ @Pointcut("execution(* com.aiit.xiuos.controller.DeviceDataController.*(..))")
+ public void excludeData() {
+ }
+
@Pointcut("execution(* com.aiit.xiuos.controller.UserController.*(..))")
public void excludeUserPointcut() {
}
@@ -47,7 +51,7 @@ public class AroundLogAspect {
public void excludeController() {
}
- @Pointcut("normalPointcut() && !excludeUserPointcut()&& !excludeLogPointcut()&&!excludeController()")
+ @Pointcut("normalPointcut() && !excludeUserPointcut()&& !excludeLogPointcut()&&!excludeController()&&!excludeData()")
public void pointCutMethod() {
}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/Utils/HexUtil.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/Utils/HexUtil.java
index 252de1f..a145ae5 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/Utils/HexUtil.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/Utils/HexUtil.java
@@ -1,148 +1,174 @@
package com.aiit.xiuos.Utils;
+import com.alibaba.fastjson.JSONObject;
+
+import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.BitSet;
import java.util.Collections;
import java.util.List;
public class HexUtil {
- public static byte[] hexStringToBytes(String hexString) {
- if (hexString == null || hexString.equals("")) {
- return null;
- }
- // toUpperCase将字符串中的所有字符转换为大写
- hexString = hexString.toUpperCase();
- int length = hexString.length() / 2;
- // toCharArray将此字符串转换为一个新的字符数组。
- char[] hexChars = hexString.toCharArray();
- byte[] d = new byte[length];
- for (int i = 0; i < length; i++) {
- int pos = i * 2;
- d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
- }
- return d;
- }
- //charToByte返回在指定字符的第一个发生的字符串中的索引,即返回匹配字符
- private static byte charToByte(char c) {
- return (byte) "0123456789ABCDEF".indexOf(c);
- }
+ public static JSONObject hexToString(Boolean flag,String split,String hex,int[] valueLen,String [] valueName){
+ String res ="";
+ //去掉0X前缀
+ if(flag){
+ res= hex.replaceAll("0x","");
+ }
+ //将分隔符变为空
+ if(split!=null){
+ res=res.replaceAll(split,"");
+ }
- public static String BinaryToHexString(byte[] bytes) {
- String hexStr = "0123456789ABCDEF";
- String result = "";
- String hex = "";
- for (byte b : bytes) {
- hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4));
- hex += String.valueOf(hexStr.charAt(b & 0x0F));
- result += hex ;
- }
- return result;
- }
+ int length = valueLen[valueLen.length-1];
- //两位一字符,倒序排序
- public static String reverseString(String str) {
+// if(length!=res.length()){
+// System.out.println("字符长度不对,请检查!");
+// }
- List strlist=new ArrayList();
+ JSONObject jsonObject = new JSONObject();
+ int tempIndex = 0;
- char[] chr = str.toCharArray();
+ for (int i = 0; i 两个16进制字符
+ byte[] bytes = new byte[length];
+ int n;
+ for (int i = 0; i < bytes.length; i++) {
+ int position = i * 2;//两个16进制字符 -> 1个byte数值
+ n = str.indexOf(hexs[position]) * 16;
+ n += str.indexOf(hexs[position + 1]);
+ // 保持二进制补码的一致性 因为byte类型字符是8bit的 而int为32bit 会自动补齐高位1 所以与上0xFF之后可以保持高位一致性
+ //当byte要转化为int的时候,高的24位必然会补1,这样,其二进制补码其实已经不一致了,&0xff可以将高的24位置为0,低8位保持原样,这样做的目的就是为了保证二进制数据的一致性。
+ bytes[i] = (byte) (n & 0xff);
}
- ret += hex.toUpperCase();
- return ret;
+ return new String(bytes);
+ }
+ /**
+ * 字符串转换成为16进制(无需Unicode编码)
+ * @param str 待转换的ASCII字符串
+ * @author xxs
+ * @return byte字符串 (每个Byte之间空格分隔)
+ */
+ public static String str2HexStr(String str) {
+ char[] chars = "0123456789ABCDEF".toCharArray();//toCharArray() 方法将字符串转换为字符数组。
+ StringBuilder sb = new StringBuilder(""); //StringBuilder是一个类,可以用来处理字符串,sb.append()字符串相加效率高
+ byte[] bs = str.getBytes();//String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组
+ int bit;
+ for (int i = 0; i < bs.length; i++) {
+ bit = (bs[i] & 0x0f0) >> 4; // 高4位, 与操作 1111 0000
+ sb.append(chars[bit]);
+ bit = bs[i] & 0x0f; // 低四位, 与操作 0000 1111
+ sb.append(chars[bit]);
+ sb.append(' ');//每个Byte之间空格分隔
+ }
+ return sb.toString().trim();
}
}
\ No newline at end of file
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceController.java
index 4cd7627..2cb61e0 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceController.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceController.java
@@ -33,8 +33,8 @@ public class DeviceController {
deviceInfo.setUpdatetime(MyUtils.getTime());
deviceInfo.setOrg(userInfo.getOrg());
- boolean flag = TDengineJDBCUtil.createTable(deviceInfo.getNo(),deviceInfo.getType(),deviceInfo.getOrg(),deviceInfo.getProductname());
-
+ //boolean flag = TDengineJDBCUtil.createTable(deviceInfo.getNo(),deviceInfo.getType(),deviceInfo.getOrg(),deviceInfo.getProductname());
+ boolean flag =true;
if(flag) {
int res=deviceInfoService.addDevice(deviceInfo);
if(1==res){
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataController.java
index bce4052..e839817 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataController.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataController.java
@@ -5,10 +5,12 @@ import com.aiit.xiuos.Utils.Constant;
import com.aiit.xiuos.Utils.HttpClientUtil;
import com.aiit.xiuos.Utils.ResultRespons;
import com.aiit.xiuos.model.AvgDayData;
+import com.aiit.xiuos.model.GZJCData;
import com.aiit.xiuos.model.QjdqElectric;
import com.aiit.xiuos.mqtt.MqttConfiguration;
import com.aiit.xiuos.mqtt.MyMqttClient;
import com.aiit.xiuos.service.AvgDayDataService;
+import com.aiit.xiuos.service.GZJCService;
import com.aiit.xiuos.service.QjdqElectricService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,6 +31,8 @@ public class DeviceDataController {
private MyMqttClient myMqttClient;
@Autowired
private QjdqElectricService qjdqElectricService;
+ @Autowired
+ private GZJCService gzjcService;
@GetMapping("/getAll")
public ResultRespons getAllDataFromDSD(HttpServletRequest request){
@@ -67,6 +71,15 @@ public class DeviceDataController {
return new ResultRespons(Constant.ERROR_CODE,"查询数据失败");
}
+ @GetMapping("/getGZJC")
+ public ResultRespons getGZJC(){
+ List GZJCDatas = gzjcService.selectData();
+ if(GZJCDatas!=null&&GZJCDatas.size()>0){
+ return new ResultRespons(Constant.SUCCESS_CODE,"查询数据成功!",GZJCDatas);
+ }
+ return new ResultRespons(Constant.ERROR_CODE,"查询数据失败");
+
+ }
}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataRuleController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataRuleController.java
new file mode 100644
index 0000000..691eab5
--- /dev/null
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/DeviceDataRuleController.java
@@ -0,0 +1,29 @@
+package com.aiit.xiuos.controller;
+
+import com.aiit.xiuos.Utils.Constant;
+import com.aiit.xiuos.Utils.ResultRespons;
+import com.aiit.xiuos.model.AlarmRule;
+import com.aiit.xiuos.service.AlarmRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@RequestMapping("/rule")
+public class DeviceDataRuleController {
+ @Autowired
+ AlarmRuleService alarmRuleService;
+ @PostMapping("/add")
+ public ResultRespons addRule(@RequestBody AlarmRule alarmRule, HttpServletRequest request){
+
+ int res = alarmRuleService.addAlarmRule(alarmRule);
+ if(res==1){
+ return new ResultRespons(Constant.SUCCESS_CODE,"新增告警规则成功!");
+ }
+ return new ResultRespons(Constant.ERROR_CODE,"新增告警规则失败");
+ }
+}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/LoginController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/LoginController.java
index e7083b6..5b6f062 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/LoginController.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/LoginController.java
@@ -4,6 +4,7 @@ import com.aiit.xiuos.Utils.Constant;
import com.aiit.xiuos.Utils.MyUtils;
import com.aiit.xiuos.Utils.ResultRespons;
import com.aiit.xiuos.model.UserInfo;
+import com.aiit.xiuos.redis.RedisUtil;
import com.aiit.xiuos.service.UserInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -12,12 +13,16 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
+import java.util.HashMap;
+import java.util.Map;
@RestController
@Slf4j
public class LoginController {
@Autowired
private UserInfoService userInfoService;
+ @Autowired
+ private RedisUtil redisUtil;
@PostMapping("/login")
public ResultRespons login (@RequestBody UserInfo userInfo, HttpServletRequest request) {
@@ -25,10 +30,12 @@ public class LoginController {
if(null!=user){
HttpSession session = request.getSession();
session.setAttribute("user",user);//session存用户
- log.info("session======="+session.getId());
+ // Map users=new HashMap<>();
+ // users.put(user.getUsername(),user);
+ // redisUtil.hset("xiuosuser",users,-1);
+ // users=redisUtil.hget("xiuosuser",-1);
String ip = MyUtils.getIp(request);
userInfoService.updateLoginInfo(MyUtils.getTime(),ip,user.getId());
- log.info("ip++++++++===="+ip);
return new ResultRespons(Constant.SUCCESS_CODE,"登录成功");
}
return new ResultRespons(Constant.ERROR_CODE,"登录失败,用户名或密码有误");
@@ -40,6 +47,7 @@ public class LoginController {
HttpSession session = request.getSession();
session.removeAttribute("user");
session.invalidate();
+ redisUtil.delete("user");
return new ResultRespons(Constant.SUCCESS_CODE,"用户登出");
}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/UserController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/UserController.java
index fec56df..0c0dd9a 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/UserController.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/UserController.java
@@ -5,6 +5,7 @@ import com.aiit.xiuos.Utils.GenerateIdUtil;
import com.aiit.xiuos.Utils.MyUtils;
import com.aiit.xiuos.Utils.ResultRespons;
import com.aiit.xiuos.model.UserInfo;
+import com.aiit.xiuos.redis.RedisUtil;
import com.aiit.xiuos.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -17,6 +18,8 @@ import javax.servlet.http.HttpSession;
public class UserController {
@Autowired
private UserInfoService userInfoService;
+ @Autowired
+ private RedisUtil redisUtil;
@PostMapping("/register")
public ResultRespons addUser (@RequestBody UserInfo userInfo, HttpServletRequest request) {
@@ -35,6 +38,7 @@ public class UserController {
@GetMapping("/getSession")
public Object getPermission(HttpServletRequest request) {
+ //UserInfo userInfo=redisUtil.get("user",UserInfo.class);
UserInfo userInfo =(UserInfo) request.getSession().getAttribute("user");
if(userInfo==null){
return new ResultRespons(Constant.SessionTimeOut_CODE,"用户尚未登录,请先登录!");
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/DeviceDataRuleMapper.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/DeviceDataRuleMapper.java
new file mode 100644
index 0000000..a8985db
--- /dev/null
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/DeviceDataRuleMapper.java
@@ -0,0 +1,17 @@
+package com.aiit.xiuos.dao.mappers;
+
+import com.aiit.xiuos.model.DeviceDataRule;
+
+public interface DeviceDataRuleMapper {
+ int deleteByPrimaryKey(Integer ruleid);
+
+ int insert(DeviceDataRule record);
+
+ int insertSelective(DeviceDataRule record);
+
+ DeviceDataRule selectByPrimaryKey(Integer ruleid);
+
+ int updateByPrimaryKeySelective(DeviceDataRule record);
+
+ int updateByPrimaryKey(DeviceDataRule record);
+}
\ No newline at end of file
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/GZJCDataMapper.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/GZJCDataMapper.java
index fc4b676..5b9b518 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/GZJCDataMapper.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/dao/mappers/GZJCDataMapper.java
@@ -4,6 +4,8 @@ import com.aiit.xiuos.model.GZJCData;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
+import java.util.List;
+
@Repository
public interface GZJCDataMapper {
int deleteByPrimaryKey(Integer id);
@@ -19,6 +21,6 @@ public interface GZJCDataMapper {
int updateByPrimaryKey(GZJCData record);
- @Select("select * from haier_data order by time desc limit 1")
- GZJCData selectData();
+ @Select("select windspeed,winddirection,airpressure,noise from gzjc_data order by time desc limit 12")
+ List selectData();
}
\ No newline at end of file
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/model/DeviceDataRule.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/model/DeviceDataRule.java
new file mode 100644
index 0000000..75f9525
--- /dev/null
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/model/DeviceDataRule.java
@@ -0,0 +1,27 @@
+package com.aiit.xiuos.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class DeviceDataRule {
+ private Integer ruleid;
+
+ private Integer datacount;
+
+ private String datastring;
+
+ private String remark;
+
+ public DeviceDataRule(Integer ruleid, Integer datacount, String datastring, String remark) {
+ this.ruleid = ruleid;
+ this.datacount = datacount;
+ this.datastring = datastring;
+ this.remark = remark;
+ }
+
+ public DeviceDataRule() {
+ super();
+ }
+}
\ No newline at end of file
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/mqtt/PushCallback.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/mqtt/PushCallback.java
index 55edfe0..43e8afa 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/mqtt/PushCallback.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/mqtt/PushCallback.java
@@ -16,6 +16,7 @@ public class PushCallback implements MqttCallbackExtended {
@Override
public void connectionLost(Throwable throwable) {
+ log.error("mqtt lose connect:"+throwable) ;
long reconnectTimes = 1;
while (true) {
try {
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/GZJCTaskScheduled.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/GZJCTaskScheduled.java
index b30a6c8..dbb22b8 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/GZJCTaskScheduled.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/GZJCTaskScheduled.java
@@ -34,7 +34,7 @@ public class GZJCTaskScheduled {
}
- @Scheduled(cron = "*/1 * * * * ?")//every hour
+ @Scheduled(cron = "0 */1 * * * ?")//every hour
public void sendWebsocket() throws ParseException, IOException {
GZJCData GZJCData = mockData();
JSONObject jsonObject = JSONUtil.parseObj(GZJCData,false,true);
@@ -102,10 +102,10 @@ public class GZJCTaskScheduled {
double winddirection = rand.nextInt(30)+200; //风向
GZJCData.setWinddirection(new BigDecimal(df.format(winddirection)));
- double airpressure=rand.nextInt(100)+900+Math.random(); //气压
+ double airpressure=rand.nextInt(100)+900; //气压
GZJCData.setAirpressure(new BigDecimal(df.format(airpressure)));
- double noise =rand.nextInt(71)+30+Math.random(); //噪音 pd
+ double noise =rand.nextInt(70)+30+Math.random(); //噪音 pd
GZJCData.setNoise(new BigDecimal(df.format(noise)));
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/TaskScheduled.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/TaskScheduled.java
index 8c512d8..4ce5785 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/TaskScheduled.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/scheduled/TaskScheduled.java
@@ -180,7 +180,6 @@ public class TaskScheduled {
arrayList.add(qjdqElectric.getElectric39());
newRecord.setElectric40(qjdqElectric.getElectric40().add(new BigDecimal(Math.random())));
arrayList.add(qjdqElectric.getElectric40());
- log.info( "返回数据"+arrayList.toString());
qjdqWebSocketServer.sendInfo(arrayList.toString());
qjdqElectricService.updateElectric(newRecord);
@@ -206,7 +205,7 @@ public class TaskScheduled {
}
//取前一天数据
tdString+="ts>now-1d";
- log.info("sql+++++++++:"+tdString);
+ log.info("执行规则sql为:"+tdString);
//去Tdengine执行sql
int count = 0;
AlarmInfo alarmInfo = new AlarmInfo();
@@ -245,5 +244,15 @@ public class TaskScheduled {
}
}
}
+// @Scheduled(cron = "0 */1 8-20 * * ?")//every minute 8-20 clock
+// public void mockXiuosData(){
+// String DsdDevices[]={"A000001","A000005","A000006","A000007","A000008","A000009","A000010","s02","s01","s05","s03","q000001"};
+// for(int i=0;i selectData();
}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/service/impl/DeviceDataRuleServiceImpl.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/service/impl/DeviceDataRuleServiceImpl.java
new file mode 100644
index 0000000..e5ed5d3
--- /dev/null
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/service/impl/DeviceDataRuleServiceImpl.java
@@ -0,0 +1,32 @@
+package com.aiit.xiuos.service.impl;
+
+import com.aiit.xiuos.dao.mappers.DeviceDataRuleMapper;
+import com.aiit.xiuos.model.DeviceDataRule;
+import com.aiit.xiuos.service.DeviceDataRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DeviceDataRuleServiceImpl implements DeviceDataRuleService {
+ @Autowired
+ DeviceDataRuleMapper deviceDataRuleMapper;
+ @Override
+ public int addDataRule(DeviceDataRule deviceDataRule) {
+ return deviceDataRuleMapper.insertSelective(deviceDataRule);
+ }
+
+ @Override
+ public int updateDataRule(DeviceDataRule deviceDataRule) {
+ return deviceDataRuleMapper.updateByPrimaryKeySelective(deviceDataRule);
+ }
+
+ @Override
+ public int deleteDataRule(int ruleId) {
+ return deviceDataRuleMapper.deleteByPrimaryKey(ruleId);
+ }
+
+ @Override
+ public DeviceDataRule selectDataRule(int ruleId) {
+ return deviceDataRuleMapper.selectByPrimaryKey(ruleId);
+ }
+}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/service/impl/GZJCServiceImpl.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/service/impl/GZJCServiceImpl.java
index f586885..4c2e3af 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/service/impl/GZJCServiceImpl.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/service/impl/GZJCServiceImpl.java
@@ -7,17 +7,19 @@ import com.aiit.xiuos.service.GZJCService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.List;
+
@Service
public class GZJCServiceImpl implements GZJCService {
@Autowired
- GZJCDataMapper haierDataMapper;
+ GZJCDataMapper gzjcDataMapper;
@Override
public int insertData(GZJCData data) {
- return haierDataMapper.insertSelective(data);
+ return gzjcDataMapper.insertSelective(data);
}
@Override
- public GZJCData selectData() {
- return haierDataMapper.selectData();
+ public List selectData() {
+ return gzjcDataMapper.selectData();
}
}
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/tdengine/TDengineJDBCUtil.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/tdengine/TDengineJDBCUtil.java
index 97aa5b7..0f9291c 100644
--- a/xiuosiot-backend/src/main/java/com/aiit/xiuos/tdengine/TDengineJDBCUtil.java
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/tdengine/TDengineJDBCUtil.java
@@ -32,35 +32,35 @@ public class TDengineJDBCUtil {
}
- public static boolean createTable(String deviceno, String type, String org, String productname){
- Connection connection = null;
- try {
- connection = TDengineJDBCUtil.getConn();
- Statement stmt = connection.createStatement();
- String devicetype=TDengineJDBCUtil.changeType(type);
- if(devicetype==null){
- return false;
- }
- // create table
- String sql ="create table if not exists " + deviceno + " using "+devicetype+" tags("+"\""+org+"\","+"\"" + productname+"\")";
- stmt.executeUpdate(sql);
- return true;
- } catch (Exception e) {
- log.error(e.getMessage());
- }finally {
- try {
- if(connection!=null){
- connection.close();
- }
+// public static boolean createTable(String deviceno, String type, String org, String productname){
+// Connection connection = null;
+// try {
+// connection = TDengineJDBCUtil.getConn();
+// Statement stmt = connection.createStatement();
+// String devicetype=TDengineJDBCUtil.changeType(type);
+// if(devicetype==null){
+// return false;
+// }
+// // create table
+// String sql ="create table if not exists " + deviceno + " using "+devicetype+" tags("+"\""+org+"\","+"\"" + productname+"\")";
+// stmt.executeUpdate(sql);
+// return true;
+// } catch (Exception e) {
+// log.error(e.getMessage());
+// }finally {
+// try {
+// if(connection!=null){
+// connection.close();
+// }
+//
+// } catch (SQLException throwables) {
+// throwables.printStackTrace();
+// }
+//
+// }
+// return false;
- } catch (SQLException throwables) {
- throwables.printStackTrace();
- }
-
- }
- return false;
-
- }
+// }
public static String changeType(String type){
if(type.equals("M168-LoRa-FM100")) return "M168_LoRa_FM100";
diff --git a/xiuosiot-backend/src/main/resources/banner.txt b/xiuosiot-backend/src/main/resources/banner.txt
index e69de29..a006dce 100644
--- a/xiuosiot-backend/src/main/resources/banner.txt
+++ b/xiuosiot-backend/src/main/resources/banner.txt
@@ -0,0 +1,5 @@
+ __ _____ _ _ ___ ____ ___ ___ _____
+ \ \/ /_ _| | | |/ _ \/ ___|_ _/ _ \_ _|
+ \ / | || | | | | | \___ \| | | | || |
+ / \ | || |_| | |_| |___) | | |_| || |
+ /_/\_\___|\___/ \___/|____/___\___/ |_| is started
diff --git a/xiuosiot-backend/src/main/resources/mappers/GZJCDataMapper.xml b/xiuosiot-backend/src/main/resources/mappers/GZJCDataMapper.xml
index 43e8903..dbcd073 100644
--- a/xiuosiot-backend/src/main/resources/mappers/GZJCDataMapper.xml
+++ b/xiuosiot-backend/src/main/resources/mappers/GZJCDataMapper.xml
@@ -34,15 +34,15 @@
- delete from haier_data
+ delete from gzjc_data
where id = #{id,jdbcType=INTEGER}
- insert into haier_data (id, o3, co2,
+ insert into gzjc_data (id, o3, co2,
so2, no2, nh3, tvoc,
ch2o, c2h5oh, ch4,
o2, aqs, humidness,
@@ -60,7 +60,7 @@
)
- insert into haier_data
+ insert into gzjc_data
id,
@@ -199,7 +199,7 @@
- update haier_data
+ update gzjc_data
o3 = #{o3,jdbcType=NUMERIC},
@@ -268,7 +268,7 @@
where id = #{id,jdbcType=INTEGER}
- update haier_data
+ update gzjc_data
set o3 = #{o3,jdbcType=NUMERIC},
co2 = #{co2,jdbcType=NUMERIC},
so2 = #{so2,jdbcType=NUMERIC},
From 35ebcc1bd306b7b39edb09acb4bef51611ccb23e Mon Sep 17 00:00:00 2001
From: wty <419034340@qq.com>
Date: Tue, 6 Jun 2023 14:42:39 +0800
Subject: [PATCH 2/2] add ota file upload and download
---
.../aiit/xiuos/controller/OTAController.java | 79 +++++++++++++++++++
1 file changed, 79 insertions(+)
create mode 100644 xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/OTAController.java
diff --git a/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/OTAController.java b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/OTAController.java
new file mode 100644
index 0000000..9f559ba
--- /dev/null
+++ b/xiuosiot-backend/src/main/java/com/aiit/xiuos/controller/OTAController.java
@@ -0,0 +1,79 @@
+package com.aiit.xiuos.controller;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
+import com.aiit.xiuos.Utils.Constant;
+import com.aiit.xiuos.Utils.ResultRespons;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.List;
+
+@RestController
+@RequestMapping("/ota")
+@Slf4j
+public class OTAController {
+
+ /*
+上传接口
+ */
+//MultipartFile用于接受前端传过来的file对象
+ @PostMapping("/upload")
+ public ResultRespons upload(MultipartFile file) throws IOException {
+ String md5 = SecureUtil.md5(file.getInputStream());
+ System.out.println("文件的md5是:"+md5);
+ String filename = file.getOriginalFilename();//获取文件的名称
+// String flag = IdUtil.fastSimpleUUID();//通过Hutool工具包的IdUtil类获取uuid作为前缀
+ String rootFilePath = System.getProperty("user.dir") + "/otafiles/" + filename;
+ FileUtil.writeBytes(file.getBytes(), rootFilePath);//使用Hutool工具包将我们接收到文件保存到rootFilePath中
+ return new ResultRespons(Constant.SUCCESS_CODE, "上传成功", filename);
+ }
+
+
+ /*
+ 下载接口
+ */
+ @GetMapping("/download/{name}")
+ public ResultRespons getFiles(@PathVariable String name, HttpServletResponse response) {
+ OutputStream os;//新建一个输出流对象
+ String basePath = System.getProperty("user.dir") + "/otafiles/"; //定义文件上传的根路径
+ List fileNames = FileUtil.listFileNames(basePath);//获取所有的文件名称
+ String fileName = fileNames.stream().filter(filename -> filename.contains(name)).findAny().orElse("");//找到跟参数一致的文件
+ try {
+ if (StrUtil.isNotEmpty(fileName)) {
+ response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+ response.setContentType("application/octet-stream");
+ byte[] bytes = FileUtil.readBytes(basePath + fileName);//通过文件的路径读取文件字节流
+ os = response.getOutputStream();//通过response的输出流返回文件
+ os.write(bytes);
+ os.flush();
+ os.close();
+ return new ResultRespons(Constant.SUCCESS_CODE, "下载成功");
+ }else{
+ return new ResultRespons(Constant.ERROR_CODE, "文件名不存在");
+ }
+ } catch (Exception e) {
+ return new ResultRespons(Constant.ERROR_CODE, "下载失败");
+ }
+
+ }
+
+ @PostMapping("/delete/{name}")
+ public ResultRespons deleteFile(@PathVariable String name) throws IOException {
+ String filePath =System.getProperty("user.dir") + "/otafiles/"+name;
+ Boolean flag =FileUtil.isFile(filePath);
+ if(flag){
+ FileUtil.del(filePath);
+ return new ResultRespons(Constant.SUCCESS_CODE, "删除成功");
+ }else{
+ return new ResultRespons(Constant.ERROR_CODE, "文件不存在");
+ }
+ }
+}