package com.coffee.bus.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.collection.CollectionUtil; 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.coffee.bus.controller.vo.DeviceBindVo; import com.coffee.bus.entity.BusDeviceEntity; import com.coffee.bus.enums.DeviceAlarmEnum; import com.coffee.bus.exception.BusinessException; import com.coffee.bus.exception.ErrorStatus; import com.coffee.bus.service.LocalBusDeviceService; import com.coffee.bus.service.dto.DeviceQuery; import com.coffee.bus.service.dto.DeviceResult; import com.coffee.common.crud.BaseService; import com.coffee.common.crud.controller.BaseCrudController; import com.coffee.common.exception.CustomException; import com.coffee.common.result.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.io.Serializable; 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 extends BaseCrudController { private final LocalBusDeviceService deviceService; @PostMapping("/shift/bind") @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)); } /** * 权限控制前缀 * @return */ @Override public String getPermissionPrefix() { return "device:info"; } @Override public BaseService, BusDeviceEntity, String> getService() { return deviceService; } /** * @author 龙三郎 * 新增设备,只有超级管理员才有此权限,如果该设备在系统中存在,则更新,如果设备在系统中不存在,在阿里云平台存在,则从阿里云获取后插入。 * @param payload * @return */ @Override @PostMapping("/add") @ApiOperation(value = "新增单个数据,并返回新增后的数据.") public R add(@RequestAttribute("tenantId")@ApiParam(hidden = true) Serializable tenantId,@RequestBody BusDeviceEntity payload) { log.info("添加设备"); // 设备id不能为空 if (StrUtil.isEmpty(payload.getDeviceId())){ throw new BusinessException(ErrorStatus.DEVICEID_IS_EMPTY); } // 根据deviceId从阿里云获取设备信息。 BusDeviceEntity device = deviceService.addDevice(payload.getDeviceId()); if (ObjectUtil.isNull(device)){ return R.fail("设备添加失败"); } return R.success(device); } /** * @author 龙三郎 * 从阿里云同步系统所有的设备,只有超级管理员才有此权限。将阿里云所有的设备同步到系统。 * @return */ @ApiOperation(value = "从阿里云同步设备",notes = "从阿里云平台获取设备并更新") @PutMapping("/sync-device") public R syncDevice() { log.info("从阿里云同步设备"); try { return R.success(deviceService.syncDeviceFromIot()) ; }catch (Exception e){ log.error("同步设备失败,【{}】",e); return R.fail("同步失败"); } } /** * @author 龙三郎 * 从阿里云更新系统中存在的设备,如果设备在系统中不存在,则不更新。 * @return */ @ApiOperation(value = "从阿里云更新本地设备",notes = "从阿里云平台获取设备并更新,参数为设备id列表,格式如['123456','456123'],参数可为空。") @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("同步失败"); } } }