diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/jieshun/WxCarJieShunCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/jieshun/WxCarJieShunCallBackController.java index f95f70c72..064a9c8e8 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/jieshun/WxCarJieShunCallBackController.java +++ b/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 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 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 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); } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java index 3378d39ac..d551633af 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java +++ b/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 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"); diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java index b4c5632a7..d40b86745 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java +++ b/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) { diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunUtil.java index 1ba40fdce..9a17b3d73 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunUtil.java +++ b/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 list = new ArrayList(); - 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 list = new ArrayList(); +// 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 param,String token,String version) { + private static String ProcBussiness(String url,String cid,Map 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 list = new ArrayList(); - 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 list = new ArrayList(); +// 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;