xiaohanzi 5 лет назад
Родитель
Сommit
9e483a0b35
4 измененных файлов: 77 добавлений и 106 удалений
  1. +5
    -18
      mallinkCallback/src/main/java/com/iformall/controller/callback/car/jieshun/WxCarJieShunCallBackController.java
  2. +6
    -22
      mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java
  3. +22
    -23
      mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java
  4. +44
    -43
      mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunUtil.java

+ 5
- 18
mallinkCallback/src/main/java/com/iformall/controller/callback/car/jieshun/WxCarJieShunCallBackController.java Просмотреть файл

@@ -64,20 +64,7 @@ public class WxCarJieShunCallBackController extends WxParkCallBackBaseController

/**
* @description 捷顺 车辆入场通知
* “dataItems”: “[{
\ “itemId\”: \”435FA12F3C4747B0BA48E945868FC420\”,
\ “parkName” : \”测试\”,
\ “parkCode\” : \” test\”,
\ “inTime\” : \”2017-08-28 15:40:41\”,
\ “inOperator\”: \”张山\”
\ “carNumber” : \”粤-A12345\”,
\ “idno” : \”1234455\”,
\ “equipCode\”: \”2312313\”,
\ “equipName” : \”入口\”,
},
……
]
* {dataItems=[{"inTime":"2020-12-09 11:21:15","carNumber":"浙-AF81797","inCarPhoto":"p201127315/NISSP_IMG_PARK_IN/20201209/a9f1130651b9493f8eab64f14afbdd47","isReal":0,"itemId":"a9f1130651b9493f8eab64f14afbdd47","inOperator":"超级管理员","equipName":"东门入口","parkName":"杭州东站西子国际","vehicleInfo":"{\"plateNo\":\"浙-AF81797\",\"plateColor\":\"GREEN\",\"plateBackColor\":0,\"plateWordColor\":0,\"vehicleColor\":null,\"vehicleLogo\":null,\"vehicleModel\":null,\"mainModel\":0,\"subModel\":0,\"vehicleModelTrust\":0,\"mainModelTrust\":0,\"subModelTrust\":0,\"plateNoTrust\":1,\"vehicleLogoTrust\":0,\"vehicleColorTrust\":0}","equipCode":"208202496","parkCode":"p201127315"}], pno=dzxzgj, sn=6C958D99D2769AA16F3A3F06E962263F, tn=-2, ts=20201209112118886, ve=1.0}
*
*
*
@@ -88,7 +75,7 @@ public class WxCarJieShunCallBackController extends WxParkCallBackBaseController
**/
@PostMapping(value = "/parkIn")
public Result parkInCallback(@RequestBody Map<String, Object> paramMap) {
log.info("["+getIpAddr()+"] jieshunCarCallback: " + paramMap.toString());
log.info("["+getIpAddr()+"] jieshunCarCallback parkIn: " + paramMap.toString());
//解析车易付参数
return super.parkInCallBack(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_PARK_IN, paramMap);
}
@@ -104,21 +91,21 @@ public class WxCarJieShunCallBackController extends WxParkCallBackBaseController
@PostMapping(value = "/parkOut")
public Result parkOutCallback(@RequestBody WxCarCYFVo param) {
String requestJson = JSONObject.toJSONString(param);
log.info("["+getIpAddr()+"jieshunCarCallback: " + requestJson);
log.info("["+getIpAddr()+"jieshunCarCallback parkOut: " + requestJson);
return super.parkOutCallBack(EnumCarVendor.CAE_CYF, EnumCarCmd.CAR_JIESHUN_CALLBACK_PARK_OUT, param);
}
@PostMapping(value = "/unbind")
public Result unbindCallback(@RequestBody Map<String, Object> paramMap) {
log.info("["+getIpAddr()+"] jieshunCarCallback: " + paramMap.toString());
log.info("["+getIpAddr()+"] jieshunCarCallback unbind: " + paramMap.toString());
//解析车易付参数
return super.unbindCarCallBack(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_UNBIND, paramMap);
}
@PostMapping(value = "/paid")
public Result paidCallback(@RequestBody Map<String, Object> paramMap) {
log.info("["+getIpAddr()+"] jieshunCarCallback: " + paramMap.toString());
log.info("["+getIpAddr()+"] jieshunCarCallback paid: " + paramMap.toString());
//解析车易付参数
return super.paidCallback(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_PAID, paramMap);
}


