From 0f94c98005b50a61185bcd6a994f85e95e6da9b0 Mon Sep 17 00:00:00 2001 From: winter <664946893@qq.com> Date: Mon, 6 Jul 2026 17:43:03 +0800 Subject: [PATCH] fix --- .../com/iformall/enums/EnumCarVendor.java | 2 +- .../park/impl/bolink/BoLinkParkService.java | 64 +++++++++++++++---- .../service/park/impl/bolink/BoLinkUtil.java | 50 +++++++++------ 3 files changed, 85 insertions(+), 31 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java index e2c27db9b..8c4c0cb66 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java @@ -20,7 +20,7 @@ public enum EnumCarVendor { CAE_CYF(13,"CYF",false),// 车易付【接口不支持未接通,不能使用】 CAR_TJD(14, "TJD",false),// 停简单【接口不支持未接通,不能使用】 CAR_SHANGAN(15, "ShangAn",false),// 尚安【接口不支持未接通,不能使用】 - CAR_BOLINK(16, "BoLink",false),// 泊连【接口不支持未接通,不能使用】 + CAR_BOLINK(16, "BoLink",false),// 泊连 CAR_DAHUA(17, "DAHUA",false)//大华 ; 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 143827bf5..83244e936 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 @@ -9,6 +9,7 @@ import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxPark; import com.iformall.domain.vo.WxCouponOrderCarCVo; import com.iformall.enums.EnumCouponUnit; +import com.iformall.exception.MallinkException; import com.iformall.service.park.ParkAdapterService; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; @@ -16,13 +17,21 @@ import com.iformall.service.park.entity.ParkPaidNotifyResult; import com.iformall.service.park.entity.ParkStopFee; import com.iformall.service.park.impl.BaseParkService; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.Date; +import java.util.HashMap; import java.util.Map; @Service public class BoLinkParkService extends BaseParkService implements ParkAdapterService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + BoLinkUtil bolinkUtil = new BoLinkUtil(); + @Override public ResultData parkInitConfig(WxPark park) throws Exception { // TODO Auto-generated method stub @@ -36,7 +45,7 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer @Override public String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { - return member.getId().toString(); + return "bolink"; } @Override @@ -48,6 +57,7 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer return bolinkCarStopFee(paramMap, park,carNumber); } + //https://doc.bolinkpaas.com/doc/126/ private ParkStopFee bolinkCarStopFee(Map paramMap, WxPark park,String carNumber) { String params = park.getVendorParams(); JSONObject objParams = JSON.parseObject(params); @@ -59,17 +69,47 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer if (ret != null) { JSONObject retObj = JSON.parseObject(ret); JSONObject dataObj = retObj.getJSONObject(BoLinkUtil.BOLINK_DATA); - if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) { - //return new ResultData(dataObj); - } else { - //return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL); + if (null != dataObj) { + if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) { + String parkOrderId = dataObj.getString("order_id"); + Long _createTime = dataObj.getLong("in_time"); + Date inTime = new Date(_createTime); + String duration = dataObj.getString("duration"); + if (StringUtils.isBlank(duration)) { + duration = ""; + } + String money = String.valueOf(dataObj.getDouble("money")); + + String appId = "wx0870f79235e513f7"; + String payPath = "pages/park/park"; + Map extraMap = new HashMap(); + extraMap.put("union_id", unionId); + extraMap.put("park_id", comid); + extraMap.put("plate_number", carNumber); + extraMap.put("money", money); + extraMap.put("in_time", _createTime); + extraMap.put("pay_url", "https://s.bolink.club"); + extraMap.put("flag", "1"); + + String freeMinute = dataObj.getString("free_out_time"); + return new ParkStopFee(parkOrderId,inTime,bolinkUtil.addTimeByStr(inTime,duration), + String.valueOf(dataObj.getDouble("money")),appId,payPath,extraMap,null,"请支付后"+freeMinute+"分钟内离场"); + } else { + logger.error("bolinkCarStopFee error. paramMap: {} . bolinkResult: {}",JSON.toJSONString(paramMap),ret); + String msg = retObj.getString("errmsg"); + throw new MallinkException(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:"+msg); + } + }else { + logger.error("bolinkCarStopFee error. paramMap: {} . bolinkResult: {}",JSON.toJSONString(paramMap),ret); + throw new MallinkException(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:no result"); } } else { - //return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL); + logger.error("bolinkCarStopFee error. paramMap: {} . bolinkResult: {}",JSON.toJSONString(paramMap),ret); + throw new MallinkException(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:no result"); } - return null; } + //https://doc.bolinkpaas.com/doc/125/ @Override public ResultData useCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) { String orderId = paramMap.get("orderId"); @@ -97,20 +137,22 @@ public class BoLinkParkService extends BaseParkService implements ParkAdapterSer JSONObject retObj = JSON.parseObject(ret); JSONObject dataObj = retObj.getJSONObject(BoLinkUtil.BOLINK_DATA); if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) { - return new ResultData(dataObj); + return new ResultData(); } else { - return new ResultData(ErrorCode.CAR_DEDUCE_FEE_FAIL); + logger.error("bolink useCoupon error. paramMap: {} . bolinkResult: {}",JSON.toJSONString(paramMap),ret); + String msg = dataObj.getString("message"); + return new ResultData(dataObj.getIntValue("state"), "泊链平台缴费通知车场接口失败:"+msg); } } @Override public ResultData getParkStatus(WxPark park) { - return null; + return new ResultData(); } @Override public boolean ignoreUseCouponCache() { - return false; + return true; } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkUtil.java b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkUtil.java index 912c2aab5..51845835b 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkUtil.java @@ -21,10 +21,17 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Base64; import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * 尚安停车 @@ -33,8 +40,8 @@ public class BoLinkUtil { private final static Logger logger = LoggerFactory.getLogger(BoLinkUtil.class); public static final String BOLINK_URL = "url"; - public static final String BOLINK_COMID = "comid"; - public static final String BOLINK_UNION_ID = "union_id"; + public static final String BOLINK_COMID = "comid";//车场编号 21782 + public static final String BOLINK_UNION_ID = "union_id";//厂商编号 200002 public static final String BOLINK_KEY = "key"; public static final String BOLINK_CAR_NUMBER = "car_number"; public static final String BOLINK_ORDER_ID = "order_id"; @@ -59,11 +66,28 @@ public class BoLinkUtil { public static void main(String[] args) throws Exception { String carNumber = "京88888"; - String result = getStopFee(URL, COMID, UNION_ID, KEY, carNumber); - - + //String result = getStopFee(URL, COMID, UNION_ID, KEY, carNumber); + System.out.println(addTimeByStr(new Date(),"1天3小时1分钟")); } - + + public static Date addTimeByStr(Date time, String str) { + Pattern dayPat = Pattern.compile("(\\d+)天"); + Pattern hourPat = Pattern.compile("(\\d+)小时"); + Pattern minPat = Pattern.compile("(\\d+)分钟"); + + Matcher dayMat = dayPat.matcher(str); + Matcher hourMat = hourPat.matcher(str); + Matcher minMat = minPat.matcher(str); + + long days = dayMat.find() ? Long.parseLong(dayMat.group(1)) : 0; + long hours = hourMat.find() ? Long.parseLong(hourMat.group(1)) : 0; + long mins = minMat.find() ? Long.parseLong(minMat.group(1)) : 0; + LocalDateTime localDateTime = time.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + LocalDateTime _afterTime = localDateTime.plusDays(days).plusHours(hours).plusMinutes(mins); + Date _afterDate = Date.from(_afterTime.atZone(ZoneId.systemDefault()).toInstant()); + return _afterDate; + } + /** * md5算法 * @param data @@ -115,12 +139,6 @@ public class BoLinkUtil { params.put(BOLINK_COMID, comid); params.put(BOLINK_UNION_ID, unionId); params.put(BOLINK_CAR_NUMBER, carNumber); - try { - String sign = getSign(key, JSON.toJSONString(params)); - } catch (Exception e) { - logger.error(e.getMessage()); - } - try { String result = Proc(url, key, params); if(result == null) { @@ -146,8 +164,8 @@ public class BoLinkUtil { params.put(BOLINK_UNION_ID, unionId); params.put(BOLINK_CAR_NUMBER, carNumber); params.put(BOLINK_ORDER_ID, orderId); + params.put("type", 1); params.put(BOLINK_PAY_TIME, new Date().getTime()); - params.put(BOLINK_ACT_TOTAL, "0"); if (unit.equals(EnumCouponUnit.MONEY.getCode())) { // 金额 params.put(BOLINK_DEDUCTION_MONEY, amount); @@ -155,12 +173,6 @@ public class BoLinkUtil { // 小时 params.put(BOLINK_DEDUCTION_TIME, amount); } - try { - String sign = getSign(key, JSON.toJSONString(params)); - } catch (Exception e) { - logger.error(e.getMessage()); - } - try { String result = Proc(url, key, params); if(result == null) {