HouseLockController.java 18 KB

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