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<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); 
 | 
    } 
 | 
} 
 |