Explorar el Código

[车流][新增|修复]:Admin端车流相关API及回调函数,C端车流api实现整理

release_toaliyun_real
Stormeye.Wu hace 7 años
padre
commit
8263e05598
Se han modificado 2 ficheros con 379 adiciones y 268 borrados
  1. +283
    -0
      mallinkAdmin/src/main/java/com/simple/controller/WxCarController.java
  2. +96
    -268
      mallinkCApi/src/main/java/com/simple/controller/WxCarController.java

+ 283
- 0
mallinkAdmin/src/main/java/com/simple/controller/WxCarController.java Ver fichero

@@ -0,0 +1,283 @@
package com.simple.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.simple.common.ErrorCode;
import com.simple.common.Result;
import com.simple.common.ResultData;
import com.simple.domain.po.*;
import com.simple.enums.EnumCarVendor;
import com.simple.service.WxCUserCarService;
import com.simple.service.WxMerchantService;
import com.simple.service.WxParkService;
import com.simple.utils.ETCPUtil;
import com.simple.utils.TJDCarUtil;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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

@RestController
@RequestMapping("/api/car")
public class WxCarController extends BaseController
{
private Logger logger = Logger.getLogger(WxCarController.class);

ETCPUtil etcp = new ETCPUtil();

TJDCarUtil tjd = new TJDCarUtil();

@Autowired
WxParkService wxParkService;

@Autowired
WxCUserCarService wxCUserCarService;

@Autowired
WxMerchantService wxMerchantService;

private WxPark getCurrentPark(MallUserInfo user) {
WxPark wxPark = wxParkService.getByTenantId(user.getTenantId());
// 1, get mall's park
// future use redis to optimize
return wxPark;
}

@ApiOperation(value = "获取车场支持的厂家",notes="")
@GetMapping("/getVendor")
public ResultData getVendor() {
MallUserInfo user = getUser();
// 1, get mall's park
WxPark park = getCurrentPark(user);
Map map = new HashMap();
map.put("vendor", park.getVendorType());
return new ResultData(map);
}

// 优免券模板
/*
{
"id": 4974, //优免券模板 ID
"parkId": "fbqXUlfVvfc=", //车场标识
"businessId": "ZcWQ26TeJuQ=", //商家标识
title -- "businessName": "天洋广场", //商家名称
subtitle -- "name": "商家 1 小时优免券", //优免券名称
"category": "1", //优免券类型 1:小时优惠券,2:金额优惠券,3:折扣优惠券,4:免费券
price -- "categoryValue": "1.00", //优免券价值
total -- "amount": 100000, //优免券数量
valid_start_date -- "effectiveStart": "2018-02-01", //生效开始时间
valid_end_date -- "effectiveEnd": "2028-02-01",//生效结束时间
-"couponType": "0",//优惠券类型
number 库存 -- "avaliavleNum": 99993 //可用优惠券
},
*/
@ApiOperation(value = "优免券模板", notes = "{\"merchantId\":\"商户ID\"}\n输出\n" +
"{\n" +
"\"data\":{" +
"\"count\": 4," +
"\"couponPlatformModels\": [\n" +
" {\n" +
" \"id\": 4974, //优免券模板 ID\n" +
" \"parkId\": \"fbqXUlfVvfc=\", //车场标识" +
" \"businessId\": \"ZcWQ26TeJuQ=\", //商家标识" +
" \"businessName\": \"天洋广场\", //商家名称" +
" \"name\": \"商家 1 小时优免券\", //优免券名称" +
" \"category\": \"1\", //优免券类型\n 1:小时优惠券,2:金额优惠券,3:折扣优惠券,4:免费券" +
" \"categoryValue\": \"1.00\", //优免券价值\n" +
" \"amount\": 100000, //优免券数量\n" +
" \"effectiveStart\": \"2018-02-01\", //生效开始时间\n" +
" \"effectiveEnd\": \"2028-02-01\",//生效结束时间\n" +
" \"couponType\": \"0\",//优惠券类型\n" +
" \"avaliavleNum\": 99993 //可用优惠券\n" +
" },\n" +
" {...},\n" +
" {...}\n" +
" ]}}\n")
@PostMapping("/quanTemplate")
public ResultData quanTemplate(Map<String, String > paramMap) {
MallUserInfo user = getUser();
/// 1, get mall's park
WxPark park = getCurrentPark(user);
if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
String merchantIdStr = paramMap.get("merchantId");
if (StringUtils.isBlank(merchantIdStr)) {
// 优先从从商户表里取
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "merchantId为空");
}
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 parkId = objParams.getString("parkId");
// bussinessId from 参数信息
String businessId = "";
// 优先从从商户表里取
businessId = getETCPBusinessID(merchantIdStr);
if (StringUtils.isBlank(businessId)) {
// 1期只有一个虚拟商户,可以写在商场配置里
businessId = objParams.getString("businessId");
}
String ret = etcp.getBCouponList(url, merchantNo, merchantKey, version, parkId, businessId);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) {
return new ResultData(retObj.getJSONObject("data"));
} else {
return new ResultData(ErrorCode.ETCP_QUAN_TEMP_FAIL.getCode(), "优免券模板未发现");
}
}
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "优免券模板失败");
}

