From b38019aae593a66c16f7e75d6e37d14eb8d2c42e Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei@zhuguifeideiMac.local>
Date: 星期二, 22 七月 2025 08:55:15 +0800
Subject: [PATCH] 修改接收实时数据接口-故障处理

---
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java |  237 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 230 insertions(+), 7 deletions(-)

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 46ee064..0f1b58f 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
@@ -1,18 +1,36 @@
 package org.jeecg.modules.dry.controller;
 
 
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.constant.MqttConstant;
+import org.jeecg.common.util.IpUtils;
+import org.jeecg.common.util.SpringContextUtils;
+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.vo.CommandMessageVo;
-import org.jeecg.modules.dry.vo.RealTimeDataVo;
+//import org.jeecg.modules.dry.util.HerbUtil;
+import org.jeecg.modules.dry.vo.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import java.io.StringWriter;
+import java.util.*;
 
 
 @Api(tags = "瀹炴椂鏁版嵁澶勭悊鎺у埗鍣�")
@@ -24,31 +42,89 @@
     @Autowired
     private IDryRealTimeDataService dryRealTimeDataService;
 
+    @Autowired
+    private IDryHerbFormulaService dryHerbFormulaService;
 
-    @ApiOperation(value="娴嬭瘯", notes="杩斿洖Hello")
+    @Autowired
+    private IDryHerbInfoService dryHerbInfoService;
+
+    @Autowired
+    private IDryEqpTypeService dryEqpTypeService;
+
+//    @Autowired
+//    private HerbUtil herbUtil;
+
+    @Autowired
+    private MqttUtil mqttUtil;
+
+    @Autowired
+    private MqttConfig mqttConfig;
+
+    @Autowired
+    private IDryHerbInfoService herbInfoService;
+
+    @Autowired
+    private IDryHerbFormulaHisService dryHerbFormulaHisService;
+
+    @Autowired
+    private IDryEquipmentService dryEquipmentService;
+
+
+    @ApiOperation(value = "娴嬭瘯", notes = "杩斿洖Hello")
     @GetMapping("/hello")
     public Result<?> sayHello() {
         return Result.ok("Hello");
     }
 
-    @ApiOperation(value="鎺ユ敹瀹炴椂鏁版嵁Json", notes="璁惧瀹炴椂鏁版嵁涓婁紶")
+    @ApiOperation(value = "鎺ユ敹瀹炴椂鏁版嵁Json", notes = "璁惧瀹炴椂鏁版嵁涓婁紶")
     @PostMapping("/sendRealTimeDataJson")
     public Result<?> realTimeDataJson(@RequestBody RealTimeDataVo realTimeDataVo) {
+        try {
+            if (mqttConfig.isEnable() && "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);
+            }
+
+            if ("user".equals(mqttConfig.getRole())) {
+                //澶勭悊鏁呴殰淇℃伅
+                dryRealTimeDataService.fitFaultRecord(realTimeDataVo);
+            }
+
+        } catch (MqttException e) {
+            e.printStackTrace();
+        }
+
         return dryRealTimeDataService.realTimeDataHandle(realTimeDataVo);
     }
 
+    @ApiOperation(value = "鎺ユ敹瀹炴椂鏁版嵁Json", notes = "璁惧瀹炴椂鏁版嵁涓婁紶")
+    @PostMapping("/sendRealTimeDataJson2")
+    public Result<?> realTimeDataJson2(@RequestBody RealTimeDataParentVo realTimeDataParentVo) {
+        return dryRealTimeDataService.realTimeDataHandle(realTimeDataParentVo);
+
+    }
 
 
-    @ApiOperation(value="鑾峰彇璁惧瀹炴椂鏁版嵁", notes="閫氳繃绉熸埛ID鍜岃澶囩紪鐮佽幏鍙栧疄鏃舵暟鎹�")
+    @ApiOperation(value = "鑾峰彇璁惧瀹炴椂鏁版嵁", notes = "閫氳繃绉熸埛ID鍜岃澶囩紪鐮佽幏鍙栧疄鏃舵暟鎹�")
     @GetMapping("/getRealTimeData")
     public Result<?> queryMachineRealTimeData(RealTimeDataVo realTimeDataVo) {
         return dryRealTimeDataService.queryMachineRealTImeData(realTimeDataVo);
     }
 
