package com.doumee.service.business.impl; 
 | 
  
 | 
import cn.hutool.core.io.unit.DataUnit; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.model.PageData; 
 | 
import com.doumee.core.model.PageWrap; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.DateUtil; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.dao.business.BookingTimeMapper; 
 | 
import com.doumee.dao.business.RoomTimeMapper; 
 | 
import com.doumee.dao.business.join.BookingTimeJoinMapper; 
 | 
import com.doumee.dao.business.join.BookingsJoinMapper; 
 | 
import com.doumee.dao.business.join.RoomTimeJoinMapper; 
 | 
import com.doumee.dao.business.model.BookingTime; 
 | 
import com.doumee.dao.business.model.Bookings; 
 | 
import com.doumee.dao.business.model.RoomTime; 
 | 
import com.doumee.dao.business.model.Rooms; 
 | 
import com.doumee.dao.web.request.RoomTimeRequest; 
 | 
import com.doumee.service.business.RoomTimeService; 
 | 
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.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import org.springframework.beans.BeanUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.text.ParseException; 
 | 
import java.text.SimpleDateFormat; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 会议室预约时间段信息表Service实现 
 | 
 * 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/05/04 18:18 
 | 
 */ 
 | 
@Service 
 | 
public class RoomTimeServiceImpl implements RoomTimeService { 
 | 
  
 | 
    @Autowired 
 | 
    private RoomTimeMapper roomTimeMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private BookingTimeJoinMapper bookingTimeJoinMapper; 
 | 
  
 | 
  
 | 
    @Autowired 
 | 
    private RoomTimeJoinMapper roomTimeJoinMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private BookingsJoinMapper bookingsJoinMapper; 
 | 
  