private String getETCPBusinessID(String merchantIdStr) {
String businessId;
Long merchantId = 0L;
try {
merchantId = Long.valueOf(merchantIdStr);
} catch (NumberFormatException e) {
logger.error(e.getMessage());
}
WxMerchant wxMerchant = wxMerchantService.getById(merchantId);
String carParams = wxMerchant.getCarParams();
JSONObject objParams1 = JSON.parseObject(carParams);
businessId = objParams1.getString("businessId");
return businessId;
}

/**
* ETCP 车辆入场通知
*/
@RequestMapping(value = "/etcpParkInCallback")
public Result etcpParkInCallback(@RequestParam Map<String,String> param) {
/*
{
"synId": "4ebd80ff-cfcf-462a-94cb-727e9fa9547c",
"plateNumber": "渝 ATX061",
"parkName": "ETCP 智慧停车场",
"parkId": "1",
"entranceTime": "2017-08-20 12:59:54",
"userType": "76",
"pushTime": "2017-08-20 12:59:57",
"fixParkingId": "U7",
"remainingDays": "11" }
*/
return new Result(0, "ok");
}

/**
* ETCP 车辆出场通知
*/
@RequestMapping(value = "/etcpParkOutCallback")
public Result etcpParkOutCallback(@RequestParam Map<String,String> param) {
/*
{
"synId": "fd92f645-880e-4c2a-9d7d-7081a2488181",
"plateNumber": "渝 ATX061",
"parkName": "ETCP 智慧停车场",
"parkId": "1",
"entranceTime": "2017-08-17 18:44:19",
"userType": "76",
"pushTime": "2017-08-20 11:57:51",
"exitTime": "2017-08-19 12:07:19",
"stayedTime": 148980,
"receivableFee": 0,
"paidServiceFee": 0,
"fixParkingId": "U7",
"remainingDays": "12"
}
*/
return new Result(0, "ok");
}

/**
* ETCP 车辆解绑通知
*/
@RequestMapping(value = "/etcpUnbindCarCallBack")
public Result etcpUnbindCarCallBack(@RequestParam Map<String,String> param) {
/*
{
"plateNumber": "渝 ATX061",
"time": "2017-08-20 11:57:51"
}
*/
return new Result(0, "ok");
}

/**
* ETCP 主动支付结果通知
*/
@RequestMapping(value = "/etcpPaidCallback")
public Result etcpPaidCallback(@RequestParam Map<String,String> param) {
/*
{
"plateNumber": "渝 ATX061",
"orderId": "fd92f645-880e-4c2a-9d7d-7081a2488181",
"fee": 7.65,
"paidServiceFee": 0.07,
"coupon": 0,
"time": "2017-08-20 11:57:51"
}
*/
return new Result(0, "ok");
}


/**
* TJD 车辆入场通知
*/
@RequestMapping(value = "/tjdParkInCallback")
public Map tjdParkInCallback(@RequestParam Map<String,String> param) {
/*
{
"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"
}
*/
Map map = new HashMap();
map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}

