| | |
| | | @Autowired |
| | | private MemberRidesMapper memberRidesMapper; |
| | | @Autowired |
| | | private HolidaysMapper holidaysMapper; |
| | | @Autowired |
| | | private PricingParamMapper pricingParamMapper; |
| | | @Autowired |
| | | private PricingDetailMapper pricingDetailMapper; |
| | | @Autowired |
| | | private ActionLogMapper actionLogMapper; |
| | | |
| | | @Autowired |
| | |
| | | //修改后 |
| | | String after = JSONObject.toJSONString(update); |
| | | |
| | | |
| | | ActionLog log = new ActionLog(); |
| | | log.setId(Constants.getUUID()); |
| | | log.setIsdeleted(Constants.ZERO); |
| | |
| | | if (memberRidesMapper.selectCount(new QueryWrapper<MemberRides>().eq("member_id", memberId).in("status", 0, 1)) > Constants.ZERO) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "存在骑行中车辆,无法扫码"); |
| | | } |
| | | ; |
| | | Locks locks = locksMapper.selectOne(new QueryWrapper<Locks>().eq("code", code).eq("isdeleted", Constants.ZERO).last("limit 1")); |
| | | if (Objects.isNull(locks)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "扫码无效,未查询到锁头信息"); |
| | |
| | | if (StringUtils.isBlank(locks.getBikeCode())) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "当前扫码锁头无车辆信息,无法进行开锁"); |
| | | } |
| | | MemberRides memberRides = new MemberRides(); |
| | | //根据车型查询计价方案 |
| | | isValidePricingType(locks,memberRides) ; |
| | | MqttLog flag = deviceService.openLock(locks); |
| | | MemberRidesDetailResponse memberRidesDetailResponse = new MemberRidesDetailResponse(); |
| | | if (flag.getResult() == 0) { |
| | | //存储骑行记录 |
| | | MemberRides memberRides = new MemberRides(); |
| | | memberRides.setId(Constants.getUUID()); |
| | | memberRides.setIsdeleted(Constants.ZERO); |
| | | memberRides.setMemberId(memberId); |
| | |
| | | return memberRidesDetailResponse; |
| | | } |
| | | |
| | | private boolean isValidePricingType(Locks locks,MemberRides memberRides ) { |
| | | Bikes bike= new Bikes(); |
| | | bike.setLockId(locks.getId()); |
| | | bike.setSiteId(locks.getSiteId()); |
| | | //查询车辆信息 |
| | | bike = bikesMapper.selectOne(new QueryWrapper<>(bike).last("limit 1")); |
| | | if(bike == null && StringUtils.isBlank(bike.getParamId())){ |
| | | //如果车辆类型是空 |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " 该车型暂时不能借车操作哦,请更换其他车型重试!"); |
| | | } |
| | | Date date =new Date(); |
| | | |
| | | QueryWrapper<PricingParam> param = new QueryWrapper<>(); |
| | | param.lambda().eq(PricingParam::getStatus,Constants.ZERO); |
| | | param.lambda().eq(PricingParam::getIsdeleted,Constants.ZERO); |
| | | param.lambda().le(PricingParam::getStartDate,date); |
| | | param.lambda().ge(PricingParam::getEndDate,date); |
| | | param.lambda().last(" limit 1" ) ; |
| | | param.lambda().orderByAsc(PricingParam::getSortnum); |
| | | //查询优先级最高(排序码最小的)可用配价方案 |
| | | PricingParam pp = pricingParamMapper.selectOne(param); |
| | | if(pp == null){ |
| | | //如果车辆未设置配价方案,提示开锁失败! |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " 该车型暂时不能借车操作哦,请更换其他车型重试哦!"); |
| | | } |
| | | QueryWrapper<PricingDetail> detail = new QueryWrapper<>(); |
| | | detail.lambda().eq(PricingDetail::getPricePramId,bike.getParamId()); |
| | | detail.lambda().eq(PricingDetail::getIsdeleted,Constants.ZERO); |
| | | detail.lambda().last(" limit 1" ) ; |
| | | //查询优先级最高(排序码最小的)可用配价方案 |
| | | PricingDetail pricingDetail = pricingDetailMapper.selectOne(detail); |
| | | if(pricingDetail == null){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " 该车型暂时不能借车操作哦,请更换其他车型重试哦~"); |
| | | } |
| | | String nowDate = DateUtil.getDateLong(date); |
| | | Holidays holidays = new Holidays(); |
| | | holidays.setHoliday(nowDate); |
| | | holidays.setIsdeleted(Constants.ZERO); |
| | | //检查是否节假日 |
| | | if(holidaysMapper.selectCount(new QueryWrapper<>(holidays)) >0){ |
| | | //如果是节假日 |
| | | memberRides.setBasePrice(pricingDetail.getHolidayBasePrice()); |
| | | memberRides.setBaseTime(pricingDetail.getHolidayBaseTime()); |
| | | memberRides.setUnitPrice(pricingDetail.getHolidayUnitPrice()); |
| | | memberRides.setUnitTime(pricingDetail.getHolidayUnitTime()); |
| | | memberRides.setIsHoliday(Constants.ONE); |
| | | }else{ |
| | | //如果是工作日 |
| | | memberRides.setBasePrice(pricingDetail.getBasePrice()); |
| | | memberRides.setBaseTime(pricingDetail.getBaseTime()); |
| | | memberRides.setUnitPrice(pricingDetail.getUnitPrice()); |
| | | memberRides.setUnitTime(pricingDetail.getUnitTime()); |
| | | memberRides.setIsHoliday(Constants.ZERO); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public MemberRidesDetailResponse refreshLock(String id){ |
| | | MemberRides memberRides = memberRidesMapper.selectById(id); |
| | |
| | | */ |
| | | @Override |
| | | public int mqttLockInfoEvent(Locks locks){ |
| | | if(StringUtils.isBlank(locks.getId()) ||StringUtils.isBlank(locks.getSiteId())){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"锁头信息上报参数错误!"); |
| | | } |
| | | //判断检查处理站点锁头信息 |
| | | Locks model = dealLockAndSite(locks); |
| | | //车辆记录 |
| | |
| | | memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey()); |
| | | memberRides.setRentLockId(model.getId()); |
| | | memberRides.setIsdeleted(Constants.ZERO); |
| | | memberRides = findOne(memberRides); |
| | | if(memberRides == null){ |
| | | return 0; |
| | | } |
| | | //(更新请求开锁中的锁头关联的骑行记录) |
| | | memberRidesMapper.update(null,new UpdateWrapper<>(memberRides)); |
| | | memberRidesMapper.updateById( memberRides); |
| | | } |
| | | return 0; |
| | | } |
| | |
| | | return model; |
| | | } |
| | | |
| | | /** |
| | | * 还车订阅消息业务处理 |
| | | * @param bikes |
| | | * @return |
| | | */ |
| | | @Override |
| | | public int mqttCloseBikeEvent(MemberRides bikes){ |
| | | //免费骑行时长查询,数据字典配置 |
| | | if(StringUtils.isBlank(bikes.getBikeCode()) ||StringUtils.isBlank(bikes.getRentLockId())){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"还车上报参数错误!"); |
| | | } |
| | | QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); |
| | | wrapper.lambda().eq(MemberRides::getBikeCode, bikes.getBikeCode()); |
| | | wrapper.lambda().eq(MemberRides::getStatus, Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey()); |
| | | wrapper.lambda().eq(MemberRides::getIsdeleted, Constants.ZERO); |
| | | //根据车辆编码查询骑行中的骑行记录信息,如果有进行还车操作 |
| | | MemberRides memberRides = memberRidesMapper.selectOne(wrapper.last("last 1")); |
| | | if(memberRides!=null){ |
| | | //进行 |
| | | dealMemberRidesBack(memberRides,bikes); |
| | | } |
| | | |
| | | return 0; |
| | | |
| | | } |
| | | |
| | | private void dealMemberRidesBack(MemberRides memberRides,MemberRides param) { |
| | | |
| | | int freeTime = 0; |
| | | try { |
| | | freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); |
| | | }catch (Exception e){ |
| | | } |
| | | Date date = new Date(); |
| | | MemberRides update = new MemberRides(); |
| | | update.setEditDate(date); |
| | | update.setStatus(Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()); |
| | | update.setBackDate(date); |
| | | update.setBackLockId(param.getBackLockId()); |
| | | update.setBackSiteId(param.getBackSiteId()); |
| | | update.setBackCommondId(param.getBackCommondId()); |
| | | int duration =DateUtil.betweenMin(memberRides.getRentDate(),date)-freeTime; |
| | | update.setDuration(duration>0?duration:0); |
| | | update.setBackType(Constants.ONE); |
| | | update.setBackInfo("用户正常还车"); |
| | | //更新还车记录为已还车 |
| | | memberRidesMapper.updateById(update); |
| | | } |
| | | } |