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 map = new HashMap<>(); map.put("binging", status); return CommonResult.ok(map); } @Override public void lockExport(HttpServletResponse response) { // 表头数据 List head = Arrays.asList("楼栋", "单元", "房型类型", "房型名称", "房间号", "门锁设备型号"); // 用户1数据 List user1 = new ArrayList<>(); user1.add("17栋"); user1.add("1单元"); user1.add("全日房"); user1.add("标准房"); user1.add("19-101"); user1.add("047863CA78E0"); List user2 = new ArrayList<>(); user2.add("17栋"); user2.add("2单元"); user2.add("钟点房"); user2.add("标准房"); user2.add("19-201"); user2.add("047863CA78E0"); // 将数据汇总 List> sheetDataList = new ArrayList<>(); sheetDataList.add(head); sheetDataList.add(user1); sheetDataList.add(user2); // 导出数据 ExcelUtils.export(response, "门锁绑定示例表", sheetDataList); // return CommonResult.ok(); } @Override public CommonResult lockImport(MultipartFile file) throws Exception { List dtos = ExcelUtils.readMultipartFile(file, HouseLockListImportDto.class); ArrayList houseLocks = new ArrayList<>(); for (int i = 0; i < dtos.size(); i++) { HouseLockListImportDto houseLockListImportDto = dtos.get(i); // 判断是否存在该楼栋单元 String building = houseLockListImportDto.getBuilding(); String element = houseLockListImportDto.getElement(); LambdaQueryWrapper wrapperB = new LambdaQueryWrapper<>(); wrapperB.eq(Building::getBuilding, building) .eq(Building::getElement, element); Building one = buildingService.getOne(wrapperB); if (ObjectUtils.isEmpty(one)) { return CommonResult.fail("第" + (i + 2) + "行," + "不存在" + building + "/" + element + "该楼栋单元"); } Integer roomType = houseLockListImportDto.getRoomType(); // 房间号 String roomNumber = houseLockListImportDto.getRoomNumber(); // 房型 String houseName = houseLockListImportDto.getHouseName(); // 设备号 String equipmentType = houseLockListImportDto.getEquipmentType(); // 判断当前房型是否存在当前房间号 House house = houseService.getHouseName(houseName, roomType); if (ObjectUtils.isEmpty(house)) { return CommonResult.fail("第" + (i + 2) + "行," + "不存在" + houseName + "该房型"); } Integer houseId = house.getId(); HouseNumber houseNumber = houseNumberService.getRoomNumber(houseId, roomNumber); if (ObjectUtils.isEmpty(houseNumber)) { return CommonResult.fail("第" + (i + 2) + "行," + "不存在" + roomNumber + "该房间号"); } Integer houseNumberId = houseNumber.getId(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(HouseLock::getHouseNumberId, houseNumberId); HouseLock houseLock = houseLockService.getOne(wrapper); if (ObjectUtils.isNotEmpty(houseLock)) { houseLock.setEquipmentType(equipmentType); houseLocks.add(houseLock); } else { HouseLock houseLock1 = new HouseLock(); houseLock1.setHouseNumberId(houseNumberId); houseLock1.setEquipmentType(equipmentType); houseLock1.setNetworkType("WIFI"); houseLock1.setWifiMac("WIFIMAC"); houseLock1.setBindingTime(new Date()); houseLock1.setElectricQuantity("0"); houseLock1.setNetworkState("1"); houseLock1.setEquipmentState("1"); houseLock.setNfcFunction(0); houseLocks.add(houseLock1); } } boolean b = houseLockService.saveOrUpdateBatch(houseLocks); if (b) { return CommonResult.ok(); } return CommonResult.fail(); } @Override public CommonResult nfc(Integer houseLockId, Integer nfcFunction) { HouseLock houseLock = houseLockService.getById(houseLockId); if (ObjectUtils.isEmpty(houseLock)) { return CommonResult.fail("无该门锁"); } String equipmentType = houseLock.getEquipmentType(); if (ObjectUtils.isEmpty(equipmentType)) { return CommonResult.fail("未绑定门锁"); } passwordIssController.nfcFunction(nfcFunction, equipmentType); houseLock.setNfcFunction(nfcFunction); houseLockService.updateById(houseLock); return CommonResult.ok(); } @Override public CommonResult deleteLock(String id, String luid) { passwordIssController.deleteLockUser(luid, id); return CommonResult.ok(); } }