/**
* TJD 车辆出场通知
*/
@RequestMapping(value = "/tjdParkoutCallback")
public Map tjdParkOutCallback(@RequestParam Map<String,String> param) {
/*
{
"tradeId": "5836b8b52ada463ebc6199579f029565",
"outDt": "20170319232020",
"lon": "74.000272",
"lat": "159.768703",
"wLon": "123.523032",
"wLat": "35.430735",
"parkAmount": "5.20"
}
*/
Map map = new HashMap();
map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}
}

+ 96
- 268
mallinkCApi/src/main/java/com/simple/controller/WxCarController.java Ver fichero

@@ -6,13 +6,11 @@ import com.alibaba.fastjson.JSONObject;
import com.simple.common.ErrorCode; import com.simple.common.ErrorCode;
import com.simple.common.Result; import com.simple.common.Result;
import com.simple.common.ResultData; import com.simple.common.ResultData;
import com.simple.domain.po.WxCUser;
import com.simple.domain.po.WxCUserCar;
import com.simple.domain.po.WxCarCmdLogs;
import com.simple.domain.po.WxPark;
import com.simple.domain.po.*;
import com.simple.enums.EnumCarVendor; import com.simple.enums.EnumCarVendor;
import com.simple.service.WxCUserCarService; import com.simple.service.WxCUserCarService;
import com.simple.service.WxCarCmdLogsService; import com.simple.service.WxCarCmdLogsService;
import com.simple.service.WxMerchantService;
import com.simple.service.WxParkService; import com.simple.service.WxParkService;
import com.simple.utils.ETCPUtil; import com.simple.utils.ETCPUtil;
import com.simple.utils.TJDCarUtil; import com.simple.utils.TJDCarUtil;
@@ -45,6 +43,9 @@ public class WxCarController extends BaseController
@Autowired @Autowired
WxCUserCarService wxCUserCarService; WxCUserCarService wxCUserCarService;


@Autowired
WxMerchantService wxMerchantService;

