package org.springblade.jfpt.parcel.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import io.swagger.models.auth.In; 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.util.JacksonUtil; import org.springblade.jfpt.parcel.util.PageList; 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; @Value("${PARCEL_PICTURE_URL}") private String PARCEL_PICTURE_URL; @Value("${PARCEL_DETAIL_RUL}") private String PARCEL_DETAIL_RUL; @Value("${PARCEL_KIND_URL}") private String PARCEL_KIND_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); if (null != 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); if (data.get("succ").toString().equals("ok")){ //6.返回数据 return JSON.parseArray(data.get("result").toString()); } return null; } /** * 查询包裹,违禁品总数 * @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); if (null!=parcelData) { //查询当天的包裹总数 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; } return null; } /** * 查询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); if (null!=objectList) { //遍历违禁编码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; } return null; } /** * 获取图片地址 * @param imgUrl 图片Url * @return */ @Override public Map getParcelPic(String imgUrl) { //截取图片imgKey信息 String[] imgKeys = imgUrl.split("=", imgUrl.length()); String imgKey = imgKeys[1]; //封装成map对象 HashMap map = new HashMap<>(); map.put("imgKey",imgKey); //执行http远程调用 String s = HttpClientUtils.doGetHeaderPictureBase64(PARCEL_PICTURE_URL, PARCEL_KEY, PARCEL_SECRET, map); map.put("imgBase64",s); return map; } /** * 获取包裹明细分页数据,远程调用api获取数据 * @param conditionVo 请求参数对象 * @return */ @Override public Object getParcelDetailPage(ConditionVo conditionVo) { String result = getParcelDataPageList(conditionVo, PARCEL_DETAIL_RUL, PARCEL_KEY, PARCEL_SECRET).get("result").toString(); if (null!=result) { return JSONObject.parse(result); } return null; } /** * 获取包裹违禁品明细分页数据,远程调用api获取数据 * @param conditionVo 请求参数对象 * @return */ @Override public Object getParcelkindDetailPage(ConditionVo conditionVo) { //获取违禁品数据 String result = getParcelDataPageList(conditionVo, PARCEL_KIND_URL, PARCEL_KEY, PARCEL_SECRET).get("result").toString(); if (null!=result) { return JSONObject.parse(result); } return null; } /** * 远程调用api 获取违禁品详细数据 * @param conditionVo 条件 * @param url 违禁品详细数据Url * @param key key * @param secret 秘钥 * @return */ public Map getParcelDataPageList(ConditionVo conditionVo, String url, String key, String secret){ //1.创建map对象存储数据 HashMap map = new HashMap<>(); //2.条件判断 if (null!=conditionVo.getStartTime()){ map.put("startTime", conditionVo.getStartTime()); } if (null!=conditionVo.getEndTime()){ map.put("endTime", conditionVo.getEndTime()); } if (null!=conditionVo.getDecisioDiagramResult()){ map.put("decisioDiagramResult", conditionVo.getDecisioDiagramResult()); } if (null!=conditionVo.getCurrentPage()){ map.put("currentPage", conditionVo.getCurrentPage()); } if (null!=conditionVo.getPageSize()){ map.put("pageSize", conditionVo.getPageSize()); } //3.远程调用api 获取数据 String params = HttpClientUtils.httpPost(url, key, secret, map); Map paramsMap = (Map) JSONObject.parse(params); if (paramsMap.get("succ").toString().equals("ok")){ //4返回数据 return paramsMap; } //4返回数据 return null; } }