package com.zswl.dataservice.service.mqtt; import com.zswl.dataservice.dao.iot.IotTemplateDao; import com.zswl.dataservice.dao.mqtt.DeviceInfoDao; import com.zswl.dataservice.dao.mqtt.ProjectInfoDao; import com.zswl.dataservice.dataConfig.ResultMessage; import com.zswl.dataservice.domain.iot.IotTemplate; import com.zswl.dataservice.domain.mqtt.DeviceInfo; import com.zswl.dataservice.domain.mqtt.ProjectInfo; import com.zswl.dataservice.model.iot.IotMainModel; import com.zswl.dataservice.model.mqtt.DeviceInfoAddParam; import com.zswl.dataservice.model.mqtt.DeviceInfoModel; import com.zswl.dataservice.model.mqtt.DeviceInfoSearchParam; import com.zswl.dataservice.model.mqtt.DeviceInfoUpdateRemark; import com.zswl.dataservice.service.iot.IotServiceImpl; import com.zswl.dataservice.utils.bean.BeanUtils; import com.zswl.dataservice.utils.mqtt.type.LogsLevel; import com.zswl.dataservice.utils.page.PageEntityUtil; import com.zswl.dataservice.utils.result.ResultContent; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** * @author TRX * @date 2024/5/14 */ @Service public class DeviceInfoService { @Autowired DeviceInfoDao deviceInfoDao; @Autowired OperationLogsService operationLogsService; @Autowired IotTemplateDao iotTemplateDao; @Autowired IotServiceImpl iotService; @Autowired ProjectInfoDao projectInfoDao; @Autowired ProjectInfoService projectInfoService; /** * 添加设备 * * @param param * @return */ public ResultContent addDeviceInfo(DeviceInfoAddParam param) { DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(param.getDeviceId()); if (ObjectUtils.isNotEmpty(deviceInfo)) { return ResultContent.buildFail(String.format("设备ID已存在:%s", param.getDeviceId())); } deviceInfo = new DeviceInfo(); BeanUtils.copyProperties(param, deviceInfo); ProjectInfo projectInfo = null; if (StringUtils.isNotEmpty(param.getProjectInfoOid())) { projectInfo = projectInfoDao.findTopByCode(param.getProjectInfoOid()); } deviceInfo.setProjectInfo(projectInfo); IotTemplate iotTemplate = null; if (StringUtils.isNotEmpty(param.getIotTemplateId())) { iotTemplate = iotTemplateDao.findTopById(param.getIotTemplateId()); } deviceInfo.setIotTemplate(iotTemplate); deviceInfoDao.save(deviceInfo); operationLogsService.addLogs(String.format("添加了设备;%s", deviceInfo.getDeviceName()), LogsLevel.Middle, deviceInfo); return ResultContent.buildSuccess(deviceInfo); } /** * 初始设备 * * @param param * @return */ public ResultContent initDeviceInfo(DeviceInfoAddParam param) { DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(param.getDeviceId()); if (ObjectUtils.isEmpty(deviceInfo)) { ResultContent resultContent = addDeviceInfo(param); deviceInfo = resultContent.getContent(); operationLogsService.addLogs(String.format("添加了设备;%s", deviceInfo.getDeviceName()), LogsLevel.Middle, deviceInfo); } return ResultContent.buildSuccess(deviceInfo); } /** * 设备列表 * * @param pageable * @param param * @return */ public ResultContent> pageDevice(Pageable pageable, DeviceInfoSearchParam param) { Page page = deviceInfoDao.page(pageable, param); return ResultContent.buildSuccess(PageEntityUtil.toPageModel(page, this::toModel)); } /** * @return */ public ResultContent updateRemark(DeviceInfoUpdateRemark param) { DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId()); if (ObjectUtils.isEmpty(deviceInfo)) { return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId())); } deviceInfo.setRemark(param.getRemark()); deviceInfoDao.save(deviceInfo); return ResultContent.buildSuccess(); } /** * 编辑设备关联的模版 * * @param param * @return */ public ResultContent updateIopTemplate(DeviceInfoUpdateRemark param) { DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId()); if (ObjectUtils.isEmpty(deviceInfo)) { return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId())); } IotTemplate iotTemplate = iotTemplateDao.findTopById(param.getIotTemplateId()); if (ObjectUtils.isEmpty(iotTemplate)) { return ResultContent.buildFail(String.format("模版ID不存在:", param.getId())); } deviceInfo.setIotTemplate(iotTemplate); deviceInfoDao.save(deviceInfo); return ResultContent.buildSuccess(); } /** * 编辑设备关联的模版 * * @param param * @return */ public ResultContent updateIsReportLogs(DeviceInfoUpdateRemark param) { DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId()); if (ObjectUtils.isEmpty(deviceInfo)) { return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId())); } deviceInfo.setIsReportLogs(param.getIsReportLogs()); deviceInfoDao.save(deviceInfo); return ResultContent.buildSuccess(); } /** * 测试设备的连接时间 * * @param id * @return */ public ResultContent testDevice(String id) { Long time = 0L; return ResultContent.buildSuccess(time); } /** * 得到设备关联的物模型定义 * * @param id * @return */ public ResultContent> getDeviceIotMain(String id) { DeviceInfo deviceInfo = deviceInfoDao.findTopById(id); if (ObjectUtils.isEmpty(deviceInfo)) { return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id)); } List models = new ArrayList<>(); if (deviceInfo.getIotTemplate() != null) { ResultContent> resultContent = iotService.getTemplateIotMainList(deviceInfo.getIotTemplate().getId()); models = resultContent.getContent(); } return ResultContent.buildSuccess(models); } /** * 删除设备 * * @param deviceId * @return */ public ResultContent deleteDeviceInfo(String deviceId) { DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId); if (ObjectUtils.isEmpty(deviceInfo)) { return ResultContent.buildFail(String.format("设备ID不存在:%s", deviceId)); } deviceInfoDao.delete(deviceInfo); operationLogsService.addLogs(String.format("删除了设备;%s", deviceInfo.getDeviceName()), LogsLevel.High, deviceInfo); return ResultContent.buildSuccess(); } public ResultContent getDeviceById(String id) { DeviceInfoModel model = null; DeviceInfo deviceInfo = deviceInfoDao.findTopById(id); if (ObjectUtils.isNotEmpty(deviceInfo)) { model = toModel(deviceInfo); } return ResultContent.buildSuccess(model); } public DeviceInfoModel toModel(DeviceInfo deviceInfo) { DeviceInfoModel deviceInfoModel = new DeviceInfoModel(); if (ObjectUtils.isNotEmpty(deviceInfo)) { BeanUtils.copyProperties(deviceInfo, deviceInfoModel); deviceInfoModel.setIotTemplate(iotService.toModel(deviceInfo.getIotTemplate())); deviceInfoModel.setProjectInfo(projectInfoService.toModel(deviceInfo.getProjectInfo())); } return deviceInfoModel; } }