 | 
    @Override 
 | 
    public Integer create(RoomTime roomTime) { 
 | 
        roomTimeMapper.insert(roomTime); 
 | 
        return roomTime.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        roomTimeMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(RoomTime roomTime) { 
 | 
        UpdateWrapper<RoomTime> deleteWrapper = new UpdateWrapper<>(roomTime); 
 | 
        roomTimeMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        roomTimeMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(RoomTime roomTime) { 
 | 
        roomTimeMapper.updateById(roomTime); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<RoomTime> roomTimes) { 
 | 
        if (CollectionUtils.isEmpty(roomTimes)) { 
 | 
            return; 
 | 
        } 
 | 
        for (RoomTime roomTime : roomTimes) { 
 | 
            this.updateById(roomTime); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public RoomTime findById(Integer id) { 
 | 
        return roomTimeMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public RoomTime findOne(RoomTime roomTime) { 
 | 
        QueryWrapper<RoomTime> wrapper = new QueryWrapper<>(roomTime); 
 | 
        return roomTimeMapper.selectOne(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<RoomTime> findList(RoomTime roomTime) { 
 | 
        MPJLambdaWrapper<RoomTime> wrapper = new MPJLambdaWrapper<>(); 
 | 
  
 | 
        if (roomTime.getYudingDate() == null || 
 | 
                roomTime.getRoomId() == null 
 | 
        ) { 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage()); 
 | 
        } 
 | 
  
 | 
        wrapper.eq(RoomTime::getIsdeleted, Constants.ZERO); 
 | 
        wrapper.eq(RoomTime::getRoomId, roomTime.getRoomId()); 
 | 
        wrapper.orderByAsc(RoomTime::getStartTime); 
 | 
        List<RoomTime> list = roomTimeJoinMapper.selectList(wrapper); 
 | 
  
 | 
        MPJLambdaWrapper<Bookings> bookquery = new MPJLambdaWrapper<>(); 
 | 
        bookquery.selectAll(Bookings.class); 
 | 
        bookquery.selectAs(BookingTime::getTimeId, Bookings::getRoomTimeId); 
 | 
        bookquery.selectAs(BookingTime::getId, Bookings::getBookingTimeId); 
 | 
        bookquery.eq(Bookings::getIsdeleted, Constants.ZERO); 
 | 
        bookquery.eq(Bookings::getRoomId, roomTime.getRoomId()); 
 | 
        bookquery.eq(Bookings::getStatus,Constants.ZERO); 
 | 
        bookquery.apply("DATE_FORMAT(t.START_TIME,'%Y-%m-%d') = DATE_FORMAT('" + DateUtil.dateToString(roomTime.getYudingDate(), "yyyy-MM-dd") + "','%Y-%m-%d') "); 
 | 
  
 | 
        bookquery.leftJoin(BookingTime.class, BookingTime::getBookingId, Bookings::getId); 
 | 
  
 | 
        List<Bookings> bookList = bookingsJoinMapper.selectJoinList(Bookings.class, bookquery); 
 | 
  
 | 
        //当前日期大于预约的日期设置为不可选 
 | 
        Boolean flag = false; 
 | 
        if (System.currentTimeMillis() > roomTime.getYudingDate().getTime()) { 
 | 
            flag = true; 
 | 
        } 
 | 
  
 | 
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
 | 
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
  
 | 
        for (int i = 0; i < list.size(); i++) { 
 | 
            RoomTime s = list.get(i); 
 | 
            s.setIsUse(false); 
 | 
            s.setIsChoose(false); 
 | 
            String now = format.format(roomTime.getYudingDate())+" "+s.getStartTime()+":00"; 
 | 
            try { 
 | 
                Date com=format1.parse(now); 
 | 
                if(flag){ 
 | 
                    if (System.currentTimeMillis() > com.getTime()) { 
 | 
                        s.setIsUse(true); 
 | 
                    } 
 | 
                } 
 | 
            } catch (ParseException e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
  
 | 
            bookList.stream().forEach(a -> { 
 | 
                if (Constants.equalsInteger(s.getId(), a.getRoomTimeId())) { 
 | 
                    s.setIsUse(true); 
 | 
                    s.setIsChoose(true); 
 | 
                    s.setBookingTimeId(a.getId()); 
 | 
                } 
 | 
            }); 
 | 
  
 | 
        } 
 | 
        ; 
 | 
  
 | 
        return list; 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public PageData<RoomTime> findPage(PageWrap<RoomTime> pageWrap) { 
 | 
        IPage<RoomTime> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        QueryWrapper<RoomTime> queryWrapper = new QueryWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        if (pageWrap.getModel().getId() != null) { 
 | 
            queryWrapper.lambda().eq(RoomTime::getId, pageWrap.getModel().getId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreator() != null) { 
 | 
            queryWrapper.lambda().eq(RoomTime::getCreator, pageWrap.getModel().getCreator()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreateDate() != null) { 
 | 
            queryWrapper.lambda().ge(RoomTime::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); 
 | 
            queryWrapper.lambda().le(RoomTime::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditor() != null) { 
 | 
            queryWrapper.lambda().eq(RoomTime::getEditor, pageWrap.getModel().getEditor()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditDate() != null) { 
 | 
            queryWrapper.lambda().ge(RoomTime::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); 
 | 
            queryWrapper.lambda().le(RoomTime::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getIsdeleted() != null) { 
 | 
            queryWrapper.lambda().eq(RoomTime::getIsdeleted, pageWrap.getModel().getIsdeleted()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getRemark() != null) { 
 | 
            queryWrapper.lambda().eq(RoomTime::getRemark, pageWrap.getModel().getRemark()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getRoomId() != null) { 
 | 
            queryWrapper.lambda().eq(RoomTime::getRoomId, pageWrap.getModel().getRoomId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getStartTime() != null) { 
 | 
            queryWrapper.lambda().eq(RoomTime::getStartTime, pageWrap.getModel().getStartTime()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEndTime() != null) { 
 | 
            queryWrapper.lambda().eq(RoomTime::getEndTime, pageWrap.getModel().getEndTime()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getStatus() != null) { 
 | 
            queryWrapper.lambda().eq(RoomTime::getStatus, pageWrap.getModel().getStatus()); 
 | 
        } 
 | 
        for (PageWrap.SortData sortData : pageWrap.getSorts()) { 
 | 
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { 
 | 
                queryWrapper.orderByDesc(sortData.getProperty()); 
 | 
            } else { 
 | 
                queryWrapper.orderByAsc(sortData.getProperty()); 
 | 
            } 
 | 
        } 
 | 
        return PageData.from(roomTimeMapper.selectPage(page, queryWrapper)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(RoomTime roomTime) { 
 | 
        QueryWrapper<RoomTime> wrapper = new QueryWrapper<>(roomTime); 
 | 
        return roomTimeMapper.selectCount(wrapper); 
 | 
    } 
 | 
  
 | 
    /**************************************移动端接口开始********************************************************************/ 
 | 
  
 | 
    @Override 
 | 
    public List<RoomTime> getRoomUseTime(RoomTimeRequest roomTimeRequest) { 
 | 
        RoomTime roomTime = new RoomTime(); 
 | 
        BeanUtils.copyProperties(roomTimeRequest, roomTime); 
 | 
        roomTime.setYudingDate(DateUtil.StringToDate(roomTimeRequest.getYudingDate(), "yyyy-MM-dd")); 
 | 
        return this.findList(roomTime); 
 | 
    } 
 | 
  
 | 
} 
 |