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.
 
 
 
 
 

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