Просмотр исходного кода

Merge branch 'release_toaliyun_real_20230701' of https://git.malls.iformall.com/server/formallProject into release_toaliyun_real_20230701

release_toaliyun_real
xhxu 2 лет назад
Родитель
Сommit
637b6f8c48
9 измененных файлов: 68 добавлений и 117 удалений
  1. +2
    -1
      mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java
  2. +16
    -1
      mallinkCallback/src/main/java/com/iformall/controller/callback/car/WxParkCallBackBaseController.java
  3. +11
    -11
      mallinkCallback/src/main/java/com/iformall/controller/callback/car/dahua/WxCarDaHuaCallBackController.java
  4. +0
    -1
      mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java
  5. +9
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java
  6. +1
    -1
      mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java
  7. +27
    -84
      mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkCallbackService.java
  8. +1
    -16
      mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java
  9. +1
    -1
      mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaUtil.java

+ 2
- 1
mallinkCallback/src/main/java/com/iformall/config/ShiroConfig.java Просмотреть файл

@@ -125,7 +125,8 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/futeCarCallback/**", "anon");
filterChainDefinitionMap.put("/carPaidCallback/**", "anon");
filterChainDefinitionMap.put("/keTuoCarCallback/**", "anon");

filterChainDefinitionMap.put("/daHuaCarCallback/**", "anon");
// static files
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");


+ 16
- 1
mallinkCallback/src/main/java/com/iformall/controller/callback/car/WxParkCallBackBaseController.java Просмотреть файл

@@ -181,6 +181,9 @@ public class WxParkCallBackBaseController extends BaseController {
}
private Result handleSingleParkInCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,ParkNotifyParam param ,Object sourceParam) {
if (null == param) {
return new Result();
}
String carNumber = param.getCarNumber();
@@ -250,6 +253,10 @@ public class WxParkCallBackBaseController extends BaseController {
}
private Result handleParkOutCallBackSingle(EnumCarVendor vendor,EnumCarCmd cmdType,ParkNotifyParam param,Object sourceParam) {
if (null == param) {
return new Result();
}
ParkCacheUtils.removeCache(redisTemplate, vendor.getMessage(), param.getCarNumber());
WxCarCmdLog wxCarCmdLog = null;
@@ -286,7 +293,11 @@ public class WxParkCallBackBaseController extends BaseController {
}
private Result handleUnbindCarCallBackSingle(EnumCarVendor vendor,EnumCarCmd cmdType,ParkNotifyParam param,Object sourceParam) {
WxCarCmdLog wxCarCmdLog = null;
if (null == param) {
return new Result(EnumETCPCode.SUCCESS.getCode(), EnumETCPCode.SUCCESS.getMessage());
}
WxCarCmdLog wxCarCmdLog = null;
try {
wxCarCmdLog = saveWxCarCmdLog(vendor, cmdType, sourceParam, param);
}catch(MallinkException e) {
@@ -325,6 +336,10 @@ public class WxParkCallBackBaseController extends BaseController {
private Result handlePaidCallbackSingle(EnumCarVendor vendor,EnumCarCmd cmdType,ParkNotifyParam param,Object sourceParam) {
if (null == param) {
return new Result(EnumETCPCode.SUCCESS.getCode(), EnumETCPCode.SUCCESS.getMessage());
}
WxCarCmdLog carCmdLogQ = new WxCarCmdLog();
String parkId = param.getParkId();
WxPark parkQ = new WxPark();


+ 11
- 11
mallinkCallback/src/main/java/com/iformall/controller/callback/car/dahua/WxCarDaHuaCallBackController.java Просмотреть файл

@@ -73,11 +73,11 @@ public class WxCarDaHuaCallBackController extends WxParkCallBackBaseController {
* @Author furunxin
* @Date 2020/7/8 上午8:27
**/
@PostMapping(value = "/PostCarInInfo")
@PostMapping(value = "/carIn")
public Result parkInCallback(@RequestBody Map<String, Object> paramMap) {
log.info("["+getIpAddr()+"] keTuoCarCallback parkIn: " + paramMap.toString());
log.info("["+getIpAddr()+"] daHuaCarCallback parkIn: " + paramMap.toString());
//解析车易付参数
return super.parkInCallBack(EnumCarVendor.CAR_KETUO, EnumCarCmd.CAR_KETUO_CALLBACK_PARK_IN, paramMap);
return super.parkInCallBack(EnumCarVendor.CAR_DAHUA, EnumCarCmd.CAR_DAHUA_CALLBACK_PARK_IN, paramMap);
}


