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

fix park

release_toaliyun_real
xiaohanzi 5 лет назад
Родитель
Сommit
f227601159
11 измененных файлов: 1364 добавлений и 798 удалений
  1. +28
    -798
      mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java
  2. +50
    -0
      mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java
  3. +69
    -0
      mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java
  4. +33
    -0
      mallinkService/src/main/java/com/iformall/service/park/impl/BaseParkService.java
  5. +108
    -0
      mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java
  6. +114
    -0
      mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java
  7. +68
    -0
      mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java
  8. +451
    -0
      mallinkService/src/main/java/com/iformall/service/park/impl/etcp/EtcpHelper.java
  9. +88
    -0
      mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java
  10. +246
    -0
      mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java
  11. +109
    -0
      mallinkService/src/main/java/com/iformall/service/park/impl/util/ParkHelper.java

+ 28
- 798
mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java Просмотреть файл

@@ -15,6 +15,9 @@ import com.iformall.domain.vo.WxMerchantVo;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.service.*;
import com.iformall.service.park.ParkFactory;
import com.iformall.service.park.impl.etcp.EtcpHelper;
import com.iformall.service.park.impl.util.ParkHelper;
import com.iformall.utils.car.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -37,12 +40,6 @@ import java.util.Map;
public class WxCarController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

ETCPUtil etcp = new ETCPUtil();

TJDUtil tjd = new TJDUtil();

CYFUtil cyf = new CYFUtil();

@Autowired
WxParkService wxParkService;

@@ -72,15 +69,20 @@ public class WxCarController extends BaseController {

@Autowired
WxCUserBasicInfoService wxCUserBasicInfoService;
@Autowired
ParkFactory parkFactory;
@Autowired
ParkHelper parkHelper;
@Autowired
EtcpHelper etcpHelper;

private WxPark getCurrentPark(TenantEntity tenantEntity) {
WxPark parkQ = new WxPark();
//parkQ.updateTenantInfo(tenantEntity);
parkQ.setTenantId("789");
parkQ.setParentTenantId("788");
parkQ.updateTenantInfo(tenantEntity);
WxPark wxPark = wxParkService.getByObj(parkQ);
// 1, get mall's park
// future use redis to optimize
return wxPark;
}

@@ -107,146 +109,11 @@ public class WxCarController extends BaseController {
WxPark park = getCurrentPark(getTenantInfo());
// 2. get vendor params
if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) {
return initForEtcp(paramMap, getMemberId(), park);
} else if (park.getVendorType().equals(EnumCarVendor.CAR_TJD.getCode()) ||
park.getVendorType().equals(EnumCarVendor.CAR_DAHUA.getCode()) ||
park.getVendorType().equals(EnumCarVendor.CAR_SHANGAN.getCode()) ||
park.getVendorType().equals(EnumCarVendor.CAR_BOLINK.getCode())) {
Map resultMap = new HashMap();
resultMap.put("vendor", park.getVendorType());
return new ResultData(resultMap);
}
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "登录失败");
}

private ResultData initForEtcp(Map<String, String> paramMap, Long userId, WxPark park) {
String phone = paramMap.get("phone");
WxCUserBasicInfo user = wxCUserBasicInfoService.getById(userId);
if (StringUtils.isBlank(phone) && StringUtils.isBlank(user.getPhone())) {
logger.error("暂未成为会员,请授权手机号");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "暂未成为会员,请授权手机号");
}
if (!StringUtils.isBlank(user.getPhone()) && !user.getPhone().contains("*")) {
phone = user.getPhone();
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String appId = objParams.getString("appId");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");

String ret = "";
try {
ret = etcp.userSignin(url, appId, merchantNo, merchantKey, version, phone);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) {
// 获取绑定的车牌
JSONObject dataObj = retObj.getJSONObject("data");
dataObj.put("vendor", EnumCarVendor.CAR_ETCP.getCode());
String etcpToken = dataObj.getString("token");
try {
JSONObject dataObj1 = etcpSyncCarNumbers(park, user.getId(), park.getVendorType(),
url, merchantNo, merchantKey, version,
etcpToken);
} catch (MallinkException e) {
logger.error("ETCP cmd error: " + e.getMessage());
}
// c端必须保存此token
return new ResultData(dataObj);
} else {
logger.error("共同登录失败: " + phone);
return new ResultData(ErrorCode.ETCP_LOGIN_FAIL.getCode(), "共同登录失败");
}
}

/**
* ETCP同步
*
* @param tenantEntity
* @param cUserId
* @param iVendorType
* @param url
* @param merchantNo
* @param merchantKey
* @param version
* @param etcpToken
* @return
*/
private JSONObject etcpSyncCarNumbers(TenantEntity tenantEntity, Long cUserId, int iVendorType,
String url, String merchantNo, String merchantKey, String version,
String etcpToken) {
String ret;
JSONObject retObj;
/*{"code": 0,"msg": "ok","data": {"number": 3,"carList": ["晋 BMZ105","云 C12345"]}} */
try {
ret = etcp.carNum(url, merchantNo, merchantKey, version, etcpToken);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
throw new MallinkException(e.getErrorCode(), e.getMessage());
}
retObj = JSON.parseObject(ret);
JSONObject dataObj1 = retObj.getJSONObject("data");
dataObj1.put("vendor", iVendorType);
JSONArray arr = dataObj1.getJSONArray("carList");
WxCUserCar queryUserCar = new WxCUserCar();
queryUserCar.setCUserId(cUserId);
List<WxCUserCar> uclist = wxCUserCarService.getList(queryUserCar);
// 删除ETCP不存在
for (WxCUserCar userCar : uclist) {
boolean bExist = isExistInArray(arr, userCar.getCarNumber());
if (!bExist) {
wxCUserCarService.deleteById(userCar.getId());
uclist.remove(userCar);
}
}
// 添加ETCP的
for (int i = 0; i < arr.size(); i++) {
String _carNum = arr.getString(i);
boolean bExist = isExistInList(uclist, _carNum);
if (!bExist) {
Date curr = new Date();
WxCUserCar userCar = new WxCUserCar();
userCar.setCUserId(cUserId);
userCar.updateTenantInfo(tenantEntity);
userCar.setCarNumber(_carNum);
userCar.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
userCar.setCreateDate(curr);
userCar.setUpdateDate(curr);
wxCUserCarService.saveOrUpdate(userCar);
}
}
return dataObj1;
}

private boolean isExistInArray(JSONArray arr, String carNumber) {
boolean bExist = false;
for (int i = 0; i < arr.size(); i++) {
// check carNum+cUserId是否存在, 不存在新建
String _carNum = arr.getString(i);

if (carNumber.equals(_carNum)) {
bExist = true;
break;
}
}
return bExist;
}

private boolean isExistInList(List<WxCUserCar> list, String carNumber) {
boolean bExist = false;
for (WxCUserCar userCar : list) {
if (carNumber.equals(userCar.getCarNumber())) {
bExist = true;
break;
}
return etcpHelper.initForEtcp(paramMap, getMemberId(), park);
}else {
return parkFactory.getParkService(park.getVendorType()).initLogin(paramMap, park, getMember());
}
return bExist;
//return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "登录失败");
}

