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<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识别服务异常");
|
}
|
}
|
|
}
|