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 | 246 ++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 221 insertions(+), 25 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 a6dbf31..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,24 +1,36 @@ package org.jeecg.modules.dry.controller; -import ai.djl.modality.Classifications; +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.util.HerbUtil; -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 org.springframework.web.multipart.MultipartFile; -import java.io.InputStream; -import java.util.List; +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 = "瀹炴椂鏁版嵁澶勭悊鎺у埗鍣�") @@ -31,33 +43,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; + + @Autowired + private IDryEquipmentService dryEquipmentService; - @ApiOperation(value="娴嬭瘯", notes="杩斿洖Hello") + @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); } @@ -70,27 +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璇嗗埆鏈嶅姟寮傚父"); +// } +// } - @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<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); } - InputStream inputStream = file.getInputStream(); - List<Classifications.Classification> predict = herbUtil.predict(inputStream); - return Result.ok(predict); - } 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::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