/**
@@ -263,192 +130,12 @@ public class WxCarController extends BaseController {
WxPark park = getCurrentPark(getTenantInfo());
// 2. get vendor params
if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
return etcpBindCar(paramMap, park, member.getId());
} else if (park.getVendorType() == EnumCarVendor.CAE_CYF.getCode()){
return cyfBindCar(paramMap,park,member);
} else {
// 内部操作
return bindCar(paramMap, park, member.getId());
}
}

private ResultData etcpBindCar(Map<String, String> paramMap, WxPark park, Long cuUserId) {
String etcpToken = paramMap.get("etcpToken");
if (StringUtils.isBlank(etcpToken)) {
logger.error("etcpToken为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
}
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");

String ret = "";
try {
ret = etcp.bindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber, null);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) {
addCarInfoToDB(carNumber, EnumCarVendor.CAR_ETCP, park, cuUserId);
JSONObject dataObj = retObj.getJSONObject("data");
return new ResultData(dataObj);
} else {
String message = retObj.getString("message");
logger.error("绑车牌失败: " + carNumber);
return new ResultData(ErrorCode.ETCP_BIND_FAIL.getCode(), message, retObj);
}
}


private ResultData bindCar(Map<String, String> paramMap, WxPark park, Long cuUserId) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
try {
addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()), park, cuUserId);
} catch (MallinkException e) {
return new ResultData(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
return new ResultData(500, e.getMessage());
}
return new ResultData();
}

private void addCarInfoToDB(String carNumber, EnumCarVendor carVendor, WxPark park, Long cuUserId) {
// 插入车牌
Date curr = new Date();
WxCUserCar userCar = new WxCUserCar();
userCar.setCUserId(cuUserId);
userCar.updateTenantInfo(park);
userCar.setCarNumber(carNumber);
userCar.setVendorType(carVendor.getCode());
userCar.setCreateDate(curr);
userCar.setUpdateDate(curr);
wxCUserCarService.saveOrUpdate(userCar);

// 成长值
wxScoreRulesService.addScore(userCar,EnumScoreType.BIND_CAR, userCar);
//增加积分
addCredit(park, cuUserId);
wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_CAR,cuUserId);
}

private ResultData tjdBindCar(@RequestBody Map<String, String> paramMap, WxPark park, Long cuUserId) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String carNumColor = paramMap.get("carNumColor");
//if (StringUtils.isBlank(carNumColor)) {
// logger.error("carNumColor为空");
// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumColor为空");
//}
Long newCarId = 0L;
String outCarId = paramMap.get("outCarId");
if (StringUtils.isBlank(outCarId)) {
logger.warn("outCarId为空");
newCarId = wxCUserCarService.getNewCarID();
outCarId = String.valueOf(newCarId);
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String partner = objParams.getString("partner");
String key = objParams.getString("key");
String version = objParams.getString("version");
String ret = tjd.registerCar(url, partner, key, version,
carNumber, carNumColor, null, outCarId);
JSONObject retObj = JSON.parseObject(ret);
retObj.put("vendor", park.getVendorType());
if (retObj.getString("returnCode").equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
ResultData e = tjdInsertToDB(carNumber, newCarId, retObj, park, cuUserId);
if (e != null) return e;
return new ResultData(retObj);
return etcpHelper.etcpBindCar(paramMap, park, member.getId());
} else {
return new ResultData(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败", retObj);
}
}

/**
* @description 车易付会员车辆信息注册
* @Params [paramMap, park, wxCUser]
* @return com.iformall.common.ResultData
* @Author furunxin
* @Date 2020/7/8 下午10:23
**/
private ResultData cyfBindCar(@RequestBody Map<String, String> paramMap, WxPark park,WxCUserBasicInfo member) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String token = objParams.getString("token");
int feeGroupId = objParams.getIntValue("feeGroupId");
String ret = cyf.registerCar(token,park.getNumber(),feeGroupId,park.getParkingId(),carNumber,member.getId(),member.getNickName());
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("result") == 1){
addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()), park, member.getId());
}else {
return new ResultData(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败", retObj);
return parkFactory.getParkService(park.getVendorType()).bindCar(paramMap, park, member);
}
return null;
}

private ResultData tjdInsertToDB(String carNumber, Long newCarId, JSONObject retObj, WxPark park, Long cuUserId) {
String carId = retObj.getString("carId");
// 插入车牌
Date curr = new Date();
WxCUserCar userCar = new WxCUserCar();
userCar.setId(newCarId);
userCar.setCUserId(cuUserId);
userCar.updateTenantInfo(park);
userCar.setCarNumber(carNumber);
userCar.setVendorType(EnumCarVendor.CAR_TJD.getCode());
JSONObject jo = new JSONObject();
jo.put("carId", carId);
userCar.setVendorParams(JSON.toJSONString(jo));
userCar.setCreateDate(curr);
userCar.setUpdateDate(curr);
try {
wxCUserCarService.save(userCar);
wxScoreRulesService.addScore(userCar,EnumScoreType.BIND_CAR, userCar);
//增加积分
addCredit(park, cuUserId);
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "TJD保存车牌失败, e:" + e.getMessage());
}

wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_CAR, cuUserId);
return null;
}

//-----增加积分start-----
private void addCredit(WxPark park, Long cuUserId){
WxCreditHistory wxCreditHistory = new WxCreditHistory();
wxCreditHistory.setCUserId(cuUserId);
wxCreditHistory.updateTenantInfo(park);
wxCreditHistory.setCreateDate(new Date());
wxCreditHistory.setCreditType(EnumScoreType.BIND_CAR.getCode());
wxCreditHistory.setOperatorType(EnumUserType.CUSER.getCode());
wxCreditHistory.setOperatorId(cuUserId);
wxCreditHistoryService.saveOrUpdate(wxCreditHistory);
}

