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