| @@ -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<ParkNotifyParam> 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<ParkNotifyParam> 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<ParkNotifyParam> 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<ParkNotifyParam> 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(); | |||
| @@ -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<String, Object> 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<String, Object> 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); | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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<ParkNotifyParam> parseInNoticyParam(Object param); | |||
| /** | |||
| * 解析车辆出场通知参数 | |||
| * @param param | |||
| */ | |||
| List<ParkNotifyParam> parseOutNoticyParam(Object param); | |||
| /** | |||
| * 解析车辆解绑通知参数 | |||
| * @param param | |||
| */ | |||
| List<ParkNotifyParam> parseUnbindNoticyParam(Object param); | |||
| /** | |||
| * 解析支付结果通知参数 | |||
| * @param param | |||
| */ | |||
| List<ParkNotifyParam> parsePaidNoticyParam(Object param); | |||
| } | |||
| @@ -41,7 +41,8 @@ public class ParkFactory { | |||
| private Map<Integer,ParkAdapterService> parkServiceMap ; | |||
| private Map<Integer,EnumCarVendor> enumMap ; | |||
| private Map<Integer,ParkCallBackAdapterService> callBackServiceMap; | |||
| private Map<Integer,ParkCallBackAdapterService> callBackServiceMap;//推送单条 | |||
| private Map<Integer,ParkBatchCallBackAdapterService> batchCallBackServiceMap;//推送多条 | |||
| private Map<Integer,ParkAdapterService> getServiceMap() { | |||
| if (null != parkServiceMap ) { | |||
| @@ -76,12 +77,19 @@ public class ParkFactory { | |||
| } | |||
| callBackServiceMap = new ConcurrentHashMap<Integer, ParkCallBackAdapterService>(); | |||
| callBackServiceMap.put(EnumCarVendor.CAE_CYF.getCode(), cyfCallbackService); | |||
| callBackServiceMap.put(EnumCarVendor.CAR_JIESHUN.getCode(), jieshunCallBackService); | |||
| return callBackServiceMap; | |||
| } | |||
| private Map<Integer,ParkBatchCallBackAdapterService> getBatchCallBackServiceMap() { | |||
| if (null != batchCallBackServiceMap) { | |||
| return batchCallBackServiceMap; | |||
| } | |||
| batchCallBackServiceMap = new ConcurrentHashMap<Integer, ParkBatchCallBackAdapterService>(); | |||
| 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()); | |||
| } | |||
| } | |||
| @@ -30,4 +30,6 @@ public class ParkNotifyParam implements Serializable{ | |||
| String paidServiceFee;//支付服务费 | |||
| Object sourceParam; | |||
| } | |||
| @@ -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<ParkNotifyParam> parseInNoticyParam(Object param) { | |||
| Map<String, Object> paramMap = (Map<String, Object>) 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<ParkNotifyParam> parseOutNoticyParam(Object param) { | |||
| Map<String, Object> paramMap = (Map<String, Object>) 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<ParkNotifyParam> parseUnbindNoticyParam(Object param) { | |||
| return null; | |||
| } | |||
| @Override | |||
| public ParkNotifyParam parsePaidNoticyParam(Object param) { | |||
| public List<ParkNotifyParam> parsePaidNoticyParam(Object param) { | |||
| Map vo = (Map) param; | |||
| ParkNotifyParam p = new ParkNotifyParam(); | |||
| p.setCarNumber((String) vo.get("carNumber")); | |||