/**
* 解绑车牌
@@ -467,117 +154,12 @@ public class WxCarController extends BaseController {
// 1, get mall's park
WxPark park = getCurrentPark(getTenantInfo());
if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) {
return etcpUnbindCar(paramMap, park, getMemberId());
return etcpHelper.etcpUnbindCar(paramMap, park, getMemberId());
} else {
return unbindCar(paramMap, park, getMemberId());
return parkFactory.getParkService(park.getVendorType()).unbindCar(paramMap, park, getMember());
}
}

private ResultData etcpUnbindCar(Map<String, String> paramMap, WxPark park, Long cuUserId) {
String etcpToken = paramMap.get("etcpToken");
if (StringUtils.isBlank(etcpToken)) {
logger.error("etcpToken为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
}
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");

String ret = "";
try {
ret = etcp.unbindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}

JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) {
try {
WxCUserCar userCar = new WxCUserCar();
userCar.setCUserId(cuUserId);
userCar.updateTenantInfo(park);
userCar.setCarNumber(carNumber);
wxCUserCarService.deleteByObj(userCar);
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage());
}

return new ResultData();
} else {
String message = retObj.getString("message");
logger.error("解绑车牌失败");
return new ResultData(ErrorCode.ETCP_UNBIND_FAIL.getCode(), message, retObj);
}
}

private ResultData unbindCar(Map<String, String> paramMap, WxPark park, Long cuUserId) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
try {
WxCUserCar userCar = new WxCUserCar();
userCar.updateTenantInfo(park);
userCar.setCUserId(cuUserId);
userCar.setCarNumber(carNumber);
wxCUserCarService.deleteByObj(userCar);
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage());
}

return new ResultData();
}

private ResultData tjdUnbindCar(@RequestBody Map<String, String> paramMap, WxPark park, Long userId) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
WxCUserCar queryOne = new WxCUserCar();
queryOne.setCarNumber(carNumber);
queryOne.updateTenantInfo(park);
queryOne.setCUserId(userId);
WxCUserCar userCar = wxCUserCarService.getOne(queryOne);
if (userCar != null) {
String params = userCar.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String carId = objParams.getString("carId");

params = park.getVendorParams();
String url = objParams.getString("url");
String partner = objParams.getString("partner");
String key = objParams.getString("key");
String version = objParams.getString("version");
String ret = tjd.writeOffCar(url, partner, key, version, carId);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString("returnCode").equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
try {
wxCUserCarService.deleteByObj(userCar);
} catch (Exception e) {
logger.error("解绑车牌数据库错误, e:" + e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage());
}

return new ResultData();
} else {
return new ResultData(ErrorCode.CAR_UNBIND_FAIL, "解绑车牌失败");
}
}
return null;
}

/**
* 停车费
*
@@ -624,152 +206,9 @@ public class WxCarController extends BaseController {
// 1, get mall's park
WxPark park = getCurrentPark(getTenantInfo());
if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) {
return etcpCarStopFee(paramMap, park);
} else if (park.getVendorType().equals(EnumCarVendor.CAR_TJD.getCode())) {
return tjdCarStopFee(paramMap, park);
} else if (park.getVendorType().equals(EnumCarVendor.CAR_DAHUA.getCode())) {
return dahuaCarStopFee(paramMap, park);
} else if (park.getVendorType().equals(EnumCarVendor.CAR_BOLINK.getCode())) {
return bolinkCarStopFee(paramMap, park);
}else if (park.getVendorType().equals(EnumCarVendor.CAE_CYF.getCode())){
return cyfCarStopFee(paramMap,park);
}
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费获取失败");
}

private ResultData dahuaCarStopFee(Map<String, String> paramMap, WxPark park) {
String carNumber = paramMap.get("carNumber");
String result = DaHuaUtil.plateCharge(carNumber, park.getParkId());
logger.info("大华查询车辆费用接口返回值:{}", result);
JSONObject jsonObject = JSONObject.parseObject(result);
String code = jsonObject.getString("code");
if (!code.equals(DaHuaUtil.SUCCESS_CODE)) {
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费获取失败");
}
Object data = jsonObject.get("data");
return new ResultData(data);
}

private ResultData etcpCarStopFee(@RequestBody Map<String, String> paramMap, WxPark park) {
String etcpToken = paramMap.get("etcpToken");
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(etcpToken)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
}
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String appId = objParams.getString("appId");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");

String ret = "";
try {
ret = etcp.orderUnpay(url, appId, merchantNo, merchantKey, version, etcpToken, carNumber);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}

JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) {
JSONObject feeObj = retObj.getJSONArray("data").getJSONObject(0);
/*
Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setTenantId(user.getTenantId());
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_UNPAY.getCode());
String feeStr = JSON.toJSONString(feeObj);
wxCarCmdLog.setCmdJson(feeStr);
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);
try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("etcpOrderUnpay: 入库错误:" + feeStr);
return new ResultData(ErrorCode.DB_FAIL.getCode(), "入库错误", feeStr);
}
*/
return new ResultData(Result.SUCCESS, "停车费获取成功", feeObj);
} else {
String message = retObj.getString("message");
return new ResultData(ErrorCode.ETCP_STOP_FEE_FAIL.getCode(), message, retObj);
}
}

private ResultData tjdCarStopFee(@RequestBody Map<String, String> paramMap, WxPark park) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(TJDUtil.TJD_URL);
String partner = objParams.getString(TJDUtil.TJD_ACCOUNT);
String key = objParams.getString(TJDUtil.TJD_ACCOUNT_KEY);
String version = objParams.getString(TJDUtil.TJD_VERSION);
String ret = tjd.infoForFreeMins(url, partner, key, version, carNumber);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
return new ResultData(retObj);
return etcpHelper.etcpCarStopFee(paramMap, park);
} else {
return new ResultData(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败");
}
}

private ResultData cyfCarStopFee(@RequestBody Map<String, String> paramMap, WxPark park){
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String token = objParams.getString("token");
String ret = cyf.getCarStopFee(token,park.getParkingId(),carNumber);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("result") == 1){
return new ResultData(retObj);
}else {
return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败");
}
}

private String getETCPBusinessID(Long merchantId) {
String businessId;
WxMerchant wxMerchant = wxMerchantService.getById(merchantId);
String carParams = wxMerchant.getCarParams();
JSONObject objParams1 = JSON.parseObject(carParams);
businessId = objParams1.getString("businessId");
return businessId;
}

private ResultData bolinkCarStopFee(@RequestBody Map<String, String> paramMap, WxPark park) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(BoLinkUtil.BOLINK_URL);
String comid = objParams.getString(BoLinkUtil.BOLINK_COMID);
String unionId = objParams.getString(BoLinkUtil.BOLINK_UNION_ID);
String key = objParams.getString(BoLinkUtil.BOLINK_KEY);
String ret = BoLinkUtil.getStopFee(url, comid, unionId, key, carNumber);
if (ret != null) {
JSONObject retObj = JSON.parseObject(ret);
JSONObject dataObj = retObj.getJSONObject(BoLinkUtil.BOLINK_DATA);
if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) {
return new ResultData(dataObj);
} else {
return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL);
}
} else {
return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL);
return parkFactory.getParkService(park.getVendorType()).carStopFee(paramMap, park);
}
}

@@ -815,161 +254,14 @@ public class WxCarController extends BaseController {
}

if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) {
String etcpToken = paramMap.get("etcpToken");
if (StringUtils.isBlank(etcpToken)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");
String businessId = "";
// 获取merchantId
WxMerchantVo merchantVo = null;
if (userCar.getMerchantVoList().size() > 0) {
merchantVo = userCar.getMerchantVoList().get(0);
}

// 优先从从商户表里取
businessId = getETCPBusinessID(merchantVo.getId());
if (StringUtils.isBlank(businessId)) {
// 1期只有一个虚拟商户,可以写在商场配置里
businessId = objParams.getString("businessId");
}

String ret = "";
try {
ret = etcp.bCouponRecord(url, merchantNo, merchantKey, version,
etcpToken, park.getParkId(), businessId, carNumber, String.valueOf(userCar.getCouponFreeId()));
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) {

// 券状态设为已使用
WxCouponOrder couponOrder = new WxCouponOrder();
couponOrder.setId(userCar.getId());
couponOrder.updateTenantInfo(park);
couponOrder.setUpdateDate(new Date());
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode());
try {
wxCouponOrderService.saveOrUpdate(couponOrder);
} catch (Exception e) {
logger.error("券包状态更新失败:" + couponOrderIdStr);
return new ResultData(ErrorCode.DB_FAIL.getCode(), "券包状态更新失败");
}
return new ResultData();
} else {
return new ResultData(ErrorCode.ETCP_QUAN_SEND_FAIL.getCode(), retObj.getString("message"));
}
} else if (park.getVendorType().equals(EnumCarVendor.CAR_TJD.getCode())) {
String tradeId = paramMap.get("tradeId");
String accountId = paramMap.get("accountId");
if (StringUtils.isBlank(tradeId)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "tradeId为空");
}
if (StringUtils.isBlank(accountId)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "accountId为空");
}
WxCoupon coupon = couponService.getById(userCar.getCouponId());
if (coupon == null) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(TJDUtil.TJD_URL);
String partner = objParams.getString(TJDUtil.TJD_ACCOUNT);
String key = objParams.getString(TJDUtil.TJD_ACCOUNT_KEY);
String version = objParams.getString(TJDUtil.TJD_VERSION);

String amount = "";
if (coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) {
amount = coupon.getPriceStr();
} else {
amount = String.valueOf(coupon.getPrice()* 60);
}

