bug
jiangping
2023-11-08 bbcde9efaa2a43a1d95442d9624258eae6a7659c
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
@@ -177,10 +177,12 @@
    public MemberRides findJoinById(String id) {
        MPJLambdaWrapper<MemberRides> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.leftJoin(BaseParam.class,BaseParam::getId,MemberRides::getParamId);
        queryWrapper.leftJoin(BaseParam.class,BaseParam::getId,MemberRides::getParamId)
                    .leftJoin(Member.class,Member::getId,MemberRides::getMemberId);
        queryWrapper.eq(MemberRides::getId, id);
        queryWrapper.selectAll(MemberRides.class);
        queryWrapper.selectAs(BaseParam::getName,MemberRidesDTO::getBikeType) ;
        queryWrapper.selectAs(BaseParam::getName,MemberRidesDTO::getBikeType);
        queryWrapper.selectAs(Member::getOpenid,MemberRides::getMemberOpenid);
        queryWrapper.last("limit 1");
        return memberRidesJoinMapper.selectJoinOne(MemberRides.class, queryWrapper);
@@ -189,6 +191,15 @@
    public PageData<BikeLogDTO> findBikeLog(PageWrap<MemberRidesQuery> pageWrap) {
        IPage<MemberRides> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<MemberRides> queryWrapper = initQueryParamByModel(pageWrap.getModel());
        MemberRidesQuery model = pageWrap.getModel();
        //已还车
        if (Objects.nonNull(model.getHasBack()) && model.getHasBack()){
            queryWrapper.eq(MemberRides::getStatus,Constants.TWO);
        }
        //未归还的
        if (Objects.nonNull(model.getHasBack()) && !model.getHasBack()){
            queryWrapper.eq(MemberRides::getStatus,Constants.ONE);
        }
        IPage<BikeLogDTO> bikeLogDTOIPage = memberRidesJoinMapper.selectJoinPage(page, BikeLogDTO.class, queryWrapper);
        initBikeLogObj(bikeLogDTOIPage.getRecords());
        return PageData.from(bikeLogDTOIPage);
@@ -221,7 +232,7 @@
            queryWrapper.ge(MemberRides::getRentDate, Utils.Date.getStart(model.getStartDate()));
        }
        if (Objects.nonNull(model.getEndDate())) {
            queryWrapper.le(MemberRides::getRentDate, Utils.Date.getStart(model.getEndDate()));
            queryWrapper.le(MemberRides::getRentDate, Utils.Date.getEnd(model.getEndDate()));
        }
        queryWrapper.eq(model.getCloseStatus()!=null,MemberRides::getCloseStatus, model.getCloseStatus());
        queryWrapper.eq(model.getStatus()!=null,MemberRides::getStatus, model.getStatus());
@@ -357,7 +368,7 @@
        update.setBackType(Constants.ONE);
        update.setStatus(Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey());
        update.setBackSiteId(collect.get(Constants.FORCE_BACK_SITE).getCode());
        update.setBackLockId(collect.get(Constants.FORCE_BACK_LOCK).getCode());
        update.setBackLockId(Constants.formatIntegerFromStr(collect.get(Constants.FORCE_BACK_LOCK).getCode()));
        Integer freeRentTime = Integer.valueOf(collect.get(Constants.FREE_RENT_TIME).getCode());
        Integer rideTime = DateUtil.betweenMin(model.getRentDate(), update.getBackDate());
        //计算骑行计费时长
@@ -440,14 +451,26 @@
                .eq(Locks::getIsdeleted, Constants.ZERO)
                .last("limit 1"));
        if (Objects.isNull(locks)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "扫码无效,未查询到锁头信息");
//            locks =new Locks();
//            locks.setCode(codes[1]);
//            locks.setSiteId(codes[0]);
//            deviceService.getLockInfo(locks);
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "扫码无效,该站点锁头暂不支持借出业务哦!");
        }
        //查询锁头是否存在车辆 以及是否正常
        if (Constants.formatIntegerNum(locks.getStatus())!=Constants.ZERO) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "当前扫码锁头状态错误,无法进行开锁");
            locks =new Locks();
            locks.setCode(Constants.formatIntegerFromStr(codes[1]));
            locks.setSiteId(codes[0]);
            deviceService.getLockInfo(locks);
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "当前车辆暂时无法使用,请稍后重试或更换其它车辆~");
        }
        if (StringUtils.isBlank(locks.getBikeCode())) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "当前扫码锁头无车辆信息,无法进行开锁");
            locks =new Locks();
            locks.setCode(Constants.formatIntegerFromStr(codes[1]));
            locks.setSiteId(codes[0]);
            deviceService.getLockInfo(locks);
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "当前车辆暂时无法使用,请稍后重试或更换其它车辆!");
        }
        MemberRides memberRides = new MemberRides();
        //根据车型查询计价方案