-    @ApiOperation(value="鑾峰彇杞﹂棿缁熻鏁版嵁", notes="閫氳繃绉熸埛ID鑾峰彇杞﹂棿缁熻鏁版嵁")
+    @ApiOperation(value = "鑾峰彇杞﹂棿缁熻鏁版嵁", notes = "閫氳繃绉熸埛ID鑾峰彇杞﹂棿缁熻鏁版嵁")
     @GetMapping("/workshopStatistics")
     public Result<?> workshopStatistics(RealTimeDataVo realTimeDataVo) {
         return dryRealTimeDataService.queryWorkshopStatistics(realTimeDataVo);
+    }
+
+
+    @ApiOperation(value = "鑾峰彇鎵�鏈夋満鍙�", notes = "閫氳繃绉熸埛ID鑾峰彇鎵�鏈夋満鍙版暟鎹�")
+    @GetMapping("/queryAllEqps")
+    public Result<?> queryAllEqps(DryEquipment equipment) {
+        List<DryEquipment> dryEquipments = dryEquipmentService.queryEqusByTenantId(equipment);
+        return Result.OK(dryEquipments);
     }
 
 
@@ -61,9 +137,156 @@
      * 1013 鐑鍚姩    1014 寮�闂ㄨ瀵�
      * 1015 鍑烘枡鎸夐挳
      */
-    @ApiOperation(value="鍙戦�佹帶鍒舵寚浠�", notes="鍚戞湇鍔$鍙戦�佹帶鍒舵寚浠わ紝鐢辨湇鍔$閫氳繃socket杞彂缁欐帶鍒舵ā鍧�")
+    @ApiOperation(value = "鍙戦�佹帶鍒舵寚浠�", notes = "鍚戞湇鍔$鍙戦�佹帶鍒舵寚浠わ紝鐢辨湇鍔$閫氳繃socket杞彂缁欐帶鍒舵ā鍧�")
     @PostMapping("/sendCommand")
     public Result<?> sendCommand(@RequestBody CommandMessageVo msgVo) {
         return dryRealTimeDataService.sendSocketMsg(msgVo);
     }
