package com.nb.bus.controller; import cn.dev33.satoken.SaManager; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.stp.StpLogic; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.mapper.Mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.nb.bus.controller.vo.DeviceBindVo; import com.nb.bus.entity.BusDeviceEntity; import com.nb.bus.enums.DeviceAlarmEnum; import com.nb.bus.service.LocalBusDeviceService; import com.nb.bus.service.dto.DeviceQuery; import com.nb.bus.service.dto.DeviceResult; import com.nb.common.annotation.Log; import com.nb.common.crud.BaseService; import com.nb.common.crud.controller.BaseSaveController; import com.nb.common.exception.CustomException; import com.nb.common.result.R; import io.swagger.annotations.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @author lifang * @version 1.0.0 * @ClassName BusHospitalController.java * @Description * @createTime 2022年03月19日 09:28:00 * @accendant 龙三郎 */ @Slf4j @RestController @AllArgsConstructor @RequestMapping("/bus/device/info") @Api(tags = "设备管理",description = "统一权限前缀(device:info),device:info:add") public class BusDeviceController implements BaseSaveController { private final LocalBusDeviceService deviceService; @Log(title = "设备换绑") @PostMapping("/shift/bind") @SaCheckPermission("device:info:shift") @ApiOperation(value = "设备换绑",notes = "权限【device:info:shift】") public R shift(@RequestBody DeviceBindVo vo){ if(StrUtil.isEmpty(vo.getBindTenantId())|| CollectionUtil.isEmpty(vo.getDeviceIds())){ throw new CustomException("选择的医院、设备不能为空"); } deviceService.shift(vo.getDeviceIds(),vo.getBindTenantId()); return R.success(DeviceAlarmEnum.values()); } @PostMapping("/query/page") @SaCheckPermission("device:info:query") @ApiOperation(value = "设备管理分页查询",notes = "权限【device:info:query】") public R> pageQuery(@RequestBody DeviceQuery query){ return R.success(deviceService.pageQuery(query.getPage(),query)); } @GetMapping("/view") @ApiOperation(value = "根据ID查询") @ApiImplicitParams({ @ApiImplicitParam(name = "id",value = "主键id",required = true) }) public R getById(@RequestParam("id") String id) { queryAuth(); String key=String.valueOf(id); if(CharSequenceUtil.isNullOrUndefined(key)){ return R.fail("查询结果不存在"); } return R.success(deviceService.view(key)); } /** * 权限控制前缀 * @return */ @Override public String getPermissionPrefix() { return "device:info"; } @Override public StpLogic getStpLogin() { return SaManager.getStpLogic(""); } @Override public BaseService, BusDeviceEntity, String> getService() { return deviceService; } /** * @author 龙三郎 * 新增设备,只有超级管理员才有此权限,如果该设备在系统中存在,则更新,如果设备在系统中不存在,在阿里云平台存在,则从阿里云获取后插入。 * @param payload * @return */ @Override @SaCheckPermission("device:info:add") @PostMapping("/add") @ApiOperation(value = "新增单个数据,并返回新增后的数据. 权限【device:info:add】") public R add(@RequestBody BusDeviceEntity payload) { log.info("添加设备"); // 设备id不能为空 if (StrUtil.isEmpty(payload.getDeviceId())){ throw new CustomException("设备ID不能为空"); } // 根据deviceId从阿里云获取设备信息。 BusDeviceEntity device = deviceService.addDevice(payload.getDeviceId()); if (ObjectUtil.isNull(device)){ return R.fail("设备添加失败"); } return R.success(device); } /** * @author 龙三郎 * 从阿里云同步系统所有的设备,只有超级管理员才有此权限。将阿里云所有的设备同步到系统。 * @return */ @Log(title = "从阿里云同步设备") @ApiOperation(value = "从阿里云同步设备",notes = "从阿里云平台获取设备并更新,权限【device:info:poll】") @SaCheckPermission("device:info:poll") @PutMapping("/sync-device") public R syncDevice() { log.info("从阿里云同步设备"); try { deviceService.syncDeviceFromIot(); }catch (Exception e){ log.error("同步设备失败,【{}】",e); return R.success(false); } return R.success(true); } // /** // * @author 龙三郎 // * 从阿里云同步系统所有的设备,只有超级管理员才有此权限。将阿里云所有的设备同步到系统。 // * @return // */ // @ApiOperation(value = "从阿里云同步设备1",notes = "从阿里云平台获取设备并更新,权限【device:info:poll】") // @SaCheckPermission("device:info:poll") // @PutMapping("/sync-device1") // public R syncDevice1() { // int i = deviceService.syncAllDevice(); // if (i > 0){ // return R.success(i,"同步成功"); // }else { // return R.fail("同步失败"); // } // } @PostMapping("/remove") @ApiImplicitParams({ @ApiImplicitParam(name = "id",value = "主键id",required = true) }) @SaCheckPermission("device:info:delete") @ApiOperation(value = "根据ID删除") public R delete(@RequestParam("id") String id) { if(CharSequenceUtil.isNullOrUndefined(String.valueOf(id))){ return R.success(); } return R.success(deviceService.removeIotById(id)); } /** * @author 龙三郎 * 从阿里云更新系统中存在的设备,如果设备在系统中不存在,则不更新。 * @return */ @Log(title = "从阿里云更新本地设备") @SaCheckPermission("device:info:poll") @ApiOperation(value = "从阿里云更新本地设备",notes = "从阿里云平台获取设备并更新,参数为设备id列表,格式如['123456','456123'],参数可为空。权限【device:info:poll】") @PutMapping("/sync-device/batch") public R syncDevice(@RequestBody List ids) { log.info("从阿里云更新本地设备"); int i = deviceService.syncDevice(ids); if (i > 0){ return R.success(i,"同步成功"); }else { return R.fail("同步失败"); } } }