String ret = tjd.deductionForDetail(url, partner, key, version,
tradeId, accountId, String.valueOf(userCar.getId()),
coupon.getUnit().toString(), amount);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
return new ResultData();
} else {
return new ResultData(ErrorCode.CAR_DEDUCE_FEE_FAIL.getCode(), "停车费抵扣失败");
}
} else if (park.getVendorType().equals(EnumCarVendor.CAR_SHANGAN.getCode())) {
WxCoupon coupon = couponService.getById(userCar.getCouponId());
if (coupon == null) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(ShangAnUtil.SHANGAN_URL);
String key = objParams.getString(ShangAnUtil.SHANGAN_KEY);
String parkNumber = objParams.getString(ShangAnUtil.SHANGAN_PARK_NUMBER);

String couponModelId = coupon.getUnit().toString();
String position = "";
if (coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) {
position = coupon.getPrice().toString();
} else {
position = String.valueOf(coupon.getPrice()* 60);
}

String ret = ShangAnUtil.couponSend(url, key, parkNumber, couponModelId, userCar.getExpiredTime(), carNumber, position);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString(ShangAnUtil.SHANGAN_STATUS).equalsIgnoreCase(ShangAnUtil.SHANGAN_SUCCESS)) {
// 停车券-核销
try {
wxCouponOrderService.shangAnVerify(userCar.getId());
} catch (Exception e) {
logger.error(e.getMessage());
}
return new ResultData();
} else {
return new ResultData(ErrorCode.SHANGAN_COUPON_FAIL.getCode(), retObj.getString(ShangAnUtil.SHANGAN_ERROR_CODE));
}
} else if (park.getVendorType().equals(EnumCarVendor.CAR_BOLINK.getCode())) {
String orderId = paramMap.get("orderId");
if (StringUtils.isBlank(orderId)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId为空");
}
return etcpHelper.getCoupon(paramMap, park, userCar,carNumber);
} else {
WxCoupon coupon = couponService.getById(userCar.getCouponId());
if (coupon == null) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(BoLinkUtil.BOLINK_URL);
String comid = objParams.getString(BoLinkUtil.BOLINK_COMID);
String unionId = objParams.getString(BoLinkUtil.BOLINK_UNION_ID);
String key = objParams.getString(BoLinkUtil.BOLINK_KEY);

String amount = "";
if (coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) {
amount = coupon.getPriceStr();
} else {
amount = String.valueOf(coupon.getPrice()* 60);
}

String ret = BoLinkUtil.couponSend(url, comid, unionId, key,
carNumber,
orderId,
coupon.getUnit().toString(), amount);
JSONObject retObj = JSON.parseObject(ret);
JSONObject dataObj = retObj.getJSONObject(BoLinkUtil.BOLINK_DATA);
if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) {
return new ResultData(dataObj);
} else {
return new ResultData(ErrorCode.CAR_DEDUCE_FEE_FAIL);
}
}
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "优免券领取失败");
return parkFactory.getParkService(park.getVendorType()).getCoupon(paramMap, park, userCar, coupon, carNumber);
}
}

@ApiOperation("券包分页列表接口")
@@ -1000,72 +292,10 @@ public class WxCarController extends BaseController {
/// 1, get mall's park
WxPark park = getCurrentPark(getTenantInfo());
if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
ResultData e = etcpParkStatus(park);
ResultData e = etcpHelper.etcpParkStatus(park);
if (e != null) return e;
}
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "车场不支持");
}

private ResultData etcpParkStatus(WxPark park) {
String params = park.getVendorParams();
if (params == null) {
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "车场不支持");
}
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");
if (park.getParkingId() == null) {
// those code is not supported
/*
String lat = objParams.getString("lat");
String lon = objParams.getString("lon");
String radius = objParams.getString("radius");
String ret = etcp.parkingInfo(url, merchantNo, merchantKey, version, lat, lon, radius);
logger.info(ret);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) {
JSONObject retData = retObj.getJSONObject("data");
if (retData != null) {
JSONArray retDataList = retData.getJSONArray("list");
if (retDataList != null) {
JSONObject parkData = retDataList.getJSONObject(0);
if (parkData != null) {
String parkId = parkData.getString("id");
objParams.put("parkId", parkId);
params = JSON.toJSONString(objParams);
park.setVendorParams(params);
park.setParkingId(parkId);
wxParkService.saveOrUpdate(park);
}
}
}
}
*/
}

if (park.getParkingId() != null) {
String ret = "";
try {
ret = etcp.parkingStatus(url, merchantNo, merchantKey, version, park.getParkingId());
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}

JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) {
if (retObj.get("data") != null) {
return new ResultData(retObj.getJSONObject("data"));
}
}
}
return null;
}





}

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

@@ -0,0 +1,50 @@
package com.iformall.service.park;

import java.util.Map;

import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxPark;
import com.iformall.domain.vo.WxCouponOrderCarCVo;

public interface ParkAdapterService {
/**
* 停车场初始化登陆
* @param paramMap
* @param park
* @param member
* @return
*/
ResultData initLogin(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member);

/**
* 绑定车牌
* @param paramMap
* @param park
* @param cuUserId
* @return
*/
ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member);
/**
* 解绑车牌
*/
ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member);
/**
* 获取停车费
*/
ResultData carStopFee(Map<String, String> paramMap, WxPark park);
/**
* 获取停车优免券
*/
ResultData getCoupon(Map<String, String> paramMap,WxPark park,WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber);
/**
* 查询停车场状态
*/
ResultData getParkStatus(WxPark park);
}

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

@@ -0,0 +1,69 @@
package com.iformall.service.park;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.iformall.common.ErrorCode;
import com.iformall.enums.EnumCarVendor;
import com.iformall.exception.MallinkException;
import com.iformall.service.park.impl.bolink.BoLinkParkService;
import com.iformall.service.park.impl.cyf.CYFParkService;
import com.iformall.service.park.impl.dahua.DaHuaParkService;
import com.iformall.service.park.impl.shangan.ShangAnParkService;
import com.iformall.service.park.impl.tjd.TJDParkService;

@Service
public class ParkFactory {
@Autowired
CYFParkService cyfService;
@Autowired
BoLinkParkService bolinkService;
@Autowired
DaHuaParkService daHuaService;
@Autowired
ShangAnParkService shangAnService;
@Autowired
TJDParkService tjdService;
private Map<Integer,ParkAdapterService> parkServiceMap ;
private Map<Integer,EnumCarVendor> enumMap ;
private Map<Integer,ParkAdapterService> getServiceMap() {
if (null != parkServiceMap ) {
return parkServiceMap;
}
parkServiceMap = new ConcurrentHashMap<Integer,ParkAdapterService>();
//车易付
parkServiceMap.put(EnumCarVendor.CAE_CYF.getCode(), cyfService);
parkServiceMap.put(EnumCarVendor.CAR_BOLINK.getCode(), bolinkService);
parkServiceMap.put(EnumCarVendor.CAR_DAHUA.getCode(), daHuaService);
parkServiceMap.put(EnumCarVendor.CAR_SHANGAN.getCode(), shangAnService);
parkServiceMap.put(EnumCarVendor.CAR_TJD.getCode(), tjdService);
return parkServiceMap;
}
private Map<Integer,EnumCarVendor> getEnumMap() {
if (null != enumMap) {
return enumMap;
}
enumMap = new ConcurrentHashMap<Integer,EnumCarVendor>();
for (EnumCarVendor v : EnumCarVendor.values()) {
enumMap.put(v.getCode(), v);
}
return enumMap;
}
public ParkAdapterService getParkService(Integer code) {
EnumCarVendor vendor = getEnumMap().get(code);
if (null == vendor) {
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), code+"没有对应的ParkService");
}
return getServiceMap().get(vendor.getCode());
}

}

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

@@ -0,0 +1,33 @@
package com.iformall.service.park.impl;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxPark;
import com.iformall.service.park.impl.util.ParkHelper;

