package com.java110.job.adapt.car;
import com.alibaba.fastjson.JSONObject;
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.parking.ParkingCouponCarDto;
import com.java110.dto.system.Business;
import com.java110.intf.acct.IParkingCouponCarV1InnerServiceSMO;
import com.java110.job.adapt.DatabusAdaptImpl;
import com.java110.po.car.CarInoutDetailPo;
import com.java110.po.parking.ParkingCouponCarOrderPo;
import com.java110.utils.cache.CommonCache;
import com.java110.utils.cache.MappingCache;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.StringUtil;
import com.java110.utils.util.TeldUtil;
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;
/**
* 特来电 2.7 推送车辆离场通知
*
* databus 配置
*
* 名称 车辆进出databus
* 业务类型 saveParkingCouponCarOrder
* 适配器 sendParkingCouponCarOrderToTeldAdapt
* 顺序 81
* 状态 在用
*
*
* mapping 中配置
*
* String signKey = MappingCache.getValue("TELD_DOMAIN", "SIGN_KEY");
* String aesKey = MappingCache.getValue("TELD_DOMAIN", "AES_KEY");
* String aesIv = MappingCache.getValue("TELD_DOMAIN", "AES_IV");
* String OperatorID = MappingCache.getValue("TELD_DOMAIN","Teld_OperatorID");
* String OperatorSecret = MappingCache.getValue("TELD_DOMAIN","Teld_OperatorSecret");
*/
@Component(value = "sendParkingCouponCarOrderToTeldAdapt")
public class SendParkingCouponCarOrderToTeldAdapt extends DatabusAdaptImpl {
private static Logger logger = LoggerFactory.getLogger(SendParkingCouponCarOrderToTeldAdapt.class);
@Autowired
private IParkingCouponCarV1InnerServiceSMO parkingCouponCarV1InnerServiceSMOImpl;
private static final String query_token = "/query_token";
private static final String notify_url = "/notification_park_order_consumed";
@Autowired
private RestTemplate outRestTemplate;
@Override
public void execute(Business business, List businesses) {
JSONObject data = business.getData();
//todo 获取到 参数信息
ParkingCouponCarOrderPo parkingCouponCarOrderPo = BeanConvertUtil.covertBean(data, ParkingCouponCarOrderPo.class);
ParkingCouponCarDto parkingCouponCarDto = new ParkingCouponCarDto();
parkingCouponCarDto.setPccId(parkingCouponCarOrderPo.getPccId());
List parkingCouponCarDtos = parkingCouponCarV1InnerServiceSMOImpl.queryParkingCouponCars(parkingCouponCarDto);
if (parkingCouponCarDtos == null || parkingCouponCarDtos.size() < 1) {
return;
}
String remark = parkingCouponCarDtos.get(0).getRemark();
if (!StringUtil.isJsonObject(remark)) {
return;
}
JSONObject remarkObj = JSONObject.parseObject(remark);
String StartChargeSeq = remarkObj.getString("StartChargeSeq");
try {
String token = getAccessToken();
notification_park_order_consumed(token, StartChargeSeq, parkingCouponCarDtos.get(0).getCarNum());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 通知 数据
*
* @param token
* @param startChargeSeq
* @param carNum
*/
private void notification_park_order_consumed(String token, String startChargeSeq, String carNum) throws Exception {
JSONObject paramIn = new JSONObject();
paramIn.put("StartChargeSeq", startChargeSeq);
paramIn.put("PlateNum", carNum);
paramIn.put("LeavingTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
paramIn.put("CalculationMethod", 3);
String signKey = MappingCache.getValue("TELD_DOMAIN", "SIGN_KEY");
String aesKey = MappingCache.getValue("TELD_DOMAIN", "AES_KEY");
String aesIv = MappingCache.getValue("TELD_DOMAIN", "AES_IV");
String OperatorID = MappingCache.getValue("TELD_DOMAIN","Teld_OperatorID");
String teldUrl = MappingCache.getValue("TELD_DOMAIN","Teld_Url");// http://hlht.teld.cc:7777/evcs/v20191230
String param = TeldUtil.generateSecurityParam(paramIn.toJSONString(), aesKey, aesIv, signKey, OperatorID);
logger.debug("请求报文:{}", paramIn);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Content-Type", "application/json;charset=UTF-8");
httpHeaders.add("Authorization", "Bearer " + token);
HttpEntity> httpEntity = new HttpEntity(param, httpHeaders);
try {
ResponseEntity responseEntity = outRestTemplate.exchange(teldUrl+notify_url, HttpMethod.POST, httpEntity, String.class);
logger.debug("返回报文,{}", responseEntity);
} catch (HttpStatusCodeException e) {
logger.error("调用异常", e);
} catch (Exception e) {
logger.error("调用异常", e);
}
}
public String getAccessToken() throws Exception {
String token = CommonCache.getValue("Teld_Parking_token");
if (!StringUtil.isEmpty(token)) {
return token;
}
String signKey = MappingCache.getValue("TELD_DOMAIN", "SIGN_KEY");
String aesKey = MappingCache.getValue("TELD_DOMAIN", "AES_KEY");
String aesIv = MappingCache.getValue("TELD_DOMAIN", "AES_IV");
String OperatorID = MappingCache.getValue("TELD_DOMAIN","Teld_OperatorID");
String OperatorSecret = MappingCache.getValue("TELD_DOMAIN","Teld_OperatorSecret");
String teldUrl = MappingCache.getValue("TELD_DOMAIN","Teld_Url");// http://hlht.teld.cc:7777/evcs/v20191230
JSONObject paramIn = new JSONObject();
paramIn.put("OperatorID", OperatorID);
paramIn.put("OperatorSecret", OperatorSecret);
String param = TeldUtil.generateSecurityParam(paramIn.toJSONString(), aesKey, aesIv, signKey, OperatorID);
logger.debug("请求报文:{}", paramIn);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Content-Type", "application/json;charset=UTF-8");
HttpEntity> httpEntity = new HttpEntity(param, httpHeaders);
try {
ResponseEntity responseEntity = outRestTemplate.exchange(teldUrl+query_token, HttpMethod.POST, httpEntity, String.class);
logger.debug("返回报文,{}", responseEntity);
String body = responseEntity.getBody();
JSONObject paramOut = JSONObject.parseObject(body);
String data = TeldUtil.Decrypt(paramOut.getString("Data"), aesKey, aesIv);
JSONObject dataObj = JSONObject.parseObject(data);
token = dataObj.getString("AccessToken");
CommonCache.setValue("Teld_Parking_token", token, CommonCache.TOKEN_EXPIRE_TIME);
} catch (HttpStatusCodeException e) {
logger.error("调用异常", e);
} catch (Exception e) {
logger.error("调用异常", e);
}
return token;
}
}