From e2a02c09b9d087a49ae5dd9f70856967390237de Mon Sep 17 00:00:00 2001
From: bsw215583320 <baoshiwei121@163.com>
Date: 星期五, 01 十一月 2024 16:54:23 +0800
Subject: [PATCH] 兼容机台自建配方,实时数据通过mqtt转发
---
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java | 31 +++++++---
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java | 30 +++++++++
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttConfig.java | 5 +
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbFormula.java | 20 +++++-
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java | 2
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java | 27 ++++++++
jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java | 12 ++++
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/RealTimeDataVo.java | 9 ++
8 files changed, 117 insertions(+), 19 deletions(-)
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java
index a04fbb6..0ad3087 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MqttConstant.java
@@ -27,6 +27,18 @@
/**************************绉诲姩绔悜鏈嶅姟绔姹傛寚浠nd*******************************/
+
+ /**************************绉熸埛绔悜鏈嶅姟绔彂閫佹暟鎹畇tart*******************************/
+
+
+ String TENANT_UP_PREFIX = "tenant/up";
+ String TENANT_UP_PREFIX_REALTIME_DATA = TENANT_UP_PREFIX + "/realTime/data";
+
+
+ /**************************绉熸埛绔悜鏈嶅姟绔彂閫佹暟鎹甧nd*******************************/
+
+
+
/**************************鏈嶅姟绔悜绉诲姩绔搷搴旀寚浠tart*******************************/
//杩斿洖鏁版嵁浠呰繑鍥炵粰璇锋眰鐨勫鎴风 %s鍙戣捣璇锋眰瀹㈡埛绔痠d
//鏈嶅姟绔笅琛屾寚浠ゅ墠缂�锛堣繑鍥炵粰绉诲姩绔級
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbFormula.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbFormula.java
index 6a3d545..9f63439 100644
--- a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbFormula.java
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbFormula.java
@@ -1,15 +1,14 @@
package org.jeecg.modules.dry.entity;
import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
import java.util.Date;
-import java.math.BigDecimal;
+
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.modules.dry.vo.RealTimeDataVo;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
@@ -127,4 +126,19 @@
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "鏇存柊鏃堕棿")
private Date updateTime;
+
+
+ public DryHerbFormula(){}
+ public DryHerbFormula(RealTimeDataVo realTimeDataVo) {
+ this.code = realTimeDataVo.getIndex() + "";
+ this.delay = realTimeDataVo.getDelay();
+ this.name = realTimeDataVo.getName();
+ this.delay = realTimeDataVo.getDelay();
+ this.turn = realTimeDataVo.getTurntime();
+ this.feed = realTimeDataVo.getWeight1();
+ this.target = realTimeDataVo.getMoisture3();
+ this.windTemp = realTimeDataVo.getTemp3();
+ this.et = realTimeDataVo.getTime1();
+ this.tenantId = realTimeDataVo.getTenantid();
+ }
}
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java
index b7d2b23..7ceb381 100644
--- a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java
@@ -163,7 +163,7 @@
private String warning;
/**鐘舵��**/
- private Map<String, Object> eqp_state;
+// private Map<String, Object> eqp_state;
/**璁惧鐘舵��**/
private String eqp_status;
diff --git a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/RealTimeDataVo.java b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/RealTimeDataVo.java
index 9bc8ea9..18aece4 100644
--- a/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/RealTimeDataVo.java
+++ b/jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/RealTimeDataVo.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.dry.vo;
+import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
@@ -13,6 +14,8 @@
@Data
@ToString
public class RealTimeDataVo {
+
+ private static final long serialVersionUID = 1L;
/**宸ュ崟ID*/
private String orderId;
@@ -91,7 +94,7 @@
private Integer ai_time;
- private List<DryEquipment> eqpCodes;
+ // private List<DryEquipment> eqpCodes;
/**鎺ョ鐘舵�� 0锛氳嚜鍔� 1锛氭墜鍔� */
@@ -113,7 +116,7 @@
private Integer workorder_status;
/**鍚勯儴浣嶇姸鎬�**/
- private Map<String, Object> eqp_state;
+// private Map<String, Object> eqp_state;
/**璁惧鐘舵��**/
private String eqp_status;
@@ -137,6 +140,7 @@
private String report_head_num ; //鏁伴噺--16妗�/355.8Kg
private String report_head_machine ; //璁惧
private String report_head_accepter; //鎺ユ枡浜�
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
private Date report_head_date ; //鐢熶骇鏃ユ湡
private String report_head_leader ; //鐝粍闀�
private String report_head_techer ; //宸ヨ壓鍛�
@@ -172,6 +176,7 @@
private Boolean report_clean_door ; //闂ㄧ獥娓呯悊
private Boolean report_clean_box ; //绠变綋娓呯悊
private Boolean report_clean_record ; //鐢熶骇璁板綍娓呯悊
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
private Date report_clean_date ; //娓呭満鏃ユ湡
private String report_clean_man ; //娓呭満浜�
private Boolean report_clean_confirm ; //娓呭満纭
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
index ff98cb4..f786e32 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
@@ -3,20 +3,27 @@
import ai.djl.modality.Classifications;
import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.druid.support.json.JSONUtils;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.config.TenantContext;
+import org.jeecg.common.constant.MqttConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.IpUtils;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
import org.jeecg.modules.dry.entity.*;
+import org.jeecg.modules.dry.mqtt.MqttConfig;
+import org.jeecg.modules.dry.mqtt.MqttUtil;
import org.jeecg.modules.dry.service.*;
//import org.jeecg.modules.dry.util.HerbUtil;
@@ -59,6 +66,12 @@
// private HerbUtil herbUtil;
@Autowired
+ private MqttUtil mqttUtil;
+
+ @Autowired
+ private MqttConfig mqttConfig;
+
+ @Autowired
private IDryHerbInfoService herbInfoService;
@Autowired
@@ -77,7 +90,19 @@
@ApiOperation(value="鎺ユ敹瀹炴椂鏁版嵁Json", notes="璁惧瀹炴椂鏁版嵁涓婁紶")
@PostMapping("/sendRealTimeDataJson")
- public Result<?> realTimeDataJson(@RequestBody RealTimeDataVo realTimeDataVo) {
+ public Result<?> realTimeDataJson(@RequestBody RealTimeDataVo realTimeDataVo) {
+ try {
+ if ("user".equals(mqttConfig.getRole())){
+ MqttMessage mqttMessage = new MqttMessage();
+ mqttMessage.setQos(0);
+ mqttMessage.setPayload(JSONObject.toJSONString(realTimeDataVo).getBytes());
+ mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA,mqttMessage);
+ }
+
+ } catch (MqttException e) {
+ e.printStackTrace();
+ }
+
return dryRealTimeDataService.realTimeDataHandle(realTimeDataVo);
}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttConfig.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttConfig.java
index 395d41d..b55069f 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttConfig.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttConfig.java
@@ -3,6 +3,7 @@
import cn.hutool.core.thread.ThreadUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
@@ -20,6 +21,7 @@
/**
* mqtt
*/
+@Data
@Slf4j
@Configuration
public class MqttConfig {
@@ -92,6 +94,9 @@
//璁㈤槄绉诲姩绔笂琛屾寚浠�
mqttClient.subscribe(MqttConstant.MOBILE_UP);
System.err.println("admin璁㈤槄" + MqttConstant.MOBILE_UP);
+ // 璁㈤槄绉熸埛瀹炴椂鏁版嵁
+ mqttClient.subscribe(MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA);
+ System.out.println("admin璁㈤槄" + MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA);
initClients();
break;
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java
index 55c571f..e1ccd32 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mqtt/MqttSampleCallback.java
@@ -1,6 +1,7 @@
package org.jeecg.modules.dry.mqtt;
import cn.hutool.core.thread.ThreadUtil;
+import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
@@ -11,6 +12,8 @@
import org.jeecg.common.util.RedisUtil;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.dry.api.EmqxApi;
+import org.jeecg.modules.dry.service.IDryRealTimeDataService;
+import org.jeecg.modules.dry.vo.RealTimeDataVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
@@ -29,6 +32,9 @@
private BaseCommonService baseCommonService;
@Autowired
private RedisUtil redisUtil;
+
+ @Autowired
+ private IDryRealTimeDataService realTimeDataService;
@Override
@@ -84,7 +90,12 @@
// 鏅�氱敤鎴�
case "user":
System.err.println("user");
- parseUserCommand(topic, mqttMessage);
+ try {
+ parseUserCommand(topic, mqttMessage);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
break;
}
@@ -111,7 +122,11 @@
if (messageJson.containsKey("timestamp")) {
messageJson.put("timestamp", DateUtils.zone2Str(messageJson.get("timestamp").toString()));
}
- baseCommonService.addLog(message, CommonConstant.LOG_TYPE_MQTT, CommonConstant.OPERATE_MQTT_1);
+ // 瀹炴椂鏁版嵁涓婁紶澶绻佷笖鏁版嵁鍐呭瓒呰繃瀛楁澶у皬涓嶈褰曟棩蹇�
+ if (!topic.equals(MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA)){
+ baseCommonService.addLog(message, CommonConstant.LOG_TYPE_MQTT, CommonConstant.OPERATE_MQTT_1);
+ }
+
switch (topic) {
// 鏌ヨ璁惧鍦ㄧ嚎
case MqttConstant.MOBILE_QUERY_EQU_STATU:
@@ -149,6 +164,17 @@
});
break;
+ // 鎺ユ敹璁惧瀹炴椂鏁版嵁
+ case MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA:
+ try {
+ RealTimeDataVo vo = JSON.parseObject(message, RealTimeDataVo.class);
+ realTimeDataService.realTimeDataHandle(vo);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ break;
+
}
}
diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
index c2c7ff0..5c6d723 100644
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
@@ -97,6 +97,10 @@
// 鏍规嵁绉熸埛id鍜屽伐鍗曞彿鏌ヨ鏁版嵁搴撴槸鍚︽湁璁板綍锛屾湁鍒欒繑鍥烇紝娌℃湁鍒欐柊澧炰竴鏉″啀杩斿洖
orderVo = getOrSaveDryOrderVoDB(realTimeDataVo);
}
+ if (orderVo == null) {
+ log.error("宸ュ崟涓嶅瓨鍦紝宸ュ崟鍙凤細"+realTimeDataVo.getWorkorder()+",璁惧锛�" + realTimeDataVo.getMachineid() +",鑽潗锛�" + realTimeDataVo.getName());
+ return Result.error("宸ュ崟涓嶅瓨鍦�");
+ }
// 2 鏇存柊宸ュ崟瀹炴椂鏁版嵁
// 2.1 灏嗗伐鍗曚腑鐨勬暟鎹浛鎹负鏈�鏂版暟鎹�
@@ -126,7 +130,7 @@
orderVo.setState_valve(realTimeDataVo.getState_valve());
orderVo.setOrderStatus(realTimeDataVo.getWorkorder_status());
orderVo.setEqp_status(realTimeDataVo.getEqp_status());
- orderVo.setEqp_state(realTimeDataVo.getEqp_state());
+// orderVo.setEqp_state(realTimeDataVo.getEqp_state());
orderVo.setWarning(realTimeDataVo.getEqp_warning());
orderVo.setFault(realTimeDataVo.getEqp_fault());
orderVo.setLevel(realTimeDataVo.getLevel());
@@ -232,7 +236,6 @@
* @param realTimeDataVo
* @return
*/
- @NotNull
private DryOrderVo saveNewOrder(RealTimeDataVo realTimeDataVo) {
DryOrderVo orderVo;
// 鏌ヨ鑽潗
@@ -242,6 +245,10 @@
// 鍒涘缓鏂板伐鍗�
orderVo = new DryOrderVo(realTimeDataVo);
+ if (herbFormula == null) {
+ log.error("鏈壘鍒拌嵂鏉愶細"+realTimeDataVo.getIndex() +","+realTimeDataVo.getName() +",鏈哄彴锛�" + realTimeDataVo.getMachineid());
+ return null;
+ }
orderVo.setHerbId(herbFormula.getId());
orderVo.setEquId(equ.getId());
DryOrder dryOrder = BeanUtil.toBean(orderVo, DryOrder.class);
@@ -275,12 +282,14 @@
private DryHerbFormula queryHerbByIndexTenant(RealTimeDataVo realTimeDataVo) {
LambdaQueryWrapper<DryHerbFormula> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DryHerbFormula::getTenantId, realTimeDataVo.getTenantid());
- queryWrapper.eq(DryHerbFormula::getCode, realTimeDataVo.getIndex());
+ queryWrapper.eq(DryHerbFormula::getName, realTimeDataVo.getName());
DryHerbFormula one = dryHerbFormulaService.getOne(queryWrapper);
-// if (one == null) {
-// one = new DryHerb(realTimeDataVo);
-// herbService.save(one);
-// }
+ if (one == null) {
+ one = new DryHerbFormula(realTimeDataVo);
+ DryEquipment dryEquipment = equipmentService.selectByTenantIdEquipmentId(realTimeDataVo.getTenantid() + "", realTimeDataVo.getMachineid());
+ one.setEqpType(dryEquipment.getType());
+ dryHerbFormulaService.save(one);
+ }
return one;
}
@@ -318,7 +327,7 @@
public Result<?> queryMachineRealTImeData(RealTimeDataVo realTimeDataVo) {
TenantContext.setTenant(realTimeDataVo.getTenantid()+"");
- // 鏌ヨ鎵�鏈夋満鍙版煡璇㈢粍瑁�
+ // 鏌ヨ鎵�鏈夋満鍙�,鏌ヨ璇彞缁勮
LambdaQueryWrapper<DryEquipment> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DryEquipment::getTenantId, realTimeDataVo.getTenantid());
queryWrapper.eq(DryEquipment::getEnable, "Y");
@@ -351,9 +360,11 @@
dList.add(50d);
}
+ } else {
+ // 濡傛灉娌℃湁鐢熶骇锛屾晥鐜囩疆0
+ dList.add(0d);
}
- // 濡傛灉娌℃湁鐢熶骇锛屾晥鐜囩疆0
- dList.add(0d);
+
});
}
--
Gitblit v1.9.3