From 8725ebeaadc6714823593a6b10a0dd9acdf0d14a Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期一, 27 五月 2024 17:19:34 +0800 Subject: [PATCH] 最新版本 --- server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java | 259 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 254 insertions(+), 5 deletions(-) diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java index 52ee70b..f875670 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java @@ -1,12 +1,25 @@ 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.ApproveMapper; import com.doumee.dao.business.CarUseBookMapper; +import com.doumee.dao.business.CarsMapper; +import com.doumee.dao.business.join.ApproveJoinMapper; +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.dao.system.model.SystemUser; +import com.doumee.service.business.ApproveService; import com.doumee.service.business.CarUseBookService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -18,9 +31,15 @@ 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; /** * 杞﹁締_鐢ㄨ溅鐢宠淇℃伅琛⊿ervice瀹炵幇 @@ -33,9 +52,69 @@ @Autowired private CarUseBookMapper carUseBookMapper; + @Autowired + private CarUseBookJoinMapper carUseBookJoinMapper; + + @Autowired + private CarsMapper carsMapper; + + @Autowired + private SystemDictDataBiz systemDictDataBiz; + + @Autowired + private ApproveJoinMapper approveJoinMapper; + + @Autowired + private ApproveService approveService; + + @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); + //鐢ㄨ溅鐢宠 瀹℃壒璁板綍鍒涘缓 + approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId()); return carUseBook.getId(); } @@ -73,8 +152,14 @@ } } + /** + * + * @param id 涓婚敭 + * @param memberId + * @return + */ @Override - public CarUseBook findById(Integer id) { + public CarUseBook findById(Integer id,Integer memberId) { MPJLambdaWrapper<CarUseBook> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(CarUseBook.class); queryWrapper.select("t1.name",CarUseBook::getMemberName); @@ -88,6 +173,11 @@ .eq(CarUseBook::getId,id) .last("limit 1" ); CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper); + model.setApproveDateVO( + approveService.arrangeApprovedData(id, + model.getType().equals(Constants.ZERO)?3:4, + memberId) + ); return model; } @@ -140,10 +230,8 @@ .le(pageWrap.getModel().getCheckDate() != null, CarUseBook::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate())) .eq(pageWrap.getModel().getCheckUserId() != null, CarUseBook::getCheckUserId, pageWrap.getModel().getCheckUserId()) .eq(pageWrap.getModel().getCheckInfo() != null, CarUseBook::getCheckInfo, pageWrap.getModel().getCheckInfo()) - .ge(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType, Utils.Date.getStart(pageWrap.getModel().getCancelType())) - .le(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType, Utils.Date.getEnd(pageWrap.getModel().getCancelType())) - .ge(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, Utils.Date.getStart(pageWrap.getModel().getCancelStatus())) - .le(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, Utils.Date.getEnd(pageWrap.getModel().getCancelStatus())) + .eq(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType, pageWrap.getModel().getCancelType()) + .eq(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, pageWrap.getModel().getCancelStatus()) .ge(pageWrap.getModel().getCancelTime() != null, CarUseBook::getCancelTime, Utils.Date.getStart(pageWrap.getModel().getCancelTime())) .le(pageWrap.getModel().getCancelTime() != null, CarUseBook::getCancelTime, Utils.Date.getEnd(pageWrap.getModel().getCancelTime())) .eq(pageWrap.getModel().getCancelUser() != null, CarUseBook::getCancelUser, pageWrap.getModel().getCancelUser()) @@ -155,6 +243,15 @@ .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()) @@ -176,4 +273,156 @@ 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; + } + + + @Override + public void revoke(Integer id, String info, LoginUserInfo loginUserInfo){ + CarUseBook carUseBook = carUseBookMapper.selectById(id); + if(Objects.isNull(carUseBook)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐢ㄨ溅鐢宠淇℃伅"); + } + carUseBook.setCancelInfo(info); + carUseBook.setCancelTime(new Date()); + carUseBook.setCancelStatus(Constants.ONE); + carUseBook.setStatus(Constants.FOUR); + carUseBook.setCancelUser(loginUserInfo.getId()); + carUseBook.setCancelType(Constants.ONE); + if(loginUserInfo.getId().equals(carUseBook.getCreator())){ + carUseBook.setCancelType(Constants.ZERO); + } + carUseBookMapper.updateById(carUseBook); + //澶勭悊瀹℃壒璁板綍 + approveJoinMapper.update(null,new UpdateWrapper<Approve>() + .lambda() + .set(Approve::getStatus,Constants.FOUR) + .set(Approve::getCheckInfo,"鐢ㄨ溅鐢宠鍙栨秷") + .in(Approve::getStatus,Constants.ZERO,Constants.ONE) + .eq(Approve::getObjId,id) + ); + } + + } -- Gitblit v1.9.3