Browse Source

[停车][修改]:停车code整理

release_toaliyun_real
Stormeye Wu 6 years ago
parent
commit
88312852ca
6 changed files with 513 additions and 273 deletions
  1. +2
    -2
      mallinkAdmin/src/main/java/com/iformall/controller/car/WxCarController.java
  2. +2
    -2
      mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java
  3. +165
    -267
      mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarETCPCallBackController.java
  4. +285
    -0
      mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarTJDCallBackController.java
  5. +1
    -1
      mallinkService/src/main/java/com/iformall/utils/car/ETCPUtil.java
  6. +58
    -1
      mallinkService/src/main/java/com/iformall/utils/car/TJDCarUtil.java

+ 2
- 2
mallinkAdmin/src/main/java/com/iformall/controller/car/WxCarController.java View File

@@ -15,8 +15,8 @@ import com.iformall.enums.EnumRentContractAppStatus;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxCouponMapper;
import com.iformall.service.*;
import com.iformall.utils.ETCPUtil;
import com.iformall.utils.TJDCarUtil;
import com.iformall.utils.car.ETCPUtil;
import com.iformall.utils.car.TJDCarUtil;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;


+ 2
- 2
mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java View File

@@ -12,8 +12,8 @@ import com.iformall.domain.vo.WxMerchantVo;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.service.*;
import com.iformall.utils.ETCPUtil;
import com.iformall.utils.TJDCarUtil;
import com.iformall.utils.car.ETCPUtil;
import com.iformall.utils.car.TJDCarUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;


mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarCallBackController.java → mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarETCPCallBackController.java View File

@@ -12,7 +12,7 @@ import com.iformall.enums.EnumCouponSendSendType;
import com.iformall.enums.EnumETCPCode;
import com.iformall.service.*;
import com.iformall.utils.DateUtils;
import com.iformall.utils.ETCPUtil;
import com.iformall.utils.car.ETCPUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -32,7 +32,7 @@ import java.util.Map;

@RestController
@RequestMapping("/carCallback")
public class WxCarCallBackController extends BaseController {
public class WxCarETCPCallBackController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
@@ -81,119 +81,6 @@ public class WxCarCallBackController extends BaseController {
return new Result(EnumETCPCode.SUCCESS.getCode(), EnumETCPCode.SUCCESS.getMessage());
}

// @Async
private boolean doEtcpParkIn(@RequestBody Map<String, String> paramMap) {
Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();

wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);

String etcpParkId = paramMap.get(ETCPUtil.ETCP_PARK_ID);
String tenantId = null;
WxPark parkQ = new WxPark();
parkQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
parkQ.setParkingId(etcpParkId);
WxPark park = wxParkService.getByObj(parkQ);
if (park == null) {
logger.error("etcpParkInCallback: ETCP车场未找到" + etcpParkId);
//return new Result(ErrorCode.CAR_PARK_NOT_FOUND.getCode(), "ETCP车场未找到"+ etcpParkId);
} else {
tenantId = park.getTenantId();
wxCarCmdLog.setTenantId(park.getTenantId());
}

String carNumber = paramMap.get(ETCPUtil.ETCP_CAR_NUMBER);
String synId = paramMap.get(ETCPUtil.ETCP_SYN_ID);
String parkId = paramMap.get(ETCPUtil.ETCP_PARK_ID);
String parkName = paramMap.get(ETCPUtil.ETCP_PARK_NAME);
String userType = paramMap.get(ETCPUtil.ETCP_USER_TYPE);
String entranceTime = paramMap.get(ETCPUtil.ETCP_ENTRANCE_TIME);
String fixParkingId = paramMap.get(ETCPUtil.ETCP_FIX_PARKING_ID);
String remainingDays = paramMap.get(ETCPUtil.ETCP_REMAINING_DAYS);

// 检查是否有重复数据
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("synId", synId);
map.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode());
if(tenantId != null) {
map.put("tenantId", tenantId);
}
WxCarCmdLog carCmdLog = wxCarCmdLogService.getBySynId(map);
if(carCmdLog != null) {
logger.error("ETCP synId已入库: " + paramMap.toString());
return true;
}

try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("etcpParkInCallback: 入库错误 " + e.getMessage() + "\n" + paramMap.toString());
return true;
}

