From 981ac359850e4568629f23b0d40b29e0e7c90ec3 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Tue, 21 Dec 2021 14:24:38 +0800 Subject: [PATCH 1/3] fix carstop --- .../iformall/controller/WxCarController.java | 18 +++++++++++++++--- .../service/park/ParkAdapterService.java | 6 ++++++ .../park/impl/bolink/BoLinkParkService.java | 5 +++++ .../service/park/impl/cyf/CYFParkService.java | 5 +++++ .../park/impl/dahua/DaHuaParkService.java | 5 +++++ .../HaiKangWeiShiParkService.java | 7 ++++++- .../impl/haikangweishi/HaiKangWeiShiUtil.java | 3 +++ .../park/impl/jieshun/JieShunParkService.java | 5 +++++ .../park/impl/shangan/ShangAnParkService.java | 5 +++++ .../service/park/impl/tjd/TJDParkService.java | 5 +++++ 10 files changed, 60 insertions(+), 4 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 284019543..7897ac9a1 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -367,8 +367,9 @@ public class WxCarController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券为空"); } try { - if (null == used || (null != used && used.intValue() < 1)) { - ResultData rs = parkFactory.getParkService(park.getVendorType()).useCoupon(paramMap, park, userCar, coupon, carNumber); + boolean ignoreUseCouponCache = parkFactory.getParkService(park.getVendorType()).ignoreUseCouponCache(); + if (ignoreUseCouponCache) { + ResultData rs = parkFactory.getParkService(park.getVendorType()).useCoupon(paramMap, park, userCar, coupon, carNumber); if (rs.code == Result.SUCCESS) { etcpHelper.updateWxCouponOrderUsed(userCar, park); ParkCacheUtils.setCarCouponUsedCacheLock(redisTemplate, vendor.getMessage(), carNumber); @@ -376,8 +377,19 @@ public class WxCarController extends BaseController { }else { return new ResultData(rs.code,rs.message); } + }else { + if (null == used || (null != used && used.intValue() < 1)) { + ResultData rs = parkFactory.getParkService(park.getVendorType()).useCoupon(paramMap, park, userCar, coupon, carNumber); + if (rs.code == Result.SUCCESS) { + etcpHelper.updateWxCouponOrderUsed(userCar, park); + ParkCacheUtils.setCarCouponUsedCacheLock(redisTemplate, vendor.getMessage(), carNumber); + return new ResultData(); + }else { + return new ResultData(rs.code,rs.message); + } + } + return new ResultData(Result.ERROR,"已经使用过优惠券, 不能重复使用."); } - return new ResultData(Result.ERROR,"已经使用过优惠券, 不能重复使用."); } catch (Exception e) { logger.error("park getCoupon error",e); return new ResultData(Result.ERROR,e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java index f032410e2..a187ba1d1 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java @@ -45,6 +45,12 @@ public interface ParkAdapterService { */ ResultData carStopFee(Map paramMap, WxPark park) throws Exception; + /** + * 是否忽略使用券缓存,不忽略,则走系统,根据停车场出入场通知来控制。忽略,则不需要此判断来判定停车券是否已经使用 + * @return + */ + boolean ignoreUseCouponCache(); + /** * 停车券使用, 给老的集成用 */ diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java index 930b4c757..993c86bc8 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java @@ -109,6 +109,11 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer return null; } + @Override + public boolean ignoreUseCouponCache() { + return false; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java index b10b25733..7c47f75fe 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java @@ -195,4 +195,9 @@ public class CYFParkService extends BaseParkService implements ParkAdapterServic return new ResultData(); } + @Override + public boolean ignoreUseCouponCache() { + return false; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java index 051965ac4..13796e42e 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java @@ -72,4 +72,9 @@ public class DaHuaParkService extends BaseParkService implements ParkAdapterServ return new ResultData(); } + @Override + public boolean ignoreUseCouponCache() { + return false; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java index 9c7ee91d6..7dcdb43d8 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java @@ -189,7 +189,7 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda String orderNo = paramMap.get("parkOrderId"); String planNo = valueMap.get("couponNo"); if (StringUtils.isBlank(planNo)) { - return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置[planNo]。"+coupon.getTitle()); + return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置[ruleId]。"+coupon.getTitle()); } JSONObject retObj = haikang.useCoupon(park,planNo,carNumber,orderNo, getCacheToken(park),haikang.getAuthorization(park,getCacheToken(park))); if (retObj.getString("code").equals("0")){ @@ -205,6 +205,11 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda public ResultData getParkStatus(WxPark park) throws Exception{ return new ResultData(); } + + @Override + public boolean ignoreUseCouponCache() { + return true; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java index 3f9d03aca..ef9b60e18 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java @@ -211,6 +211,9 @@ public class HaiKangWeiShiUtil { return attribute; } + + + /** * 2、有优惠券方式 发优惠券的时候是会返回一个优惠券id(3.5.9.1), 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 0bad0cd8d..57702dbbd 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 @@ -334,4 +334,9 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe return new ResultData(); } + @Override + public boolean ignoreUseCouponCache() { + return false; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java index 78b54f9ee..713aed2be 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java @@ -90,4 +90,9 @@ public class ShangAnParkService extends BaseParkService implements ParkAdapterSe public ResultData getParkStatus(WxPark park) { return null; } + + @Override + public boolean ignoreUseCouponCache() { + return false; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java index ac40928a3..71f3459b3 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java @@ -254,4 +254,9 @@ public class TJDParkService extends BaseParkService implements ParkAdapterServic public ResultData getParkStatus(WxPark park) { return null; } + + @Override + public boolean ignoreUseCouponCache() { + return false; + } } From 45e5e960c352886e6e178eab0bafaa2f0be79dea Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Tue, 21 Dec 2021 16:10:39 +0800 Subject: [PATCH 2/3] fix carstop --- .../HaiKangWeiShiParkService.java | 35 ++++++++++++++++ .../impl/haikangweishi/HaiKangWeiShiUtil.java | 40 ++++++++++++++++++- 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java index 7dcdb43d8..0ab58ec52 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java @@ -186,13 +186,48 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda if (null == valueMap) { return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置。"+coupon.getTitle()); } + String orderNo = paramMap.get("parkOrderId"); String planNo = valueMap.get("couponNo"); if (StringUtils.isBlank(planNo)) { return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置[ruleId]。"+coupon.getTitle()); } + + //查询临停信息,判断缓存是否已经存在 + String inRecordSyscode = ""; + JSONObject stopInfo = haikang.getCarStopInfo(park, getCacheToken(park), haikang.getAuthorization(park,getCacheToken(park)), carNumber); + if (stopInfo.getString("code").equals("0")){ + JSONObject dataobject = stopInfo.getJSONObject("data"); + if (null == dataobject) { + return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前未查询海康威视临停信息["+carNumber+"]"); + } + JSONArray listobject = dataobject.getJSONArray("list"); + if (null == listobject || listobject.size() <= 0 ) { + return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前未查询海康威视临停信息["+carNumber+"]"); + } + JSONObject currentStopInfo = listobject.getJSONObject(0); + inRecordSyscode = currentStopInfo.getString("inRecordSyscode"); + if (StringUtils.isBlank(inRecordSyscode)) { + return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前未查询海康威视临停信息["+carNumber+"]"); + } + + Integer used = RedisCacheUtils.getCacheInteger(redisTemplate, "carStop:haikangStopInfoUseCoupon:"+carNumber+":"+inRecordSyscode); + if (null == used || (null != used && used.intValue() < 1) ) { + //do nothing + }else { + return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "已经使用过优惠券, 不能重复使用."); + } + + }else { + logger.error("haikangweishi stopInfo error. paramMap: {} . haikangResult: {}",JSON.toJSONString(paramMap),stopInfo); + String msg = stopInfo.getString("msg"); + return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前查询海康威视临停信息失败:["+stopInfo.getString("code")+"]"+msg); + } + + JSONObject retObj = haikang.useCoupon(park,planNo,carNumber,orderNo, getCacheToken(park),haikang.getAuthorization(park,getCacheToken(park))); if (retObj.getString("code").equals("0")){ + RedisCacheUtils.cache(redisTemplate, "carStop:haikangStopInfoUseCoupon:"+carNumber+":"+inRecordSyscode, 1, 12*3600); return new ResultData(); }else { logger.error("haikangweishi useCoupon error. paramMap: {} . haikangResult: {}",JSON.toJSONString(paramMap),retObj); diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java index ef9b60e18..62603e65f 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java @@ -61,6 +61,7 @@ public class HaiKangWeiShiUtil { public static final String GET_FEE = "https://open.hikyun.com/artemis/api/pmsc/v1/pay/quickGetVehicleBill"; public static final String COUPON_USE = "https://open.hikyun.com/artemis/api/pmsc/v1/coupon/addition"; public static final String SUBSCRIPTION = "https://open.hikyun.com/artemis/api/pmsc/v1/sub/subscription"; + public static final String CAR_STOP_INFO = "https://open.hikyun.com/artemis/api/pmsc/v1/tempCarInRecords/page"; /** @@ -212,7 +213,43 @@ public class HaiKangWeiShiUtil { } - + /** + * 3.5.7 查询停车信息 + * + * "inRecordSyscode": "h45h45h45ghhn45tg245g45r", + "parkId": "6534543543554", + "parkName": "停车库 1", + "plateNo": "浙 A12345", + "plateNoPicId": "hj53h4h45t45t45t3t234t2t2t45t45t", + "vehiclePicId": "u65h45g45yh56y54y34y34y345y3" + "inTime": "2018-07-26T15:00:00+08:00", + "parkTime": "3 小时 10 分钟" + */ + public JSONObject getCarStopInfo(WxPark wxPark,String token,String Authrozitaion,String carNumber) { + String vendroParams = wxPark.getVendorParams(); + JSONObject vp = JSON.parseObject(vendroParams); + Map params = new HashMap(); + params.put("pageNo", 1); + params.put("pageSize", 1); + params.put("parkId", wxPark.getParkingId());//商户编号 + params.put("plateNo", carNumber); + String retCode = ProcBussiness(CAR_STOP_INFO, params,token,Authrozitaion); + if (StringUtils.isBlank(retCode)) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getCarStopInfo error. has no result"); + } + JSONObject result = JSON.parseObject(retCode); + + Integer errStatus = result.getInteger("status"); + if (null != errStatus) { + throw new MallinkException(errStatus,"haikang getCarStopInfo error.["+result.getString("error")+"]"+result.getString("message")); + } + + if (!result.getString("code").equals("0") ) { + String message = result.getString("msg"); + throw new MallinkException(result.getInteger("code"), "haikang getCarStopInfo error."+message); + } + return result; + } /** * 2、有优惠券方式 @@ -226,6 +263,7 @@ public class HaiKangWeiShiUtil { public JSONObject useCoupon(WxPark wxPark,String couponNo,String carNumber,String orderNo,String token,String Authrozitaion){ String vendroParams = wxPark.getVendorParams(); JSONObject vp = JSON.parseObject(vendroParams); + Map params = new HashMap(); Map couponmap = new HashMap(); couponmap.put("plateNo", carNumber); From 57713e680a5db29975a33314085f53381dcb9638 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Tue, 21 Dec 2021 16:44:28 +0800 Subject: [PATCH 3/3] fix haikang --- .../park/impl/haikangweishi/HaiKangWeiShiParkService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java index 0ab58ec52..f3353718e 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java @@ -227,7 +227,7 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda JSONObject retObj = haikang.useCoupon(park,planNo,carNumber,orderNo, getCacheToken(park),haikang.getAuthorization(park,getCacheToken(park))); if (retObj.getString("code").equals("0")){ - RedisCacheUtils.cache(redisTemplate, "carStop:haikangStopInfoUseCoupon:"+carNumber+":"+inRecordSyscode, 1, 12*3600); + RedisCacheUtils.cache(redisTemplate, "carStop:haikangStopInfoUseCoupon:"+carNumber+":"+inRecordSyscode, 1, 24*3600); return new ResultData(); }else { logger.error("haikangweishi useCoupon error. paramMap: {} . haikangResult: {}",JSON.toJSONString(paramMap),retObj);