+ 6
- 22
mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java Просмотреть файл

@@ -50,27 +50,7 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkB
}

/**
* {
“pno”:”平台编号”,
“tn”:”令牌”,
“ts”:”请求时间”
“sn”:”签名”,
“ve”:”版本号”,
“dataItems”:“[{
\ “itemId\”: \”435FA12F3C4747B0BA48E945868FC420\”,
\ “parkName” : \”测试\”,
\ “parkCode\” : \” test\”,
\ “inTime\” : \”2017-08-28 15:40:41\”,
\ “inOperator\”: \”张山\”
\ “carNumber” : \”粤-A12345\”,
\ “idno” : \”1234455\”,
\ “equipCode\”: \”2312313\”,
\ “equipName” : \”入口\”,
},
……
]”
}
* {dataItems=[{"inTime":"2020-12-09 11:21:15","carNumber":"浙-AF81797","inCarPhoto":"p201127315/NISSP_IMG_PARK_IN/20201209/a9f1130651b9493f8eab64f14afbdd47","isReal":0,"itemId":"a9f1130651b9493f8eab64f14afbdd47","inOperator":"超级管理员","equipName":"东门入口","parkName":"杭州东站西子国际","vehicleInfo":"{\"plateNo\":\"浙-AF81797\",\"plateColor\":\"GREEN\",\"plateBackColor\":0,\"plateWordColor\":0,\"vehicleColor\":null,\"vehicleLogo\":null,\"vehicleModel\":null,\"mainModel\":0,\"subModel\":0,\"vehicleModelTrust\":0,\"mainModelTrust\":0,\"subModelTrust\":0,\"plateNoTrust\":1,\"vehicleLogoTrust\":0,\"vehicleColorTrust\":0}","equipCode":"208202496","parkCode":"p201127315"}], pno=dzxzgj, sn=6C958D99D2769AA16F3A3F06E962263F, tn=-2, ts=20201209112118886, ve=1.0}
*/
@Override
public List<ParkNotifyParam> parseInNoticyParam(Object param) {
@@ -107,7 +87,7 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkB
try {
p.setEntranceTime(JieShunUtil.utcToLocal(entranceTime));
} catch (ParseException e) {
log.error("cyf entranceTime format error",e);
log.error("jieshun entranceTime format error",e);
return null;
}
//下订单;
@@ -115,6 +95,10 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkB
pq.setVendorType(EnumCarVendor.CAR_JIESHUN.getCode());
pq.setParkId(parkCode);
WxPark park = wxParkService.getByObj(pq);
if (park == null ) {
log.error("wxPark jieshun parkCode :"+parkCode+" not fund");
return null;
}
String retCode = jieshunParkService.createOrder(park, carNumber);
if (StringUtils.isBlank(retCode)) {
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "jieshun createOrder error. has no result");


+ 22
- 23
mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java Просмотреть файл

@@ -68,29 +68,28 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe
private String getCacheToken(WxPark park) {
// String token = RedisCacheUtils.getCacheString(baseCUserTokenRedisTemplate, "carStop:jieshuntoken:"+park.getId());
// if (StringUtils.isBlank(token)) {
// String lockKey = "carStop:jieshuntokenlock:"+park.getTenantId();
// long time = System.currentTimeMillis() + 2000;
// String timeStr = String.valueOf(time);
// if (redisLock.lock2(lockKey, timeStr)) {
// token = jieshun.getToken(park);
// if (!StringUtils.isBlank(token)) {
// setCacheToken(park, token);
// }
// redisLock.unlock(lockKey, timeStr);
// } else {
// try {
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }finally {
// redisLock.unlock(lockKey, timeStr);
// }
// }
// }
// return RedisCacheUtils.getCacheString(baseCUserTokenRedisTemplate, "carStop:jieshuntoken:"+park.getId());
return null;
String token = RedisCacheUtils.getCacheString(baseCUserTokenRedisTemplate, "carStop:jieshuntoken:"+park.getId());
if (StringUtils.isBlank(token)) {
String lockKey = "carStop:jieshuntokenlock:"+park.getTenantId();
long time = System.currentTimeMillis() + 2000;
String timeStr = String.valueOf(time);
if (redisLock.lock2(lockKey, timeStr)) {
token = jieshun.getToken(park);
if (!StringUtils.isBlank(token)) {
setCacheToken(park, token);
}
redisLock.unlock(lockKey, timeStr);
} else {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
redisLock.unlock(lockKey, timeStr);
}
}
}
return RedisCacheUtils.getCacheString(baseCUserTokenRedisTemplate, "carStop:jieshuntoken:"+park.getId());
}
private void setCacheToken(WxPark park,String token) {


+ 44
- 43
mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunUtil.java Просмотреть файл

@@ -3,6 +3,7 @@ package com.iformall.service.park.impl.jieshun;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iformall.domain.po.WxPark;
import com.iformall.exception.MallinkException;

import lombok.extern.slf4j.Slf4j;

@@ -23,6 +24,7 @@ import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException;
@@ -60,26 +62,12 @@ public class JieShunUtil {
public static final String TOKEN_URL = "http://www.jslife.com.cn/jsaims/login";
public static final String CREATE_ORDER = "";
public static final String CREATE_ORDER = "http://www.jslife.com.cn/jsaims/as";
public static final String QUERY_ORDER = "";
public static final String QUERY_ORDER = "http://www.jslife.com.cn/jsaims/as";
public static final String GET_COUPON = "";
public static final String COUPON_USE = "";

//会员车辆信息注册接口地址
public static final String REGISTER_CAR_URL = "http://open.cheyifu2016.com:8892/openapi/personCar";

//获取停车费
public static final String GET_CAR_STOPFEE = "http://open.cheyifu2016.com:8892/openapi/getFee";
//解绑车辆
public static final String UNBIND_CAR = "http://oepn.cheyifu2016.com:8892/openapi/personCar/delete";
//优惠券缴费接口
public static final String COUPON_FEE = "http://oepn.cheyifu2016.com:8892/openapi/couponFee";

public static final String GET_COUPON = "http://www.jslife.com.cn/jsaims/as";
public static final String COUPON_USE = "http://www.jslife.com.cn/jsaims/as";

/**
* @description UTC时间转化为本地时间
@@ -91,8 +79,7 @@ public class JieShunUtil {
public static Date utcToLocal(String seconds) throws ParseException {
String format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(format);
String d = sdf.format(new Date(Long.valueOf(seconds+"000")));
Date date=sdf.parse(d);
Date date=sdf.parse(seconds);
return date;
}

@@ -121,7 +108,8 @@ public class JieShunUtil {
JSONObject res = JSON.parseObject(result);
Integer code = res.getInteger("resultCode");
if (null == code || code.intValue() != 0) {
return null;
String msg = res.getString("message");
throw new MallinkException(code,msg);
}
return res.getString("token");
}
@@ -157,7 +145,7 @@ public class JieShunUtil {
param.put("carNo", handleCarNumber(cardNumber));
Map map = generateMap("3c.pay.createorderbycarno",param);
log.info("jieshun create order :" + JSON.toJSONString(map));
return ProcBussiness(CREATE_ORDER, wxPark.getParkingId(), map, token,vp.getString("version"));
return ProcBussiness(CREATE_ORDER, wxPark.getParkingId(), map, token,vp.getString("version"),vp.getString("signkey"));
}
/**
@@ -170,7 +158,7 @@ public class JieShunUtil {
param.put("orderNo", orderNo);//商户编号
Map map = generateMap("3c.pay.queryorder",param);
log.info("jieshun getCarStopFee :" + JSON.toJSONString(map));
return ProcBussiness(QUERY_ORDER, wxPark.getParkingId(), map, token,vp.getString("version"));
return ProcBussiness(QUERY_ORDER, wxPark.getParkingId(), map, token,vp.getString("version"),vp.getString("signkey"));
}
@@ -188,7 +176,7 @@ public class JieShunUtil {
param.put("tel", phone);//商户编号
Map map = generateMap("3c.coupons.receive.coupons",param);
log.info("jieshun getCoupon :" + JSON.toJSONString(map));
return ProcBussiness(GET_COUPON, wxPark.getParkingId(), map, token,vp.getString("version"));
return ProcBussiness(GET_COUPON, wxPark.getParkingId(), map, token,vp.getString("version"),vp.getString("signkey"));
}
@@ -206,35 +194,43 @@ public class JieShunUtil {
param.put("parkCode", wxPark.getParkId());
Map map = generateMap("3c.coupons.use.coupons",param);
log.info("jieshun useCoupon :" + JSON.toJSONString(map));
return ProcBussiness(COUPON_USE, wxPark.getParkingId(), map, token,vp.getString("version"));
return ProcBussiness(COUPON_USE, wxPark.getParkingId(), map, token,vp.getString("version"),vp.getString("signkey"));
}
private static String ProcLogin(String cid,String user,String password) {
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("cid", cid));
list.add(new BasicNameValuePair("usr", user));
list.add(new BasicNameValuePair("psw",password));
return Proc(TOKEN_URL,list);
String url = TOKEN_URL +"?cid="+cid+"&usr="+user+"&psw="+password;
// ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
// list.add(new BasicNameValuePair("cid", cid));
// list.add(new BasicNameValuePair("usr", user));
// list.add(new BasicNameValuePair("psw",password));
return Proc(url,null);
}
private static String ProcBussiness(String url,String cid,Map<String,Object> param,String token,String version) {
private static String ProcBussiness(String url,String cid,Map<String,Object> param,String token,String version,String signKey) {
try {
MessageDigest md5Tool = MessageDigest.getInstance("MD5");
String p = JSON.toJSONString(param);
byte[] md5Data = md5Tool.digest(p.getBytes("UTF-8"));
String p = JSON.toJSONString(param);
byte[] md5Data = md5Tool.digest((p+signKey).getBytes("UTF-8"));
String sn = toHexString(md5Data);
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("cid", cid));
list.add(new BasicNameValuePair("v", version));//版本号
list.add(new BasicNameValuePair("p",p));
list.add(new BasicNameValuePair("sn",sn));
if (!StringUtils.isBlank(token)) {
list.add(new BasicNameValuePair("tn",token));
if (url.contains("?")) {
url = url + "&";
}else {
url = url + "?";
}
return Proc(url,list);
url = url+"cid="+cid+"&tn="+token+"&sn="+sn+"&v="+version+"&p="+URLEncoder.encode(p, "UTF-8");
//
// ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
// list.add(new BasicNameValuePair("cid", cid));
// list.add(new BasicNameValuePair("v", version));//版本号
// list.add(new BasicNameValuePair("p",p));
// list.add(new BasicNameValuePair("sn",sn));
// if (!StringUtils.isBlank(token)) {
// list.add(new BasicNameValuePair("tn",token));
// }
return Proc(url,null);
} catch (NoSuchAlgorithmException e) {
log.error("jieshun request error.",e);
} catch (UnsupportedEncodingException e) {
@@ -271,11 +267,16 @@ public class JieShunUtil {
}

if (null != pairs) {
log.info("jieshun httpRequest:[url]"+url+"[params]"+JSON.toJSONString(pairs));
}else {
log.info("jieshun httpRequest:[url]"+url);
}
HttpResponse response = null;
try {
response = httpClient.execute(httpPost);
} catch (Exception e) {
log.error(e.getLocalizedMessage());
log.error(e.getLocalizedMessage(),e);
}

String result = null;


Загрузка…
Отмена
Сохранить