package org.jeecg.modules.dry.controller; import ai.djl.modality.Classifications; import cn.hutool.core.bean.BeanUtil; 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.jeecg.common.api.vo.Result; import org.jeecg.modules.dry.entity.DryHerbInfo; 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.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @Api(tags = "实时数据处理控制器") @RestController @RequestMapping("/dry/real") @Slf4j public class DryRealTimeDataController { @Autowired private IDryRealTimeDataService dryRealTimeDataService; // @Autowired // private HerbUtil herbUtil; @Autowired private IDryHerbInfoService herbInfoService; @ApiOperation(value="测试", notes="返回Hello") @GetMapping("/hello") public Result sayHello() { return Result.ok("Hello"); } @ApiOperation(value="接收实时数据Json", notes="设备实时数据上传") @PostMapping("/sendRealTimeDataJson") public Result realTimeDataJson(@RequestBody RealTimeDataVo realTimeDataVo) { return dryRealTimeDataService.realTimeDataHandle(realTimeDataVo); } @ApiOperation(value="获取设备实时数据", notes="通过租户ID和设备编码获取实时数据") @GetMapping("/getRealTimeData") public Result queryMachineRealTimeData(RealTimeDataVo realTimeDataVo) { return dryRealTimeDataService.queryMachineRealTImeData(realTimeDataVo); } @ApiOperation(value="获取车间统计数据", notes="通过租户ID获取车间统计数据") @GetMapping("/workshopStatistics") public Result workshopStatistics(RealTimeDataVo realTimeDataVo) { return dryRealTimeDataService.queryWorkshopStatistics(realTimeDataVo); } /** * 1001 风箱升 1002 风箱降 * 1003 滚筒升 1004 滚筒降 * 1005 滚筒正转 1006 滚筒反转 * 1007 设备停止 1010 干燥启动 * 1011 前门开关 1012 后门开关 * 1013 热风启动 1014 开门观察 * 1015 出料按钮 */ @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 predict = herbUtil.predict(inputStream); // // if(predict.size()>0) { // Map collect = predict.stream().collect(Collectors.toMap(Classifications.Classification::getClassName, Classifications.Classification::getProbability)); // // // List voList = new ArrayList<>(); // Set strings = collect.keySet(); // List list = herbInfoService.list(new LambdaQueryWrapper().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 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识别服务异常"); // } // } }