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