Browse Source

fix haikangweishi car

release_toaliyun_real
xiaohanzi 4 years ago
parent
commit
e0f2a6be5a
4 changed files with 188 additions and 50 deletions
  1. +1
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java
  2. +103
    -21
      mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkCallbackService.java
  3. +3
    -19
      mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java
  4. +81
    -9
      mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java

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

@@ -14,7 +14,7 @@ public enum EnumCarVendor {
CAR_BOLINK(5, "BoLink",false),
CAE_CYF(6,"CYF",false),
CAR_JIESHUN(7,"JIESHUN",true),
CAR_HAIKANGWEISHI(8,"HAIKANGWEISHI",true)
CAR_HAIKANGWEISHI(8,"HAIKANGWEISHI",false)
;

public static EnumCarVendor getEnum(Integer code) {


+ 103
- 21
mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkCallbackService.java View File

@@ -48,23 +48,61 @@ public class HaiKangWeiShiParkCallbackService extends BaseParkService implements

/**
* {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}
*{
"method":"OnEventNotify",
"params":{
"ability":"vehicle_pass_in_event",
"eventType":771760131,
"events":[
{
"crossTime":"2021-07-01T17:29:27+08:00",
"crossType":1,
"eventIndexCode":"74b64514-4888-4f42-8cf7-22fed37d5dc8",
"eventType":3,
"resource":{
"deviceId":"3715149265421676",
"deviceSerial":"R20150664",
"direction":0,
"entranceId":"2063867554789264",
"entranceName":"前门1",
"parkId":"2064637172217744",
"parkName":"车库",
"resType":"roadway",
"roadWayId":"2064272439342992",
"roadWayName":"前门入口"
},
"stopType":11,
"vehicle":{
"plateColor":12,
"plateNo":"苏A23658",
"plateType":8,
"vehicleColor":12,
"vehicleType":12
}
}
],
"sendTime":"2021-07-01T17:29:29.315+08:00"
}
}
*/
@Override
public List<ParkNotifyParam> parseInNoticyParam(Object param) {
Map<String,Object> paramm = (Map<String, Object>) param;
String liststr = (String) paramm.get("dataItems");
JSONArray list = JSONArray.parseArray(liststr);
if (null != list && list.size() > 0 ) {
List<ParkNotifyParam> retList = new ArrayList<ParkNotifyParam>();
for (int i = 0 ; i < list.size() ; i ++) {
Map<String,Object> map = (Map<String, Object>) list.get(i);
ParkNotifyParam ret = parseInNoticyParamSingle(map);
if (null != ret ) {
retList.add(ret);
String paramsstr = (String) paramm.get("params");
JSONObject paramobject = JSONArray.parseObject(paramsstr);
if (null != paramobject) {
JSONArray list = paramobject.getJSONArray("events");
if (null != list && list.size() > 0 ) {
List<ParkNotifyParam> retList = new ArrayList<ParkNotifyParam>();
for (int i = 0 ; i < list.size() ; i ++) {
Map<String,Object> map = (Map<String, Object>) list.get(i);
ParkNotifyParam ret = parseInNoticyParamSingle(map);
if (null != ret ) {
retList.add(ret);
}
}
return retList;
}
return retList;
}
return null;
}
@@ -92,22 +130,66 @@ public class HaiKangWeiShiParkCallbackService extends BaseParkService implements
return p;
}

/**
* {
"method":"OnEventNotify",
"params":{
"ability":"vehicle_pass_out_event",
"eventType":771760134,
"events":[
{
"crossTime":"2021-07-01T17:31:17+08:00",
"crossType":1,
"eventIndexCode":"a5464f46-ba7b-4059-b657-5ebc2f3774a9",
"eventType":4,
"resource":{
"deviceId":"370573791833424",
"deviceSerial":"9b1037b5-8a95-4657-81f0-edf27f71d92f",
"direction":1,
"entranceId":"2063867554789264",
"entranceName":"前门1",
"parkId":"2064637172217744",
"parkName":"车库",
"resType":"roadway",
"roadWayId":"2064664422217616",
"roadWayName":"前门出口test"
},
"stopType":11,
"vehicle":{
"plateColor":12,
"plateNo":"苏A23658",
"plateType":8,
"vehicleColor":12,
"vehicleType":12
}
}
],
"sendTime":"2021-07-01T17:31:17.337+08:00"
}
}
*/
@Override
public List<ParkNotifyParam> parseOutNoticyParam(Object param) {
Map<String,Object> paramm = (Map<String, Object>) param;
String liststr = (String) paramm.get("dataItems");
JSONArray list = JSONArray.parseArray(liststr);
if (null != list && list.size() > 0 ) {
List<ParkNotifyParam> retList = new ArrayList<ParkNotifyParam>();
for (int i = 0 ; i < list.size() ; i ++) {
Map<String,Object> map = (Map<String, Object>) list.get(i);
ParkNotifyParam ret = parseOutNoticyParamSingle(map);
if (null != ret ) {
retList.add(ret);
String paramsstr = (String) paramm.get("params");
JSONObject paramobject = JSONArray.parseObject(paramsstr);
if (null != paramobject) {
JSONArray list = paramobject.getJSONArray("events");
if (null != list && list.size() > 0 ) {
List<ParkNotifyParam> retList = new ArrayList<ParkNotifyParam>();
for (int i = 0 ; i < list.size() ; i ++) {
Map<String,Object> map = (Map<String, Object>) list.get(i);
ParkNotifyParam ret = parseOutNoticyParamSingle(map);
if (null != ret ) {
retList.add(ret);
}
}
return retList;
}
return retList;
}
return null;
}


+ 3
- 19
mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java View File

@@ -129,20 +129,8 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda
return new ResultData(21000,"车辆未入场");
}
JSONObject attribute = haikang.getFee(park, carNumber, getCacheToken(park));
String retCode = haikang.getFee(park, carNumber, getCacheToken(park));
if (StringUtils.isBlank(retCode)) {
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getFee error. has no result");
}
JSONObject result = JSON.parseObject(retCode);
if (result.getInteger("code") != 0 ) {
String message = result.getString("msg");
throw new MallinkException(result.getInteger("code"), "haikang getFee error."+message);
}
JSONObject attribute = result.getJSONObject("data");
if (null == attribute) {
throw new MallinkException(result.getInteger("code"), "haikang getFee error. no order result"+carNumber);
}
String appId = "";
String parkOrderId = attribute.getString("id");
String _createTime = attribute.getString("entranceTime");//计费时间,格式为“yyyy-MM-dd HH:mi:ss”
@@ -175,15 +163,11 @@ public class HaiKangWeiShiParkService extends BaseParkService implements ParkAda
if (StringUtils.isBlank(planNo)) {
return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置[planNo]。"+coupon.getTitle());
}
//String ret = jieshun.getCoupon(park, planNo,userCar.getCUserPhone(), getCacheToken(park));
//打折登陆验证
String ret = haikang.useCoupon(park,planNo,carNumber,orderNo, getCacheToken(park));
logger.info("haikangweishi useCoupon result:"+ret);
JSONObject retObj = JSON.parseObject(ret);
JSONObject retObj = haikang.useCoupon(park,planNo,carNumber,orderNo, getCacheToken(park));
if (retObj.getIntValue("code") == 0){
return new ResultData();
}else {
logger.error("haikangweishi useCoupon error. paramMap: {} . haikangResult: {}",JSON.toJSONString(paramMap),ret);
logger.error("haikangweishi useCoupon error. paramMap: {} . haikangResult: {}",JSON.toJSONString(paramMap),retObj);
String msg = retObj.getString("msg");
return new ResultData(retObj.getIntValue("code"), "当前用户领用到海康威视停车券失败:"+msg);
}


+ 81
- 9
mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java View File

@@ -1,7 +1,9 @@
package com.iformall.service.park.impl.haikangweishi;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.iformall.common.ErrorCode;
import com.iformall.domain.po.WxPark;
import com.iformall.exception.MallinkException;
import lombok.extern.slf4j.Slf4j;
@@ -39,7 +41,8 @@ import java.util.Map;
public class HaiKangWeiShiUtil {

public static final String TOKEN_URL = "https://open.hikyun.com/artemis/oauth/token";
public static final String GET_FEE = "https://open.hikyun.com/api/pmsc/v1/pay/quickGetVehicleBill";
public static final String CAR_STOP_INFO = "https://open.hikyun.com/api/pmsc/v1/tempCarInRecords/page";
public static final String GET_FEE = "https://open.hikyun.com/api/pmsc/v1/pay/getVehicleBill";
public static final String COUPON_USE = "https://open.hikyun.com/api/pmsc/v1/coupon/addition";

@@ -88,32 +91,101 @@ public class HaiKangWeiShiUtil {
}
/**
* 查询停车费 3.5.5 快速获取账单接口
* 3.5.7 查询临时车停车信息
*/
private JSONObject getCarStopInfo(WxPark wxPark,String carNumber,String token) {
String vendroParams = wxPark.getVendorParams();
JSONObject vp = JSON.parseObject(vendroParams);
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("pageNo", "1"));
list.add(new BasicNameValuePair("pageSize", "1"));
list.add(new BasicNameValuePair("parkId", wxPark.getParkId()));
list.add(new BasicNameValuePair("plateNo", carNumber));//
String carStopInfo = ProcBussiness(CAR_STOP_INFO, list, token);
if (StringUtils.isBlank(carStopInfo)) {
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getCarStopInfo error. has no result");
}
JSONObject carStopInfoResult = JSON.parseObject(carStopInfo);
if (carStopInfoResult.getInteger("code") != 0 ) {
String message = carStopInfoResult.getString("msg");
throw new MallinkException(carStopInfoResult.getInteger("code"), "haikang getCarStopInfo error."+message);
}
JSONObject carStopInfoAttribute = carStopInfoResult.getJSONObject("data");
if (null == carStopInfoAttribute) {
throw new MallinkException(carStopInfoResult.getInteger("code"), "haikang getCarStopInfo error. no result"+carNumber);
}
JSONArray carStopInfoList = carStopInfoResult.getJSONArray("list");
if (null == carStopInfoList || carStopInfoList.size() <= 0 ) {
throw new MallinkException(carStopInfoResult.getInteger("code"), "haikang getCarStopInfo error. no result"+carNumber);
}
return carStopInfoList.getJSONObject(0);
}
/**
* 查询停车费 3.5.3 获取账单接口
* @return
*/
public String getFee(WxPark wxPark,String cardNumber,String token) {
public JSONObject getFee(WxPark wxPark,String carNumber,String token) {
JSONObject carStopInfo = getCarStopInfo(wxPark,carNumber,token);
String vendroParams = wxPark.getVendorParams();
JSONObject vp = JSON.parseObject(vendroParams);
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("chargeSource", "THIRD"));//商户编号
list.add(new BasicNameValuePair("parkId", wxPark.getParkId()));//优惠券编号
list.add(new BasicNameValuePair("plateNo", cardNumber));//优惠券编号
return ProcBussiness(GET_FEE, list, token);
Map vehicle = new HashMap();
vehicle.put("parkId", wxPark.getParkId());
vehicle.put("plateNo", carNumber);
vehicle.put("vehicleType", 1);
vehicle.put("plateType", 1);
vehicle.put("groupId", 1);
vehicle.put("freeTime", new Object[] {});
list.add(new BasicNameValuePair("vehicle", "["+JSON.toJSONString(vehicle)+"]") );//商户编号
String retCode= ProcBussiness(GET_FEE, list, token);
if (StringUtils.isBlank(retCode)) {
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getFee error. has no result");
}
JSONObject result = JSON.parseObject(retCode);
if (result.getInteger("code") != 0 ) {
String message = result.getString("msg");
throw new MallinkException(result.getInteger("code"), "haikang getFee error."+message);
}
JSONObject attribute = result.getJSONObject("data");
if (null == attribute) {
throw new MallinkException(result.getInteger("code"), "haikang getFee error. no result"+carNumber);
}
return attribute;
}
/**
* 2、有优惠券方式
发优惠券的时候是会返回一个优惠券id(3.5.9.1),
在用户出场的时候,获取停车账单(3.5.3),
使用停车账单和优惠券id获取优惠账单(3.5.4),
调用账单支付确认接口(3.5.6);
完成一次优惠缴费
* 使用优惠券 3.5.9.1接口进行车牌和优惠信息绑定优惠券后,车辆出场时会自动抵扣
**/
public String useCoupon(WxPark wxPark,String couponNo,String carNumber,String orderNo,String token){
public JSONObject useCoupon(WxPark wxPark,String couponNo,String carNumber,String orderNo,String token){
String vendroParams = wxPark.getVendorParams();
JSONObject vp = JSON.parseObject(vendroParams);
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
Map couponmap = new HashMap();
couponmap.put("plateNo", carNumber);
couponmap.put("ruleId", couponNo);
couponmap.put("parkId", wxPark.getParkId());
list.add(new BasicNameValuePair("coupons", "["+JSON.toJSONString(couponmap)+"]") );//商户编号
return ProcBussiness(COUPON_USE, list,token);
String retCode = ProcBussiness(COUPON_USE, list,token);
if (StringUtils.isBlank(retCode)) {
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang useCoupon error. has no result");
}
JSONObject result = JSON.parseObject(retCode);
if (result.getInteger("code") != 0 ) {
String message = result.getString("msg");
throw new MallinkException(result.getInteger("code"), "haikang useCoupon error."+message);
}
return result;
}
/*token认证登陆**/


Loading…
Cancel
Save