| | |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.HttpsUtil; |
| | | import com.doumee.core.utils.StringTools; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.ActionLogMapper; |
| | | import com.doumee.dao.business.BikesMapper; |
| | |
| | | Arrays.asList(Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey(),Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey())); |
| | | queryWrapper |
| | | .selectAs(MemberRides::getId,MemberRidesDTO::getId) |
| | | .selectAs(MemberRides::getDiscountPrice,MemberRidesDTO::getDiscountPrice) |
| | | .selectAs(MemberRides::getType,MemberRidesDTO::getType) |
| | | .selectAs(Member::getOpenid,MemberRidesDTO::getOpenid) |
| | | .selectAs(MemberRides::getBikeCode,MemberRidesDTO::getBikeCode) |
| | | .selectAs(MemberRides::getCloseStatus,MemberRidesDTO::getCloseStatus) |
| | |
| | | update.setBackUserid(user.getId()); |
| | | update.setBackType(Constants.ONE); |
| | | update.setStatus(Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()); |
| | | update.setBackSiteId(collect.get(Constants.FORCE_BACK_SITE).getCode()); |
| | | update.setBackLockId(Constants.formatIntegerFromStr(collect.get(Constants.FORCE_BACK_LOCK).getCode())); |
| | | String logInfo = null; |
| | | Bikes bike =null; |
| | | if(Constants.equalsInteger(model.getType(),Constants.ZERO)){ |
| | | //如果是自行车,绑定到虚拟站点和锁头 |
| | | update.setBackSiteId(collect.get(Constants.FORCE_BACK_SITE).getCode()); |
| | | update.setBackLockId(Constants.formatIntegerFromStr(collect.get(Constants.FORCE_BACK_LOCK).getCode())); |
| | | //插入虚拟锁头和站点上------- |
| | | bike = new Bikes(); |
| | | bike.setIsdeleted(Constants.ZERO); |
| | | bike.setCode(model.getBikeCode()); |
| | | bike.setType(model.getType()); |
| | | 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.setType(Constants.ZERO); |
| | | bike.setForceBackInfo("强制还车绑定"); |
| | | bikesMapper.insert(bike); |
| | | } |
| | | }else{ |
| | | //如果是电车,请求web端接口关闭车辆信息 |
| | | bike = sendCloseElecBikeRequest(memberRides.getBikeCode(),Constants.ONE); |
| | | } |
| | | logInfo = bike!=null?bike.getForceBackInfo():null; |
| | | Integer freeRentTime = Integer.valueOf(collect.get(Constants.FREE_RENT_TIME).getCode()); |
| | | Integer rideTime = DateUtil.betweenMin(model.getRentDate(), update.getBackDate()); |
| | | //计算骑行计费时长 |
| | |
| | | String beforeContent = JSONObject.toJSONString(model); |
| | | //修改后 |
| | | 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()); |
| | |
| | | log.setObjType(Constants.ActionLogObjType.memberrides); |
| | | log.setResult(Constants.ZERO); |
| | | log.setObjId(model.getId()); |
| | | log.setInfo(logInfo); |
| | | log.setType(Constants.ACTIONLOG_TYPE.FORCE_BACK.getKey()); |
| | | log.setContent(Constants.ACTIONLOG_TYPE.FORCE_BACK.getInfo()); |
| | | log.setTitle(Constants.ACTIONLOG_TYPE.FORCE_BACK.getName()); |
| | |
| | | actionLogMapper.insert(log); |
| | | |
| | | } |
| | | /** |
| | | * 如果是电车,请求web端接口关闭车辆信息 |
| | | */ |
| | | private Bikes sendCloseElecBikeRequest(String bikeCode,int type) { |
| | | Bikes bike = bikesMapper.selectOne(new QueryWrapper<Bikes>().lambda() |
| | | .eq(Bikes::getType,Constants.ONE) |
| | | .eq(Bikes::getIsdeleted,Constants.ZERO) |
| | | .eq(Bikes::getCode,bikeCode) |
| | | ); |
| | | if(bike == null){ |
| | | return null; |
| | | } |
| | | bike.setForceBackInfo("强制还车关闭车锁失败!"); |
| | | if(StringUtils.isNotBlank(bike.getDeviceSn())){ |
| | | try { |
| | | //请求地址 |
| | | String url = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ELEC_BIKE_CONTRIL_API_URL).getCode(); |
| | | JSONObject param = new JSONObject(); |
| | | param.put("clientId",StringTools.leftTrip(bike.getDeviceSn(),'0')); |
| | | param.put("type",type);//0开锁 1关锁 |
| | | String res = HttpsUtil.postJsonString(url,param.toJSONString()); |
| | | JSONObject json = JSONObject.parseObject(res); |
| | | if(json.get("code").equals("200")){ |
| | | //发起指令成功 |
| | | bike.setForceBackInfo("强制还车关闭车锁成功!"); |
| | | }else{ |
| | | bike.setForceBackInfo("强制还车关闭车锁失败!"+json.get("msg")); |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | }else{ |
| | | bike.setForceBackInfo("强制还车关闭车锁失败,未绑定控制器sn!"); |
| | | } |
| | | bikesMapper.updateById(bike); |
| | | return bike; |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String url = "http://localhost:10025/jtt808/device/8500"; |
| | | JSONObject param = new JSONObject(); |
| | | param.put("clientId",StringTools.leftTrip("0067244400211",'0')); |
| | | param.put("type",0);//0开锁 1关锁 |
| | | String res = HttpsUtil.postJsonString(url,param.toJSONString()); |
| | | System.out.println(res); |
| | | } |
| | | public ConcurrentMap<String,Integer> cacheOpenLock = new ConcurrentReferenceHashMap<>(); |
| | | |
| | | @Override |
| | |
| | | locks =new Locks(); |
| | | locks.setCode(Constants.formatIntegerFromStr(codes[1])); |
| | | locks.setSiteId(codes[0]); |
| | | locks.setId(codes[1]); |
| | | deviceService.getLockInfo(locks); |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "当前车辆暂时无法使用,请稍后重试或更换其它车辆!"); |
| | | } |
| | |
| | | memberRides.setRentLockId(locks.getCode()); |
| | | memberRides.setOrdreId(goodsorder.getId()); |
| | | memberRides.setRentDate(new Date()); |
| | | memberRides.setType(Constants.ZERO); |
| | | memberRides.setBalance(new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_DEPOSIT).getCode())); |
| | | memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey()); |
| | | memberRides.setCloseStatus(Constants.ZERO); |
| | | |
| | | memberRidesMapper.insert(memberRides); |
| | | BeanUtils.copyProperties(memberRides, memberRidesDetailResponse); |
| | | }else{ |
| | |
| | | //车辆记录 |
| | | Bikes bikes = dealBikesByParam(model); |
| | | //状态,0闭合, 1打开,2运行中, 3异常 |
| | | if(locks.getStatus() == Constants.LockStatus.open){ |
| | | if(Constants.formatIntegerNum(locks.getStatus()) == Constants.LockStatus.open){ |
| | | //如果是开锁业务,判断是否有开锁中的信息 |
| | | MemberRides memberRides = new MemberRides(); |
| | | memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey()); |
| | |
| | | update.setId(memberRides.getId()); |
| | | //(更新请求开锁中的锁头关联的骑行记录) |
| | | memberRidesMapper.updateById( update); |
| | | }else if(locks.getStatus() == Constants.LockStatus.closed ){ |
| | | }else if(Constants.formatIntegerNum(locks.getStatus()) == Constants.LockStatus.closed ){ |
| | | //如果是关锁业务,判断触发还车 |
| | | if(StringUtils.isNotBlank(locks.getBikeCode())){ |
| | | MemberRides mbikes = new MemberRides(); |
| | |
| | | |
| | | @Override |
| | | public void autoRefreshLockStatus() { |
| | | // memberRidesMapper.update(null,new UpdateWrapper<MemberRides>().lambda() |
| | | // .eq(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.LOCKING.getKey()) |
| | | // .apply("" ) |
| | | // .set(MemberRides::getStatus, Constants.MEMBER_RIDES_STATUS.LOCKING_DEFEAT.getKey())) |
| | | |
| | | QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); |
| | | wrapper.lambda() |
| | |
| | | List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper); |
| | | if (!CollectionUtils.isEmpty(memberRides)){ |
| | | memberRides.forEach(s->{ |
| | | Integer between = DateUtil.between(s.getCreateDate(), new Date()); |
| | | // 大于阈值 |
| | | if (between >= 2){ |
| | | s.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING_DEFEAT.getKey()); |
| | | Integer between = DateUtil.betweenSeconds(s.getCreateDate(), new Date()); |
| | | // 大于阈值,自动设为开锁成功(如实际未开锁,联系站点管理员后台进行强制还车操作) |
| | | if (between >= 20){ |
| | | s.setStatus(Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey()); |
| | | s.setEditDate(new Date()); |
| | | memberRidesMapper.updateById(s); |
| | | } |
| | |
| | | bikes.setEditDate(bikes.getCreateDate()); |
| | | bikes.setSiteId(model.getSiteId()); |
| | | bikes.setLockId(model.getCode()); |
| | | bikes.setType(Constants.ZERO); |
| | | bikes.setCode(model.getBikeCode()); |
| | | bikes.setParamId(getBileTypeByCode(model.getBikeCode())); |
| | | bikesMapper.insert(bikes); |
| | |
| | | if(Objects.nonNull(sites)){ |
| | | Sites sites1 = new Sites(); |
| | | sites1.setId(sites.getId()); |
| | | sites1.setLockNum(sites.getLockNum()+1); |
| | | sites1.setLockNum(Constants.formatIntegerNum(sites.getLockNum())+1); |
| | | sitesMapper.updateById(sites1); |
| | | } |
| | | }else{ |