private WxPark getCurrentPark(WxCUser user) { private WxPark getCurrentPark(WxCUser user) {
WxPark wxPark = wxParkService.getByTenantId(user.getTenantId()); WxPark wxPark = wxParkService.getByTenantId(user.getTenantId());
// 1, get mall's park // 1, get mall's park
@@ -184,7 +185,15 @@ public class WxCarController extends BaseController
* @return * @return
*/ */
@ApiOperation(value = "绑车牌", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n" + @ApiOperation(value = "绑车牌", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n" +
"TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}")
"TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}\n返回\n" +
"{\n" +
" \"timestamp\": \"1464235239561\",\n" +
" \"returnCode\": \"T\",\n" +
" \"errorMsg\": \"\",\n" +
" \"returnMsg\": \"OK\",\n" +
" \"isSuccess\": \"0\",\n" +
" \"carId\": \"5836b8b52ada463ebc6199579f029561\"\n" +
"}\n")
@PostMapping("/bindCar") @PostMapping("/bindCar")
public ResultData bindCar(Map<String, String > paramMap) { public ResultData bindCar(Map<String, String > paramMap) {
WxCUser user = getUser(); WxCUser user = getUser();
@@ -254,16 +263,6 @@ public class WxCarController extends BaseController
String version = objParams.getString("version"); String version = objParams.getString("version");
String ret = tjd.registerCar(url, partner, key, version, String ret = tjd.registerCar(url, partner, key, version,
carNumber, carNumColor, null, outCarId); carNumber, carNumColor, null, outCarId);
/*
{
"timestamp": "1464235239561",
"returnCode": "T",
"errorMsg": "",
"returnMsg": "OK",
"isSuccess": "0",
"carId": "5836b8b52ada463ebc6199579f029561"
}
*/
JSONObject retObj = JSON.parseObject(ret); JSONObject retObj = JSON.parseObject(ret);
retObj.put("vendor", park.getVendorType()); retObj.put("vendor", park.getVendorType());
if (retObj.getString("returnCode") == "T") { if (retObj.getString("returnCode") == "T") {
@@ -294,8 +293,19 @@ public class WxCarController extends BaseController
* @param paramMap * @param paramMap
* @return * @return
*/ */
@ApiOperation(value = "解绑车牌", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n" +
"TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}")
@ApiOperation(value = "解绑车牌", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n返回:\n" +
"{\n" +
" \"code\": 0,\n" +
" \"message\": \"ok\"" +
"}" +
"TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}\n返回:\n" +
"{\n" +
" \"timestamp\": \"1464235239561\",\n" +
" \"returnCode\": \"T\",\n" +
" \"errorMsg\": \"\",\n" +
" \"returnMsg\": \"OK\",\n" +
" \"isSuccess\": \"0\",\n" +
"}\n")
@PostMapping("/unbindCar") @PostMapping("/unbindCar")
public ResultData unbindCar(Map<String, String > paramMap) { public ResultData unbindCar(Map<String, String > paramMap) {
WxCUser user = getUser(); WxCUser user = getUser();
@@ -319,7 +329,6 @@ public class WxCarController extends BaseController
String merchantKey = objParams.getString("merchantKey"); String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version"); String version = objParams.getString("version");



String ret = etcp.unbindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber); String ret = etcp.unbindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber);
JSONObject retObj = JSON.parseObject(ret); JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) { if (retObj.getIntValue("code") == 0) {
@@ -355,17 +364,6 @@ public class WxCarController extends BaseController
String key = objParams.getString("key"); String key = objParams.getString("key");
String version = objParams.getString("version"); String version = objParams.getString("version");
String ret = tjd.writeOffCar(url, partner, key, version, carId); String ret = tjd.writeOffCar(url, partner, key, version, carId);

/*
{
"timestamp": "1464235239561",
"returnCode": "T",
"errorMsg": "",
"returnMsg": "OK",
"isSuccess": "0",
"carId": "5836b8b52ada463ebc6199579f029561"
}
*/
JSONObject retObj = JSON.parseObject(ret); JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString("returnCode") == "T") { if (retObj.getString("returnCode") == "T") {
wxCUserCarService.deleteByObj(userCar); wxCUserCarService.deleteByObj(userCar);
@@ -384,8 +382,41 @@ public class WxCarController extends BaseController
* @param paramMap * @param paramMap
* @return * @return
*/ */
@ApiOperation(value = "停车费", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n" +
"TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}")
@ApiOperation(value = "停车费", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n输出\n{\n" +
" \"carNumber\": \"渝****87\",\n" +
" \"entranceTime\": \"2017-06-11 11:19:27\",\n" +
" \"exitTime\": \"2017-06-11 11:59:47\",\n" +
" \"orderId\": \"B9466E26-7420-4BDF-958D-E90106AB5F20\", \"parkingFee\": 2.00,\n" +
" \"remainingServiceFee\": 0,\n" +
" \"payedServiceFee\": 0,\n" +
" \"remainingParkFee\": 2.00,\n" +
" \"discountAmount\": 0,\n" +
" \"parkingId\": 3126,\n" +
" \"parkingName\": \"ETCP 停车场\",\n" +
" \"remainingFee\": 2.00,\n" +
" \"paidFee\": 0,\n" +
" \"verificationInfo\": \"FSED9JvxgAU6XJUd8YRF5YH/LpfQYzCAfcPbAOKPV3BjKSatbgIsh7EBH2JBiRoGBe3btr gzKRMTfIoFuCn1XX7HUsJYlb7JSCBArnNmEVU4JuDLLjzoqB7qhQ8KnP16\"\n" +
" }" +
"TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}\n输出\n{\n" +
" \"inDt\": \"20160526112000\",\n" +
" \"timestamp\": \"1464235239561\",\n" +
" \"returnCode\": \"T\",\n" +
" \"errorMsg\": \"\",\n" +
" \"tradeId\": \"d49aeaedcf144f1faf569846d6b1667e\",\n" +
" \"parkTime\": \"2439593\",\n" +
" \"returnMsg\": \"OK\",\n" +
" \"totalAmount\": \"0.03\",\n" +
" \"isSuccess\": \"0\",\n" +
" \"unPayAmount\": \"0.03\",\n" +
" \"paidAmount\": \"0.00\",\n" +
" \"freeThroughTime\": \"15\",\n" +
" \"outDt\": \"20170321121212\",\n" +
" \"payUrl\": \"http://prep.tingjiandan.com/tcweixin/letter/prePay/payInPark.html?\n" +
" prePayType=16&channel=10001\",\n" +
" \"accountId\": \"d49aeaedcf144f1faf569846d6b16671\",\n" +
" \"freeMinsAmount\": \"0.00\",\n" +
" \"pmParkId\": \"d49aeaedcf144f1faf569846d6b16670\"\n" +
" }")
@PostMapping("/getCarStopFee") @PostMapping("/getCarStopFee")
public ResultData getCarStopFee(Map<String, String > paramMap) { public ResultData getCarStopFee(Map<String, String > paramMap) {
WxCUser user = getUser(); WxCUser user = getUser();
@@ -411,27 +442,9 @@ public class WxCarController extends BaseController
String ret = etcp.orderUnpay(url, appId, merchantNo, merchantKey, version, etcpToken, carNumber); String ret = etcp.orderUnpay(url, appId, merchantNo, merchantKey, version, etcpToken, carNumber);
JSONObject retObj = JSON.parseObject(ret); JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) { if (retObj.getIntValue("code") == 0) {
// TODO 停车费
/*
{
"carNumber": "渝****87",
"entranceTime": "2017-06-11 11:19:27",
"exitTime": "2017-06-11 11:59:47",
"orderId": "B9466E26-7420-4BDF-958D-E90106AB5F20", "parkingFee": 2.00,
"remainingServiceFee": 0,
"payedServiceFee": 0,
"remainingParkFee": 2.00,
"discountAmount": 0,
"parkingId": 3126,
"parkingName": "ETCP 停车场",
"remainingFee": 2.00,
"paidFee": 0,
"verificationInfo": "FSED9JvxgAU6XJUd8YRF5YH/LpfQYzCAfcPbAOKPV3BjKSatbgIsh7EBH2JBiRoGBe3btr gzKRMTfIoFuCn1XX7HUsJYlb7JSCBArnNmEVU4JuDLLjzoqB7qhQ8KnP16"
}
*/
JSONObject feeObj = retObj.getJSONArray("data").getJSONObject(0); JSONObject feeObj = retObj.getJSONArray("data").getJSONObject(0);
feeObj.put("vendor", park.getVendorType()); feeObj.put("vendor", park.getVendorType());
return new ResultData(feeObj);
return new ResultData(Result.SUCCESS, "停车费获取成功", feeObj);
} else { } else {
return new ResultData(ErrorCode.ETCP_STOP_FEE_FAIL.getCode(), "停车费获取失败"); return new ResultData(ErrorCode.ETCP_STOP_FEE_FAIL.getCode(), "停车费获取失败");
} }
@@ -441,7 +454,6 @@ public class WxCarController extends BaseController
if (StringUtils.isBlank(carNumber)) { if (StringUtils.isBlank(carNumber)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空"); return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空");
} }
// TODO to get TJD carId
String params = park.getVendorParams(); String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params); JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url"); String url = objParams.getString("url");
@@ -449,31 +461,8 @@ public class WxCarController extends BaseController
String key = objParams.getString("key"); String key = objParams.getString("key");
String version = objParams.getString("version"); String version = objParams.getString("version");
String ret = tjd.infoForFreeMins(url, partner, key, version, carNumber); String ret = tjd.infoForFreeMins(url, partner, key, version, carNumber);
/*
{
"inDt": "20160526112000",
"timestamp": "1464235239561",
"returnCode": "T",
"errorMsg": "",
"tradeId": "d49aeaedcf144f1faf569846d6b1667e",
"parkTime": "2439593",
"returnMsg": "OK",
"totalAmount": "0.03",
"isSuccess": "0",
"unPayAmount": "0.03",
"paidAmount": "0.00",
"freeThroughTime": "15",
"outDt": "20170321121212",
"payUrl": "http://prep.tingjiandan.com/tcweixin/letter/prePay/payInPark.html?
prePayType=16&channel=10001",
"accountId": "d49aeaedcf144f1faf569846d6b16671",
"freeMinsAmount": "0.00",
"pmParkId": "d49aeaedcf144f1faf569846d6b16670"
}
*/
JSONObject retObj = JSON.parseObject(ret); JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString("returnCode") == "T") { if (retObj.getString("returnCode") == "T") {
// TODO remove carNumber
return new ResultData(retObj); return new ResultData(retObj);
} else { } else {
return new ResultData(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败"); return new ResultData(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败");
@@ -486,7 +475,14 @@ public class WxCarController extends BaseController
* 停车费抵扣 * 停车费抵扣
* *
*/ */
@ApiOperation("停车费抵扣")
@ApiOperation(value = "停车费抵扣", notes = "{\"tradeId\":\"string\",\"deductionAmount\":\"string\",\"accountId\":\"string\",\"orderId\":\"string\"}\nresult\n{\n" +
" \"timestamp\": \"1464235239561\",\n" +
" \"returnCode\": \"T\",\n" +
" \"errorMsg\": \"\",\n" +
" \"returnMsg\": \"OK\",\n" +
" \"isSuccess\": \"0\",\n" +
" \"carId\": \"5836b8b52ada463ebc6199579f029561\"\n" +
" }")
@PostMapping("/deductionFee") @PostMapping("/deductionFee")
public ResultData deductionFee(Map<String, String > paramMap) { public ResultData deductionFee(Map<String, String > paramMap) {
WxCUser user = getUser(); WxCUser user = getUser();
@@ -495,21 +491,20 @@ public class WxCarController extends BaseController
if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()) { if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()) {
String tradeId = paramMap.get("tradeId"); String tradeId = paramMap.get("tradeId");
String deductionAmount = paramMap.get("deductionAmount"); String deductionAmount = paramMap.get("deductionAmount");
// TODO out wx_records id
String outTradeNo = paramMap.get("outTradeNo");
String accountId = paramMap.get("accountId"); String accountId = paramMap.get("accountId");
String outTradeNo = paramMap.get("orderId");
if (StringUtils.isBlank(tradeId)) { if (StringUtils.isBlank(tradeId)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "tradeId为空"); return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "tradeId为空");
} }
if (StringUtils.isBlank(deductionAmount)) { if (StringUtils.isBlank(deductionAmount)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "deductionAmount为空"); return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "deductionAmount为空");
} }
if (StringUtils.isBlank(outTradeNo)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "outTradeNo为空");
}
if (StringUtils.isBlank(accountId)) { if (StringUtils.isBlank(accountId)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "accountId为空"); return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "accountId为空");
} }
if (StringUtils.isBlank(outTradeNo)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "orderId为空");
}
String params = park.getVendorParams(); String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params); JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url"); String url = objParams.getString("url");
@@ -517,19 +512,8 @@ public class WxCarController extends BaseController
String key = objParams.getString("key"); String key = objParams.getString("key");
String version = objParams.getString("version"); String version = objParams.getString("version");
String ret = tjd.deductionNotSettle(url, partner, key, version, tradeId, deductionAmount, outTradeNo, accountId); String ret = tjd.deductionNotSettle(url, partner, key, version, tradeId, deductionAmount, outTradeNo, accountId);
/*
{
"timestamp": "1464235239561",
"returnCode": "T",
"errorMsg": "",
"returnMsg": "OK",
"isSuccess": "0",
"carId": "5836b8b52ada463ebc6199579f029561"
}
*/
JSONObject retObj = JSON.parseObject(ret); JSONObject retObj = JSON.parseObject(ret);
if (retObj.getString("returnCode") == "T") { if (retObj.getString("returnCode") == "T") {
// TODO remove carNumber
return new ResultData(); return new ResultData();
} else { } else {
return new ResultData(ErrorCode.TJD_DEDUCE_FEE_FAIL.getCode(), "停车费抵扣失败"); return new ResultData(ErrorCode.TJD_DEDUCE_FEE_FAIL.getCode(), "停车费抵扣失败");
@@ -538,76 +522,26 @@ public class WxCarController extends BaseController
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费抵扣失败"); return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费抵扣失败");
} }


