南昌市物联网技防平台-后台
Administrator
2021-03-11 2ed9526f60e64aeaca0a861aa4bf24717554bad1
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
package org.springblade.jfpt.parcel.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springblade.jfpt.parcel.service.ParcelService;
import org.springblade.jfpt.parcel.util.DateUtils;
import org.springblade.jfpt.parcel.util.HttpClientUtils;
import org.springblade.jfpt.parcel.vo.ConditionVo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.*;
 
/**
 * 包裹服务实现层
 */
@Service
public class ParcelServiceImpl implements ParcelService {
    @Value("${PARCEL_KEY}")
    private String PARCEL_KEY;
 
    @Value("${PARCEL_SECRET}")
    private String PARCEL_SECRET;
 
    @Value("${PARCEL_CONTRABAND_URL}")
    private String PARCEL_CONTRABAND_URL;
 
    @Value("${PARCEL_URL}")
    private String PARCEL_URL;
 
 
 
    /**
     * 获取违禁包裹统计数据,远程调用接口
     * @param conditionVo 查询条件对象  status 状态码 0:本天    1:本周   2:本月
     * @return
     */
    @Override
    public List<Map<String, Object>> parcelKindStatis(ConditionVo conditionVo) {
        //1.判空
        if (null!=conditionVo.getStatus()) {
            //获取数据
            List<Object> objectList = getParcelData(conditionVo,PARCEL_CONTRABAND_URL,PARCEL_KEY,PARCEL_SECRET);
            Map<String,String> mapCode = new HashMap<>();
            //遍历集合,存储所有的违禁包裹编码
            for (Object object : objectList) {
                //取出list里面的值转为map
                Map<String, Object> objectMap = (Map<String, Object>) object;
                //将所有的违禁包裹编码存起来
                mapCode.put(objectMap.get("objCode").toString(),objectMap.get("objCode").toString());
            }
            //遍历违禁编码map数据
            List<Map<String,Object>> list = new ArrayList<>();
            for (String value:mapCode.values()) {
                Integer count = 0;
                HashMap<String, Object> map = new HashMap<>();
                for (Object object : objectList) {
                    Map<String, Object> objectMap = (Map<String, Object>) object;//取出list里面的值转为map
                    //将所有的违禁包裹编码存起来
                    if (value.equals(objectMap.get("objCode").toString())){
                        count+=Integer.parseInt(objectMap.get("objCount").toString());
                        map.put("name",objectMap.get("objName").toString());
                        map.put("value",objectMap.get("objCount").toString());
                    }
                }
                list.add(map);
            }
            return list;
        }
        return null;
    }
 
    /**
     * 获取包裹统计数据,远程调用接口获取数据
     * @param conditionVo 查询条件对象  status 状态码 0:本天    1:本周   2:本月
     * @return
     */
    @Override
    public Object getParcelStatis(ConditionVo conditionVo) {
        List<Object> list = new ArrayList<>();//返回
        //1.判空
        if (null!=conditionVo.getStatus()){
            //2.获取数据
            List<Object> objectList = getParcelData(conditionVo,PARCEL_URL,PARCEL_KEY,PARCEL_SECRET);
            System.out.println("objectList = " + objectList);
            //3.创建时间集合,包裹集合数据
            List<String> listTime = new ArrayList<>();
            List<Map<String,Object>> parcelList = new ArrayList<>();
            if (conditionVo.getStatus() == 1) {
                //3.获取本周开始时间和结束时间的每一天数组
                listTime = DateUtils.pastDay(DateUtils.getWeekEnd());
                List<String> percelTimeList = new ArrayList<>();
                for (Object object:objectList) {
                    //4.取出list里面的值转为map
                    Map<String, Object> objectMap = (Map<String, Object>) object;
                    //5.将远程时间数据存入集合
                    percelTimeList.add(objectMap.get("dateStr").toString());
                }
                for (String time:listTime) {
                    //6.创建map,用于存储包裹数据
                    HashMap<String, Object> hashMap = new HashMap<>();
                    //7.如果远程数据哪天数据没有,则为0
                    if (!percelTimeList.contains(time)){
                        hashMap.put("dateStr",time);
                        hashMap.put("checkCount",0);
                        hashMap.put("dangerCount",0);
                        parcelList.add(hashMap);
                    }else {
                        //8.遍历,分别取出数据
                        for (Object object : objectList) {
                            //9.取出list里面的值转为map
                            Map<String, Object> objectMap = (Map<String, Object>) object;
                            String dateStr = objectMap.get("dateStr").toString();  //安检时间
                            Integer checkCount = Integer.parseInt(objectMap.get("checkCount").toString()); //安检包裹数量
                            Integer dangerCount = Integer.parseInt(objectMap.get("dangerCount").toString()); //违禁包裹数量
                            //10.判断,存入数据
                            if (time.equals(dateStr)) {
                                Set<Map.Entry<String, Object>> entries = objectMap.entrySet();
                                for (Map.Entry<String, Object> m : entries) {
                                    if (m.getKey().equals("checkCount")) {
                                        hashMap.put("checkCount", checkCount);
                                        hashMap.put("dateStr", dateStr);
                                    }
                                    if (m.getKey().equals("dangerCount")) {
                                        hashMap.put("dangerCount", dangerCount);
                                    }
                                }
                            }
                        }
                        //11.加入到集合中
                        parcelList.add(hashMap);
                    }
                }
            }
            //12.封装数据
            list.add(listTime);
            list.add(parcelList);
            //13.返回
            return list;
        }
        return null;
    }
 
 
    /**
     * 数据请求处理
     * @param conditionVo  条件
     * @param url url
     * @param key 请求Key
     * @param secret 请求 secret
     * @return
     */
    private List<Object> getParcelData(ConditionVo conditionVo, String url, String key, String secret) {
        //1.创建map对象,用于存储请求接口的秘钥
        Map<String, String> map = new HashMap<>();
        String startDate = null;
        String endDate = null;
        //2.2查询本天的数据
        if (conditionVo.getStatus() == 0) {
            //3.获取本天开始时间和结束时间
            startDate = DateUtils.getToday();
            endDate = DateUtils.getToday();
        }
        //2.2查询本周内每天的数据
        if (conditionVo.getStatus() == 1) {
            //3.获取本周开始时间和结束时间
            startDate = DateUtils.getWeekStart();
            endDate = DateUtils.getWeekEnd();
        }
        //2.2查询本月的数据
        if (conditionVo.getStatus() == 2) {
            //3.获取本月开始时间和结束时间
            startDate = DateUtils.getMonthStart();
            endDate = DateUtils.getMonthEnd();
        }
        map.put("startDate", startDate);
        map.put("endDate", endDate);
        //4.远程调用数据
        String params = HttpClientUtils.httpPost(url, key, secret, map);
        //5.数据转换
        Map<String, Object> data = (Map<String, Object>) JSONObject.parse(params);
        return JSON.parseArray(data.get("result").toString());
    }
}