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> parcelKindStatis(ConditionVo conditionVo) { //1.判空 if (null!=conditionVo.getStatus()) { //获取数据 List objectList = getParcelData(conditionVo,PARCEL_CONTRABAND_URL,PARCEL_KEY,PARCEL_SECRET); Map mapCode = new HashMap<>(); //遍历集合,存储所有的违禁包裹编码 for (Object object : objectList) { //取出list里面的值转为map Map objectMap = (Map) object; //将所有的违禁包裹编码存起来 mapCode.put(objectMap.get("objCode").toString(),objectMap.get("objCode").toString()); } System.out.println("mapCode = " + mapCode); //遍历违禁编码map数据 List> list = new ArrayList<>(); for (String value:mapCode.values()) { Integer count = 0; HashMap map = new HashMap<>(); for (Object object : objectList) { Map objectMap = (Map) 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 list = new ArrayList<>();//返回 //1.判空 if (null!=conditionVo.getStatus()){ //2.获取数据 List objectList = getParcelData(conditionVo,PARCEL_URL,PARCEL_KEY,PARCEL_SECRET); System.out.println("objectList = " + objectList); //3.创建时间集合,包裹集合数据 List listTime = new ArrayList<>(); List> parcelList = new ArrayList<>(); if (conditionVo.getStatus() == 1) { //3.获取今天之前的每一天数组 2021-3-12 arsn修改 listTime = DateUtils.pastDay(new SimpleDateFormat("yyyy-MM-dd").format(new Date())); List percelTimeList = new ArrayList<>(); for (Object object:objectList) { //4.取出list里面的值转为map Map objectMap = (Map) object; //5.将远程时间数据存入集合 percelTimeList.add(objectMap.get("dateStr").toString()); } for (String time:listTime) { //6.创建map,用于存储包裹数据 HashMap 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 objectMap = (Map) 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> entries = objectMap.entrySet(); for (Map.Entry 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 getParcelData(ConditionVo conditionVo, String url, String key, String secret) { //1.创建map对象,用于存储请求接口的秘钥 Map 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 data = (Map) JSONObject.parse(params); //System.out.println("data = " + data); return JSON.parseArray(data.get("result").toString()); } /** * 查询包裹,违禁品总数 * @param status 状态码 0:本天 1:本周 2:本月 * @return */ @Override public List selectParcelCount(Integer status) { List list = new ArrayList<>(); ConditionVo conditionVo = new ConditionVo(); conditionVo.setStatus(status); //获取包裹数据 List 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 objectMap = (Map) 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 selectParcelData() { HashMap map = new HashMap<>(); map.put("parcelData",getKindServenDataList()); return map; } /** * 获取危险违禁品7天内每天的数量集合 * @return */ public List getKindServenDataList(){ ConditionVo conditionVo = new ConditionVo(); conditionVo.setStatus(1);//近7天status 为 1 //获取数据 List objectList = getParcelData(conditionVo,PARCEL_CONTRABAND_URL,PARCEL_KEY,PARCEL_SECRET); //遍历违禁编码map数据 List times = DateUtils.pastDay(new SimpleDateFormat("yyyy-MM-dd").format(new Date())); List list = new ArrayList<>(); for (String time:times) { Integer count = 0; //遍历集合数据获取每一天的count for (Object object : objectList) { Map objectMap = (Map) 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; } }