| package com.doumee.service.business.impl; | 
|   | 
| import com.doumee.core.constants.ResponseStatus; | 
| import com.doumee.core.exception.BusinessException; | 
| 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.Constants; | 
| 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.dao.business.model.Member; | 
| 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.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; | 
|   | 
| /** | 
|  * 车辆预约记录信息表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<ParkBook> deleteWrapper = new UpdateWrapper<>(parkBook); | 
|         parkBookMapper.delete(deleteWrapper); | 
|     } | 
|   | 
|     @Override | 
|     public void deleteByIdInBatch(List<Integer> ids) { | 
|         if (CollectionUtils.isEmpty(ids)) { | 
|             return; | 
|         } | 
|         parkBookMapper.deleteBatchIds(ids); | 
|     } | 
|   | 
|     @Override | 
|     public void updateById(ParkBook parkBook) { | 
|         parkBookMapper.updateById(parkBook); | 
|     } | 
|   | 
|     @Override | 
|     public void updateByIdInBatch(List<ParkBook> 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<ParkBook> 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<Cars> 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<Cars> carsList = carsMapper.selectList( queryWrapper); | 
|        if(carsList== null || carsList.size() ==0){ | 
|            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"车辆信息有误,请返回刷新页面重试!"); | 
|        } | 
|         List<Parks> parksList = null; | 
|        if(cars.getParkIdList()!=null && cars.getParkIdList().size() > 0){ | 
|            MPJLambdaWrapper<Parks> 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<Cars>().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<Parks> parksList,Date date,ParkBookMapper parkBookMapper) { | 
|         //删除车量库记录数据 | 
|         parkBookMapper.update(null,new UpdateWrapper<ParkBook>().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<ParkBook> 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<ParkBook> wrapper = new QueryWrapper<>(parkBook); | 
|         return parkBookMapper.selectOne(wrapper); | 
|     } | 
|   | 
|     @Override | 
|     public List<ParkBook> findList(ParkBook parkBook) { | 
|         QueryWrapper<ParkBook> wrapper = new QueryWrapper<>(parkBook); | 
|         return parkBookMapper.selectList(wrapper); | 
|     } | 
|    | 
|     @Override | 
|     public PageData<ParkBook> findPage(PageWrap<ParkBook> pageWrap) { | 
|         IPage<ParkBook> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); | 
|         MPJLambdaWrapper<ParkBook> queryWrapper = new MPJLambdaWrapper<>(); | 
|   | 
|         queryWrapper.selectAll(ParkBook.class); | 
|         queryWrapper.selectAs(Parks::getName,ParkBook::getParksName); | 
|         queryWrapper.selectAs(Member::getType,ParkBook::getMemberType); | 
|         queryWrapper.selectAs(Member::getName,ParkBook::getMemberName); | 
|         queryWrapper.selectAs(Member::getPhone,ParkBook::getMemberPhone); | 
|         queryWrapper.selectAs(Company::getName,ParkBook::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<ParkBook> result = parkBookJoinMapper.selectJoinPage(page, ParkBook.class,queryWrapper); | 
|   | 
|         return PageData.from(result); | 
|     } | 
|   | 
|     @Override | 
|     public long count(ParkBook parkBook) { | 
|         QueryWrapper<ParkBook> wrapper = new QueryWrapper<>(parkBook); | 
|         return parkBookMapper.selectCount(wrapper); | 
|     } | 
| } |