干燥机配套车间生产管理系统/云平台服务端
bsw215583320
2023-12-21 f18634833512849ca9d95bf3522dfb9f7cedc55c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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识别服务异常");
        }
    }
 
}