package com.yuanchu.mom.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.dto.DeviceDto;
import com.yuanchu.mom.dto.ReservationDto;
import com.yuanchu.mom.mapper.DeviceMapper;
import com.yuanchu.mom.mapper.ReservationMapper;
import com.yuanchu.mom.pojo.Reservation;
import com.yuanchu.mom.service.DataConfigService;
import com.yuanchu.mom.service.ReservationService;
import com.yuanchu.mom.utils.QueryWrappers;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 资源预定新建预定表 服务实现类
*
*
* @author baomidou
* @since 2024-09-14
*/
@Service
public class ReservationServiceImpl extends ServiceImpl implements ReservationService {
@Autowired
private GetLook getLook;
@Autowired
private DeviceMapper deviceMapper;
@Autowired
private ReservationMapper reservationMapper;
@Autowired
private DataConfigService dataConfigService;
@Override
public Map selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull, String starttime, String endtime) {
ArrayList dateTextList = new ArrayList<>();
if (StringUtils.isNoneEmpty(starttime)&&StringUtils.isNoneEmpty(endtime)){
LocalDate startDate = LocalDate.parse(starttime, DateTimeFormatter.ISO_LOCAL_DATE);
LocalDate endDate = LocalDate.parse(endtime, DateTimeFormatter.ISO_LOCAL_DATE);
while (!startDate.isAfter(endDate)) {
dateTextList.add(startDate.toString());
startDate = startDate.plusDays(1);
}
}
LambdaQueryWrapper lambdaQueryWrapper=new LambdaQueryWrapper<>();
lambdaQueryWrapper.between(Reservation::getReservationTime,starttime,endtime);
List reservations = reservationMapper.selectList(lambdaQueryWrapper);
HashMap dates = new HashMap();
Map> deviceIdcollect = reservations.stream().collect(Collectors.groupingBy(Reservation::getDeviceId));
for (Integer deviceId : deviceIdcollect.keySet()) {
List deviceIdList = deviceIdcollect.get(deviceId);
Map> collect = deviceIdList.stream().collect(Collectors.groupingBy(Reservation::getReservationTime));
for (String date : collect.keySet()) {
List reservations1 = collect.get(date);
Map> collect1 = reservations1.stream().collect(Collectors.groupingBy(Reservation::getSpecificTime));
for (String s : collect1.keySet()) {
if (!(dates.containsKey(deviceId + date + s))) {
dates.put(deviceId + date + s, collect1.get(s).size());
}
}
}
}
Map map = new HashMap<>();
map.put("head", PrintChina.printChina(DeviceDto.class));
Map map1 = getLook.selectPowerByMethodAndUserId("selectDeviceParameter");
if (map1.get("look") == 1) itemParameter.setCreateUser(map1.get("userId"));
IPage iPage = deviceMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(itemParameter), laboratoryNameIsNull);
List records = iPage.getRecords();
ArrayList datas = new ArrayList<>();
String [] dateArrays={"09:00-12:00","13:00-18:00", "18:00-22:00"};
for (DeviceDto record : records) {
for (int i = 0; i < dateArrays.length; i++) {
String dateArray = dateArrays[i];
JSONObject temp = JSON.parseObject(JSON.toJSONString(record));
temp.put("time", dateArray);
JSONArray dataArray = new JSONArray();
for (String date : dateTextList) {
JSONObject dateObject = new JSONObject();
dateObject.put("date", date);
dateObject.put("value", dates.containsKey(record.getId()+date + dateArray) ? dates.get(record.getId()+date + dateArray) : 0);
dataArray.add(dateObject);
}
temp.put("dateList", dataArray);
datas.add(temp);
}
}
map.put("body", datas);
return map;
}
@Override
public List selectReservationParameterPage(String deviceId, String reservationTime, String specificTime) {
return reservationMapper.selectReservationParameterPage(Integer.parseInt(deviceId), reservationTime, specificTime);
}
}