南昌市物联网技防平台-学校版后台
zengh
2021-06-03 723946c6b272e5aa4c7ec110ff1395f6c2b23e89
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
package org.springblade.jfpt.animalheat.service.impl;
 
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.common.entity.ReportReturnData;
import org.springblade.jfpt.alarm.constant.AlarmTimeConstant;
import org.springblade.jfpt.animalheat.entity.BladeAnimalHeat;
import org.springblade.jfpt.animalheat.mapper.AnimalHeatMapper;
import org.springblade.jfpt.animalheat.service.AnimalHeatService;
import org.springblade.jfpt.animalheat.util.ImageUtil;
import org.springblade.common.entity.AnimalHeatExcel;
import org.springblade.jfpt.animalheat.vo.AnimalHeatVo;
import org.springblade.jfpt.parcel.vo.ConditionVo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
 
import static org.springblade.core.tool.utils.DateUtil.now;
 
/**
 * 体温数据服务层
 *
 */
@Service
public class AnimalHeatServiceImpl extends ServiceImpl<AnimalHeatMapper, BladeAnimalHeat> implements AnimalHeatService {
    @Override
    public boolean save(BladeAnimalHeat entity) {
        return false;
    }
 
    @Value("${picture.addUrl}")
    private String picAddUrl;
 
 
    /**
     * 新增体温数据
     * @param body 体温数据
     */
    @Override
    @Transactional
    public void save(String body) {
        //1.截取信息
        int i = body.indexOf("{");
        String host = body.substring(body.indexOf("192."), body.indexOf("Accept-Encoding"));
        //2.从 {  处开始截取
        int length = body.length();
        //3.截取,由于获取数据时,} 被去除,需要加上
        String dataBody = body.substring(i, length)+"}";
        //4.数据转换
        Map<String,Object> data = (Map<String, Object>) JSONObject.parse(dataBody);
        //5.创建体温数据对象
        BladeAnimalHeat bladeAnimalHeat = new BladeAnimalHeat();
        //6.取出数据,封装数据到对象
        String method = data.get("method").toString();
        if (method.contains("infrared_aiom_picture")){
            bladeAnimalHeat.setMethod(0);
        }
        bladeAnimalHeat.setSerialno(data.get("serialno").toString());
        bladeAnimalHeat.setIp(host);
        String picture = data.get("picture").toString();
        //将二进制原始图片转换成图片
        String imageUrl = ImageUtil.base64StringToImage(picture);
        //存入图片地址url
        bladeAnimalHeat.setPicture(picAddUrl+imageUrl);
        String temp_red =data.get("temp_red").toString();
        String[] temRedArr = temp_red.substring(1,temp_red.length()-1).split(",");
        if (temRedArr.length>1){
            //比较两个温度的大小,取大的值
            float v = Float.parseFloat(temRedArr[0]);
            float v1 = Float.parseFloat(temRedArr[1]);
            int compare = Float.compare(v, v1);
            bladeAnimalHeat.setTempRed(compare>=0 ? v:v1);
            //和标志温度比较,大于37.2度为高温,标记为1,小于则为正常0
            int compare1 = Float.compare(37.2f, compare >= 0 ? v : v1);
            bladeAnimalHeat.setStatus(compare1>0 ?0:1);
        }else {
            bladeAnimalHeat.setTempRed(Float.parseFloat(temRedArr[0]));
            int compare1 = Float.compare(37.2f, Float.parseFloat(temRedArr[0]));
            bladeAnimalHeat.setStatus(compare1>0 ?0:1);
        }
        String person_rects = data.get("person_rect").toString();
        bladeAnimalHeat.setPersonRect(person_rects.substring(1,person_rects.length()-1));
        bladeAnimalHeat.setCreateTime(now());
        //7.插入数据
        int idata = baseMapper.insert(bladeAnimalHeat);
    }
 
 
    /**
     * 获取体温数据统计
     * @param animalHeatVo 条件参数 开始时间,结束时间
     * @return
     */
    @Override
    public List<Map<String, Object>> getAnimalStatis(AnimalHeatVo animalHeatVo) {
        if(null!= animalHeatVo.getType()){
            //查询当天的统计数据
            if (animalHeatVo.getType()==0){
                return baseMapper.getAnimalStatis();
            }
            //查询本周的统计数据
            if (animalHeatVo.getType()==1){
                return baseMapper.getAnimalStatisWeek();
            }
            //查询本月的统计数据
            if (animalHeatVo.getType()==2){
                return baseMapper.getAnimalStatisMonth();
            }
        }
        return null;
    }
 
 
    /**
     * 体温数据的分页数据
     * @param animalHeatVo 查询条件
     * @param page  查询页码
     * @return
     */
    @Override
    public IPage<BladeAnimalHeat> selectAnimalHeatPage(IPage<BladeAnimalHeat> page, AnimalHeatVo animalHeatVo) {
        return page.setRecords(baseMapper.selectAnimalHeatPageList(page, animalHeatVo));
    }
 
 
    /**
     * 查询本周每天的体温数据数量
     * @return
     */
    @Override
    public List<Map<String, Integer>> selWeekDayAnimalStatis() {
        return baseMapper.selWeekDayAnimalStatis();
    }
 
