From 87b161325d9186d8211a7d472ed04fa279f33954 Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei>
Date: 星期五, 14 十一月 2025 16:12:43 +0800
Subject: [PATCH] Merge branch 'master' of http://lanpucloud.cn:1111/r/herb
---
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java | 273 +++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 229 insertions(+), 44 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 0ca23e1..a401283 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,30 +1,37 @@
package org.jeecg.modules.dry.controller;
-import ai.djl.modality.Classifications;
import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+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.modules.dry.entity.DryHerbInfo;
+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.util.HerbUtil;
-import org.jeecg.modules.dry.vo.CommandMessageVo;
-import org.jeecg.modules.dry.vo.DryHerbInfoVo;
-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 org.springframework.web.multipart.MultipartFile;
-import java.io.InputStream;
+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.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
@Api(tags = "瀹炴椂鏁版嵁澶勭悊鎺у埗鍣�")
@@ -37,36 +44,88 @@
private IDryRealTimeDataService dryRealTimeDataService;
@Autowired
- private HerbUtil herbUtil;
+ private IDryHerbFormulaService dryHerbFormulaService;
+
+ @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;
- @ApiOperation(value="娴嬭瘯", notes="杩斿洖Hello")
+ @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);
}
@@ -79,43 +138,169 @@
* 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璇嗗埆鏈嶅姟寮傚父");
+// }
+// }
- @ApiOperation(value = "鑽潗璇嗗埆")
- @PostMapping("/identify")
- public Result<?> identify(@RequestParam("file") MultipartFile file) throws Exception {
- try {
- if (file.isEmpty()) {
- throw new RuntimeException("涓婁紶鏂囦欢涓嶈兘涓虹┖");
+ /**
+ * 鏍规嵁璁惧鍜岀鎴锋煡璇㈣璁惧绫诲瀷鐨勫共鐕ラ厤鏂癸紝灏嗛厤鏂硅浆鎴恱ml鏍煎紡锛屼互瀛楃涓叉柟寮忚繑鍥�
+ *
+ * @param tenantId
+ * @param eqpCode
+ * @return
+ * @throws JAXBException
+ */
+ @ApiOperation(value = "骞茬嚗閰嶆柟鑾峰彇", notes = "骞茬嚗閰嶆柟涓嬪彂")
+ @GetMapping(value = "/queryFormula")
+ public Result<List<HerbFormulaVo>> 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);
}
- InputStream inputStream = file.getInputStream();
- List<Classifications.Classification> predict = herbUtil.predict(inputStream);
- 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);
- } catch (Exception e) {
- e.printStackTrace();
- return Result.error("AI璇嗗埆鏈嶅姟寮傚父");
+ } else {
+ return Result.error("璁惧涓嶅瓨鍦�");
}
+ LambdaQueryWrapper<DryHerbFormula> queryWrapper = new LambdaQueryWrapper<DryHerbFormula>();
+ queryWrapper.eq(DryHerbFormula::getEqpType, dryEquipment.getType())
+ .eq(DryHerbFormula::getEnabled, "true")
+ .eq(DryHerbFormula::getTenantId, tenantId);
+ List<DryHerbFormula> list = dryHerbFormulaService.list(queryWrapper);
+
+ List<HerbFormulaVo> voList = new ArrayList<>();
+
+ 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);
+
+ HerbFormulaVo vo = new HerbFormulaVo();
+ BeanUtil.copyProperties(item, vo);
+ voList.add(vo);
+ });
+// // 鎶妚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);
+
+// String jsonString = JSONObject.toJSONString(voList);
+//
+// String json = JSON.toJSONString(voList);
+// System.out.println(jsonString);
+
+ return Result.OK("璇锋眰鎴愬姛", voList);
+
+
+ }
+
+ @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