| @@ -163,9 +163,24 @@ public class WxParkCallBackBaseController extends BaseController { | |||||
| } | } | ||||
| } | } | ||||
| protected Result parkInCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { | 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(); | String carNumber = param.getCarNumber(); | ||||
| ParkCacheUtils.removeCache(redisTemplate, vendor.getMessage(), carNumber); | ParkCacheUtils.removeCache(redisTemplate, vendor.getMessage(), carNumber); | ||||
| @@ -210,14 +225,30 @@ public class WxParkCallBackBaseController extends BaseController { | |||||
| try { | try { | ||||
| saveWxCarPayRecord(sourceParam, param, wxCarCmdLog, phoneStrs); | saveWxCarPayRecord(sourceParam, param, wxCarCmdLog, phoneStrs); | ||||
| }catch(MallinkException e) { | }catch(MallinkException e) { | ||||
| logger.error("save carpayrecord error.",e); | |||||
| return new Result(Result.ERROR,e.getMessage()); | return new Result(Result.ERROR,e.getMessage()); | ||||
| } | } | ||||
| return new Result(); | return new Result(); | ||||
| } | } | ||||
| protected Result parkOutCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { | 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()); | ParkCacheUtils.removeCache(redisTemplate, vendor.getMessage(), param.getCarNumber()); | ||||
| WxCarCmdLog wxCarCmdLog = null; | WxCarCmdLog wxCarCmdLog = null; | ||||
| @@ -236,7 +267,24 @@ public class WxParkCallBackBaseController extends BaseController { | |||||
| } | } | ||||
| protected Result unbindCarCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { | 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; | WxCarCmdLog wxCarCmdLog = null; | ||||
| try { | try { | ||||
| wxCarCmdLog = saveWxCarCmdLog(vendor, cmdType, sourceParam, param); | wxCarCmdLog = saveWxCarCmdLog(vendor, cmdType, sourceParam, param); | ||||
| @@ -260,8 +308,22 @@ public class WxParkCallBackBaseController extends BaseController { | |||||
| } | } | ||||
| protected Result paidCallback(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { | 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(); | WxCarCmdLog carCmdLogQ = new WxCarCmdLog(); | ||||
| String parkId = param.getParkId(); | String parkId = param.getParkId(); | ||||
| WxPark parkQ = new WxPark(); | WxPark parkQ = new WxPark(); | ||||
| @@ -63,7 +63,24 @@ public class WxCarJieShunCallBackController extends WxParkCallBackBaseController | |||||
| WxCUserBasicInfoService wxCUserBasicInfoService; | 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] | * @Params [paramMap] | ||||
| * @return com.iformall.common.Result | * @return com.iformall.common.Result | ||||
| * @Author furunxin | * @Author furunxin | ||||
| @@ -96,13 +113,13 @@ public class WxCarJieShunCallBackController extends WxParkCallBackBaseController | |||||
| public Result cyfUnbindCallback(@RequestBody Map<String, Object> paramMap) { | public Result cyfUnbindCallback(@RequestBody Map<String, Object> paramMap) { | ||||
| log.info("["+getIpAddr()+"] cyfParkInCallback: " + paramMap.toString()); | 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") | @PostMapping(value = "/cyfPaidCallback") | ||||
| public Result cyfPaidCallback(@RequestBody Map<String, Object> paramMap) { | public Result cyfPaidCallback(@RequestBody Map<String, Object> paramMap) { | ||||
| log.info("["+getIpAddr()+"] cyfParkInCallback: " + paramMap.toString()); | 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 { | public enum EnumCarVendor { | ||||
| // 1-ETCP, 2-TJD停简单 3-Dahua大华, 4-ShangAn尚安, 5-BoLink泊链,6-车易付 | // 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) { | public static EnumCarVendor getEnum(Integer code) { | ||||
| @@ -27,10 +27,12 @@ public enum EnumCarVendor { | |||||
| private Integer code; | private Integer code; | ||||
| private String message; | private String message; | ||||
| private boolean notifyBatch;//通知是否是批量模式 | |||||
| EnumCarVendor(Integer code, String message) { | |||||
| EnumCarVendor(Integer code, String message,boolean notifyBatch) { | |||||
| this.code = code; | this.code = code; | ||||
| this.message = message; | this.message = message; | ||||
| this.notifyBatch = notifyBatch; | |||||
| } | } | ||||
| public Integer getCode() { | public Integer getCode() { | ||||
| @@ -40,4 +42,9 @@ public enum EnumCarVendor { | |||||
| public String getMessage() { | public String getMessage() { | ||||
| return message; | 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,ParkAdapterService> parkServiceMap ; | ||||
| private Map<Integer,EnumCarVendor> enumMap ; | 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() { | private Map<Integer,ParkAdapterService> getServiceMap() { | ||||
| if (null != parkServiceMap ) { | if (null != parkServiceMap ) { | ||||
| @@ -76,12 +77,19 @@ public class ParkFactory { | |||||
| } | } | ||||
| callBackServiceMap = new ConcurrentHashMap<Integer, ParkCallBackAdapterService>(); | callBackServiceMap = new ConcurrentHashMap<Integer, ParkCallBackAdapterService>(); | ||||
| callBackServiceMap.put(EnumCarVendor.CAE_CYF.getCode(), cyfCallbackService); | callBackServiceMap.put(EnumCarVendor.CAE_CYF.getCode(), cyfCallbackService); | ||||
| callBackServiceMap.put(EnumCarVendor.CAR_JIESHUN.getCode(), jieshunCallBackService); | |||||
| return callBackServiceMap; | 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) { | public ParkAdapterService getParkService(Integer code) { | ||||
| EnumCarVendor vendor = getEnumMap().get(code); | EnumCarVendor vendor = getEnumMap().get(code); | ||||
| if (null == vendor) { | if (null == vendor) { | ||||
| @@ -97,5 +105,14 @@ public class ParkFactory { | |||||
| } | } | ||||
| return getCallBackServiceMap().get(vendor.getCode()); | 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;//支付服务费 | String paidServiceFee;//支付服务费 | ||||
| Object sourceParam; | |||||
| } | } | ||||
| @@ -1,7 +1,9 @@ | |||||
| package com.iformall.service.park.impl.jieshun; | package com.iformall.service.park.impl.jieshun; | ||||
| import java.text.ParseException; | import java.text.ParseException; | ||||
| import java.util.ArrayList; | |||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.List; | |||||
| import java.util.Map; | import java.util.Map; | ||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
| @@ -19,6 +21,7 @@ import com.iformall.enums.EnumCarVendor; | |||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| import com.iformall.mapper.WxCarJSOrderMapper; | import com.iformall.mapper.WxCarJSOrderMapper; | ||||
| import com.iformall.service.WxParkService; | import com.iformall.service.WxParkService; | ||||
| import com.iformall.service.park.ParkBatchCallBackAdapterService; | |||||
| import com.iformall.service.park.ParkCallBackAdapterService; | import com.iformall.service.park.ParkCallBackAdapterService; | ||||
| import com.iformall.service.park.entity.ParkNotifyParam; | import com.iformall.service.park.entity.ParkNotifyParam; | ||||
| import com.iformall.service.park.impl.BaseParkService; | import com.iformall.service.park.impl.BaseParkService; | ||||
| @@ -27,7 +30,7 @@ import lombok.extern.slf4j.Slf4j; | |||||
| @Slf4j | @Slf4j | ||||
| @Service | @Service | ||||
| public class JieShunParkCallbackService extends BaseParkService implements ParkCallBackAdapterService { | |||||
| public class JieShunParkCallbackService extends BaseParkService implements ParkBatchCallBackAdapterService { | |||||
| @Autowired | @Autowired | ||||
| @@ -70,8 +73,24 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkC | |||||
| } | } | ||||
| */ | */ | ||||
| @Override | @Override | ||||
| public ParkNotifyParam parseInNoticyParam(Object param) { | |||||
| Map<String, Object> paramMap = (Map<String, Object>) param; | |||||
| public List<ParkNotifyParam> parseInNoticyParam(Object param) { | |||||
| Map<String,Object> paramm = (Map<String, Object>) param; | |||||
| List list = (List) paramm.get("dataItems"); | |||||
| 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 null; | |||||
| } | |||||
| private ParkNotifyParam parseInNoticyParamSingle(Map<String,Object> paramMap) { | |||||
| String carNumber = paramMap.get("carNumber").toString(); | String carNumber = paramMap.get("carNumber").toString(); | ||||
| String parkCode = paramMap.get("parkCode").toString(); | String parkCode = paramMap.get("parkCode").toString(); | ||||
| String parkName = paramMap.get("parkName").toString(); | String parkName = paramMap.get("parkName").toString(); | ||||
| @@ -120,8 +139,25 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkC | |||||
| } | } | ||||
| @Override | @Override | ||||
| public ParkNotifyParam parseOutNoticyParam(Object param) { | |||||
| Map<String, Object> paramMap = (Map<String, Object>) param; | |||||
| public List<ParkNotifyParam> parseOutNoticyParam(Object param) { | |||||
| Map<String,Object> paramm = (Map<String, Object>) param; | |||||
| List list = (List) paramm.get("dataItems"); | |||||
| 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 null; | |||||
| } | |||||
| private ParkNotifyParam parseOutNoticyParamSingle(Map<String, Object> paramMap) { | |||||
| String carNumber = paramMap.get("carNumber").toString(); | String carNumber = paramMap.get("carNumber").toString(); | ||||
| String parkCode = paramMap.get("parkCode").toString(); | String parkCode = paramMap.get("parkCode").toString(); | ||||
| String parkName = paramMap.get("parkName").toString(); | String parkName = paramMap.get("parkName").toString(); | ||||
| @@ -155,13 +191,29 @@ public class JieShunParkCallbackService extends BaseParkService implements ParkC | |||||
| } | } | ||||
| @Override | @Override | ||||
| public ParkNotifyParam parseUnbindNoticyParam(Object param) { | |||||
| public List<ParkNotifyParam> parseUnbindNoticyParam(Object param) { | |||||
| return null; | return null; | ||||
| } | } | ||||
| @Override | @Override | ||||
| public ParkNotifyParam parsePaidNoticyParam(Object param) { | |||||
| Map vo = (Map) param; | |||||
| public List<ParkNotifyParam> parsePaidNoticyParam(Object param) { | |||||
| Map<String,Object> paramm = (Map<String, Object>) param; | |||||
| List list = (List) paramm.get("dataItems"); | |||||
| 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 = parsePaidNoticyParamSingle(map); | |||||
| if (null != ret ) { | |||||
| retList.add(ret); | |||||
| } | |||||
| } | |||||
| return retList; | |||||
| } | |||||
| return null; | |||||
| } | |||||
| private ParkNotifyParam parsePaidNoticyParamSingle(Map<String,Object> vo) { | |||||
| ParkNotifyParam p = new ParkNotifyParam(); | ParkNotifyParam p = new ParkNotifyParam(); | ||||
| p.setCarNumber((String) vo.get("carNumber")); | p.setCarNumber((String) vo.get("carNumber")); | ||||
| p.setParkId(String.valueOf(vo.get("parkCode"))); | p.setParkId(String.valueOf(vo.get("parkCode"))); | ||||