From ad356be34721e74449f5141d1a062b3a81c57515 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期四, 21 八月 2025 15:05:51 +0800
Subject: [PATCH] 小程序后端模块(子系统)增加水肥机远程操作功能,包括开关注肥、天关搅拌、清除注肥泵报警等功能。
---
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Cd4MqttParameter.java | 15 +
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Com4MqttCtrl.java | 193 ++++++++++++++
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Com4MqttSv.java | 50 +++
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttSv.java | 15 +
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttDto.java | 17 +
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Dto4MqttBase.java | 31 ++
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttCdParam.java | 23 +
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttInjectCtrl.java | 143 +++++++++++
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttStirCtrl.java | 143 +++++++++++
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttFaultCtrl.java | 120 +++++++++
10 files changed, 750 insertions(+), 0 deletions(-)
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Cd4MqttParameter.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Cd4MqttParameter.java
new file mode 100644
index 0000000..64537b7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Cd4MqttParameter.java
@@ -0,0 +1,15 @@
+package com.dy.pipIrrWechat.common;
+
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 14:53
+ * @Description
+ */
+@Data
+@SuperBuilder
+public class Cd4MqttParameter {
+ public Integer no ;//璁惧缂栧彿
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Com4MqttCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Com4MqttCtrl.java
new file mode 100644
index 0000000..f2d0347
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Com4MqttCtrl.java
@@ -0,0 +1,193 @@
+package com.dy.pipIrrWechat.common;
+
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
+import com.dy.common.util.Callback;
+import com.dy.common.util.IDLongGenerator;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.command.ComResultWait;
+import com.dy.pipIrrGlobal.pojoPr.PrStManure;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.env.Environment;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 14:50
+ * @Description
+ */
+
+public abstract class Com4MqttCtrl {
+
+ @Autowired
+ protected Environment env ;
+
+ @Autowired
+ protected RestTemplate restTemplate ;
+
+ @Value("${mw.waitMwRtnResultTimeout}")
+ protected int waitMwRtnResultTimeout ;
+
+ @Value("${mw.mqttCallbackUrl_rm}")
+ protected String mqttResultSendWebUrl;
+
+ //姘磋偉鏈哄璞�
+ protected PrStManure ctrlPo ;
+ //寮傛绛夊緟鍣�
+ protected CompletableFuture<MqttSubMsg> feature;
+ //鍛戒护鍚嶇О
+ protected String comName ;
+ //鍛戒护鏃ュ織id
+ protected Long comId ;
+
+ /**
+ * 鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+ * @param comSv
+ * @param comCode
+ * @param dto
+ * @param bindingResult
+ * @return
+ */
+ public BaseResponse<Object> pre1(Com4MqttSv comSv, String comCode, Dto4MqttBase dto, BindingResult bindingResult) {
+ if (bindingResult != null && bindingResult.hasErrors()) {
+ return BaseResponseUtils.buildError(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+ }
+ String msg = this.checkDto(dto) ;
+ if(msg != null){
+ return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝" + msg) ;
+ }
+ return null ;
+ }
+
+ /**
+ * 鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+ * @param comSv
+ * @param protocol
+ * @param protocolVer
+ * @param comCode
+ * @param dto
+ * @param bindingResult
+ * @return
+ */
+ public BaseResponse<Object> pre2(Com4MqttSv comSv, String protocol, Short protocolVer, String comCode, Dto4MqttBase dto, BindingResult bindingResult) {
+ //寰楀埌姘磋偉鏈哄璞�
+ ctrlPo = comSv.getManure(dto.getManureId());
+ if (ctrlPo == null) {
+ return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝浠庢暟鎹簱涓湭寰楀埌姘磋偉鏈烘暟鎹�") ;
+ }
+ //妫�鏌ュ崗璁�
+ String msg = comSv.checkProtocol(ctrlPo) ;
+ if(msg != null) {
+ return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝" + msg) ;
+ }
+ //寰楀埌鍔熻兘鐮佸搴旂殑鍛戒护鍚嶇О
+ comName = comSv.getCommandName(comCode, protocol, protocolVer) ;
+ if(comName == null) {
+ return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝鏈緱鍒板姛鑳界爜瀵瑰簲鍛戒护鍚嶇О") ;
+ }
+ return null ;
+ }
+ /**
+ * 鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+ * @param comSv sv瀵硅薄
+ * @param manureId 姘磋偉鏈篒D
+ * @param operator 褰撳墠鐢ㄧ櫥褰曠敤鎴穒d(鎿嶄綔浜�)
+ * @param protocol 鍗忚
+ * @param protocolVerion 鍗忚
+ * @param comCode 鍔熻兘鐮�
+ * @param param 鍛戒护鍙傛暟
+ * @return
+ */
+ public BaseResponse<Object> pre3(Com4MqttSv comSv, Long manureId, Long operator, String protocol, Short protocolVerion, String comCode, Cd4MqttParameter param) {
+ comId = new IDLongGenerator().generate();
+ //鐢熸垚骞朵繚瀛樺懡浠ゆ棩蹇�
+ RmCommandHistory po = comSv.saveComHistoryPo(comId,
+ protocol + protocolVerion ,
+ comCode,
+ comName,
+ manureId,
+ ctrlPo.fboxId ,
+ param,
+ operator);
+ if(po == null){
+ return BaseResponseUtils.buildError("鏈嶅姟绔嚭閿欙紝鏈兘鐢熸垚骞朵繚瀛樺懡浠ゆ棩蹇�") ;
+ }
+ return null ;
+ }
+ /**
+ * 鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+ * @return
+ */
+ public void pre4() {
+ feature = new CompletableFuture<>();
+ ComResultWait.put(comId, feature);
+ }
+
+ /**
+ * 鍙戦�佸懡浠�
+ * @param comSv
+ * @param com
+ * @return
+ */
+ public BaseResponse<Object> doSend(Com4MqttSv comSv, Command com){
+ //寰楀埌閫氫俊涓棿浠跺彂閫佸懡浠ょ殑web URL
+ String rqUrl = comSv.get2MwRequestUrl(env, comSv.ContextComSend) ;
+ //鍚戦�氫俊涓棿浠跺彂閫亀eb璇锋眰
+ BaseResponse res = comSv.sendPostRequest2Mw(restTemplate, rqUrl, com) ;
+ //澶勭悊閫氫俊涓棿浠跺web璇锋眰鐨勫搷搴�
+ String msg = comSv.dealMwDealResponse(res) ;
+ if(msg != null) {
+ return BaseResponseUtils.buildError(msg) ;
+ }else{
+ return null ;
+ }
+ }
+
+ /**
+ * 鍙戦�佸懡浠ゅ悗
+ * @return
+ */
+ public BaseResponse<Object> after(String comCode, Callback callback) {
+ try{
+ //绛夊緟閫氫俊涓棿浠堕�氱煡姘磋偉鏈烘墽琛屽懡浠や笂琛屾暟鎹紙鍛戒护缁撴灉锛�
+ MqttSubMsg subMsg = feature.get(waitMwRtnResultTimeout, TimeUnit.SECONDS);
+ return BaseResponseUtils.buildSuccess(this.dealComResult(comCode, subMsg, callback));
+ }catch (Exception e){
+ return BaseResponseUtils.buildFail("绛夊緟閫氫俊涓棿浠堕�氱煡鍛戒护缁撴灉瓒呮椂");
+ }
+ }
+
+ /**
+ * 鍙戦�佸懡浠ゆ渶鍚�
+ * @return
+ */
+ public void end(){
+ try {
+ //鏈�鍚庢竻闄ompletableFuture缂撳瓨
+ if(ComResultWait.contain(comId)){
+ ComResultWait.remove(comId);
+ }
+ }catch (Exception ee){}
+ }
+
+ /**
+ * 楠岃瘉
+ * @param dto
+ * @return
+ */
+ protected abstract String checkDto(Dto4MqttBase dto) ;
+
+
+ /**
+ * 鐢熸垚鍛戒护杩斿洖淇℃伅
+ */
+ protected abstract String dealComResult(String code, MqttSubMsg subMsg, Callback callback);
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Com4MqttSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Com4MqttSv.java
new file mode 100644
index 0000000..c867625
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Com4MqttSv.java
@@ -0,0 +1,50 @@
+package com.dy.pipIrrWechat.common;
+
+import com.dy.pipIrrGlobal.command.Command4MqttSv;
+import com.dy.pipIrrGlobal.daoPr.PrStManureMapper;
+import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
+import com.dy.pipIrrGlobal.pojoPr.PrStManure;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 14:46
+ * @Description
+ */
+public class Com4MqttSv extends Command4MqttSv {
+
+ @Autowired
+ protected PrStManureMapper prStManureDao ;
+ @Autowired
+ protected RmCommandHistoryMapper rmCommandHistoryDao ;
+
+ public PrStManure getManure(Long manureId){
+ return this.getManure(prStManureDao, manureId);
+ }
+ /**
+ * 鍒涘缓鍛戒护鏃ュ織瀵硅薄
+ *
+ * @param comId 涓婚敭
+ * @param commandCode 鍔熻兘鐮�
+ * @param rtuAddr 闃�鎺у櫒鍦板潃
+ * @param protocol 閫氳鍗忚鍚嶇О
+ * @param param 鍙傛暟鏁版嵁
+ * @param operator 鎿嶄綔鍛�
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public RmCommandHistory saveComHistoryPo(Long comId,
+ String protocol,
+ String commandCode,
+ String commandName,
+ Long manureId,
+ String rtuAddr,
+ Object param,
+ Long operator) {
+ return this.saveComHistoryPo(rmCommandHistoryDao, comId, protocol, commandCode, commandName, manureId, rtuAddr, param, operator) ;
+ }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Dto4MqttBase.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Dto4MqttBase.java
new file mode 100644
index 0000000..a5ab3a5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/common/Dto4MqttBase.java
@@ -0,0 +1,31 @@
+package com.dy.pipIrrWechat.common;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 14:49
+ * @Description
+ */
+@Data
+public class Dto4MqttBase {
+ public static final long serialVersionUID = 202506201459001L;
+
+ /**
+ * 姘磋偉鏈篒D
+ */
+ @NotNull(message = "姘磋偉鏈轰笉鑳戒负绌�")
+ public Long manureId;
+
+ /**
+ * 姘磋偉鏈哄悕绉�
+ */
+ public String manureName;
+
+ /**
+ * 鎿嶄綔浜�
+ */
+ @NotNull(message = "鎿嶄綔浜轰笉鑳戒负绌�")
+ public Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttCdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttCdParam.java
new file mode 100644
index 0000000..0638a44
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttCdParam.java
@@ -0,0 +1,23 @@
+package com.dy.pipIrrWechat.mqtt;
+
+import com.dy.pipIrrWechat.common.Cd4MqttParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 14:52
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class MonitorMqttCdParam extends Cd4MqttParameter {
+ //鍚仠鍔ㄤ綔锛宼rue鏄紝false鍚�
+ //鍙互鎵ц鍔熻兘鐮� 00锛�01锛�02锛�03鐨勫姩浣�
+ public boolean startTrueStopFalse;//
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttDto.java
new file mode 100644
index 0000000..fd369bf
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttDto.java
@@ -0,0 +1,17 @@
+package com.dy.pipIrrWechat.mqtt;
+
+import com.dy.pipIrrWechat.common.Dto4MqttBase;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 14:48
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class MonitorMqttDto extends Dto4MqttBase {
+ public static final long serialVersionUID = 202508211449001L;
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttFaultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttFaultCtrl.java
new file mode 100644
index 0000000..338d34e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttFaultCtrl.java
@@ -0,0 +1,120 @@
+package com.dy.pipIrrWechat.mqtt;
+
+import com.alibaba.fastjson2.JSON;
+import com.dy.common.aop.SsoAop;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrWechat.common.Com4MqttCtrl;
+import com.dy.pipIrrWechat.common.Dto4MqttBase;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+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 java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 15:00
+ * @Description
+ */
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰")
+@RestController()
+@RequestMapping(path = "mqttFault")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class MonitorMqttFaultCtrl extends Com4MqttCtrl {
+
+ private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+ private static final String Protocol = ProtocolConstantSdV1.protocolName ;
+ private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ;
+ private static final String ComCode = CodeSdV1.cd_Fault ;
+
+ @Autowired
+ private MonitorMqttSv sv ;
+ /**
+ * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "clear", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> send(@RequestBody @Valid MonitorMqttDto dto, BindingResult bindingResult) {
+ BaseResponse<Object> res ;
+ //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+ res = super.pre1(sv, ComCode, dto, bindingResult);
+ if(res == null) {
+ //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+ res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+ MonitorMqttCdParam comParam = MonitorMqttCdParam.builder().no(ctrlPo.no).startTrueStopFalse(true).build();
+ res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+ super.pre4();
+ try {
+ //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
+ Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
+ com.rtuResultSendWebUrl = mqttResultSendWebUrl;
+ com.param = comParam ;
+ //鍙戦�佸懡浠�
+ res = super.doSend(sv, com);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ悗
+ res = super.after(ComCode, null);
+ }
+ } catch (Exception e) {
+ res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+ } finally {
+ //鏈�缁�
+ super.end();
+ }
+ }
+ }
+ }
+ return res ;
+ }
+
+ @Override
+ protected String checkDto(Dto4MqttBase dto) {
+ return null;
+ }
+
+ @Override
+ protected String dealComResult(String code, MqttSubMsg subMsg, Callback callback){
+ String msg;
+ if(subMsg != null){
+ if(subMsg.vo4Up != null && Proxy.isProxyClass(subMsg.vo4Up.getClass())){
+ // 鑾峰彇浠g悊鐨� InvocationHandler
+ InvocationHandler handler = Proxy.getInvocationHandler(subMsg.vo4Up);
+ String json = JSON.toJSONString(handler) ;
+ ManureVo vo = JSON.parseObject(json, ManureVo.class);
+ msg = vo.toString() ;
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ return msg;
+ }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttInjectCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttInjectCtrl.java
new file mode 100644
index 0000000..9df2a79
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttInjectCtrl.java
@@ -0,0 +1,143 @@
+package com.dy.pipIrrWechat.mqtt;
+
+import com.alibaba.fastjson2.JSON;
+import com.dy.common.aop.SsoAop;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrWechat.common.Com4MqttCtrl;
+import com.dy.pipIrrWechat.common.Dto4MqttBase;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+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 java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 14:56
+ * @Description
+ */
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "娉ㄨ偉鍚仠")
+@RestController()
+@RequestMapping(path = "mqttInject")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class MonitorMqttInjectCtrl extends Com4MqttCtrl {
+
+ private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+ private static final String Protocol = ProtocolConstantSdV1.protocolName ;
+ private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ;
+ private static final String ComCode = CodeSdV1.cd_Inject ;
+
+ @Autowired
+ private MonitorMqttSv sv ;
+
+ /**
+ * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "start", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> start(@RequestBody @Valid MonitorMqttDto dto, BindingResult bindingResult) {
+ return this.send(dto, bindingResult, true) ;
+ }
+
+ /**
+ * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "stop", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> stop(@RequestBody @Valid MonitorMqttDto dto, BindingResult bindingResult) {
+ return this.send(dto, bindingResult, false) ;
+ }
+
+ /**
+ * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ private BaseResponse<Object> send(MonitorMqttDto dto, BindingResult bindingResult, boolean startTrueStopFalse) {
+ BaseResponse<Object> res ;
+ //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+ res = super.pre1(sv, ComCode, dto, bindingResult);
+ if(res == null) {
+ //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+ res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+ MonitorMqttCdParam comParam = MonitorMqttCdParam.builder().no(ctrlPo.no).startTrueStopFalse(startTrueStopFalse).build();
+ res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+ super.pre4();
+ try {
+ //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
+ Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
+ com.rtuResultSendWebUrl = mqttResultSendWebUrl;
+ com.param = comParam ;
+ //鍙戦�佸懡浠�
+ res = super.doSend(sv, com);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ悗
+ res = super.after(ComCode, null);
+ }
+ } catch (Exception e) {
+ res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+ } finally {
+ //鏈�缁�
+ super.end();
+ }
+ }
+ }
+ }
+ return res ;
+ }
+
+ @Override
+ protected String checkDto(Dto4MqttBase dto) {
+ return null;
+ }
+
+ @Override
+ protected String dealComResult(String code, MqttSubMsg subMsg, Callback callback){
+ String msg;
+ if(subMsg != null){
+ if(subMsg.vo4Up != null && Proxy.isProxyClass(subMsg.vo4Up.getClass())){
+ // 鑾峰彇浠g悊鐨� InvocationHandler
+ InvocationHandler handler = Proxy.getInvocationHandler(subMsg.vo4Up);
+ String json = JSON.toJSONString(handler) ;
+ ManureVo vo = JSON.parseObject(json, ManureVo.class);
+ msg = vo.toString() ;
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ return msg;
+ }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttStirCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttStirCtrl.java
new file mode 100644
index 0000000..98ee790
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttStirCtrl.java
@@ -0,0 +1,143 @@
+package com.dy.pipIrrWechat.mqtt;
+
+import com.alibaba.fastjson2.JSON;
+import com.dy.common.aop.SsoAop;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1;
+import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrWechat.common.Com4MqttCtrl;
+import com.dy.pipIrrWechat.common.Dto4MqttBase;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+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 java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 14:43
+ * @Description
+ */
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "鎼呮媽鍚仠")
+@RestController()
+@RequestMapping(path = "mqttStir")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class MonitorMqttStirCtrl extends Com4MqttCtrl {
+
+ private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+ private static final String Protocol = ProtocolConstantSdV1.protocolName ;
+ private static final Short ProtocolVersion = ProtocolConstantSdV1.protocolVer ;
+ private static final String ComCode = CodeSdV1.cd_Stir ;
+
+ @Autowired
+ private MonitorMqttSv sv ;
+
+ /**
+ * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "start", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> start(@RequestBody @Valid MonitorMqttDto dto, BindingResult bindingResult) {
+ return this.send(dto, bindingResult, true) ;
+ }
+ /**
+ * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "stop", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> stop(@RequestBody @Valid MonitorMqttDto dto, BindingResult bindingResult) {
+ return this.send(dto, bindingResult, false) ;
+ }
+ /**
+ * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ private BaseResponse<Object> send(MonitorMqttDto dto, BindingResult bindingResult, boolean startTrueStopFalse) {
+ BaseResponse<Object> res ;
+ //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+ res = super.pre1(sv, ComCode, dto, bindingResult);
+ if(res == null) {
+ //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+ res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+ MonitorMqttCdParam comParam = MonitorMqttCdParam.builder().no(ctrlPo.no).startTrueStopFalse(startTrueStopFalse).build();
+ res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+ super.pre4();
+ try {
+ //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛�
+ Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode);
+ com.rtuResultSendWebUrl = mqttResultSendWebUrl;
+ com.param = comParam ;
+ //鍙戦�佸懡浠�
+ res = super.doSend(sv, com);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ悗
+ res = super.after(ComCode, null);
+ }
+ } catch (Exception e) {
+ res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+ } finally {
+ //鏈�缁�
+ super.end();
+ }
+ }
+ }
+ }
+ return res ;
+ }
+
+ @Override
+ protected String checkDto(Dto4MqttBase dto) {
+ return null;
+ }
+
+ @Override
+ protected String dealComResult(String code, MqttSubMsg subMsg, Callback callback){
+ String msg;
+ if(subMsg != null){
+ if(subMsg.vo4Up != null && Proxy.isProxyClass(subMsg.vo4Up.getClass())){
+ // 鑾峰彇浠g悊鐨� InvocationHandler
+ InvocationHandler handler = Proxy.getInvocationHandler(subMsg.vo4Up);
+ String json = JSON.toJSONString(handler) ;
+ ManureVo vo = JSON.parseObject(json, ManureVo.class);
+ msg = vo.toString() ;
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ return msg;
+ }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttSv.java
new file mode 100644
index 0000000..0cecad9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/mqtt/MonitorMqttSv.java
@@ -0,0 +1,15 @@
+package com.dy.pipIrrWechat.mqtt;
+
+import com.dy.pipIrrWechat.common.Com4MqttSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/21 14:45
+ * @Description
+ */
+@Slf4j
+@Service()
+public class MonitorMqttSv extends Com4MqttSv {
+}
--
Gitblit v1.8.0