From 65c5b390a4b6dadb02c63c72f49a3e1e93a9d1e1 Mon Sep 17 00:00:00 2001 From: ma <1062634917@qq.com> Date: Fri, 28 May 2021 11:12:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=8E=E5=81=9C=E8=BD=A6?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ccsens/logistics/Util/Constant.java | 48 +++++ .../api/CarIdentificationController.java | 12 ++ .../bean/dto/CarIdentificationDto.java | 10 + .../logistics/bean/dto/CarRecordDto.java | 2 + .../persist/dao/LogisticsCarRecordDao.java | 7 + .../logistics/scheduled/ScheduledService.java | 14 +- .../service/CarIdentificationService.java | 190 +++++++++++++++++- .../service/ICarIdentificationService.java | 7 + .../mapper_dao/LogisticsCarRecordDao.xml | 16 ++ 9 files changed, 304 insertions(+), 2 deletions(-) diff --git a/logistics/src/main/java/com/ccsens/logistics/Util/Constant.java b/logistics/src/main/java/com/ccsens/logistics/Util/Constant.java index 6797aec0..747f797b 100644 --- a/logistics/src/main/java/com/ccsens/logistics/Util/Constant.java +++ b/logistics/src/main/java/com/ccsens/logistics/Util/Constant.java @@ -84,4 +84,52 @@ public class Constant { public static final String MEDIUM_CAR = "面包车"; public static final Long MEDIUM_CAR_WEIGHT = 20L; + //智慧停车系统车辆类型 + /** + * 临时车:20吨 + */ + public static final String TEMPORARY_CAR_D = "临时车D"; + + /** + * 临时车A:0吨 + */ + public static final String TEMPORARY_CAR_A = "临时车A"; + /** + * 临时车C:1吨 + */ + public static final String TEMPORARY_CAR_C = "临时车C"; + /** + * 临时车B:1吨 + */ + public static final String TEMPORARY_CAR_B = "临时车B"; + /** + * 免费车A :0吨 + */ + public static final String FREE_CAR_A = "免费车A"; + /** + * 免费车B:20吨 + */ + public static final String FREE_CAR_B = "免费车B"; + /** + * 月租车C:20吨 + */ + public static final String MONTHLY_CAR_C = "月租车C"; + /** + * 月租车A:1吨 + */ + public static final String MONTHLY_CAR_A = "月租车A"; + /** + * 月租车B:20吨 + */ + public static final String MONTHLY_CAR_B = "月租车B"; + + /** + * 车重 + */ + public static final Long CAR_WEIGHT_ONE = 1L; + public static final Long CAR_WEIGHT_ZERO = 0L; + public static final Long CAR_WEIGHT_TWENTY = 20L; + + + } diff --git a/logistics/src/main/java/com/ccsens/logistics/api/CarIdentificationController.java b/logistics/src/main/java/com/ccsens/logistics/api/CarIdentificationController.java index 9ab42eed..dd75b838 100644 --- a/logistics/src/main/java/com/ccsens/logistics/api/CarIdentificationController.java +++ b/logistics/src/main/java/com/ccsens/logistics/api/CarIdentificationController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.ccsens.logistics.service.ICarIdentificationService; +import com.ccsens.util.JsonResponse; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -11,6 +12,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.util.Map; /** @@ -32,4 +35,13 @@ public class CarIdentificationController { log.info("车辆识别摄像头数据对接:{}",jsonObject); return jsonObject; } + + @ApiOperation(value = "请求智慧云停车管理系统接口", notes = "mz:请求智慧云停车管理系统接口") + @RequestMapping(value = "/requestCarPort", method = RequestMethod.POST ,produces = {"application/json;charset=UTF-8"}) + public JsonResponse requestCarPort() throws IOException { + log.info("请求智慧云停车管理系统接口开始"); + carIdentificationService.requestCarPort(); + log.info("请求智慧云停车管理系统接口结束"); + return JsonResponse.newInstance().ok(); + } } diff --git a/logistics/src/main/java/com/ccsens/logistics/bean/dto/CarIdentificationDto.java b/logistics/src/main/java/com/ccsens/logistics/bean/dto/CarIdentificationDto.java index b5c0bdbb..221112df 100644 --- a/logistics/src/main/java/com/ccsens/logistics/bean/dto/CarIdentificationDto.java +++ b/logistics/src/main/java/com/ccsens/logistics/bean/dto/CarIdentificationDto.java @@ -48,4 +48,14 @@ public class CarIdentificationDto { private String closeup_pic; } + + @Data + @ApiModel("车辆识别摄像头提供的信息") + public static class CarLogin{ + @ApiModelProperty("账号") + private String username; + @ApiModelProperty("密码") + private String passwrod; + } + } diff --git a/logistics/src/main/java/com/ccsens/logistics/bean/dto/CarRecordDto.java b/logistics/src/main/java/com/ccsens/logistics/bean/dto/CarRecordDto.java index d1ff847d..63f852ad 100644 --- a/logistics/src/main/java/com/ccsens/logistics/bean/dto/CarRecordDto.java +++ b/logistics/src/main/java/com/ccsens/logistics/bean/dto/CarRecordDto.java @@ -13,6 +13,8 @@ public class CarRecordDto { @Data @ApiModel(value = "手动添加车辆记录") public static class AddCarRecord{ + @ApiModelProperty("记录时间") + private Long recordId; @ApiModelProperty("记录时间") private Long recordTime; @ApiModelProperty("车型(0-小型车,1-中型车,2-大型车)") diff --git a/logistics/src/main/java/com/ccsens/logistics/persist/dao/LogisticsCarRecordDao.java b/logistics/src/main/java/com/ccsens/logistics/persist/dao/LogisticsCarRecordDao.java index ec125d42..49b65d38 100644 --- a/logistics/src/main/java/com/ccsens/logistics/persist/dao/LogisticsCarRecordDao.java +++ b/logistics/src/main/java/com/ccsens/logistics/persist/dao/LogisticsCarRecordDao.java @@ -1,5 +1,6 @@ package com.ccsens.logistics.persist.dao; +import com.ccsens.logistics.bean.dto.CarRecordDto; import com.ccsens.logistics.bean.vo.MbpsVo; import com.ccsens.logistics.persist.mapper.LogisticsCarRecordMapper; import io.swagger.models.auth.In; @@ -78,4 +79,10 @@ public interface LogisticsCarRecordDao extends LogisticsCarRecordMapper { * @return 该时间车辆出货量 */ List selWeightOfOutByTime(@Param("queryType") Byte queryType,@Param("countArr") String[] countArr,@Param("nowDate") String nowDate); + + /** + * 批量加入车辆记录 + * @param carData 车辆记录list + */ + void insertRecordList(List carData); } diff --git a/logistics/src/main/java/com/ccsens/logistics/scheduled/ScheduledService.java b/logistics/src/main/java/com/ccsens/logistics/scheduled/ScheduledService.java index 81508aec..8c1f1867 100644 --- a/logistics/src/main/java/com/ccsens/logistics/scheduled/ScheduledService.java +++ b/logistics/src/main/java/com/ccsens/logistics/scheduled/ScheduledService.java @@ -1,6 +1,7 @@ package com.ccsens.logistics.scheduled; +import com.ccsens.logistics.service.ICarIdentificationService; import com.ccsens.logistics.service.IHttpService; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.EnableScheduling; @@ -9,6 +10,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.io.IOException; /** * @author 逗 @@ -21,11 +23,21 @@ public class ScheduledService { @Resource private IHttpService iHttpService; + @Resource + private ICarIdentificationService carIdentificationService; @Scheduled(cron = "*/30 * * * * ?") public void runfirst(){ iHttpService.getTemperatureAndHumidity(); } - + @Scheduled(cron = "0 */10 * * * ?") + public void runSaveCarRecord(){ + try { + log.info("开始获取停车平台的数据"); + carIdentificationService.requestCarPort(); + } catch (IOException e) { + log.info("查询保存车辆记录的定时任务异常",e); + } + } } diff --git a/logistics/src/main/java/com/ccsens/logistics/service/CarIdentificationService.java b/logistics/src/main/java/com/ccsens/logistics/service/CarIdentificationService.java index c662b7e6..8a5633f4 100644 --- a/logistics/src/main/java/com/ccsens/logistics/service/CarIdentificationService.java +++ b/logistics/src/main/java/com/ccsens/logistics/service/CarIdentificationService.java @@ -2,21 +2,49 @@ package com.ccsens.logistics.service; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Snowflake; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ccsens.logistics.bean.dto.CarIdentificationDto; import com.ccsens.logistics.Util.Constant; +import com.ccsens.logistics.bean.dto.CarRecordDto; import com.ccsens.logistics.bean.po.LogisticsCarRecord; import com.ccsens.logistics.persist.dao.LogisticsCarRecordDao; import com.ccsens.util.Base64FileUtil; +import com.ccsens.util.CodeEnum; import com.ccsens.util.PropUtil; +import com.ccsens.util.RestTemplateUtil; +import com.ccsens.util.exception.BaseException; import lombok.extern.slf4j.Slf4j; +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.StatusLine; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.protocol.HTTP; +import org.apache.http.util.EntityUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.Map; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.*; /** * @author 马 @@ -89,5 +117,165 @@ public class CarIdentificationService implements ICarIdentificationService{ return null; } + /** + * 请求智慧云停车管理系统接口 + */ + @Override + public void requestCarPort() throws IOException { + + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + //调用登录接口,获取token + String token = getToken(httpClient); + + //获取车辆类型 + Map carType = getCarType(httpClient, token); + + //查询停车记录 + List carData = getCarData(httpClient, token, carType); + carRecordDao.insertRecordList(carData); + + } + + /** + *获取智慧云停车管理系统的token + * @return token + */ + private String getToken(CloseableHttpClient httpClient){ + try { + String loginUrl = "http://120.78.14.85:8081/cloud/user/dologin"; + HttpPost httPost = new HttpPost(loginUrl); + httPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + + List param = new ArrayList(); + param.add(new BasicNameValuePair("username", "1311786")); + param.add(new BasicNameValuePair("password", "eir/kjbPIHGGrGamcZVlDg==")); + httPost.setEntity(new UrlEncodedFormEntity(param)); + + CloseableHttpResponse execute = httpClient.execute(httPost); + HttpEntity entity = execute.getEntity(); + String result = EntityUtils.toString(entity); + JSONObject jsonObject = JSONObject.parseObject(result); + JSONObject user = jsonObject.getJSONObject("user"); + String token = user.getString("token"); + return token; + }catch (Exception e){ + log.info("获取停车系统token失败",e); + } + return null; + } + + /** + *获取智慧云停车管理系统的车辆类型 + * @return 车辆类型carType(value_no)为key value_name为value + */ + private Map getCarType(CloseableHttpClient httpClient,String token){ + try { + Map carTypeMap = new HashMap<>(); + String queryType = "http://120.78.14.85:8081/cloud/getdata/getCardType?token="+token+"&comid=121964&showTempCar=showTempCar"; + HttpGet httpGet = new HttpGet(queryType); + httpGet.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + CloseableHttpResponse carType = httpClient.execute(httpGet); + String typeResult = EntityUtils.toString(carType.getEntity()); + JSONArray jsonArray = JSONObject.parseArray(typeResult); + + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + String value_no = jsonObject1.getString("value_no"); + String value_name = jsonObject1.getString("value_name"); + carTypeMap.put(value_no,value_name); + } + + return carTypeMap; + }catch (Exception e){ + log.info("获取智慧云停车管理系统的车辆类型失败",e); + } + return null; + } + + /** + *获取智慧云停车管理系统的车辆出入数据 + * @return 车辆类型carType(value_no)为key value_name为value + */ + private List getCarData(CloseableHttpClient httpClient, String token,Map carType){ + + List carRecords = new ArrayList<>(); + + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date end = new Date(System.currentTimeMillis()); + Date start = new Date(System.currentTimeMillis()-600000); + String endTime = simpleDateFormat.format(end); + String startTime = simpleDateFormat.format(start); + String timeParam = startTime+"至"+endTime; + + try { + String queryRecord = "http://120.78.14.85:8081/cloud/OrderManagePark/query"; + HttpPost httPostRecord = new HttpPost(queryRecord); + httPostRecord.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + List paramRecord = new ArrayList(); + paramRecord.add(new BasicNameValuePair("token", token)); + paramRecord.add(new BasicNameValuePair("comid", "121964")); + paramRecord.add(new BasicNameValuePair("groupid", "120353")); + paramRecord.add(new BasicNameValuePair("date", timeParam)); + + httPostRecord.setEntity(new UrlEncodedFormEntity(paramRecord, StandardCharsets.UTF_8)); + + CloseableHttpResponse executeRecord = httpClient.execute(httPostRecord); + + HttpEntity record = executeRecord.getEntity(); + String resultRecord = EntityUtils.toString(record); + JSONObject jsonObjectRecord = JSONObject.parseObject(resultRecord); + JSONArray rows = jsonObjectRecord.getJSONArray("rows"); + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + CarRecordDto.AddCarRecord inCar = new CarRecordDto.AddCarRecord(); + CarRecordDto.AddCarRecord outCar = new CarRecordDto.AddCarRecord(); + //添加进的车 + inCar.setRecordId(snowflake.nextId()); + inCar.setInOut((byte)0); + inCar.setCarType(carType.get(row.getString("cartype"))); + inCar.setLicensePlate(row.getString("vehicle_no")); + inCar.setRecordTime(row.getLong("intime")*1000); + //添加出的车 + outCar.setRecordId(snowflake.nextId()); + outCar.setInOut((byte)1); + outCar.setCarType(carType.get(row.getString("cartype"))); + outCar.setLicensePlate(row.getString("vehicle_no")); + outCar.setRecordTime(row.getLong("outtime")*1000); + + switch (carType.get(row.getString("cartype"))){ + + case Constant.FREE_CAR_B: + case Constant.TEMPORARY_CAR_D: + case Constant.MONTHLY_CAR_B: + case Constant.MONTHLY_CAR_C: + inCar.setCarWeight(Constant.CAR_WEIGHT_TWENTY); + outCar.setCarWeight(Constant.CAR_WEIGHT_TWENTY); + break; + + case Constant.TEMPORARY_CAR_B: + case Constant.TEMPORARY_CAR_C: + case Constant.MONTHLY_CAR_A: + inCar.setCarWeight(Constant.CAR_WEIGHT_ONE); + outCar.setCarWeight(Constant.CAR_WEIGHT_ONE); + break; + + default: + inCar.setCarWeight(Constant.CAR_WEIGHT_ZERO); + outCar.setCarWeight(Constant.CAR_WEIGHT_ZERO); + break; + } + + carRecords.add(inCar); + carRecords.add(outCar); + } + return carRecords; + }catch (Exception e){ + log.info("获取智慧云停车管理系统的车辆类型失败",e); + } + return null; + } + + } diff --git a/logistics/src/main/java/com/ccsens/logistics/service/ICarIdentificationService.java b/logistics/src/main/java/com/ccsens/logistics/service/ICarIdentificationService.java index 5bd54a43..73da942c 100644 --- a/logistics/src/main/java/com/ccsens/logistics/service/ICarIdentificationService.java +++ b/logistics/src/main/java/com/ccsens/logistics/service/ICarIdentificationService.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.util.Map; /** @@ -17,4 +19,9 @@ public interface ICarIdentificationService { * @return 响应的json */ JSONObject addCarInformation(HttpServletResponse httpServletResponse, Map param); + + /** + * 请求智慧云停车管理系统接口 + */ + void requestCarPort() throws IOException; } diff --git a/logistics/src/main/resources/mapper_dao/LogisticsCarRecordDao.xml b/logistics/src/main/resources/mapper_dao/LogisticsCarRecordDao.xml index a23b27ec..44f44d02 100644 --- a/logistics/src/main/resources/mapper_dao/LogisticsCarRecordDao.xml +++ b/logistics/src/main/resources/mapper_dao/LogisticsCarRecordDao.xml @@ -194,4 +194,20 @@ GROUP BY s.date ORDER BY s.date + + INSERT INTO t_logistics_car_record + ( + id, + in_out, + car_type, + license_plate, + car_weight, + record_time + ) + VALUES + + (#{item.recordId},#{item.inOut},#{item.carType},#{item.licensePlate},#{item.carWeight},#{item.recordTime}) + + + \ No newline at end of file