BusDeviceController.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package com.nb.bus.controller;
  2. import cn.dev33.satoken.SaManager;
  3. import cn.dev33.satoken.annotation.SaCheckPermission;
  4. import cn.dev33.satoken.stp.StpLogic;
  5. import cn.hutool.core.collection.CollectionUtil;
  6. import cn.hutool.core.text.CharSequenceUtil;
  7. import cn.hutool.core.util.ObjectUtil;
  8. import cn.hutool.core.util.StrUtil;
  9. import com.baomidou.mybatisplus.core.mapper.Mapper;
  10. import com.baomidou.mybatisplus.core.metadata.IPage;
  11. import com.nb.bus.controller.vo.DeviceBindVo;
  12. import com.nb.bus.entity.BusDeviceEntity;
  13. import com.nb.bus.enums.DeviceAlarmEnum;
  14. import com.nb.bus.service.LocalBusDeviceService;
  15. import com.nb.bus.service.dto.DeviceQuery;
  16. import com.nb.bus.service.dto.DeviceResult;
  17. import com.nb.common.annotation.Log;
  18. import com.nb.common.crud.BaseService;
  19. import com.nb.common.crud.controller.BaseSaveController;
  20. import com.nb.common.exception.CustomException;
  21. import com.nb.common.result.R;
  22. import io.swagger.annotations.*;
  23. import lombok.AllArgsConstructor;
  24. import lombok.extern.slf4j.Slf4j;
  25. import org.springframework.web.bind.annotation.*;
  26. import java.util.List;
  27. /**
  28. * @author lifang
  29. * @version 1.0.0
  30. * @ClassName BusHospitalController.java
  31. * @Description
  32. * @createTime 2022年03月19日 09:28:00
  33. * @accendant 龙三郎
  34. */
  35. @Slf4j
  36. @RestController
  37. @AllArgsConstructor
  38. @RequestMapping("/bus/device/info")
  39. @Api(tags = "设备管理",description = "统一权限前缀(device:info),device:info:add")
  40. public class BusDeviceController implements
  41. BaseSaveController<BusDeviceEntity, String> {
  42. private final LocalBusDeviceService deviceService;
  43. @Log(title = "设备换绑")
  44. @PostMapping("/shift/bind")
  45. @SaCheckPermission("device:info:shift")
  46. @ApiOperation(value = "设备换绑",notes = "权限【device:info:shift】")
  47. public R shift(@RequestBody DeviceBindVo vo){
  48. if(StrUtil.isEmpty(vo.getBindTenantId())|| CollectionUtil.isEmpty(vo.getDeviceIds())){
  49. throw new CustomException("选择的医院、设备不能为空");
  50. }
  51. deviceService.shift(vo.getDeviceIds(),vo.getBindTenantId());
  52. return R.success(DeviceAlarmEnum.values());
  53. }
  54. @PostMapping("/query/page")
  55. @SaCheckPermission("device:info:query")
  56. @ApiOperation(value = "设备管理分页查询",notes = "权限【device:info:query】")
  57. public R<IPage<DeviceResult>> pageQuery(@RequestBody DeviceQuery query){
  58. return R.success(deviceService.pageQuery(query.getPage(),query));
  59. }
  60. @GetMapping("/view")
  61. @ApiOperation(value = "根据ID查询")
  62. @ApiImplicitParams({
  63. @ApiImplicitParam(name = "id",value = "主键id",required = true)
  64. })
  65. public R<DeviceResult> getById(@RequestParam("id") String id) {
  66. queryAuth();
  67. String key=String.valueOf(id);
  68. if(CharSequenceUtil.isNullOrUndefined(key)){
  69. return R.fail("查询结果不存在");
  70. }
  71. return R.success(deviceService.view(key));
  72. }
  73. /**
  74. * 权限控制前缀
  75. * @return
  76. */
  77. @Override
  78. public String getPermissionPrefix() {
  79. return "device:info";
  80. }
  81. @Override
  82. public StpLogic getStpLogin() {
  83. return SaManager.getStpLogic("");
  84. }
  85. @Override
  86. public BaseService<? extends Mapper<BusDeviceEntity>, BusDeviceEntity, String> getService() {
  87. return deviceService;
  88. }
  89. /**
  90. * @author 龙三郎
  91. * 新增设备,只有超级管理员才有此权限,如果该设备在系统中存在,则更新,如果设备在系统中不存在,在阿里云平台存在,则从阿里云获取后插入。
  92. * @param payload
  93. * @return
  94. */
  95. @Override
  96. @SaCheckPermission("device:info:add")
  97. @PostMapping("/add")
  98. @ApiOperation(value = "新增单个数据,并返回新增后的数据. 权限【device:info:add】")
  99. public R<BusDeviceEntity> add(@RequestBody BusDeviceEntity payload) {
  100. log.info("添加设备");
  101. // 设备id不能为空
  102. if (StrUtil.isEmpty(payload.getDeviceId())){
  103. throw new CustomException("设备ID不能为空");
  104. }
  105. // 根据deviceId从阿里云获取设备信息。
  106. BusDeviceEntity device = deviceService.addDevice(payload.getDeviceId());
  107. if (ObjectUtil.isNull(device)){
  108. return R.fail("设备添加失败");
  109. }
  110. return R.success(device);
  111. }
  112. /**
  113. * @author 龙三郎
  114. * 从阿里云同步系统所有的设备,只有超级管理员才有此权限。将阿里云所有的设备同步到系统。
  115. * @return
  116. */
  117. @Log(title = "从阿里云同步设备")
  118. @ApiOperation(value = "从阿里云同步设备",notes = "从阿里云平台获取设备并更新,权限【device:info:poll】")
  119. @SaCheckPermission("device:info:poll")
  120. @PutMapping("/sync-device")
  121. public R<Boolean> syncDevice() {
  122. log.info("从阿里云同步设备");
  123. try {
  124. deviceService.syncDeviceFromIot();
  125. }catch (Exception e){
  126. log.error("同步设备失败,【{}】",e);
  127. return R.success(false);
  128. }
  129. return R.success(true);
  130. }
  131. // /**
  132. // * @author 龙三郎
  133. // * 从阿里云同步系统所有的设备,只有超级管理员才有此权限。将阿里云所有的设备同步到系统。
  134. // * @return
  135. // */
  136. // @ApiOperation(value = "从阿里云同步设备1",notes = "从阿里云平台获取设备并更新,权限【device:info:poll】")
  137. // @SaCheckPermission("device:info:poll")
  138. // @PutMapping("/sync-device1")
  139. // public R syncDevice1() {
  140. // int i = deviceService.syncAllDevice();
  141. // if (i > 0){
  142. // return R.success(i,"同步成功");
  143. // }else {
  144. // return R.fail("同步失败");
  145. // }
  146. // }
  147. @PostMapping("/remove")
  148. @ApiImplicitParams({
  149. @ApiImplicitParam(name = "id",value = "主键id",required = true)
  150. })
  151. @SaCheckPermission("device:info:delete")
  152. @ApiOperation(value = "根据ID删除")
  153. public R delete(@RequestParam("id") String id) {
  154. if(CharSequenceUtil.isNullOrUndefined(String.valueOf(id))){
  155. return R.success();
  156. }
  157. return R.success(deviceService.removeIotById(id));
  158. }
  159. /**
  160. * @author 龙三郎
  161. * 从阿里云更新系统中存在的设备,如果设备在系统中不存在,则不更新。
  162. * @return
  163. */
  164. @Log(title = "从阿里云更新本地设备")
  165. @SaCheckPermission("device:info:poll")
  166. @ApiOperation(value = "从阿里云更新本地设备",notes = "从阿里云平台获取设备并更新,参数为设备id列表,格式如['123456','456123'],参数可为空。权限【device:info:poll】")
  167. @PutMapping("/sync-device/batch")
  168. public R syncDevice(@RequestBody List<String> ids) {
  169. log.info("从阿里云更新本地设备");
  170. int i = deviceService.syncDevice(ids);
  171. if (i > 0){
  172. return R.success(i,"同步成功");
  173. }else {
  174. return R.fail("同步失败");
  175. }
  176. }
  177. }