@@ -555,7 +578,7 @@
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public  int mqttLockInfoEvent(Locks locks){
        if(StringUtils.isBlank(locks.getCode()) ||StringUtils.isBlank(locks.getSiteId())){
        if( locks.getCode() ==null ||StringUtils.isBlank(locks.getSiteId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"锁头信息上报参数错误!");
        }
        //判断检查处理站点锁头信息
@@ -563,7 +586,7 @@
        //车辆记录
        Bikes bikes = dealBikesByParam(model);
        //状态,0闭合, 1打开,2运行中, 3异常
        if(model.getStatus() == Constants.LockStatus.open){
        if(locks.getStatus() == Constants.LockStatus.open){
            //如果是开锁业务,判断是否有开锁中的信息
            MemberRides memberRides = new MemberRides();
            memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey());
@@ -580,6 +603,35 @@
            update.setId(memberRides.getId());
            //(更新请求开锁中的锁头关联的骑行记录)
            memberRidesMapper.updateById( update);
        }else   if(locks.getStatus() == Constants.LockStatus.closed ){
            //如果是关锁业务,判断触发还车
            if(StringUtils.isNotBlank(locks.getBikeCode())){
                MemberRides mbikes = new MemberRides();
                mbikes.setBackLockId(locks.getCode());
                mbikes.setBackSiteId(locks.getSiteId());
                mbikes.setBikeCode(locks.getBikeCode());
                mqttCloseBikeEventDo(mbikes);
               /* if(StringUtils.isBlank(locks.getBikeCode()) ||StringUtils.isBlank(locks.getCode())
                        ||StringUtils.isBlank(bikes.getSiteId())){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"还车上报参数错误!");
                }
                QueryWrapper<MemberRides> wrapper = new QueryWrapper<>();
                List<Integer> statusList = new ArrayList<>();
                statusList.add(Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey());
                statusList.add(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey());
                wrapper.lambda().eq(MemberRides::getBikeCode, locks.getBikeCode());
                wrapper.lambda().in(MemberRides::getStatus, statusList);
                wrapper.lambda().eq(MemberRides::getIsdeleted, Constants.ZERO);
                //根据车辆编码查询骑行中的骑行记录信息,如果有进行还车操作
                List<MemberRides> list = memberRidesMapper.selectList(wrapper);
//        MemberRides memberRides = memberRidesMapper.selectOne(wrapper.last("limit  1"));
                if(list!=null){
                    //进行
                    for(MemberRides memberRides : list){
                        dealMemberRidesBack(memberRides,bikes);
                    }
                }*/
            }
        }
        return 0;
    }
@@ -599,6 +651,7 @@
                // 大于阈值
                if (between > 2){
                    s.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING_DEFEAT.getKey());
                    s.setEditDate(new Date());
                    memberRidesMapper.updateById(s);
                }
            });