// 优免券模板
/*
{
"id": 4974, //优免券模板 ID
"parkId": "fbqXUlfVvfc=", //车场标识
"businessId": "ZcWQ26TeJuQ=", //商家标识
title -- "businessName": "天洋广场", //商家名称
subtitle -- "name": "商家 1 小时优免券", //优免券名称
"category": "1", //优免券类型 1:小时优惠券,2:金额优惠券,3:折扣优惠券,4:免费券
price -- "categoryValue": "1.00", //优免券价值
total -- "amount": 100000, //优免券数量
valid_start_date -- "effectiveStart": "2018-02-01", //生效开始时间
valid_end_date -- "effectiveEnd": "2028-02-01",//生效结束时间
-"couponType": "0",//优惠券类型
number 库存 -- "avaliavleNum": 99993 //可用优惠券
},
*/
@ApiOperation("优免券模板")
@PostMapping("/quanTemplate")
public ResultData quanTemplate(Map<String, String > paramMap) {
WxCUser user = getUser();
/// 1, get mall's park
WxPark park = getCurrentPark(user);
if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
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 parkId = objParams.getString("parkId");
// bussinessId from 参数信息
String businessId = paramMap.get("businessId");
if (StringUtils.isBlank(businessId)) {
// TODO 1期只有一个虚拟商户,可以写在商场配置里
businessId = objParams.getString("businessId");
}
String ret = etcp.getBCouponList(url, merchantNo, merchantKey, version, parkId, businessId);
JSONObject retObj = JSON.parseObject(ret);
if (retObj.getIntValue("code") == 0) {
/*
"data": {
"count": 4, "couponPlatformModels": [
{
"id": 4974, //优免券模板 ID
"parkId": "fbqXUlfVvfc=", //车场标识 "businessId": "ZcWQ26TeJuQ=", //商家标识 "businessName": "天洋广场", //商家名称 "name": "商家 1 小时优免券", //优免券名称 "category": "1", //优免券类型
1:小时优惠券,2:金额优惠券,3:折扣优惠券,4:免费券 "categoryValue": "1.00", //优免券价值
"amount": 100000, //优免券数量
"effectiveStart": "2018-02-01", //生效开始时间
"effectiveEnd": "2028-02-01",//生效结束时间
"couponType": "0",//优惠券类型
"avaliavleNum": 99993 //可用优惠券
},
{...},
{...}
]
*/
return new ResultData(retObj.getJSONObject("data"));
} else {
return new ResultData(ErrorCode.ETCP_QUAN_TEMP_FAIL.getCode(), "优免券模板未发现");
}
private String getETCPBusinessID(String merchantIdStr) {
String businessId;
Long merchantId = 0L;
try {
merchantId = Long.valueOf(merchantIdStr);
} catch (NumberFormatException e) {
logger.error(e.getMessage());
} }
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "优免券模板失败");
WxMerchant wxMerchant = wxMerchantService.getById(merchantId);
String carParams = wxMerchant.getCarParams();
JSONObject objParams1 = JSON.parseObject(carParams);
businessId = objParams1.getString("businessId");
return businessId;
} }


