package com.doumee.service.business.impl; 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.Utils; import com.doumee.dao.business.CarsMapper; import com.doumee.dao.business.ParkBookMapper; import com.doumee.dao.business.ParksMapper; import com.doumee.dao.business.join.ParkBookJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.service.business.ParkBookService; 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.impl.hksync.HkSyncParkServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** * 车辆预约记录信息表Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service public class ParkBookServiceImpl implements ParkBookService { @Autowired private ParkBookMapper parkBookMapper; @Autowired private CarsMapper carsMapper; @Autowired private HkSyncParkServiceImpl hkSyncParkService; @Autowired private ParksMapper parksMapper; @Autowired private ParkBookJoinMapper parkBookJoinMapper; @Override public Integer create(ParkBook parkBook) { parkBookMapper.insert(parkBook); return parkBook.getId(); } @Override public void deleteById(Integer id) { LoginUserInfo user =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); ParkBook parkBook = new ParkBook(); parkBook.setIsdeleted(Constants.ZERO); parkBook.setEditDate(new Date()); parkBook.setParkId(id); parkBook.setEditor(user.getId()); parkBook.setHkStatus(Constants.ZERO); parkBook.setRemark("待同步安防平台"); parkBookMapper.updateById(parkBook); } @Override public void delete(ParkBook parkBook) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(parkBook); parkBookMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } parkBookMapper.deleteBatchIds(ids); } @Override public void updateById(ParkBook parkBook) { parkBookMapper.updateById(parkBook); } @Override public void updateByIdInBatch(List parkBooks) { if (CollectionUtils.isEmpty(parkBooks)) { return; } for (ParkBook parkBook: parkBooks) { this.updateById(parkBook); } } @Override public ParkBook findById(Integer id) { return parkBookMapper.selectById(id); } @Override public void reUpdate(ParkBook param) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(ParkBook.class); queryWrapper.selectAs(Parks::getHkId,ParkBook::getParkHkId); queryWrapper.leftJoin(Parks.class,Parks::getId,ParkBook::getParkId); queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode); queryWrapper.eq(ParkBook::getHkStatus,Constants.ZERO) .eq(ParkBook::getIsdeleted,Constants.ZERO) .eq(ParkBook::getId,param.getId()); ParkBook model = parkBookJoinMapper.selectJoinOne(ParkBook.class,queryWrapper); if(model== null){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"该记录当前不支持重新下发条件!"); } hkSyncParkService.syncParkBookBySingleModel(model); } @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) public String batchAuth(Cars cars) { if(cars.getIdList() == null || cars.getIdList() == null ||cars.getAuthTimeType() == null ||cars.getAuthTimeType()>2 ||cars.getAuthTimeType()<0 ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Cars.class); queryWrapper.selectAs(Member::getStartTime,Cars::getMemberStartTime); queryWrapper.selectAs(Member::getEndTime,Cars::getMemberEndTime); queryWrapper.selectAs(Member::getIsdeleted,Cars::getMemberDeleted); queryWrapper.selectAs(Member::getAuthStatus,Cars::getMemberAuthStatus); queryWrapper.leftJoin(Member.class,Member::getId,Cars::getMemberId); queryWrapper.eq(Cars::getIsdeleted,Constants.ZERO) .in(Cars::getId,cars.getIdList()); List carsList = carsMapper.selectList( queryWrapper); if(carsList== null || carsList.size() ==0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"车辆信息有误,请返回刷新页面重试!"); } List parksList = null; if(cars.getParkIdList()!=null && cars.getParkIdList().size() > 0){ MPJLambdaWrapper queryWrapper1 = new MPJLambdaWrapper<>(); queryWrapper1.selectAll(Parks.class); queryWrapper1.eq(Parks::getIsdeleted,Constants.ZERO) .in(Parks::getId,cars.getParkIdList()); parksList = parksMapper.selectList( queryWrapper1); if(parksList== null || parksList.size() ==0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"停车场信息有误,请返回刷新页面重试!"); } } if(Constants.equalsInteger(cars.getAuthTimeType(),Constants.ONE)){ if( cars.getStartTime() ==null || cars.getEndTime() == null ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请填写正确的有效期范围"); } if( cars.getEndTime().getTime() < System.currentTimeMillis()){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"有效期截止日期不能小于当前时间!"); } if(cars.getEndTime().getTime() <= cars.getStartTime().getTime()){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"有效期截止日期不能小于开始时间!"); } } Date date = new Date(); for(Cars model : carsList){ Date startTime = cars.getStartTime(); Date endTime = cars.getEndTime(); if(Constants.equalsInteger(cars.getAuthTimeType(),Constants.TWO)){ if(!Constants.equalsInteger(model.getMemberAuthStatus(),Constants.ONE)){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,车辆【"+model.getCode()+"】车主尚未授权门禁信息,授权无法【跟随车主】有效期!"); } startTime = model.getMemberStartTime(); endTime=model.getMemberEndTime(); } model.setAuthTimeType(cars.getAuthTimeType()); model.setStartTime(startTime); model.setEndTime(endTime); dealCarAuthByModel(model,cars.getLoginUserInfo().getId(),parksList,date,parkBookMapper); model.setAuthStatus(Constants.ONE);//已授权 carsMapper.update(null,new UpdateWrapper().lambda() .eq(Cars::getId,model.getId()) .set(Cars::getEditDate,date) .set(Cars::getEdirot,cars.getLoginUserInfo().getId()) .set(Cars::getAuthStatus,Constants.ONE) .set(Cars::getStartTime,startTime) .set(Cars::getEndTime,endTime) ); } return "授权成功"; } public static int dealCarAuthByModel(Cars model, Integer userId, List parksList,Date date,ParkBookMapper parkBookMapper) { //删除车量库记录数据 parkBookMapper.update(null,new UpdateWrapper().lambda() .eq(ParkBook::getCarCode,model.getCode()) .set(ParkBook::getIsdeleted,Constants.ONE) .set(ParkBook::getHkStatus,Constants.ZERO) ); if(org.apache.commons.collections.CollectionUtils.isNotEmpty(parksList)){ List parkBookList = new ArrayList<>(); for (Parks parks:parksList) { ParkBook parkBook = new ParkBook(); parkBook.setIsdeleted(Constants.ZERO); parkBook.setCreateDate(date); parkBook.setCreator(userId); parkBook.setEditor(userId); parkBook.setEditDate(date); parkBook.setCarCode(model.getCode()); parkBook.setParkId(parks.getId()); parkBook.setOrigin(Constants.ZERO); parkBook.setStartTime(model.getStartTime()); parkBook.setEndTime(model.getEndTime()); parkBook.setTimeType(model.getAuthTimeType()); parkBook.setMemberId(model.getMemberId()); parkBook.setHkStatus(Constants.ZERO); parkBook.setRemark("待同步安防平台"); parkBookList.add(parkBook); } parkBookMapper.insert(parkBookList); } return 0; } @Override public ParkBook findOne(ParkBook parkBook) { QueryWrapper wrapper = new QueryWrapper<>(parkBook); return parkBookMapper.selectOne(wrapper); } @Override public List findList(ParkBook parkBook) { QueryWrapper wrapper = new QueryWrapper<>(parkBook); return parkBookMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(ParkBook.class); queryWrapper.selectAs(Parks::getName,Cars::getParksName); queryWrapper.selectAs(Member::getType,Cars::getMemberType); queryWrapper.selectAs(Member::getName,Cars::getMemberName); queryWrapper.selectAs(Member::getPhone,Cars::getMemberPhone); queryWrapper.selectAs(Company::getName,Cars::getCompanyName); queryWrapper.leftJoin(Parks.class,Parks::getId,ParkBook::getParkId); queryWrapper.leftJoin(Member.class,Member::getId,ParkBook::getMemberId); queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId); LoginUserInfo userInfo =pageWrap.getModel().getLoginUserInfo(); if(userInfo!=null && userInfo.getCompanyIdList()!=null){ if( userInfo.getCompanyIdList().size() ==0){ //只能看自己 queryWrapper.eq(Member::getId,userInfo.getMemberId()); }else{ queryWrapper.in(Company::getId,userInfo.getCompanyIdList()); } } //数据权限开始--------------------end---------------- queryWrapper // .eq(ParkBook::getIsdeleted, Constants.ZERO) .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getPhone,pageWrap.getModel().getMemberName()) .or().like(Member::getName,pageWrap.getModel().getMemberName())); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCarCode()),ParkBook::getCarCode,pageWrap.getModel().getCarCode()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getParksName()),Parks::getName,pageWrap.getModel().getParksName()); queryWrapper.orderByDesc(ParkBook::getCreateDate); IPage result = parkBookJoinMapper.selectJoinPage(page, ParkBook.class,queryWrapper); return PageData.from(result); } @Override public long count(ParkBook parkBook) { QueryWrapper wrapper = new QueryWrapper<>(parkBook); return parkBookMapper.selectCount(wrapper); } }