You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

597 lines
28 KiB

  1. package com.simple.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.simple.common.ErrorCode;
  6. import com.simple.common.Result;
  7. import com.simple.common.ResultData;
  8. import com.simple.domain.po.*;
  9. import com.simple.enums.EnumCarVendor;
  10. import com.simple.service.WxCUserCarService;
  11. import com.simple.service.WxCarCmdLogsService;
  12. import com.simple.service.WxMerchantService;
  13. import com.simple.service.WxParkService;
  14. import com.simple.utils.ETCPUtil;
  15. import com.simple.utils.TJDCarUtil;
  16. import io.swagger.annotations.ApiImplicitParam;
  17. import io.swagger.annotations.ApiImplicitParams;
  18. import io.swagger.annotations.ApiOperation;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.apache.log4j.Logger;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.web.bind.annotation.*;
  23. import java.util.Date;
  24. import java.util.HashMap;
  25. import java.util.List;
  26. import java.util.Map;
  27. @RestController
  28. @RequestMapping("/api/car")
  29. public class WxCarController extends BaseController
  30. {
  31. private Logger logger = Logger.getLogger(WxCarController.class);
  32. ETCPUtil etcp = new ETCPUtil();
  33. TJDCarUtil tjd = new TJDCarUtil();
  34. @Autowired
  35. WxParkService wxParkService;
  36. @Autowired
  37. WxCUserCarService wxCUserCarService;
  38. @Autowired
  39. WxMerchantService wxMerchantService;
  40. private WxPark getCurrentPark(WxCUser user) {
  41. WxPark wxPark = wxParkService.getByTenantId(user.getTenantId());
  42. // 1, get mall's park
  43. // future use redis to optimize
  44. return wxPark;
  45. }
  46. @ApiOperation(value = "获取车场支持的厂家",notes="")
  47. @GetMapping("/getVendor")
  48. public ResultData getVendor() {
  49. WxCUser user = getUser();
  50. // 1, get mall's park
  51. WxPark park = getCurrentPark(user);
  52. Map map = new HashMap();
  53. map.put("vendor", park.getVendorType());
  54. return new ResultData(map);
  55. }
  56. /**
  57. * 初始化/etcp共同登录
  58. * @param paramMap
  59. * @return
  60. */
  61. @ApiOperation(value = "初始化/etcp共同登录",notes="{\"phone\":\"string\"}")
  62. @PostMapping("/init")
  63. public ResultData init(Map<String, String > paramMap) {
  64. WxCUser user = getUser();
  65. // 1, get mall's park
  66. WxPark park = getCurrentPark(user);
  67. // 2. get vendor params
  68. if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
  69. String phone = paramMap.get("phone");
  70. if (StringUtils.isBlank(phone)) {
  71. logger.error("手机号为空");
  72. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "phone为空");
  73. }
  74. String params = park.getVendorParams();
  75. JSONObject objParams = JSON.parseObject(params);
  76. String url = objParams.getString("url");
  77. String appId = objParams.getString("appId");
  78. String merchantNo = objParams.getString("merchantNo");
  79. String merchantKey = objParams.getString("merchantKey");
  80. String version = objParams.getString("version");
  81. String ret = etcp.userSignin(url, appId, merchantNo, merchantKey, version, phone);
  82. JSONObject retObj = JSON.parseObject(ret);
  83. if (retObj.getIntValue("code") == 0) {
  84. // 获取绑定的车牌
  85. JSONObject dataObj = retObj.getJSONObject("data");
  86. String etcpToken = dataObj.getString("token");
  87. JSONObject dataObj1 = syncCarNumbers(user.getId(), user.getTenantId(), park.getVendorType(),
  88. url, merchantNo, merchantKey, version,
  89. etcpToken);
  90. // c端必须保存此token
  91. return new ResultData(dataObj1);
  92. } else {
  93. logger.error("共同登录失败: "+phone);
  94. return new ResultData(ErrorCode.ETCP_LOGIN_FAIL.getCode(), "共同登录失败");
  95. }
  96. } else if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()){
  97. // TJD不需要共同登录
  98. return new ResultData();
  99. }
  100. return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "登录失败");
  101. }
  102. private JSONObject syncCarNumbers(Long cUserId, String tenantId, int iVendorType,
  103. String url, String merchantNo, String merchantKey, String version,
  104. String etcpToken) {
  105. String ret;
  106. JSONObject retObj;
  107. ret = etcp.carNum(url, merchantNo, merchantKey, version, etcpToken);
  108. /*{"code": 0,"msg": "ok","data": {"number": 3,"carList": ["晋 BMZ105","云 C12345"]}} */
  109. retObj = JSON.parseObject(ret);
  110. JSONObject dataObj1 = retObj.getJSONObject("data");
  111. dataObj1.put("vendor", iVendorType);
  112. JSONArray arr = dataObj1.getJSONArray("carList");
  113. WxCUserCar queryUserCar = new WxCUserCar();
  114. queryUserCar.setCUserId(cUserId);
  115. List<WxCUserCar> uclist = wxCUserCarService.getList(queryUserCar);
  116. // 删除ETCP不存在
  117. for(WxCUserCar userCar: uclist) {
  118. boolean bExist = isExistInArray(arr, userCar.getCarNumber());
  119. if (!bExist) {
  120. wxCUserCarService.deleteById(userCar.getId());
  121. uclist.remove(userCar);
  122. }
  123. }
  124. // 添加ETCP的
  125. for(int i=0;i<arr.size();i++) {
  126. String _carNum = arr.getString(i);
  127. boolean bExist = isExistInList(uclist, _carNum);
  128. if(!bExist) {
  129. Date curr = new Date();
  130. WxCUserCar userCar = new WxCUserCar();
  131. userCar.setCUserId(cUserId);
  132. userCar.setTenantId(tenantId);
  133. userCar.setCarNumber(_carNum);
  134. userCar.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
  135. userCar.setCreateDate(curr);
  136. userCar.setUpdateDate(curr);
  137. wxCUserCarService.saveOrUpdate(userCar);
  138. }
  139. }
  140. return dataObj1;
  141. }
  142. private boolean isExistInArray(JSONArray arr, String carNumber) {
  143. boolean bExist = false;
  144. for(int i=0;i<arr.size();i++) {
  145. // check carNum+cUserId是否存在, 不存在新建
  146. String _carNum = arr.getString(i);
  147. if (carNumber.equals(_carNum)) {
  148. bExist = true;
  149. break;
  150. }
  151. }
  152. return bExist;
  153. }
  154. private boolean isExistInList(List<WxCUserCar> list, String carNumber) {
  155. boolean bExist = false;
  156. for(WxCUserCar userCar: list) {
  157. if(carNumber.equals(userCar.getCarNumber())) {
  158. bExist = true;
  159. break;
  160. }
  161. }
  162. return bExist;
  163. }
  164. /**
  165. * 绑车牌
  166. * @param paramMap
  167. * @return
  168. */
  169. @ApiOperation(value = "绑车牌", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n" +
  170. "TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}\n返回\n" +
  171. "{\n" +
  172. " \"timestamp\": \"1464235239561\",\n" +
  173. " \"returnCode\": \"T\",\n" +
  174. " \"errorMsg\": \"\",\n" +
  175. " \"returnMsg\": \"OK\",\n" +
  176. " \"isSuccess\": \"0\",\n" +
  177. " \"carId\": \"5836b8b52ada463ebc6199579f029561\"\n" +
  178. "}\n")
  179. @PostMapping("/bindCar")
  180. public ResultData bindCar(Map<String, String > paramMap) {
  181. WxCUser user = getUser();
  182. // 1, get mall's park
  183. WxPark park = getCurrentPark(user);
  184. // 2. get vendor params
  185. if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
  186. String etcpToken = paramMap.get("etcpToken");
  187. if (StringUtils.isBlank(etcpToken)) {
  188. logger.error("etcpToken为空");
  189. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
  190. }
  191. String carNumber = paramMap.get("carNumber");
  192. if (StringUtils.isBlank(carNumber)) {
  193. logger.error("carNumber为空");
  194. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空");
  195. }
  196. String params = park.getVendorParams();
  197. JSONObject objParams = JSON.parseObject(params);
  198. String url = objParams.getString("url");
  199. String merchantNo = objParams.getString("merchantNo");
  200. String merchantKey = objParams.getString("merchantKey");
  201. String version = objParams.getString("version");
  202. String ret = etcp.bindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber, null);
  203. JSONObject retObj = JSON.parseObject(ret);
  204. if (retObj.getIntValue("code") == 0) {
  205. // 插入车牌
  206. Date curr = new Date();
  207. WxCUserCar userCar = new WxCUserCar();
  208. userCar.setCUserId(user.getId());
  209. userCar.setTenantId(user.getTenantId());
  210. userCar.setCarNumber(carNumber);
  211. userCar.setVendorType(EnumCarVendor.CAR_ETCP.getCode());
  212. userCar.setCreateDate(curr);
  213. userCar.setUpdateDate(curr);
  214. wxCUserCarService.saveOrUpdate(userCar);
  215. JSONObject dataObj = retObj.getJSONObject("data");
  216. dataObj.put("vendor", park.getVendorType());
  217. return new ResultData(dataObj);
  218. } else {
  219. logger.error("绑车牌失败: " + carNumber);
  220. return new ResultData(ErrorCode.ETCP_BIND_FAIL.getCode(), "绑车牌失败");
  221. }
  222. }
  223. else if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()) {
  224. String carNumber = paramMap.get("carNumber");
  225. if (StringUtils.isBlank(carNumber)) {
  226. logger.error("carNumber为空");
  227. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空");
  228. }
  229. String carNumColor = paramMap.get("carNumColor");
  230. if (StringUtils.isBlank(carNumColor)) {
  231. logger.error("carNumColor为空");
  232. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumColor为空");
  233. }
  234. String outCarId = paramMap.get("outCarId");
  235. if (StringUtils.isBlank(outCarId)) {
  236. logger.error("outCarId为空");
  237. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "outCarId为空");
  238. }
  239. String params = park.getVendorParams();
  240. JSONObject objParams = JSON.parseObject(params);
  241. String url = objParams.getString("url");
  242. String partner = objParams.getString("partner");
  243. String key = objParams.getString("key");
  244. String version = objParams.getString("version");
  245. String ret = tjd.registerCar(url, partner, key, version,
  246. carNumber, carNumColor, null, outCarId);
  247. JSONObject retObj = JSON.parseObject(ret);
  248. retObj.put("vendor", park.getVendorType());
  249. if (retObj.getString("returnCode") == "T") {
  250. String carId = retObj.getString("carId");
  251. // 插入车牌
  252. Date curr = new Date();
  253. WxCUserCar userCar = new WxCUserCar();
  254. userCar.setCUserId(user.getId());
  255. userCar.setTenantId(user.getTenantId());
  256. userCar.setCarNumber(carNumber);
  257. userCar.setVendorType(EnumCarVendor.CAR_TJD.getCode());
  258. JSONObject jo = new JSONObject();
  259. jo.put("carId", carId);
  260. userCar.setVendorParams(JSON.toJSONString(jo));
  261. userCar.setCreateDate(curr);
  262. userCar.setUpdateDate(curr);
  263. wxCUserCarService.saveOrUpdate(userCar);
  264. return new ResultData(retObj);
  265. } else {
  266. return new ResultData(ErrorCode.TJD_BIND_FAIL.getCode(), "绑车牌失败", retObj);
  267. }
  268. }
  269. return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "绑车牌失败");
  270. }
  271. /**
  272. * 解绑车牌
  273. * @param paramMap
  274. * @return
  275. */
  276. @ApiOperation(value = "解绑车牌", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n返回:\n" +
  277. "{\n" +
  278. " \"code\": 0,\n" +
  279. " \"message\": \"ok\"" +
  280. "}" +
  281. "TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}\n返回:\n" +
  282. "{\n" +
  283. " \"timestamp\": \"1464235239561\",\n" +
  284. " \"returnCode\": \"T\",\n" +
  285. " \"errorMsg\": \"\",\n" +
  286. " \"returnMsg\": \"OK\",\n" +
  287. " \"isSuccess\": \"0\",\n" +
  288. "}\n")
  289. @PostMapping("/unbindCar")
  290. public ResultData unbindCar(Map<String, String > paramMap) {
  291. WxCUser user = getUser();
  292. // 1, get mall's park
  293. WxPark park = getCurrentPark(user);
  294. if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
  295. String etcpToken = paramMap.get("etcpToken");
  296. if (StringUtils.isBlank(etcpToken)) {
  297. logger.error("etcpToken为空");
  298. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
  299. }
  300. String carNumber = paramMap.get("carNumber");
  301. if (StringUtils.isBlank(carNumber)) {
  302. logger.error("carNumber为空");
  303. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空");
  304. }
  305. String params = park.getVendorParams();
  306. JSONObject objParams = JSON.parseObject(params);
  307. String url = objParams.getString("url");
  308. String merchantNo = objParams.getString("merchantNo");
  309. String merchantKey = objParams.getString("merchantKey");
  310. String version = objParams.getString("version");
  311. String ret = etcp.unbindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber);
  312. JSONObject retObj = JSON.parseObject(ret);
  313. if (retObj.getIntValue("code") == 0) {
  314. WxCUserCar userCar = new WxCUserCar();
  315. userCar.setCUserId(user.getId());
  316. userCar.setTenantId(user.getTenantId());
  317. userCar.setCarNumber(carNumber);
  318. wxCUserCarService.deleteByObj(userCar);
  319. return new ResultData();
  320. } else {
  321. logger.error("解绑车牌失败");
  322. return new ResultData(ErrorCode.ETCP_UNBIND_FAIL.getCode(), "解绑车牌失败");
  323. }
  324. }
  325. else if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()) {
  326. String carNumber = paramMap.get("carNumber");
  327. if (StringUtils.isBlank(carNumber)) {
  328. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空");
  329. }
  330. WxCUserCar queryOne = new WxCUserCar();
  331. queryOne.setCarNumber(carNumber);
  332. queryOne.setTenantId(user.getTenantId());
  333. queryOne.setCUserId(user.getId());
  334. WxCUserCar userCar = wxCUserCarService.getOne(queryOne);
  335. if (userCar != null) {
  336. String params = userCar.getVendorParams();
  337. JSONObject objParams = JSON.parseObject(params);
  338. String carId = objParams.getString("carId");
  339. params = park.getVendorParams();
  340. String url = objParams.getString("url");
  341. String partner = objParams.getString("partner");
  342. String key = objParams.getString("key");
  343. String version = objParams.getString("version");
  344. String ret = tjd.writeOffCar(url, partner, key, version, carId);
  345. JSONObject retObj = JSON.parseObject(ret);
  346. if (retObj.getString("returnCode") == "T") {
  347. wxCUserCarService.deleteByObj(userCar);
  348. return new ResultData();
  349. } else {
  350. return new ResultData(ErrorCode.TJD_UNBIND_FAIL, "解绑车牌失败");
  351. }
  352. }
  353. }
  354. return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "解绑车牌失败");
  355. }
  356. /**
  357. * 停车费
  358. * @param paramMap
  359. * @return
  360. */
  361. @ApiOperation(value = "停车费", notes = "ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\"}\n输出\n{\n" +
  362. " \"carNumber\": \"渝****87\",\n" +
  363. " \"entranceTime\": \"2017-06-11 11:19:27\",\n" +
  364. " \"exitTime\": \"2017-06-11 11:59:47\",\n" +
  365. " \"orderId\": \"B9466E26-7420-4BDF-958D-E90106AB5F20\", \"parkingFee\": 2.00,\n" +
  366. " \"remainingServiceFee\": 0,\n" +
  367. " \"payedServiceFee\": 0,\n" +
  368. " \"remainingParkFee\": 2.00,\n" +
  369. " \"discountAmount\": 0,\n" +
  370. " \"parkingId\": 3126,\n" +
  371. " \"parkingName\": \"ETCP 停车场\",\n" +
  372. " \"remainingFee\": 2.00,\n" +
  373. " \"paidFee\": 0,\n" +
  374. " \"verificationInfo\": \"FSED9JvxgAU6XJUd8YRF5YH/LpfQYzCAfcPbAOKPV3BjKSatbgIsh7EBH2JBiRoGBe3btr gzKRMTfIoFuCn1XX7HUsJYlb7JSCBArnNmEVU4JuDLLjzoqB7qhQ8KnP16\"\n" +
  375. " }" +
  376. "TJD:={\"carNumber\":\"string\",\"carNumColor\":\"string\",\"outCarId\":\"string\"}\n输出\n{\n" +
  377. " \"inDt\": \"20160526112000\",\n" +
  378. " \"timestamp\": \"1464235239561\",\n" +
  379. " \"returnCode\": \"T\",\n" +
  380. " \"errorMsg\": \"\",\n" +
  381. " \"tradeId\": \"d49aeaedcf144f1faf569846d6b1667e\",\n" +
  382. " \"parkTime\": \"2439593\",\n" +
  383. " \"returnMsg\": \"OK\",\n" +
  384. " \"totalAmount\": \"0.03\",\n" +
  385. " \"isSuccess\": \"0\",\n" +
  386. " \"unPayAmount\": \"0.03\",\n" +
  387. " \"paidAmount\": \"0.00\",\n" +
  388. " \"freeThroughTime\": \"15\",\n" +
  389. " \"outDt\": \"20170321121212\",\n" +
  390. " \"payUrl\": \"http://prep.tingjiandan.com/tcweixin/letter/prePay/payInPark.html?\n" +
  391. " prePayType=16&channel=10001\",\n" +
  392. " \"accountId\": \"d49aeaedcf144f1faf569846d6b16671\",\n" +
  393. " \"freeMinsAmount\": \"0.00\",\n" +
  394. " \"pmParkId\": \"d49aeaedcf144f1faf569846d6b16670\"\n" +
  395. " }")
  396. @PostMapping("/getCarStopFee")
  397. public ResultData getCarStopFee(Map<String, String > paramMap) {
  398. WxCUser user = getUser();
  399. // 1, get mall's park
  400. WxPark park = getCurrentPark(user);
  401. if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
  402. String etcpToken = paramMap.get("etcpToken");
  403. String carNumber = paramMap.get("carNumber");
  404. if (StringUtils.isBlank(etcpToken)) {
  405. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
  406. }
  407. if (StringUtils.isBlank(carNumber)) {
  408. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空");
  409. }
  410. String params = park.getVendorParams();
  411. JSONObject objParams = JSON.parseObject(params);
  412. String url = objParams.getString("url");
  413. String appId = objParams.getString("appId");
  414. String merchantNo = objParams.getString("merchantNo");
  415. String merchantKey = objParams.getString("merchantKey");
  416. String version = objParams.getString("version");
  417. String ret = etcp.orderUnpay(url, appId, merchantNo, merchantKey, version, etcpToken, carNumber);
  418. JSONObject retObj = JSON.parseObject(ret);
  419. if (retObj.getIntValue("code") == 0) {
  420. JSONObject feeObj = retObj.getJSONArray("data").getJSONObject(0);
  421. feeObj.put("vendor", park.getVendorType());
  422. return new ResultData(Result.SUCCESS, "停车费获取成功", feeObj);
  423. } else {
  424. return new ResultData(ErrorCode.ETCP_STOP_FEE_FAIL.getCode(), "停车费获取失败");
  425. }
  426. }
  427. else if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()) {
  428. String carNumber = paramMap.get("carNumber");
  429. if (StringUtils.isBlank(carNumber)) {
  430. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空");
  431. }
  432. String params = park.getVendorParams();
  433. JSONObject objParams = JSON.parseObject(params);
  434. String url = objParams.getString("url");
  435. String partner = objParams.getString("partner");
  436. String key = objParams.getString("key");
  437. String version = objParams.getString("version");
  438. String ret = tjd.infoForFreeMins(url, partner, key, version, carNumber);
  439. JSONObject retObj = JSON.parseObject(ret);
  440. if (retObj.getString("returnCode") == "T") {
  441. return new ResultData(retObj);
  442. } else {
  443. return new ResultData(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败");
  444. }
  445. }
  446. return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费获取失败");
  447. }
  448. /**
  449. * 停车费抵扣
  450. *
  451. */
  452. @ApiOperation(value = "停车费抵扣", notes = "{\"tradeId\":\"string\",\"deductionAmount\":\"string\",\"accountId\":\"string\",\"orderId\":\"string\"}\nresult\n{\n" +
  453. " \"timestamp\": \"1464235239561\",\n" +
  454. " \"returnCode\": \"T\",\n" +
  455. " \"errorMsg\": \"\",\n" +
  456. " \"returnMsg\": \"OK\",\n" +
  457. " \"isSuccess\": \"0\",\n" +
  458. " \"carId\": \"5836b8b52ada463ebc6199579f029561\"\n" +
  459. " }")
  460. @PostMapping("/deductionFee")
  461. public ResultData deductionFee(Map<String, String > paramMap) {
  462. WxCUser user = getUser();
  463. /// 1, get mall's park
  464. WxPark park = getCurrentPark(user);
  465. if (park.getVendorType() == EnumCarVendor.CAR_TJD.getCode()) {
  466. String tradeId = paramMap.get("tradeId");
  467. String deductionAmount = paramMap.get("deductionAmount");
  468. String accountId = paramMap.get("accountId");
  469. String outTradeNo = paramMap.get("orderId");
  470. if (StringUtils.isBlank(tradeId)) {
  471. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "tradeId为空");
  472. }
  473. if (StringUtils.isBlank(deductionAmount)) {
  474. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "deductionAmount为空");
  475. }
  476. if (StringUtils.isBlank(accountId)) {
  477. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "accountId为空");
  478. }
  479. if (StringUtils.isBlank(outTradeNo)) {
  480. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "orderId为空");
  481. }
  482. String params = park.getVendorParams();
  483. JSONObject objParams = JSON.parseObject(params);
  484. String url = objParams.getString("url");
  485. String partner = objParams.getString("partner");
  486. String key = objParams.getString("key");
  487. String version = objParams.getString("version");
  488. String ret = tjd.deductionNotSettle(url, partner, key, version, tradeId, deductionAmount, outTradeNo, accountId);
  489. JSONObject retObj = JSON.parseObject(ret);
  490. if (retObj.getString("returnCode") == "T") {
  491. return new ResultData();
  492. } else {
  493. return new ResultData(ErrorCode.TJD_DEDUCE_FEE_FAIL.getCode(), "停车费抵扣失败");
  494. }
  495. }
  496. return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费抵扣失败");
  497. }
  498. private String getETCPBusinessID(String merchantIdStr) {
  499. String businessId;
  500. Long merchantId = 0L;
  501. try {
  502. merchantId = Long.valueOf(merchantIdStr);
  503. } catch (NumberFormatException e) {
  504. logger.error(e.getMessage());
  505. }
  506. WxMerchant wxMerchant = wxMerchantService.getById(merchantId);
  507. String carParams = wxMerchant.getCarParams();
  508. JSONObject objParams1 = JSON.parseObject(carParams);
  509. businessId = objParams1.getString("businessId");
  510. return businessId;
  511. }
  512. /**
  513. * 优免券领取
  514. * 优免券不可退
  515. */
  516. @ApiOperation(value = "优免券领取", notes="ETCP:={\"etcpToken\":\"string\",\"carNumber\":\"string\",\"couponFreeId\":\"string\"},输出\n{}")
  517. @PostMapping("/getCoupon")
  518. public ResultData getCoupon(Map<String, String > paramMap) {
  519. WxCUser user = getUser();
  520. /// 1, get mall's park
  521. WxPark park = getCurrentPark(user);
  522. if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) {
  523. String etcpToken = paramMap.get("etcpToken");
  524. String carNumber = paramMap.get("carNumber");
  525. String couponFreeId = paramMap.get("couponFreeId");
  526. String merchantIdStr = paramMap.get("merchantId");
  527. if (StringUtils.isBlank(etcpToken)) {
  528. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "etcpToken为空");
  529. }
  530. if (StringUtils.isBlank(carNumber)) {
  531. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空");
  532. }
  533. if (StringUtils.isBlank(carNumber)) {
  534. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "carNumber为空");
  535. }
  536. if (StringUtils.isBlank(couponFreeId)) {
  537. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "couponFreeId为空");
  538. }
  539. if (StringUtils.isBlank(merchantIdStr)) {
  540. return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "merchantId为空");
  541. }
  542. String params = park.getVendorParams();
  543. JSONObject objParams = JSON.parseObject(params);
  544. String url = objParams.getString("url");
  545. String merchantNo = objParams.getString("merchantNo");
  546. String merchantKey = objParams.getString("merchantKey");
  547. String version = objParams.getString("version");
  548. String parkId = objParams.getString("parkId");
  549. String businessId = "";
  550. // 优先从从商户表里取
  551. businessId = getETCPBusinessID(merchantIdStr);
  552. if (StringUtils.isBlank(businessId)) {
  553. // 1期只有一个虚拟商户,可以写在商场配置里
  554. businessId = objParams.getString("businessId");
  555. }
  556. String ret = etcp.bCouponRecord(url, merchantNo, merchantKey, version,
  557. etcpToken, parkId, businessId, carNumber, couponFreeId);
  558. JSONObject retObj = JSON.parseObject(ret);
  559. if (retObj.getIntValue("code") == 0) {
  560. return new ResultData();
  561. } else {
  562. return new ResultData(ErrorCode.ETCP_QUAN_SEND_FAIL.getCode(), "优免券领取失败");
  563. }
  564. }
  565. return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "优免券领取失败");
  566. }
  567. }