package com.ruoyi.data.controller; import java.util.ArrayList; import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.ruoyi.common.utils.redis.CacheUtils; import com.ruoyi.data.domain.PointData; import com.ruoyi.data.domain.SensorPoint; import com.ruoyi.data.domain.SensorRecord; import com.ruoyi.data.domain.bo.*; import com.ruoyi.data.domain.vo.TblDatapointVo; import com.ruoyi.data.domain.vo.TblEquipmentVo; import com.ruoyi.data.domain.vo.TblSensorRecordVo; import com.ruoyi.data.service.ITblDatapointService; import com.ruoyi.data.service.ITblSensorRecordService; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.core.validate.QueryGroup; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.data.domain.vo.TblSensorVo; import com.ruoyi.data.service.ITblSensorService; import com.ruoyi.common.core.page.TableDataInfo; /** * 传感器列 * * @author ruoyi * @date 2023-12-15 */ @Validated @RequiredArgsConstructor @RestController @RequestMapping("/data/sensor") public class TblSensorController extends BaseController { private final ITblSensorService iTblSensorService; private final ITblDatapointService iTblDatapointService; private final ITblSensorRecordService sensorRecordService; /** * 查询传感器列列表 */ @SaCheckPermission("data:sensor:list") @GetMapping("/list") public TableDataInfo list(TblSensorBo bo, PageQuery pageQuery) { return iTblSensorService.queryPageList(bo, pageQuery); } /** * 导出传感器列列表 */ @SaCheckPermission("data:sensor:export") @Log(title = "传感器列", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(TblSensorBo bo, HttpServletResponse response) { List list = iTblSensorService.queryList(bo); ExcelUtil.exportExcel(list, "传感器列", TblSensorVo.class, response); } /** * 获取传感器列详细信息 * * @param id 主键 */ @SaCheckPermission("data:sensor:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { return R.ok(iTblSensorService.queryById(id)); } /** * 新增传感器列 */ @SaCheckPermission("data:sensor:add") @Log(title = "传感器列", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody TblSensorBo bo) { return toAjax(iTblSensorService.insertByBo(bo)); } /** * 修改传感器列 */ @SaCheckPermission("data:sensor:edit") @Log(title = "传感器列", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() public R edit(@Validated(EditGroup.class) @RequestBody TblSensorBo bo) { return toAjax(iTblSensorService.updateByBo(bo)); } /** * 删除传感器列 * * @param ids 主键串 */ @SaCheckPermission("data:sensor:remove") @Log(title = "传感器列", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { return toAjax(iTblSensorService.deleteWithValidByIds(Arrays.asList(ids), true)); } /** * 获取传感器列详细信息(包含测点数据) * * @param id 主键 */ @SaCheckPermission("data:sensor:query") @GetMapping("/sensorDataPoint/{id}") public R getsensorDataPoint(@NotNull(message = "主键不能为空") @PathVariable Long id) { SensorPoint sensorPoint = new SensorPoint(); TblSensorVo tblSensorVo = iTblSensorService.queryById(id); TblDatapointBo tblDatapointBo = new TblDatapointBo(); List tblDatapointVoList = iTblDatapointService.queryList(tblDatapointBo); sensorPoint.setTblSensorVo(tblSensorVo); List pointDatas = new ArrayList(); JSONArray pointArry = new JSONArray(tblSensorVo.getDatapoints()); for(Object pointObject:pointArry){ JSONObject jsonObject = new JSONObject(pointObject); if(jsonObject.get("dataPointId")!=null){ Long pointId = Long.valueOf((String) jsonObject.get("dataPointId")); for(TblDatapointVo tblDatapointVo:tblDatapointVoList){ if( pointId.longValue() == tblDatapointVo.getId().longValue()) { PointData pointData = new PointData(); pointData.setName((String) jsonObject.get("name")); pointData.setLabel((String) jsonObject.get("label")); pointData.setUnit((String) jsonObject.get("unit")); pointData.setUnitType((String) jsonObject.get("unitType")); pointData.setDataPointInfo(tblDatapointVo); pointDatas.add(pointData); } } }else{ PointData pointData = new PointData(); pointData.setName((String) jsonObject.get("name")); pointData.setLabel((String) jsonObject.get("label")); pointData.setUnit((String) jsonObject.get("unit")); pointData.setUnitType((String) jsonObject.get("unitType")); pointDatas.add(pointData); } } tblSensorVo.setDatapoints(null); sensorPoint.setDataPoints(pointDatas); return R.ok(sensorPoint); // return R.ok(iTblSensorService.queryById(id)); } /** * 根据设备Id查询所有传感器列表 */ @SaCheckPermission("data:sensor:list") @GetMapping("/alllist") public TableDataInfo alllist(TblSensorBo bo, PageQuery pageQuery) { TableDataInfo obj= new TableDataInfo(); List tblSensorVoList = iTblSensorService.queryList(bo); obj.setRows(tblSensorVoList); return obj; } /** * 获取每个设备的实时数据 */ @SaCheckPermission("data:sensor:list") @GetMapping("/sensorRecord") public TableDataInfo getRecord(TblSensorBo bo, PageQuery pageQuery) { TableDataInfo obj= new TableDataInfo(); TableDataInfo sensorVoTableDataInfo = iTblSensorService.queryPageList(bo,pageQuery); List tblSensorVoList = sensorVoTableDataInfo.getRows(); List SensorRecordList = new ArrayList(); for(TblSensorVo tblSensorVo:tblSensorVoList){ SensorRecord sensorRecord = new SensorRecord(); sensorRecord.setTblSensor(tblSensorVo); String jsonData = JSONUtil.parseObj(CacheUtils.get("sensorData",tblSensorVo.getId().toString()),true).toStringPretty() ; sensorRecord.setRecordData(jsonData); SensorRecordList.add(sensorRecord); } obj.setRows(SensorRecordList); obj.setPage(sensorVoTableDataInfo.getPage()); obj.setTotal(sensorVoTableDataInfo.getTotal()); return obj; } }