jiangping
2023-10-12 7de15911c90c5861d6e26e29550b6c60b09952c7
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
@@ -53,6 +53,12 @@
    @Autowired
    private MemberRidesMapper memberRidesMapper;
    @Autowired
    private HolidaysMapper holidaysMapper;
    @Autowired
    private PricingParamMapper pricingParamMapper;
    @Autowired
    private PricingDetailMapper pricingDetailMapper;
    @Autowired
    private ActionLogMapper actionLogMapper;
    @Autowired
@@ -375,24 +381,24 @@
        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 (!locks.getStatus().equals(Constants.ZERO)) {
            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) {
            if (Objects.isNull(locks)) {
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "扫码无效,未查询到锁头信息");
            }
            //查询锁头是否存在车辆 以及是否正常
            if (!locks.getStatus().equals(Constants.ZERO)) {
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "当前扫码锁头状态错误,无法进行开锁");
            }
            if (StringUtils.isBlank(locks.getBikeCode())) {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "当前扫码锁头无车辆信息,无法进行开锁");
            }
            //存储骑行记录
            MemberRides memberRides = new MemberRides();
            memberRides.setId(Constants.getUUID());
            memberRides.setIsdeleted(Constants.ZERO);
            memberRides.setMemberId(memberId);
@@ -427,6 +433,63 @@
        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);
@@ -458,8 +521,13 @@
            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;
    }