From 1a0e91ba998552299f7c1f4c56be1f290be376a1 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Tue, 24 Nov 2020 18:25:30 +0800 Subject: [PATCH 1/2] fix bug --- .../car/WxParkCallBackBaseController.java | 74 +++++++++++++++++-- .../WxCarJieShunCallBackController.java | 23 +++++- .../com/iformall/enums/EnumCarVendor.java | 25 ++++--- .../park/ParkBatchCallBackAdapterService.java | 38 ++++++++++ .../iformall/service/park/ParkFactory.java | 25 ++++++- .../service/park/entity/ParkNotifyParam.java | 2 + .../jieshun/JieShunParkCallbackService.java | 12 +-- 7 files changed, 172 insertions(+), 27 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/service/park/ParkBatchCallBackAdapterService.java diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/WxParkCallBackBaseController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/WxParkCallBackBaseController.java index 6a74d18dc..592f9c4e8 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/WxParkCallBackBaseController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/WxParkCallBackBaseController.java @@ -163,9 +163,24 @@ public class WxParkCallBackBaseController extends BaseController { } } - protected Result parkInCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { - ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parseInNoticyParam(sourceParam); + if (vendor.isNotifyBatch()) { + List params = parkFactory.getParkBatchCallbackService(vendor.getCode()).parseInNoticyParam(sourceParam); + if (null != params && params.size() > 0 ) { + for (ParkNotifyParam param : params) { + handleSingleParkInCallBack(vendor, cmdType, param, param.getSourceParam()); + } + return new Result(); + } + return new Result(); + }else { + ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parseInNoticyParam(sourceParam); + return handleSingleParkInCallBack(vendor, cmdType, param, sourceParam); + } + } + + private Result handleSingleParkInCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,ParkNotifyParam param ,Object sourceParam) { + String carNumber = param.getCarNumber(); ParkCacheUtils.removeCache(redisTemplate, vendor.getMessage(), carNumber); @@ -210,14 +225,30 @@ public class WxParkCallBackBaseController extends BaseController { try { saveWxCarPayRecord(sourceParam, param, wxCarCmdLog, phoneStrs); }catch(MallinkException e) { + logger.error("save carpayrecord error.",e); return new Result(Result.ERROR,e.getMessage()); } return new Result(); } protected Result parkOutCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { - ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parseOutNoticyParam(sourceParam); + if (vendor.isNotifyBatch()) { + List params = parkFactory.getParkBatchCallbackService(vendor.getCode()).parseOutNoticyParam(sourceParam); + if (null != params && params.size() > 0 ) { + for (ParkNotifyParam param : params) { + handleParkOutCallBackSingle(vendor, cmdType, param, param.getSourceParam()); + } + } + return new Result(); + }else { + ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parseOutNoticyParam(sourceParam); + return handleParkOutCallBackSingle(vendor, cmdType, param, sourceParam); + } + + } + + private Result handleParkOutCallBackSingle(EnumCarVendor vendor,EnumCarCmd cmdType,ParkNotifyParam param,Object sourceParam) { ParkCacheUtils.removeCache(redisTemplate, vendor.getMessage(), param.getCarNumber()); WxCarCmdLog wxCarCmdLog = null; @@ -236,7 +267,24 @@ public class WxParkCallBackBaseController extends BaseController { } protected Result unbindCarCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { - ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parseUnbindNoticyParam(sourceParam); + if (vendor.isNotifyBatch()) { + List params = parkFactory.getParkBatchCallbackService(vendor.getCode()).parseUnbindNoticyParam(sourceParam); + if (null != params && params.size() > 0 ) { + for (ParkNotifyParam param : params) { + handleUnbindCarCallBackSingle(vendor, cmdType, param, param.getSourceParam()); + } + } + return new Result(); + + }else { + ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parseUnbindNoticyParam(sourceParam); + return handleUnbindCarCallBackSingle(vendor, cmdType, param, sourceParam); + + } + + } + + private Result handleUnbindCarCallBackSingle(EnumCarVendor vendor,EnumCarCmd cmdType,ParkNotifyParam param,Object sourceParam) { WxCarCmdLog wxCarCmdLog = null; try { wxCarCmdLog = saveWxCarCmdLog(vendor, cmdType, sourceParam, param); @@ -260,8 +308,22 @@ public class WxParkCallBackBaseController extends BaseController { } protected Result paidCallback(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { - ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parsePaidNoticyParam(sourceParam); - + if (vendor.isNotifyBatch()) { + List params = parkFactory.getParkBatchCallbackService(vendor.getCode()).parsePaidNoticyParam(sourceParam); + if (null != params && params.size() > 0 ) { + for (ParkNotifyParam param : params) { + handlePaidCallbackSingle(vendor, cmdType, param, param.getSourceParam()); + } + } + return new Result(); + }else { + ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parsePaidNoticyParam(sourceParam); + return handlePaidCallbackSingle(vendor, cmdType, param, sourceParam); + } + } + + + private Result handlePaidCallbackSingle(EnumCarVendor vendor,EnumCarCmd cmdType,ParkNotifyParam param,Object sourceParam) { WxCarCmdLog carCmdLogQ = new WxCarCmdLog(); String parkId = param.getParkId(); WxPark parkQ = new WxPark(); diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/jieshun/WxCarJieShunCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/jieshun/WxCarJieShunCallBackController.java index 163371ed9..386267e9d 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/car/jieshun/WxCarJieShunCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/car/jieshun/WxCarJieShunCallBackController.java @@ -63,7 +63,24 @@ public class WxCarJieShunCallBackController extends WxParkCallBackBaseController WxCUserBasicInfoService wxCUserBasicInfoService; /** - * @description 车易付 车辆入场通知 + * @description 捷顺 车辆入场通知 + * “dataItems”: “[{ + \ “itemId\”: \”435FA12F3C4747B0BA48E945868FC420\”, + \ “parkName” : \”测试\”, + \ “parkCode\” : \” test\”, + \ “inTime\” : \”2017-08-28 15:40:41\”, + \ “inOperator\”: \”张山\” + \ “carNumber” : \”粤-A12345\”, + \ “idno” : \”1234455\”, + \ “equipCode\”: \”2312313\”, + \ “equipName” : \”入口\”, + … + }, + …… + ] + * + * + * * @Params [paramMap] * @return com.iformall.common.Result * @Author furunxin @@ -96,13 +113,13 @@ public class WxCarJieShunCallBackController extends WxParkCallBackBaseController public Result cyfUnbindCallback(@RequestBody Map paramMap) { log.info("["+getIpAddr()+"] cyfParkInCallback: " + paramMap.toString()); //解析车易付参数 - return super.unbindCarCallBack(EnumCarVendor.CAE_CYF, EnumCarCmd.CAR_CYF_CALLBACK_UNBIND, paramMap); + return super.unbindCarCallBack(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_UNBIND, paramMap); } @PostMapping(value = "/cyfPaidCallback") public Result cyfPaidCallback(@RequestBody Map paramMap) { log.info("["+getIpAddr()+"] cyfParkInCallback: " + paramMap.toString()); //解析车易付参数 - return super.paidCallback(EnumCarVendor.CAE_CYF, EnumCarCmd.CAR_CYF_CALLBACK_PAID, paramMap); + return super.paidCallback(EnumCarVendor.CAR_JIESHUN, EnumCarCmd.CAR_JIESHUN_CALLBACK_PAID, paramMap); } } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java index 5c7696402..9070d9578 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarVendor.java @@ -6,14 +6,14 @@ package com.iformall.enums; public enum EnumCarVendor { // 1-ETCP, 2-TJD停简单 3-Dahua大华, 4-ShangAn尚安, 5-BoLink泊链,6-车易付 - CAR_NOTFOUND(0, "无"), - CAR_ETCP(1, "ETCP"), - CAR_TJD(2, "TJD"), - CAR_DAHUA(3, "DAHUA"), - CAR_SHANGAN(4, "ShangAn"), - CAR_BOLINK(5, "BoLink"), - CAE_CYF(6,"CYF"), - CAR_JIESHUN(7,"JIESHUN") + CAR_NOTFOUND(0, "无",false), + CAR_ETCP(1, "ETCP",false), + CAR_TJD(2, "TJD",false), + CAR_DAHUA(3, "DAHUA",false), + CAR_SHANGAN(4, "ShangAn",false), + CAR_BOLINK(5, "BoLink",false), + CAE_CYF(6,"CYF",false), + CAR_JIESHUN(7,"JIESHUN",true) ; public static EnumCarVendor getEnum(Integer code) { @@ -27,10 +27,12 @@ public enum EnumCarVendor { private Integer code; private String message; + private boolean notifyBatch;//通知是否是批量模式 - EnumCarVendor(Integer code, String message) { + EnumCarVendor(Integer code, String message,boolean notifyBatch) { this.code = code; this.message = message; + this.notifyBatch = notifyBatch; } public Integer getCode() { @@ -40,4 +42,9 @@ public enum EnumCarVendor { public String getMessage() { return message; } + + public boolean isNotifyBatch() { + return notifyBatch; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkBatchCallBackAdapterService.java b/mallinkService/src/main/java/com/iformall/service/park/ParkBatchCallBackAdapterService.java new file mode 100644 index 000000000..1624c3a50 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkBatchCallBackAdapterService.java @@ -0,0 +1,38 @@ +package com.iformall.service.park; + +import java.util.List; +import java.util.Map; + +import com.iformall.service.park.entity.ParkNotifyParam; + +/** + * 停车场回调 -- 批量传回 + * @author alascor + * + */ +public interface ParkBatchCallBackAdapterService { + + /** + * 解析车辆入场通知参数 + * @param param + */ + List parseInNoticyParam(Object param); + + /** + * 解析车辆出场通知参数 + * @param param + */ + List parseOutNoticyParam(Object param); + + /** + * 解析车辆解绑通知参数 + * @param param + */ + List parseUnbindNoticyParam(Object param); + + /** + * 解析支付结果通知参数 + * @param param + */ + List parsePaidNoticyParam(Object param); +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java b/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java index cc2861df1..fd8d1392d 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java @@ -41,7 +41,8 @@ public class ParkFactory { private Map parkServiceMap ; private Map enumMap ; - private Map callBackServiceMap; + private Map callBackServiceMap;//推送单条 + private Map batchCallBackServiceMap;//推送多条 private Map getServiceMap() { if (null != parkServiceMap ) { @@ -76,12 +77,19 @@ public class ParkFactory { } callBackServiceMap = new ConcurrentHashMap(); callBackServiceMap.put(EnumCarVendor.CAE_CYF.getCode(), cyfCallbackService); - callBackServiceMap.put(EnumCarVendor.CAR_JIESHUN.getCode(), jieshunCallBackService); - - return callBackServiceMap; } + private Map getBatchCallBackServiceMap() { + if (null != batchCallBackServiceMap) { + return batchCallBackServiceMap; + } + batchCallBackServiceMap = new ConcurrentHashMap(); + batchCallBackServiceMap.put(EnumCarVendor.CAR_JIESHUN.getCode(), jieshunCallBackService); + return batchCallBackServiceMap; + } + + public ParkAdapterService getParkService(Integer code) { EnumCarVendor vendor = getEnumMap().get(code); if (null == vendor) { @@ -97,5 +105,14 @@ public class ParkFactory { } return getCallBackServiceMap().get(vendor.getCode()); } + + public ParkBatchCallBackAdapterService getParkBatchCallbackService(Integer code) { + EnumCarVendor vendor = getEnumMap().get(code); + if (null == vendor) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "车厂["+code+"]不支持."); + } + return getBatchCallBackServiceMap().get(vendor.getCode()); + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java index 31ee12f8e..f56ac6c09 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java @@ -30,4 +30,6 @@ public class ParkNotifyParam implements Serializable{ String paidServiceFee;//支付服务费 + Object sourceParam; + } diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java index 51f818a93..d298f6c6b 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java @@ -2,6 +2,7 @@ package com.iformall.service.park.impl.jieshun; import java.text.ParseException; import java.util.Date; +import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -19,6 +20,7 @@ import com.iformall.enums.EnumCarVendor; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCarJSOrderMapper; import com.iformall.service.WxParkService; +import com.iformall.service.park.ParkBatchCallBackAdapterService; import com.iformall.service.park.ParkCallBackAdapterService; import com.iformall.service.park.entity.ParkNotifyParam; import com.iformall.service.park.impl.BaseParkService; @@ -27,7 +29,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Service -public class JieShunParkCallbackService extends BaseParkService implements ParkCallBackAdapterService { +public class JieShunParkCallbackService extends BaseParkService implements ParkBatchCallBackAdapterService { @Autowired @@ -70,7 +72,7 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkC } */ @Override - public ParkNotifyParam parseInNoticyParam(Object param) { + public List parseInNoticyParam(Object param) { Map paramMap = (Map) param; String carNumber = paramMap.get("carNumber").toString(); String parkCode = paramMap.get("parkCode").toString(); @@ -120,7 +122,7 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkC } @Override - public ParkNotifyParam parseOutNoticyParam(Object param) { + public List parseOutNoticyParam(Object param) { Map paramMap = (Map) param; String carNumber = paramMap.get("carNumber").toString(); String parkCode = paramMap.get("parkCode").toString(); @@ -155,12 +157,12 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkC } @Override - public ParkNotifyParam parseUnbindNoticyParam(Object param) { + public List parseUnbindNoticyParam(Object param) { return null; } @Override - public ParkNotifyParam parsePaidNoticyParam(Object param) { + public List parsePaidNoticyParam(Object param) { Map vo = (Map) param; ParkNotifyParam p = new ParkNotifyParam(); p.setCarNumber((String) vo.get("carNumber")); From 08476ebe45f27f21186f275b6c5bcc0d73f4fe72 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Wed, 25 Nov 2020 10:05:34 +0800 Subject: [PATCH 2/2] fix bug --- .../jieshun/JieShunParkCallbackService.java | 56 ++++++++++++++++++- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java index d298f6c6b..3378d39ac 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java @@ -1,6 +1,7 @@ package com.iformall.service.park.impl.jieshun; import java.text.ParseException; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -73,7 +74,23 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkB */ @Override public List parseInNoticyParam(Object param) { - Map paramMap = (Map) param; + Map paramm = (Map) param; + List list = (List) paramm.get("dataItems"); + 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 = parseInNoticyParamSingle(map); + if (null != ret ) { + retList.add(ret); + } + } + return retList; + } + return null; + } + + private ParkNotifyParam parseInNoticyParamSingle(Map paramMap) { String carNumber = paramMap.get("carNumber").toString(); String parkCode = paramMap.get("parkCode").toString(); String parkName = paramMap.get("parkName").toString(); @@ -123,7 +140,24 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkB @Override public List parseOutNoticyParam(Object param) { - Map paramMap = (Map) param; + Map paramm = (Map) param; + List list = (List) paramm.get("dataItems"); + 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 = parseOutNoticyParamSingle(map); + if (null != ret ) { + retList.add(ret); + } + } + 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(); @@ -163,7 +197,23 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkB @Override public List parsePaidNoticyParam(Object param) { - Map vo = (Map) param; + Map paramm = (Map) param; + List list = (List) paramm.get("dataItems"); + 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")));