HouseLockController.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  6. import com.template.api.HouseLockControllerAPI;
  7. import com.template.common.utils.ExcelUtils;
  8. import com.template.model.dto.BingingDto;
  9. import com.template.model.dto.HouseLockListImportDto;
  10. import com.template.model.dto.RemoteUnlocking;
  11. import com.template.model.pojo.*;
  12. import com.template.model.result.CommonResult;
  13. import com.template.model.vo.HouseLockVo;
  14. import com.template.model.vo.UnlockingKeyVo;
  15. import com.template.model.vo.houseLockListVo;
  16. import com.template.services.*;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import org.springframework.web.bind.annotation.RestController;
  20. import org.springframework.web.multipart.MultipartFile;
  21. import javax.servlet.http.HttpServletResponse;
  22. import java.time.LocalDateTime;
  23. import java.time.format.DateTimeFormatter;
  24. import java.util.*;
  25. import java.util.stream.Collectors;
  26. /**
  27. * <p>
  28. * 前端控制器
  29. * </p>
  30. *
  31. * @author ceshi
  32. * @since 2023-11-21
  33. */
  34. @RestController
  35. public class HouseLockController implements HouseLockControllerAPI {
  36. @Autowired
  37. HouseLockService houseLockService;
  38. @Autowired
  39. PermissionSettingService permissionSettingService;
  40. @Autowired
  41. HouseService houseService;
  42. @Autowired
  43. HouseNumberService houseNumberService;
  44. @Autowired
  45. PasswordIssController passwordIssController;
  46. @Autowired
  47. UnlockingService unlockingService;
  48. @Autowired
  49. UnlockingAdminService unlockingAdminService;
  50. @Autowired
  51. UnlockingRecordService unlockingRecordService;
  52. @Autowired
  53. AdminService adminService;
  54. @Autowired
  55. OperatingRecordService operatingRecordService;
  56. @Autowired
  57. UnlockingCustomService unlockingCustomService;
  58. @Autowired
  59. UnlockingEmployeeService unlockingEmployeeService;
  60. @Autowired
  61. BuildingService buildingService;
  62. @Override
  63. public CommonResult list(String permissionSettingId, String roomNumber, String roomName, Integer houseType, Integer buildingId) {
  64. PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
  65. if (ObjectUtils.isEmpty(permissionSetting)) {
  66. return CommonResult.fail("非法进入");
  67. }
  68. // 判断该用户是否拥有权限
  69. // String houseTypeManagement = permissionSetting.getDoorLockManagement();
  70. // if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("4")) {
  71. // return CommonResult.fail("此账号暂无该权限");
  72. // }
  73. LambdaQueryWrapper<House> hWrapper = new LambdaQueryWrapper<>();
  74. hWrapper.eq(ObjectUtils.isNotEmpty(roomName), House::getRoomName, roomName);
  75. hWrapper.eq(ObjectUtils.isNotEmpty(houseType), House::getRoomType, houseType);
  76. List<House> list = houseService.list(hWrapper);
  77. String houseIds = "";
  78. for (int i = 0; i < list.size(); i++) {
  79. House house = list.get(i);
  80. Integer id = house.getId();
  81. String s = String.valueOf(id);
  82. if (i == 0) {
  83. houseIds = s;
  84. } else {
  85. houseIds = houseIds + "," + s;
  86. }
  87. }
  88. List<houseLockListVo> voList = houseNumberService.houseLockPage(roomNumber, houseIds, buildingId);
  89. ArrayList<HouseLockVo> vos = new ArrayList<>();
  90. for (House house : list) {
  91. HouseLockVo vo = new HouseLockVo();
  92. vo.setId(house.getId());
  93. vo.setName(house.getRoomName());
  94. vo.setRoomType(house.getRoomType());
  95. List<houseLockListVo> ownerClasses = voList.stream().filter(e -> e.getHouseId().equals(house.getId() + "")).collect(Collectors.toList());
  96. if (ownerClasses != null && ownerClasses.size() > 0) {
  97. vo.setVos(ownerClasses);
  98. }
  99. vos.add(vo);
  100. }
  101. return CommonResult.ok(vos);
  102. }
  103. @Override
  104. public CommonResult particular(String permissionSettingId, Integer houseNumberId) {
  105. PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
  106. if (ObjectUtils.isEmpty(permissionSetting)) {
  107. return CommonResult.fail("非法进入");
  108. }
  109. // 判断该用户是否拥有权限
  110. // String houseTypeManagement = permissionSetting.getDoorLockManagement();
  111. // if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("4")) {
  112. // return CommonResult.fail("此账号暂无该权限");
  113. // }
  114. if (ObjectUtils.isEmpty(houseNumberId)) {
  115. return CommonResult.fail("参数异常");
  116. }
  117. LambdaQueryWrapper<HouseLock> wrapper = new LambdaQueryWrapper<>();
  118. wrapper.eq(HouseLock::getHouseNumberId, houseNumberId);
  119. HouseLock houseLock = houseLockService.getOne(wrapper);
  120. if (ObjectUtils.isEmpty(houseLock)) {
  121. return CommonResult.fail("请先绑定门锁");
  122. }
  123. String equipmentType = houseLock.getEquipmentType();
  124. if (ObjectUtils.isEmpty(equipmentType)) {
  125. return CommonResult.fail("未绑定门锁设备");
  126. }
  127. JSONObject particular = passwordIssController.particular(equipmentType);
  128. // 设备连接状态
  129. String state = particular.getString("state");
  130. // 电量
  131. String battery = particular.getString("battery");
  132. houseLock.setElectricQuantity(battery);
  133. houseLock.setNetworkState(state);
  134. houseLock.setEquipmentState(state);
  135. houseLockService.updateById(houseLock);
  136. return CommonResult.ok(houseLock);
  137. }
  138. @Override
  139. public CommonResult key(String permissionSettingId, String houseNumberId) {
  140. PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
  141. if (ObjectUtils.isEmpty(permissionSetting)) {
  142. return CommonResult.fail("非法进入");
  143. }
  144. // 判断该用户是否拥有权限
  145. String houseTypeManagement = permissionSetting.getDoorLockManagement();
  146. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("11")) {
  147. return CommonResult.fail("此账号暂无该权限");
  148. }
  149. if (ObjectUtils.isEmpty(houseNumberId)) {
  150. return CommonResult.fail("参数异常");
  151. }
  152. Date date = new Date();
  153. List<UnlockingKeyVo> unlockingKeyDtos = unlockingService.key(houseNumberId, date);
  154. List<UnlockingAdmin> unlockingAdmins = unlockingAdminService.key(houseNumberId, date);
  155. List<UnlockingCustom> unlockingCustoms = unlockingCustomService.key(houseNumberId, date);
  156. List<UnlockingEmployee> unlockingEmployees = unlockingEmployeeService.list(
  157. new QueryWrapper<UnlockingEmployee>()
  158. .eq("house_number_id", houseNumberId)
  159. .gt("end_time", date)
  160. .lt("start_time", date));
  161. HashMap<String, Object> map = new HashMap<>();
  162. map.put("order", unlockingKeyDtos);
  163. map.put("system", unlockingAdmins);
  164. map.put("custom", unlockingCustoms);
  165. map.put("employee", unlockingEmployees);
  166. return CommonResult.ok(map);
  167. }
  168. @Override
  169. public CommonResult remoteUnlocking(RemoteUnlocking remoteUnlockingDto) {
  170. String permissionSettingId = remoteUnlockingDto.getPermissionSettingId();
  171. PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
  172. if (ObjectUtils.isEmpty(permissionSetting)) {
  173. return CommonResult.fail("非法进入");
  174. }
  175. // 判断该用户是否拥有权限
  176. String houseTypeManagement = permissionSetting.getDoorLockManagement();
  177. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("13")) {
  178. return CommonResult.fail("此账号暂无该权限");
  179. }
  180. String luid = remoteUnlockingDto.getLuid();
  181. try {
  182. Boolean aBoolean = passwordIssController.remoteUnlocking(luid);
  183. if (!aBoolean) {
  184. return CommonResult.fail("远程开锁失败,远程开锁前,门锁需要先按“4#”进入请求远程开锁模式");
  185. }
  186. UnlockingRecord unlockingRecord = new UnlockingRecord();
  187. unlockingRecord.setRoomNumber(remoteUnlockingDto.getRoomNumber());
  188. unlockingRecord.setHouseNumberId(remoteUnlockingDto.getHouseNumberId());
  189. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  190. unlockingRecord.setDateTime(LocalDateTime.now().format(dateTimeFormatter1));
  191. unlockingRecord.setUnlockType("远程开锁");
  192. unlockingRecordService.save(unlockingRecord);
  193. return CommonResult.ok();
  194. } catch (Exception e) {
  195. e.printStackTrace();
  196. }
  197. return null;
  198. }
  199. @Override
  200. @Transactional(rollbackFor = Exception.class)//1
  201. public CommonResult unbind(String permissionSettingId, String houseNumberId, String adminId) {
  202. PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
  203. if (ObjectUtils.isEmpty(permissionSetting)) {
  204. return CommonResult.fail("非法进入");
  205. }
  206. // 判断该用户是否拥有权限
  207. String houseTypeManagement = permissionSetting.getDoorLockManagement();
  208. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("14")) {
  209. return CommonResult.fail("此账号暂无该权限");
  210. }
  211. if (ObjectUtils.isEmpty(houseNumberId) || ObjectUtils.isEmpty(adminId)) {
  212. return CommonResult.fail("参数异常");
  213. }
  214. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  215. if (ObjectUtils.isEmpty(houseNumber)) {
  216. return CommonResult.fail("该房间不存在");
  217. }
  218. Admin admin = adminService.getById(adminId);
  219. if (ObjectUtils.isEmpty(admin)) {
  220. return CommonResult.fail("该管理员不存在");
  221. }
  222. LambdaQueryWrapper<HouseLock> wrapper = new LambdaQueryWrapper<>();
  223. wrapper.eq(HouseLock::getHouseNumberId, houseNumberId);
  224. HouseLock houseLock = houseLockService.getOne(wrapper);
  225. if (ObjectUtils.isEmpty(houseLock)) {
  226. return CommonResult.fail("该门锁不存在");
  227. }
  228. OperatingRecord operatingRecord = new OperatingRecord();
  229. operatingRecord.setType("解绑设备");
  230. operatingRecord.setHouseNumberId(houseNumber.getId());
  231. operatingRecord.setRoomNumber(houseNumber.getRoomNumber());
  232. operatingRecord.setOperatorName(admin.getName());
  233. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  234. operatingRecord.setDataTime(LocalDateTime.now().format(dateTimeFormatter1));
  235. operatingRecord.setContent("解绑设备:" + houseLock.getEquipmentType());
  236. houseLockService.remove(wrapper);
  237. operatingRecordService.save(operatingRecord);
  238. return CommonResult.ok();
  239. }
  240. @Override
  241. @Transactional(rollbackFor = Exception.class)//1
  242. public CommonResult binding(BingingDto bingingDto) {
  243. String permissionSettingId = bingingDto.getPermissionSettingId();
  244. PermissionSetting permissionSetting = permissionSettingService.getById(permissionSettingId);
  245. if (ObjectUtils.isEmpty(permissionSetting)) {
  246. return CommonResult.fail("非法进入");
  247. }
  248. // 判断该用户是否拥有权限
  249. String houseTypeManagement = permissionSetting.getDoorLockManagement();
  250. if (!"0".equals(houseTypeManagement) && !houseTypeManagement.contains("14")) {
  251. return CommonResult.fail("此账号暂无该权限");
  252. }
  253. String houseNumberId = bingingDto.getHouseNumberId();
  254. String adminId = bingingDto.getAdminId();
  255. if (ObjectUtils.isEmpty(houseNumberId) || ObjectUtils.isEmpty(adminId) || ObjectUtils.isEmpty(bingingDto.getLuid())) {
  256. return CommonResult.fail("参数异常");
  257. }
  258. HouseNumber houseNumber = houseNumberService.getById(houseNumberId);
  259. if (ObjectUtils.isEmpty(houseNumber)) {
  260. return CommonResult.fail("该房间不存在");
  261. }
  262. Admin admin = adminService.getById(adminId);
  263. if (ObjectUtils.isEmpty(admin)) {
  264. return CommonResult.fail("该管理员不存在");
  265. }
  266. // 判断该房间是否已绑定
  267. LambdaQueryWrapper<HouseLock> wrapper = new LambdaQueryWrapper<>();
  268. wrapper.eq(HouseLock::getHouseNumberId, houseNumberId);
  269. HouseLock houseLockOld = houseLockService.getOne(wrapper);
  270. if (ObjectUtils.isNotEmpty(houseLockOld)) {
  271. return CommonResult.fail("该房间已绑定,请解绑后在绑定");
  272. }
  273. // 绑定设备
  274. HouseLock houseLock = new HouseLock();
  275. // 设备型号
  276. houseLock.setEquipmentType(bingingDto.getLuid());
  277. JSONObject jsonObject = passwordIssController.particular(bingingDto.getLuid());
  278. if (ObjectUtils.isEmpty(jsonObject) || jsonObject.getString("state") == null) {
  279. return CommonResult.fail("门锁不存在");
  280. }
  281. // 电量
  282. String battery = jsonObject.getString("battery");
  283. houseLock.setElectricQuantity(battery);
  284. // 绑定时间
  285. houseLock.setBindingTime(new Date());
  286. String state = jsonObject.getString("state");
  287. // 网络状态
  288. houseLock.setNetworkState(state);
  289. // 设备状态
  290. houseLock.setEquipmentState(state);
  291. // 房 间号
  292. houseLock.setHouseNumberId(Integer.valueOf(houseNumberId));
  293. houseLock.setNetworkType("WiFi");
  294. houseLock.setWifiMac("WIFIMAC");
  295. houseLock.setNfcFunction(0);
  296. // 操作记录
  297. OperatingRecord operatingRecord = new OperatingRecord();
  298. operatingRecord.setType("绑定设备");
  299. operatingRecord.setHouseNumberId(houseNumber.getId());
  300. operatingRecord.setRoomNumber(houseNumber.getRoomNumber());
  301. operatingRecord.setOperatorName(admin.getName());
  302. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  303. operatingRecord.setDataTime(LocalDateTime.now().format(dateTimeFormatter1));
  304. operatingRecord.setContent("绑定设备:" + bingingDto.getLuid());
  305. houseLockService.save(houseLock);
  306. operatingRecordService.save(operatingRecord);
  307. return CommonResult.ok();
  308. }
  309. @Override
  310. public CommonResult ifBinging(String houseNumberId) {
  311. LambdaQueryWrapper<HouseLock> wrapper = new LambdaQueryWrapper<>();
  312. wrapper.eq(HouseLock::getHouseNumberId, houseNumberId);
  313. HouseLock houseLock = houseLockService.getOne(wrapper);
  314. Integer status = 0;
  315. if (ObjectUtils.isNotEmpty(houseLock)) {
  316. String equipmentType = houseLock.getEquipmentType();
  317. if (ObjectUtils.isNotEmpty(equipmentType)) {
  318. status = 1;
  319. }
  320. }
  321. HashMap<Object, Object> map = new HashMap<>();
  322. map.put("binging", status);
  323. return CommonResult.ok(map);
  324. }
  325. @Override
  326. public void lockExport(HttpServletResponse response) {
  327. // 表头数据
  328. List<Object> head = Arrays.asList("楼栋", "单元", "房型类型", "房型名称", "房间号", "门锁设备型号");
  329. // 用户1数据
  330. List<Object> user1 = new ArrayList<>();
  331. user1.add("17栋");
  332. user1.add("1单元");
  333. user1.add("全日房");
  334. user1.add("标准房");
  335. user1.add("19-101");
  336. user1.add("047863CA78E0");
  337. List<Object> user2 = new ArrayList<>();
  338. user2.add("17栋");
  339. user2.add("2单元");
  340. user2.add("钟点房");
  341. user2.add("标准房");
  342. user2.add("19-201");
  343. user2.add("047863CA78E0");
  344. // 将数据汇总
  345. List<List<Object>> sheetDataList = new ArrayList<>();
  346. sheetDataList.add(head);
  347. sheetDataList.add(user1);
  348. sheetDataList.add(user2);
  349. // 导出数据
  350. ExcelUtils.export(response, "门锁绑定示例表", sheetDataList);
  351. // return CommonResult.ok();
  352. }
  353. @Override
  354. public CommonResult lockImport(MultipartFile file) throws Exception {
  355. List<HouseLockListImportDto> dtos = ExcelUtils.readMultipartFile(file, HouseLockListImportDto.class);
  356. ArrayList<HouseLock> houseLocks = new ArrayList<>();
  357. for (int i = 0; i < dtos.size(); i++) {
  358. HouseLockListImportDto houseLockListImportDto = dtos.get(i);
  359. // 判断是否存在该楼栋单元
  360. String building = houseLockListImportDto.getBuilding();
  361. String element = houseLockListImportDto.getElement();
  362. LambdaQueryWrapper<Building> wrapperB = new LambdaQueryWrapper<>();
  363. wrapperB.eq(Building::getBuilding, building)
  364. .eq(Building::getElement, element);
  365. Building one = buildingService.getOne(wrapperB);
  366. if (ObjectUtils.isEmpty(one)) {
  367. return CommonResult.fail("第" + (i + 2) + "行," + "不存在" + building + "/" + element + "该楼栋单元");
  368. }
  369. Integer roomType = houseLockListImportDto.getRoomType();
  370. // 房间号
  371. String roomNumber = houseLockListImportDto.getRoomNumber();
  372. // 房型
  373. String houseName = houseLockListImportDto.getHouseName();
  374. // 设备号
  375. String equipmentType = houseLockListImportDto.getEquipmentType();
  376. // 判断当前房型是否存在当前房间号
  377. House house = houseService.getHouseName(houseName, roomType);
  378. if (ObjectUtils.isEmpty(house)) {
  379. return CommonResult.fail("第" + (i + 2) + "行," + "不存在" + houseName + "该房型");
  380. }
  381. Integer houseId = house.getId();
  382. HouseNumber houseNumber = houseNumberService.getRoomNumber(houseId, roomNumber);
  383. if (ObjectUtils.isEmpty(houseNumber)) {
  384. return CommonResult.fail("第" + (i + 2) + "行," + "不存在" + roomNumber + "该房间号");
  385. }
  386. Integer houseNumberId = houseNumber.getId();
  387. LambdaQueryWrapper<HouseLock> wrapper = new LambdaQueryWrapper<>();
  388. wrapper.eq(HouseLock::getHouseNumberId, houseNumberId);
  389. HouseLock houseLock = houseLockService.getOne(wrapper);
  390. if (ObjectUtils.isNotEmpty(houseLock)) {
  391. houseLock.setEquipmentType(equipmentType);
  392. houseLocks.add(houseLock);
  393. } else {
  394. HouseLock houseLock1 = new HouseLock();
  395. houseLock1.setHouseNumberId(houseNumberId);
  396. houseLock1.setEquipmentType(equipmentType);
  397. houseLock1.setNetworkType("WIFI");
  398. houseLock1.setWifiMac("WIFIMAC");
  399. houseLock1.setBindingTime(new Date());
  400. houseLock1.setElectricQuantity("0");
  401. houseLock1.setNetworkState("1");
  402. houseLock1.setEquipmentState("1");
  403. houseLock.setNfcFunction(0);
  404. houseLocks.add(houseLock1);
  405. }
  406. }
  407. boolean b = houseLockService.saveOrUpdateBatch(houseLocks);
  408. if (b) {
  409. return CommonResult.ok();
  410. }
  411. return CommonResult.fail();
  412. }
  413. @Override
  414. public CommonResult nfc(Integer houseLockId, Integer nfcFunction) {
  415. HouseLock houseLock = houseLockService.getById(houseLockId);
  416. if (ObjectUtils.isEmpty(houseLock)) {
  417. return CommonResult.fail("无该门锁");
  418. }
  419. String equipmentType = houseLock.getEquipmentType();
  420. if (ObjectUtils.isEmpty(equipmentType)) {
  421. return CommonResult.fail("未绑定门锁");
  422. }
  423. passwordIssController.nfcFunction(nfcFunction, equipmentType);
  424. houseLock.setNfcFunction(nfcFunction);
  425. houseLockService.updateById(houseLock);
  426. return CommonResult.ok();
  427. }
  428. @Override
  429. public CommonResult deleteLock(String id, String luid) {
  430. passwordIssController.deleteLockUser(luid, id);
  431. return CommonResult.ok();
  432. }
  433. }