package com.java110.job.adapt.car;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.java110.core.client.OutRestTemplate;
|
import com.java110.core.client.RestTemplate;
|
import com.java110.core.log.LoggerFactory;
|
import com.java110.dto.machine.CarInoutDetailDto;
|
import com.java110.dto.parking.ParkingAreaDto;
|
import com.java110.dto.system.Business;
|
import com.java110.intf.community.IParkingAreaV1InnerServiceSMO;
|
import com.java110.job.adapt.DatabusAdaptImpl;
|
import com.java110.po.car.CarInoutDetailPo;
|
import com.java110.utils.cache.CommonCache;
|
import com.java110.utils.cache.MappingCache;
|
import com.java110.utils.constant.MappingConstant;
|
import com.java110.utils.factory.ApplicationContextFactory;
|
import com.java110.utils.util.BeanConvertUtil;
|
import com.java110.utils.util.DateUtil;
|
import com.java110.utils.util.ImageUtils;
|
import com.java110.utils.util.StringUtil;
|
import org.slf4j.Logger;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpMethod;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.stereotype.Component;
|
import org.springframework.util.MultiValueMap;
|
import org.springframework.web.client.HttpStatusCodeException;
|
|
import java.util.List;
|
|
/**
|
* 停车进出数据向 东莞市公安局社会停车场(道闸卡口)平台同步数据
|
* <p>
|
* databus 配置
|
* <p>
|
* 名称 车辆进出databus
|
* 业务类型 saveCarInoutDetail
|
* 适配器 sendInoutCarToDGGAJParkingAdapt
|
* 顺序 80
|
* 状态 在用
|
*
|
*
|
* mapping 中配置 DOGUAN_PAKRING_KEY 平台提供的key
|
*/
|
@Component(value = "sendInoutCarToDGGAJParkingAdapt")
|
public class SendInoutCarToDGGAJParkingAdapt extends DatabusAdaptImpl {
|
|
private static Logger logger = LoggerFactory.getLogger(SendInoutCarToDGGAJParkingAdapt.class);
|
|
@Autowired
|
private IParkingAreaV1InnerServiceSMO parkingAreaV1InnerServiceSMOImpl;
|
|
@Autowired
|
private RestTemplate outRestTemplate;
|
|
private static final String url = "http://59.39.179.74:9070/services/hole";
|
|
@Override
|
public void execute(Business business, List<Business> businesses) {
|
JSONObject data = business.getData();
|
|
//todo 获取到 参数信息
|
CarInoutDetailPo carInoutDetailPo = BeanConvertUtil.covertBean(data, CarInoutDetailPo.class);
|
|
//todo 获取到token
|
String token = initTrans(carInoutDetailPo);
|
|
//todo 上传进出场车辆信息
|
parkWriteInfoV2(carInoutDetailPo,token);
|
|
|
}
|
|
/**
|
* 写停车场车辆信息
|
* @param carInoutDetailPo
|
* @param token
|
*/
|
private void parkWriteInfoV2(CarInoutDetailPo carInoutDetailPo, String token) {
|
|
ParkingAreaDto parkingAreaDto = new ParkingAreaDto();
|
parkingAreaDto.setPaId(carInoutDetailPo.getPaId());
|
parkingAreaDto.setCommunityId(carInoutDetailPo.getCommunityId());
|
List<ParkingAreaDto> parkingAreaDtos = parkingAreaV1InnerServiceSMOImpl.queryParkingAreas(parkingAreaDto);
|
|
if (parkingAreaDtos == null || parkingAreaDtos.size() < 1) {
|
throw new IllegalArgumentException("停车场未找到");
|
}
|
|
//进
|
String directType = "1";
|
|
if (CarInoutDetailDto.CAR_INOUT_OUT.equals(carInoutDetailPo.getCarInout())) {
|
directType = "2"; // todo 出
|
}
|
String photo = ImageUtils.getBase64ByImgUrl(carInoutDetailPo.getPhotoJpg());
|
JSONObject picBase64 = JSONObject.parseObject("{\"SubImageInfo\": [{\"FileFormat\":\"Jpeg\",\"Data\":\"无图片\"}]}");
|
|
if(!StringUtil.isEmpty(photo)){
|
picBase64.getJSONArray("SubImageInfo").getJSONObject(0).put("Data","data:image/jpeg;base64,"+photo);
|
}
|
|
String reqParam = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ws=\"http://ws.conflux.sunshine.com\">\n" +
|
" <soapenv:Header/>\n" +
|
" <soapenv:Body>\n" +
|
" <ws:vehicleWriteInfoV2>\n" +
|
" <!--Optional:-->\n" +
|
" <gateId>441958003150000001</gateId>\n" +
|
" <!--Optional:-->\n" +
|
" <directType>"+directType+"</directType>\n" +
|
" <driverWayNo>1</driverWayNo>\n" +
|
" <!--Optional:-->\n" +
|
" <driverWayType>00</driverWayType>\n" +
|
" <!--Optional:-->\n" +
|
" <licenseType>02</licenseType>\n" +
|
" <!--Optional:-->\n" +
|
" <passTime>"+ DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A) +"</passTime>\n" +
|
" <!--Optional:-->\n" +
|
" <licenseColor>9</licenseColor>\n" +
|
" <!--Optional:-->\n" +
|
" <carType>K33</carType>\n" +
|
" <!--Optional:-->\n" +
|
" <license>"+carInoutDetailPo.getCarNum()+"</license>\n" +
|
" <!--Optional:-->\n" +
|
" <backLicense></backLicense>\n" +
|
" <!--Optional:-->\n" +
|
" <backLicenseColor></backLicenseColor>\n" +
|
" <!--Optional:-->\n" +
|
" <identical>1</identical>\n" +
|
" <!--Optional:-->\n" +
|
" <carColor>99</carColor>\n" +
|
" <!--Optional:-->\n" +
|
" <carBrand>0</carBrand>\n" +
|
" <!--Optional:-->\n" +
|
" <carShape>8</carShape>\n" +
|
" <!--Optional:-->\n" +
|
" <picBase64>"+picBase64.toJSONString()+"</picBase64>\n" +
|
" <freeParkingNums>-1</freeParkingNums>\n" +
|
" <!--Optional:-->\n" +
|
" <sendFlag>0</sendFlag>\n" +
|
" <!--Optional:-->\n" +
|
" <inputTime>"+ DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A) +"</inputTime>\n" +
|
" <!--Optional:-->\n" +
|
" <token>"+token+"</token>\n" +
|
" </ws:vehicleWriteInfoV2>\n" +
|
" </soapenv:Body>\n" +
|
"</soapenv:Envelope>";
|
|
logger.debug("请求报文:{}",reqParam);
|
HttpHeaders httpHeaders = new HttpHeaders();
|
httpHeaders.add("Content-Type","text/xml;charset=UTF-8");
|
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity(reqParam, httpHeaders);
|
try {
|
ResponseEntity<String> responseEntity = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
|
logger.debug("返回报文,{}",responseEntity);
|
}catch (HttpStatusCodeException e){
|
logger.error("调用异常",e);
|
}catch (Exception e){
|
logger.error("调用异常",e);
|
}
|
}
|
|
/**
|
* 初始化连接
|
* @param carInoutDetailPo
|
* @return
|
*/
|
public String initTrans(CarInoutDetailPo carInoutDetailPo) {
|
|
String token = CommonCache.getValue("DGGAJ_Parking_token");
|
|
if(!StringUtil.isEmpty(token)){
|
return token;
|
}
|
|
ParkingAreaDto parkingAreaDto = new ParkingAreaDto();
|
parkingAreaDto.setPaId(carInoutDetailPo.getPaId());
|
parkingAreaDto.setCommunityId(carInoutDetailPo.getCommunityId());
|
List<ParkingAreaDto> parkingAreaDtos = parkingAreaV1InnerServiceSMOImpl.queryParkingAreas(parkingAreaDto);
|
|
if (parkingAreaDtos == null || parkingAreaDtos.size() < 1) {
|
throw new IllegalArgumentException("停车场未找到");
|
}
|
|
String key = MappingCache.getValue("DOGUAN_PAKRING_KEY");
|
|
//进
|
String directType = "1";
|
|
if (CarInoutDetailDto.CAR_INOUT_OUT.equals(carInoutDetailPo.getCarInout())) {
|
directType = "2"; // todo 出
|
}
|
|
String paramIn = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ws=\"http://ws.conflux.sunshine.com\">\n" +
|
" <soapenv:Header/>\n" +
|
" <soapenv:Body>\n" +
|
" <ws:initTrans>\n" +
|
" <!--Optional:-->\n" +
|
" <gateId>441958003150000001</gateId>\n" +
|
" <!--Optional:-->\n" +
|
" <directType>" + directType + "</directType>\n" +
|
" <driverWayNo>1</driverWayNo>\n" +
|
" <!--Optional:-->\n" +
|
" <initKey>"+key+"</initKey>\n" +
|
" </ws:initTrans>\n" +
|
" </soapenv:Body>\n" +
|
"</soapenv:Envelope>";
|
|
logger.debug("请求报文:{}",paramIn);
|
HttpHeaders httpHeaders = new HttpHeaders();
|
httpHeaders.add("Content-Type","text/xml;charset=UTF-8");
|
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity(paramIn, httpHeaders);
|
try {
|
ResponseEntity<String> responseEntity = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
|
logger.debug("返回报文,{}",responseEntity);
|
String body = responseEntity.getBody();
|
if(!body.contains("token")){
|
return token;
|
}
|
token = body.substring(body.indexOf("<token>")+13,body.indexOf("</token>"));
|
CommonCache.setValue("DGGAJ_Parking_token",token,CommonCache.TOKEN_EXPIRE_TIME);
|
}catch (HttpStatusCodeException e){
|
logger.error("调用异常",e);
|
}catch (Exception e){
|
logger.error("调用异常",e);
|
}
|
|
return token;
|
}
|
}
|