feat(sensor): 添加传感器设备可视化大屏查询功能

dev_visual_page
zhaokai 2026-07-20 18:01:19 +08:00
parent 3884605533
commit ddef372648
12 changed files with 110 additions and 3 deletions

View File

@ -1,4 +1,4 @@
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-alpha-1 Env/production (2026/5/28 17:15:10) App/iotalarm"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>--</title><script>(function () { <!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-alpha-1 Env/production (2026/7/20 16:12:45) App/iotalarm"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>--</title><script>(function () {
const APP_ENV = { const APP_ENV = {
antd: { antd: {
'ant-prefix': 'micro-temp', 'ant-prefix': 'micro-temp',
@ -20,4 +20,4 @@
redirect: '', redirect: '',
FRAMEWORK: APP_ENV.antd FRAMEWORK: APP_ENV.antd
}; };
})();</script><script defer="defer" src="/iotalarm/static/js/692.af6ab5c0031679cbddc3.js"></script><script defer="defer" src="/iotalarm/static/js/267.5d17f26c6b6d0853e68b.js"></script><script defer="defer" src="/iotalarm/static/js/867.e56a598fea96a2b1b4fa.js"></script><script defer="defer" src="/iotalarm/static/js/main.e1495a14be2402b9ed1a.js"></script><link href="/iotalarm/static/css/main.64b082dca17390b0b36f.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息、构建时间 */console.log("%c@cqsjjb/scripts@2.0.0-alpha-1 Env/production (2026/5/28 17:15:10) App/iotalarm Version/main Java/<branch-name>", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html> })();</script><script defer="defer" src="/iotalarm/static/js/692.e4c4a57a2c2aa063f540.js"></script><script defer="defer" src="/iotalarm/static/js/267.5d17f26c6b6d0853e68b.js"></script><script defer="defer" src="/iotalarm/static/js/867.61aaf372558d5af1f76c.js"></script><script defer="defer" src="/iotalarm/static/js/main.e1495a14be2402b9ed1a.js"></script><link href="/iotalarm/static/css/main.64b082dca17390b0b36f.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息、构建时间 */console.log("%c@cqsjjb/scripts@2.0.0-alpha-1 Env/production (2026/7/20 16:12:45) App/iotalarm Version/main Java/<branch-name>", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>

View File

@ -1 +1 @@
module.exports={javaGit:"<git-url>",javaGitName:"<git-name>",environment:{development:{javaGitBranch:"<branch-name>",API_HOST:"https://gbs-gateway.qhdsafety.com"},production:{javaGitBranch:"<branch-name>",API_HOST:""}},appIdentifier:"iotalarm",contextInject:{appKey:"",fileUrl:"https://jpfz.qhdsafety.com/gbsFileTest/"},windowInject:{title:"微应用模板",links:[],element:{root:{id:"root"}},scripts:[]},server:{port:"8088",host:"127.0.0.1",open:!0},framework:{antd:{"ant-prefix":"micro-temp",fontFamily:"PingFangSC-Regular",colorPrimary:"#1677ff",borderRadius:2}},webpackConfig:{htmlWebpackPluginOption:{inject:!0}}}; module.exports={javaGit:"<git-url>",javaGitName:"<git-name>",environment:{development:{javaGitBranch:"<branch-name>",API_HOST:"https://gbs-gateway.qhdsafety.com"},production:{javaGitBranch:"<branch-name>",API_HOST:""}},appIdentifier:"iotalarm",contextInject:{appKey:"",fileUrl:""},windowInject:{title:"微应用模板",links:[],element:{root:{id:"root"}},scripts:[]},server:{port:"8088",host:"127.0.0.1",open:!0},framework:{antd:{"ant-prefix":"micro-temp",fontFamily:"PingFangSC-Regular",colorPrimary:"#1677ff",borderRadius:2}},webpackConfig:{htmlWebpackPluginOption:{inject:!0}}};

View File

@ -5,6 +5,7 @@ import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.api.SensorDeviceServiceI; import com.zcloud.api.SensorDeviceServiceI;
import com.zcloud.dto.*; import com.zcloud.dto.*;
import com.zcloud.dto.clientobject.SensorDeviceCO; import com.zcloud.dto.clientobject.SensorDeviceCO;
import com.zcloud.dto.clientobject.SensorDeviceScreenCO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -87,4 +88,10 @@ public class SensorDeviceController {
public SingleResponse<SensorDeviceCO> info(@PathVariable("id") Long id) { public SingleResponse<SensorDeviceCO> info(@PathVariable("id") Long id) {
return sensorDeviceService.info(id); return sensorDeviceService.info(id);
} }
@ApiOperation("可视化大屏-传感器设备查询")
@PostMapping("/screenList")
public PageResponse<SensorDeviceScreenCO> screenList(@Validated @RequestBody SensorDeviceScreenQry qry) {
return sensorDeviceService.screenList(qry);
}
} }

View File

@ -5,7 +5,9 @@ import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse; import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.dto.SensorDevicePageQry; import com.zcloud.dto.SensorDevicePageQry;
import com.zcloud.dto.SensorDeviceScreenQry;
import com.zcloud.dto.clientobject.SensorDeviceCO; import com.zcloud.dto.clientobject.SensorDeviceCO;
import com.zcloud.dto.clientobject.SensorDeviceScreenCO;
import com.zcloud.gbscommon.utils.PageQueryHelper; import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.persistence.dataobject.SensorDeviceDO; import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.repository.SensorDeviceRepository; import com.zcloud.persistence.repository.SensorDeviceRepository;
@ -34,6 +36,12 @@ public class SensorDeviceQueryExe {
List<SensorDeviceCO> sensorDeviceCOs = BeanUtil.copyToList(pageResponse.getData(), SensorDeviceCO.class); List<SensorDeviceCO> sensorDeviceCOs = BeanUtil.copyToList(pageResponse.getData(), SensorDeviceCO.class);
return PageResponse.of(sensorDeviceCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex()); return PageResponse.of(sensorDeviceCOs, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
} }
public PageResponse<SensorDeviceScreenCO> screenList(SensorDeviceScreenQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
PageResponse<SensorDeviceScreenCO> pageResponse = sensorDeviceRepository.screenList(params);
return PageResponse.of(pageResponse.getData(), pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
public SingleResponse<SensorDeviceCO> getById(Long id) { public SingleResponse<SensorDeviceCO> getById(Long id) {
SensorDeviceDO d = sensorDeviceRepository.getById(id); SensorDeviceDO d = sensorDeviceRepository.getById(id);

View File

@ -11,6 +11,7 @@ import com.zcloud.command.query.SensorDeviceQueryExe;
import com.zcloud.command.SensorDeviceAddExe; import com.zcloud.command.SensorDeviceAddExe;
import com.zcloud.dto.*; import com.zcloud.dto.*;
import com.zcloud.dto.clientobject.SensorDeviceCO; import com.zcloud.dto.clientobject.SensorDeviceCO;
import com.zcloud.dto.clientobject.SensorDeviceScreenCO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -30,6 +31,11 @@ public class SensorDeviceServiceImpl implements SensorDeviceServiceI {
return sensorDeviceQueryExe.execute(qry); return sensorDeviceQueryExe.execute(qry);
} }
@Override
public PageResponse<SensorDeviceScreenCO> screenList(SensorDeviceScreenQry qry) {
return sensorDeviceQueryExe.screenList(qry);
}
@Override @Override
public SingleResponse add(SensorDeviceAddCmd cmd) { public SingleResponse add(SensorDeviceAddCmd cmd) {
sensorDeviceAddExe.execute(cmd); sensorDeviceAddExe.execute(cmd);

View File

@ -4,6 +4,7 @@ import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse; import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.dto.*; import com.zcloud.dto.*;
import com.zcloud.dto.clientobject.SensorDeviceCO; import com.zcloud.dto.clientobject.SensorDeviceCO;
import com.zcloud.dto.clientobject.SensorDeviceScreenCO;
/** /**
* SensorDeviceServiceI - * SensorDeviceServiceI -
@ -19,6 +20,8 @@ public interface SensorDeviceServiceI {
*/ */
PageResponse<SensorDeviceCO> listPage(SensorDevicePageQry qry); PageResponse<SensorDeviceCO> listPage(SensorDevicePageQry qry);
PageResponse<SensorDeviceScreenCO> screenList(SensorDeviceScreenQry qry);
/** /**
* *
* @param cmd * @param cmd

View File

@ -0,0 +1,28 @@
package com.zcloud.dto;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.AssertTrue;
/**
*
*
* @Author wangyan
* @Date 2026-07-20
*/
@Data
public class SensorDeviceScreenQry extends PageQuery {
@ApiModelProperty(value = "企业id", name = "corpinfoId")
private Long corpinfoId;
@ApiModelProperty(value = "港区1:秦皇岛港区,2:秦皇岛东,3:秦皇岛西", name = "portArea")
private Integer portArea;
@AssertTrue(message = "企业id和港区至少传一个")
public boolean isCorpinfoIdOrPortAreaPresent() {
return corpinfoId != null || portArea != null;
}
}

View File

@ -0,0 +1,19 @@
package com.zcloud.dto.clientobject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @Author wangyan
* @Date 2026-07-20
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class SensorDeviceScreenCO extends SensorDeviceCO {
@ApiModelProperty(value = "企业名称")
private String corpName;
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.datascope.annotation.DataScope; import com.jjb.saas.framework.datascope.annotation.DataScope;
import com.jjb.saas.framework.datascope.annotation.DataScopes; import com.jjb.saas.framework.datascope.annotation.DataScopes;
import com.zcloud.dto.clientobject.SensorDeviceScreenCO;
import com.zcloud.persistence.dataobject.SensorDeviceDO; import com.zcloud.persistence.dataobject.SensorDeviceDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -23,4 +24,6 @@ import java.util.Map;
public interface SensorDeviceMapper extends BaseMapper<SensorDeviceDO> { public interface SensorDeviceMapper extends BaseMapper<SensorDeviceDO> {
IPage<SensorDeviceDO> listPage(IPage<SensorDeviceDO> page, @Param("params") Map<String, Object> params, @Param("menuPerms") String menuPerms); IPage<SensorDeviceDO> listPage(IPage<SensorDeviceDO> page, @Param("params") Map<String, Object> params, @Param("menuPerms") String menuPerms);
IPage<SensorDeviceScreenCO> screenList(IPage<SensorDeviceScreenCO> page, @Param("params") Map<String, Object> params);
} }

View File

@ -2,6 +2,7 @@ package com.zcloud.persistence.repository;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository; import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.dto.clientobject.SensorDeviceScreenCO;
import com.zcloud.persistence.dataobject.SensorDeviceDO; import com.zcloud.persistence.dataobject.SensorDeviceDO;
import java.util.Map; import java.util.Map;
@ -14,4 +15,6 @@ import java.util.Map;
public interface SensorDeviceRepository extends BaseRepository<SensorDeviceDO> { public interface SensorDeviceRepository extends BaseRepository<SensorDeviceDO> {
PageResponse<SensorDeviceDO> listPage(Map<String, Object> params); PageResponse<SensorDeviceDO> listPage(Map<String, Object> params);
PageResponse<SensorDeviceScreenCO> screenList(Map<String, Object> params);
} }

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.common.PageHelper; import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl; import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.domain.enums.MenuEnum; import com.zcloud.domain.enums.MenuEnum;
import com.zcloud.dto.clientobject.SensorDeviceScreenCO;
import com.zcloud.persistence.dataobject.SensorDeviceDO; import com.zcloud.persistence.dataobject.SensorDeviceDO;
import com.zcloud.persistence.mapper.SensorDeviceMapper; import com.zcloud.persistence.mapper.SensorDeviceMapper;
import com.zcloud.persistence.repository.SensorDeviceRepository; import com.zcloud.persistence.repository.SensorDeviceRepository;
@ -35,4 +36,11 @@ public class SensorDeviceRepositoryImpl extends BaseRepositoryImpl<SensorDeviceM
IPage<SensorDeviceDO> result = sensorDeviceMapper.listPage(page, params, menuPerms); IPage<SensorDeviceDO> result = sensorDeviceMapper.listPage(page, params, menuPerms);
return PageHelper.pageToResponse(result, result.getRecords()); return PageHelper.pageToResponse(result, result.getRecords());
} }
@Override
public PageResponse<SensorDeviceScreenCO> screenList(Map<String, Object> params) {
IPage<SensorDeviceScreenCO> page = new Query<SensorDeviceScreenCO>().getPage(params);
IPage<SensorDeviceScreenCO> result = sensorDeviceMapper.screenList(page, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
} }

View File

@ -35,4 +35,26 @@
</where> </where>
ORDER BY CASE WHEN sd.sensor_status = 'NORMAL' AND sd.alarm_switch = 1 THEN 0 ELSE 1 END, sd.create_time DESC ORDER BY CASE WHEN sd.sensor_status = 'NORMAL' AND sd.alarm_switch = 1 THEN 0 ELSE 1 END, sd.create_time DESC
</select> </select>
<select id="screenList" resultType="com.zcloud.dto.clientobject.SensorDeviceScreenCO">
SELECT DISTINCT
sd.*,
st.type_name AS sensorTypeName,
rel.fire_region_id AS fireRegionId,
ci.corp_name AS corpName
FROM iot_alarm_sensor_device sd
LEFT JOIN iot_alarm_region_sensor_rel rel ON rel.sensor_device_id = sd.sensor_device_id AND rel.delete_enum = 'FALSE'
LEFT JOIN iot_alarm_sensor_type st ON sd.sensor_type_id = st.id AND st.delete_enum = 'FALSE'
LEFT JOIN corp_info ci ON sd.tenant_id = ci.id
<where>
sd.delete_enum = 'FALSE' and ci.delete_enum = 'FALSE'
<if test="params.corpinfoId != null">
AND ci.id = #{params.corpinfoId}
</if>
<if test="params.portArea != null">
AND ci.port_area = #{params.portArea}
</if>
</where>
ORDER BY CASE WHEN sd.sensor_status = 'NORMAL' AND sd.alarm_switch = 1 THEN 0 ELSE 1 END, sd.create_time DESC
</select>
</mapper> </mapper>