    /**
     * 统计7天内每天体温异常的的总人数
     * @return
     */
    @Override
    public Map<String, Object> selectAnimalData() {
        //创建map对象
        Map<String, Object> map = new HashMap<>();
        //查询统计数据
        List<Integer> list = baseMapper.selectAnimalHeatDataStatis();
        //封装数据
        map.put("animalData",list);
        //返回数据
        return map;
    }
 
    /**
     * 查询当前时间段体温异常总次数
     * @param conditionVo
     * @return
     */
    @Override
    public Integer selAnimalTimeCount(ConditionVo conditionVo) {
        return baseMapper.selAnimalTimeCount(conditionVo);
    }
 
    /**
     * 查询当前时间段区间时间体温异常次数
     * @param conditionVo
     * @return
     */
    @Override
    public List<Integer> selAnimalTimeDis(ConditionVo conditionVo) {
        //获取当前时间段内异常体温数据集合
        List<BladeAnimalHeat> animalHeats = baseMapper.selAnimalTimeData(conditionVo);
        if (animalHeats.size()>0){
            return getHealthcodeTimeDis(animalHeats);
        }
        return Arrays.asList(0,0,0,0,0,0,0,0,0,0,0,0);
    }
 
    /**
     * 筛选数据,分类返回
     * @param collect 集合数据
     * @return
     */
    private List<Integer> getHealthcodeTimeDis(List<BladeAnimalHeat> collect) {
        List<Integer> list = new ArrayList<>();
        int count02 = 0;
        int count0204 = 0;
        int count0406 = 0;
        int count0608 = 0;
        int count0810 = 0;
        int count1012 = 0;
        int count1214 = 0;
        int count1416 = 0;
        int count1618 = 0;
        int count1820 = 0;
        int count2022 = 0;
        int count2224 = 0;
        //遍历集合
        for (BladeAnimalHeat animalHeat:collect) {
            try {
                long hours = animalHeat.getCreateTime().getHours();
                if (hours>0 && hours< AlarmTimeConstant.TWO){
                    count02+=1;
                }
                if (hours>=AlarmTimeConstant.TWO && hours<AlarmTimeConstant.FOUR){
                    count0204+=1;
                }
                if (hours>=AlarmTimeConstant.FOUR && hours<AlarmTimeConstant.SIX){
                    count0406+=1;
                }
                if (hours>=AlarmTimeConstant.SIX && hours<AlarmTimeConstant.EIGHT){
                    count0608+=1;
                }
                if (hours>=AlarmTimeConstant.EIGHT && hours<AlarmTimeConstant.TEN){
                    count0810+=1;
                }
                if (hours>=AlarmTimeConstant.TEN && hours<AlarmTimeConstant.TWEKVE){
                    count1012+=1;
                }
                if (hours>=AlarmTimeConstant.TWEKVE && hours<AlarmTimeConstant.FOURTEEN){
                    count1214+=1;
                }
                if (hours>=AlarmTimeConstant.FOURTEEN && hours<AlarmTimeConstant.SIXTEEN){
                    count1416+=1;
                }
                if (hours>=AlarmTimeConstant.SIXTEEN && hours<AlarmTimeConstant.EIGHTEEN){
                    count1618+=1;
                }
                if (hours>=AlarmTimeConstant.EIGHTEEN && hours<AlarmTimeConstant.TWENTY){
                    count1820+=1;
                }
                if (hours>=AlarmTimeConstant.TWENTY && hours<AlarmTimeConstant.TWENTY_TWO){
                    count2022+=1;
                }
                if (hours>=AlarmTimeConstant.TWENTY_TWO && hours<AlarmTimeConstant.TWENTY_FOUR){
                    count2224+=1;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //封装数据
        list.add(count02);
        list.add(count0204);
        list.add(count0406);
        list.add(count0608);
        list.add(count0810);
        list.add(count1012);
        list.add(count1214);
        list.add(count1416);
        list.add(count1618);
        list.add(count1820);
        list.add(count2022);
        list.add(count2224);
        //返回数据
        return list;
    }
 
    /**
     * 统计时间段内体温异常人数数量数据
     * @param conditionVo
     * @return
     */
    @Override
    public Map<String, Object> selectAnimalTimeData(ConditionVo conditionVo) {
        conditionVo.setStartTime(conditionVo.getStartTime().substring(0,10));
        conditionVo.setEndTime(conditionVo.getEndTime().substring(0,10));
        //创建map对象
        Map<String, Object> map = new HashMap<>();
        //查询统计数据
        List<Integer> list = baseMapper.selectAnimalTimeData(conditionVo);
        //封装数据
        map.put("animalData",list);
        //返回数据
        return map;
    }
 
 
    /**
     * 导出体温数据列表
     * @param animalHeatVo 条件
     */
    @Override
    public List<AnimalHeatExcel> exportAnimalHeat(AnimalHeatVo animalHeatVo) {
        return baseMapper.exportAnimalHeat(animalHeatVo);
    }
 
    /**
     * 导出体温数据列表
     * @param animalHeatVo 条件
     */
    @Override
    public List<ReportReturnData> getAnimalHeatPie(AnimalHeatVo animalHeatVo) {
        return baseMapper.getAnimalHeatPie(animalHeatVo);
    }
}