Browse Source

fix

release_toaliyun_real
winter 1 week ago
parent
commit
0f94c98005
3 changed files with 85 additions and 31 deletions
  1. +1
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java
  2. +53
    -11
      mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java
  3. +31
    -19
      mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkUtil.java

+ 1
- 1
mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java View File

@@ -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)//大华
;



+ 53
- 11
mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java View File

@@ -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<String, String> 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<String, String> 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<String, String> 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


+ 31
- 19
mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkUtil.java View File

@@ -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) {


Loading…
Cancel
Save