diff --git a/yanzhu-common/yanzhu-common-core/pom.xml b/yanzhu-common/yanzhu-common-core/pom.xml index ee2b6685..39824f17 100644 --- a/yanzhu-common/yanzhu-common-core/pom.xml +++ b/yanzhu-common/yanzhu-common-core/pom.xml @@ -41,6 +41,11 @@ spring-web + + org.springframework + spring-test + + com.alibaba diff --git a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/constant/CacheConstants.java b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/constant/CacheConstants.java index 74c29b50..719cb2b7 100644 --- a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/constant/CacheConstants.java +++ b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/constant/CacheConstants.java @@ -78,5 +78,10 @@ public class CacheConstants */ public static final String PRO_PROJECT = "pro_project:"; + /** + * Ai视频配置 cache key + */ + public static final String DEV_AI_CONFIG = "dev_ai_config:"; + public static final String UNI_AUTH = "pro_project_uni_auth3:"; } diff --git a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/file/MultipartFileUtils.java b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/file/MultipartFileUtils.java new file mode 100644 index 00000000..f005328b --- /dev/null +++ b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/file/MultipartFileUtils.java @@ -0,0 +1,33 @@ +package com.yanzhu.common.core.utils.file; + +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.Base64; + +/** + * JiangYuQi + */ +public class MultipartFileUtils { + + /** + * 换为Base64为文件 + * @param + * @return + */ + public static MultipartFile base64ToMultipartFile(String base64) throws IOException { + String[] parts = base64.split(","); + if(parts.length>1){ + String contentType = parts[0].split(";")[0].split(":")[1]; + byte[] bytes = Base64.getDecoder().decode(parts[1]); + return new MockMultipartFile("file","file."+contentType.split("/")[1], contentType, bytes); + }else{ + //默认格式为jpeg + String contentType = "image/jpeg"; + byte[] bytes = Base64.getDecoder().decode(base64); + return new MockMultipartFile("file", "file"+contentType.split("/")[1], contentType, bytes); + } + } + +} diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/DevAiProjectConfig.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/DevAiProjectConfig.java new file mode 100644 index 00000000..4237620c --- /dev/null +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/DevAiProjectConfig.java @@ -0,0 +1,164 @@ +package com.yanzhu.manage.domain; + +import com.yanzhu.common.core.annotation.Excel; +import com.yanzhu.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * AI设备配置对象 dev_ai_project_config + * + * @author JiangYuQi + * @date 2025-02-26 + */ +public class DevAiProjectConfig extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 公司主键 */ + @Excel(name = "公司主键") + private Long comId; + + /** 公司名称 */ + @Excel(name = "公司名称") + private String comName; + + /** 项目主键 */ + @Excel(name = "项目主键") + private Long projectId; + + /** 项目名称 */ + @Excel(name = "项目名称") + private String projectName; + + /** 设备名称 */ + @Excel(name = "设备名称") + private String deviceName; + + /** 设备序列号 */ + @Excel(name = "设备序列号") + private String serialNumber; + + /** 厂商名称 */ + @Excel(name = "厂商名称") + private String manufacturer; + + /** 通道类型 */ + @Excel(name = "通道类型") + private String passageType; + + /** 数据状态 */ + @Excel(name = "数据状态") + private Long isDel; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setComId(Long comId) + { + this.comId = comId; + } + + public Long getComId() + { + return comId; + } + public void setProjectId(Long projectId) + { + this.projectId = projectId; + } + + public Long getProjectId() + { + return projectId; + } + public void setDeviceName(String deviceName) + { + this.deviceName = deviceName; + } + + public String getDeviceName() + { + return deviceName; + } + public void setSerialNumber(String serialNumber) + { + this.serialNumber = serialNumber; + } + + public String getSerialNumber() + { + return serialNumber; + } + public void setManufacturer(String manufacturer) + { + this.manufacturer = manufacturer; + } + + public String getManufacturer() + { + return manufacturer; + } + public void setPassageType(String passageType) + { + this.passageType = passageType; + } + + public String getPassageType() + { + return passageType; + } + public void setIsDel(Long isDel) + { + this.isDel = isDel; + } + + public Long getIsDel() + { + return isDel; + } + + public String getComName() { + return comName; + } + + public void setComName(String comName) { + this.comName = comName; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("comId", getComId()) + .append("projectId", getProjectId()) + .append("deviceName", getDeviceName()) + .append("serialNumber", getSerialNumber()) + .append("manufacturer", getManufacturer()) + .append("passageType", getPassageType()) + .append("isDel", getIsDel()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/DevAiProjectData.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/DevAiProjectData.java new file mode 100644 index 00000000..ecbd93b2 --- /dev/null +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/DevAiProjectData.java @@ -0,0 +1,401 @@ +package com.yanzhu.manage.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yanzhu.common.core.annotation.Excel; +import com.yanzhu.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * AI设备数据对象 dev_ai_project_data + * + * @author JiangYuQi + * @date 2025-02-26 + */ +public class DevAiProjectData extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 公司主键 */ + @Excel(name = "公司主键") + private Long comId; + + /** 公司名称 */ + @Excel(name = "公司名称") + private String comName; + + /** 项目主键 */ + @Excel(name = "项目主键") + private Long projectId; + + /** 项目名称 */ + @Excel(name = "项目名称") + private String projectName; + + /** 设备ID */ + @Excel(name = "设备ID") + private Long deviceId; + + /** 设备名称 */ + @Excel(name = "设备名称") + private String deviceName; + + /** 设备的序列号 */ + @Excel(name = "设备的序列号") + private String serialNumber; + + /** 相机的序列号 */ + @Excel(name = "相机的序列号") + private String ipcSerialNum; + + /** 行为分析图片地址 */ + @Excel(name = "行为分析图片地址") + private String imageUrl; + + /** 通道号,用来唯一标识任务 ID */ + @Excel(name = "通道号,用来唯一标识任务 ID") + private Long channelId; + + /** 通道名称 */ + @Excel(name = "通道名称") + private String channelName; + + /** 报警类型 */ + @Excel(name = "报警类型") + private Long alarmType; + + /** 告警 ID */ + @Excel(name = "告警 ID") + private Long alarmId; + + /** 左上角 X 坐标 */ + @Excel(name = "左上角 X 坐标") + private String leftTopX; + + /** 左上角 Y 坐标 */ + @Excel(name = "左上角 Y 坐标") + private String leftTopY; + + /** 右下角 X 坐标 */ + @Excel(name = "右下角 X 坐标") + private String rightBtmX; + + /** 右下角 Y 坐标 */ + @Excel(name = "右下角 Y 坐标") + private String rightBtmY; + + /** 当前告警区域人数 */ + @Excel(name = "当前告警区域人数") + private Long personNum; + + /** 绊线进入人数数量 */ + @Excel(name = "绊线进入人数数量") + private Long inNum; + + /** 绊线离开人数数量 */ + @Excel(name = "绊线离开人数数量") + private Long outNum; + + /** 车牌号 */ + @Excel(name = "车牌号") + private Long plateNo; + + /** ValueType 为 1 时,代表明火检测;ValueType 为 2 时,代表烟雾检测; */ + @Excel(name = "ValueType 为 1 时,代表明火检测;ValueType 为 2 时,代表烟雾检测;") + private String valueType; + + /** 告警短视频的地址 */ + @Excel(name = "告警短视频的地址") + private String alarmVideourl; + + /** 告警短视频的名称 */ + @Excel(name = "告警短视频的名称") + private String alarmVideoName; + + /** 人脸比对结果 */ + @Excel(name = "人脸比对结果") + private String compareResult; + + /** 数据状态 */ + @Excel(name = "数据状态") + private Long isDel; + + public String getComName() { + return comName; + } + + public void setComName(String comName) { + this.comName = comName; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setComId(Long comId) + { + this.comId = comId; + } + + public Long getComId() + { + return comId; + } + public void setProjectId(Long projectId) + { + this.projectId = projectId; + } + + public Long getProjectId() + { + return projectId; + } + public void setDeviceId(Long deviceId) + { + this.deviceId = deviceId; + } + + public Long getDeviceId() + { + return deviceId; + } + public void setDeviceName(String deviceName) + { + this.deviceName = deviceName; + } + + public String getDeviceName() + { + return deviceName; + } + public void setSerialNumber(String serialNumber) + { + this.serialNumber = serialNumber; + } + + public String getSerialNumber() + { + return serialNumber; + } + public void setIpcSerialNum(String ipcSerialNum) + { + this.ipcSerialNum = ipcSerialNum; + } + + public String getIpcSerialNum() + { + return ipcSerialNum; + } + public void setImageUrl(String imageUrl) + { + this.imageUrl = imageUrl; + } + + public String getImageUrl() + { + return imageUrl; + } + public void setChannelId(Long channelId) + { + this.channelId = channelId; + } + + public Long getChannelId() + { + return channelId; + } + public void setChannelName(String channelName) + { + this.channelName = channelName; + } + + public String getChannelName() + { + return channelName; + } + public void setAlarmType(Long alarmType) + { + this.alarmType = alarmType; + } + + public Long getAlarmType() + { + return alarmType; + } + public void setAlarmId(Long alarmId) + { + this.alarmId = alarmId; + } + + public Long getAlarmId() + { + return alarmId; + } + public void setLeftTopX(String leftTopX) + { + this.leftTopX = leftTopX; + } + + public String getLeftTopX() + { + return leftTopX; + } + public void setLeftTopY(String leftTopY) + { + this.leftTopY = leftTopY; + } + + public String getLeftTopY() + { + return leftTopY; + } + public void setRightBtmX(String rightBtmX) + { + this.rightBtmX = rightBtmX; + } + + public String getRightBtmX() + { + return rightBtmX; + } + public void setRightBtmY(String rightBtmY) + { + this.rightBtmY = rightBtmY; + } + + public String getRightBtmY() + { + return rightBtmY; + } + public void setPersonNum(Long personNum) + { + this.personNum = personNum; + } + + public Long getPersonNum() + { + return personNum; + } + public void setInNum(Long inNum) + { + this.inNum = inNum; + } + + public Long getInNum() + { + return inNum; + } + public void setOutNum(Long outNum) + { + this.outNum = outNum; + } + + public Long getOutNum() + { + return outNum; + } + public void setPlateNo(Long plateNo) + { + this.plateNo = plateNo; + } + + public Long getPlateNo() + { + return plateNo; + } + public void setValueType(String valueType) + { + this.valueType = valueType; + } + + public String getValueType() + { + return valueType; + } + public void setAlarmVideourl(String alarmVideourl) + { + this.alarmVideourl = alarmVideourl; + } + + public String getAlarmVideourl() + { + return alarmVideourl; + } + public void setAlarmVideoName(String alarmVideoName) + { + this.alarmVideoName = alarmVideoName; + } + + public String getAlarmVideoName() + { + return alarmVideoName; + } + public void setCompareResult(String compareResult) + { + this.compareResult = compareResult; + } + + public String getCompareResult() + { + return compareResult; + } + public void setIsDel(Long isDel) + { + this.isDel = isDel; + } + + public Long getIsDel() + { + return isDel; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("comId", getComId()) + .append("projectId", getProjectId()) + .append("deviceId", getDeviceId()) + .append("deviceName", getDeviceName()) + .append("serialNumber", getSerialNumber()) + .append("ipcSerialNum", getIpcSerialNum()) + .append("imageUrl", getImageUrl()) + .append("channelId", getChannelId()) + .append("channelName", getChannelName()) + .append("alarmType", getAlarmType()) + .append("alarmId", getAlarmId()) + .append("leftTopX", getLeftTopX()) + .append("leftTopY", getLeftTopY()) + .append("rightBtmX", getRightBtmX()) + .append("rightBtmY", getRightBtmY()) + .append("personNum", getPersonNum()) + .append("inNum", getInNum()) + .append("outNum", getOutNum()) + .append("plateNo", getPlateNo()) + .append("valueType", getValueType()) + .append("alarmVideourl", getAlarmVideourl()) + .append("alarmVideoName", getAlarmVideoName()) + .append("compareResult", getCompareResult()) + .append("createTime", getCreateTime()) + .append("isDel", getIsDel()) + .toString(); + } +} diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/DevAiProjectConfigMapper.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/DevAiProjectConfigMapper.java new file mode 100644 index 00000000..bb0fa71c --- /dev/null +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/DevAiProjectConfigMapper.java @@ -0,0 +1,61 @@ +package com.yanzhu.manage.mapper; + +import java.util.List; +import com.yanzhu.manage.domain.DevAiProjectConfig; + +/** + * AI设备配置Mapper接口 + * + * @author JiangYuQi + * @date 2025-02-26 + */ +public interface DevAiProjectConfigMapper +{ + /** + * 查询AI设备配置 + * + * @param id AI设备配置主键 + * @return AI设备配置 + */ + public DevAiProjectConfig selectDevAiProjectConfigById(Long id); + + /** + * 查询AI设备配置列表 + * + * @param devAiProjectConfig AI设备配置 + * @return AI设备配置集合 + */ + public List selectDevAiProjectConfigList(DevAiProjectConfig devAiProjectConfig); + + /** + * 新增AI设备配置 + * + * @param devAiProjectConfig AI设备配置 + * @return 结果 + */ + public int insertDevAiProjectConfig(DevAiProjectConfig devAiProjectConfig); + + /** + * 修改AI设备配置 + * + * @param devAiProjectConfig AI设备配置 + * @return 结果 + */ + public int updateDevAiProjectConfig(DevAiProjectConfig devAiProjectConfig); + + /** + * 删除AI设备配置 + * + * @param id AI设备配置主键 + * @return 结果 + */ + public int deleteDevAiProjectConfigById(Long id); + + /** + * 批量删除AI设备配置 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteDevAiProjectConfigByIds(Long[] ids); +} diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/DevAiProjectDataMapper.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/DevAiProjectDataMapper.java new file mode 100644 index 00000000..797e1d4f --- /dev/null +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/DevAiProjectDataMapper.java @@ -0,0 +1,61 @@ +package com.yanzhu.manage.mapper; + +import java.util.List; +import com.yanzhu.manage.domain.DevAiProjectData; + +/** + * AI设备数据Mapper接口 + * + * @author JiangYuQi + * @date 2025-02-26 + */ +public interface DevAiProjectDataMapper +{ + /** + * 查询AI设备数据 + * + * @param id AI设备数据主键 + * @return AI设备数据 + */ + public DevAiProjectData selectDevAiProjectDataById(Long id); + + /** + * 查询AI设备数据列表 + * + * @param devAiProjectData AI设备数据 + * @return AI设备数据集合 + */ + public List selectDevAiProjectDataList(DevAiProjectData devAiProjectData); + + /** + * 新增AI设备数据 + * + * @param devAiProjectData AI设备数据 + * @return 结果 + */ + public int insertDevAiProjectData(DevAiProjectData devAiProjectData); + + /** + * 修改AI设备数据 + * + * @param devAiProjectData AI设备数据 + * @return 结果 + */ + public int updateDevAiProjectData(DevAiProjectData devAiProjectData); + + /** + * 删除AI设备数据 + * + * @param id AI设备数据主键 + * @return 结果 + */ + public int deleteDevAiProjectDataById(Long id); + + /** + * 批量删除AI设备数据 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteDevAiProjectDataByIds(Long[] ids); +} diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/DevAiProjectConfigMapper.xml b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/DevAiProjectConfigMapper.xml new file mode 100644 index 00000000..c670edd3 --- /dev/null +++ b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/DevAiProjectConfigMapper.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + select dac.id, dac.com_id, sd.dept_name as com_name, dac.project_id, pi.project_name, dac.device_name, dac.serial_number, dac.manufacturer, dac.passage_type, dac.is_del, dac.create_by, dac.create_time, dac.update_by, dac.update_time, dac.remark from dev_ai_project_config dac + left join pro_project_info pi on pi.id = dac.project_id + left join sys_dept sd on sd.dept_id = dac.com_id + + + + + + + + insert into dev_ai_project_config + + com_id, + project_id, + device_name, + serial_number, + manufacturer, + passage_type, + is_del, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{comId}, + #{projectId}, + #{deviceName}, + #{serialNumber}, + #{manufacturer}, + #{passageType}, + #{isDel}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update dev_ai_project_config + + com_id = #{comId}, + project_id = #{projectId}, + device_name = #{deviceName}, + serial_number = #{serialNumber}, + manufacturer = #{manufacturer}, + passage_type = #{passageType}, + is_del = #{isDel}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + update dev_ai_project_config set is_del = 2 where id = #{id} + + + + update dev_ai_project_config set is_del = 2 where id in + + #{id} + + + \ No newline at end of file diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/DevAiProjectDataMapper.xml b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/DevAiProjectDataMapper.xml new file mode 100644 index 00000000..d8c9513c --- /dev/null +++ b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/DevAiProjectDataMapper.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select dapd.id, dapd.com_id, sd.dept_name as com_name, dapd.project_id, pi.project_name, dapd.device_id, dapd.device_name, dapd.serial_number, dapd.IPC_serial_num, dapd.image_url, dapd.channel_id, dapd.channel_name, dapd.alarm_type, dapd.alarm_id, dapd.left_top_x, dapd.left_top_y, dapd.right_btm_x, dapd.right_btm_y, dapd.person_num, dapd.in_num, dapd.out_num, dapd.plate_no, dapd.value_type, dapd.alarm_videoURL, dapd.alarm_video_name, dapd.compare_result, dapd.create_time, dapd.is_del from dev_ai_project_data dapd + left join pro_project_info pi on pi.id = dapd.project_id + left join sys_dept sd on sd.dept_id = dapd.com_id + + + + + + + + insert into dev_ai_project_data + + com_id, + project_id, + device_id, + device_name, + serial_number, + IPC_serial_num, + image_url, + channel_id, + channel_name, + alarm_type, + alarm_id, + left_top_x, + left_top_y, + right_btm_x, + right_btm_y, + person_num, + in_num, + out_num, + plate_no, + value_type, + alarm_videoURL, + alarm_video_name, + compare_result, + create_time, + is_del, + + + #{comId}, + #{projectId}, + #{deviceId}, + #{deviceName}, + #{serialNumber}, + #{ipcSerialNum}, + #{imageUrl}, + #{channelId}, + #{channelName}, + #{alarmType}, + #{alarmId}, + #{leftTopX}, + #{leftTopY}, + #{rightBtmX}, + #{rightBtmY}, + #{personNum}, + #{inNum}, + #{outNum}, + #{plateNo}, + #{valueType}, + #{alarmVideourl}, + #{alarmVideoName}, + #{compareResult}, + #{createTime}, + #{isDel}, + + + + + update dev_ai_project_data + + com_id = #{comId}, + project_id = #{projectId}, + device_id = #{deviceId}, + device_name = #{deviceName}, + serial_number = #{serialNumber}, + IPC_serial_num = #{ipcSerialNum}, + image_url = #{imageUrl}, + channel_id = #{channelId}, + channel_name = #{channelName}, + alarm_type = #{alarmType}, + alarm_id = #{alarmId}, + left_top_x = #{leftTopX}, + left_top_y = #{leftTopY}, + right_btm_x = #{rightBtmX}, + right_btm_y = #{rightBtmY}, + person_num = #{personNum}, + in_num = #{inNum}, + out_num = #{outNum}, + plate_no = #{plateNo}, + value_type = #{valueType}, + alarm_videoURL = #{alarmVideourl}, + alarm_video_name = #{alarmVideoName}, + compare_result = #{compareResult}, + create_time = #{createTime}, + is_del = #{isDel}, + + where id = #{id} + + + + update dev_ai_project_data set is_del = 2 where id = #{id} + + + + update dev_ai_project_data set is_del = 2 where id in + + #{id} + + + \ No newline at end of file diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/DevAiProjectConfigController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/DevAiProjectConfigController.java new file mode 100644 index 00000000..196009bd --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/DevAiProjectConfigController.java @@ -0,0 +1,98 @@ +package com.yanzhu.manage.controller; + +import com.yanzhu.common.core.utils.poi.ExcelUtil; +import com.yanzhu.common.core.web.controller.BaseController; +import com.yanzhu.common.core.web.domain.AjaxResult; +import com.yanzhu.common.core.web.page.TableDataInfo; +import com.yanzhu.common.log.annotation.Log; +import com.yanzhu.common.log.enums.BusinessType; +import com.yanzhu.common.security.annotation.RequiresPermissions; +import com.yanzhu.manage.domain.DevAiProjectConfig; +import com.yanzhu.manage.service.IDevAiProjectConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * AI设备配置Controller + * + * @author JiangYuQi + * @date 2025-02-26 + */ +@RestController +@RequestMapping("/devAiProjectConfig") +public class DevAiProjectConfigController extends BaseController +{ + @Autowired + private IDevAiProjectConfigService devAiProjectConfigService; + + /** + * 查询AI设备配置列表 + */ + @RequiresPermissions("manage:devAiProjectConfig:list") + @GetMapping("/list") + public TableDataInfo list(DevAiProjectConfig devAiProjectConfig) + { + startPage(); + List list = devAiProjectConfigService.selectDevAiProjectConfigList(devAiProjectConfig); + return getDataTable(list); + } + + /** + * 导出AI设备配置列表 + */ + @RequiresPermissions("manage:devAiProjectConfig:export") + @Log(title = "AI设备配置", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, DevAiProjectConfig devAiProjectConfig) + { + List list = devAiProjectConfigService.selectDevAiProjectConfigList(devAiProjectConfig); + ExcelUtil util = new ExcelUtil(DevAiProjectConfig.class); + util.exportExcel(response, list, "AI设备配置数据"); + } + + /** + * 获取AI设备配置详细信息 + */ + @RequiresPermissions("manage:devAiProjectConfig:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(devAiProjectConfigService.selectDevAiProjectConfigById(id)); + } + + /** + * 新增AI设备配置 + */ + @RequiresPermissions("manage:devAiProjectConfig:add") + @Log(title = "AI设备配置", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody DevAiProjectConfig devAiProjectConfig) + { + return toAjax(devAiProjectConfigService.insertDevAiProjectConfig(devAiProjectConfig)); + } + + /** + * 修改AI设备配置 + */ + @RequiresPermissions("manage:devAiProjectConfig:edit") + @Log(title = "AI设备配置", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody DevAiProjectConfig devAiProjectConfig) + { + return toAjax(devAiProjectConfigService.updateDevAiProjectConfig(devAiProjectConfig)); + } + + /** + * 删除AI设备配置 + */ + @RequiresPermissions("manage:devAiProjectConfig:remove") + @Log(title = "AI设备配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(devAiProjectConfigService.deleteDevAiProjectConfigByIds(ids)); + } +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/DevAiProjectDataController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/DevAiProjectDataController.java new file mode 100644 index 00000000..08e36f8e --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/DevAiProjectDataController.java @@ -0,0 +1,98 @@ +package com.yanzhu.manage.controller; + +import com.yanzhu.common.core.utils.poi.ExcelUtil; +import com.yanzhu.common.core.web.controller.BaseController; +import com.yanzhu.common.core.web.domain.AjaxResult; +import com.yanzhu.common.core.web.page.TableDataInfo; +import com.yanzhu.common.log.annotation.Log; +import com.yanzhu.common.log.enums.BusinessType; +import com.yanzhu.common.security.annotation.RequiresPermissions; +import com.yanzhu.manage.domain.DevAiProjectData; +import com.yanzhu.manage.service.IDevAiProjectDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * AI设备数据Controller + * + * @author JiangYuQi + * @date 2025-02-26 + */ +@RestController +@RequestMapping("/devAiProjectData") +public class DevAiProjectDataController extends BaseController +{ + @Autowired + private IDevAiProjectDataService devAiProjectDataService; + + /** + * 查询AI设备数据列表 + */ + @RequiresPermissions("manage:devAiProjectData:list") + @GetMapping("/list") + public TableDataInfo list(DevAiProjectData devAiProjectData) + { + startPage(); + List list = devAiProjectDataService.selectDevAiProjectDataList(devAiProjectData); + return getDataTable(list); + } + + /** + * 导出AI设备数据列表 + */ + @RequiresPermissions("manage:devAiProjectData:export") + @Log(title = "AI设备数据", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, DevAiProjectData devAiProjectData) + { + List list = devAiProjectDataService.selectDevAiProjectDataList(devAiProjectData); + ExcelUtil util = new ExcelUtil(DevAiProjectData.class); + util.exportExcel(response, list, "AI设备数据数据"); + } + + /** + * 获取AI设备数据详细信息 + */ + @RequiresPermissions("manage:devAiProjectData:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(devAiProjectDataService.selectDevAiProjectDataById(id)); + } + + /** + * 新增AI设备数据 + */ + @RequiresPermissions("manage:devAiProjectData:add") + @Log(title = "AI设备数据", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody DevAiProjectData devAiProjectData) + { + return toAjax(devAiProjectDataService.insertDevAiProjectData(devAiProjectData)); + } + + /** + * 修改AI设备数据 + */ + @RequiresPermissions("manage:devAiProjectData:edit") + @Log(title = "AI设备数据", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody DevAiProjectData devAiProjectData) + { + return toAjax(devAiProjectDataService.updateDevAiProjectData(devAiProjectData)); + } + + /** + * 删除AI设备数据 + */ + @RequiresPermissions("manage:devAiProjectData:remove") + @Log(title = "AI设备数据", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(devAiProjectDataService.deleteDevAiProjectDataByIds(ids)); + } +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/wechat/DevAiBoxController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/wechat/DevAiBoxController.java new file mode 100644 index 00000000..f42289d1 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/wechat/DevAiBoxController.java @@ -0,0 +1,71 @@ +package com.yanzhu.manage.controller.wechat; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yanzhu.common.core.annotation.RateLimiter; +import com.yanzhu.common.core.enums.LimitType; +import com.yanzhu.common.core.web.controller.BaseController; +import com.yanzhu.manage.domain.DevAiProjectDataVO; +import com.yanzhu.manage.domain.DevBwAiProjectDataVO; +import com.yanzhu.manage.service.IDevAiProjectDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +/** + * 项目信息Controller + * + * @author JiangYuQi + * @date 2024-08-25 + */ +@RestController +@RequestMapping("/devApi") +public class DevAiBoxController extends BaseController { + + @Autowired + private IDevAiProjectDataService devAiProjectDataService; + + private static final Logger logger = LoggerFactory.getLogger("DevAiBoxController"); + + /** + * aibox推送预警数据【博观】 + */ + @PostMapping("/v1/push") + @RateLimiter(count = 10, limitType = LimitType.IP) + public void boGuanPush(@RequestBody Map dataMap) + { + try{ + List> list = (List>)dataMap.get("BehaviorResults"); + if(list!=null && list.size()>0){ + DevAiProjectDataVO devAiProjectDataVO = JSON.parseObject(JSONObject.toJSONString(list.get(0)), DevAiProjectDataVO.class); + devAiProjectDataService.insertHttpDevAiProjectData(devAiProjectDataVO); + } + }catch (Exception e){ + logger.info("BG...AiBox解析参数失败!!!"); + e.printStackTrace(); + } + + } + + /** + * aibox推送预警数据【博瓦】 + */ + @PostMapping("/v2/push") + public void boWaPush(@RequestBody DevBwAiProjectDataVO data) + { + try{ + devAiProjectDataService.insertHttpBwDevAiProjectData(data); + }catch (Exception e){ + logger.info("BW...AiBox解析参数失败!!!"); + e.printStackTrace(); + } + } + +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/domain/DevAiProjectDataVO.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/domain/DevAiProjectDataVO.java new file mode 100644 index 00000000..3b7c0f84 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/domain/DevAiProjectDataVO.java @@ -0,0 +1,294 @@ +package com.yanzhu.manage.domain; + +import java.io.Serializable; +import java.util.Map; + +public class DevAiProjectDataVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 设备ID */ + private Long DeviceId; + + /** 设备名称 */ + private String DeviceName; + + /** 设备网口 0 IP 地址 */ + private String DeviceAddr0; + + /** 设备网口 1 IP 地址 */ + private String DeviceAddr1; + + /** 设备的序列号 */ + private String SerialNumber; + + /** 相机的序列号 */ + private String IPCSerialNum; + + /** 相机的 IP 地址 */ + private String IPCAddr; + + /** 通道号,用来唯一标识任务 ID */ + private Long ChannelId; + + /** 通道名称 */ + private String ChannelName; + + /** 报警类型 */ + private Long AlarmType; + + /** 告警 ID */ + private Long AlarmId; + + /** 上报间隔 */ + private String ReportRate; + + /** 采集时间 */ + private Long Timestamp; + + /** 左上角 X 坐标 */ + private String LeftTopX; + + /** 左上角 Y 坐标 */ + private String LeftTopY; + + /** 右下角 X 坐标 */ + private String RightBtmX; + + /** 右下角 Y 坐标 */ + private String RightBtmY; + + /** 当前告警区域人数 */ + private Long PersonNum; + + /** 绊线进入人数数量 */ + private Long InNum; + + /** 绊线离开人数数量 */ + private Long OutNum; + + /** 车牌号 */ + private Long PlateNo; + + /** ValueType 为 1 时,代表明火检测;ValueType 为 2 时,代表烟雾检测; */ + private String ValueType; + + /** 告警短视频的地址 */ + private String AlarmVideourl; + + /** 告警短视频的名称 */ + private String AlarmVideoName; + + /** 人脸比对结果 */ + private String CompareResult; + + private Map BigImage; + + public Long getDeviceId() { + return DeviceId; + } + + public void setDeviceId(Long deviceId) { + DeviceId = deviceId; + } + + public String getDeviceName() { + return DeviceName; + } + + public void setDeviceName(String deviceName) { + DeviceName = deviceName; + } + + public String getDeviceAddr0() { + return DeviceAddr0; + } + + public void setDeviceAddr0(String deviceAddr0) { + DeviceAddr0 = deviceAddr0; + } + + public String getDeviceAddr1() { + return DeviceAddr1; + } + + public void setDeviceAddr1(String deviceAddr1) { + DeviceAddr1 = deviceAddr1; + } + + public String getSerialNumber() { + return SerialNumber; + } + + public void setSerialNumber(String serialNumber) { + SerialNumber = serialNumber; + } + + public String getIPCSerialNum() { + return IPCSerialNum; + } + + public void setIPCSerialNum(String IPCSerialNum) { + this.IPCSerialNum = IPCSerialNum; + } + + public String getIPCAddr() { + return IPCAddr; + } + + public void setIPCAddr(String IPCAddr) { + this.IPCAddr = IPCAddr; + } + + public Long getChannelId() { + return ChannelId; + } + + public void setChannelId(Long channelId) { + ChannelId = channelId; + } + + public String getChannelName() { + return ChannelName; + } + + public void setChannelName(String channelName) { + ChannelName = channelName; + } + + public Long getAlarmType() { + return AlarmType; + } + + public void setAlarmType(Long alarmType) { + AlarmType = alarmType; + } + + public Long getAlarmId() { + return AlarmId; + } + + public void setAlarmId(Long alarmId) { + AlarmId = alarmId; + } + + public String getReportRate() { + return ReportRate; + } + + public void setReportRate(String reportRate) { + ReportRate = reportRate; + } + + public Long getTimestamp() { + return Timestamp; + } + + public void setTimestamp(Long timestamp) { + Timestamp = timestamp; + } + + public String getLeftTopX() { + return LeftTopX; + } + + public void setLeftTopX(String leftTopX) { + LeftTopX = leftTopX; + } + + public String getLeftTopY() { + return LeftTopY; + } + + public void setLeftTopY(String leftTopY) { + LeftTopY = leftTopY; + } + + public String getRightBtmX() { + return RightBtmX; + } + + public void setRightBtmX(String rightBtmX) { + RightBtmX = rightBtmX; + } + + public String getRightBtmY() { + return RightBtmY; + } + + public void setRightBtmY(String rightBtmY) { + RightBtmY = rightBtmY; + } + + public Long getPersonNum() { + return PersonNum; + } + + public void setPersonNum(Long personNum) { + PersonNum = personNum; + } + + public Long getInNum() { + return InNum; + } + + public void setInNum(Long inNum) { + InNum = inNum; + } + + public Long getOutNum() { + return OutNum; + } + + public void setOutNum(Long outNum) { + OutNum = outNum; + } + + public Long getPlateNo() { + return PlateNo; + } + + public void setPlateNo(Long plateNo) { + PlateNo = plateNo; + } + + public String getValueType() { + return ValueType; + } + + public void setValueType(String valueType) { + ValueType = valueType; + } + + public String getAlarmVideourl() { + return AlarmVideourl; + } + + public void setAlarmVideourl(String alarmVideourl) { + AlarmVideourl = alarmVideourl; + } + + public String getAlarmVideoName() { + return AlarmVideoName; + } + + public void setAlarmVideoName(String alarmVideoName) { + AlarmVideoName = alarmVideoName; + } + + public String getCompareResult() { + return CompareResult; + } + + public void setCompareResult(String compareResult) { + CompareResult = compareResult; + } + + public Map getBigImage() { + return BigImage; + } + + public void setBigImage(Map bigImage) { + BigImage = bigImage; + } +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/domain/DevBwAiProjectDataVO.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/domain/DevBwAiProjectDataVO.java new file mode 100644 index 00000000..01fa28a8 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/domain/DevBwAiProjectDataVO.java @@ -0,0 +1,23 @@ +package com.yanzhu.manage.domain; + +import lombok.Data; + +import java.util.Map; + +/** + * 博瓦盒子数据集 + */ +@Data +public class DevBwAiProjectDataVO { + + private String device_sn; + private String device_version; + private String date; + private Long timestamp; + private String label; + private String alias; + private String count; + private String img; + private Map extend; + +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IDevAiProjectConfigService.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IDevAiProjectConfigService.java new file mode 100644 index 00000000..133b69a6 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IDevAiProjectConfigService.java @@ -0,0 +1,66 @@ +package com.yanzhu.manage.service; + +import java.util.List; +import com.yanzhu.manage.domain.DevAiProjectConfig; + +/** + * AI设备配置Service接口 + * + * @author JiangYuQi + * @date 2025-02-26 + */ +public interface IDevAiProjectConfigService +{ + /** + * 查询AI设备配置 + * + * @param id AI设备配置主键 + * @return AI设备配置 + */ + public DevAiProjectConfig selectDevAiProjectConfigById(Long id); + + /** + * 查询AI设备配置列表 + * + * @param devAiProjectConfig AI设备配置 + * @return AI设备配置集合 + */ + public List selectDevAiProjectConfigList(DevAiProjectConfig devAiProjectConfig); + + /** + * 新增AI设备配置 + * + * @param devAiProjectConfig AI设备配置 + * @return 结果 + */ + public int insertDevAiProjectConfig(DevAiProjectConfig devAiProjectConfig); + + /** + * 修改AI设备配置 + * + * @param devAiProjectConfig AI设备配置 + * @return 结果 + */ + public int updateDevAiProjectConfig(DevAiProjectConfig devAiProjectConfig); + + /** + * 批量删除AI设备配置 + * + * @param ids 需要删除的AI设备配置主键集合 + * @return 结果 + */ + public int deleteDevAiProjectConfigByIds(Long[] ids); + + /** + * 删除AI设备配置信息 + * + * @param id AI设备配置主键 + * @return 结果 + */ + public int deleteDevAiProjectConfigById(Long id); + + /** + * 加载配置信息到缓存 + */ + public void loadingConfigsCache(); +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IDevAiProjectDataService.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IDevAiProjectDataService.java new file mode 100644 index 00000000..c8fe8008 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IDevAiProjectDataService.java @@ -0,0 +1,79 @@ +package com.yanzhu.manage.service; + +import java.util.List; +import com.yanzhu.manage.domain.DevAiProjectData; +import com.yanzhu.manage.domain.DevAiProjectDataVO; +import com.yanzhu.manage.domain.DevBwAiProjectDataVO; + +/** + * AI设备数据Service接口 + * + * @author JiangYuQi + * @date 2025-02-26 + */ +public interface IDevAiProjectDataService +{ + /** + * 查询AI设备数据 + * + * @param id AI设备数据主键 + * @return AI设备数据 + */ + public DevAiProjectData selectDevAiProjectDataById(Long id); + + /** + * 查询AI设备数据列表 + * + * @param devAiProjectData AI设备数据 + * @return AI设备数据集合 + */ + public List selectDevAiProjectDataList(DevAiProjectData devAiProjectData); + + /** + * 新增AI设备数据 + * + * @param devAiProjectData AI设备数据 + * @return 结果 + */ + public int insertDevAiProjectData(DevAiProjectData devAiProjectData); + + /** + * 新增设备数据 + * + * @param devAiProjectDataVO 设备数据 + * @return 结果 + */ + public void insertHttpDevAiProjectData(DevAiProjectDataVO devAiProjectDataVO); + + /** + * 新增设备数据 + * + * @param devBwAiProjectDataVo 设备数据 + * @return 结果 + */ + public void insertHttpBwDevAiProjectData(DevBwAiProjectDataVO devBwAiProjectDataVo); + + /** + * 修改AI设备数据 + * + * @param devAiProjectData AI设备数据 + * @return 结果 + */ + public int updateDevAiProjectData(DevAiProjectData devAiProjectData); + + /** + * 批量删除AI设备数据 + * + * @param ids 需要删除的AI设备数据主键集合 + * @return 结果 + */ + public int deleteDevAiProjectDataByIds(Long[] ids); + + /** + * 删除AI设备数据信息 + * + * @param id AI设备数据主键 + * @return 结果 + */ + public int deleteDevAiProjectDataById(Long id); +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IProProjectInfoService.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IProProjectInfoService.java index 5f35a6e8..570ae9ef 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IProProjectInfoService.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IProProjectInfoService.java @@ -71,5 +71,10 @@ public interface IProProjectInfoService */ public void loadingProjectsCache(); + /** + * 查询我的项目列表 + * @param proProjectInfo + * @return + */ public List selectMyProjectList(com.yanzhu.manage.domain.ProProjectInfo proProjectInfo); } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/DevAiProjectConfigServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/DevAiProjectConfigServiceImpl.java new file mode 100644 index 00000000..43ce0c47 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/DevAiProjectConfigServiceImpl.java @@ -0,0 +1,153 @@ +package com.yanzhu.manage.service.impl; + +import com.yanzhu.common.core.constant.CacheConstants; +import com.yanzhu.common.core.enums.IsDelEnums; +import com.yanzhu.common.core.utils.DateUtils; +import com.yanzhu.common.core.utils.StringUtils; +import com.yanzhu.common.redis.service.RedisService; +import com.yanzhu.common.security.utils.SecurityUtils; +import com.yanzhu.manage.domain.DevAiProjectConfig; +import com.yanzhu.manage.domain.ProProjectInfo; +import com.yanzhu.manage.mapper.DevAiProjectConfigMapper; +import com.yanzhu.manage.service.IDevAiProjectConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.List; + +/** + * AI设备配置Service业务层处理 + * + * @author JiangYuQi + * @date 2025-02-26 + */ +@Service +public class DevAiProjectConfigServiceImpl implements IDevAiProjectConfigService +{ + + @Autowired + private RedisService redisService; + + @Autowired + private DevAiProjectConfigMapper devAiProjectConfigMapper; + + /** + * 项目启动时,初始化参数到缓存 + */ + @PostConstruct + public void init() + { + loadingConfigsCache(); + } + + /** + * 加载地址信息到缓存 + */ + @Override + public void loadingConfigsCache(){ + DevAiProjectConfig query = new DevAiProjectConfig(); + query.setIsDel(IsDelEnums.NO.getCode()); + List list = devAiProjectConfigMapper.selectDevAiProjectConfigList(query); + if(StringUtils.isNotEmpty(list)){ + for(DevAiProjectConfig config:list){ + redisService.setCacheObject(CacheConstants.DEV_AI_CONFIG+config.getSerialNumber(),config); + } + } + } + + /** + * 查询AI设备配置 + * + * @param id AI设备配置主键 + * @return AI设备配置 + */ + @Override + public DevAiProjectConfig selectDevAiProjectConfigById(Long id) + { + return devAiProjectConfigMapper.selectDevAiProjectConfigById(id); + } + + /** + * 查询AI设备配置列表 + * + * @param devAiProjectConfig AI设备配置 + * @return AI设备配置 + */ + @Override + public List selectDevAiProjectConfigList(DevAiProjectConfig devAiProjectConfig) + { + devAiProjectConfig.setActiveComId(SecurityUtils.getLoginUser().getProjectDeptId()); + devAiProjectConfig.setActiveProjectId(SecurityUtils.getLoginUser().getProjectId()); + return devAiProjectConfigMapper.selectDevAiProjectConfigList(devAiProjectConfig); + } + + /** + * 新增AI设备配置 + * + * @param devAiProjectConfig AI设备配置 + * @return 结果 + */ + @Override + public int insertDevAiProjectConfig(DevAiProjectConfig devAiProjectConfig) + { + devAiProjectConfig.setIsDel(IsDelEnums.NO.getCode()); + devAiProjectConfig.setCreateBy(SecurityUtils.getUsername()); + devAiProjectConfig.setCreateTime(DateUtils.getNowDate()); + int res = devAiProjectConfigMapper.insertDevAiProjectConfig(devAiProjectConfig); + if(res>0){ + this.loadingConfigsCache(); + } + return res; + } + + /** + * 修改AI设备配置 + * + * @param devAiProjectConfig AI设备配置 + * @return 结果 + */ + @Override + public int updateDevAiProjectConfig(DevAiProjectConfig devAiProjectConfig) + { + devAiProjectConfig.setUpdateBy(SecurityUtils.getUsername()); + devAiProjectConfig.setUpdateTime(DateUtils.getNowDate()); + int res = devAiProjectConfigMapper.updateDevAiProjectConfig(devAiProjectConfig); + if(res>0){ + this.loadingConfigsCache(); + } + return res; + } + + /** + * 批量删除AI设备配置 + * + * @param ids 需要删除的AI设备配置主键 + * @return 结果 + */ + @Override + public int deleteDevAiProjectConfigByIds(Long[] ids) + { + int res = devAiProjectConfigMapper.deleteDevAiProjectConfigByIds(ids); + if(res>0){ + this.loadingConfigsCache(); + } + return res; + } + + /** + * 删除AI设备配置信息 + * + * @param id AI设备配置主键 + * @return 结果 + */ + @Override + public int deleteDevAiProjectConfigById(Long id) + { + int res = devAiProjectConfigMapper.deleteDevAiProjectConfigById(id); + if(res>0){ + this.loadingConfigsCache(); + } + return res; + } +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/DevAiProjectDataServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/DevAiProjectDataServiceImpl.java new file mode 100644 index 00000000..e4c857a1 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/DevAiProjectDataServiceImpl.java @@ -0,0 +1,282 @@ +package com.yanzhu.manage.service.impl; + +import com.yanzhu.common.core.constant.CacheConstants; +import com.yanzhu.common.core.enums.IsDelEnums; +import com.yanzhu.common.core.exception.ServiceException; +import com.yanzhu.common.core.text.Convert; +import com.yanzhu.common.core.utils.DateUtils; +import com.yanzhu.common.core.utils.file.MultipartFileUtils; +import com.yanzhu.common.redis.service.RedisService; +import com.yanzhu.common.security.utils.SecurityUtils; +import com.yanzhu.manage.domain.DevAiProjectConfig; +import com.yanzhu.manage.domain.DevAiProjectData; +import com.yanzhu.manage.domain.DevAiProjectDataVO; +import com.yanzhu.manage.domain.DevBwAiProjectDataVO; +import com.yanzhu.manage.mapper.DevAiProjectDataMapper; +import com.yanzhu.manage.service.IDevAiProjectDataService; +import com.yanzhu.system.api.RemoteFileService; +import com.yanzhu.system.api.domain.SysFile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * AI设备数据Service业务层处理 + * + * @author JiangYuQi + * @date 2025-02-26 + */ +@Service +public class DevAiProjectDataServiceImpl implements IDevAiProjectDataService +{ + + @Autowired + private RedisService redisService; + + @Autowired + private RemoteFileService remoteFileService; + + @Autowired + private DevAiProjectDataMapper devAiProjectDataMapper; + + private static final Logger logger = LoggerFactory.getLogger("DevAiProjectDataServiceImpl"); + + /** + * 查询AI设备数据 + * + * @param id AI设备数据主键 + * @return AI设备数据 + */ + @Override + public DevAiProjectData selectDevAiProjectDataById(Long id) + { + return devAiProjectDataMapper.selectDevAiProjectDataById(id); + } + + /** + * 查询AI设备数据列表 + * + * @param devAiProjectData AI设备数据 + * @return AI设备数据 + */ + @Override + public List selectDevAiProjectDataList(DevAiProjectData devAiProjectData) + { + devAiProjectData.setActiveComId(SecurityUtils.getLoginUser().getProjectDeptId()); + devAiProjectData.setActiveProjectId(SecurityUtils.getLoginUser().getProjectId()); + return devAiProjectDataMapper.selectDevAiProjectDataList(devAiProjectData); + } + + /** + * 新增AI设备数据 + * + * @param devAiProjectData AI设备数据 + * @return 结果 + */ + @Override + public int insertDevAiProjectData(DevAiProjectData devAiProjectData) + { + devAiProjectData.setCreateTime(DateUtils.getNowDate()); + return devAiProjectDataMapper.insertDevAiProjectData(devAiProjectData); + } + + /** + * 新增设备数据 + * + * @param data 设备数据 + * @return 结果 + */ + @Override + public void insertHttpDevAiProjectData(DevAiProjectDataVO data) + { + //根据设备配置查询设备绑定的项目和单位信息 + DevAiProjectConfig config = redisService.getCacheObject(CacheConstants.DEV_AI_CONFIG+data.getSerialNumber()); + if(Objects.isNull(config)){ + throw new ServiceException("设备信息未注册..."); + } + logger.info("AiBox消息解析成功!!开始转换实体!!!"); + DevAiProjectData devAiProjectData = new DevAiProjectData(); + devAiProjectData.setDeviceId(data.getDeviceId()); + /** 设备名称 */ + devAiProjectData.setDeviceName(data.getDeviceName()); + /** 设备的序列号 */ + devAiProjectData.setSerialNumber(data.getSerialNumber()); + /** 相机的序列号 */ + devAiProjectData.setIpcSerialNum(data.getIPCSerialNum()); + /** 通道号,用来唯一标识任务 ID */ + devAiProjectData.setChannelId(data.getChannelId()); + /** 通道名称 */ + devAiProjectData.setChannelName(data.getChannelName()); + /** 报警类型 */ + devAiProjectData.setAlarmType(data.getAlarmType()); + /** 告警 ID */ + devAiProjectData.setAlarmId(data.getAlarmId()); + /** 左上角 X 坐标 */ + devAiProjectData.setLeftTopX(data.getLeftTopX()); + /** 左上角 Y 坐标 */ + devAiProjectData.setLeftTopY(data.getLeftTopY()); + /** 右下角 X 坐标 */ + devAiProjectData.setRightBtmX(data.getRightBtmX()); + /** 右下角 Y 坐标 */ + devAiProjectData.setRightBtmY(data.getRightBtmY()); + /** 当前告警区域人数 */ + devAiProjectData.setPersonNum(data.getPersonNum()); + /** 绊线进入人数数量 */ + devAiProjectData.setInNum(data.getInNum()); + /** 绊线离开人数数量 */ + devAiProjectData.setOutNum(data.getOutNum()); + /** 车牌号 */ + devAiProjectData.setPlateNo(data.getPlateNo()); + /** ValueType 为 1 时,代表明火检测;ValueType 为 2 时,代表烟雾检测; */ + devAiProjectData.setValueType(data.getValueType()); + /** 告警短视频的地址 */ + devAiProjectData.setAlarmVideourl(data.getAlarmVideourl()); + /** 告警短视频的名称 */ + devAiProjectData.setAlarmVideoName(data.getAlarmVideoName()); + /** 人脸比对结果 */ + devAiProjectData.setCompareResult(data.getCompareResult()); + logger.info("实体转换成功!!Base64开始转换图片!!!"); + String objImg64 = data.getBigImage().get("Image").toString(); + try { + MultipartFile file = MultipartFileUtils.base64ToMultipartFile("data:image/png;base64,"+objImg64); + SysFile sysFile = remoteFileService.upload(file).getData(); + devAiProjectData.setImageUrl(sysFile.getUrl()); + logger.info("Base64上传图片成功!!!"); + } catch (Exception e) { + e.printStackTrace(); + } + devAiProjectData.setComId(config.getComId()); + devAiProjectData.setProjectId(config.getProjectId()); + devAiProjectData.setIsDel(IsDelEnums.NO.getCode()); + devAiProjectData.setCreateTime(DateUtils.getNowDate()); + logger.info("新增AI设备数据成功"); + devAiProjectDataMapper.insertDevAiProjectData(devAiProjectData); + } + + /** + * 新增设备数据 + * + * @param data 设备数据 + * @return 结果 + */ + @Override + public void insertHttpBwDevAiProjectData(DevBwAiProjectDataVO data){ + //根据设备配置查询设备绑定的项目和单位信息 + DevAiProjectConfig config = redisService.getCacheObject(CacheConstants.DEV_AI_CONFIG+data.getDevice_sn()); + if(Objects.isNull(config)){ + throw new ServiceException("设备信息未注册..."); + } + Map extendMap = data.getExtend(); + logger.info("AiBox消息解析成功!!开始转换实体!!!"); + DevAiProjectData devAiProjectData = new DevAiProjectData(); + devAiProjectData.setDeviceName(config.getDeviceName()); + /** 设备的序列号 */ + devAiProjectData.setSerialNumber(data.getDevice_sn()); + /** 相机的序列号 */ + devAiProjectData.setIpcSerialNum(data.getDevice_sn()); + if(Objects.nonNull(extendMap)){ + devAiProjectData.setChannelId(Convert.toLong(extendMap.get("ch"))); + devAiProjectData.setChannelName(Convert.toStr(extendMap.get("source_name"))); + } + /** 报警类型 */ + String type = this.switchAlarmType(data.getLabel()); + if(!type.equals("-1")){ + devAiProjectData.setAlarmType(Convert.toLong(type)); + logger.info("实体转换成功!!Base64开始转换图片!!!"); + String objImg64 = data.getImg(); + try { + MultipartFile file = MultipartFileUtils.base64ToMultipartFile("data:image/png;base64,"+objImg64); + SysFile sysFile = remoteFileService.upload(file).getData(); + devAiProjectData.setImageUrl(sysFile.getUrl()); + logger.info("Base64上传图片成功!!!"); + } catch (Exception e) { + e.printStackTrace(); + } + devAiProjectData.setComId(config.getComId()); + devAiProjectData.setProjectId(config.getProjectId()); + devAiProjectData.setIsDel(IsDelEnums.NO.getCode()); + devAiProjectData.setCreateTime(DateUtils.getNowDate()); + logger.info("新增AI设备数据成功"); + devAiProjectDataMapper.insertDevAiProjectData(devAiProjectData); + } + } + + /** + * 转换博瓦预警类型 + * @return + */ + private String switchAlarmType(String aliasLabel){ + String alarmType; + switch (aliasLabel){ + case "nohelmet" : alarmType="4";break; + case "head" : alarmType="4";break; + case "helmet" : alarmType="4";break; + case "fire" : alarmType="8";break; + case "vest" : alarmType="65";break; + case "smoke" : alarmType="7";break; + case "smoking" : alarmType="8";break; + case "calling" : alarmType="6";break; + case "face" : alarmType="face";break; + case "mask" : alarmType="mask";break; + case "garbage" : alarmType="garbage";break; + case "tricycle" : alarmType="tricycle";break; + case "person" : alarmType="person";break; + case "clothes" : alarmType="65";break; + case "down" : alarmType="62";break; + case "phone" : alarmType="6";break; + case "body" : alarmType="body";break; + case "ponding" : alarmType="ponding";break; + case "car" : alarmType="car";break; + case "bicycle" : alarmType="bicycle";break; + case "motorcycle" : alarmType="motorcycle";break; + case "bus" : alarmType="bus";break; + case "truck" : alarmType="truck";break; + case "van" : alarmType="van";break; + default : alarmType="0"; + } + return alarmType; + } + + /** + * 修改AI设备数据 + * + * @param devAiProjectData AI设备数据 + * @return 结果 + */ + @Override + public int updateDevAiProjectData(DevAiProjectData devAiProjectData) + { + return devAiProjectDataMapper.updateDevAiProjectData(devAiProjectData); + } + + /** + * 批量删除AI设备数据 + * + * @param ids 需要删除的AI设备数据主键 + * @return 结果 + */ + @Override + public int deleteDevAiProjectDataByIds(Long[] ids) + { + return devAiProjectDataMapper.deleteDevAiProjectDataByIds(ids); + } + + /** + * 删除AI设备数据信息 + * + * @param id AI设备数据主键 + * @return 结果 + */ + @Override + public int deleteDevAiProjectDataById(Long id) + { + return devAiProjectDataMapper.deleteDevAiProjectDataById(id); + } +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/ProProjectInfoSubdeptsUsersServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/ProProjectInfoSubdeptsUsersServiceImpl.java index 57223338..b8f1e481 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/ProProjectInfoSubdeptsUsersServiceImpl.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/ProProjectInfoSubdeptsUsersServiceImpl.java @@ -354,7 +354,7 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu GroupQuery.setProjectId(parUsers.getProjectId()); GroupQuery.setSubDeptId(parUsers.getSubDeptId()); GroupQuery.setGroupCode(DeptGroupEnums.SPECIAL.getCode()); - List specialGroups = proProjectInfoSubdeptsGroupMapper.selectProProjectInfoSubdeptsGroupList(query); + List specialGroups = proProjectInfoSubdeptsGroupMapper.selectProProjectInfoSubdeptsGroupList(GroupQuery); if(StringUtils.isNotEmpty(specialGroups)){ ProProjectInfoSubdeptsGroup specialGroup = specialGroups.get(0); @@ -651,7 +651,7 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu GroupQuery.setProjectId(parUsers.getProjectId()); GroupQuery.setSubDeptId(parUsers.getSubDeptId()); GroupQuery.setGroupCode(DeptGroupEnums.SPECIAL.getCode()); - List specialGroups = proProjectInfoSubdeptsGroupMapper.selectProProjectInfoSubdeptsGroupList(query); + List specialGroups = proProjectInfoSubdeptsGroupMapper.selectProProjectInfoSubdeptsGroupList(GroupQuery); if(StringUtils.isNotEmpty(specialGroups)){ ProProjectInfoSubdeptsGroup specialGroup = specialGroups.get(0); diff --git a/yanzhu-ui-vue3/src/api/manage/devAiProjectConfig.js b/yanzhu-ui-vue3/src/api/manage/devAiProjectConfig.js new file mode 100644 index 00000000..078e6ccb --- /dev/null +++ b/yanzhu-ui-vue3/src/api/manage/devAiProjectConfig.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询AI设备配置列表 +export function listDevAiProjectConfig(query) { + return request({ + url: '/manage/devAiProjectConfig/list', + method: 'get', + params: query + }) +} + +// 查询AI设备配置详细 +export function getDevAiProjectConfig(id) { + return request({ + url: '/manage/devAiProjectConfig/' + id, + method: 'get' + }) +} + +// 新增AI设备配置 +export function addDevAiProjectConfig(data) { + return request({ + url: '/manage/devAiProjectConfig', + method: 'post', + data: data + }) +} + +// 修改AI设备配置 +export function updateDevAiProjectConfig(data) { + return request({ + url: '/manage/devAiProjectConfig', + method: 'put', + data: data + }) +} + +// 删除AI设备配置 +export function delDevAiProjectConfig(id) { + return request({ + url: '/manage/devAiProjectConfig/' + id, + method: 'delete' + }) +} diff --git a/yanzhu-ui-vue3/src/api/manage/devAiProjectData.js b/yanzhu-ui-vue3/src/api/manage/devAiProjectData.js new file mode 100644 index 00000000..b9015ca1 --- /dev/null +++ b/yanzhu-ui-vue3/src/api/manage/devAiProjectData.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询AI设备数据列表 +export function listDevAiProjectData(query) { + return request({ + url: '/manage/devAiProjectData/list', + method: 'get', + params: query + }) +} + +// 查询AI设备数据详细 +export function getDevAiProjectData(id) { + return request({ + url: '/manage/devAiProjectData/' + id, + method: 'get' + }) +} + +// 新增AI设备数据 +export function addDevAiProjectData(data) { + return request({ + url: '/manage/devAiProjectData', + method: 'post', + data: data + }) +} + +// 修改AI设备数据 +export function updateDevAiProjectData(data) { + return request({ + url: '/manage/devAiProjectData', + method: 'put', + data: data + }) +} + +// 删除AI设备数据 +export function delDevAiProjectData(id) { + return request({ + url: '/manage/devAiProjectData/' + id, + method: 'delete' + }) +} diff --git a/yanzhu-ui-vue3/src/components/DictTag/index.vue b/yanzhu-ui-vue3/src/components/DictTag/index.vue index a5f96e8e..b40b8961 100644 --- a/yanzhu-ui-vue3/src/components/DictTag/index.vue +++ b/yanzhu-ui-vue3/src/components/DictTag/index.vue @@ -20,9 +20,7 @@ > - + @@ -47,6 +45,10 @@ const props = defineProps({ const values = computed(() => { if (props.value !== null && typeof props.value !== "undefined") { + console.log("sssssssssssss1==>",Array.isArray(props.value)) + console.log("sssssssssssss2==>",props.value) + console.log("sssssssssssss3==>",String(props.value)) + console.log("sssssssssssss4==>",[String(props.value)]) return Array.isArray(props.value) ? props.value : [String(props.value)]; } else { return []; diff --git a/yanzhu-ui-vue3/src/views/manage/devAiProjectConfig/index.vue b/yanzhu-ui-vue3/src/views/manage/devAiProjectConfig/index.vue new file mode 100644 index 00000000..6a9a3efa --- /dev/null +++ b/yanzhu-ui-vue3/src/views/manage/devAiProjectConfig/index.vue @@ -0,0 +1,356 @@ + + + + \ No newline at end of file diff --git a/yanzhu-ui-vue3/src/views/manage/devAiProjectData/index.vue b/yanzhu-ui-vue3/src/views/manage/devAiProjectData/index.vue new file mode 100644 index 00000000..f96ca572 --- /dev/null +++ b/yanzhu-ui-vue3/src/views/manage/devAiProjectData/index.vue @@ -0,0 +1,392 @@ + + + + \ No newline at end of file