String phoneStrs = "";

// 停车发券
if (!StringUtils.isBlank(carNumber)) {
// 根据车牌查找用户
WxCUserCar userCarQ = new WxCUserCar();
userCarQ.setTenantId(tenantId);
userCarQ.setCarNumber(carNumber);
userCarQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
// TODO 可能多用户关联同一张车牌
List<WxCUserCar> userCarList = wxCUserCarService.getList(userCarQ);
boolean bFirst = true;
for (WxCUserCar userCar : userCarList) {
wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.CAR_STOP, userCar);
WxCUser cUser = wxCUserService.getById(userCar.getCUserId());
if(cUser != null){
if(bFirst) {
phoneStrs = cUser.getPhone();
bFirst = false;
} else {
phoneStrs += "," + cUser.getPhone();
}
}
}
}

try {
// 保存WxCarPayRecord
WxCarPayRecord record = new WxCarPayRecord();
record.setVendorType(wxCarCmdLog.getVendorType());
record.setSynId(synId);
record.setParkId(parkId);
record.setParkName(parkName);
record.setUserType(userType);
record.setPlateNumber(carNumber);
if(StringUtils.isNotBlank(entranceTime)) {
record.setEntranceTime(dateFormat.parse(entranceTime));
}
record.setFixParkingId(fixParkingId);
record.setRemainingDays(remainingDays);
record.setPhone(phoneStrs);
record.setTenantId(tenantId);

WxCarPayRecord query = new WxCarPayRecord();
query.setSynId(synId);
PageInfo<WxCarPayRecord> page = wxCarPayRecordService.findCarPayListByPage(query,1,1);
if(page != null && CollectionUtils.isNotEmpty(page.getList())){
record.setId(page.getList().get(0).getId());
}
wxCarPayRecordService.saveOrUpdate(record);
} catch (Exception e) {
e.printStackTrace();
logger.error("WxCarPayRecord: 入库错误 ",e);
logger.error("WxCarPayRecord: 入库错误 "+e.getMessage()+"," + paramMap.toString());
return true;
}
return false;
}