/** /**
* 优免券领取 * 优免券领取
* 优免券不可退 * 优免券不可退
*/ */
@ApiOperation(value = "优免券领取", notes="ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\",\"couponFreeId\":\"string\"}")
@ApiOperation(value = "优免券领取", notes="ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\",\"couponFreeId\":\"string\"},输出\n{}")
@PostMapping("/getCoupon") @PostMapping("/getCoupon")
public ResultData getCoupon(Map<String, String > paramMap) { public ResultData getCoupon(Map<String, String > paramMap) {
WxCUser user = getUser(); WxCUser user = getUser();
@@ -617,6 +551,7 @@ public class WxCarController extends BaseController
String etcpToken = paramMap.get("etcpToken"); String etcpToken = paramMap.get("etcpToken");
String carNumber = paramMap.get("carNumber"); String carNumber = paramMap.get("carNumber");
String couponFreeId = paramMap.get("couponFreeId"); String couponFreeId = paramMap.get("couponFreeId");
String merchantIdStr = paramMap.get("merchantId");
if (StringUtils.isBlank(etcpToken)) { if (StringUtils.isBlank(etcpToken)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "etcpToken为空"); return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
} }
@@ -629,6 +564,9 @@ public class WxCarController extends BaseController
if (StringUtils.isBlank(couponFreeId)) { if (StringUtils.isBlank(couponFreeId)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "couponFreeId为空"); return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "couponFreeId为空");
} }
if (StringUtils.isBlank(merchantIdStr)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "merchantId为空");
}
String params = park.getVendorParams(); String params = park.getVendorParams();
JSONObject objParams = JSON.parseObject(params); JSONObject objParams = JSON.parseObject(params);
String url = objParams.getString("url"); String url = objParams.getString("url");
@@ -636,9 +574,11 @@ public class WxCarController extends BaseController
String merchantKey = objParams.getString("merchantKey"); String merchantKey = objParams.getString("merchantKey");
String version = objParams.getString("version"); String version = objParams.getString("version");
String parkId = objParams.getString("parkId"); String parkId = objParams.getString("parkId");
String businessId = paramMap.get("businessId");
String businessId = "";
// 优先从从商户表里取
businessId = getETCPBusinessID(merchantIdStr);
if (StringUtils.isBlank(businessId)) { if (StringUtils.isBlank(businessId)) {
// TODO 1期只有一个虚拟商户,可以写在商场配置里
// 1期只有一个虚拟商户,可以写在商场配置里
businessId = objParams.getString("businessId"); businessId = objParams.getString("businessId");
} }