+
+//
+//    @ApiOperation(value = "鑽潗璇嗗埆")
+//    @PostMapping("/identify")
+//    public Result<?> identify(@RequestParam("file") MultipartFile file) throws Exception {
+//        try {
+//            if (file.isEmpty()) {
+//                throw new RuntimeException("涓婁紶鏂囦欢涓嶈兘涓虹┖");
+//            }
+//            InputStream inputStream = file.getInputStream();
+//            List<Classifications.Classification> predict = herbUtil.predict(inputStream);
+//
+//            if(predict.size()>0) {
+//                Map<String, Double> collect = predict.stream().collect(Collectors.toMap(Classifications.Classification::getClassName, Classifications.Classification::getProbability));
+//
+//
+//                List<DryHerbInfoVo> voList = new ArrayList<>();
+//                Set<String> strings = collect.keySet();
+//                List<DryHerbInfo> list = herbInfoService.list(new LambdaQueryWrapper<DryHerbInfo>().in(DryHerbInfo::getPinyin, strings));
+//                list.forEach(item -> {
+//                    DryHerbInfoVo dryHerbInfoVo = new DryHerbInfoVo();
+//                    BeanUtil.copyProperties(item, dryHerbInfoVo);
+//                    dryHerbInfoVo.setProbabily(collect.get(item.getPinyin()));
+//                    voList.add(dryHerbInfoVo);
+//                });
+//
+//                List<DryHerbInfoVo> collect1 = voList.stream().sorted(Comparator.comparing(DryHerbInfoVo::getProbabily, Comparator.reverseOrder())).
+//                        collect(Collectors.toList());
+//
+//                return Result.ok(collect1);
+//            } else {
+//                return Result.error("AI璇嗗埆鏈嶅姟寮傚父");
+//            }
+//
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return Result.error("AI璇嗗埆鏈嶅姟寮傚父");
+//        }
+//    }
+
+    /**
+     * 鏍规嵁璁惧鍜岀鎴锋煡璇㈣璁惧绫诲瀷鐨勫共鐕ラ厤鏂癸紝灏嗛厤鏂硅浆鎴恱ml鏍煎紡锛屼互瀛楃涓叉柟寮忚繑鍥�
+     *
+     * @param tenantId
+     * @param eqpCode
+     * @return
+     * @throws JAXBException
+     */
+    @ApiOperation(value = "骞茬嚗閰嶆柟鑾峰彇", notes = "骞茬嚗閰嶆柟涓嬪彂")
+    @GetMapping(value = "/queryFormula")
+    public Result<String> queryFormulaByEqpType(Integer tenantId, String eqpCode) throws JAXBException {
+        //鑾峰彇request
+        HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
+        // 鑾峰彇璇锋眰涓绘満鐨処P鍦板潃
+        String ip = IpUtils.getIpAddr(request);
+        DryEquipment dryEquipment = dryEquipmentService.selectByTenantIdEquipmentId(tenantId + "", eqpCode);
+        if (dryEquipment != null) {
+            if (dryEquipment.getIp().equals(ip)) {
+            } else {
+                return Result.error("璁惧IP鍦板潃鏈厤缃細" + ip);
+            }
+        } else {
+            return Result.error("璁惧涓嶅瓨鍦�");
+        }
+        LambdaQueryWrapper<DryHerbFormula> queryWrapper = new LambdaQueryWrapper<DryHerbFormula>();
+        queryWrapper.eq(DryHerbFormula::getEqpType, dryEquipment.getType())
+                .eq(DryHerbFormula::getTenantId, tenantId);
+        List<DryHerbFormula> list = dryHerbFormulaService.list(queryWrapper);
+        Formulas formulas = new Formulas();
+        list.forEach(item -> {
+            DryHerbInfo byId = dryHerbInfoService.getById(item.getHerbId());
+            if (byId != null) {
+                item.setPinyin(byId.getPinyin());
+                item.setName(byId.getName());
+            }
+            Formula formula = new Formula();
+            BaseParam baseParam = new BaseParam();
+            WaterParam waterParam = new WaterParam();
+            TypeParam typeParam = new TypeParam();
+            OffsetParam offsetParam = new OffsetParam();
+            baseParam.setCode(item.getCode());
+            baseParam.setIndex(item.getCode());
+            baseParam.setName(item.getName());
+            baseParam.setAb(item.getName());
+            baseParam.setTyp(item.getCategory());
+            waterParam.setDelay(Double.valueOf(item.getDelay()));
+            waterParam.setMoisture3(item.getTarget());
+            waterParam.setWeight1(Double.valueOf(item.getFeed()));
+            waterParam.setTimes(item.getEt());
+            waterParam.setTemp1(item.getWindTemp());
+            waterParam.setTemp2(item.getEnvTemp());
+            waterParam.setTemp3(item.getEnvHum());
+            waterParam.setTurntime(item.getTurn());
+            typeParam.setMtype(Integer.valueOf(item.getCategory()));
+            offsetParam.setMoisoffset(item.getMoisOffset());
+            offsetParam.setColdwind(Double.valueOf(item.getCoolingDuration()));
+
+            formula.setBaseParam(baseParam);
+            formula.setWaterParam(waterParam);
+            formula.setTypeParam(typeParam);
+            formula.setOffsetParam(offsetParam);
+            formulas.getDryFormulaList().add(formula);
+        });
+        // 鎶妚os杞崲鎴恱ml
+        // 鍒涘缓JAXBContext瀹炰緥
+        JAXBContext jaxbContext = JAXBContext.newInstance(Formulas.class);
+
+        // 鍒涘缓Marshaller瀹炰緥
+        Marshaller marshaller = jaxbContext.createMarshaller();
+
+        // 璁剧疆鏄惁鏍煎紡鍖栬緭鍑�
+        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
+
+        // 灏嗗璞″簭鍒楀寲鍒板瓧绗︿覆
+        StringWriter writer = new StringWriter();
+        marshaller.marshal(formulas, writer);
+
+        return Result.OK("璇锋眰鎴愬姛", writer.toString());
+
+
+    }
+
+    @ApiOperation(value = "骞茬嚗閰嶆柟涓婃姤", notes = "骞茬嚗閰嶆柟璁板綍涓婃姤")
+    @PostMapping(value = "/sendFormulaHistory")
+    public Result<?> sendFormulaHistory(DryHerbFormulaHisVo hisVo) {
+        //鑾峰彇request
+        HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
+        // 鑾峰彇璇锋眰涓绘満鐨処P鍦板潃
+        String ip = IpUtils.getIpAddr(request);
+        DryHerbFormulaHis his = new DryHerbFormulaHis();
+        BeanUtil.copyProperties(hisVo, his);
+        his.setFormulaIndex(hisVo.getIndex());
+        DryEquipment dryEquipment = dryEquipmentService.selectByTenantIdEquipmentId(hisVo.getTenantId() + "", hisVo.getEqp());
+        if (dryEquipment != null) {
+            if (dryEquipment.getIp().equals(ip)) {
+                his.setEqpId(dryEquipment.getId());
+            } else {
+                return Result.error("璁惧IP鍦板潃鏈厤缃細" + ip);
+            }
+
+        } else {
+            return Result.error("璁惧涓嶅瓨鍦�");
+        }
+        dryHerbFormulaHisService.save(his);
+        return Result.OK("淇濆瓨鎴愬姛");
+    }
+
 }

--
Gitblit v1.9.3