@Service
public class BaseParkService {

@Autowired
ParkHelper parkHelper;
protected ResultData defaultInitLogin(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
Map resultMap = new HashMap();
resultMap.put("vendor", park.getVendorType());
return new ResultData(resultMap);
}
protected ResultData defaultBindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return parkHelper.bindCar(paramMap, park, member.getId());
}
protected ResultData defaultUnbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return parkHelper.unbindCar(paramMap, park, member.getId());
}
}

+ 108
- 0
mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java Просмотреть файл

@@ -0,0 +1,108 @@
package com.iformall.service.park.impl.bolink;

import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxPark;
import com.iformall.domain.vo.WxCouponOrderCarCVo;
import com.iformall.enums.EnumCouponUnit;
import com.iformall.service.park.ParkAdapterService;
import com.iformall.service.park.impl.BaseParkService;
import com.iformall.utils.car.BoLinkUtil;

public class BoLinkParkService extends BaseParkService implements ParkAdapterService {

@Override
public ResultData initLogin(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultInitLogin(paramMap, park, member);
}
@Override
public ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultBindCar(paramMap, park, member);
}

@Override
public ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultUnbindCar(paramMap, park, member);
}

@Override
public ResultData carStopFee(Map<String, String> paramMap, WxPark park) {
return bolinkCarStopFee(paramMap, park);
}
private ResultData bolinkCarStopFee(Map<String, String> paramMap, WxPark park) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(BoLinkUtil.BOLINK_URL);
String comid = objParams.getString(BoLinkUtil.BOLINK_COMID);
String unionId = objParams.getString(BoLinkUtil.BOLINK_UNION_ID);
String key = objParams.getString(BoLinkUtil.BOLINK_KEY);
String ret = BoLinkUtil.getStopFee(url, comid, unionId, key, carNumber);
if (ret != null) {
JSONObject retObj = JSON.parseObject(ret);
JSONObject dataObj = retObj.getJSONObject(BoLinkUtil.BOLINK_DATA);
if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) {
return new ResultData(dataObj);
} else {
return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL);
}
} else {
return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL);
}
}

@Override
public ResultData getCoupon(Map<String, String> paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) {
String orderId = paramMap.get("orderId");
if (StringUtils.isBlank(orderId)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(BoLinkUtil.BOLINK_URL);
String comid = objParams.getString(BoLinkUtil.BOLINK_COMID);
String unionId = objParams.getString(BoLinkUtil.BOLINK_UNION_ID);
String key = objParams.getString(BoLinkUtil.BOLINK_KEY);

String amount = "";
if (coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) {
amount = coupon.getPriceStr();
} else {
amount = String.valueOf(coupon.getPrice()* 60);
}

String ret = BoLinkUtil.couponSend(url, comid, unionId, key,
carNumber,
orderId,
coupon.getUnit().toString(), amount);
JSONObject retObj = JSON.parseObject(ret);
JSONObject dataObj = retObj.getJSONObject(BoLinkUtil.BOLINK_DATA);
if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) {
return new ResultData(dataObj);
} else {
return new ResultData(ErrorCode.CAR_DEDUCE_FEE_FAIL);
}
}

@Override
public ResultData getParkStatus(WxPark park) {
return null;
}



}

+ 114
- 0
mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java Просмотреть файл

@@ -0,0 +1,114 @@
package com.iformall.service.park.impl.cyf;

import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxPark;
import com.iformall.domain.vo.WxCouponOrderCarCVo;
import com.iformall.enums.EnumCarVendor;
import com.iformall.service.park.ParkAdapterService;
import com.iformall.service.park.impl.BaseParkService;
import com.iformall.service.park.impl.util.ParkHelper;
import com.iformall.utils.car.CYFUtil;

@Service
public class CYFParkService extends BaseParkService implements ParkAdapterService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
ParkHelper parkHelper;
CYFUtil cyf = new CYFUtil();
@Override
public ResultData initLogin(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultInitLogin(paramMap, park, member);
}
@Override
public ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return cyfBindCar(paramMap,park,member);
}
/**
* @description 车易付会员车辆信息注册
* @Params [paramMap, park, wxCUser]
* @return com.iformall.common.ResultData
* @Author furunxin
* @Date 2020/7/8 下午10:23
**/
private ResultData cyfBindCar(@RequestBody Map<String, String> paramMap, WxPark park,WxCUserBasicInfo member) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String token = objParams.getString("token");
int feeGroupId = objParams.getIntValue("feeGroupId");
String ret = cyf.registerCar(token,park.getNumber(),feeGroupId,park.getParkingId(),carNumber,member.getId(),member.getNickName());
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("result") == 1){
parkHelper.addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()), park, member.getId());
}else {
return new ResultData(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败", retObj);
}
return new ResultData();
}


@Override
public ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultUnbindCar(paramMap, park, member);
}


@Override
public ResultData carStopFee(Map<String, String> paramMap, WxPark park) {
return cyfCarStopFee(paramMap, park);
}
private ResultData cyfCarStopFee(Map<String, String> paramMap, WxPark park){
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String token = objParams.getString("token");
String ret = cyf.getCarStopFee(token,park.getParkingId(),carNumber);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("result") == 1){
return new ResultData(retObj);
}else {
return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败");
}
}

@Override
public ResultData getCoupon(Map<String, String> paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) {
return null;
}

@Override
public ResultData getParkStatus(WxPark park) {
return null;
}

}

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

@@ -0,0 +1,68 @@
package com.iformall.service.park.impl.dahua;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSONObject;
import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxPark;
import com.iformall.domain.vo.WxCouponOrderCarCVo;
import com.iformall.service.park.ParkAdapterService;
import com.iformall.service.park.impl.BaseParkService;
import com.iformall.utils.car.DaHuaUtil;

public class DaHuaParkService extends BaseParkService implements ParkAdapterService {

private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public ResultData initLogin(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultInitLogin(paramMap, park, member);
}
@Override
public ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultBindCar(paramMap, park, member);
}

@Override
public ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultUnbindCar(paramMap, park, member);
}

@Override
public ResultData carStopFee(Map<String, String> paramMap, WxPark park) {
return dahuaCarStopFee(paramMap, park);
}
private ResultData dahuaCarStopFee(Map<String, String> paramMap, WxPark park) {
String carNumber = paramMap.get("carNumber");
String result = DaHuaUtil.plateCharge(carNumber, park.getParkId());
logger.info("大华查询车辆费用接口返回值:{}", result);
JSONObject jsonObject = JSONObject.parseObject(result);
String code = jsonObject.getString("code");
if (!code.equals(DaHuaUtil.SUCCESS_CODE)) {
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费获取失败");
}
Object data = jsonObject.get("data");
return new ResultData(data);
}

@Override
public ResultData getCoupon(Map<String, String> paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) {
return null;
}


@Override
public ResultData getParkStatus(WxPark park) {
return null;
}

}

+ 451
- 0
mallinkService/src/main/java/com/iformall/service/park/impl/etcp/EtcpHelper.java Просмотреть файл

@@ -0,0 +1,451 @@
package com.iformall.service.park.impl.etcp;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.iformall.common.ErrorCode;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCUserCar;
import com.iformall.domain.po.WxCouponOrder;
import com.iformall.domain.po.WxMerchant;
import com.iformall.domain.po.WxPark;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.WxCouponOrderCarCVo;
import com.iformall.domain.vo.WxMerchantVo;
import com.iformall.enums.EnumCarVendor;
import com.iformall.enums.EnumCouponOrderStatus;
import com.iformall.enums.EnumETCPCode;
import com.iformall.exception.MallinkException;
import com.iformall.service.WxCUserBasicInfoService;
import com.iformall.service.WxCUserCarService;
import com.iformall.service.WxCouponOrderService;
import com.iformall.service.WxMerchantService;
import com.iformall.service.park.impl.util.ParkHelper;
import com.iformall.utils.car.ETCPUtil;

