diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java index a60925c1a..7a58005d5 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java @@ -28,9 +28,10 @@ public class ParkStopFee implements Serializable{ private Map extraData=new HashMap(); /*备注**/ private String remark=""; + private String sysNotice="";//系统提示,非车厂提示; - public ParkStopFee(String orderId,Date startTime,Date endTime,String fee,String appId,String payPath,Map extraData,String remark) { + public ParkStopFee(String orderId,Date startTime,Date endTime,String fee,String appId,String payPath,Map extraData,String remark,String sysNotice) { if (!StringUtils.isBlank(orderId)) { this.orderId = orderId; } @@ -55,6 +56,9 @@ public class ParkStopFee implements Serializable{ if (!StringUtils.isBlank(remark)) { this.remark = remark; } + if (!StringUtils.isBlank(sysNotice)) { + this.sysNotice = sysNotice; + } } @@ -111,4 +115,7 @@ public class ParkStopFee implements Serializable{ public void setRemark(String remark) { this.remark = remark; } + public String getSysNotice() { + return sysNotice; + } } 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 e9d8357f0..b7e01b111 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 @@ -136,7 +136,7 @@ public class CYFParkService extends BaseParkService implements ParkAdapterServic String appId = ""; String payPath = "http://wechat.cheyifu2016.com/fm-pay/#/transit?encodeURIComponent('orderNo=123&couponFee=2&actualFee=20')"; return new ResultData(new ParkStopFee(retObj.getString("orderId"), cyf.utcToLocal(String.valueOf(createTime)), - cyf.utcToLocal(String.valueOf(endTime)), String.valueOf(retObj.getDouble("fee")),appId,payPath,null,msg)); + cyf.utcToLocal(String.valueOf(endTime)), String.valueOf(retObj.getDouble("fee")),appId,payPath,null,msg,null)); }else { logger.error("cyfCarStopFee error. paramMap: {} . cyfResult: {}",JSON.toJSONString(paramMap),ret); String msg = retObj.getString("strError"); 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 2b37e4d51..aa0fe35bf 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 @@ -33,6 +33,7 @@ import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import com.iformall.service.park.impl.util.ParkHelper; +import com.iformall.service.park.utils.ParkCacheUtils; import com.iformall.utils.RedisCacheUtils; import com.iformall.utils.RedisLock; @@ -59,7 +60,7 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe @Autowired @Qualifier("objectCommonRedisTemplate") - RedisTemplate baseCUserTokenRedisTemplate; + RedisTemplate redisTemplate; @Autowired RedisLock redisLock; @@ -72,7 +73,7 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe private String getCacheToken(WxPark park) { - String token = RedisCacheUtils.getCacheString(baseCUserTokenRedisTemplate, "carStop:jieshuntoken:"+park.getId()); + String token = RedisCacheUtils.getCacheString(redisTemplate, "carStop:jieshuntoken:"+park.getId()); if (StringUtils.isBlank(token)) { String lockKey = "carStop:jieshuntokenlock:"+park.getTenantId(); long time = System.currentTimeMillis() + 2000; @@ -93,11 +94,11 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe } } } - return RedisCacheUtils.getCacheString(baseCUserTokenRedisTemplate, "carStop:jieshuntoken:"+park.getId()); + return RedisCacheUtils.getCacheString(redisTemplate, "carStop:jieshuntoken:"+park.getId()); } private void setCacheToken(WxPark park,String token) { - RedisCacheUtils.cache(baseCUserTokenRedisTemplate, "carStop:jieshuntoken:"+park.getId(), token, 3600); + RedisCacheUtils.cache(redisTemplate, "carStop:jieshuntoken:"+park.getId(), token, 3600); } @@ -150,7 +151,7 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe //如果车牌号是鄂AAAAAA, 为测试车牌 if (carNumber.equals("鄂AAAAAA")) { return new ResultData(new ParkStopFee("-111",jieshun.utcToLocal("2020-12-16 00:00:00"),jieshun.utcToLocal("2020-12-17 00:00:00"), - "0.01","wx24b70f0ad2a9a89a","payPath",null,"测试车牌,仅测试用")); + "0.01","wx24b70f0ad2a9a89a","payPath",null,"测试车牌,仅测试用",null)); }else if(carNumber.equals("鄂AAAAAB")) { return new ResultData(21000,"车辆未入场"); } @@ -172,6 +173,7 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe JSONObject attribute = arrays.getJSONObject(0).getJSONObject("attributes"); Double totalFee = attribute.getDouble("totalFee"); String appId = "wx24b70f0ad2a9a89a"; + String parkOrderId = attribute.getString("orderNo"); if (totalFee <= 0 ) { String _createTime = attribute.getString("startTime");//计费时间,格式为“yyyy-MM-dd HH:mi:ss” String _endTime = attribute.getString("endTime");//离场时间,格式为“yyyy-MM-dd HH:mi:ss” @@ -179,15 +181,42 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe if (!StringUtils.isBlank(msg)) { if (msg.contains("未入场")) { return new ResultData(new ParkStopFee(null,jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), - "0.00",appId,"payPath",null,msg)); + "0.00",appId,"payPath",null,msg,null)); }else { - return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), - "0.00",appId,"payPath",null,msg)); + //0元订单结清,查询是否用过打折方案,如果用过,则需要调用接口结清订单 + Integer used = ParkCacheUtils.getCarCouponUseCacheLock(redisTemplate, EnumCarVendor.CAR_JIESHUN.getMessage(), carNumber); + if (null == used || (null != used && used.intValue() < 1)) { + //未使用停车券 + return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), + "0.00",appId,"payPath",null,msg,null)); + }else { + String notifyResult = jieshun.notifyOrderResult(park, parkOrderId, getCacheToken(park)); + JSONObject notiryRetObj = JSON.parseObject(notifyResult); + if (notiryRetObj.getIntValue("resultCode") == 0){ + JSONArray notiryRetArrays = notiryRetObj.getJSONArray("dataItems"); + if (null != notiryRetArrays && notiryRetArrays.size() == 0 ) { + JSONObject notifyRetObject = notiryRetArrays.getJSONObject(0).getJSONObject("attributes"); + if(notifyRetObject.getIntValue("retCode") == 0) { + return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), + "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,获得15分钟免费出场时间")); + }else { + return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), + "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,但是结清订单失败,无免费出场时间,请刷新")); + } + }else { + return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), + "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,但是结清订单失败,无免费出场时间,请刷新")); + } + }else { + return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), + "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,但是结清订单失败,无免费出场时间,请刷新")); + } + } } } } - String parkOrderId = attribute.getString("orderNo"); + String ret = jieshun.getCarStopFee(park, parkOrderId, getCacheToken(park)); JSONObject retObj = JSON.parseObject(ret); if (retObj.getIntValue("resultCode") == 0){ @@ -201,7 +230,7 @@ public class JieShunParkService extends BaseParkService implements ParkAdapterSe String endTime = retObject.getString("endTime");//离场时间,格式为“yyyy-MM-dd HH:mi:ss” String payPath = "pages/thirdPayOrder/payOrder?carNo="+jieshun.handleCarNumber(carNumber)+"&parkCode="+park.getParkingId(); return new ResultData(new ParkStopFee(parkOrderId,jieshun.utcToLocal(createTime),jieshun.utcToLocal(endTime), - String.valueOf(retObject.getDouble("totalFee")),appId,payPath,null,null)); + String.valueOf(retObject.getDouble("totalFee")),appId,payPath,null,null,"请支付后15分钟内离场")); }else { logger.error("jieshunCarStopFee error. paramMap: {} . jieshunResult: {}",JSON.toJSONString(paramMap),ret); String msg = retObj.getString("message"); 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 e06d88120..8c4b9e4a4 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 @@ -263,6 +263,27 @@ public class JieShunUtil { return Proc(url,null); } + /** + * 优惠券使用完毕,0元停车费需调用次接口结清订单 + * @param wxPark + * @param planId + * @param userId + * @param carNumber + * @param token + * @return + */ + public String notifyOrderResult(WxPark wxPark,String orderNo,String token) { + String vendroParams = wxPark.getVendorParams(); + JSONObject vp = JSON.parseObject(vendroParams); + Map param = new HashMap(); + param.put("orderNo", orderNo);//商户编号 + param.put("tradeStatus", 0);//优惠券编号 + param.put("isCallBack", 0);//优惠券编号 + Map map = generateMap("3c.pay.notifyorderresult",param); + log.info("jieshun notifyOrderResult :" + JSON.toJSONString(map)); + return ProcBussiness(PLAN_EXECUTE, wxPark.getParkId(), map, token,vp.getString("version"),vp.getString("signkey")); + } + private static String ProcBussiness(String url,String cid,Map param,String token,String version,String signKey) { try { MessageDigest md5Tool = MessageDigest.getInstance("MD5");