/**
* ETCP 车辆出场通知
* {
@@ -221,86 +108,6 @@ public class WxCarCallBackController extends BaseController {
return new Result(EnumETCPCode.SUCCESS.getCode(), EnumETCPCode.SUCCESS.getMessage());
}

private boolean doEtcpParkOut(@RequestBody Map<String, String> paramMap) {
Date currentDate = new Date();

WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);

String etcpParkId = paramMap.get(ETCPUtil.ETCP_PARK_ID);
String tenantId = null;
WxPark parkQ = new WxPark();
parkQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
parkQ.setParkingId(etcpParkId);
WxPark park = wxParkService.getByObj(parkQ);
if (park == null) {
logger.error("etcpParkOutCallback: ETCP车场未找到 " + etcpParkId);
// return new Result(ErrorCode.CAR_PARK_NOT_FOUND.getCode(), "ETCP车场未找到"+ etcpParkId);
} else {
tenantId = park.getTenantId();
wxCarCmdLog.setTenantId(tenantId);
}

try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("etcpParkOutCallback: 入库错误 " + e.getMessage() + "\n" + paramMap.toString());
return true;
}

String synId = paramMap.get(ETCPUtil.ETCP_SYN_ID);
String exitTime = paramMap.get(ETCPUtil.ETCP_EXIT_TIME);
String stayedTime = paramMap.get(ETCPUtil.ETCP_STAYED_TIME);
String carNumber = paramMap.get(ETCPUtil.ETCP_CAR_NUMBER);
String parkId = paramMap.get(ETCPUtil.ETCP_PARK_ID);
String parkName = paramMap.get(ETCPUtil.ETCP_PARK_NAME);
String userType = paramMap.get(ETCPUtil.ETCP_USER_TYPE);
String entranceTime = paramMap.get(ETCPUtil.ETCP_ENTRANCE_TIME);
String fixParkingId = paramMap.get(ETCPUtil.ETCP_FIX_PARKING_ID);
String remainingDays = paramMap.get(ETCPUtil.ETCP_REMAINING_DAYS);

try {
// 保存WxCarPayRecord
WxCarPayRecord record = new WxCarPayRecord();
record.setSynId(synId);
if(StringUtils.isNotBlank(exitTime)) {
record.setExitTime(dateFormat.parse(exitTime));
}
if(StringUtils.isNotBlank(stayedTime)) {
record.setStayedTime(Long.parseLong(stayedTime));
}
record.setVendorType(wxCarCmdLog.getVendorType());
record.setSynId(synId);
record.setParkId(parkId);
record.setParkName(parkName);
record.setUserType(userType);
record.setPlateNumber(carNumber);
if(StringUtils.isNotBlank(entranceTime)) {
record.setEntranceTime(dateFormat.parse(entranceTime));
}
record.setFixParkingId(fixParkingId);
record.setRemainingDays(remainingDays);
//record.setPhone(phoneStrs);
record.setTenantId(tenantId);

WxCarPayRecord query = new WxCarPayRecord();
query.setSynId(synId);
PageInfo<WxCarPayRecord> page = wxCarPayRecordService.findCarPayListByPage(query,1,1);
if(page != null && CollectionUtils.isNotEmpty(page.getList())){
record.setId(page.getList().get(0).getId());
}
wxCarPayRecordService.saveOrUpdate(record);
} catch (Exception e) {
logger.error("WxCarPayRecord: 出场更新错误 " +e.getMessage()+", " +paramMap.toString());
return true;
}
return false;
}

/**
* ETCP 车辆解绑通知
* {
@@ -471,105 +278,196 @@ public class WxCarCallBackController extends BaseController {
return new Result(EnumETCPCode.SUCCESS.getCode(), EnumETCPCode.SUCCESS.getMessage());
}

// @Async
private boolean doEtcpParkIn(@RequestBody Map<String, String> paramMap) {
Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();

/**
* TJD 车辆入场通知
* {
* "tradeId": "5836b8b52ada463ebc6199579f029565",
* "outCarId": "45454545454",
* "carNum": "京A45413",
* "carNumColor ": "blue",
* "inDt": "20170319202020",
* "parkName": "测试停车场",
* "parkId": "5836b8b52ada463ebc6199579f029561",
* "lon": "74.000272",
* "lat": "159.768703",
* "wLon": "123.523032",
* "wLat": "35.430735",
* "payUrl": "http://prep.tingjiandan.com/tcweixin/letter/prePay/payInPark.html?prePayType=16&channel=10001",
* "canFindCar": "0"
* }
*/
@RequestMapping(value = "/tjdParkInCallback")
public Map tjdParkInCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdParkInCallback: " + paramMap.toString());
Map map = new HashMap();


String tjdParkId = paramMap.get("parkId");
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);

String etcpParkId = paramMap.get(ETCPUtil.ETCP_PARK_ID);
String tenantId = null;
WxPark parkQ = new WxPark();
parkQ.setVendorType(EnumCarVendor.CAR_TJD.getCode());
parkQ.setParkId(tjdParkId);
parkQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
parkQ.setParkingId(etcpParkId);
WxPark park = wxParkService.getByObj(parkQ);
if (park == null) {
logger.error("tjdParkInCallback: 停简单车场未找到" + tjdParkId);
map.put("isSuccess", "0");
map.put("errorMsg", "停简单车场未找到" + tjdParkId);
return map;
logger.error("etcpParkInCallback: ETCP车场未找到" + etcpParkId);
//return new Result(ErrorCode.CAR_PARK_NOT_FOUND.getCode(), "ETCP车场未找到"+ etcpParkId);
} else {
tenantId = park.getTenantId();
wxCarCmdLog.setTenantId(park.getTenantId());
}

String carNumber = paramMap.get(ETCPUtil.ETCP_CAR_NUMBER);
String synId = paramMap.get(ETCPUtil.ETCP_SYN_ID);
String parkId = paramMap.get(ETCPUtil.ETCP_PARK_ID);
String parkName = paramMap.get(ETCPUtil.ETCP_PARK_NAME);
String userType = paramMap.get(ETCPUtil.ETCP_USER_TYPE);
String entranceTime = paramMap.get(ETCPUtil.ETCP_ENTRANCE_TIME);
String fixParkingId = paramMap.get(ETCPUtil.ETCP_FIX_PARKING_ID);
String remainingDays = paramMap.get(ETCPUtil.ETCP_REMAINING_DAYS);

