jiangping
2023-10-13 d800ed8f4f9c3a6dbd1b9833afc36a6a768495b9
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
@@ -352,6 +352,20 @@
        //修改后
        String after = JSONObject.toJSONString(update);
        //插入虚拟锁头和站点上-------
        Bikes bike = new Bikes();
        bike.setIsdeleted(Constants.ZERO);
        bike.setCode(model.getBikeCode());
        bike.setSiteId(update.getBackSiteId());
        bike.setLockId(update.getBackLockId());
        if(bikesMapper.selectCount(new QueryWrapper<>(bike)) == 0){
            bike.setId(Constants.getUUID());
            bike.setParamId(model.getParamId());
            bike.setLastBackDate(model.getRentDate());
            bike.setStatus(Constants.ZERO);
            bike.setInfo("强制还车绑定");
            bikesMapper.insert(bike);
        }
        ActionLog log = new ActionLog();
        log.setId(Constants.getUUID());
@@ -428,21 +442,6 @@
            memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey());
            memberRides.setCloseStatus(Constants.ZERO);
            //临时使用
            Bikes bikes = bikesMapper.selectById(locks.getBikeCode());
            if (Objects.isNull(bikes)) {
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "未查询到自行车信息");
            }
            memberRides.setBikeCode(bikes.getId());
            memberRides.setParamId(bikes.getParamId());
            memberRides.setRentSiteId(locks.getSiteId());
            memberRides.setRentLockId(locks.getId());
            memberRides.setRentDate(new Date());
            memberRides.setBasePrice(new BigDecimal(3990L));
            memberRides.setBaseTime(1800);
            memberRides.setUnitTime(600);
            memberRides.setUnitPrice(new BigDecimal(1000L));
            memberRidesMapper.insert(memberRides);
            BeanUtils.copyProperties(memberRides, memberRidesDetailResponse);
        }
@@ -489,6 +488,10 @@
        Holidays holidays = new Holidays();
        holidays.setHoliday(nowDate);
        holidays.setIsdeleted(Constants.ZERO);
        memberRides.setBikeCode(bike.getCode());
        bike.setLastRentDate(new Date());
        bike.setStatus(Constants.ONE);
        bikesMapper.updateById(bike);
        //检查是否节假日
        if(holidaysMapper.selectCount(new QueryWrapper<>(holidays)) >0){
            //如果是节假日
@@ -527,6 +530,9 @@
     */
    @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);
        //车辆记录
@@ -543,7 +549,6 @@
            if(memberRides == null){
                return 0;
            }
            //(更新请求开锁中的锁头关联的骑行记录)
            memberRidesMapper.updateById( memberRides);
        }
@@ -582,7 +587,8 @@
    //TODO-----JP------------根据车辆code分析车辆类型,待确认方案-------------------
    private String getBileTypeByCode(String bikeCode) {
        return null;
        int temp=1+(int)(Math.random()*(8));
        return temp+"";
    }
    private Locks dealLockAndSite(Locks locks) {
@@ -629,9 +635,63 @@
        return  model;
    }
    /**
     * 还车订阅消息业务处理
     * @param bikes
     * @return
     */
    @Override
    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(),"还车上报参数错误!");
        }
        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("用户正常还车");
        Bikes bikes = new Bikes();
        bikes.setSiteId(memberRides.getBackSiteId());
        bikes.setLockId(memberRides.getBackLockId());
//        bikes.setCode(memberRides.getBikeCode());
        bikes = bikesMapper.selectById(new QueryWrapper<>(bikes).last("limit 1"));
        if(bikes != null ) {
            UpdateWrapper<Bikes> updateWrapper = new UpdateWrapper<>();
            updateWrapper.lambda().set(Bikes::getId, bikes.getId());
            updateWrapper.lambda().set(Bikes::getEditDate,new Date());
            updateWrapper.lambda().set(Bikes::getLastBackDate,new Date());
            //更新自行车最后还车时间
            bikesMapper.updateById(bikes);
        }
        //更新还车记录为已还车
        memberRidesMapper.updateById(update);
    }
}