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