// 检查是否有重复数据
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("synId", synId);
map.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode());
if(tenantId != null) {
map.put("tenantId", tenantId);
}
WxCarCmdLog carCmdLog = wxCarCmdLogService.getBySynId(map);
if(carCmdLog != null) {
logger.error("ETCP synId已入库: " + paramMap.toString());
return true;
}

Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setTenantId(park.getTenantId());
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_TJD.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);
try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdParkInCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
return map;
logger.error("etcpParkInCallback: 入库错误 " + e.getMessage() + "\n" + paramMap.toString());
return true;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}
String phoneStrs = "";

/**
* TJD 车辆出场通知
* {
* "tradeId": "5836b8b52ada463ebc6199579f029565",
* "outDt": "20170319232020",
* "lon": "74.000272",
* "lat": "159.768703",
* "wLon": "123.523032",
* "wLat": "35.430735",
* "parkAmount": "5.20"
* }
*/
@RequestMapping(value = "/tjdParkoutCallback")
public Map tjdParkOutCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdParkoutCallback: " + paramMap.toString());
Map map = new HashMap();
// 停车发券
if (!StringUtils.isBlank(carNumber)) {
// 根据车牌查找用户
WxCUserCar userCarQ = new WxCUserCar();
userCarQ.setTenantId(tenantId);
userCarQ.setCarNumber(carNumber);
userCarQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
// TODO 可能多用户关联同一张车牌
List<WxCUserCar> userCarList = wxCUserCarService.getList(userCarQ);
boolean bFirst = true;
for (WxCUserCar userCar : userCarList) {
wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.CAR_STOP, userCar);
WxCUser cUser = wxCUserService.getById(userCar.getCUserId());
if(cUser != null){
if(bFirst) {
phoneStrs = cUser.getPhone();
bFirst = false;
} else {
phoneStrs += "," + cUser.getPhone();
}
}
}
}

try {
// 保存WxCarPayRecord
WxCarPayRecord record = new WxCarPayRecord();
record.setVendorType(wxCarCmdLog.getVendorType());
record.setSynId(synId);
record.setParkId(parkId);
record.setParkName(parkName);
record.setUserType(userType);
record.setPlateNumber(carNumber);
if(StringUtils.isNotBlank(entranceTime)) {
record.setEntranceTime(dateFormat.parse(entranceTime));
}
record.setFixParkingId(fixParkingId);
record.setRemainingDays(remainingDays);
record.setPhone(phoneStrs);
record.setTenantId(tenantId);

String tradeId = paramMap.get("tradeId");
WxCarPayRecord query = new WxCarPayRecord();
query.setSynId(synId);
PageInfo<WxCarPayRecord> page = wxCarPayRecordService.findCarPayListByPage(query,1,1);
if(page != null && CollectionUtils.isNotEmpty(page.getList())){
record.setId(page.getList().get(0).getId());
}
wxCarPayRecordService.saveOrUpdate(record);
} catch (Exception e) {
e.printStackTrace();
logger.error("WxCarPayRecord: 入库错误 ",e);
logger.error("WxCarPayRecord: 入库错误 "+e.getMessage()+"," + paramMap.toString());
return true;
}
return false;
}

private boolean doEtcpParkOut(@RequestBody Map<String, String> paramMap) {
Date currentDate = new Date();

WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);

String etcpParkId = paramMap.get(ETCPUtil.ETCP_PARK_ID);
String tenantId = null;
WxPark parkQ = new WxPark();
parkQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
parkQ.setParkingId(etcpParkId);
WxPark park = wxParkService.getByObj(parkQ);
if (park == null) {
logger.error("etcpParkOutCallback: ETCP车场未找到 " + etcpParkId);
// return new Result(ErrorCode.CAR_PARK_NOT_FOUND.getCode(), "ETCP车场未找到"+ etcpParkId);
} else {
tenantId = park.getTenantId();
wxCarCmdLog.setTenantId(tenantId);
}