@@ -88,24 +88,24 @@ public class WxCarDaHuaCallBackController extends WxParkCallBackBaseController {
* @Author furunxin
* @Date 2020/7/12 上午9:00
**/
@PostMapping(value = "/PostCarOutInfo")
@PostMapping(value = "/carOut")
public Result parkOutCallback(@RequestBody Map<String, Object> paramMap) {
log.info("["+getIpAddr()+"] keTuoCarCallback parkOut: " + paramMap.toString());
return super.parkOutCallBack(EnumCarVendor.CAR_KETUO, EnumCarCmd.CAR_KETUO_CALLBACK_PARK_OUT, paramMap);
log.info("["+getIpAddr()+"] daHuaCarCallback parkOut: " + paramMap.toString());
return super.parkOutCallBack(EnumCarVendor.CAR_DAHUA, EnumCarCmd.CAR_DAHUA_CALLBACK_PARK_OUT, paramMap);
}
@PostMapping(value = "/unbind")
public Result unbindCallback(@RequestBody Map<String, Object> paramMap) {
log.info("["+getIpAddr()+"] keTuoCarCallback unbind: " + paramMap.toString());
log.info("["+getIpAddr()+"] daHuaCarCallback unbind: " + paramMap.toString());
//解析车易付参数
return super.unbindCarCallBack(EnumCarVendor.CAR_KETUO, EnumCarCmd.CAR_KETUO_CALLBACK_UNBIND, paramMap);
return super.unbindCarCallBack(EnumCarVendor.CAR_DAHUA, EnumCarCmd.CAR_DAHUA_CALLBACK_UNBIND, paramMap);
}
@PostMapping(value = "/PostPayFeeInfo")
@PostMapping(value = "/paid")
public Result paidCallback(@RequestBody Map<String, Object> paramMap) {
log.info("["+getIpAddr()+"] keTuoCarCallback paid: " + paramMap.toString());
log.info("["+getIpAddr()+"] daHuaCarCallback paid: " + paramMap.toString());
//解析车易付参数
return super.paidCallback(EnumCarVendor.CAR_KETUO, EnumCarCmd.CAR_KETUO_CALLBACK_PAID, paramMap);
return super.paidCallback(EnumCarVendor.CAR_DAHUA, EnumCarCmd.CAR_DAHUA_CALLBACK_PAID, paramMap);
}
}

+ 0
- 1
mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java Просмотреть файл

