package com.doumee.service.business.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.doumee.biz.system.SystemDictDataBiz;
|
import com.doumee.core.constants.ResponseStatus;
|
import com.doumee.core.exception.BusinessException;
|
import com.doumee.dao.business.dao.UserActionMapper;
|
import com.doumee.service.business.third.model.LoginUserInfo;
|
import com.doumee.service.business.third.model.PageData;
|
import com.doumee.service.business.third.model.PageWrap;
|
import com.doumee.core.utils.*;
|
import com.doumee.core.wx.wxPlat.WxPlatConstants;
|
import com.doumee.core.wx.wxPlat.WxPlatNotice;
|
import com.doumee.dao.business.*;
|
import com.doumee.dao.business.dao.MemberMapper;
|
import com.doumee.dao.business.dao.SmsConfigMapper;
|
import com.doumee.dao.business.dao.SmsEmailMapper;
|
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.ApproveDataVO;
|
import com.doumee.dao.business.vo.DateIntervalVO;
|
|
import com.doumee.dao.business.model.Member;
|
import com.doumee.dao.system.SystemUserMapper;
|
import com.doumee.dao.system.join.NoticesJoinMapper;
|
import com.doumee.dao.system.model.Notices;
|
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;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.doumee.service.business.third.EmayService;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import org.apache.commons.lang3.StringUtils;
|
import org.checkerframework.checker.units.qual.C;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
|
import java.time.LocalDateTime;
|
import java.time.ZoneId;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.Date;
|
|
/**
|
* 车辆_用车申请信息表Service实现
|
* @author 江蹄蹄
|
* @since 2024/04/28 16:06
|
*/
|
@Service
|
public class CarUseBookServiceImpl implements CarUseBookService {
|
|
@Autowired
|
private CarUseBookMapper carUseBookMapper;
|
@Autowired
|
private ApproveMapper approveMapper;
|
|
@Autowired
|
private UserActionMapper userActionMapper;
|
@Autowired
|
private CarUseBookJoinMapper carUseBookJoinMapper;
|
|
@Autowired
|
private CarsMapper carsMapper;
|
|
@Autowired
|
private SystemDictDataBiz systemDictDataBiz;
|
|
@Autowired
|
private ApproveJoinMapper approveJoinMapper;
|
|
@Autowired
|
private NoticesJoinMapper noticesJoinMapper;
|
|
@Autowired
|
private ApproveService approveService;
|
|
@Autowired
|
private CarDriverMapper carDriverMapper;
|
|
@Autowired
|
private MemberMapper memberMapper;
|
|
|
@Autowired
|
private SmsConfigMapper smsConfigMapper;
|
|
@Autowired
|
private SmsEmailMapper smsEmailMapper;
|
|
@Autowired
|
private EmayService emayService;
|
|
@Autowired
|
private WxNoticeConfigMapper wxNoticeConfigMapper;
|
|
@Autowired
|
private SystemUserMapper systemUserMapper;
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class,BusinessException.class})
|
public Integer create(CarUseBook carUseBook) throws Exception {
|
if(Objects.isNull(carUseBook)
|
|| Objects.isNull(carUseBook.getCarId())
|
|| Objects.isNull(carUseBook.getStartTime())
|
|| Objects.isNull(carUseBook.getEndTime())
|
|| Objects.isNull(carUseBook.getCreator())
|
|| 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);
|
}
|
if(Objects.nonNull(carUseBook.getCreator())&&Objects.isNull(carUseBook.getMemberId())){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前登录用户无法进行该操作!");
|
}
|
if(carUseBook.getEndTime().getTime()<=System.currentTimeMillis()){
|
// throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"选择日期异常[结束时间小于当前时间],请刷新重试");
|
}
|
if(!(DateUtil.getDateFromString(carUseBook.getPlanUseDate()+":00").getTime()>=carUseBook.getStartTime().getTime()
|
&& DateUtil.getDateFromString(carUseBook.getPlanUseDate() +":00").getTime()<= carUseBook.getEndTime().getTime())
|
){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"出发时间错误");
|
}
|
carUseBook.setStatus(Constants.ZERO);
|
carUseBook.setCreateDate(new Date());
|
carUseBook.setIsdeleted(Constants.ZERO);
|
Cars cars = carsMapper.selectById(carUseBook.getCarId());
|
if(Objects.isNull(cars)||!cars.getType().equals(Constants.ZERO)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"车辆信息异常");
|
}
|
carUseBook.setCarCode(cars.getCode());
|
//根据车辆查询司机信息
|
CarDriver carDriver = carDriverMapper.selectOne(new QueryWrapper<CarDriver>().lambda()
|
.eq(CarDriver::getCarId,cars.getId())
|
.eq(CarDriver::getIsdeleted,Constants.ZERO)
|
// .eq(CarDriver::getStatus,Constants.ZERO)
|
.last( " limit 1 ")
|
);
|
if(Objects.nonNull(carDriver)&&Objects.nonNull(carDriver.getMemberId())){
|
carUseBook.setDriverId(carDriver.getMemberId());
|
}
|
//查询车辆提交时间是否存在冲突的预约记录
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(this.carUseBookList(carUseBook))){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在车辆预约时间与已预约时间冲突~");
|
}
|
carUseBookMapper.insert(carUseBook);
|
//用车申请 审批记录创建
|
approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId(),null);
|
//发送微信公众号通知
|
//发送微信公众号通知
|
WxPlatNotice wxPlatNotice = new WxPlatNotice();
|
SystemUser systemUser = systemUserMapper.selectById(carUseBook.getCreator());
|
if(Objects.nonNull(systemUser) && StringUtils.isNotBlank(systemUser.getOpenid())){
|
carUseBook.setMemberName(systemUser.getRealname());
|
wxPlatNotice.sendCarUseBookTemplateNotice(systemDictDataBiz,
|
wxNoticeConfigMapper,carUseBook,
|
WxPlatConstants.carUseBookContent.carUseBookUpload,
|
systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
|
Arrays.asList(systemUser.getOpenid().split(",")),0);
|
}
|
return carUseBook.getId();
|
}
|
|
@Override
|
public void deleteById(Integer id) {
|
carUseBookMapper.deleteById(id);
|
}
|
@Override
|
@Transactional(rollbackFor = {BusinessException.class,Exception.class})
|
public void deleteById(Integer id,LoginUserInfo user) {
|
Date date = new Date();
|
MPJLambdaWrapper<CarUseBook> queryWrapper = new MPJLambdaWrapper<>();
|
queryWrapper.selectAll(CarUseBook.class);
|
queryWrapper.select("t1.name",CarUseBook::getMemberName);
|
queryWrapper.leftJoin(Member.class,Member::getId,CarUseBook::getMemberId)
|
.eq(CarUseBook::getId,id)
|
.eq(CarUseBook::getIsdeleted,Constants.ZERO)
|
.last("limit 1" );
|
CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
|
if(model==null ||Constants.equalsInteger(Constants.ONE,model.getIsdeleted())){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY);
|
}
|
carUseBookMapper.update(null,new UpdateWrapper<CarUseBook>().lambda()
|
.set(CarUseBook::getIsdeleted,Constants.ONE)
|
.set(CarUseBook::getEditDate,date)
|
.set(CarUseBook::getEditor,user.getId())
|
.eq(CarUseBook::getId,id));
|
String[] params = new String[3];
|
params[0] = user.getRealname();
|
params[1]=DateUtil.getPlusTime2(date);
|
params[2]=model.getCarCode()+"-【乘车人:"+model.getMemberNames()+" 】-【预约人:"+model.getMemberName()+"】-【时间:"+DateUtil.getPlusTime2(model.getStartTime())+"-"+DateUtil.getPlusTime2(model.getEndTime())+"】";
|
//记录删除日志
|
UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.CAR_BOOK_DEL,userActionMapper,date,params, JSONObject.toJSONString(model));
|
|
VisitsServiceImpl.dealCancelNoticesData(noticesJoinMapper,approveMapper,"系统删除",model.getId(),
|
Constants.equalsInteger(model.getType(),Constants.ZERO)?Constants.approveObjectType.cityUseCar:Constants.approveObjectType.unCityUseCar,
|
Constants.noticesObjectType.useCar
|
);
|
}
|
@Override
|
public void delete(CarUseBook carUseBook) {
|
UpdateWrapper<CarUseBook> deleteWrapper = new UpdateWrapper<>(carUseBook);
|
carUseBookMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) {
|
return;
|
}
|
carUseBookMapper.deleteBatchIds(ids);
|
}
|
|
@Override
|
public void updateById(CarUseBook carUseBook) {
|
carUseBookMapper.updateById(carUseBook);
|
}
|
|
@Override
|
public void updateByIdInBatch(List<CarUseBook> carUseBooks) {
|
if (CollectionUtils.isEmpty(carUseBooks)) {
|
return;
|
}
|
for (CarUseBook carUseBook: carUseBooks) {
|
this.updateById(carUseBook);
|
}
|
}
|
|
/**
|
*
|
* @param id 主键
|
* @param memberId
|
* @return
|
*/
|
@Override
|
public CarUseBook findById(Integer id,Integer memberId) {
|
MPJLambdaWrapper<CarUseBook> queryWrapper = new MPJLambdaWrapper<>();
|
queryWrapper.selectAll(CarUseBook.class);
|
queryWrapper.select("t1.name",CarUseBook::getMemberName);
|
queryWrapper.select("t1.phone",CarUseBook::getMemberPhone);
|
queryWrapper.select("t2.name",CarUseBook::getDriverName);
|
queryWrapper.select("t2.phone",CarUseBook::getDriverPhone);
|
queryWrapper.select("t4.company_name_path",CarUseBook::getCompanyName);
|
queryWrapper.leftJoin(Member.class,Member::getId,CarUseBook::getMemberId)
|
.leftJoin(Member.class,Member::getId,CarUseBook::getDriverId)
|
.leftJoin("company t4 on t1.company_id=t4.id")
|
.eq(CarUseBook::getId,id)
|
.eq(CarUseBook::getIsdeleted,Constants.ZERO)
|
.last("limit 1" );
|
CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
|
if(Objects.isNull(model)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY);
|
}
|
model.setApproveDateVO(getApproveDataVO(memberId,model));
|
List<Approve> approveList = model.getApproveDateVO().getApproveList();
|
if(Constants.equalsInteger(model.getStatus(),Constants.FOUR)){
|
String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
|
+systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
|
Member member1 = memberMapper.selectById(model.getCancelUser());
|
|
Approve approve = new Approve();
|
approve.setApproveType(Constants.ZERO);
|
approve.setCreateDate(model.getCancelTime());
|
approve.setTitle("撤销人");
|
approve.setStatusInfo("已撤销");
|
approve.setStatus(Constants.FOUR);
|
approve.setType(Constants.ZERO);
|
if(member1!=null) {
|
approve.setMemberName(member1.getName());
|
if (StringUtils.isNotBlank(member1.getFaceImg())) {
|
approve.setFaceImg(path + member1.getFaceImg());
|
}
|
}
|
approve.setCheckInfo(model.getCancelInfo());
|
approve.setCheckDate(model.getCancelTime());
|
approveList.add(approve);
|
}
|
|
Notices notices = noticesJoinMapper.selectOne(new QueryWrapper<Notices>().lambda()
|
.eq(Notices::getObjId,id)
|
.eq(Notices::getType,Constants.noticesObjectType.useCar)
|
.eq(Notices::getUserId,memberId)
|
.eq(Notices::getSendacopy,Constants.ZERO)
|
.orderByDesc(Notices::getId).last(" limit 1 "));
|
if(Objects.nonNull(notices)){
|
if(Constants.equalsInteger(notices.getStatus(),Constants.ZERO)){
|
model.setInfo("待我处理");
|
}else{
|
model.setInfo(notices.getInfo());
|
}
|
}
|
|
|
return model;
|
}
|
|
private ApproveDataVO getApproveDataVO( Integer memberId,CarUseBook model) {
|
ApproveDataVO approveDataVO = approveService.arrangeApprovedData(model.getId(),
|
Constants.equalsInteger(model.getType(),Constants.ZERO)?3:4,
|
memberId);
|
return approveDataVO;
|
}
|
|
@Override
|
public CarUseBook findOne(CarUseBook carUseBook) {
|
QueryWrapper<CarUseBook> wrapper = new QueryWrapper<>(carUseBook);
|
return carUseBookMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<CarUseBook> findList(CarUseBook carUseBook) {
|
QueryWrapper<CarUseBook> wrapper = new QueryWrapper<>(carUseBook);
|
return carUseBookMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<CarUseBook> findPage(PageWrap<CarUseBook> pageWrap) {
|
IPage<CarUseBook> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
MPJLambdaWrapper<CarUseBook> queryWrapper = new MPJLambdaWrapper<>();
|
Utils.MP.blankToNull(pageWrap.getModel());
|
pageWrap.getModel().setIsdeleted(Constants.ZERO);
|
queryWrapper.selectAll(CarUseBook.class);
|
queryWrapper.select("t1.name",CarUseBook::getMemberName);
|
queryWrapper.select("t1.phone",CarUseBook::getMemberPhone);
|
queryWrapper.select("t2.name",CarUseBook::getDriverName);
|
queryWrapper.select("t2.phone",CarUseBook::getDriverPhone);
|
queryWrapper.select("t4.company_name_path",CarUseBook::getCompanyName);
|
queryWrapper.leftJoin(Member.class,Member::getId,CarUseBook::getMemberId)
|
.leftJoin(Member.class,Member::getId,CarUseBook::getDriverId)
|
.leftJoin("company t4 on t1.company_id=t4.id");
|
//数据权限开始--------------------start----------------
|
LoginUserInfo userInfo =pageWrap.getModel().getLoginUserInfo();
|
if(userInfo!=null && userInfo.getCompanyIdList()!=null){
|
if( userInfo.getCompanyIdList().size() ==0){
|
//只能看自己
|
queryWrapper.eq(CarUseBook::getCreator,userInfo.getId());
|
}else{
|
queryWrapper.in("t1.company_id" ,userInfo.getCompanyIdList());
|
}
|
}
|
//数据权限开始--------------------end----------------
|
|
queryWrapper
|
.eq(pageWrap.getModel().getId() != null, CarUseBook::getId, pageWrap.getModel().getId())
|
.eq(pageWrap.getModel().getCreator() != null, CarUseBook::getCreator, pageWrap.getModel().getCreator())
|
.ge(pageWrap.getModel().getCreateDate() != null, CarUseBook::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()))
|
.le(pageWrap.getModel().getCreateDate() != null, CarUseBook::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()))
|
.eq(pageWrap.getModel().getEditor() != null, CarUseBook::getEditor, pageWrap.getModel().getEditor())
|
.ge(pageWrap.getModel().getEditDate() != null, CarUseBook::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()))
|
.le(pageWrap.getModel().getEditDate() != null, CarUseBook::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()))
|
.eq(pageWrap.getModel().getIsdeleted() != null, CarUseBook::getIsdeleted, pageWrap.getModel().getIsdeleted())
|
.eq(pageWrap.getModel().getRemark() != null, CarUseBook::getRemark, pageWrap.getModel().getRemark())
|
.like(pageWrap.getModel().getCarCode() != null, CarUseBook::getCarCode, pageWrap.getModel().getCarCode())
|
.eq(pageWrap.getModel().getCarId() != null, CarUseBook::getCarId, pageWrap.getModel().getCarId())
|
.ge(pageWrap.getModel().getStartTime() != null, CarUseBook::getStartTime, Utils.Date.getStart(pageWrap.getModel().getStartTime()))
|
.le(pageWrap.getModel().getStartTime() != null, CarUseBook::getStartTime, Utils.Date.getEnd(pageWrap.getModel().getStartTime()))
|
.ge(pageWrap.getModel().getEndTime() != null, CarUseBook::getEndTime, Utils.Date.getStart(pageWrap.getModel().getEndTime()))
|
.le(pageWrap.getModel().getEndTime() != null, CarUseBook::getEndTime, Utils.Date.getEnd(pageWrap.getModel().getEndTime()))
|
.eq(pageWrap.getModel().getPlanUseDate() != null, CarUseBook::getPlanUseDate, pageWrap.getModel().getPlanUseDate())
|
.eq(pageWrap.getModel().getStatus() != null, CarUseBook::getStatus, pageWrap.getModel().getStatus())
|
.ge(pageWrap.getModel().getCheckDate() != null, CarUseBook::getCheckDate, Utils.Date.getStart(pageWrap.getModel().getCheckDate()))
|
.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())
|
.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())
|
.eq(pageWrap.getModel().getCancelInfo() != null, CarUseBook::getCancelInfo, pageWrap.getModel().getCancelInfo())
|
.eq(pageWrap.getModel().getType() != null, CarUseBook::getType, pageWrap.getModel().getType())
|
.eq(pageWrap.getModel().getMemberIds() != null, CarUseBook::getMemberIds, pageWrap.getModel().getMemberIds())
|
.eq(pageWrap.getModel().getMemberNames() != null, CarUseBook::getMemberNames, pageWrap.getModel().getMemberNames())
|
.eq(pageWrap.getModel().getContent() != null, CarUseBook::getContent, pageWrap.getModel().getContent())
|
.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())
|
.apply(pageWrap.getModel().getCompanyName() != null, "t4.company_name_path like '%"+pageWrap.getModel().getCompanyName()+"%'")
|
|
.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()), CarUseBook::getCreateDate,pageWrap.getModel().getQueryStartTime())
|
.le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()),CarUseBook::getCreateDate,pageWrap.getModel().getQueryEndTime())
|
.orderByDesc(Visits::getCreateDate)
|
;
|
for(PageWrap.SortData sortData: pageWrap.getSorts()) {
|
if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
|
queryWrapper.orderByDesc(sortData.getProperty());
|
} else {
|
queryWrapper.orderByAsc(sortData.getProperty());
|
}
|
}
|
PageData<CarUseBook> result =PageData.from(carUseBookMapper.selectJoinPage(page, CarUseBook.class, queryWrapper));
|
if(result!=null && result.getRecords()!=null){
|
for(CarUseBook carUseBook:result.getRecords()){
|
carUseBook.setHasRole(getHasBackRoleBiz(carUseBook,pageWrap.getModel().getLoginUserInfo()));
|
}
|
}
|
return result;
|
}
|
|
@Override
|
public long count(CarUseBook carUseBook) {
|
QueryWrapper<CarUseBook> wrapper = new QueryWrapper<>(carUseBook);
|
return carUseBookMapper.selectCount(wrapper);
|
}
|
|
|
/**
|
* 查询车辆预约记录
|
* @param carUseBook
|
* @return
|
*/
|
@Override
|
public List<CarUseBook> carUseBookList(CarUseBook carUseBook) throws Exception {
|
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::getIsdeleted,Constants.ZERO)
|
.eq(CarUseBook::getCarId,carUseBook.getCarId())
|
.in(CarUseBook::getStatus,0,1,2)
|
.apply(" ( " +
|
" '"+DateUtil.getPlusTime(carUseBook.getStartTime())+"' <= t.start_time AND t.start_time < '"+DateUtil.getPlusTime(carUseBook.getEndTime())+"' " +
|
" or " +
|
" ( '"+DateUtil.getPlusTime(carUseBook.getStartTime())+"' < t.end_time AND t.end_time < '"+DateUtil.getPlusTime(carUseBook.getEndTime())+"' ) " +
|
" or " +
|
" ( '"+DateUtil.getPlusTime(carUseBook.getStartTime())+"' > t.start_time AND '"+DateUtil.getPlusTime(carUseBook.getEndTime())+"' < t.end_time )" +
|
" ) " )
|
);
|
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' "))
|
);
|
for (DateIntervalVO dateIntervalVO:dateIntervalVOList) {
|
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(carUseBookList)){
|
for (CarUseBook i:carUseBookList ) {
|
if(
|
(DateUtil.getDateFromString(dateIntervalVO.getStartTime()).getTime() <= i.getStartTime().getTime() &&
|
i.getStartTime().getTime() < DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime())
|
||
|
(DateUtil.getDateFromString(dateIntervalVO.getStartTime()).getTime() < i.getEndTime().getTime() &&
|
i.getEndTime().getTime() <= DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime())
|
||
|
(DateUtil.getDateFromString(dateIntervalVO.getStartTime()).getTime() >= i.getStartTime().getTime() &&
|
DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime() <= i.getEndTime().getTime())
|
){
|
dateIntervalVO.setCarUseBookId(i.getId());
|
dateIntervalVO.setIsUse(Constants.ONE);
|
break;
|
}
|
}
|
}
|
//判断时间是否大于当前
|
if(Constants.equalsInteger(dateIntervalVO.getIsUse(),Constants.ZERO) && DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime()<=System.currentTimeMillis()){
|
// dateIntervalVO.setIsUse(Constants.ONE);
|
continue;
|
}
|
}
|
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);
|
dateIntervalVOList.add(dateIntervalVO);
|
}
|
return dateIntervalVOList;
|
}
|
|
|
@Override
|
public void revoke(Integer id, String info, LoginUserInfo loginUserInfo){
|
CarUseBook carUseBook = carUseBookMapper.selectById(id);
|
if(Objects.isNull(carUseBook) || Constants.equalsInteger(carUseBook.getIsdeleted(),Constants.ONE)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到用车申请信息");
|
}
|
if(getHasBackRoleBiz(carUseBook,loginUserInfo) == Constants.ZERO){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,无权限行撤销操作!");
|
}
|
carUseBook.setCancelInfo(info);
|
carUseBook.setCancelTime(new Date());
|
carUseBook.setCancelStatus(Constants.ONE);
|
carUseBook.setStatus(Constants.FOUR);
|
carUseBook.setCancelUser(loginUserInfo.getMemberId());
|
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::getIsdeleted,Constants.ONE)
|
.set(Approve::getStatus,Constants.FOUR)
|
.set(Approve::getCheckInfo,"用车申请取消")
|
.in(Approve::getStatus,Constants.ZERO,Constants.ONE)
|
.in(Approve::getObjType,Constants.approveObjectType.cityUseCar,Constants.approveObjectType.unCityUseCar)
|
.eq(Approve::getObjId,id)
|
);
|
|
//处理待办信息
|
noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
|
.set(Notices::getStatus,Constants.ONE)
|
.set(Notices::getInfo,"已取消")
|
.eq(Notices::getType,Constants.TWO)
|
.eq(Notices::getObjId,carUseBook.getId())
|
);
|
|
|
SystemUser systemUser = systemUserMapper.selectById(carUseBook.getCreator());
|
if(Objects.nonNull(systemUser)&&StringUtils.isNotBlank(systemUser.getMobile())){
|
//用车申请取消
|
SmsEmailServiceImpl.sendCarUseSms(systemDictDataBiz,
|
emayService,smsEmailMapper,smsConfigMapper,carUseBookMapper,carUseBook.getId(),
|
SmsConstants.carUseBookContent.carUseBookCancel,
|
info, Arrays.asList(systemUser.getMobile().split(","))
|
);
|
if(StringUtils.isNotBlank(systemUser.getOpenid())){
|
carUseBook.setMemberName(systemUser.getRealname());
|
WxPlatNotice wxPlatNotice = new WxPlatNotice();
|
wxPlatNotice.sendCarUseBookTemplateNotice(systemDictDataBiz,
|
wxNoticeConfigMapper,
|
carUseBook,
|
WxPlatConstants.carUseBookContent.carUseBookCancel,
|
systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
|
Arrays.asList(systemUser.getOpenid().split(",")),
|
Constants.TWO);
|
}
|
|
}
|
}
|
|
/**
|
* 查询当前登陆用户是否具有退回申请的权限
|
* 申请人只能在待审核之前撤销,派车员可以在待审核、审核中、审批通过进行撤销
|
* @param carUseBook
|
* @param loginUserInfo
|
* @return
|
*/
|
private int getHasBackRoleBiz(CarUseBook carUseBook, LoginUserInfo loginUserInfo) {
|
if(Constants.equalsInteger(carUseBook.getCreator(),loginUserInfo.getId())
|
&& Constants.equalsInteger(carUseBook.getStatus(),Constants.ZERO)){
|
//申请人可以撤销自己申请中的申请记录
|
return Constants.ONE;
|
}
|
if(Constants.equalsInteger(carUseBook.getStatus(),Constants.TWO) && carUseBook.getStartTime()!=null
|
&& System.currentTimeMillis() >= carUseBook.getStartTime().getTime()){
|
//审批通过,但是 已到发车时间,不可以撤销
|
return Constants.ZERO;
|
}
|
if(!(Constants.equalsInteger(carUseBook.getStatus(),Constants.ZERO))
|
||Constants.equalsInteger(carUseBook.getStatus(),Constants.ONE)
|
||Constants.equalsInteger(carUseBook.getStatus(),Constants.TWO)){
|
//审批人可以撤销 自己审批的申请记录
|
Approve approve = approveJoinMapper.selectOne(new QueryWrapper<Approve>().lambda()
|
.eq(Approve::getIsdeleted,Constants.ZERO)
|
.ge(Approve::getLevel,Constants.ZERO)
|
.eq(Approve::getChekorId,loginUserInfo.getId())
|
.eq(Approve::getObjId,carUseBook.getId())
|
.eq(Approve::getObjType,carUseBook.getType()==0?3:4)
|
.last("limit 1"));
|
if(approve!=null){
|
return Constants.ONE;
|
}
|
}
|
return Constants.ZERO;
|
}
|
|
|
}
|