try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdParkoutCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
return map;
logger.error("etcpParkOutCallback: 入库错误 " + e.getMessage() + "\n" + paramMap.toString());
return true;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}
String synId = paramMap.get(ETCPUtil.ETCP_SYN_ID);
String exitTime = paramMap.get(ETCPUtil.ETCP_EXIT_TIME);
String stayedTime = paramMap.get(ETCPUtil.ETCP_STAYED_TIME);
String carNumber = paramMap.get(ETCPUtil.ETCP_CAR_NUMBER);
String parkId = paramMap.get(ETCPUtil.ETCP_PARK_ID);
String parkName = paramMap.get(ETCPUtil.ETCP_PARK_NAME);
String userType = paramMap.get(ETCPUtil.ETCP_USER_TYPE);
String entranceTime = paramMap.get(ETCPUtil.ETCP_ENTRANCE_TIME);
String fixParkingId = paramMap.get(ETCPUtil.ETCP_FIX_PARKING_ID);
String remainingDays = paramMap.get(ETCPUtil.ETCP_REMAINING_DAYS);

try {
// 保存WxCarPayRecord
WxCarPayRecord record = new WxCarPayRecord();
record.setSynId(synId);
if(StringUtils.isNotBlank(exitTime)) {
record.setExitTime(dateFormat.parse(exitTime));
}
if(StringUtils.isNotBlank(stayedTime)) {
record.setStayedTime(Long.parseLong(stayedTime));
}
record.setVendorType(wxCarCmdLog.getVendorType());
record.setSynId(synId);
record.setParkId(parkId);
record.setParkName(parkName);
record.setUserType(userType);
record.setPlateNumber(carNumber);
if(StringUtils.isNotBlank(entranceTime)) {
record.setEntranceTime(dateFormat.parse(entranceTime));
}
record.setFixParkingId(fixParkingId);
record.setRemainingDays(remainingDays);
//record.setPhone(phoneStrs);
record.setTenantId(tenantId);

WxCarPayRecord query = new WxCarPayRecord();
query.setSynId(synId);
PageInfo<WxCarPayRecord> page = wxCarPayRecordService.findCarPayListByPage(query,1,1);
if(page != null && CollectionUtils.isNotEmpty(page.getList())){
record.setId(page.getList().get(0).getId());
}
wxCarPayRecordService.saveOrUpdate(record);
} catch (Exception e) {
logger.error("WxCarPayRecord: 出场更新错误 " +e.getMessage()+", " +paramMap.toString());
return true;
}
return false;
}
}

+ 285
- 0
mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarTJDCallBackController.java View File

@@ -0,0 +1,285 @@
package com.iformall.controller.callback;

import com.alibaba.fastjson.JSON;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.*;
import com.iformall.enums.EnumCarCmd;
import com.iformall.enums.EnumCarVendor;
import com.iformall.service.*;
import com.iformall.utils.car.TJDCarUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/carCallback")
public class WxCarTJDCallBackController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
WxParkService wxParkService;

@Autowired
WxCUserCarService wxCUserCarService;

@Autowired
WxMerchantService wxMerchantService;

@Autowired
WxCarCmdLogService wxCarCmdLogService;

@Autowired
WxCouponSendService wxCouponSendService;

@Autowired
WxCarPayRecordService wxCarPayRecordService;

@Autowired
WxCUserService wxCUserService;

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

/**
* 注册车牌
* @param paramMap
* @return
* {
* "service": "parkhub.car.register",
* "partner": "5836b8b51ada463ebc6199579f029566", "sign": "3347b109a1e44f3fd5baa78b74184948", "signType": "md5",
* "charset": "utf-8",
* "version": "1.0",
* "timestamp": "2016-05-26 11:30:10",
* "carNum": "京A12345",
* "carNumColor": "blue",
* "phone": "13612341234",
* "outCarId": "432d85d7441316d29504f480e6a734a8"
* }
* {
* "timestamp": "1464235239561",
* "returnCode": "T",
* "returnMsg": "OK",
* "isSuccess": "0",
* "errorMSG": "",
* "carId": "11ce3dca34124e97830ad466e532eda7"
* }
*/
@RequestMapping(value = "/tjdRegisterCallback")
public Map tjdRegisterCallback(@RequestBody Map<String, String> paramMap) {
Map map = new HashMap();
return map;
}
/**
* 进场通知
* {
* "parkId": "f3f11a46f3a14056953aed97944242d4", "parkName": "测试停车场",
* "carNum": "京A12345",
* "carNumColor ": "blue",
* "tradeId": "5836b8b52ada463ebc6199579f029565",
* "outCarId": "",
* "inDt": "20170319202020",
* "payUrl":
* "http://prep.tingjiandan.com/tcweixin/letter/prePay/pagePayInPark?prePayType=16&channel=10001&isShowDetail=true&orderId=5836b8b52ada463ebc6199579f029565&returnUrl=",
* "miniProgram": "{
* \"path\": \"pages/pre_pay/index/main\",
* \"extraData\": {
* \"prePayType\": \"16\",
* \"channel\": \"10001\",
* \"isShowDetail\": \"true\",
* \"orderId\": \"5836b8b52ada463ebc6199579f029565\"
* }}",
* "canFindCar": "0",
* "city": "北京市",
* "district": "海淀区",
* "address": "五道口",
* "lon": "74.000272",
* "lat": "159.768703",
* "wLon": "123.523032",
* "wLat": "35.430735"
* }
*/
@RequestMapping(value = "/tjdParkInCallback")
public Map tjdParkInCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdParkInCallback: " + paramMap.toString());
Map map = new HashMap();

String tjdParkId = paramMap.get("parkId");

WxPark parkQ = new WxPark();
parkQ.setVendorType(EnumCarVendor.CAR_TJD.getCode());
parkQ.setParkId(tjdParkId);
WxPark park = wxParkService.getByObj(parkQ);
if (park == null) {
logger.error("tjdParkInCallback: 停简单车场未找到" + tjdParkId);
map.put("isSuccess", "0");
map.put("errorMsg", "停简单车场未找到" + tjdParkId);
return map;
}

Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setTenantId(park.getTenantId());
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_TJD.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_TJD_CALLBACK_PARK_IN.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);
try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdParkInCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
return map;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}

/**
* 离场通知
* {
* "parkId": "f3f11a46f3a14056953aed97944242d4",
* "parkName": "测试停车场",
* "carNum": "京A12345",
* "carNumColor ": "blue",
* "tradeId": "5836b8b52ada463ebc6199579f029565",
* "inDt": "20170319232020",
* "outDt": "20170319232020",
* "parkAmount": "5.20",
* "lon": "74.000272",
* "lat": "159.768703",
* "wLon": "123.523032",
* "wLat": "35.430735"
* }
*/
@RequestMapping(value = "/tjdParkoutCallback")
public Map tjdParkOutCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdParkoutCallback: " + paramMap.toString());
Map map = new HashMap();


String tradeId = paramMap.get("tradeId");

Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_TJD.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_TJD_CALLBACK_PARK_OUT.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);
try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdParkoutCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
return map;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}

/**
* 支付通知
* {
* "parkId ": "77a3424e06e64248b4cf9e490c8c682d",
* "parkName ": "测试停车场",
* "carNum": "京A12345",
* "carNumColor": "blue",
* "tradeId": "6d697f7579724345881633a00ed3a671",
* "payAmount": "5.00",
* "payDt": "20180516225701",
* "lon": "74.000272",
* "lat": "159.768703",
* "wLon": "123.523032",
* "wLat": "35.430735"
* }
*/
@RequestMapping(value = "/tjdPaidCallback")
public Map tjdPaidCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdPaidCallback: " + paramMap.toString());
Map map = new HashMap();


String tradeId = paramMap.get("tradeId");

Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);
try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdParkoutCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
return map;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}

/**
* 退款通知 (仅当接入方作为第一收款方时适用)
* {
* "parkId ": "77a3424e06e64248b4cf9e490c8c682d",
* "parkName ": "测试停车场",
* "carNum": "京A12345",
* "carNumColor": "blue",
* "tradeId": "6d697f7579724345881633a00ed3a671",
* "payAmount": "5.00",
* "payDt": "20180516225701",
* "lon": "74.000272",
* "lat": "159.768703",
* "wLon": "123.523032",
* "wLat": "35.430735"
* }
*/
@RequestMapping(value = "/tjdRefundCallback")
public Map tjdRefundCallback(@RequestBody Map<String, String> paramMap) {
logger.info("["+getIpAddr()+"tjdRefundCallback: " + paramMap.toString());
Map map = new HashMap();


String tradeId = paramMap.get("tradeId");

Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);
try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("tjdRefundCallback: 入库错误" + paramMap.toString());
map.put("isSuccess", "0");
map.put("errorMsg", "入库错误" + paramMap.toString());
return map;
}