@@ -653,116 +593,4 @@ public class WxCarController extends BaseController
} }
return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "优免券领取失败"); return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "优免券领取失败");
} }

// callback
// ETCP 车辆入场通知
@RequestMapping(value = "/etcpParkInCallback")
public Result etcpParkInCallback(@RequestParam Map<String,String> param) {
/*
{
"synId": "4ebd80ff-cfcf-462a-94cb-727e9fa9547c",
"plateNumber": "渝 ATX061",
"parkName": "ETCP 智慧停车场",
"parkId": "1",
"entranceTime": "2017-08-20 12:59:54",
"userType": "76",
"pushTime": "2017-08-20 12:59:57",
"fixParkingId": "U7",
"remainingDays": "11" }
*/
return new Result(0, "ok");
}
// ETCP 车辆出场通知
@RequestMapping(value = "/etcpParkOutCallback")
public Result etcpParkOutCallback(@RequestParam Map<String,String> param) {
/*
{
"synId": "fd92f645-880e-4c2a-9d7d-7081a2488181",
"plateNumber": "渝 ATX061",
"parkName": "ETCP 智慧停车场",
"parkId": "1",
"entranceTime": "2017-08-17 18:44:19",
"userType": "76",
"pushTime": "2017-08-20 11:57:51",
"exitTime": "2017-08-19 12:07:19",
"stayedTime": 148980,
"receivableFee": 0,
"paidServiceFee": 0,
"fixParkingId": "U7",
"remainingDays": "12"
}
*/
return new Result(0, "ok");
}
// ETCP 车辆解绑通知
@RequestMapping(value = "/etcpUnbindCarCallBack")
public Result etcpUnbindCarCallBack(@RequestParam Map<String,String> param) {
/*
{
"plateNumber": "渝 ATX061",
"time": "2017-08-20 11:57:51"
}
*/
return new Result(0, "ok");
}
// ETCP 主动支付结果通知
@RequestMapping(value = "/etcpPaidCallback")
public Result etcpPaidCallback(@RequestParam Map<String,String> param) {
/*
{
"plateNumber": "渝 ATX061",
"orderId": "fd92f645-880e-4c2a-9d7d-7081a2488181",
"fee": 7.65,
"paidServiceFee": 0.07,
"coupon": 0,
"time": "2017-08-20 11:57:51"
}
*/
return new Result(0, "ok");
}
// TJD 车辆入场通知
@RequestMapping(value = "/tjdParkInCallback")
public Map tjdParkInCallback(@RequestParam Map<String,String> param) {
/*
{
"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"
}
*/
Map map = new HashMap();
map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}
// TJD 车辆出场通知
@RequestMapping(value = "/tjdParkoutCallback")
public Map tjdParkOutCallback(@RequestParam Map<String,String> param) {
/*
{
"tradeId": "5836b8b52ada463ebc6199579f029565",
"outDt": "20170319232020",
"lon": "74.000272",
"lat": "159.768703",
"wLon": "123.523032",
"wLat": "35.430735",
"parkAmount": "5.20"
}
*/
Map map = new HashMap();
map.put("isSuccess", "0");
map.put("errorMsg", "");
return map;
}
} }

Cargando…
Cancelar
Guardar