diff --git a/fastbee-common/src/main/java/com/fastbee/common/model/vo/iot/DeviceDetailVo.java b/fastbee-common/src/main/java/com/fastbee/common/model/vo/iot/DeviceDetailVo.java new file mode 100644 index 0000000..2a4050d --- /dev/null +++ b/fastbee-common/src/main/java/com/fastbee/common/model/vo/iot/DeviceDetailVo.java @@ -0,0 +1,30 @@ +package com.fastbee.common.model.vo.iot; + +import lombok.Data; + +/** + * 设备详细信息 + */ +@Data +public class DeviceDetailVo { + //运行状态 + private String runState; + //最后更新时间 + private String lastDataTime; + //总累计用电量(kwh) + private String sumEle; + //总累计用水量(m³) + private String sumFlow; + //供电类型 + private String gongDianType; + //环境温度 + private String temp; + //电池电量 + private String powerDianliang; + //电池电压 + private String powerVolt; + //电池电流 + private String powerCur; + +} + diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/controller/DeviceController.java b/fastbee-open-api/src/main/java/com/fastbee/data/controller/DeviceController.java index 65f9eba..343d0f7 100644 --- a/fastbee-open-api/src/main/java/com/fastbee/data/controller/DeviceController.java +++ b/fastbee-open-api/src/main/java/com/fastbee/data/controller/DeviceController.java @@ -13,6 +13,7 @@ import com.fastbee.common.exception.ServiceException; import com.fastbee.common.utils.SecurityUtils; import com.fastbee.common.utils.StringUtils; import com.fastbee.common.utils.poi.ExcelUtil; +import com.fastbee.data.service.devicedetail.IDeviceDetailService; import com.fastbee.iot.domain.Device; import com.fastbee.iot.domain.JiankongDeviceParam; import com.fastbee.iot.model.DeviceAssignmentVO; @@ -52,7 +53,8 @@ import java.util.stream.Collectors; public class DeviceController extends BaseController { @Autowired private IDeviceService deviceService; - + @Autowired + private IDeviceDetailService deviceDetailService; // @Lazy @Autowired private IMqttMessagePublish messagePublish; @@ -165,6 +167,7 @@ public class DeviceController extends BaseController { @ApiOperation("获取设备详情") public AjaxResult getInfo(@PathVariable("deviceId") Long deviceId) { Device device = deviceService.selectDeviceByDeviceId(deviceId); + device.setDeviceDetailVo(deviceDetailService.getDetailInfo(device)); // 判断当前用户是否有设备分享权限 (设备所属机构管理员和设备所属用户有权限) // LoginUser loginUser = getLoginUser(); // List roles = loginUser.getUser().getRoles(); diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/controller/anfang/controller/UploadedPhotosController.java b/fastbee-open-api/src/main/java/com/fastbee/data/controller/anfang/controller/UploadedPhotosController.java index c8ab1c0..f26da0c 100644 --- a/fastbee-open-api/src/main/java/com/fastbee/data/controller/anfang/controller/UploadedPhotosController.java +++ b/fastbee-open-api/src/main/java/com/fastbee/data/controller/anfang/controller/UploadedPhotosController.java @@ -112,7 +112,8 @@ public class UploadedPhotosController extends BaseController { //推送告警短信通知 uploadedPhotosService.sendAlarmMessage(sn, doorState, shakeState,eventType); UploadedPhotos uploadedPhotos = new UploadedPhotos( - null, fileName, monitorPath, imei, sn, latitude, longitude, temperature, doorState, shakeState,cpuTemp,eventType,anFangStatus, date + null, fileName, monitorPath, imei, sn, latitude, longitude, + temperature, doorState, shakeState,cpuTemp,eventType,anFangStatus, date ); return toAjax(uploadedPhotosService.insertUploadedPhotos(uploadedPhotos)); } catch (IOException e) { diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/service/devicedetail/IDeviceDetailService.java b/fastbee-open-api/src/main/java/com/fastbee/data/service/devicedetail/IDeviceDetailService.java index 3417db0..cd73228 100644 --- a/fastbee-open-api/src/main/java/com/fastbee/data/service/devicedetail/IDeviceDetailService.java +++ b/fastbee-open-api/src/main/java/com/fastbee/data/service/devicedetail/IDeviceDetailService.java @@ -1,6 +1,7 @@ package com.fastbee.data.service.devicedetail; import com.fastbee.common.core.domain.CommonResult; +import com.fastbee.common.model.vo.iot.DeviceDetailVo; import com.fastbee.common.model.vo.iot.QueryLogVo; import com.fastbee.data.domain.vo.AnfangInfoVo; import com.fastbee.iot.domain.Device; @@ -43,5 +44,5 @@ public interface IDeviceDetailService { */ List> gongdianRealData(QueryLogVo queryLogVo); List> yongshuiRealData(QueryLogVo queryLogVo); - + DeviceDetailVo getDetailInfo(Device device); } diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/service/devicedetail/impl/DeviceDetailServiceImpl.java b/fastbee-open-api/src/main/java/com/fastbee/data/service/devicedetail/impl/DeviceDetailServiceImpl.java index d55885e..51d300a 100644 --- a/fastbee-open-api/src/main/java/com/fastbee/data/service/devicedetail/impl/DeviceDetailServiceImpl.java +++ b/fastbee-open-api/src/main/java/com/fastbee/data/service/devicedetail/impl/DeviceDetailServiceImpl.java @@ -5,7 +5,10 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.fastbee.common.core.domain.CommonResult; +import com.fastbee.common.core.page.TableDataInfo; +import com.fastbee.common.model.vo.iot.DeviceDetailVo; import com.fastbee.common.model.vo.iot.QueryLogVo; +import com.fastbee.common.utils.DateUtils; import com.fastbee.common.utils.DevParamsUtils; import com.fastbee.common.utils.StringUtils; import com.fastbee.data.domain.vo.AnfangInfoVo; @@ -27,6 +30,7 @@ import com.fastbee.iot.service.IThingsModelService; import com.fastbee.waterele.domain.MaWatereleRecord; import com.fastbee.waterele.domain.dto.MaGuangaiRecordDto; import com.fastbee.waterele.domain.dto.MaWatereleRecordDto; +import com.fastbee.waterele.service.IMaWatereleRecordService; import com.fastbee.xunjian.domain.XjInspectionRecords; import com.fastbee.xunjian.domain.XjInspectionRoutes; import com.fastbee.xunjian.mapper.XjInspectionRecordsMapper; @@ -34,6 +38,7 @@ import com.fastbee.xunjian.mapper.XjInspectionRoutesMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; @@ -58,6 +63,8 @@ public class DeviceDetailServiceImpl implements IDeviceDetailService { @Autowired private IDeviceLogService logService; + @Resource + private IMaWatereleRecordService watereleRecordService; public DeviceDetailServiceImpl(DeviceMapper deviceMapper) { this.deviceMapper = deviceMapper; @@ -403,5 +410,86 @@ public class DeviceDetailServiceImpl implements IDeviceDetailService { return haiWeiService.cmdDevices(cmdHaiWeiDto); } + /** + * 获取设备详细信息 + * @param device + */ + @Override + public DeviceDetailVo getDetailInfo(Device device) { + DeviceDetailVo deviceDetailVo = new DeviceDetailVo(); + //运行状态,最后一次更新时间 + MaWatereleRecord watereleRecord = new MaWatereleRecord(); + watereleRecord.setDevSn(device.getSerialNumber()); + TableDataInfo tableDataInfo = watereleRecordService.selectMaWatereleRecordList(watereleRecord); + List rows = (List) tableDataInfo.getRows(); + //运行状态 + deviceDetailVo.setRunState("未运行"); + //累计用电量 + deviceDetailVo.setSumEle("--kwh"); + //最近一次上传时间 + deviceDetailVo.setLastDataTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, + new Date())); + if(rows.size()> 0){ + MaWatereleRecord item = rows.get(0); + deviceDetailVo.setLastDataTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, + item.getCreateTime())); + if(item.getWorkstate() == 0){ + deviceDetailVo.setRunState("未运行"); + }else { + deviceDetailVo.setRunState("运行中"); + } + deviceDetailVo.setSumEle(item.getSumele()+"kwh"); + } + Map devParams = DevParamsUtils.getDevParams(device.getDevParams()); + //累计水量 + deviceDetailVo.setSumFlow("--m³"); + if(devParams.containsKey("liuliangIds")){ + String liuliangIds = devParams.get("liuliangIds").toString(); + //获取 + CommonResult cache = haiWeiService.getCache(Long.valueOf(liuliangIds)); + HaiWeiDeviceInfoVo checkedData = cache.getCheckedData(); + List propertyList = checkedData.getPropertyList(); + for (HaiWeiPropertyVo haiWeiPropertyVo : propertyList) { + if (haiWeiPropertyVo.getNameEn().equals("三菱FX2N_1_sumFlow")) { + deviceDetailVo.setSumFlow(haiWeiPropertyVo.getValue()+"m³"); + } + } + } + //供电信息 + //环境温度 + deviceDetailVo.setTemp("--℃"); + //供电方式 + deviceDetailVo.setGongDianType("市电"); + //电池电量 + deviceDetailVo.setPowerDianliang("--%"); + //电池电压 + deviceDetailVo.setPowerVolt("--V"); + //电池电流 + deviceDetailVo.setPowerCur("--A"); + if(devParams.containsKey("taiyangnIds")){ + String taiyangIds = devParams.get("taiyangnIds").toString(); + //获取 + CommonResult cache = haiWeiService.getCache(Long.valueOf(taiyangIds)); + HaiWeiDeviceInfoVo checkedData = cache.getCheckedData(); + List propertyList = checkedData.getPropertyList(); + for (HaiWeiPropertyVo haiWeiPropertyVo : propertyList) { + if (haiWeiPropertyVo.getNameEn().equals("三菱FX2N_1_市电状态")) { + if(Float.parseFloat(haiWeiPropertyVo.getValue().toString()) == 0){ + deviceDetailVo.setGongDianType("太阳能"); + } + }else if(haiWeiPropertyVo.getNameEn().equals("三菱FX2N_1_bat")){ + deviceDetailVo.setPowerDianliang(haiWeiPropertyVo.getValueAndUnit()); + }else if(haiWeiPropertyVo.getNameEn().equals("三菱FX2N_1_batVolt")){ + deviceDetailVo.setPowerVolt(haiWeiPropertyVo.getValueAndUnit()); + }else if(haiWeiPropertyVo.getNameEn().equals("三菱FX2N_1_batCur")){ + deviceDetailVo.setPowerCur(haiWeiPropertyVo.getValueAndUnit()); + }else if(haiWeiPropertyVo.getNameEn().equals("三菱FX2N_1_airTemp")){ + deviceDetailVo.setTemp(haiWeiPropertyVo.getValueAndUnit()); + } + } + } + return deviceDetailVo; + } + } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/Device.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/Device.java index 66cc962..200e497 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/Device.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/Device.java @@ -1,5 +1,6 @@ package com.fastbee.iot.domain; +import com.fastbee.common.model.vo.iot.DeviceDetailVo; import com.fasterxml.jackson.annotation.JsonFormat; import com.fastbee.common.annotation.Excel; import com.fastbee.common.core.domain.BaseEntity; @@ -165,7 +166,9 @@ public class Device extends BaseEntity @Transient @ApiModelProperty("机构id") private Long deptId; - + //设备详情 + @ApiModelProperty("详情") + private DeviceDetailVo deviceDetailVo; @Transient @ApiModelProperty("是否显示下级") private Boolean showChild; diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IDeviceService.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IDeviceService.java index 13efba3..00e4f4d 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IDeviceService.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IDeviceService.java @@ -4,6 +4,7 @@ import com.fastbee.common.core.device.DeviceAndProtocol; import com.fastbee.common.core.domain.AjaxResult; import com.fastbee.common.core.thingsModel.ThingsModelSimpleItem; import com.fastbee.common.enums.DeviceStatus; +import com.fastbee.common.model.vo.iot.DeviceDetailVo; import com.fastbee.iot.domain.Device; import com.fastbee.iot.domain.DeviceGroup; import com.fastbee.iot.domain.JiankongDeviceParam; @@ -336,4 +337,6 @@ public interface IDeviceService ArrayList getDeviceLogAllCurves(Long deviceId, String beginTime, String endTime); Map getvideourl(JiankongDeviceParam jiankongDeviceParam); + + } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java index 458bd2e..a17fa9b 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java @@ -7,6 +7,7 @@ import com.fastbee.common.constant.Constants; import com.fastbee.common.constant.ProductAuthConstant; import com.fastbee.common.core.device.DeviceAndProtocol; import com.fastbee.common.core.domain.AjaxResult; +import com.fastbee.common.core.domain.CommonResult; import com.fastbee.common.core.domain.entity.SysDept; import com.fastbee.common.core.domain.entity.SysUser; import com.fastbee.common.core.domain.model.LoginUser; @@ -17,6 +18,7 @@ import com.fastbee.common.core.thingsModel.ThingsModelSimpleItem; import com.fastbee.common.core.thingsModel.ThingsModelValuesInput; import com.fastbee.common.enums.*; import com.fastbee.common.exception.ServiceException; +import com.fastbee.common.model.vo.iot.DeviceDetailVo; import com.fastbee.common.utils.*; import com.fastbee.common.utils.http.HttpUtils; import com.fastbee.common.utils.ip.IpUtils; @@ -24,6 +26,7 @@ import com.fastbee.common.utils.json.JsonUtils; import com.fastbee.iot.cache.ITSLCache; import com.fastbee.iot.domain.*; import com.fastbee.iot.haikang.HaikangYingshiApi; +import com.fastbee.iot.haiwei.service.HaiWeiService; import com.fastbee.iot.mapper.*; import com.fastbee.iot.model.*; import com.fastbee.iot.model.ThingsModelItem.Datatype; @@ -32,6 +35,8 @@ import com.fastbee.iot.domain.ThingsModel; import com.fastbee.iot.model.ThingsModels.*; import com.fastbee.iot.model.dto.ThingsModelDTO; import com.fastbee.iot.model.gateWay.SubDeviceListVO; +import com.fastbee.iot.model.haiwei.HaiWeiDeviceInfoVo; +import com.fastbee.iot.model.haiwei.HaiWeiPropertyVo; import com.fastbee.iot.service.*; import com.fastbee.iot.cache.IDeviceCache; import com.fastbee.iot.cache.ITSLValueCache; @@ -40,6 +45,7 @@ import com.fastbee.system.mapper.SysDeptMapper; import com.fastbee.system.service.ISysUserService; import com.fastbee.waterele.domain.MaWatereleRecord; import com.fastbee.waterele.service.IMaWatereleRecordService; +import com.fastbee.waterele.service.impl.MaWatereleRecordServiceImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -124,9 +130,6 @@ public class DeviceServiceImpl implements IDeviceService { private SubGatewayMapper subGatewayMapper; @Resource private IOrderControlService orderControlService; - @Resource - private IMaWatereleRecordService watereleRecordService; - /** * 查询设备 * @@ -1755,4 +1758,5 @@ public class DeviceServiceImpl implements IDeviceService { + } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/QxtrTask.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/QxtrTask.java index ab9b907..f3e98bf 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/QxtrTask.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/timer/QxtrTask.java @@ -122,8 +122,9 @@ public class QxtrTask { com.alibaba.fastjson2.JSONObject thingsModelObject = com.alibaba.fastjson2.JSONObject.parseObject(itslCache.getCacheThingsModelByProductId(productId)); com.alibaba.fastjson2.JSONArray thingsList = thingsModelObject.getJSONArray("properties"); - List properties = thingsList.toList(PropertyDto.class); - Map> stringListMap = properties.stream().collect(Collectors.groupingBy(PropertyDto::getGroup)); + List properties = thingsList.toList(PropertyDto.class); + Map> stringListMap = + properties.stream().collect(Collectors.groupingBy(PropertyDto::getGroup)); for (Device device : devices) { try { Map devParams = getDevParams(device); @@ -141,7 +142,8 @@ public class QxtrTask { tags[i] = propertyDtos.get(i).getId(); } haiWeiBo.setTags(tags); - HttpResultDTO duhttpResultDTO = HttpAPIController.doPostWithJsonParamAndHeaders(url, JsonUtils.toJsonString(haiWeiBo), + HttpResultDTO duhttpResultDTO = + HttpAPIController.doPostWithJsonParamAndHeaders(url, JsonUtils.toJsonString(haiWeiBo), new HashMap<>()); if (null != duhttpResultDTO && duhttpResultDTO.getCode() == 200) { Object object = com.alibaba.fastjson.JSON.parse(duhttpResultDTO.getBody()); //先转换成Object