@@ -623,12 +676,15 @@
        if(bikes != null ) {
            if ( !StringUtils.equals(model.getBikeCode(), bikes.getCode())){
                //如果绑定车辆信息发生编号,更换绑定关系
                String type =getBileTypeByCode(model.getBikeCode());
                UpdateWrapper<Bikes> updateWrapper = new UpdateWrapper<>();
                updateWrapper.lambda().eq(Bikes::getId, bikes.getId());
                updateWrapper.lambda().set(Bikes::getCode,model.getBikeCode());
                updateWrapper.lambda().set(Bikes::getParamId,getBileTypeByCode(model.getBikeCode()));
                updateWrapper.lambda().set(Bikes::getParamId,type);
                //更新自行站点锁头绑定自行车信息
                bikesMapper.update(null,updateWrapper);
                bikes.setCode(model.getBikeCode());
                bikes.setParamId(model.getBikeType());
            }
        }else{
            bikes = new Bikes();
@@ -678,6 +734,7 @@
        Date date =new Date();
        //检查站点信息,不存在则新增
        Sites sites = sitesMapper.selectById(locks.getSiteId());
        if(sites == null){
            sites = new Sites();
            sites.setIsdeleted(Constants.ZERO);
@@ -688,9 +745,19 @@
            sites.setStatus(Constants.ZERO);
            sites.setEditDate(date);
            sites.setLockNum(1);
            sites.setLastLinkDate(date);
            //新增锁头
            sitesMapper.insert(sites);
        }
        if(StringUtils.isNotBlank(locks.getBikeCode())){
            UpdateWrapper<Locks> updateWrapper = new UpdateWrapper<>();
            updateWrapper.lambda().set(Locks::getBikeCode, null );
            updateWrapper.lambda().set(Locks::getEditDate, new Date() );
            updateWrapper.lambda().eq(Locks::getBikeCode, locks.getBikeCode() );
            //清空原来的自行车绑定关系
            locksMapper.update(null, updateWrapper);
        }
        if(model == null){
            //如果锁头不存在,判断存储
            model = new Locks();
@@ -703,6 +770,13 @@
            model.setCreateDate(date);
            model.setStatus(locks.getStatus());
            locksMapper.insert(model);
            //更新 站点锁头数量
            if(Objects.nonNull(sites)){
                Sites sites1 = new Sites();
                sites1.setId(sites.getId());
                sites1.setLockNum(sites.getLockNum()+1);
                sitesMapper.updateById(sites1);
            }
        }else{
            UpdateWrapper<Locks> updateWrapper = new UpdateWrapper<Locks>();
            updateWrapper.lambda().eq(Locks::getCode, locks.getCode() );
@@ -712,6 +786,8 @@
            updateWrapper.lambda().set(Locks::getEditDate, new Date() );
            updateWrapper.lambda().set(Locks::getIsdeleted, Constants.ZERO);
            locksMapper.update(null,updateWrapper);
            model.setStatus(locks.getStatus());
            model.setBikeCode(locks.getBikeCode());
        }
        model.setSites(sites);
        return  model;
@@ -725,21 +801,38 @@
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public  int mqttCloseBikeEvent(MemberRides bikes){
        //免费骑行时长查询,数据字典配置
        if(StringUtils.isBlank(bikes.getBikeCode()) ||StringUtils.isBlank(bikes.getBackLockId())||StringUtils.isBlank(bikes.getBackSiteId())){
          throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"还车上报参数错误!");
        Locks locks  = new Locks();
        locks.setSiteId(bikes.getBackSiteId());
        locks.setCode(bikes.getBackLockId());
        locks.setBikeCode(bikes.getBikeCode());
        locks.setInfo(bikes.getBackCommondId());
        locks.setStatus(bikes.getStatus());
        //处理锁头数据
         mqttLockInfoEvent(locks);
         mqttCloseBikeEventDo(bikes);
        return  0;
    }
    private void mqttCloseBikeEventDo(MemberRides bikes) {
        if(StringUtils.isBlank(bikes.getBikeCode()) || bikes.getBackLockId() == null ||StringUtils.isBlank(bikes.getBackSiteId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"还车上报参数错误!");
        }
        QueryWrapper<MemberRides> wrapper = new QueryWrapper<>();
        List<Integer> statusList = new ArrayList<>();
        statusList.add(Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey());
        statusList.add(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey());
        wrapper.lambda().eq(MemberRides::getBikeCode, bikes.getBikeCode());
        wrapper.lambda().eq(MemberRides::getStatus, Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey());
        wrapper.lambda().in(MemberRides::getStatus, statusList);
        wrapper.lambda().eq(MemberRides::getIsdeleted, Constants.ZERO);
        //根据车辆编码查询骑行中的骑行记录信息,如果有进行还车操作
        MemberRides memberRides = memberRidesMapper.selectOne(wrapper.last("limit  1"));
        if(memberRides!=null){
        List<MemberRides> list = memberRidesMapper.selectList(wrapper);
//        MemberRides memberRides = memberRidesMapper.selectOne(wrapper.last("limit  1"));
        if(list!=null){
            //进行
            dealMemberRidesBack(memberRides,bikes);
            for(MemberRides memberRides : list){
                dealMemberRidesBack(memberRides,bikes);
            }
        }
        return  0;
    }
    private void dealMemberRidesBack(MemberRides memberRides,MemberRides param) {