@Service
public class EtcpHelper {

private final Logger logger = LoggerFactory.getLogger(EtcpHelper.class);
private ETCPUtil etcp = new ETCPUtil();
@Autowired
WxCUserBasicInfoService wxCUserBasicInfoService;
@Autowired
WxCUserCarService wxCUserCarService;
@Autowired
WxMerchantService wxMerchantService;
@Autowired
WxCouponOrderService wxCouponOrderService;
@Autowired
ParkHelper parkHelper;
public ResultData initForEtcp(Map<String, String> paramMap, Long userId, WxPark park) {
String phone = paramMap.get("phone");
WxCUserBasicInfo user = wxCUserBasicInfoService.getById(userId);
if (StringUtils.isBlank(phone) && StringUtils.isBlank(user.getPhone())) {
logger.error("暂未成为会员,请授权手机号");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "暂未成为会员,请授权手机号");
}
if (!StringUtils.isBlank(user.getPhone()) && !user.getPhone().contains("*")) {
phone = user.getPhone();
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String appId = objParams.getString("appId");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");

String ret = "";
try {
ret = etcp.userSignin(url, appId, merchantNo, merchantKey, version, phone);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) {
// 获取绑定的车牌
JSONObject dataObj = retObj.getJSONObject("data");
dataObj.put("vendor", EnumCarVendor.CAR_ETCP.getCode());
String etcpToken = dataObj.getString("token");
try {
JSONObject dataObj1 = etcpSyncCarNumbers(park, user.getId(), park.getVendorType(),
url, merchantNo, merchantKey, version,
etcpToken);
} catch (MallinkException e) {
logger.error("ETCP cmd error: " + e.getMessage());
}
// c端必须保存此token
return new ResultData(dataObj);
} else {
logger.error("共同登录失败: " + phone);
return new ResultData(ErrorCode.ETCP_LOGIN_FAIL.getCode(), "共同登录失败");
}
}

/**
* ETCP同步
*
* @param tenantEntity
* @param cUserId
* @param iVendorType
* @param url
* @param merchantNo
* @param merchantKey
* @param version
* @param etcpToken
* @return
*/
private JSONObject etcpSyncCarNumbers(TenantEntity tenantEntity, Long cUserId, int iVendorType,
String url, String merchantNo, String merchantKey, String version,
String etcpToken) {
String ret;
JSONObject retObj;
/*{"code": 0,"msg": "ok","data": {"number": 3,"carList": ["晋 BMZ105","云 C12345"]}} */
try {
ret = etcp.carNum(url, merchantNo, merchantKey, version, etcpToken);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
throw new MallinkException(e.getErrorCode(), e.getMessage());
}
retObj = JSON.parseObject(ret);
JSONObject dataObj1 = retObj.getJSONObject("data");
dataObj1.put("vendor", iVendorType);
JSONArray arr = dataObj1.getJSONArray("carList");
WxCUserCar queryUserCar = new WxCUserCar();
queryUserCar.setCUserId(cUserId);
List<WxCUserCar> uclist = wxCUserCarService.getList(queryUserCar);
// 删除ETCP不存在
for (WxCUserCar userCar : uclist) {
boolean bExist = isExistInArray(arr, userCar.getCarNumber());
if (!bExist) {
wxCUserCarService.deleteById(userCar.getId());
uclist.remove(userCar);
}
}
// 添加ETCP的
for (int i = 0; i < arr.size(); i++) {
String _carNum = arr.getString(i);
boolean bExist = isExistInList(uclist, _carNum);
if (!bExist) {
Date curr = new Date();
WxCUserCar userCar = new WxCUserCar();
userCar.setCUserId(cUserId);
userCar.updateTenantInfo(tenantEntity);
userCar.setCarNumber(_carNum);
userCar.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
userCar.setCreateDate(curr);
userCar.setUpdateDate(curr);
wxCUserCarService.saveOrUpdate(userCar);
}
}
return dataObj1;
}

private boolean isExistInArray(JSONArray arr, String carNumber) {
boolean bExist = false;
for (int i = 0; i < arr.size(); i++) {
// check carNum+cUserId是否存在, 不存在新建
String _carNum = arr.getString(i);

if (carNumber.equals(_carNum)) {
bExist = true;
break;
}
}
return bExist;
}

private boolean isExistInList(List<WxCUserCar> list, String carNumber) {
boolean bExist = false;
for (WxCUserCar userCar : list) {
if (carNumber.equals(userCar.getCarNumber())) {
bExist = true;
break;
}
}
return bExist;
}
public ResultData etcpBindCar(Map<String, String> paramMap, WxPark park, Long cuUserId) {
String etcpToken = paramMap.get("etcpToken");
if (StringUtils.isBlank(etcpToken)) {
logger.error("etcpToken为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
}
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");

String ret = "";
try {
ret = etcp.bindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber, null);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) {
parkHelper.addCarInfoToDB(carNumber, EnumCarVendor.CAR_ETCP, park, cuUserId);
JSONObject dataObj = retObj.getJSONObject("data");
return new ResultData(dataObj);
} else {
String message = retObj.getString("message");
logger.error("绑车牌失败: " + carNumber);
return new ResultData(ErrorCode.ETCP_BIND_FAIL.getCode(), message, retObj);
}
}
public ResultData etcpUnbindCar(Map<String, String> paramMap, WxPark park, Long cuUserId) {
String etcpToken = paramMap.get("etcpToken");
if (StringUtils.isBlank(etcpToken)) {
logger.error("etcpToken为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
}
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");

String ret = "";
try {
ret = etcp.unbindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}

JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) {
try {
WxCUserCar userCar = new WxCUserCar();
userCar.setCUserId(cuUserId);
userCar.updateTenantInfo(park);
userCar.setCarNumber(carNumber);
wxCUserCarService.deleteByObj(userCar);
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage());
}

return new ResultData();
} else {
String message = retObj.getString("message");
logger.error("解绑车牌失败");
return new ResultData(ErrorCode.ETCP_UNBIND_FAIL.getCode(), message, retObj);
}
}
public ResultData etcpCarStopFee(@RequestBody Map<String, String> paramMap, WxPark park) {
String etcpToken = paramMap.get("etcpToken");
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(etcpToken)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
}
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String appId = objParams.getString("appId");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");

String ret = "";
try {
ret = etcp.orderUnpay(url, appId, merchantNo, merchantKey, version, etcpToken, carNumber);
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}

JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) {
JSONObject feeObj = retObj.getJSONArray("data").getJSONObject(0);
/*
Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setTenantId(user.getTenantId());
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_UNPAY.getCode());
String feeStr = JSON.toJSONString(feeObj);
wxCarCmdLog.setCmdJson(feeStr);
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);
try {
wxCarCmdLogService.saveOrUpdate(wxCarCmdLog);
} catch (Exception e) {
logger.error("etcpOrderUnpay: 入库错误:" + feeStr);
return new ResultData(ErrorCode.DB_FAIL.getCode(), "入库错误", feeStr);
}
*/
return new ResultData(Result.SUCCESS, "停车费获取成功", feeObj);
} else {
String message = retObj.getString("message");
return new ResultData(ErrorCode.ETCP_STOP_FEE_FAIL.getCode(), message, retObj);
}
}
private String getETCPBusinessID(Long merchantId) {
String businessId;
WxMerchant wxMerchant = wxMerchantService.getById(merchantId);
String carParams = wxMerchant.getCarParams();
JSONObject objParams1 = JSON.parseObject(carParams);
businessId = objParams1.getString("businessId");
return businessId;
}
public ResultData getCoupon(Map<String, String> paramMap,WxPark park,WxCouponOrderCarCVo userCar,String carNumber) {
String etcpToken = paramMap.get("etcpToken");
if (StringUtils.isBlank(etcpToken)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");
String businessId = "";
// 获取merchantId
WxMerchantVo merchantVo = null;
if (userCar.getMerchantVoList().size() > 0) {
merchantVo = userCar.getMerchantVoList().get(0);
}

// 优先从从商户表里取
businessId = getETCPBusinessID(merchantVo.getId());
if (StringUtils.isBlank(businessId)) {
// 1期只有一个虚拟商户,可以写在商场配置里
businessId = objParams.getString("businessId");
}

String ret = "";
try {
ret = etcp.bCouponRecord(url, merchantNo, merchantKey, version,
etcpToken, park.getParkId(), businessId, carNumber, String.valueOf(userCar.getCouponFreeId()));
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) {

// 券状态设为已使用
WxCouponOrder couponOrder = new WxCouponOrder();
couponOrder.setId(userCar.getId());
couponOrder.updateTenantInfo(park);
couponOrder.setUpdateDate(new Date());
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode());
try {
wxCouponOrderService.saveOrUpdate(couponOrder);
} catch (Exception e) {
logger.error("券包状态更新失败:" + couponOrder.getId());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "券包状态更新失败");
}
return new ResultData();
} else {
return new ResultData(ErrorCode.ETCP_QUAN_SEND_FAIL.getCode(), retObj.getString("message"));
}
}
public ResultData etcpParkStatus(WxPark park) {
String params = park.getVendorParams();
if (params == null) {
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "车场不支持");
}
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String merchantNo = objParams.getString("merchantNo");
String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version");
if (park.getParkingId() == null) {
// those code is not supported
/*
String lat = objParams.getString("lat");
String lon = objParams.getString("lon");
String radius = objParams.getString("radius");
String ret = etcp.parkingInfo(url, merchantNo, merchantKey, version, lat, lon, radius);
logger.info(ret);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) {
JSONObject retData = retObj.getJSONObject("data");
if (retData != null) {
JSONArray retDataList = retData.getJSONArray("list");
if (retDataList != null) {
JSONObject parkData = retDataList.getJSONObject(0);
if (parkData != null) {
String parkId = parkData.getString("id");
objParams.put("parkId", parkId);
params = JSON.toJSONString(objParams);
park.setVendorParams(params);
park.setParkingId(parkId);
wxParkService.saveOrUpdate(park);
}
}
}
}
*/
}

if (park.getParkingId() != null) {
String ret = "";
try {
ret = etcp.parkingStatus(url, merchantNo, merchantKey, version, park.getParkingId());
} catch (MallinkException e) {
logger.error("ETCP failed: " + e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}

JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) {
if (retObj.get("data") != null) {
return new ResultData(retObj.getJSONObject("data"));
}
}
}
return null;
}
}

+ 88
- 0
mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java Просмотреть файл

@@ -0,0 +1,88 @@
package com.iformall.service.park.impl.shangan;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxPark;
import com.iformall.domain.vo.WxCouponOrderCarCVo;
import com.iformall.enums.EnumCouponUnit;
import com.iformall.service.WxCouponOrderService;
import com.iformall.service.WxCouponService;
import com.iformall.service.park.ParkAdapterService;
import com.iformall.service.park.impl.BaseParkService;
import com.iformall.utils.car.ShangAnUtil;

public class ShangAnParkService extends BaseParkService implements ParkAdapterService{

private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
WxCouponOrderService wxCouponOrderService;
@Override
public ResultData initLogin(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultInitLogin(paramMap, park, member);
}
@Override
public ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultBindCar(paramMap, park, member);
}

@Override
public ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultUnbindCar(paramMap, park, member);
}

@Override
public ResultData carStopFee(Map<String, String> paramMap, WxPark park) {
// TODO Auto-generated method stub
return null;
}

@Override
public ResultData getCoupon(Map<String, String> paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) {
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(ShangAnUtil.SHANGAN_URL);
String key = objParams.getString(ShangAnUtil.SHANGAN_KEY);
String parkNumber = objParams.getString(ShangAnUtil.SHANGAN_PARK_NUMBER);

String couponModelId = coupon.getUnit().toString();
String position = "";
if (coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) {
position = coupon.getPrice().toString();
} else {
position = String.valueOf(coupon.getPrice()* 60);
}

String ret = ShangAnUtil.couponSend(url, key, parkNumber, couponModelId, userCar.getExpiredTime(), carNumber, position);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString(ShangAnUtil.SHANGAN_STATUS).equalsIgnoreCase(ShangAnUtil.SHANGAN_SUCCESS)) {
// 停车券-核销
try {
wxCouponOrderService.shangAnVerify(userCar.getId());
} catch (Exception e) {
logger.error(e.getMessage());
}
return new ResultData();
} else {
return new ResultData(ErrorCode.SHANGAN_COUPON_FAIL.getCode(), retObj.getString(ShangAnUtil.SHANGAN_ERROR_CODE));
}
}

@Override
public ResultData getParkStatus(WxPark park) {
return null;
}
}

+ 246
- 0
mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java Просмотреть файл

@@ -0,0 +1,246 @@
package com.iformall.service.park.impl.tjd;

import java.util.Date;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxCUserCar;
import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxPark;
import com.iformall.domain.vo.WxCouponOrderCarCVo;
import com.iformall.enums.EnumAssignTagsTrigger;
import com.iformall.enums.EnumCarVendor;
import com.iformall.enums.EnumCouponUnit;
import com.iformall.enums.EnumScoreType;
import com.iformall.enums.EnumTJDCode;
import com.iformall.service.WxCUserCarService;
import com.iformall.service.WxCUserTagsService;
import com.iformall.service.WxCouponService;
import com.iformall.service.WxScoreRulesService;
import com.iformall.service.park.ParkAdapterService;
import com.iformall.service.park.impl.BaseParkService;
import com.iformall.service.park.impl.util.ParkHelper;
import com.iformall.utils.car.TJDUtil;

public class TJDParkService extends BaseParkService implements ParkAdapterService {

private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
ParkHelper parkHelper;
TJDUtil tjd = new TJDUtil();
@Autowired
WxCUserCarService wxCUserCarService;
@Autowired
WxScoreRulesService wxScoreRulesService;
@Autowired
WxCUserTagsService wxCUserTagsService;
@Autowired
WxCouponService couponService;
@Override
public ResultData initLogin(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return super.defaultInitLogin(paramMap, park, member);
}
@Override
public ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return tjdBindCar(paramMap,park,member.getId());
}

