| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534 |
- 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;
- /**
- * <p>
- * 前端控制器
- * </p>
- *
- * @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<House> hWrapper = new LambdaQueryWrapper<>();
- hWrapper.eq(ObjectUtils.isNotEmpty(roomName), House::getRoomName, roomName);
- hWrapper.eq(ObjectUtils.isNotEmpty(houseType), House::getRoomType, houseType);
- List<House> 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<houseLockListVo> voList = houseNumberService.houseLockPage(roomNumber, houseIds, buildingId);
- ArrayList<HouseLockVo> vos = new ArrayList<>();
- for (House house : list) {
- HouseLockVo vo = new HouseLockVo();
- vo.setId(house.getId());
- vo.setName(house.getRoomName());
- vo.setRoomType(house.getRoomType());
- List<houseLockListVo> 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<HouseLock> 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<UnlockingKeyVo> unlockingKeyDtos = unlockingService.key(houseNumberId, date);
- List<UnlockingAdmin> unlockingAdmins = unlockingAdminService.key(houseNumberId, date);
- List<UnlockingCustom> unlockingCustoms = unlockingCustomService.key(houseNumberId, date);
- List<UnlockingEmployee> unlockingEmployees = unlockingEmployeeService.list(
- new QueryWrapper<UnlockingEmployee>()
- .eq("house_number_id", houseNumberId)
- .gt("end_time", date)
- .lt("start_time", date));
- HashMap<String, Object> 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<HouseLock> 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<HouseLock> 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<HouseLock> 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<Object, Object> map = new HashMap<>();
- map.put("binging", status);
- return CommonResult.ok(map);
- }
- @Override
- public void lockExport(HttpServletResponse response) {
- // 表头数据
- List<Object> head = Arrays.asList("楼栋", "单元", "房型类型", "房型名称", "房间号", "门锁设备型号");
- // 用户1数据
- List<Object> user1 = new ArrayList<>();
- user1.add("17栋");
- user1.add("1单元");
- user1.add("全日房");
- user1.add("标准房");
- user1.add("19-101");
- user1.add("047863CA78E0");
- List<Object> user2 = new ArrayList<>();
- user2.add("17栋");
- user2.add("2单元");
- user2.add("钟点房");
- user2.add("标准房");
- user2.add("19-201");
- user2.add("047863CA78E0");
- // 将数据汇总
- List<List<Object>> 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<HouseLockListImportDto> dtos = ExcelUtils.readMultipartFile(file, HouseLockListImportDto.class);
- ArrayList<HouseLock> 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<Building> 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<HouseLock> 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();
- }
- }
|