| | |
| | | package com.doumee.service.business.impl; |
| | | |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DESUtil; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.CarUseBookMapper; |
| | | import com.doumee.dao.business.CarsMapper; |
| | | import com.doumee.dao.business.join.CarUseBookJoinMapper; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.dao.business.vo.DateIntervalVO; |
| | | import com.doumee.dao.system.model.SystemDictData; |
| | | import com.doumee.service.business.CarUseBookService; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.time.temporal.ChronoUnit; |
| | | import java.util.Date; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 车辆_用车申请信息表Service实现 |
| | |
| | | @Autowired |
| | | private CarUseBookMapper carUseBookMapper; |
| | | |
| | | @Autowired |
| | | private CarUseBookJoinMapper carUseBookJoinMapper; |
| | | |
| | | @Autowired |
| | | private CarsMapper carsMapper; |
| | | |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | |
| | | |
| | | @Override |
| | | public Integer create(CarUseBook carUseBook) { |
| | | if(Objects.isNull(carUseBook) |
| | | || Objects.isNull(carUseBook.getCarId()) |
| | | || Objects.isNull(carUseBook.getStartTime()) |
| | | || Objects.isNull(carUseBook.getEndTime()) |
| | | || Objects.isNull(carUseBook.getCreator()) |
| | | || Objects.isNull(carUseBook.getMemberId()) |
| | | || Objects.isNull(carUseBook.getPlanUseDate()) |
| | | || Objects.isNull(carUseBook.getType()) |
| | | || StringUtils.isEmpty(carUseBook.getMemberIds()) |
| | | || StringUtils.isEmpty(carUseBook.getMemberNames()) |
| | | || StringUtils.isEmpty(carUseBook.getContent()) |
| | | || StringUtils.isEmpty(carUseBook.getAddr()) |
| | | ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | carUseBook.setStatus(Constants.ZERO); |
| | | carUseBook.setCreateDate(new Date()); |
| | | Cars cars = carsMapper.selectById(carUseBook.getCarId()); |
| | | if(Objects.isNull(cars)||!cars.getType().equals(Constants.ONE)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"车辆信息异常"); |
| | | } |
| | | //查询车辆提交时间是否存在冲突的预约记录 |
| | | List<CarUseBook> carUseBookList = carUseBookJoinMapper.selectJoinList(CarUseBook.class, |
| | | new MPJLambdaWrapper<CarUseBook>() |
| | | .selectAll(CarUseBook.class) |
| | | .selectAs(Member::getName,CarUseBook::getMemberName) |
| | | .selectAs(Member::getPhone,CarUseBook::getMemberMobile) |
| | | .leftJoin(Member.class,Member::getId,CarUseBook::getMemberId) |
| | | .eq(CarUseBook::getId,carUseBook.getCarId()) |
| | | .in(CarUseBook::getStatus,0,1,2) |
| | | .and(i->i.and(j->j.lt(CarUseBook::getStartTime,carUseBook.getStartTime()).gt(CarUseBook::getStartTime,carUseBook.getStartTime())) |
| | | .or() |
| | | .and(j->j.lt(CarUseBook::getEndTime,carUseBook.getEndTime()).gt(CarUseBook::getEndTime,carUseBook.getStartTime())) |
| | | .or() |
| | | .and(j->j.gt(CarUseBook::getStartTime,carUseBook.getStartTime()).lt(CarUseBook::getEndTime,carUseBook.getEndTime())) |
| | | .or() |
| | | .and(j->j.lt(CarUseBook::getStartTime,carUseBook.getStartTime()).gt(CarUseBook::getEndTime,carUseBook.getEndTime())) |
| | | ) |
| | | ); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(carUseBookList)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在车辆预约时间与已预约时间冲突~"); |
| | | } |
| | | carUseBookMapper.insert(carUseBook); |
| | | return carUseBook.getId(); |
| | | } |
| | |
| | | .eq(pageWrap.getModel().getAddr() != null, CarUseBook::getAddr, pageWrap.getModel().getAddr()) |
| | | .eq(pageWrap.getModel().getMemberId() != null, CarUseBook::getMemberId, pageWrap.getModel().getMemberId()) |
| | | .eq(pageWrap.getModel().getDriverId() != null, CarUseBook::getDriverId, pageWrap.getModel().getDriverId()) |
| | | .and(StringUtils.isNotBlank(pageWrap.getModel().getQueryDate()), |
| | | i->i.and(j->j.lt(CarUseBook::getStartTime,pageWrap.getModel().getQueryDate() +"00:00:00").gt(CarUseBook::getStartTime,pageWrap.getModel().getQueryDate() +"23:59:59")) |
| | | .or() |
| | | .and(j->j.lt(CarUseBook::getEndTime,pageWrap.getModel().getQueryDate() +"23:59:59").gt(CarUseBook::getEndTime,pageWrap.getModel().getQueryDate() +"00:00:00")) |
| | | .or() |
| | | .and(j->j.gt(CarUseBook::getStartTime,pageWrap.getModel().getQueryDate() +"00:00:00").lt(CarUseBook::getEndTime,pageWrap.getModel().getQueryDate() +"23:59:59")) |
| | | .or() |
| | | .and(j->j.lt(CarUseBook::getStartTime,pageWrap.getModel().getQueryDate() +"00:00:00").gt(CarUseBook::getEndTime,pageWrap.getModel().getQueryDate() +"23:59:59")) |
| | | ) |
| | | .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName()) |
| | | .or().like(Member::getPhone,pageWrap.getModel().getMemberName())) |
| | | .ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), Empower::getCreateDate,pageWrap.getModel().getQueryStartTime()) |
| | |
| | | QueryWrapper<CarUseBook> wrapper = new QueryWrapper<>(carUseBook); |
| | | return carUseBookMapper.selectCount(wrapper); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 查询车辆预约记录 |
| | | * @param carUseBook |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<CarUseBook> carUseBookList(CarUseBook carUseBook){ |
| | | if(Objects.isNull(carUseBook) |
| | | || Objects.isNull(carUseBook.getCarId()) |
| | | || Objects.isNull(carUseBook.getStartTime()) |
| | | || Objects.isNull(carUseBook.getEndTime())){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | List<CarUseBook> carUseBookList = carUseBookJoinMapper.selectJoinList(CarUseBook.class, |
| | | new MPJLambdaWrapper<CarUseBook>() |
| | | .selectAll(CarUseBook.class) |
| | | .selectAs(Member::getName,CarUseBook::getMemberName) |
| | | .selectAs(Member::getPhone,CarUseBook::getMemberMobile) |
| | | .leftJoin(Member.class,Member::getId,CarUseBook::getMemberId) |
| | | .eq(CarUseBook::getId,carUseBook.getCarId()) |
| | | .in(CarUseBook::getStatus,0,1,2) |
| | | .and(i->i.and(j->j.lt(CarUseBook::getStartTime,carUseBook.getStartTime()).gt(CarUseBook::getStartTime,carUseBook.getStartTime())) |
| | | .or() |
| | | .and(j->j.lt(CarUseBook::getEndTime,carUseBook.getStartTime()).gt(CarUseBook::getEndTime,carUseBook.getStartTime())) |
| | | .or() |
| | | .and(j->j.gt(CarUseBook::getStartTime,carUseBook.getStartTime()).lt(CarUseBook::getEndTime,carUseBook.getEndTime())) |
| | | .or() |
| | | .and(j->j.lt(CarUseBook::getStartTime,carUseBook.getStartTime()).gt(CarUseBook::getEndTime,carUseBook.getEndTime())) |
| | | ) |
| | | ); |
| | | return carUseBookList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据日期查询车辆可预约情况 |
| | | * @param cars |
| | | * @param dateDay |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<DateIntervalVO> checkDateUse(Integer cars,String dateDay){ |
| | | SystemDictData workStart = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.WORK_START); |
| | | SystemDictData workEnd = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.WORK_END); |
| | | SystemDictData interval = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INTERVAL); |
| | | if(Objects.isNull(workStart) |
| | | ||Objects.isNull(workEnd) |
| | | ||Objects.isNull(interval) |
| | | ||Objects.isNull(workStart.getCode()) |
| | | ||Objects.isNull(workEnd.getCode()) |
| | | ||Objects.isNull(interval.getCode())){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"配置错误,请联系管理员"); |
| | | } |
| | | Date startTime = DateUtil.StringToDate(dateDay + workStart.getCode(),"yyyy-MM-dd HH:mm:ss"); |
| | | Date endTime = DateUtil.StringToDate(dateDay + workEnd.getCode(),"yyyy-MM-dd HH:mm:ss"); |
| | | Long intervalTime = Long.valueOf(interval.getCode()); |
| | | LocalDateTime localStartTime = startTime.toInstant() |
| | | .atZone(ZoneId.systemDefault()) |
| | | .toLocalDateTime(); |
| | | LocalDateTime localEndTime = endTime.toInstant() |
| | | .atZone(ZoneId.systemDefault()) |
| | | .toLocalDateTime(); |
| | | List<DateIntervalVO> dateIntervalVOList = this.checkDate(localStartTime,localEndTime,intervalTime); |
| | | //查询车辆市内 |
| | | List<CarUseBook> carUseBookList = carUseBookMapper.selectList(new QueryWrapper<CarUseBook>().lambda() |
| | | .eq(CarUseBook::getIsdeleted,Constants.ZERO) |
| | | .eq(CarUseBook::getCarId,cars) |
| | | .in(CarUseBook::getStatus,0,1,2) |
| | | .and(i->i.like(CarUseBook::getStartTime,dateDay).or().like(CarUseBook::getEndTime,dateDay) |
| | | .or().apply(" START_TIME < '"+dateDay+" 00:00:00' and END_TIME > '"+dateDay+" 23:59:59' ")) |
| | | ); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(carUseBookList)){ |
| | | for (DateIntervalVO dateIntervalVO:dateIntervalVOList) { |
| | | if( |
| | | carUseBookList.stream().filter( |
| | | i-> |
| | | ( i.getStartTime().getTime()<DateUtil.stringToDate(dateIntervalVO.getStartTime(),"yyyy-MM-dd HH:mm:ss ").getTime() |
| | | && i.getEndTime().getTime() > DateUtil.stringToDate(dateIntervalVO.getStartTime(),"yyyy-MM-dd HH:mm:ss ").getTime()) |
| | | || |
| | | ( i.getStartTime().getTime()<DateUtil.stringToDate(dateIntervalVO.getEndTime(),"yyyy-MM-dd HH:mm:ss ").getTime() |
| | | && i.getEndTime().getTime() > DateUtil.stringToDate(dateIntervalVO.getEndTime(),"yyyy-MM-dd HH:mm:ss ").getTime()) |
| | | || |
| | | ( DateUtil.stringToDate(dateIntervalVO.getStartTime(),"yyyy-MM-dd HH:mm:ss ").getTime() < i.getStartTime().getTime() |
| | | && DateUtil.stringToDate(dateIntervalVO.getStartTime(),"yyyy-MM-dd HH:mm:ss ").getTime() > i.getStartTime().getTime()) |
| | | || |
| | | ( DateUtil.stringToDate(dateIntervalVO.getStartTime(),"yyyy-MM-dd HH:mm:ss ").getTime() < i.getEndTime().getTime() |
| | | && DateUtil.stringToDate(dateIntervalVO.getStartTime(),"yyyy-MM-dd HH:mm:ss ").getTime() > i.getEndTime().getTime()) |
| | | |
| | | ).collect(Collectors.toList()).size()>Constants.ZERO){ |
| | | dateIntervalVO.setIsUse(Constants.ONE); |
| | | }; |
| | | } |
| | | } |
| | | return dateIntervalVOList; |
| | | } |
| | | |
| | | |
| | | |
| | | public List<DateIntervalVO> checkDate(LocalDateTime localStartTime , LocalDateTime localEndTime ,Long intervalTime ){ |
| | | List<DateIntervalVO> dateIntervalVOList = new ArrayList<>(); |
| | | List<LocalDateTime> segments = DateUtil.checkDateInterval(localStartTime,localEndTime,intervalTime); |
| | | DateTimeFormatter dfTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | DateTimeFormatter dfHours = DateTimeFormatter.ofPattern("HH:mm"); |
| | | for (int i = 0; i < segments.size(); i++) { |
| | | String startHours = segments.get(i).format(dfHours); |
| | | String endHours = localEndTime.format(dfHours); |
| | | String startTime = segments.get(i).format(dfTime); |
| | | String endTime = localEndTime.format(dfTime); |
| | | if(i!=segments.size()-1){ |
| | | endHours = segments.get(i+1).format(dfHours); |
| | | endTime = segments.get(i+1).format(dfTime); |
| | | } |
| | | DateIntervalVO dateIntervalVO = new DateIntervalVO(); |
| | | dateIntervalVO.setStartHours(startHours); |
| | | dateIntervalVO.setEndHours(endHours); |
| | | dateIntervalVO.setStartTime(startTime); |
| | | dateIntervalVO.setEndTime(endTime); |
| | | dateIntervalVO.setIsUse(Constants.ZERO); |
| | | } |
| | | return dateIntervalVOList; |
| | | } |
| | | |
| | | |
| | | public void revoke(Integer id, LoginUserInfo loginUserInfo){ |
| | | CarUseBook carUseBook = carUseBookMapper.selectById(id); |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |