package com.coffee.bus.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.mapper.Mapper; import com.coffee.bus.controller.vo.DeviceBindVo; import com.coffee.bus.entity.BusDeviceEntity; import com.coffee.bus.entity.BusHospitalEntity; import com.coffee.bus.enums.DeviceAlarmEnum; import com.coffee.bus.exception.BusinessException; import com.coffee.bus.exception.ErrorStatus; import com.coffee.bus.registry.device.DeviceRegistry; import com.coffee.bus.service.LocalBusDeviceService; 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 lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; import java.util.List; import java.util.Objects; /** * @author lifang * @version 1.0.0 * @ClassName BusHospitalController.java * @Description TODO * @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; private final DeviceRegistry deviceRegistry; @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("选择的医院、设备不能为空"); } List deviceIds = vo.getDeviceIds(); deviceService.update(new UpdateWrapper().lambda() .in(BusDeviceEntity::getDeviceId,deviceIds) .set(BusDeviceEntity::getTenantId,vo.getBindTenantId())); deviceIds.stream() .map(deviceRegistry::getOperator) .forEach(deviceOperator -> deviceOperator.setTenantId(vo.getBindTenantId())); return R.success(DeviceAlarmEnum.values()); } @PostMapping("/undo/bind") @ApiOperation(value = "设备解绑",notes = "即自动将该设备绑定到默认医院上,权限【device:info:undo】") public R undo(@RequestBody DeviceBindVo vo){ if( CollectionUtil.isEmpty(vo.getDeviceIds())){ throw new CustomException("选择的设备不能为空"); } List deviceIds = vo.getDeviceIds(); deviceService.update(new UpdateWrapper().lambda() .in(BusDeviceEntity::getDeviceId,deviceIds) .set(BusDeviceEntity::getTenantId,"1")); deviceIds.stream() .map(deviceRegistry::getOperator) .forEach(deviceOperator -> deviceOperator.setTenantId("1")); return R.success(DeviceAlarmEnum.values()); } /** * 权限控制前缀 * @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(BusDeviceEntity payload) { log.info("添加设备"); // 设备id不能为空 if (StrUtil.isEmpty(payload.getDeviceId())){ throw new BusinessException(ErrorStatus.DEVICEID_IS_EMPTY); } // 根据deviceId从阿里云获取设备信息。 BusDeviceEntity device = deviceService.add(payload.getDeviceId()); if (ObjectUtil.isNull(device)){ return R.fail("设备添加失败"); } return R.success(device); } /** * @author 龙三郎 * 从阿里云同步系统所有的设备 * @return */ @ApiOperation(value = "从阿里云同步设备",notes = "从阿里云平台获取设备并更新") @PutMapping("/sync-device") public R syncDevice() { int i = deviceService.syncDevice(); if (i > 0){ return R.success(i,"同步成功"); }else { return R.fail("同步失败"); } } }