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.*; import com.zswl.dataservice.service.iot.IotServiceImpl; import com.zswl.dataservice.service.sync.DeviceSyncFullCardService; import com.zswl.dataservice.type.FunctionType; import com.zswl.dataservice.utils.bean.BeanUtils; import com.zswl.dataservice.utils.mqtt.type.LogsLevel; import com.zswl.dataservice.utils.mqtt.type.OnLineState; 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; @Autowired DeviceSyncFullCardService deviceSyncFullCardService; /** * 添加-编辑设备 (基础信息) * * @param param * @return */ public ResultContent addDeviceInfo(DeviceInfoAddParam param) { DeviceInfo deviceInfo = new DeviceInfo(); DeviceInfo temp = deviceInfoDao.findTopByDeviceId(param.getDeviceId()); if (ObjectUtils.isNotEmpty(temp)) { deviceInfo = temp; param.setId(null); } else { deviceInfo.setActivityTime(System.currentTimeMillis()); } BeanUtils.copyProperties(param, deviceInfo, "id"); deviceInfo.setLastOnlineTime(System.currentTimeMillis()); deviceInfo.setOnLineState(OnLineState.OnLine); // 项目 if (StringUtils.isNotEmpty(param.getProjectInfoCode())) { ProjectInfo projectInfo = projectInfoDao.findTopByCode(param.getProjectInfoCode()); deviceInfo.setProjectInfo(projectInfo); deviceInfo.setProjectInfoCode(projectInfo.getCode()); } deviceInfo.setLastOnlineTime(System.currentTimeMillis()); deviceInfoDao.save(deviceInfo); 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 updateProject(DeviceInfoUpdateRemark param) { DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId()); if (ObjectUtils.isEmpty(deviceInfo)) { return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId())); } ProjectInfo projectInfo = projectInfoDao.findTopByCode(param.getProjectCode()); if (ObjectUtils.isEmpty(projectInfo)) { return ResultContent.buildFail(String.format("项目不存在:", param.getId())); } deviceInfo.setProjectInfoCode(projectInfo.getCode()); deviceInfo.setProjectInfo(projectInfo); 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 param * @return */ public ResultContent updateDeviceState(DeviceInfoUpdateRemark param) { DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId()); if (ObjectUtils.isEmpty(deviceInfo)) { return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId())); } deviceInfo.setState(param.getState()); deviceInfoDao.save(deviceInfo); deviceSyncFullCardService.noticeSyncDeviceOnlineStateChange(deviceInfo.getDeviceId()); return ResultContent.buildSuccess(); } /** * 测试设备的连接时间 * * @param id * @return */ public ResultContent testDevice(String id) { Long time = 0L; return ResultContent.buildSuccess(time); } /** * 得到设备关联的物模型定义 * * @param deviceId * @return */ public ResultContent> getDeviceIotMain(String deviceId, FunctionType functionType) { DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId); if (ObjectUtils.isEmpty(deviceInfo)) { return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, deviceId)); } List models = new ArrayList<>(); if (deviceInfo.getIotTemplate() != null) { ResultContent> resultContent = iotService.getTemplateIotMainList(deviceInfo.getIotTemplate().getId(), functionType); 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 deviceId) { DeviceInfoModel model = null; DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId); 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; } }