From 391cd0748069820ebeabe86887a220a73d188cd0 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Wed, 1 Dec 2021 16:42:49 +0800 Subject: [PATCH] fix haikangweishi car --- .../java/com/iformall/config/ShiroConfig.java | 1 + .../WxCarHaiKangWeiShiCallBackController.java | 222 ++++++++++++++++++ .../java/com/iformall/enums/EnumCarCmd.java | 6 +- .../com/iformall/enums/EnumCarVendor.java | 2 +- .../HaiKangWeiShiParkCallbackService.java | 78 ++---- .../impl/haikangweishi/HaiKangWeiShiUtil.java | 30 ++- 6 files changed, 281 insertions(+), 58 deletions(-) create mode 100644 mallinkCallback/src/main/java/com/iformall/controller/callback/car/haikangweishi/WxCarHaiKangWeiShiCallBackController.java diff --git a/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java b/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java index f890176ad..6972f71ee 100644 --- a/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java +++ b/mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java @@ -118,6 +118,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/carCallback/**", "anon"); filterChainDefinitionMap.put("/jieshunCarCallback/**", "anon"); filterChainDefinitionMap.put("/cyfCarCallback/**", "anon"); + filterChainDefinitionMap.put("/hkwsCarCallback/**", "anon"); // static files filterChainDefinitionMap.put("/css/**", "anon"); diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/haikangweishi/WxCarHaiKangWeiShiCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/haikangweishi/WxCarHaiKangWeiShiCallBackController.java new file mode 100644 index 000000000..93652bd62 --- /dev/null +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/haikangweishi/WxCarHaiKangWeiShiCallBackController.java @@ -0,0 +1,222 @@ +package com.iformall.controller.callback.car.haikangweishi; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.controller.base.BaseController; +import com.iformall.controller.callback.car.WxParkCallBackBaseController; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxCarCYFVo; +import com.iformall.enums.EnumCarCmd; +import com.iformall.enums.EnumCarVendor; +import com.iformall.enums.EnumCouponSendSendType; +import com.iformall.enums.EnumPayWay; +import com.iformall.service.*; +import com.iformall.service.park.impl.cyf.CYFUtil; +import com.iformall.service.park.impl.tjd.TJDUtil; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author: furunxin + * @Date: 2020/7/6 15:29 + * @Description: 海康威视回调接口 + */ + +@Slf4j +@RestController +@RequestMapping("/hkwsCarCallback") +public class WxCarHaiKangWeiShiCallBackController extends WxParkCallBackBaseController { + + @Autowired + WxParkService wxParkService; + + @Autowired + WxCarCmdLogService wxCarCmdLogService; + + @Autowired + WxCUserService wxCUserService; + + @Autowired + WxCUserCarService wxCUserCarService; + + @Autowired + WxCouponSendService wxCouponSendService; + + @Autowired + WxCarPayRecordService wxCarPayRecordService; + + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + + /** + * 入场事件: + +{ + "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" + } +} + +3 出场事件: + +{ + "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" + } +} + +4 图片事件: +{ + "method":"OnEventNotify", + "params":{ + "ability":"vehicle_pass_out_event", + "eventType":771760144, + "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", + "plateNoPicUrl":"62834762", + "plateType":8, + "vehicleColor":12, + "vehiclePicUrl":"62834762", + "vehicleType":12 + } + } + ], + "sendTime":"2021-07-01T17:31:19.659+08:00" + } +} + * @param paramMap + * @return + * + * 这个接口需要你们实现的时候规定下: +1、POST格式, +2、接口返回参数JSON格式:{errcode:0, errmsg: "success",data:null} +3、接口建议接收到过车事件,立即返回接收成功 + * + */ + @PostMapping(value = "/notify") + public Map notify(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] hkwsCarCallback notify: " + paramMap.toString()); + + Map params = (Map)paramMap.get("params"); + String eventType = params.get("eventType").toString(); + Result result = null; + if ("771760131".equals(eventType)) { + //解析车易付参数 + result = super.parkInCallBack(EnumCarVendor.CAR_HAIKANGWEISHI, EnumCarCmd.CAR_HAIKANGWEISHI_CALLBACK_PARK_IN, paramMap); + }else if ("771760134".equals(eventType)) { + result = super.parkOutCallBack(EnumCarVendor.CAR_HAIKANGWEISHI, EnumCarCmd.CAR_HAIKANGWEISHI_CALLBACK_PARK_OUT, paramMap); + } + Map retMap = new HashMap(); + int errcode = 0; + String msg = "success"; + if (null != result) { + if (result.code != Result.SUCCESS) { + errcode = result.code; + msg = result.message; + } + }else { + errcode = Result.ERROR; + msg = "no result.eventType["+eventType+"]"; + } + retMap.put("errcode", errcode); + retMap.put("errmsg", msg); + retMap.put("data", null); + return retMap; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java index 28603eadf..2757a5057 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java @@ -23,7 +23,11 @@ public enum EnumCarCmd { CAR_JIESHUN_CALLBACK_PARK_IN(624,"捷顺进场通知"), CAR_JIESHUN_CALLBACK_PARK_OUT(625,"捷顺进场通知"), CAR_JIESHUN_CALLBACK_UNBIND(626,"捷顺解绑车牌通知"), - CAR_JIESHUN_CALLBACK_PAID(627,"捷顺支付通知") + CAR_JIESHUN_CALLBACK_PAID(627,"捷顺支付通知"), + CAR_HAIKANGWEISHI_CALLBACK_PARK_IN(628,"捷顺进场通知"), + CAR_HAIKANGWEISHI_CALLBACK_PARK_OUT(629,"捷顺进场通知"), + CAR_HAIKANGWEISHI_CALLBACK_UNBIND(630,"捷顺解绑车牌通知"), + CAR_HAIKANGWEISHI_CALLBACK_PAID(631,"捷顺支付通知") ; public static EnumCarCmd getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java index 8f5e2dc49..564874062 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java @@ -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",false) + CAR_HAIKANGWEISHI(8,"HAIKANGWEISHI",true) ; public static EnumCarVendor getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkCallbackService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkCallbackService.java index 4fc54206e..731f13a76 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkCallbackService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkCallbackService.java @@ -88,10 +88,9 @@ public class HaiKangWeiShiParkCallbackService extends BaseParkService implements @Override public List parseInNoticyParam(Object param) { Map paramm = (Map) param; - String paramsstr = (String) paramm.get("params"); - JSONObject paramobject = JSONArray.parseObject(paramsstr); - if (null != paramobject) { - JSONArray list = paramobject.getJSONArray("events"); + Map params = (Map) paramm.get("params"); + if (null != params) { + List list = (List)params.get("events"); if (null != list && list.size() > 0 ) { List retList = new ArrayList(); for (int i = 0 ; i < list.size() ; i ++) { @@ -108,16 +107,18 @@ public class HaiKangWeiShiParkCallbackService extends BaseParkService implements } private ParkNotifyParam parseInNoticyParamSingle(Map paramMap) { - String carNumber = paramMap.get("carNumber").toString(); - String parkCode = paramMap.get("parkCode").toString(); - String parkName = paramMap.get("parkName").toString(); + Map vehicle = (Map)paramMap.get("vehicle"); + Map resource = (Map)paramMap.get("resource"); + + String carNumber = vehicle.get("plateNo").toString(); + String parkCode = resource.get("parkId").toString(); + String parkName = resource.get("parkName").toString(); - String synId = paramMap.get("itemId").toString(); - String entranceTime = paramMap.get("inTime").toString(); + String synId = paramMap.get("eventIndexCode").toString(); + String entranceTime = paramMap.get("crossTime").toString(); ParkNotifyParam p = new ParkNotifyParam(); - String realCarNumber = carNumber; - p.setCarNumber(realCarNumber); + p.setCarNumber(carNumber); p.setParkId(parkCode); p.setParkName(parkName); p.setSynId(synId); @@ -172,10 +173,9 @@ public class HaiKangWeiShiParkCallbackService extends BaseParkService implements @Override public List parseOutNoticyParam(Object param) { Map paramm = (Map) param; - String paramsstr = (String) paramm.get("params"); - JSONObject paramobject = JSONArray.parseObject(paramsstr); - if (null != paramobject) { - JSONArray list = paramobject.getJSONArray("events"); + Map params = (Map) paramm.get("params"); + if (null != params) { + List list = (List)params.get("events"); if (null != list && list.size() > 0 ) { List retList = new ArrayList(); for (int i = 0 ; i < list.size() ; i ++) { @@ -188,23 +188,23 @@ public class HaiKangWeiShiParkCallbackService extends BaseParkService implements return retList; } } - - return null; } private ParkNotifyParam parseOutNoticyParamSingle(Map paramMap) { - String carNumber = paramMap.get("carNumber").toString(); - String parkCode = paramMap.get("parkCode").toString(); - String parkName = paramMap.get("parkName").toString(); + Map vehicle = (Map)paramMap.get("vehicle"); + Map resource = (Map)paramMap.get("resource"); + + String carNumber = vehicle.get("plateNo").toString(); + String parkCode = resource.get("parkId").toString(); + String parkName = resource.get("parkName").toString(); - String synId = paramMap.get("itemId").toString(); - String entranceTime = paramMap.get("outTime").toString(); + String synId = paramMap.get("eventIndexCode").toString(); + String entranceTime = paramMap.get("crossTime").toString(); - String realCarNumber = carNumber; ParkNotifyParam p = new ParkNotifyParam(); - p.setCarNumber(realCarNumber); + p.setCarNumber(carNumber); p.setParkId(parkCode); p.setParkName(parkName); p.setSynId(synId); @@ -220,7 +220,6 @@ public class HaiKangWeiShiParkCallbackService extends BaseParkService implements // log.error("cyf outTime format error",e); // return null; // } - p.setFee(String.valueOf(paramMap.get("ssMoney"))); return p; } @@ -231,35 +230,6 @@ public class HaiKangWeiShiParkCallbackService extends BaseParkService implements @Override public List parsePaidNoticyParam(Object param) { - Map paramm = (Map) param; - String liststr = (String) paramm.get("dataItems"); - JSONArray list = JSONArray.parseArray(liststr); - if (null != list && list.size() > 0 ) { - List retList = new ArrayList(); - for (int i = 0 ; i < list.size() ; i ++) { - Map map = (Map) list.get(i); - ParkNotifyParam ret = parsePaidNoticyParamSingle(map); - if (null != ret ) { - retList.add(ret); - } - } - return retList; - } return null; } - - private ParkNotifyParam parsePaidNoticyParamSingle(Map vo) { - ParkNotifyParam p = new ParkNotifyParam(); - p.setCarNumber((String) vo.get("carNumber")); - p.setParkId(String.valueOf(vo.get("parkCode"))); - p.setParkOrderId((String) vo.get("itemId")); - p.setSynId((String) vo.get("itemId")); - p.setFee(vo.get("ssMoney").toString()); -// try { -// p.setPayTime(jieshun.utcToLocal((String)vo.get("feesTime"))); -// } catch (ParseException e) { -// e.printStackTrace(); -// } - return p; - } } 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 d1d691440..d245a1c95 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 @@ -43,6 +43,7 @@ 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 COUPON_USE = "https://open.hikyun.com/api/pmsc/v1/coupon/addition"; + public static final String SUBSCRIPTION = "https://open.hikyun.com/api/pmsc/v1/sub/subscription"; /** @@ -98,7 +99,7 @@ public class HaiKangWeiShiUtil { JSONObject vp = JSON.parseObject(vendroParams); ArrayList list = new ArrayList(); list.add(new BasicNameValuePair("chargeSource", "THIRD"));//商户编号 - list.add(new BasicNameValuePair("parkId", wxPark.getParkId())); + list.add(new BasicNameValuePair("parkId", wxPark.getParkingId())); list.add(new BasicNameValuePair("plateNo", carNumber)); String retCode= ProcBussiness(GET_FEE, list, token); if (StringUtils.isBlank(retCode)) { @@ -145,6 +146,32 @@ public class HaiKangWeiShiUtil { return result; } + /** + * 消息订阅 3.1.8 + * @param clientId + * @param clientSecret + * @return + */ + public JSONObject subscription(WxPark wxPark,String couponNo,String carNumber,String orderNo,String token){ + String vendroParams = wxPark.getVendorParams(); + JSONObject vp = JSON.parseObject(vendroParams); + ArrayList list = new ArrayList(); + list.add(new BasicNameValuePair("partnerAppKey", vp.getString("AppKey")));//商户编号 + list.add(new BasicNameValuePair("projectId", vp.getString("projectId"))); + list.add(new BasicNameValuePair("eventTypes", carNumber)); + list.add(new BasicNameValuePair("subUrl", vp.getString("subUrl"))); + String retCode = ProcBussiness(SUBSCRIPTION, 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认证登陆**/ private static String ProcLogin(String clientId,String clientSecret) { ArrayList list = new ArrayList(); @@ -155,7 +182,6 @@ public class HaiKangWeiShiUtil { private static String ProcBussiness(String url,ArrayList list,String token) { try { - //TODO 11111111 String authorization = ""; return Proc(url,list,token,authorization); } catch (Exception e) {