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