chengf
2025-10-29 fe5542fe85c209415f84d30ee329b882fea0fe99
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package com.ruoyi.business.aidetection.service.Impl;
 
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.business.aidetection.config.Analyzer;
import com.ruoyi.business.aidetection.config.ZLMediaKit;
import com.ruoyi.business.aidetection.domain.AvControl;
import com.ruoyi.business.aidetection.domain.vo.AvControlVo;
import com.ruoyi.business.aidetection.mapper.AvControlMapper;
import com.ruoyi.business.aidetection.service.AvControlService;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * controlService业务层处理
 *
 * @author yuankun
 * @date 2024-04-09
 */
@Service
public class AvControlServiceImpl extends ServiceImpl<AvControlMapper, AvControl> implements AvControlService {
    @Autowired
    private ZLMediaKit zlMediaKit;
    @Autowired
    private Analyzer analyzer;
    @Override
    public Map<String, Object> queryList(AvControlVo entity) {
        //设定媒体服务器和分析服务器状态为false,初始化媒体服务器和分析服务器在线视频流
        Boolean mediaServerState = false;
        Boolean analyzerServerState = false;
        Map<String,Map<String, Object>> mediaOnlineServerList =new HashMap<>();
        Map<String,Object> analyzerOnlineServerList = new HashMap<>();
        List<AvControlVo> avControlVoList =new ArrayList<>();
        try{
            List<Map<String, Object>> mediaServerList = zlMediaKit.getMediaList();//获取流媒体服务列表,即在线视频流
 
            mediaServerState = zlMediaKit.isMediaServerState();//获取流媒体服务器状态
            for (Map<String,Object> mediaServer:mediaServerList) {
                if((Boolean) mediaServer.get("active")){
 
                    mediaOnlineServerList.put(mediaServer.get("code").toString(),mediaServer);
 
                }
            }
        }catch (Exception e){
            log.error("Error while querying media servers", e);  // 使用日志记录异常
 
        }
        try{
            Map<String,Object> mapControls=analyzer.controls();
 
            analyzerServerState = analyzer.isAnalyzerServerState();
            //System.out.println(mapControls);
            if (mapControls != null && !mapControls.isEmpty()) {
                JSONArray dataArray = (JSONArray) mapControls.get("data");
                if (dataArray != null && dataArray.length() > 0) {
                    for (int i = 0; i < dataArray.length(); i++) {
                        JSONObject j = dataArray.optJSONObject(i);
                        if (j != null && j.has("code")) {
                            analyzerOnlineServerList.put(j.getString("code"), j);
                        }
                    }
                }
            }
            /*for (int i = 0; i < ((JSONArray)mapControls.get("data")).length(); i++) {
                JSONObject j = (JSONObject) ((JSONArray)mapControls.get("data")).get(i);
 
                //System.out.println("==========="+(j.getString("code")));
                analyzerOnlineServerList.put(j.getString("code"),j);
            }*/
 
 
            QueryWrapper<AvControl> queryWrapper = new QueryWrapper();
            queryWrapper.orderByAsc("sort");
            List<AvControl> avControlList = baseMapper.selectList(queryWrapper);
 
            List<String> codeList = new ArrayList<>();
            for (AvControl avControl:avControlList) {
                JSONObject onlineControl=null;
                codeList.add(avControl.getCode());
                String streamCode=String.format("%s_%s",avControl.getStreamApp(),avControl.getStreamName());
 
                AvControlVo avControlVo = new AvControlVo();
                BeanUtils.copyProperties(avControl,avControlVo);
                avControlVo.setCheckFps(0.0);
                Long currentState=0L;
                if(mediaOnlineServerList.containsKey(streamCode)){
                    avControlVo.setIsActivated(true);
                }else {
                    avControlVo.setIsActivated(false);
                }
                if(analyzerOnlineServerList.size()!=0){
                    if(analyzerOnlineServerList.containsKey(avControl.getCode())){
                         onlineControl = (JSONObject)analyzerOnlineServerList.get(avControl.getCode());
                    }else{
                        analyzer.controlCancel(avControl.getCode());
                    }
                }
                if(onlineControl!=null){
                    currentState=1L;
                    avControl.setState(1L);
                    avControlVo.setCheckFps(Double.valueOf(String.format("%.2f",onlineControl.getDouble("checkFps"))));
                }else{
                    if(avControl.getState().longValue()!=0L){
                        avControl.setState(5L);
                    }
                }
                if(currentState!=avControl.getState()){
                    //avControl.setState(currentState);
                    baseMapper.updateById(avControl);
                }
                avControlVoList.add(avControlVo);
            }
 
 
        }catch (Exception e){
            log.error("Error while querying analyzer servers", e);  // 使用日志记录异常
 
        }
 
        Map<String,Object> mapData= new HashMap<>();
        mapData.put("mediaServerState",mediaServerState);
        mapData.put("analyzerServerState",analyzerServerState);
        mapData.put("data",avControlVoList);
        return mapData;
    }
 
    @Override
    public List<AvControlVo> queryAll(AvControlVo entity) {
        return this.baseMapper.queryList(entity);
    }
 
    @Override
    public AvControlVo queryById(Long id) {
        return this.baseMapper.queryById(id);
    }
}