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.text.SimpleDateFormat;
|
import java.util.*;
|
|
import static org.springblade.core.tool.utils.DateUtil.now;
|
|
/**
|
* 包裹服务实现层
|
*/
|
@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:近7天 2:本月 3:本周
|
* @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());
|
}
|
System.out.println("mapCode = " + mapCode);
|
//遍历违禁编码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",count);
|
}
|
}
|
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.获取今天之前的每一天数组 2021-3-12 arsn修改
|
listTime = DateUtils.pastDay(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
|
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);
|
list.add(getKindServenDataList());
|
//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查询过去6天及当天的的数据
|
if (conditionVo.getStatus() == 1) {
|
//3.获取过去6天及当天开始时间和结束时间
|
startDate = DateUtils.getPastDate(6,now());
|
endDate = DateUtils.getToday();
|
}
|
//2.4查询本周的数据
|
if (conditionVo.getStatus() == 3) {
|
//3.获取过去6天及当天开始时间和结束时间
|
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);
|
//System.out.println("data = " + data);
|
return JSON.parseArray(data.get("result").toString());
|
}
|
|
|
/**
|
* 查询包裹,违禁品总数
|
* @param status 状态码 0:本天 1:本周 2:本月
|
* @return
|
*/
|
@Override
|
public List<Integer> selectParcelCount(Integer status) {
|
List<Integer> list = new ArrayList<>();
|
ConditionVo conditionVo = new ConditionVo();
|
conditionVo.setStatus(status);
|
//获取包裹数据
|
List<Object> parcelData = getParcelData(conditionVo, PARCEL_URL, PARCEL_KEY, PARCEL_SECRET);
|
//查询当天的包裹总数
|
Integer dangerCount = null;
|
Integer contrabandCount = null;
|
if (status == 0) {
|
for (Object object : parcelData) {
|
//取出list里面的值转为map
|
Map<String, Object> objectMap = (Map<String, Object>) object;
|
dangerCount = Integer.parseInt(objectMap.get("dangerCount").toString()); //违禁包裹数量
|
contrabandCount = Integer.parseInt(objectMap.get("contrabandCount").toString()); //违禁物品数量
|
}
|
}
|
//封装数据
|
list.add(dangerCount);
|
list.add(contrabandCount);
|
//返回数据
|
return list;
|
}
|
|
/**
|
* 查询7天内违禁品每天的数量(需筛选危险品)
|
* @return
|
*/
|
@Override
|
public Map<String, Object> selectParcelData() {
|
HashMap<String, Object> map = new HashMap<>();
|
map.put("parcelData",getKindServenDataList());
|
return map;
|
}
|
|
/**
|
* 获取危险违禁品7天内每天的数量集合
|
* @return
|
*/
|
public List<Integer> getKindServenDataList(){
|
ConditionVo conditionVo = new ConditionVo();
|
conditionVo.setStatus(1);//近7天status 为 1
|
//获取数据
|
List<Object> objectList = getParcelData(conditionVo,PARCEL_CONTRABAND_URL,PARCEL_KEY,PARCEL_SECRET);
|
//遍历违禁编码map数据
|
List<String> times = DateUtils.pastDay(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
|
List<Integer> list = new ArrayList<>();
|
for (String time:times) {
|
Integer count = 0;
|
//遍历集合数据获取每一天的count
|
for (Object object : objectList) {
|
Map<String, Object> objectMap = (Map<String, Object>) object;//取出list里面的值转为map
|
//对比时间和objCode,危险品,刀具,枪支等
|
if (time.equals(objectMap.get("dateStr").toString()) ){
|
// //枪支
|
// if (objectMap.get("objCode").toString().equals("gan")) {
|
// count += Integer.parseInt(objectMap.get("objCount").toString());
|
// }
|
// //刀具
|
// if (objectMap.get("objCode").toString().equals("knife")) {
|
// count += Integer.parseInt(objectMap.get("objCount").toString());
|
// }
|
// //爆炸物
|
// if (objectMap.get("objCode").toString().equals("boomExplosive")) {
|
// count += Integer.parseInt(objectMap.get("objCount").toString());
|
// }
|
//3-20 修改不筛选危险品,由第三方筛选好
|
count += Integer.parseInt(objectMap.get("objCount").toString());
|
}
|
}
|
list.add(count);
|
}
|
return list;
|
}
|
}
|