map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}

}

mallinkService/src/main/java/com/iformall/utils/ETCPUtil.java → mallinkService/src/main/java/com/iformall/utils/car/ETCPUtil.java View File

@@ -1,4 +1,4 @@
package com.iformall.utils;
package com.iformall.utils.car;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;

mallinkService/src/main/java/com/iformall/utils/TJDCarUtil.java → mallinkService/src/main/java/com/iformall/utils/car/TJDCarUtil.java View File

@@ -1,7 +1,8 @@
package com.iformall.utils;
package com.iformall.utils.car;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iformall.utils.MapUtil;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
@@ -267,6 +268,62 @@ public class TJDCarUtil {
return result;
}

//// TODO
/**
* deductionNotSettle 停车费批量抵扣接口
* @param url
* @param partner
* @param key // 密钥
* @param version
* {
"service": "parkhub.order.deductionForDetail",
"partner": "120a565de377427184de35ca0f320764",
"sign": "3347b109a1e44f3fd5baa78b74a84948",
"signType": "md5",
"charset": "utf-8",
"version": "1.0",
"timestamp": "2016-05-26 11:30:10",
"tradeId": "c39d3aac49d04e12a187681e6189f841",
"accountId": "a9b2963c98344bb292e0fa3f7dd70946",
"prePayType": "3",
"giveFreeTimeOut": "false",
"detailList":"[{
},{
},{
\"outTradeNo\":\"PLDKY01\", \"identityType\":\"01\", \"identityId\":\"17710111111\", \"membershipGrade\":\"LV1\", \"amount\":\"12.50\", \"type\":\"0\", \"channel\":\"5013\", \"memo\":\"批量抵扣-金额-微信\"
\"outTradeNo\":\"PLDKY02\", \"identityType\":\"01\", \"identityId\":\"17710111111\", \"membershipGrade\":\"LV1\", \"couponType\":\"1\", \"minutes\":\"60\", \"type\":\"1\", \"channel\":\"2204\", \"memo\":\"批量抵扣-时长-会员卡券\"
\"outTradeNo\":\"PLDKY03\", \"identityType\":\"01\", \"identityId\":\"17710111111\", \"membershipGrade\":\"LV1\", \"couponType\":\"3\", \"startDt\":\"20180901110000\", \"endDt\":\"20180901170000\", \"integral\":\"500\",
\"type\":\"1\",
\"channel\":\"2205\", \"memo\":\"批量抵扣-区间-积分-会员补贴\"
}]"
}
* @throws Exception
*/
public static String deductionForDetail(String url, String partner, String key, String version,
String tradeId, String outTradeNo, String accountId, String deductionAmount) {
// 为指定订单抵扣停车费,如果此时车辆已经出场,返回isSuccess错误码为3,停简单系统不再接收此笔抵扣信息,对方系统 需要给用户发起退款。
String service = "parkhub.order.deductionNotSettle";
Map<String, String> paramMap = MapUtil.getOrderMap();
paramMap.put("tradeId", tradeId);
paramMap.put("deductionAmount", deductionAmount);
paramMap.put("outTradeNo", outTradeNo);
paramMap.put("accountId", accountId);
paramMap.put("charset", "utf-8");
paramMap.put("partner", partner);
paramMap.put("version", version);

String result = Proc(url, key, service, paramMap);
/*
"{\"timestamp\":\"1528534986636\",
\"returnCode\":\"T\",
\"prePayId\":\"7a1d52aa77ca487db4e61130394285bd\",
\"errorMSG\":\"\",
\"returnMsg\":\"OK\",
\"isSuccess\":\"0\"}[\\r][\\n]"
*/
return result;
}

/**
* deductionNotSettle 停车费无结算抵扣
* @param url

Loading…
Cancel
Save