BusDeviceController.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package com.coffee.bus.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.hutool.core.collection.CollectionUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.baomidou.mybatisplus.core.mapper.Mapper;
  7. import com.baomidou.mybatisplus.core.metadata.IPage;
  8. import com.coffee.bus.controller.vo.DeviceBindVo;
  9. import com.coffee.bus.entity.BusDeviceEntity;
  10. import com.coffee.bus.enums.DeviceAlarmEnum;
  11. import com.coffee.bus.exception.BusinessException;
  12. import com.coffee.bus.exception.ErrorStatus;
  13. import com.coffee.bus.service.LocalBusDeviceService;
  14. import com.coffee.bus.service.dto.DeviceQuery;
  15. import com.coffee.bus.service.dto.DeviceResult;
  16. import com.coffee.common.crud.BaseService;
  17. import com.coffee.common.crud.controller.BaseCrudController;
  18. import com.coffee.common.exception.CustomException;
  19. import com.coffee.common.result.R;
  20. import io.swagger.annotations.Api;
  21. import io.swagger.annotations.ApiOperation;
  22. import io.swagger.annotations.ApiParam;
  23. import lombok.AllArgsConstructor;
  24. import lombok.extern.slf4j.Slf4j;
  25. import org.springframework.web.bind.annotation.*;
  26. import java.io.Serializable;
  27. import java.util.List;
  28. /**
  29. * @author lifang
  30. * @version 1.0.0
  31. * @ClassName BusHospitalController.java
  32. * @Description
  33. * @createTime 2022年03月19日 09:28:00
  34. * @accendant 龙三郎
  35. */
  36. @Slf4j
  37. @RestController
  38. @AllArgsConstructor
  39. @RequestMapping("/bus/device/info")
  40. @Api(tags = "设备管理",description = "统一权限前缀(device:info),device:info:add")
  41. public class BusDeviceController extends BaseCrudController<BusDeviceEntity, String> {
  42. private final LocalBusDeviceService deviceService;
  43. @PostMapping("/shift/bind")
  44. @ApiOperation(value = "设备换绑",notes = "权限【device:info:shift】")
  45. public R shift(@RequestBody DeviceBindVo vo){
  46. if(StrUtil.isEmpty(vo.getBindTenantId())|| CollectionUtil.isEmpty(vo.getDeviceIds())){
  47. throw new CustomException("选择的医院、设备不能为空");
  48. }
  49. deviceService.shift(vo.getDeviceIds(),vo.getBindTenantId());
  50. return R.success(DeviceAlarmEnum.values());
  51. }
  52. @PostMapping("/query/page")
  53. @SaCheckPermission("device:info:query")
  54. @ApiOperation(value = "设备管理分页查询",notes = "权限【device:info:query】")
  55. public R<IPage<DeviceResult>> pageQuery(@RequestBody DeviceQuery query){
  56. return R.success(deviceService.pageQuery(query.getPage(),query));
  57. }
  58. /**
  59. * 权限控制前缀
  60. * @return
  61. */
  62. @Override
  63. public String getPermissionPrefix() {
  64. return "device:info";
  65. }
  66. @Override
  67. public BaseService<? extends Mapper<BusDeviceEntity>, BusDeviceEntity, String> getService() {
  68. return deviceService;
  69. }
  70. /**
  71. * @author 龙三郎
  72. * 新增设备,只有超级管理员才有此权限,如果该设备在系统中存在,则更新,如果设备在系统中不存在,在阿里云平台存在,则从阿里云获取后插入。
  73. * @param payload
  74. * @return
  75. */
  76. @Override
  77. @PostMapping("/add")
  78. @ApiOperation(value = "新增单个数据,并返回新增后的数据.")
  79. public R<BusDeviceEntity> add(@RequestAttribute("tenantId")@ApiParam(hidden = true) Serializable tenantId,@RequestBody BusDeviceEntity payload) {
  80. log.info("添加设备");
  81. // 设备id不能为空
  82. if (StrUtil.isEmpty(payload.getDeviceId())){
  83. throw new BusinessException(ErrorStatus.DEVICEID_IS_EMPTY);
  84. }
  85. // 根据deviceId从阿里云获取设备信息。
  86. BusDeviceEntity device = deviceService.addDevice(payload.getDeviceId());
  87. if (ObjectUtil.isNull(device)){
  88. return R.fail("设备添加失败");
  89. }
  90. return R.success(device);
  91. }
  92. /**
  93. * @author 龙三郎
  94. * 从阿里云同步系统所有的设备,只有超级管理员才有此权限。将阿里云所有的设备同步到系统。
  95. * @return
  96. */
  97. @ApiOperation(value = "从阿里云同步设备",notes = "从阿里云平台获取设备并更新")
  98. @PutMapping("/sync-device")
  99. public R syncDevice() {
  100. log.info("从阿里云同步设备");
  101. try {
  102. return R.success(deviceService.syncDeviceFromIot()) ;
  103. }catch (Exception e){
  104. log.error("同步设备失败,【{}】",e);
  105. return R.fail("同步失败");
  106. }
  107. }
  108. /**
  109. * @author 龙三郎
  110. * 从阿里云更新系统中存在的设备,如果设备在系统中不存在,则不更新。
  111. * @return
  112. */
  113. @ApiOperation(value = "从阿里云更新本地设备",notes = "从阿里云平台获取设备并更新,参数为设备id列表,格式如['123456','456123'],参数可为空。")
  114. @PutMapping("/sync-device/batch")
  115. public R syncDevice(@RequestBody List<String> ids) {
  116. log.info("从阿里云更新本地设备");
  117. int i = deviceService.syncDevice(ids);
  118. if (i > 0){
  119. return R.success(i,"同步成功");
  120. }else {
  121. return R.fail("同步失败");
  122. }
  123. }
  124. }