| @@ -3,6 +3,7 @@ package com.iformall.controller; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONArray; | import com.alibaba.fastjson.JSONArray; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.baomidou.mybatisplus.extension.api.R; | |||||
| import com.iformall.common.ErrorCode; | import com.iformall.common.ErrorCode; | ||||
| import com.iformall.common.Result; | import com.iformall.common.Result; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| @@ -626,6 +627,8 @@ public class WxCarController extends BaseController { | |||||
| return dahuaCarStopFee(paramMap, park); | return dahuaCarStopFee(paramMap, park); | ||||
| } else if (park.getVendorType().equals(EnumCarVendor.CAR_BOLINK.getCode())) { | } else if (park.getVendorType().equals(EnumCarVendor.CAR_BOLINK.getCode())) { | ||||
| return bolinkCarStopFee(paramMap, park); | 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(), "停车费获取失败"); | return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费获取失败"); | ||||
| } | } | ||||
| @@ -715,6 +718,23 @@ public class WxCarController extends BaseController { | |||||
| } | } | ||||
| } | } | ||||
| private ResultData cyfCarStopFee(@RequestBody Map<String, String> paramMap, WxPark park){ | |||||
| String carNumber = paramMap.get("carNumber"); | |||||
| if (StringUtils.isBlank(carNumber)) { | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); | |||||
| } | |||||
| String params = park.getVendorParams(); | |||||
| JSONObject objParams = JSON.parseObject(params); | |||||
| String token = objParams.getString("token"); | |||||
| String ret = cyf.getCarStopFee(token,park.getParkingId(),carNumber); | |||||
| JSONObject retObj = JSON.parseObject(ret); | |||||
| if (retObj.getIntValue("result") == 1){ | |||||
| return new ResultData(retObj); | |||||
| }else { | |||||
| return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败"); | |||||
| } | |||||
| } | |||||
| private String getETCPBusinessID(Long merchantId) { | private String getETCPBusinessID(Long merchantId) { | ||||
| String businessId; | String businessId; | ||||
| WxMerchant wxMerchant = wxMerchantService.getById(merchantId); | WxMerchant wxMerchant = wxMerchantService.getById(merchantId); | ||||
| @@ -1,14 +1,17 @@ | |||||
| package com.iformall.controller.callback; | package com.iformall.controller.callback; | ||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| import com.iformall.controller.base.BaseController; | import com.iformall.controller.base.BaseController; | ||||
| import com.iformall.domain.po.*; | import com.iformall.domain.po.*; | ||||
| import com.iformall.domain.vo.WxCarCYFVo; | |||||
| import com.iformall.enums.EnumCarCmd; | import com.iformall.enums.EnumCarCmd; | ||||
| import com.iformall.enums.EnumCarVendor; | import com.iformall.enums.EnumCarVendor; | ||||
| import com.iformall.enums.EnumCouponSendSendType; | import com.iformall.enums.EnumCouponSendSendType; | ||||
| import com.iformall.service.*; | import com.iformall.service.*; | ||||
| import com.iformall.utils.car.CYFUtil; | import com.iformall.utils.car.CYFUtil; | ||||
| import com.iformall.utils.car.TJDUtil; | |||||
| import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
| import org.apache.commons.collections.CollectionUtils; | import org.apache.commons.collections.CollectionUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
| @@ -151,4 +154,85 @@ public class WxCarCYFCallBackController extends BaseController { | |||||
| map.put(CYFUtil.CYF_IS_RESULT, CYFUtil.CYF_SUC); | map.put(CYFUtil.CYF_IS_RESULT, CYFUtil.CYF_SUC); | ||||
| return map; | 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<WxCarPayRecord> 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; | |||||
| } | |||||
| } | } | ||||
| @@ -164,6 +164,8 @@ public enum ErrorCode{ | |||||
| BOLINK_SIGN_ERR(2066, "泊链签名错误"), | BOLINK_SIGN_ERR(2066, "泊链签名错误"), | ||||
| BOLINK_STOP_FEE_FAIL(2067, "泊链停车费获取失败"), | BOLINK_STOP_FEE_FAIL(2067, "泊链停车费获取失败"), | ||||
| CYF_STOP_FEE_FAIL(2068, "CYF获取停车费失败"), | |||||
| /** | /** | ||||
| * 游戏 | * 游戏 | ||||
| */ | */ | ||||
| @@ -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; | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| @@ -17,6 +17,7 @@ public enum EnumCarCmd { | |||||
| CAR_TJD_CALLBACK_PAID(613, "停简单支付通知"), | CAR_TJD_CALLBACK_PAID(613, "停简单支付通知"), | ||||
| CAR_TJD_CALLBACK_REFUND(614, "停简单退款通知"), | CAR_TJD_CALLBACK_REFUND(614, "停简单退款通知"), | ||||
| CAR_CYF_CALLBACK_PARK_IN(620,"车易付进场通知"), | CAR_CYF_CALLBACK_PARK_IN(620,"车易付进场通知"), | ||||
| CAR_CYF_CALLBACK_PARK_OUT(621,"车易付进场通知"), | |||||
| ; | ; | ||||
| public static EnumCarCmd getEnum(Integer code) { | public static EnumCarCmd getEnum(Integer code) { | ||||
| @@ -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 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时间转化为本地时间 | * @description UTC时间转化为本地时间 | ||||
| * @Params [utcTime] | * @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){ | public String registerCar(String token,int carport,int feeGroupId,String parkingId,String plates,long personId,String personName){ | ||||
| Map<String, Object> paramMap = new HashMap<>(); | Map<String, Object> paramMap = new HashMap<>(); | ||||
| paramMap.put("token ",token); | paramMap.put("token ",token); | ||||
| paramMap.put("parkingId",parkingId); | |||||
| paramMap.put("parkingId",Integer.valueOf(parkingId)); | |||||
| paramMap.put("beginTime",getLocalDate()); | paramMap.put("beginTime",getLocalDate()); | ||||
| paramMap.put("endTime",getLocalDate()); | paramMap.put("endTime",getLocalDate()); | ||||
| paramMap.put("feeGroupId",feeGroupId); | paramMap.put("feeGroupId",feeGroupId); | ||||
| @@ -111,6 +114,23 @@ public class CYFUtil { | |||||
| return result; | 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<String, Object> 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<String, Object> paramMap) { | private static String Proc(String url, Map<String, Object> paramMap) { | ||||