package com.template.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.template.api.HouseLockControllerAPI;
import com.template.common.utils.ExcelUtils;
import com.template.model.dto.BingingDto;
import com.template.model.dto.HouseLockListImportDto;
import com.template.model.dto.RemoteUnlocking;
import com.template.model.pojo.*;
import com.template.model.result.CommonResult;
import com.template.model.vo.HouseLockVo;
import com.template.model.vo.UnlockingKeyVo;
import com.template.model.vo.houseLockListVo;
import com.template.services.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 前端控制器
*
*
* @author ceshi
* @since 2023-11-21
*/
@RestController
public class HouseLockController implements HouseLockControllerAPI {
@Autowired
HouseLockService houseLockService;
@Autowired
PermissionSettingService permissionSettingService;
@Autowired
HouseService houseService;
@Autowired
HouseNumberService houseNumberService;
@Autowired
PasswordIssController passwordIssController;
@Autowired
UnlockingService unlockingService;
@Autowired
UnlockingAdminService unlockingAdminService;
@Autowired
UnlockingRecordService unlockingRecordService;
@Autowired
AdminService adminService;
@Autowired
OperatingRecordService operatingRecordService;
@Autowired
UnlockingCustomService unlockingCustomService;
@Autowired
UnlockingEmployeeService unlockingEmployeeService;
@Autowired
BuildingService buildingService;
@Override
public CommonResult list(String permissionSettingId, String roomNumber, String roomName, Integer houseType, Integer buildingId) {
PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
// String houseTypeManagement = permissionSetting.getDoorLockManagement();
// if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("4")) {
// return CommonResult.fail("此账号暂无该权限");
// }
LambdaQueryWrapper hWrapper = new LambdaQueryWrapper<>();
hWrapper.eq(ObjectUtils.isNotEmpty(roomName), House::getRoomName, roomName);
hWrapper.eq(ObjectUtils.isNotEmpty(houseType), House::getRoomType, houseType);
List list = houseService.list(hWrapper);
String houseIds = "";
for (int i = 0; i < list.size(); i++) {
House house = list.get(i);
Integer id = house.getId();
String s = String.valueOf(id);
if (i == 0) {
houseIds = s;
} else {
houseIds = houseIds + "," + s;
}
}
List voList = houseNumberService.houseLockPage(roomNumber, houseIds, buildingId);
ArrayList vos = new ArrayList<>();
for (House house : list) {
HouseLockVo vo = new HouseLockVo();
vo.setId(house.getId());
vo.setName(house.getRoomName());
vo.setRoomType(house.getRoomType());
List ownerClasses = voList.stream().filter(e -> e.getHouseId().equals(house.getId() + "")).collect(Collectors.toList());
if (ownerClasses != null && ownerClasses.size() > 0) {
vo.setVos(ownerClasses);
}
vos.add(vo);
}
return CommonResult.ok(vos);
}
@Override
public CommonResult particular(String permissionSettingId, Integer houseNumberId) {
PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
// String houseTypeManagement = permissionSetting.getDoorLockManagement();
// if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("4")) {
// return CommonResult.fail("此账号暂无该权限");
// }
if (ObjectUtils.isEmpty(houseNumberId)) {
return CommonResult.fail("参数异常");
}
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(HouseLock::getHouseNumberId, houseNumberId);
HouseLock houseLock = houseLockService.getOne(wrapper);
if (ObjectUtils.isEmpty(houseLock)) {
return CommonResult.fail("请先绑定门锁");
}
String equipmentType = houseLock.getEquipmentType();
if (ObjectUtils.isEmpty(equipmentType)) {
return CommonResult.fail("未绑定门锁设备");
}
JSONObject particular = passwordIssController.particular(equipmentType);
// 设备连接状态
String state = particular.getString("state");
// 电量
String battery = particular.getString("battery");
houseLock.setElectricQuantity(battery);
houseLock.setNetworkState(state);
houseLock.setEquipmentState(state);
houseLockService.updateById(houseLock);
return CommonResult.ok(houseLock);
}
@Override
public CommonResult key(String permissionSettingId, String houseNumberId) {
PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
String houseTypeManagement = permissionSetting.getDoorLockManagement();
if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("11")) {
return CommonResult.fail("此账号暂无该权限");
}
if (ObjectUtils.isEmpty(houseNumberId)) {
return CommonResult.fail("参数异常");
}
Date date = new Date();
List unlockingKeyDtos = unlockingService.key(houseNumberId, date);
List unlockingAdmins = unlockingAdminService.key(houseNumberId, date);
List unlockingCustoms = unlockingCustomService.key(houseNumberId, date);
List unlockingEmployees = unlockingEmployeeService.list(
new QueryWrapper()
.eq("house_number_id", houseNumberId)
.gt("end_time", date)
.lt("start_time", date));
HashMap map = new HashMap<>();
map.put("order", unlockingKeyDtos);
map.put("system", unlockingAdmins);
map.put("custom", unlockingCustoms);
map.put("employee", unlockingEmployees);
return CommonResult.ok(map);
}
@Override
public CommonResult remoteUnlocking(RemoteUnlocking remoteUnlockingDto) {
String permissionSettingId = remoteUnlockingDto.getPermissionSettingId();
PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
String houseTypeManagement = permissionSetting.getDoorLockManagement();
if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("13")) {
return CommonResult.fail("此账号暂无该权限");
}
String luid = remoteUnlockingDto.getLuid();
try {
Boolean aBoolean = passwordIssController.remoteUnlocking(luid);
if (!aBoolean) {
return CommonResult.fail("远程开锁失败,远程开锁前,门锁需要先按“4#”进入请求远程开锁模式");
}
UnlockingRecord unlockingRecord = new UnlockingRecord();
unlockingRecord.setRoomNumber(remoteUnlockingDto.getRoomNumber());
unlockingRecord.setHouseNumberId(remoteUnlockingDto.getHouseNumberId());
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
unlockingRecord.setDateTime(LocalDateTime.now().format(dateTimeFormatter1));
unlockingRecord.setUnlockType("远程开锁");
unlockingRecordService.save(unlockingRecord);
return CommonResult.ok();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)//1
public CommonResult unbind(String permissionSettingId, String houseNumberId, String adminId) {
PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
String houseTypeManagement = permissionSetting.getDoorLockManagement();
if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("14")) {
return CommonResult.fail("此账号暂无该权限");
}
if (ObjectUtils.isEmpty(houseNumberId) || ObjectUtils.isEmpty(adminId)) {
return CommonResult.fail("参数异常");
}
HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
if (ObjectUtils.isEmpty(houseNumber)) {
return CommonResult.fail("该房间不存在");
}
Admin admin = adminService.getById(adminId);
if (ObjectUtils.isEmpty(admin)) {
return CommonResult.fail("该管理员不存在");
}
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(HouseLock::getHouseNumberId, houseNumberId);
HouseLock houseLock = houseLockService.getOne(wrapper);
if (ObjectUtils.isEmpty(houseLock)) {
return CommonResult.fail("该门锁不存在");
}
OperatingRecord operatingRecord = new OperatingRecord();
operatingRecord.setType("解绑设备");
operatingRecord.setHouseNumberId(houseNumber.getId());
operatingRecord.setRoomNumber(houseNumber.getRoomNumber());
operatingRecord.setOperatorName(admin.getName());
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
operatingRecord.setDataTime(LocalDateTime.now().format(dateTimeFormatter1));
operatingRecord.setContent("解绑设备:" + houseLock.getEquipmentType());
houseLockService.remove(wrapper);
operatingRecordService.save(operatingRecord);
return CommonResult.ok();
}
@Override
@Transactional(rollbackFor = Exception.class)//1
public CommonResult binding(BingingDto bingingDto) {
String permissionSettingId = bingingDto.getPermissionSettingId();
PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
String houseTypeManagement = permissionSetting.getDoorLockManagement();
if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("14")) {
return CommonResult.fail("此账号暂无该权限");
}
String houseNumberId = bingingDto.getHouseNumberId();
String adminId = bingingDto.getAdminId();
if (ObjectUtils.isEmpty(houseNumberId) || ObjectUtils.isEmpty(adminId) || ObjectUtils.isEmpty(bingingDto.getLuid())) {
return CommonResult.fail("参数异常");
}
HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
if (ObjectUtils.isEmpty(houseNumber)) {
return CommonResult.fail("该房间不存在");
}
Admin admin = adminService.getById(adminId);
if (ObjectUtils.isEmpty(admin)) {
return CommonResult.fail("该管理员不存在");
}
// 判断该房间是否已绑定
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(HouseLock::getHouseNumberId, houseNumberId);
HouseLock houseLockOld = houseLockService.getOne(wrapper);
if (ObjectUtils.isNotEmpty(houseLockOld)) {
return CommonResult.fail("该房间已绑定,请解绑后在绑定");
}
// 绑定设备
HouseLock houseLock = new HouseLock();
// 设备型号
houseLock.setEquipmentType(bingingDto.getLuid());
JSONObject jsonObject = passwordIssController.particular(bingingDto.getLuid());
if (ObjectUtils.isEmpty(jsonObject) || jsonObject.getString("state") == null) {
return CommonResult.fail("门锁不存在");
}
// 电量
String battery = jsonObject.getString("battery");
houseLock.setElectricQuantity(battery);
// 绑定时间
houseLock.setBindingTime(new Date());
String state = jsonObject.getString("state");
// 网络状态
houseLock.setNetworkState(state);
// 设备状态
houseLock.setEquipmentState(state);
// 房 间号
houseLock.setHouseNumberId(Integer.valueOf(houseNumberId));
houseLock.setNetworkType("WiFi");
houseLock.setWifiMac("WIFIMAC");
houseLock.setNfcFunction(0);
// 操作记录
OperatingRecord operatingRecord = new OperatingRecord();
operatingRecord.setType("绑定设备");
operatingRecord.setHouseNumberId(houseNumber.getId());
operatingRecord.setRoomNumber(houseNumber.getRoomNumber());
operatingRecord.setOperatorName(admin.getName());
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
operatingRecord.setDataTime(LocalDateTime.now().format(dateTimeFormatter1));
operatingRecord.setContent("绑定设备:" + bingingDto.getLuid());
houseLockService.save(houseLock);
operatingRecordService.save(operatingRecord);
return CommonResult.ok();
}
@Override
public CommonResult ifBinging(String houseNumberId) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(HouseLock::getHouseNumberId, houseNumberId);
HouseLock houseLock = houseLockService.getOne(wrapper);
Integer status = 0;
if (ObjectUtils.isNotEmpty(houseLock)) {
String equipmentType = houseLock.getEquipmentType();
if (ObjectUtils.isNotEmpty(equipmentType)) {
status = 1;
}
}
HashMap