From 888c47fa4dd59ec96f052dee96cfb49c7d0a5a4a Mon Sep 17 00:00:00 2001 From: furunxin <864795252@qq.com> Date: Sun, 12 Jul 2020 16:01:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E5=81=9C=E8=BD=A6=E5=8E=82?= =?UTF-8?q?=E5=95=86=E8=BD=A6=E6=98=93=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iformall/controller/WxCarController.java | 20 +++++ .../callback/WxCarCYFCallBackController.java | 84 +++++++++++++++++++ .../java/com/iformall/common/ErrorCode.java | 2 + .../iformall/domain/vo/WxCarCYFInfoVo.java | 33 ++++++++ .../iformall/domain/vo/WxCarCYFPayInfoVo.java | 31 +++++++ .../com/iformall/domain/vo/WxCarCYFVo.java | 32 +++++++ .../java/com/iformall/enums/EnumCarCmd.java | 1 + .../java/com/iformall/utils/car/CYFUtil.java | 22 ++++- 8 files changed, 224 insertions(+), 1 deletion(-) create mode 100644 mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFInfoVo.java create mode 100644 mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFPayInfoVo.java create mode 100644 mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFVo.java diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index ad657ac23..a5268f947 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -3,6 +3,7 @@ package com.iformall.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.api.R; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; @@ -626,6 +627,8 @@ public class WxCarController extends BaseController { 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(), "停车费获取失败"); } @@ -715,6 +718,23 @@ public class WxCarController extends BaseController { } } + private ResultData cyfCarStopFee(@RequestBody Map 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); diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarCYFCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarCYFCallBackController.java index 9aa1430f9..1eb620319 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarCYFCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarCYFCallBackController.java @@ -1,14 +1,17 @@ package com.iformall.controller.callback; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxCarCYFVo; import com.iformall.enums.EnumCarCmd; import com.iformall.enums.EnumCarVendor; import com.iformall.enums.EnumCouponSendSendType; import com.iformall.service.*; import com.iformall.utils.car.CYFUtil; +import com.iformall.utils.car.TJDUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -151,4 +154,85 @@ public class WxCarCYFCallBackController extends BaseController { map.put(CYFUtil.CYF_IS_RESULT, CYFUtil.CYF_SUC); return map; } + + + /** + * @description 车易付 车辆离场通知 + * @Params [param] + * @return java.util.Map + * @Author furunxin + * @Date 2020/7/12 上午9:00 + **/ + @PostMapping(value = "/cyfParkOutCallback") + public Map cyfParkOutCallback(@RequestBody WxCarCYFVo param) { + String requestJson = JSONObject.toJSONString(param); + log.info("["+getIpAddr()+"cyfParkOutCallback: " + requestJson); + Map map = new HashMap(); + + Date currentDate = new Date(); + WxCarCmdLog wxCarCmdLog = new WxCarCmdLog(); + wxCarCmdLog.setVendorType(EnumCarVendor.CAE_CYF.getCode()); + wxCarCmdLog.setCmdType(EnumCarCmd.CAR_CYF_CALLBACK_PARK_OUT.getCode()); + wxCarCmdLog.setCmdJson(JSON.toJSONString(requestJson)); + wxCarCmdLog.setCreateDate(currentDate); + wxCarCmdLog.setUpdateDate(currentDate); + + String tenantId = null; + WxPark parkQ = new WxPark(); + parkQ.setVendorType(EnumCarVendor.CAE_CYF.getCode()); + parkQ.setParkId(String.valueOf(param.getParkingId())); + WxPark park = wxParkService.getByObj(parkQ); + if (park == null) { + log.error("cyfParkOutCallback: 车场未找到" + param.getParkingId()); + map.put(CYFUtil.CYF_IS_RESULT, CYFUtil.CYF_ERR); + map.put(CYFUtil.CYF_ERR_MSG, "车场未找到" + param.getParkingId()); + return map; + } else { + tenantId = park.getTenantId(); + wxCarCmdLog.updateTenantInfo(park); + } + try { + wxCarCmdLogService.saveOrUpdate(wxCarCmdLog); + } catch (Exception e) { + log.error("cyfParkOutCallback: 入库错误" + requestJson); + map.put(CYFUtil.CYF_IS_RESULT, CYFUtil.CYF_ERR); + map.put(CYFUtil.CYF_ERR_MSG, "入库错误" + param.getParkingId()); + return map; + } + try { + // 保存WxCarPayRecord + WxCarPayRecord record = new WxCarPayRecord(); + record.updateTenantInfo(park); + record.setVendorType(wxCarCmdLog.getVendorType()); + record.setParkId(String.valueOf(param.getParkingId())); + record.setParkName(param.getRecordOrderId()); + record.setPlateNumber(param.getPlate()); + record.setSynId(param.getRecordOrderId()); + if(StringUtils.isNotBlank(param.getInInfo().getTime())) { + record.setEntranceTime(TJDUtil.dateOutFormat.parse(param.getInInfo().getTime())); + } + if(StringUtils.isNotBlank(param.getOutInfo().getTime())) { + record.setExitTime(TJDUtil.dateOutFormat.parse(param.getOutInfo().getTime())); + Long stayedTime = (record.getExitTime().getTime() - record.getEntranceTime().getTime())/ 1000; + record.setStayedTime(stayedTime); + } + if (StringUtils.isNotBlank(String.valueOf(param.getPayInfoList().getActualFee()))) { + record.setFee(String.valueOf(param.getPayInfoList().getActualFee())); + } + WxCarPayRecord query = new WxCarPayRecord(); + query.updateTenantInfo(park); + query.setParkId(String.valueOf(param.getParkingId())); + query.setSynId(param.getRecordOrderId()); + PageInfo page = wxCarPayRecordService.findCarPayListByPage(query,1,1); + if(page != null && CollectionUtils.isNotEmpty(page.getList())){ + record.setId(page.getList().get(0).getId()); + } + wxCarPayRecordService.saveOrUpdate(record); + } catch (Exception e) { + log.error("WxCarPayRecord: 出场更新错误 " +e.getMessage()+", " +requestJson); + } + + map.put(CYFUtil.CYF_IS_RESULT, CYFUtil.CYF_SUC); + return map; + } } diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 37798c007..a198cb590 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -164,6 +164,8 @@ public enum ErrorCode{ BOLINK_SIGN_ERR(2066, "泊链签名错误"), BOLINK_STOP_FEE_FAIL(2067, "泊链停车费获取失败"), + CYF_STOP_FEE_FAIL(2068, "CYF获取停车费失败"), + /** * 游戏 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFInfoVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFInfoVo.java new file mode 100644 index 000000000..2e97dd116 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFInfoVo.java @@ -0,0 +1,33 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +/** + * @author: furunxin + * @Date: 2020/7/12 08:52 + * @Description: + */ + +@Data +public class WxCarCYFInfoVo { + + private int deviceId; + + private String deviceName; + + private int sentryBoxId; + + private String sentryBoxName; + + private int dutyId; + + private String dutyName; + + private String time; + + private String imageUrl; + + private int plateColor; + + private int mode; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFPayInfoVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFPayInfoVo.java new file mode 100644 index 000000000..d4cbc0f7e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFPayInfoVo.java @@ -0,0 +1,31 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +/** + * @author: furunxin + * @Date: 2020/7/12 08:56 + * @Description: + */ + +@Data +public class WxCarCYFPayInfoVo { + + private int actualFee; + + private int couponFee; + + private int shouldFee; + + private int cardFee; + + private int discountFee; + + private int freeFee; + + private int payWay; + + private String payTime; + + private String orderId; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFVo.java new file mode 100644 index 000000000..79e040c43 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCarCYFVo.java @@ -0,0 +1,32 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +/** + * @author: furunxin + * @Date: 2020/7/12 08:49 + * @Description: + */ + +@Data +public class WxCarCYFVo { + private int parkingId; + + private int localInoutparkingId; + + private String recordOrderId; + + private String plate; + + private WxCarCYFInfoVo inInfo; + + private WxCarCYFInfoVo outInfo; + + private int feeGroupId; + + private String feeGroupName; + + private String MemoMemo; + + private WxCarCYFPayInfoVo payInfoList; +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java index 98bdc7e37..251d459bf 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java @@ -17,6 +17,7 @@ public enum EnumCarCmd { CAR_TJD_CALLBACK_PAID(613, "停简单支付通知"), CAR_TJD_CALLBACK_REFUND(614, "停简单退款通知"), CAR_CYF_CALLBACK_PARK_IN(620,"车易付进场通知"), + CAR_CYF_CALLBACK_PARK_OUT(621,"车易付进场通知"), ; public static EnumCarCmd getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/utils/car/CYFUtil.java b/mallinkService/src/main/java/com/iformall/utils/car/CYFUtil.java index 402c121fd..0c9cc2f59 100644 --- a/mallinkService/src/main/java/com/iformall/utils/car/CYFUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/car/CYFUtil.java @@ -49,6 +49,9 @@ public class CYFUtil { public static final String REGISTER_CAR_URL = "http://oepn.cheyifu2016.com:8892/openapi/personCar"; + public static final String GET_CAR_STOPFEE = "http://open.cheyifu2016.com:8892/openapi/getFee"; + + /** * @description UTC时间转化为本地时间 * @Params [utcTime] @@ -99,7 +102,7 @@ public class CYFUtil { public String registerCar(String token,int carport,int feeGroupId,String parkingId,String plates,long personId,String personName){ Map paramMap = new HashMap<>(); paramMap.put("token ",token); - paramMap.put("parkingId",parkingId); + paramMap.put("parkingId",Integer.valueOf(parkingId)); paramMap.put("beginTime",getLocalDate()); paramMap.put("endTime",getLocalDate()); paramMap.put("feeGroupId",feeGroupId); @@ -111,6 +114,23 @@ public class CYFUtil { return result; } + /** + * @description 根据车牌号获取停车费 + * @Params [token, parkingId, plates] + * @return java.lang.String + * @Author furunxin + * @Date 2020/7/12 下午3:51 + **/ + public String getCarStopFee(String token,String parkingId,String plates){ + Map paramMap = new HashMap<>(); + paramMap.put("token ",token); + paramMap.put("parkingId",Integer.valueOf(parkingId)); + paramMap.put("plates",plates); + paramMap.put("carOutTime",0); + String result = Proc(GET_CAR_STOPFEE, paramMap); + return result; + } + private static String Proc(String url, Map paramMap) {