@@ -344,7 +344,6 @@ public class OrderExpiringSchedule {
return false;
}
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void orderExpired(WxOrder order,boolean checkRealPay) throws MallinkException, Exception {
if (checkRealPay) {


+ 9
- 1
mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java Просмотреть файл

@@ -49,7 +49,12 @@ public enum EnumCarCmd {
CAR_KETUO_CALLBACK_PARK_IN(640,"科拓进场通知"),
CAR_KETUO_CALLBACK_PARK_OUT(641,"科拓出场通知"),
CAR_KETUO_CALLBACK_UNBIND(642,"科拓解绑车牌通知"),
CAR_KETUO_CALLBACK_PAID(643,"科拓支付通知")
CAR_KETUO_CALLBACK_PAID(643,"科拓支付通知"),
CAR_DAHUA_CALLBACK_PARK_IN(644,"大华进场通知"),
CAR_DAHUA_CALLBACK_PARK_OUT(645,"大华出场通知"),
CAR_DAHUA_CALLBACK_UNBIND(646,"大华解绑车牌通知"),
CAR_DAHUA_CALLBACK_PAID(647,"大华支付通知")
;

public static EnumCarCmd getEnum(Integer code) {
@@ -72,6 +77,7 @@ public enum EnumCarCmd {
list.add(CAR_FUTE_CALLBACK_PARK_IN.getCode());
list.add(CAR_LIFANG_CALLBACK_PARK_IN.getCode());
list.add(CAR_KETUO_CALLBACK_PARK_IN.getCode());
list.add(CAR_DAHUA_CALLBACK_PARK_IN.getCode());
return list;
}

@@ -86,6 +92,7 @@ public enum EnumCarCmd {
list.add(CAR_FUTE_CALLBACK_PARK_OUT.getCode());
list.add(CAR_LIFANG_CALLBACK_PARK_OUT.getCode());
list.add(CAR_KETUO_CALLBACK_PARK_OUT.getCode());
list.add(CAR_DAHUA_CALLBACK_PARK_OUT.getCode());
return list;
}

@@ -100,6 +107,7 @@ public enum EnumCarCmd {
list.add(CAR_FUTE_CALLBACK_PAID.getCode());
list.add(CAR_LIFANG_CALLBACK_PAID.getCode());
list.add(CAR_KETUO_CALLBACK_PAID.getCode());
list.add(CAR_DAHUA_CALLBACK_PAID.getCode());
return list;
}



+ 1
- 1
mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java Просмотреть файл

@@ -119,6 +119,7 @@ public class ParkFactory {
callBackServiceMap.put(EnumCarVendor.CAR_FUTE.getCode(), futeParkCallbackService);
callBackServiceMap.put(EnumCarVendor.CAR_LIFANG.getCode(), lifangParkCallbackService);
callBackServiceMap.put(EnumCarVendor.CAR_KETUO.getCode(), keTuoParkCallbackService);
callBackServiceMap.put(EnumCarVendor.CAR_DAHUA.getCode(), dahuaCallbackService);
return callBackServiceMap;
}
@@ -130,7 +131,6 @@ public class ParkFactory {
batchCallBackServiceMap.put(EnumCarVendor.CAR_JIESHUN.getCode(), jieshunCallBackService);
batchCallBackServiceMap.put(EnumCarVendor.CAR_JIESHUN_V2.getCode(), jieshunV2CallBackService);
batchCallBackServiceMap.put(EnumCarVendor.CAR_HAIKANGWEISHI.getCode(), haikangWeishiCallBackService);
batchCallBackServiceMap.put(EnumCarVendor.CAR_DAHUA.getCode(), dahuaCallbackService);
return batchCallBackServiceMap;
}


+ 27
- 84
mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkCallbackService.java Просмотреть файл

@@ -31,7 +31,7 @@ import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class DaHuaParkCallbackService extends BaseParkService implements ParkBatchCallBackAdapterService {
public class DaHuaParkCallbackService extends BaseParkService implements ParkCallBackAdapterService {
@Autowired
@@ -44,8 +44,8 @@ public class DaHuaParkCallbackService extends BaseParkService implements ParkBat
WxCarJSOrderMapper wxCarJSOrderMapper;
private String handleCarNumber(String carNumber) {
if (StringUtils.isBlank(carNumber)) {
return "空车牌";
if (StringUtils.isBlank(carNumber) || "无牌车".equals(carNumber)) {
return null;
}
if (carNumber.contains("-")) {
carNumber = carNumber.replaceAll("-", "");
@@ -54,37 +54,23 @@ public class DaHuaParkCallbackService extends BaseParkService implements ParkBat
}

/**
* {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}
* {parkingLotCode=10005, carInTime=2023-07-24 16:03:25, parkingRecordId=20230724GIBgulTLyuqX07XBMbMRK, carNum=皖MNT597, carInChnId=1000874$14$0$0, parkingLotName=玲珑湾西院}
*/
@Override
public List<ParkNotifyParam> parseInNoticyParam(Object param) {
public 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);
}
}
return retList;
}
return null;
}
private ParkNotifyParam parseInNoticyParamSingle(Map<String,Object> paramMap) {
String carNumber = paramMap.get("carNumber").toString();
String parkCode = paramMap.get("parkCode").toString();
String parkName = paramMap.get("parkName").toString();
String carNumber = paramm.get("carNum").toString();
String parkCode = paramm.get("parkingLotCode").toString();
String parkName = paramm.get("parkingLotName").toString();
String synId = paramMap.get("itemId").toString();
String entranceTime = paramMap.get("inTime").toString();
String synId = paramm.get("parkingRecordId").toString();
String entranceTime = paramm.get("carInTime").toString();
ParkNotifyParam p = new ParkNotifyParam();
String realCarNumber = handleCarNumber(carNumber);
if (StringUtils.isBlank(realCarNumber)) {
return null;
}
p.setCarNumber(realCarNumber);
p.setParkId(parkCode);
p.setParkName(parkName);
@@ -98,33 +84,18 @@ public class DaHuaParkCallbackService extends BaseParkService implements ParkBat
return p;
}

/**
* {parkingLotCode=10005, parkingRecordId=20230724h9XljrQ6hfvPL4tWOO5Yc, carNum=皖MM5823, carOutChnId=1000877$14$0$0, parkingLotName=玲珑湾西院, carOutTime=2023-07-24 16:08:10}
*/
@Override
public List<ParkNotifyParam> parseOutNoticyParam(Object param) {
public 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);
}
}
return retList;
}
return null;
}
private ParkNotifyParam parseOutNoticyParamSingle(Map<String, Object> paramMap) {
String carNumber = paramMap.get("carNumber").toString();
String parkCode = paramMap.get("parkCode").toString();
String parkName = paramMap.get("parkName").toString();
String carNumber = paramm.get("carNum").toString();
String parkCode = paramm.get("parkingLotCode").toString();
String parkName = paramm.get("parkingLotName").toString();
String synId = paramMap.get("itemId").toString();
String entranceTime = paramMap.get("outTime").toString();
String synId = paramm.get("parkingRecordId").toString();
String entranceTime = paramm.get("carOutTime").toString();
String realCarNumber = handleCarNumber(carNumber);
ParkNotifyParam p = new ParkNotifyParam();
@@ -144,47 +115,19 @@ public class DaHuaParkCallbackService extends BaseParkService implements ParkBat
log.error("cyf outTime format error",e);
return null;
}
p.setFee(String.valueOf(paramMap.get("ssMoney")));
p.setFee(String.valueOf(paramm.get("ssMoney")));
return p;
}
@Override
public List<ParkNotifyParam> parseUnbindNoticyParam(Object param) {
public ParkNotifyParam parseUnbindNoticyParam(Object param) {
return null;
}

@Override
public List<ParkNotifyParam> parsePaidNoticyParam(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 = parsePaidNoticyParamSingle(map);
if (null != ret ) {
retList.add(ret);
}
}
return retList;
}
public ParkNotifyParam parsePaidNoticyParam(Object param) {
return null;
}
DaHuaUtil jieshun = new DaHuaUtil();
private ParkNotifyParam parsePaidNoticyParamSingle(Map<String,Object> vo) {
ParkNotifyParam p = new ParkNotifyParam();
p.setCarNumber(handleCarNumber((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;
}
}

+ 1
- 16
mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java Просмотреть файл

@@ -64,7 +64,6 @@ public class DaHuaParkService extends BaseParkService implements ParkAdapterServ
@Autowired
WxCarJSOrderMapper wxCarJSOrderMapper;
DaHuaUtil dahua = new DaHuaUtil();
@@ -98,22 +97,8 @@ public class DaHuaParkService extends BaseParkService implements ParkAdapterServ
}
/**
* 先去捷顺注册,调用登陆获取令牌,然后根据令牌调用别的接口
* http://ap.jieshun.cn:9088/apply/ 注册信息地址 fumao/iformall2020
*
* 捷顺商户平台:http://merchant.jslife.com.cn/merchant/index.html#/auth/login
* 捷顺门店平台:http://merchant.jslife.com.cn/store/index.html#/auth/login
* 门店商户号 000000008032172000003 密码 ycHqp61Acudxz
*
*
* API对接注意事项:
1、token有效期两个小时,每两小时内登录一次获取token,调业务接口不需要频繁登录用,建议获取一次token存本地缓存,之后从本地获取,两小时内刷新一次,
为避免调业务接口时刚好token被刷新,导致token失效(无效的令牌或令牌已过期),可以做下容错,重新登录获取token或用最新token重新调业务接口。
2、token是和ip是一对一绑定,新的ip服务器调捷顺的接口会出现ip不合法,需把ip提供捷顺方,添加白名单。多个服务调捷顺接口共用一个ip情况下,只能共用一套登录获取token机制,各自登录会冲突。
3、所有接口要带车牌的一律带横杠。格式如:粤-B12345。
4、无效的数据签名是指sn加密方式不对。sn加密方式是对p+signkey进行Md5加密,加密后的字符串大写。
*/
@Override
public ResultData parkInitConfig(WxPark park) throws Exception {
// TODO Auto-generated method stub
@@ -168,7 +153,7 @@ public class DaHuaParkService extends BaseParkService implements ParkAdapterServ
Integer freeMinute = (Integer)park.getVendorParamsByKey("freeMinute");
Date createTime = DateUtils.string2Date(attribute.getString("carInTime"),DateUtils.DATE_TIME_PATTERN).getTime();//计费时间,格式为“yyyy-MM-dd HH:mi:ss”
Long seconds = attribute.getLong("duration")*60;//停车时长秒
Long seconds = attribute.getLong("duration");//停车时长秒
Date endTime = DateUtils.getSecondsTimeAfter(seconds, createTime);//离场时间,格式为“yyyy-MM-dd HH:mi:ss”
String payPath = "pages/parkingOrder/parkingOrder?carNum="+carNumber+"&isFromPay=1&filterRoadsideInParking=0";
return new ParkStopFee(parkOrderId,createTime,endTime,


+ 1
- 1
mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaUtil.java Просмотреть файл

@@ -144,7 +144,7 @@ public class DaHuaUtil {
/*token认证登陆**/
private static String ProcLogin(String clientId,String clientSecret) {
String url = TOKEN_URL +"grant_type=client_credentials&scope=server&client_id="+clientId+"&client_secret="+clientSecret;
String url = TOKEN_URL +"?grant_type=client_credentials&scope=server&client_id="+clientId+"&client_secret="+clientSecret;
return Proc(url,content_type_token,null,null);
}


Загрузка…
Отмена
Сохранить