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 17b7fbd33..375402ff6 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarCYFCallBackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarCYFCallBackController.java @@ -35,7 +35,7 @@ import java.util.Map; @Slf4j @RestController -@RequestMapping("/carCallback") +//@RequestMapping("/carCallback") public class WxCarCYFCallBackController extends BaseController { @Autowired @@ -66,7 +66,7 @@ public class WxCarCYFCallBackController extends BaseController { * @Author furunxin * @Date 2020/7/8 上午8:27 **/ - @PostMapping(value = "/cyfParkInCallback") + //@PostMapping(value = "/cyfParkInCallback") public Map cyfParkInCallback(@RequestBody Map paramMap) { log.info("["+getIpAddr()+"] cyfParkInCallback: " + paramMap.toString()); //解析车易付参数 @@ -167,7 +167,7 @@ public class WxCarCYFCallBackController extends BaseController { * @Author furunxin * @Date 2020/7/12 上午9:00 **/ - @PostMapping(value = "/cyfParkOutCallback") + //@PostMapping(value = "/cyfParkOutCallback") public Map cyfParkOutCallback(@RequestBody WxCarCYFVo param) { String requestJson = JSONObject.toJSONString(param); log.info("["+getIpAddr()+"cyfParkOutCallback: " + requestJson); diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/WxParkCallBackBaseController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/WxParkCallBackBaseController.java index b7a19a67d..1a5a0beb8 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/WxParkCallBackBaseController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/WxParkCallBackBaseController.java @@ -11,10 +11,15 @@ import com.iformall.enums.EnumCarVendor; import com.iformall.enums.EnumCouponSendSendType; import com.iformall.enums.EnumETCPCode; import com.iformall.enums.EnumPayWay; +import com.iformall.exception.MallinkException; import com.iformall.service.*; import com.iformall.service.park.ParkFactory; +import com.iformall.service.park.entity.ParkNotifyParam; import com.iformall.utils.DateUtils; +import com.iformall.utils.car.CYFUtil; import com.iformall.utils.car.ETCPUtil; +import com.iformall.utils.car.TJDUtil; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -65,75 +70,169 @@ public class WxParkCallBackBaseController extends BaseController { @Autowired ParkFactory parkFactory; - protected Result parkInCallBack(EnumCarVendor vendor,Map paramMap) { - return null; + private WxCarCmdLog saveWxCarCmdLog(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam,ParkNotifyParam param) throws MallinkException { + Date currentDate = new Date(); + WxCarCmdLog wxCarCmdLog = new WxCarCmdLog(); + wxCarCmdLog.setVendorType(vendor.getCode()); + wxCarCmdLog.setCmdType(cmdType.getCode()); + wxCarCmdLog.setCmdJson(JSON.toJSONString(sourceParam)); + wxCarCmdLog.setCreateDate(currentDate); + wxCarCmdLog.setUpdateDate(currentDate); + + String parkId = param.getParkId(); + WxPark parkQ = new WxPark(); + parkQ.setVendorType(vendor.getCode()); + parkQ.setParkingId(parkId); + WxPark park = wxParkService.getByObj(parkQ); + if (park == null) { + logger.error(parkId+"车场未找到"); + throw new MallinkException(Result.ERROR,parkId+"车场未找到"); + } else { + wxCarCmdLog.updateTenantInfo(park); + } +// Object synId = paramMap.get(synIdkey); +// // 检查是否有重复数据 +// HashMap map = new HashMap(); +// map.put("synId", synId); +// map.put("cmdType", cmdType.getCode()); +// if (StringUtils.isNotBlank(wxCarCmdLog.getTenantId())) { +// map.put("tenantId", wxCarCmdLog.getTenantId()); +// } +// if (StringUtils.isNotBlank(wxCarCmdLog.getParentTenantId())) { +// map.put("parentTenantId", wxCarCmdLog.getParentTenantId()); +// } +// WxCarCmdLog carCmdLog = wxCarCmdLogService.getBySynId(map); +// if(carCmdLog != null) { +// logger.error("par WxCarCmdLog synId已入库: " + paramMap.toString()); +// } + + try { + wxCarCmdLogService.saveOrUpdate(wxCarCmdLog); + } catch (Exception e) { + logger.error("parkInCallBack: 入库错误 " + e.getMessage() ,e); + throw new MallinkException(Result.ERROR,parkId+", WxCarCmdLog入库错误"); + } + return wxCarCmdLog; } - public Result etcpParkInCallback(@RequestBody Map paramMap) { - logger.info("["+getIpAddr()+"] etcpParkInCallback: " + paramMap.toString()); - - doEtcpParkIn(paramMap); + private WxCarPayRecord saveWxCarPayRecord(Object sourceParam,ParkNotifyParam param,WxCarCmdLog wxCarCmdLog,String phone) throws MallinkException { + try { + String parkName = param.getParkName(); + // 保存WxCarPayRecord + WxCarPayRecord record = new WxCarPayRecord(); + record.updateTenantInfo(wxCarCmdLog); + record.setVendorType(wxCarCmdLog.getVendorType()); + record.setSynId(param.getSynId()); + record.setParkId(param.getParkId()); + record.setParkName(parkName); + //record.setUserType(userType); + record.setPlateNumber(param.getCarNumber()); + record.setEntranceTime(param.getEntranceTime()); + record.setExitTime(param.getOutTime()); + if (null != record.getEntranceTime() && null != record.getExitTime()) { + Long stayedTime = (record.getExitTime().getTime() - record.getEntranceTime().getTime())/ 1000; + record.setStayedTime(stayedTime); + } + record.setFee(param.getFee()); + //record.setFixParkingId(fixParkingId); + //record.setRemainingDays(remainingDays); + record.setPhone(phone); + record.updateTenantInfo(wxCarCmdLog); - return new Result(EnumETCPCode.SUCCESS.getCode(), EnumETCPCode.SUCCESS.getMessage()); + WxCarPayRecord query = new WxCarPayRecord(); + //query.updateTenantInfo(park); + //query.setParkId(etcpParkId.toString()); + query.setSynId(param.getSynId()); + PageInfo page = wxCarPayRecordService.findCarPayListByPage(query,1,1); + if(page != null && CollectionUtils.isNotEmpty(page.getList())){ + record.setId(page.getList().get(0).getId()); + } + wxCarPayRecordService.saveOrUpdate(record); + return record; + } catch (Exception e) { + logger.error("WxCarPayRecord: 入库错误",e); + throw new MallinkException(Result.ERROR,param.getParkId()+"parkInCallBack: WxCarPayRecord入库错误"); + } } - - /** - * ETCP 车辆出场通知 - * { - * "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" - * } - */ - @PostMapping(value = "/etcpParkOutCallback") - public Result etcpParkOutCallback(@RequestBody Map paramMap) { - logger.info("["+getIpAddr()+"etcpParkOutCallback: " + paramMap.toString()); - - doEtcpParkOut(paramMap); - - return new Result(EnumETCPCode.SUCCESS.getCode(), EnumETCPCode.SUCCESS.getMessage()); + + + protected Result parkInCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { + + ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parseInNoticyParam(sourceParam); + //添加wxCarCmdLog + WxCarCmdLog wxCarCmdLog = null; + try { + wxCarCmdLog = saveWxCarCmdLog(vendor, cmdType, sourceParam, param); + }catch(MallinkException e) { + return new Result(Result.ERROR,e.getMessage()); + } + + String carNumber = param.getCarNumber(); + String phoneStrs = ""; + // 停车发券 + if (!StringUtils.isBlank(carNumber)) { + // 根据车牌查找用户 + WxCUserCar userCarQ = new WxCUserCar(); + if (StringUtils.isNotBlank(wxCarCmdLog.getTenantId())) { + userCarQ.setTenantId(wxCarCmdLog.getTenantId()); + } + userCarQ.setCarNumber(carNumber); + userCarQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); + // TODO 可能多用户关联同一张车牌 + List userCarList = wxCUserCarService.getList(userCarQ); + boolean bFirst = true; + for (WxCUserCar userCar : userCarList) { + userCar.setParentTenantId(wxCarCmdLog.getParentTenantId()); + wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.CAR_STOP, userCar,EnumPayWay.PAY_WAY_NOT_UNPAY_CAR_STOP); + WxCUserBasicInfo cUser = wxCUserBasicInfoService.getById(userCar.getCUserId()); + if(cUser != null){ + if(bFirst) { + phoneStrs = cUser.getPhone(); + bFirst = false; + } else { + phoneStrs += "," + cUser.getPhone(); + } + } + } + } + try { + saveWxCarPayRecord(sourceParam, param, wxCarCmdLog, phoneStrs); + }catch(MallinkException e) { + return new Result(Result.ERROR,e.getMessage()); + } + return new Result(); } - /** - * ETCP 车辆解绑通知 - * { - * "plateNumber": "渝 ATX061", - * "time": "2017-08-20 11:57:51" - * } - */ - @PostMapping(value = "/etcpUnbindCarCallBack") - public Result etcpUnbindCarCallBack(@RequestBody Map paramMap) { - logger.info("["+getIpAddr()+"etcpUnbindCarCallBack: " + paramMap.toString()); - String carNumber = paramMap.get("plateNumber"); - - // TODO how to get the parkId - - Date currentDate = new Date(); - WxCarCmdLog wxCarCmdLog = new WxCarCmdLog(); - wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_UNBIND.getCode()); - wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap)); - wxCarCmdLog.setCreateDate(currentDate); - wxCarCmdLog.setUpdateDate(currentDate); - try { - wxCarCmdLogService.saveOrUpdate(wxCarCmdLog); - } catch (Exception e) { - logger.error("etcpUnbindCarCallBack: 入库错误 " + paramMap.toString()); - return new Result(ErrorCode.DB_FAIL.getCode(), "入库错误" + paramMap.toString()); + protected Result parkOutCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { + ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parseOutNoticyParam(sourceParam); + WxCarCmdLog wxCarCmdLog = null; + try { + wxCarCmdLog = saveWxCarCmdLog(vendor, cmdType, sourceParam, param); + }catch(MallinkException e) { + return new Result(Result.ERROR,e.getMessage()); + } + + try { + saveWxCarPayRecord(sourceParam,param, wxCarCmdLog, null); + }catch(MallinkException e) { + return new Result(Result.ERROR,e.getMessage()); } + return new Result(); + } + + protected Result unbindCarCallBack(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { + ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parseUnbindNoticyParam(sourceParam); + WxCarCmdLog wxCarCmdLog = null; + try { + wxCarCmdLog = saveWxCarCmdLog(vendor, cmdType, sourceParam, param); + }catch(MallinkException e) { + return new Result(Result.ERROR,e.getMessage()); + } + + String carNumber = param.getCarNumber(); WxCUserCar userCarQ = new WxCUserCar(); - userCarQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); + userCarQ.setVendorType(vendor.getCode()); userCarQ.setCarNumber(carNumber); // 数据库里删除,保持同步 try { @@ -145,114 +244,71 @@ public class WxParkCallBackBaseController extends BaseController { return new Result(EnumETCPCode.SUCCESS.getCode(), EnumETCPCode.SUCCESS.getMessage()); } - /** - * ETCP 主动支付结果通知 - * { - * "signment":"B8534D2E8FA2074C216CCEF087AA9954", - * "payWayDesc":"微信", - * "plateNumber": "渝 ATX061", - * "orderId": "fd92f645-880e-4c2a-9d7d-7081a2488181", - * "fee": 7.65, - * "paidServiceFee": 0.07, - * "coupon": 0, - * "time": "2017-08-20 11:57:51" - * "discountAmount":0, - * "onceServiceFeePaid":0.0, - * "couponCode":"" - * } - */ - @PostMapping(value = "/etcpPaidCallback") - public Result etcpPaidCallback(@RequestBody Map paramMap) { - logger.info("["+getIpAddr()+"etcpPaidCallback: " + paramMap.toString()); - String carNumber = paramMap.get("plateNumber"); - - // 根据orderId获取入场信息,确定租户ID - String orderId = paramMap.get(ETCPUtil.ETCP_ORDER_ID); - String etcpTime = paramMap.get(ETCPUtil.ETCP_TIME); + protected Result paidCallback(EnumCarVendor vendor,EnumCarCmd cmdType,Object sourceParam) { + ParkNotifyParam param = parkFactory.getParkCallbackService(vendor.getCode()).parsePaidNoticyParam(sourceParam); + WxCarCmdLog carCmdLogQ = new WxCarCmdLog(); - carCmdLogQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - carCmdLogQ.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); - carCmdLogQ.setSynId(orderId); - carCmdLogQ.setPlateNumber(carNumber); - WxCarCmdLog tenantInfo = wxCarCmdLogService.getTenantInfoBySynId(carCmdLogQ); - String tenantId = null; - /// if not found syn_id, maybe use user_car to get tenantId - if(tenantInfo == null) { - WxCUserCar queryOne = new WxCUserCar(); - queryOne.setCarNumber(carNumber); - WxCUserCar userCar = wxCUserCarService.getOnlyOne(queryOne); - if(userCar != null) { - tenantId = userCar.getTenantId(); - } - if (StringUtils.isNotBlank(tenantId)) { - carCmdLogQ.setTenantId(tenantId); - } + String parkId = param.getParkId(); + WxPark parkQ = new WxPark(); + parkQ.setVendorType(vendor.getCode()); + parkQ.setParkingId(parkId); + WxPark park = wxParkService.getByObj(parkQ); + if (park == null) { + logger.error(parkId+"车场未找到"); + throw new MallinkException(Result.ERROR,parkId+"车场未找到"); } else { - carCmdLogQ.updateTenantInfo(tenantInfo); + carCmdLogQ.updateTenantInfo(park); } + + carCmdLogQ.setVendorType(vendor.getCode()); + carCmdLogQ.setCmdType(cmdType.getCode()); + carCmdLogQ.setSynId(param.getParkOrderId()); + carCmdLogQ.setPlateNumber(param.getCarNumber()); // 检查是否有重复数据 - - String paidServiceFee = paramMap.get(ETCPUtil.ETCP_PAID_SERVICE_FEE); - String fee = paramMap.get(ETCPUtil.ETCP_FEE); - Date feeTime = null; - - if(StringUtils.isNotBlank(etcpTime)) { - try { - feeTime = dateFormat.parse(etcpTime); - } catch (ParseException e) { - logger.error("解析fee time出错" + etcpTime); - } - } - carCmdLogQ.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); - carCmdLogQ.setPlateNumber(carNumber); - carCmdLogQ.setOrderId(orderId); + String paidServiceFee = param.getPaidServiceFee(); + String fee = param.getFee(); + carCmdLogQ.setCmdType(cmdType.getCode()); + carCmdLogQ.setPlateNumber(param.getCarNumber()); + carCmdLogQ.setOrderId(param.getParkOrderId()); carCmdLogQ.setFee(fee); - carCmdLogQ.setFeeTime(etcpTime); + carCmdLogQ.setFeeTime(dateFormat.format(param.getPayTime())); WxCarCmdLog carCmdLog = wxCarCmdLogService.getByOrderId(carCmdLogQ); if(carCmdLog != null) { - logger.error("ETCP order paid 已入库: " + orderId); + logger.error("ETCP order paid 已入库: " + param.getParkOrderId()); } Date currentDate = new Date(); WxCarCmdLog wxCarCmdLog = new WxCarCmdLog(); - if (tenantInfo != null) { - wxCarCmdLog.updateTenantInfo(tenantInfo); - } else { - if (StringUtils.isNotBlank(tenantId)) { - wxCarCmdLog.setTenantId(tenantId); - } - } + wxCarCmdLog.updateTenantInfo(park); if(carCmdLog != null) { // 如果有15分钟的已支付的数据,自动覆盖 wxCarCmdLog.setId(carCmdLog.getId()); } - wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); - wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap)); + wxCarCmdLog.setVendorType(vendor.getCode()); + wxCarCmdLog.setCmdType(cmdType.getCode()); + wxCarCmdLog.setCmdJson(JSON.toJSONString(sourceParam)); wxCarCmdLog.setCreateDate(currentDate); wxCarCmdLog.setUpdateDate(currentDate); try { wxCarCmdLogService.saveOrUpdate(wxCarCmdLog); } catch (Exception e) { - logger.error("etcpPaidCallback: 入库错误 " + paramMap.toString()); - return new Result(ErrorCode.DB_FAIL.getCode(), "入库错误" + paramMap.toString()); + logger.error("etcpPaidCallback: 入库错误 ",e); + return new Result(ErrorCode.DB_FAIL.getCode(), "wxCarCmdLog入库错误"); } try { // 保存WxCarPayRecord WxCarPayRecord record = new WxCarPayRecord(); - record.setSynId(orderId); + record.setSynId(param.getParkOrderId()); record.setFee(fee); - if(feeTime != null) { - record.setFeeTime(feeTime); - } + record.setFeeTime(param.getPayTime()); record.setPaidServiceFee(paidServiceFee); record.setVendorType(wxCarCmdLog.getVendorType()); - record.setPlateNumber(carNumber); - record.setTenantId(tenantId); + record.setPlateNumber(param.getCarNumber()); + record.updateTenantInfo(park); WxCarPayRecord query = new WxCarPayRecord(); - query.setSynId(orderId); + query.setSynId(param.getParkOrderId()); PageInfo page = wxCarPayRecordService.findCarPayListByPage(query,1,2); if(page != null && page.getList().size() > 0){ @@ -266,7 +322,7 @@ public class WxParkCallBackBaseController extends BaseController { wxCarPayRecordService.saveOrUpdate(record); } else { // 缴费时间在15分钟以内,更新之前的数据, ETCP会把之前的缴费自动退款 - if(DateUtils.isInDate15Mins(feeTime, r.getFeeTime())) { + if(DateUtils.isInDate15Mins(param.getPayTime(), r.getFeeTime())) { record.setId(r.getId()); } wxCarPayRecordService.saveOrUpdate(record); @@ -276,7 +332,8 @@ public class WxParkCallBackBaseController extends BaseController { wxCarPayRecordService.saveOrUpdate(record); } } catch (Exception e) { - logger.error("WxCarPayRecord: 缴费更新错误 " +e.getMessage()+", "+ paramMap.toString()); + logger.error("WxCarPayRecord: 缴费更新错误 " +e.getMessage(),e); + return new Result(ErrorCode.DB_FAIL.getCode(), "WxCarPayRecord入库错误"); //return new Result(ErrorCode.DB_FAIL.getCode(), "入库错误" + paramMap.toString()); } @@ -284,198 +341,5 @@ public class WxParkCallBackBaseController extends BaseController { return new Result(EnumETCPCode.SUCCESS.getCode(), EnumETCPCode.SUCCESS.getMessage()); } - // @Async - private boolean doEtcpParkIn(@RequestBody Map paramMap) { - Date currentDate = new Date(); - WxCarCmdLog wxCarCmdLog = new WxCarCmdLog(); - - wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); - wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap)); - wxCarCmdLog.setCreateDate(currentDate); - wxCarCmdLog.setUpdateDate(currentDate); - - String etcpParkId = paramMap.get(ETCPUtil.ETCP_PARK_ID); - WxPark parkQ = new WxPark(); - parkQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - parkQ.setParkingId(etcpParkId); - WxPark park = wxParkService.getByObj(parkQ); - if (park == null) { - logger.error("etcpParkInCallback: ETCP车场未找到" + etcpParkId); - //return new Result(ErrorCode.CAR_PARK_NOT_FOUND.getCode(), "ETCP车场未找到"+ etcpParkId); - } else { - wxCarCmdLog.updateTenantInfo(park); - } - - String carNumber = paramMap.get(ETCPUtil.ETCP_CAR_NUMBER); - String synId = paramMap.get(ETCPUtil.ETCP_SYN_ID); - String parkName = paramMap.get(ETCPUtil.ETCP_PARK_NAME); - String userType = paramMap.get(ETCPUtil.ETCP_USER_TYPE); - String entranceTime = paramMap.get(ETCPUtil.ETCP_ENTRANCE_TIME); - String fixParkingId = paramMap.get(ETCPUtil.ETCP_FIX_PARKING_ID); - String remainingDays = paramMap.get(ETCPUtil.ETCP_REMAINING_DAYS); - - // 检查是否有重复数据 - HashMap map = new HashMap(); - map.put("synId", synId); - map.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); - if (StringUtils.isNotBlank(wxCarCmdLog.getTenantId())) { - map.put("tenantId", wxCarCmdLog.getTenantId()); - } - if (StringUtils.isNotBlank(wxCarCmdLog.getParentTenantId())) { - map.put("parentTenantId", wxCarCmdLog.getParentTenantId()); - } - WxCarCmdLog carCmdLog = wxCarCmdLogService.getBySynId(map); - if(carCmdLog != null) { - logger.error("ETCP synId已入库: " + paramMap.toString()); - return true; - } - - try { - wxCarCmdLogService.saveOrUpdate(wxCarCmdLog); - } catch (Exception e) { - logger.error("etcpParkInCallback: 入库错误 " + e.getMessage() + "\n" + paramMap.toString()); - return true; - } - - String phoneStrs = ""; - - // 停车发券 - if (!StringUtils.isBlank(carNumber)) { - // 根据车牌查找用户 - WxCUserCar userCarQ = new WxCUserCar(); - if (StringUtils.isNotBlank(wxCarCmdLog.getTenantId())) { - userCarQ.setTenantId(wxCarCmdLog.getTenantId()); - } - userCarQ.setCarNumber(carNumber); - userCarQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - // TODO 可能多用户关联同一张车牌 - List userCarList = wxCUserCarService.getList(userCarQ); - boolean bFirst = true; - for (WxCUserCar userCar : userCarList) { - userCar.setParentTenantId(park.getParentTenantId()); - wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.CAR_STOP, userCar,EnumPayWay.PAY_WAY_NOT_UNPAY_CAR_STOP); - WxCUserBasicInfo cUser = wxCUserBasicInfoService.getById(userCar.getCUserId()); - if(cUser != null){ - if(bFirst) { - phoneStrs = cUser.getPhone(); - bFirst = false; - } else { - phoneStrs += "," + cUser.getPhone(); - } - } - } - } - - try { - // 保存WxCarPayRecord - WxCarPayRecord record = new WxCarPayRecord(); - record.setVendorType(wxCarCmdLog.getVendorType()); - record.setSynId(synId); - record.setParkId(etcpParkId); - record.setParkName(parkName); - record.setUserType(userType); - record.setPlateNumber(carNumber); - if(StringUtils.isNotBlank(entranceTime)) { - record.setEntranceTime(dateFormat.parse(entranceTime)); - } - record.setFixParkingId(fixParkingId); - record.setRemainingDays(remainingDays); - record.setPhone(phoneStrs); - record.updateTenantInfo(wxCarCmdLog); - - WxCarPayRecord query = new WxCarPayRecord(); - query.setSynId(synId); - 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) { - e.printStackTrace(); - logger.error("WxCarPayRecord: 入库错误 ",e); - logger.error("WxCarPayRecord: 入库错误 "+e.getMessage()+"," + paramMap.toString()); - return true; - } - return false; - } - - private boolean doEtcpParkOut(@RequestBody Map paramMap) { - Date currentDate = new Date(); - - WxCarCmdLog wxCarCmdLog = new WxCarCmdLog(); - wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); - wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap)); - wxCarCmdLog.setCreateDate(currentDate); - wxCarCmdLog.setUpdateDate(currentDate); - - String etcpParkId = paramMap.get(ETCPUtil.ETCP_PARK_ID); - String tenantId = null; - WxPark parkQ = new WxPark(); - parkQ.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - parkQ.setParkingId(etcpParkId); - WxPark park = wxParkService.getByObj(parkQ); - if (park == null) { - logger.error("etcpParkOutCallback: ETCP车场未找到 " + etcpParkId); - // return new Result(ErrorCode.CAR_PARK_NOT_FOUND.getCode(), "ETCP车场未找到"+ etcpParkId); - } else { - tenantId = park.getTenantId(); - wxCarCmdLog.updateTenantInfo(park); - } - - try { - wxCarCmdLogService.saveOrUpdate(wxCarCmdLog); - } catch (Exception e) { - logger.error("etcpParkOutCallback: 入库错误 " + e.getMessage() + "\n" + paramMap.toString()); - return true; - } - - String synId = paramMap.get(ETCPUtil.ETCP_SYN_ID); - String exitTime = paramMap.get(ETCPUtil.ETCP_EXIT_TIME); - String stayedTime = paramMap.get(ETCPUtil.ETCP_STAYED_TIME); - String carNumber = paramMap.get(ETCPUtil.ETCP_CAR_NUMBER); - String parkName = paramMap.get(ETCPUtil.ETCP_PARK_NAME); - String userType = paramMap.get(ETCPUtil.ETCP_USER_TYPE); - String entranceTime = paramMap.get(ETCPUtil.ETCP_ENTRANCE_TIME); - String fixParkingId = paramMap.get(ETCPUtil.ETCP_FIX_PARKING_ID); - String remainingDays = paramMap.get(ETCPUtil.ETCP_REMAINING_DAYS); - - try { - // 保存WxCarPayRecord - WxCarPayRecord record = new WxCarPayRecord(); - record.setSynId(synId); - if(StringUtils.isNotBlank(exitTime)) { - record.setExitTime(dateFormat.parse(exitTime)); - } - if(StringUtils.isNotBlank(stayedTime)) { - record.setStayedTime(Long.parseLong(stayedTime)); - } - record.setVendorType(wxCarCmdLog.getVendorType()); - record.setSynId(synId); - record.setParkId(etcpParkId); - record.setParkName(parkName); - record.setUserType(userType); - record.setPlateNumber(carNumber); - if(StringUtils.isNotBlank(entranceTime)) { - record.setEntranceTime(dateFormat.parse(entranceTime)); - } - record.setFixParkingId(fixParkingId); - record.setRemainingDays(remainingDays); - //record.setPhone(phoneStrs); - record.setTenantId(tenantId); - WxCarPayRecord query = new WxCarPayRecord(); - query.setSynId(synId); - 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) { - logger.error("WxCarPayRecord: 出场更新错误 " +e.getMessage()+", " +paramMap.toString()); - return true; - } - return false; - } } diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/cyf/WxCarCYFCallBackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/cyf/WxCarCYFCallBackController.java new file mode 100644 index 000000000..2884ebd93 --- /dev/null +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/cyf/WxCarCYFCallBackController.java @@ -0,0 +1,107 @@ +package com.iformall.controller.callback.cyf; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.controller.base.BaseController; +import com.iformall.controller.callback.WxParkCallBackBaseController; +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.enums.EnumPayWay; +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; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author: furunxin + * @Date: 2020/7/6 15:29 + * @Description: 车易付回调接口 + */ + +@Slf4j +@RestController +@RequestMapping("/carCallback") +public class WxCarCYFCallBackController extends WxParkCallBackBaseController { + + @Autowired + WxParkService wxParkService; + + @Autowired + WxCarCmdLogService wxCarCmdLogService; + + @Autowired + WxCUserService wxCUserService; + + @Autowired + WxCUserCarService wxCUserCarService; + + @Autowired + WxCouponSendService wxCouponSendService; + + @Autowired + WxCarPayRecordService wxCarPayRecordService; + + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + + /** + * @description 车易付 车辆入场通知 + * @Params [paramMap] + * @return com.iformall.common.Result + * @Author furunxin + * @Date 2020/7/8 上午8:27 + **/ + @PostMapping(value = "/cyfParkInCallback") + public Result cyfParkInCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] cyfParkInCallback: " + paramMap.toString()); + //解析车易付参数 + return super.parkInCallBack(EnumCarVendor.CAE_CYF, EnumCarCmd.CAR_CYF_CALLBACK_PARK_IN, paramMap); + } + + + /** + * @description 车易付 车辆离场通知 + * @Params [param] + * @return java.util.Map + * @Author furunxin + * @Date 2020/7/12 上午9:00 + **/ + @PostMapping(value = "/cyfParkOutCallback") + public Result cyfParkOutCallback(@RequestBody WxCarCYFVo param) { + String requestJson = JSONObject.toJSONString(param); + log.info("["+getIpAddr()+"cyfParkOutCallback: " + requestJson); + return super.parkOutCallBack(EnumCarVendor.CAE_CYF, EnumCarCmd.CAR_CYF_CALLBACK_PARK_OUT, param); + + } + + @PostMapping(value = "/cyfUnbindCallback") + public Result cyfUnbindCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] cyfParkInCallback: " + paramMap.toString()); + //解析车易付参数 + return super.unbindCarCallBack(EnumCarVendor.CAE_CYF, EnumCarCmd.CAR_CYF_CALLBACK_UNBIND, paramMap); + } + + @PostMapping(value = "/cyfPaidCallback") + public Result cyfPaidCallback(@RequestBody Map paramMap) { + log.info("["+getIpAddr()+"] cyfParkInCallback: " + paramMap.toString()); + //解析车易付参数 + return super.paidCallback(EnumCarVendor.CAE_CYF, EnumCarCmd.CAR_CYF_CALLBACK_PAID, paramMap); + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java index 251d459bf..b2099853a 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java @@ -18,6 +18,8 @@ public enum EnumCarCmd { CAR_TJD_CALLBACK_REFUND(614, "停简单退款通知"), CAR_CYF_CALLBACK_PARK_IN(620,"车易付进场通知"), CAR_CYF_CALLBACK_PARK_OUT(621,"车易付进场通知"), + CAR_CYF_CALLBACK_UNBIND(622,"车易付解绑车牌通知"), + CAR_CYF_CALLBACK_PAID(623,"车易付支付通知") ; public static EnumCarCmd getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkCallBackAdapterService.java b/mallinkService/src/main/java/com/iformall/service/park/ParkCallBackAdapterService.java index 4abc175c9..cff99cecc 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/ParkCallBackAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkCallBackAdapterService.java @@ -2,6 +2,8 @@ package com.iformall.service.park; import java.util.Map; +import com.iformall.service.park.entity.ParkNotifyParam; + /** * 停车场回调 * @author alascor @@ -10,26 +12,26 @@ import java.util.Map; public interface ParkCallBackAdapterService { /** - * 车辆入场通知 + * 解析车辆入场通知参数 * @param param */ - void inNoticy(Map param); + ParkNotifyParam parseInNoticyParam(Object param); /** - * 车辆出场通知 + * 解析车辆出场通知参数 * @param param */ - void outNoticy(Map param); + ParkNotifyParam parseOutNoticyParam(Object param); /** - * 车辆解绑通知 + * 解析车辆解绑通知参数 * @param param */ - void unbindNoticy(Map param); + ParkNotifyParam parseUnbindNoticyParam(Object param); /** - * 支付结果通知 + * 解析支付结果通知参数 * @param param */ - void paidNoticy(Map param); + ParkNotifyParam parsePaidNoticyParam(Object param); } diff --git a/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java new file mode 100644 index 000000000..31ee12f8e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java @@ -0,0 +1,33 @@ +package com.iformall.service.park.entity; + +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; + +@Data +public class ParkNotifyParam implements Serializable{ + + private static final long serialVersionUID = -8295607395328571534L; + + String parkId; + + String synId; + + String parkName; + + String carNumber; + + Date entranceTime; + + Date outTime; + + String fee; + + String parkOrderId; + + Date payTime; + + String paidServiceFee;//支付服务费 + +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkCallbackService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkCallbackService.java index 77a835345..06dfed669 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkCallbackService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkCallbackService.java @@ -1,37 +1,63 @@ package com.iformall.service.park.impl.cyf; +import java.text.ParseException; import java.util.Map; import org.springframework.stereotype.Service; import com.iformall.service.park.ParkCallBackAdapterService; +import com.iformall.service.park.entity.ParkNotifyParam; import com.iformall.service.park.impl.BaseParkService; +import com.iformall.utils.car.CYFUtil; +import lombok.extern.slf4j.Slf4j; + +@Slf4j @Service public class CYFParkCallbackService extends BaseParkService implements ParkCallBackAdapterService { @Override - public void inNoticy(Map param) { - // TODO Auto-generated method stub - + public ParkNotifyParam parseInNoticyParam(Object param) { + Map paramMap = (Map) param; + String carNumber = paramMap.get(CYFUtil.CYF_CAR_NUMBER).toString(); + String cyfParkId = paramMap.get(CYFUtil.CYF_PARK_ID).toString(); + String parkName = paramMap.get(CYFUtil.CYF_PARK_NAME).toString(); + String synId = paramMap.get(CYFUtil.CYF_SYN_ID).toString(); + String entranceTime = paramMap.get(CYFUtil.CYF_ENTRANCE_TIME).toString(); + + ParkNotifyParam p = new ParkNotifyParam(); + p.setCarNumber(carNumber); + p.setParkId(cyfParkId); + p.setParkName(parkName); + p.setSynId(synId); + try { + p.setEntranceTime(CYFUtil.utcToLocal(entranceTime)); + } catch (ParseException e) { + e.printStackTrace(); + log.error("cyf entranceTime format error",e); + return null; + } + return p; } @Override - public void outNoticy(Map param) { - // TODO Auto-generated method stub - + public ParkNotifyParam parseOutNoticyParam(Object param) { + + return null; } @Override - public void unbindNoticy(Map param) { + public ParkNotifyParam parseUnbindNoticyParam(Object param) { // TODO Auto-generated method stub - + return null; } @Override - public void paidNoticy(Map param) { + public ParkNotifyParam parsePaidNoticyParam(Object param) { // TODO Auto-generated method stub - + return null; } + + }