package com.template.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.template.api.HouseNumberStateAPI;
import com.template.common.utils.DateUtil;
import com.template.common.utils.OrderNumber;
import com.template.component.WeiXiaoComponent;
import com.template.config.DoorLockConfig;
import com.template.model.dto.*;
import com.template.model.pojo.*;
import com.template.model.result.CommonResult;
import com.template.model.result.PageUtils;
import com.template.model.vo.*;
import com.template.services.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.logging.Logger;
import java.util.stream.Collectors;
/**
*
* 前端控制器
*
*
* @author ceshi
* @since 2023-11-20
*/
@RestController
public class HouseNumberStateController implements HouseNumberStateAPI {
@Autowired
HouseNumberStateService houseNumberStateService;
@Autowired
HouseService houseService;
@Autowired
HouseNumberService houseNumberService;
@Autowired
HousePriceService housePriceService;
@Autowired
HouseOrderService houseOrderService;
@Autowired
HouseLockService houseLockService;
@Autowired
HouseOrderBillService houseOrderBillService;
@Autowired
DoorLockConfig doorLockConfig;
@Autowired
PermissionSettingService permissionSettingService;
@Autowired
UnlockingService unlockingService;
@Autowired
PasswordIssController passwordIssController;
@Autowired
private WeiXiaoComponent weiXiaoComponent;
@Autowired
UsersService usersService;
@Autowired
OperatingRecordService operatingRecordService;
@Autowired
AdminService adminService;
@Autowired
WaterEquipmentService waterEquipmentService;
@Autowired
ElectricEquipmentService electricEquipmentService;
@Autowired
ApartmentSettingService apartmentSettingService;
@Override
public CommonResult page(String keyWord, String houseType, Integer houseId, Integer buildingId, Integer status) {
// if (ObjectUtils.isEmpty(page) && page <= 0) {
// page = 1;
// }
//
// if (ObjectUtils.isEmpty(size) && size <= 0) {
// size = 10;
// }
Integer houseNumberStatus = null;
Integer houseStatus = null;
if (ObjectUtils.isNotEmpty(status)) {
if (status == 1) {
houseNumberStatus = 1;
} else if (status == 2) {
houseNumberStatus = 2;
} else if (status == 3) {
houseStatus = 3;
} else if (status == 4) {
houseStatus = 4;
} else if (status == 5) {
houseStatus = 5;
} else if (status == 6) {
houseStatus = 6;
}
}
// 当时时间
// Date date = new Date();
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List list = houseService.list(new LambdaQueryWrapper<>());
LocalDateTime start = LocalDateTime.now();
LocalDateTime end = start.withHour(23).withMinute(59).withSecond(59);
List pageVo1 = null;
if (ObjectUtils.isNotEmpty(houseNumberStatus) && 1 == houseNumberStatus) {
// 有房态的id
List ids3 = houseNumberService.getStateHouseNumber(start, end);
// ArrayList ids3 = new ArrayList<>();
// for (HouseStateVo houseStateVo : pageVo1) {
// int houseNumberId = houseStateVo.getHouseNumberId();
// ids3.add(houseNumberId);
// }
// 全部房间id
List ids = houseNumberService.getHouseNumberIds();
// 脏房房间id
List ids2 = houseNumberService.getHouserNumberStatusIds(2);
// 空闲房间id
ArrayList integers = new ArrayList<>();
for (Integer id : ids) {
if (!ids2.contains(id)) {
if (!ids3.contains(id)) {
integers.add(id);
}
}
}
// 获取当前房型的所有id
String houseNumberIds = "";
for (int i = 0; i < integers.size(); i++) {
Integer id = integers.get(i);
String houseNumber = String.valueOf(id);
if (i == 0) {
houseNumberIds = houseNumberIds + houseNumber;
} else {
houseNumberIds = houseNumberIds + "," + houseNumber;
}
}
pageVo1 = houseNumberService.houseStateLeisurePage(keyWord, houseType, start, end, houseId, buildingId, houseNumberIds);
} else {
pageVo1 = houseNumberService.houseStatePage(keyWord, houseType, start, end, houseId, buildingId, houseStatus, houseNumberStatus);
}
HashMap map = new HashMap<>();
for (HouseStateVo houseStateVo : pageVo1) {
Integer houseNumberId = houseStateVo.getHouseNumberId();
if (map.containsKey(houseNumberId)) {
String reserveLiveTime = "";
if (ObjectUtils.isNotEmpty(houseStateVo.getReserveLiveTime())) {
reserveLiveTime = houseStateVo.getReserveLiveTime();
} else {
reserveLiveTime = houseStateVo.getStartTime();
}
HouseStateVo houseStateVo1 = map.get(houseNumberId);
String reserveLiveTime1 = "";
if (ObjectUtils.isNotEmpty(houseStateVo1.getReserveLiveTime())) {
reserveLiveTime1 = houseStateVo1.getReserveLiveTime();
} else {
reserveLiveTime1 = houseStateVo1.getStartTime();
}
LocalDateTime parse = LocalDateTime.parse(reserveLiveTime, dateTimeFormatter1);
LocalDateTime parse1 = LocalDateTime.parse(reserveLiveTime1, dateTimeFormatter1);
if (parse1.isAfter(parse)) {
map.put(houseNumberId, houseStateVo);
}
} else {
map.put(houseNumberId, houseStateVo);
}
}
List pageVo = new ArrayList<>();
Set integers = map.keySet();
for (Integer integer : integers) {
HouseStateVo houseStateVo = map.get(integer);
pageVo.add(houseStateVo);
}
ArrayList vos = new ArrayList<>();
for (House house : list) {
HouseStateManagementVo vo = new HouseStateManagementVo();
vo.setId(house.getId());
vo.setName(house.getRoomName());
vo.setRoomType(house.getRoomType());
List ownerClasses = pageVo.stream().filter(e -> e.getHouseId().equals(house.getId() + "")).collect(Collectors.toList());
if (ownerClasses != null && ownerClasses.size() > 0) {
vo.setVos(ownerClasses);
long freeCount = ownerClasses.stream().filter(e -> (e.getStatus() != null ? e.getStatus() : e.getHouseStatus() + "").equals("1")).count();
long useCount = ownerClasses.size() - freeCount;
vo.setUseCount(useCount);
vo.setFreeCount(freeCount);
}
vos.add(vo);
}
return CommonResult.ok(vos);
}
@Override
public CommonResult calendarPage(String dateTime, String keyWord, String houseType, int page, int size, Integer houseId, Integer buildingId) {
if (ObjectUtils.isEmpty(page) && page <= 0) {
page = 1;
}
if (ObjectUtils.isEmpty(size) && size <= 0) {
size = 10;
}
// 返回格式
HashMap map = new HashMap<>();
// 获取当时时间
LocalDateTime localDateTime;
// DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
if (ObjectUtils.isEmpty(dateTime)) {
localDateTime = LocalDateTime.now();
} else {
localDateTime = LocalDateTime.parse(dateTime, dateTimeFormatter1);
}
// 需获取21天内的所有改价信息
LocalDateTime endLocalDateTime = localDateTime.plusDays(20);
// 获取所有房间号
List houseNumberList = houseNumberService.list(new LambdaQueryWrapper());
// 获取当前房型的所有id
String houseNumberIds = "";
for (int i = 0; i < houseNumberList.size(); i++) {
String houseNumber = houseNumberList.get(i).getId() + "";
if (i == 0) {
houseNumberIds = houseNumberIds + houseNumber;
} else {
houseNumberIds = houseNumberIds + "," + houseNumber;
}
}
System.out.println("houseNumberIds = " + houseNumberIds);
// 通过房型id获取21天内的所有房态状态
List houseNumberStates = houseNumberStateService.houseNumberStateList(localDateTime, endLocalDateTime, houseNumberIds);
// 房间总数
int totalCount = houseNumberList.size();
// 时间日期
ArrayList list = new ArrayList<>();
for (int i = 0; i < 21; i++) {
LocalDateTime localDate1 = localDateTime.plusDays(i);
String format = localDate1.format(dateTimeFormatter1);
List