private ResultData tjdBindCar(Map<String, String> paramMap, WxPark park, Long cuUserId) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String carNumColor = paramMap.get("carNumColor");
//if (StringUtils.isBlank(carNumColor)) {
// logger.error("carNumColor为空");
// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumColor为空");
//}
Long newCarId = 0L;
String outCarId = paramMap.get("outCarId");
if (StringUtils.isBlank(outCarId)) {
logger.warn("outCarId为空");
newCarId = wxCUserCarService.getNewCarID();
outCarId = String.valueOf(newCarId);
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url");
String partner = objParams.getString("partner");
String key = objParams.getString("key");
String version = objParams.getString("version");
String ret = tjd.registerCar(url, partner, key, version,
carNumber, carNumColor, null, outCarId);
JSONObject retObj = JSON.parseObject(ret);
retObj.put("vendor", park.getVendorType());
if (retObj.getString("returnCode").equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
ResultData e = tjdInsertToDB(carNumber, newCarId, retObj, park, cuUserId);
if (e != null) return e;
return new ResultData(retObj);
} else {
return new ResultData(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败", retObj);
}
}


private ResultData tjdInsertToDB(String carNumber, Long newCarId, JSONObject retObj, WxPark park, Long cuUserId) {
String carId = retObj.getString("carId");
// 插入车牌
Date curr = new Date();
WxCUserCar userCar = new WxCUserCar();
userCar.setId(newCarId);
userCar.setCUserId(cuUserId);
userCar.updateTenantInfo(park);
userCar.setCarNumber(carNumber);
userCar.setVendorType(EnumCarVendor.CAR_TJD.getCode());
JSONObject jo = new JSONObject();
jo.put("carId", carId);
userCar.setVendorParams(JSON.toJSONString(jo));
userCar.setCreateDate(curr);
userCar.setUpdateDate(curr);
try {
wxCUserCarService.save(userCar);
wxScoreRulesService.addScore(userCar,EnumScoreType.BIND_CAR, userCar);
//增加积分
parkHelper.addCredit(park, cuUserId);
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "TJD保存车牌失败, e:" + e.getMessage());
}
wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_CAR, cuUserId);
return new ResultData();
}


@Override
public ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) {
return tjdUnbindCar(paramMap,park,member.getId());
}
private ResultData tjdUnbindCar(Map<String, String> paramMap, WxPark park, Long userId) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
WxCUserCar queryOne = new WxCUserCar();
queryOne.setCarNumber(carNumber);
queryOne.updateTenantInfo(park);
queryOne.setCUserId(userId);
WxCUserCar userCar = wxCUserCarService.getOne(queryOne);
if (userCar != null) {
String params = userCar.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String carId = objParams.getString("carId");

params = park.getVendorParams();
String url = objParams.getString("url");
String partner = objParams.getString("partner");
String key = objParams.getString("key");
String version = objParams.getString("version");
String ret = tjd.writeOffCar(url, partner, key, version, carId);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString("returnCode").equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
try {
wxCUserCarService.deleteByObj(userCar);
} catch (Exception e) {
logger.error("解绑车牌数据库错误, e:" + e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage());
}

return new ResultData();
} else {
return new ResultData(ErrorCode.CAR_UNBIND_FAIL, "解绑车牌失败");
}
}
return new ResultData();
}


@Override
public ResultData carStopFee(Map<String, String> paramMap, WxPark park) {
return tjdCarStopFee(paramMap, park);
}
private ResultData tjdCarStopFee(@RequestBody Map<String, String> paramMap, WxPark park) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(TJDUtil.TJD_URL);
String partner = objParams.getString(TJDUtil.TJD_ACCOUNT);
String key = objParams.getString(TJDUtil.TJD_ACCOUNT_KEY);
String version = objParams.getString(TJDUtil.TJD_VERSION);
String ret = tjd.infoForFreeMins(url, partner, key, version, carNumber);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
return new ResultData(retObj);
} else {
return new ResultData(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败");
}
}


@Override
public ResultData getCoupon(Map<String, String> paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) {
String tradeId = paramMap.get("tradeId");
String accountId = paramMap.get("accountId");
if (StringUtils.isBlank(tradeId)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "tradeId为空");
}
if (StringUtils.isBlank(accountId)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "accountId为空");
}
String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString(TJDUtil.TJD_URL);
String partner = objParams.getString(TJDUtil.TJD_ACCOUNT);
String key = objParams.getString(TJDUtil.TJD_ACCOUNT_KEY);
String version = objParams.getString(TJDUtil.TJD_VERSION);

String amount = "";
if (coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) {
amount = coupon.getPriceStr();
} else {
amount = String.valueOf(coupon.getPrice()* 60);
}

String ret = tjd.deductionForDetail(url, partner, key, version,
tradeId, accountId, String.valueOf(userCar.getId()),
coupon.getUnit().toString(), amount);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) {
return new ResultData();
} else {
return new ResultData(ErrorCode.CAR_DEDUCE_FEE_FAIL.getCode(), "停车费抵扣失败");
}
}

@Override
public ResultData getParkStatus(WxPark park) {
return null;
}

}

+ 109
- 0
mallinkService/src/main/java/com/iformall/service/park/impl/util/ParkHelper.java Просмотреть файл

@@ -0,0 +1,109 @@
package com.iformall.service.park.impl.util;

import java.util.Date;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUserCar;
import com.iformall.domain.po.WxCreditHistory;
import com.iformall.domain.po.WxPark;
import com.iformall.enums.EnumAssignTagsTrigger;
import com.iformall.enums.EnumCarVendor;
import com.iformall.enums.EnumScoreType;
import com.iformall.enums.EnumUserType;
import com.iformall.exception.MallinkException;
import com.iformall.service.WxCUserCarService;
import com.iformall.service.WxCUserTagsService;
import com.iformall.service.WxCreditHistoryService;
import com.iformall.service.WxScoreRulesService;

@Service
public class ParkHelper {
private final Logger logger = LoggerFactory.getLogger(ParkHelper.class);
@Autowired
WxCUserCarService wxCUserCarService;
@Autowired
WxScoreRulesService wxScoreRulesService;
@Autowired
WxCUserTagsService wxCUserTagsService;
@Autowired
WxCreditHistoryService wxCreditHistoryService;
public ResultData bindCar(Map<String, String> paramMap, WxPark park, Long cuUserId) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
try {
addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()), park, cuUserId);
} catch (MallinkException e) {
return new ResultData(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
return new ResultData(500, e.getMessage());
}
return new ResultData();
}
public void addCarInfoToDB(String carNumber, EnumCarVendor carVendor, WxPark park, Long cuUserId) {
// 插入车牌
Date curr = new Date();
WxCUserCar userCar = new WxCUserCar();
userCar.setCUserId(cuUserId);
userCar.updateTenantInfo(park);
userCar.setCarNumber(carNumber);
userCar.setVendorType(carVendor.getCode());
userCar.setCreateDate(curr);
userCar.setUpdateDate(curr);
wxCUserCarService.saveOrUpdate(userCar);

// 成长值
wxScoreRulesService.addScore(userCar,EnumScoreType.BIND_CAR, userCar);
//增加积分
addCredit(park, cuUserId);
wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_CAR,cuUserId);
}
//-----增加积分start-----
public void addCredit(WxPark park, Long cuUserId){
WxCreditHistory wxCreditHistory = new WxCreditHistory();
wxCreditHistory.setCUserId(cuUserId);
wxCreditHistory.updateTenantInfo(park);
wxCreditHistory.setCreateDate(new Date());
wxCreditHistory.setCreditType(EnumScoreType.BIND_CAR.getCode());
wxCreditHistory.setOperatorType(EnumUserType.CUSER.getCode());
wxCreditHistory.setOperatorId(cuUserId);
wxCreditHistoryService.saveOrUpdate(wxCreditHistory);
}
public ResultData unbindCar(Map<String, String> paramMap, WxPark park, Long cuUserId) {
String carNumber = paramMap.get("carNumber");
if (StringUtils.isBlank(carNumber)) {
logger.error("carNumber为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空");
}
try {
WxCUserCar userCar = new WxCUserCar();
userCar.updateTenantInfo(park);
userCar.setCUserId(cuUserId);
userCar.setCarNumber(carNumber);
wxCUserCarService.deleteByObj(userCar);
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage());
}

return new ResultData();
}
}

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