package com.template.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.template.annotation.Encrypt;
import com.template.api.HouseAPI;
import com.template.common.utils.DateUtil;
import com.template.model.dto.HouseDto;
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.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
/**
*
* 前端控制器
*
*
* @author ceshi
* @since 2023-11-06
*/
@RestController
//加密
//@DESRespondSecret
public class HouseController implements HouseAPI {
@Autowired
HouseService houseService;
@Autowired
HouseNumberService houseNumberService;
@Autowired
HouseNumberStateService houseNumberStateService;
@Autowired
PermissionSettingService permissionSettingService;
@Autowired
HousePriceService housePriceService;
@Autowired
FacilityServicesService facilityServicesService;
@Override
@Encrypt
@Transactional(rollbackFor = Exception.class)//1
public CommonResult save(@RequestBody HouseDto houseDto) {
if (ObjectUtils.isEmpty(houseDto) && ObjectUtils.isEmpty(houseDto.getAdminId())) {
return CommonResult.fail("参数异常");
}
PermissionSetting permissionSetting = permissionSettingService.getById(houseDto.getAdminId());
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
String houseTypeManagement = permissionSetting.getHouseTypeManagement();
if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("1")) {
return CommonResult.fail("此账号暂无该权限");
}
House house = houseDto.getHouse();
// List roomNumbers = houseDto.getRoomNumbers();
//
// Integer number = house.getNumber();
//
// if (number != roomNumbers.size()) {
// return CommonResult.fail("房间数量不一致");
// }
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(House::getRoomName, house.getRoomName())
.eq(House::getRoomType, house.getRoomType());
House one = houseService.getOne(wrapper);
if (ObjectUtils.isNotEmpty(one)) {
return CommonResult.fail("该房型已存在");
}
houseService.save(house);
// ArrayList houseNumbers = new ArrayList<>();
// for (String roomNumber : roomNumbers) {
//// 修改房间
// HouseNumber byId = houseNumberService.getById(roomNumber);
// byId.setHouseId(house.getId()+"");
// houseNumbers.add(byId);
// }
// boolean b = houseNumberService.updateBatchById(houseNumbers);
//
// if (b) {
// return CommonResult.ok();
// }
return CommonResult.ok();
}
@Override
public CommonResult getPage(int page, int size, int type, String keyWord) {
if (ObjectUtils.isEmpty(page) && page <= 0) {
page = 1;
}
if (ObjectUtils.isEmpty(size) && size <= 0) {
size = 10;
}
// if (!(type == 1 || type == 2)) {
// return CommonResult.fail("参数异常");
// }
PageUtils pageDto = houseService.getPage(page, size, type, keyWord);
List list = pageDto.getList();
System.out.println("list = " + list);
return CommonResult.ok(pageDto);
}
@Override
public CommonResult details(String houseId) {
if (ObjectUtils.isEmpty(houseId)) {
return CommonResult.fail("参数异常");
}
HousedetailsVo housedetailsVo = houseService.details(houseId);
if (ObjectUtils.isNotEmpty(housedetailsVo)) {
String roomIds = housedetailsVo.getRoomIds();
if (ObjectUtils.isNotEmpty(roomIds)) {
String[] split = roomIds.split(",");
ArrayList vos = new ArrayList<>();
for (int i = 0; i < split.length; i++) {
String s = split[i];
HouseNumber byId = houseNumberService.getById(s);
BuildingHouseNumberVo vo = new BuildingHouseNumberVo();
vo.setHouseNumberId(byId.getId());
// 跟下拉列表的楼栋单元id一样
vo.setBuildingId(byId.getBuildingId() + 1000000);
vos.add(vo);
}
housedetailsVo.setList(vos);
}
}
return CommonResult.ok(housedetailsVo);
}
@Override
@Transactional(rollbackFor = Exception.class)//1
public CommonResult update(HouseDto houseDto) {
if (ObjectUtils.isEmpty(houseDto) && ObjectUtils.isEmpty(houseDto.getHouse().getId()) && ObjectUtils.isEmpty(houseDto.getAdminId())) {
return CommonResult.fail("参数异常");
}
PermissionSetting permissionSetting = permissionSettingService.getById(houseDto.getAdminId());
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
String houseTypeManagement = permissionSetting.getHouseTypeManagement();
if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("2")) {
return CommonResult.fail("此账号暂无该权限");
}
House house = houseDto.getHouse();
// List roomNumbers = houseDto.getRoomNumbers();
//
// Integer number = house.getNumber();
//
// if (number != roomNumbers.size()) {
// return CommonResult.fail("房间数量不一致");
// }
// 判断修改的房型名称和房型类型是是否已存在
House byId = houseService.getById(house.getId());
String roomName = byId.getRoomName();
Integer type = byId.getRoomType();
if (!house.getRoomName().equals(roomName) || !type.equals(house.getRoomType())) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(House::getRoomName, house.getRoomName())
.eq(House::getRoomType, house.getRoomType());
House one = houseService.getOne(wrapper);
if (ObjectUtils.isNotEmpty(one)) {
return CommonResult.fail("该房型已存在");
}
}
houseService.updateById(house);
return CommonResult.ok();
// try {
// // 通过houseId,找到房间号
//// LambdaQueryWrapper wrapperHn = new LambdaQueryWrapper<>();
//// wrapperHn.eq(HouseNumber::getHouseId, house.getId());
//// List list = houseNumberService.list(wrapperHn);
//// for (HouseNumber houseNumber : list) {
////// 判断房间号是否还存在
//// String roomNumber = houseNumber.getRoomNumber();
////// 不存在则删除
//// if (!roomNumbers.contains(roomNumber)) {
////// 判断房间是否有订单,有则不能删除
//// LambdaQueryWrapper wrapperHNS = new LambdaQueryWrapper<>();
//// wrapperHNS.eq(HouseNumberState::getHouseNumberId, houseNumber.getId())
//// .ge(HouseNumberState::getEndTime, new Date());
//// List houseNumberStates = houseNumberStateService.list(wrapperHNS);
//// if (ObjectUtils.isNotEmpty(houseNumberStates) && houseNumberStates.size() > 0) {
//// return CommonResult.fail(roomNumber + "房间在使用");
//// }
//// houseNumberService.removeById(houseNumber);
////
//// } else {
////// 存在则在集合删除这个
//// roomNumbers.remove(roomNumber);
//// }
//// }
////
//// houseService.updateById(house);
//// if (ObjectUtils.isNotEmpty(roomNumbers) && roomNumbers.size() > 0) {
//// ArrayList houseNumbers = new ArrayList<>();
//// for (String roomNumber : roomNumbers) {
////// 添加
//// HouseNumber houseNumber = new HouseNumber();
//// houseNumber.setRoomNumber(roomNumber);
//// houseNumber.setHouseId(house.getId() + "");
////// 默认净房
//// houseNumber.setHouseStatus(1);
//////// 默认空闲
////// houseNumber.setStatus(1);
////// 默认关电
//// houseNumber.setElectricType("2");
////
//// houseNumbers.add(houseNumber);
//// }
//// boolean b = houseNumberService.saveOrUpdateBatch(houseNumbers);
//// }
// return CommonResult.ok();
//
// } catch (Exception e) {
// return CommonResult.fail();
// }
}
@Override
@Transactional(rollbackFor = Exception.class)//1
public CommonResult delete(String houseId, int adminId) {
if (ObjectUtils.isEmpty(houseId) && ObjectUtils.isEmpty(adminId)) {
return CommonResult.fail();
}
PermissionSetting permissionSetting = permissionSettingService.getById(adminId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
String houseTypeManagement = permissionSetting.getHouseTypeManagement();
if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("3")) {
return CommonResult.fail("此账号暂无该权限");
}
// 删除房型需先删除房间号
// 通过houseId,找到房间号
// LambdaQueryWrapper wrapperHn = new LambdaQueryWrapper<>();
// wrapperHn.eq(HouseNumber::getHouseId, houseId);
// List list = houseNumberService.list(wrapperHn);
// for (HouseNumber houseNumber : list) {
//// 判断房间是否有订单,有则不能删除
// LambdaQueryWrapper wrapperHNS = new LambdaQueryWrapper<>();
// wrapperHNS.eq(HouseNumberState::getHouseNumberId, houseNumber.getId())
// .ge(HouseNumberState::getEndTime, new Date());
// List houseNumberStates = houseNumberStateService.list(wrapperHNS);
// if (ObjectUtils.isNotEmpty(houseNumberStates) && houseNumberStates.size() > 0) {
// return CommonResult.fail(houseNumber.getRoomNumber() + "房间在使用,无法删除");
// }
// }
// for (HouseNumber houseNumber : list) {
// Integer id = houseNumber.getId();
// houseNumberService.removeById(id);
// }
House byId = houseService.getById(houseId);
if (ObjectUtils.isEmpty(byId)) {
return CommonResult.fail("参数异常");
}
List houseNumberList = houseNumberService.getHouseId(houseId);
if (ObjectUtils.isNotEmpty(houseNumberList) || houseNumberList.size() > 0) {
return CommonResult.fail("该房型下还有房间");
}
houseService.removeById(Integer.valueOf(houseId));
return CommonResult.ok();
}
@Override
public CommonResult roomNameType() {
List roomNameList = houseService.group();
return CommonResult.ok(roomNameList);
}
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime start = now.withHour(0).withMinute(0).withSecond(0);
LocalDateTime end = now.withHour(23).withMinute(59).withSecond(59);
System.out.println("start = " + start);
System.out.println("end = " + end);
}
@Override
public CommonResult getAppletPage(int page, int size, int type, String startTime, String endTime) {
if (ObjectUtils.isEmpty(page) && page <= 0) {
page = 1;
}
if (ObjectUtils.isEmpty(size) && size <= 0) {
size = 10;
}
if (ObjectUtils.isEmpty(startTime) && ObjectUtils.isEmpty(endTime)) {
return CommonResult.fail("参数异常");
}
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 判断传过来的时间和当前时间比较
LocalDateTime now = LocalDateTime.now();
LocalDateTime date = LocalDateTime.parse(startTime, dateTimeFormatter1);
if (now.isAfter(date)) {
startTime = now.format(dateTimeFormatter1);
}
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(House::getRoomType, type);
// 上架
wrapper.eq(House::getIsAdded, 1);
IPage page1 = houseService.page(new Page<>(page, size), wrapper);
List records = page1.getRecords();
String houseIds = "";
for (int i = 0; i < records.size(); i++) {
String id = String.valueOf(records.get(i).getId());
if (i == 0) {
houseIds = houseIds + id;
} else {
houseIds = houseIds + "," + id;
}
}
// 获取今天的所有的改价记录
// LocalDateTime now = LocalDateTime.now();
LocalDateTime now2 = LocalDateTime.parse(startTime, dateTimeFormatter1);
LocalDateTime start = now2.withHour(0).withMinute(0).withSecond(0);
LocalDateTime end = now2.withHour(23).withMinute(59).withSecond(59);
List housePrices = housePriceService.housePrice(start, end, houseIds);
ArrayList houseAppletPageVos = new ArrayList<>();
for (House record : records) {
HouseAppletPageVo houseAppletPageVo = new HouseAppletPageVo();
BeanUtils.copyProperties(record, houseAppletPageVo);
// 获取设置图片
String roomConfiguration = record.getRoomConfiguration();
String[] split1 = roomConfiguration.split(",");
ArrayList strings = new ArrayList<>();
for (int i = 0; i < split1.length; i++) {
String name = split1[i];
LambdaQueryWrapper wrapperRC = new LambdaQueryWrapper<>();
wrapperRC.eq(FacilityServices::getHouseService, name);
FacilityServices one = facilityServicesService.getOne(wrapperRC);
if (ObjectUtils.isNotEmpty(one)) {
strings.add(one);
}
}
houseAppletPageVo.setRoomConfigurationPicture(strings);
String id = String.valueOf(record.getId());
// 判断这个时间内是否有
for (HousePrice housePrice : housePrices) {
if (housePrice.getHouseId().equals(id)) {
String setDate = housePrice.getSetDate();
String[] split = setDate.split(",");
Date startDate = DateUtil.parseDateOnly(split[0]);
Date endDate = DateUtil.parseDateOnly(split[1]);
// 判断当前时间是否在[startTime, endTime]区间
assert startDate != null;
boolean effectiveDate = DateUtil.isEffectiveDate(new Date(), startDate, endDate);
if (effectiveDate) {
BigDecimal price = housePrice.getPrice();
houseAppletPageVo.setRoomPrice(price);
}
}
}
// 判断该房型是否还有房间
LambdaQueryWrapper wrapperHN = new LambdaQueryWrapper<>();
wrapperHN.eq(HouseNumber::getHouseId, id);
List houseNumberList = houseNumberService.list(wrapperHN);
// 获取当前房型的所有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;
}
}
// LocalDateTime localDateTime = LocalDateTime.parse(startTime, dateTimeFormatter1);
// LocalDateTime endLocalDateTime = LocalDateTime.parse(endTime, dateTimeFormatter1);
List houseNumberStates = houseNumberStateService.getHouseNumber(startTime, endTime, houseNumberIds);
LambdaQueryWrapper wrapperHN2 = new LambdaQueryWrapper<>();
wrapperHN2.eq(HouseNumber::getHouseId, id);
wrapperHN2.eq(HouseNumber::getHouseStatus, 2);
List list = houseNumberService.list(wrapperHN2);
// 将房态和脏房合一起
HashSet houseNumberIdList = new HashSet<>(houseNumberStates);
for (HouseNumber houseNumber : list) {
Integer houseNumberId = houseNumber.getId();
houseNumberIdList.add(houseNumberId+"");
}
if (houseNumberList.size() - houseNumberIdList.size() > 0) {
houseAppletPageVo.setHouseStatus("1");
// houseAppletPageVo.setSurplusCount(houseNumberList.size() - houseNumberStates.size() - list.size());
houseAppletPageVo.setSurplusCount(houseNumberList.size() - houseNumberIdList.size());
} else {
houseAppletPageVo.setHouseStatus("2");
houseAppletPageVo.setSurplusCount(0);
}
houseAppletPageVos.add(houseAppletPageVo);
}
IPage houseAppletPageVoPage = new Page<>();
BeanUtils.copyProperties(page1, houseAppletPageVoPage);
houseAppletPageVoPage.setRecords(houseAppletPageVos);
return CommonResult.ok(houseAppletPageVoPage);
}
@Override
public CommonResult getappletParticulars(Integer houseId) {
if (ObjectUtils.isEmpty(houseId)) {
return CommonResult.fail("参数异常");
}
House house = houseService.getById(houseId);
if (ObjectUtils.isEmpty(house)) {
return CommonResult.fail("参数异常");
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("housePicture", house.getHousePicture());
jsonObject.put("introductory", house.getIntroductory());
return CommonResult.ok(jsonObject);
}
@Override
public CommonResult displayBar(Integer type) {
List list = houseService.displayBar(type);
return CommonResult.ok(list);
}
}