diff --git a/admin/src/main/java/com/multictrl/modules/business/controller/AiWarningController.java b/admin/src/main/java/com/multictrl/modules/business/controller/AiWarningController.java new file mode 100644 index 0000000..bbaef03 --- /dev/null +++ b/admin/src/main/java/com/multictrl/modules/business/controller/AiWarningController.java @@ -0,0 +1,71 @@ +package com.multictrl.modules.business.controller; + +import com.multictrl.common.annotation.ApiOrder; +import com.multictrl.common.annotation.LogOperation; +import com.multictrl.common.utils.Result; +import com.multictrl.common.validator.ValidatorUtils; +import com.multictrl.common.validator.group.AddGroup; +import com.multictrl.common.validator.group.DefaultGroup; +import com.multictrl.common.validator.group.UpdateGroup; +import com.multictrl.modules.business.dto.AiWarningDTO; +import com.multictrl.modules.business.service.AiWarningService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * AI识别预警 + * + * @author Sdy + * @since 1.0.0 2026-06-18 + */ +@RestController +@RequestMapping("business/ai/warning") +@Tag(name = "AI识别预警") +@ApiOrder(26) +@RequiredArgsConstructor +public class AiWarningController { + private final AiWarningService aiWarningService; + + @PostMapping + @Operation(summary = "设置ai预警") + @LogOperation("设置ai预警") + @RequiresPermissions("bus:ai:warning:save") + public Result save(@RequestBody AiWarningDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class); + aiWarningService.save(dto); + + return new Result<>(); + } + + @PutMapping + @Operation(summary = "修改ai预警") + @LogOperation("修改ai预警") + @RequiresPermissions("bus:ai:warning:update") + public Result update(@RequestBody AiWarningDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class); + aiWarningService.update(dto); + + return new Result<>(); + } + + @GetMapping + @Operation(summary = "获取预警信息") + @RequiresPermissions("bus:ai:warning:get") + public Result> get() { + Map map = new HashMap<>(); + map.put("status", "1"); + List list = aiWarningService.list(map); + + return new Result>().ok(list); + } +} diff --git a/admin/src/main/java/com/multictrl/modules/business/dao/AiWarningDao.java b/admin/src/main/java/com/multictrl/modules/business/dao/AiWarningDao.java new file mode 100644 index 0000000..bc01f3f --- /dev/null +++ b/admin/src/main/java/com/multictrl/modules/business/dao/AiWarningDao.java @@ -0,0 +1,16 @@ +package com.multictrl.modules.business.dao; + +import com.multictrl.common.dao.BaseDao; +import com.multictrl.modules.business.entity.AiWarningEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * AI识别预警 + * + * @author Sdy + * @since 1.0.0 2026-06-18 + */ +@Mapper +public interface AiWarningDao extends BaseDao { + +} \ No newline at end of file diff --git a/admin/src/main/java/com/multictrl/modules/business/dto/AiWarningDTO.java b/admin/src/main/java/com/multictrl/modules/business/dto/AiWarningDTO.java new file mode 100644 index 0000000..370be13 --- /dev/null +++ b/admin/src/main/java/com/multictrl/modules/business/dto/AiWarningDTO.java @@ -0,0 +1,55 @@ +package com.multictrl.modules.business.dto; + +import com.multictrl.common.validator.group.AddGroup; +import com.multictrl.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * AI识别预警 + * + * @author Sdy + * @since 1.0.0 2026-06-18 + */ +@Data +@Schema(name = "AI识别预警") +public class AiWarningDTO implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + @Null(message = "标识必须为空", groups = AddGroup.class) + @NotNull(message = "标识不能为空", groups = UpdateGroup.class) + @Schema(description = "标识") + private Long id; + + @NotBlank(message = "应用标识不能为空", groups = AddGroup.class) + @Schema(description = "应用id") + private String appId; + + @NotBlank(message = "应用名称不能为空", groups = AddGroup.class) + @Schema(description = "应用名称") + private String appName; + + @NotBlank(message = "规则标识不能为空", groups = AddGroup.class) + @Schema(description = "规则id") + private String ruleId; + + @NotBlank(message = "规则名称不能为空", groups = AddGroup.class) + @Schema(description = "规则名称") + private String ruleName; + + @NotBlank(message = "状态不能为空", groups = {AddGroup.class, UpdateGroup.class}) + @Schema(description = "状态 0关闭 1开启") + private String status; + + @NotBlank(message = "预警等级不能为空", groups = {AddGroup.class, UpdateGroup.class}) + @Schema(description = "预警等级 高 中 低") + private String warningLevel; +} diff --git a/admin/src/main/java/com/multictrl/modules/business/entity/AiWarningEntity.java b/admin/src/main/java/com/multictrl/modules/business/entity/AiWarningEntity.java new file mode 100644 index 0000000..80ace43 --- /dev/null +++ b/admin/src/main/java/com/multictrl/modules/business/entity/AiWarningEntity.java @@ -0,0 +1,44 @@ +package com.multictrl.modules.business.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.multictrl.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * AI识别预警 + * + * @author Sdy + * @since 1.0.0 2026-06-18 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName("bus_ai_warning") +public class AiWarningEntity extends BaseEntity { + /** + * 应用id + */ + private String appId; + /** + * 应用名称 + */ + private String appName; + /** + * 规则id + */ + private String ruleId; + /** + * 规则名称 + */ + private String ruleName; + /** + * 状态 0关闭 1开启 + */ + private String status; + /** + * 预警等级 高 中 低 + */ + private String warningLevel; +} \ No newline at end of file diff --git a/admin/src/main/java/com/multictrl/modules/business/service/AiWarningService.java b/admin/src/main/java/com/multictrl/modules/business/service/AiWarningService.java new file mode 100644 index 0000000..17471f4 --- /dev/null +++ b/admin/src/main/java/com/multictrl/modules/business/service/AiWarningService.java @@ -0,0 +1,15 @@ +package com.multictrl.modules.business.service; + +import com.multictrl.common.service.CrudService; +import com.multictrl.modules.business.dto.AiWarningDTO; +import com.multictrl.modules.business.entity.AiWarningEntity; + +/** + * AI识别预警 + * + * @author Sdy + * @since 1.0.0 2026-06-18 + */ +public interface AiWarningService extends CrudService { + +} \ No newline at end of file diff --git a/admin/src/main/java/com/multictrl/modules/business/service/impl/AiWarningServiceImpl.java b/admin/src/main/java/com/multictrl/modules/business/service/impl/AiWarningServiceImpl.java new file mode 100644 index 0000000..af0eab9 --- /dev/null +++ b/admin/src/main/java/com/multictrl/modules/business/service/impl/AiWarningServiceImpl.java @@ -0,0 +1,37 @@ +package com.multictrl.modules.business.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.multictrl.common.service.impl.CrudServiceImpl; +import com.multictrl.modules.business.dao.AiWarningDao; +import com.multictrl.modules.business.dto.AiWarningDTO; +import com.multictrl.modules.business.entity.AiWarningEntity; +import com.multictrl.modules.business.service.AiWarningService; +import cn.hutool.core.util.StrUtil; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * AI识别预警 + * + * @author Sdy + * @since 1.0.0 2026-06-18 + */ +@Service +public class AiWarningServiceImpl extends CrudServiceImpl implements AiWarningService { + + @Override + public QueryWrapper getWrapper(Map params) { + String id = (String) params.get("id"); + String status = (String) params.get("status"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StrUtil.isNotBlank(id), "id", id); + wrapper.eq(StrUtil.isNotBlank(status), "status", status); + wrapper.orderByDesc("create_date"); + + return wrapper; + } + + +} \ No newline at end of file diff --git a/admin/src/main/java/com/multictrl/modules/business/service/impl/ZhiMouServiceImpl.java b/admin/src/main/java/com/multictrl/modules/business/service/impl/ZhiMouServiceImpl.java index 3aa8fc5..4f7b30b 100644 --- a/admin/src/main/java/com/multictrl/modules/business/service/impl/ZhiMouServiceImpl.java +++ b/admin/src/main/java/com/multictrl/modules/business/service/impl/ZhiMouServiceImpl.java @@ -19,8 +19,10 @@ import com.multictrl.common.utils.CacheUtils; import com.multictrl.common.utils.Result; import com.multictrl.common.utils.Utils; import com.multictrl.modules.business.dao.ZhimouCallbackDao; +import com.multictrl.modules.business.dto.AiWarningDTO; import com.multictrl.modules.business.dto.zhimou.*; import com.multictrl.modules.business.entity.ZhimouCallbackEntity; +import com.multictrl.modules.business.service.AiWarningService; import com.multictrl.modules.business.service.SrsService; import com.multictrl.modules.business.service.ZhiMouService; import com.multictrl.modules.sys.dao.SysParamsDao; @@ -52,6 +54,7 @@ public class ZhiMouServiceImpl implements ZhiMouService { private final SrsService srsService; private final MqttConfig mqttConfig; private final SysConfig sysConfig; + private final AiWarningService aiWarningService; private final ZhimouCallbackDao zhimouCallbackDao; private static final String APP_KEY = "appkey"; private static final String APP_SECRET = "appsecret"; @@ -173,9 +176,9 @@ public class ZhiMouServiceImpl implements ZhiMouService { .header(AUTHORIZATION, BEARER + zhiMouInfo.getToken()).execute().body(); log.debug("invoke zhiMou getApp result: {}", result); if (StrUtil.isNotBlank(result)) { -// List aiList = aiWarningService.list(new HashMap<>()); + List aiList = aiWarningService.list(new HashMap<>()); JSONObject data = JSONObject.parse(result); - /*JSONArray apps = data.getJSONObject("data").getJSONArray("apps"); + JSONArray apps = data.getJSONObject("data").getJSONArray("apps"); for (Object app : apps) { JSONObject appObj = (JSONObject) app; String appId = appObj.getString("app_id"); @@ -186,7 +189,7 @@ public class ZhiMouServiceImpl implements ZhiMouService { ruleObj.put("ai_id", null); ruleObj.put("ai_status", null); ruleObj.put("ai_warning_level", null); - for (UavAiWarningDTO dto : aiList) { + for (AiWarningDTO dto : aiList) { if (dto.getAppId().equals(appId) && dto.getRuleId().equals(ruleId)) { ruleObj.put("ai_id", dto.getId()); ruleObj.put("ai_status", dto.getStatus()); @@ -194,7 +197,7 @@ public class ZhiMouServiceImpl implements ZhiMouService { } } } - }*/ + } return data; } return null; diff --git a/prj-deploy/file/pgsql/init.sql b/prj-deploy/file/pgsql/init.sql index 2dc1494..a1ea21e 100644 --- a/prj-deploy/file/pgsql/init.sql +++ b/prj-deploy/file/pgsql/init.sql @@ -2461,4 +2461,41 @@ ON COLUMN public.bus_route_ai.creator IS '创建人'; COMMENT ON COLUMN public.bus_route_ai.create_date IS '创建时间'; COMMENT -ON COLUMN public.bus_route_ai.zhimou_child_id IS '智眸应用子类编号'; \ No newline at end of file +ON COLUMN public.bus_route_ai.zhimou_child_id IS '智眸应用子类编号'; + +-- public.bus_ai_warning definition + +-- Drop table + +-- DROP TABLE public.bus_ai_warning; + +CREATE TABLE public.bus_ai_warning +( + id int8 NOT NULL, + app_id varchar(50) NULL, -- 应用id + app_name varchar(255) NULL, -- 应用名称 + rule_id varchar(50) NULL, -- 规则id + rule_name varchar(255) NULL, -- 规则名称 + status bpchar(1) NULL, -- 状态 0关闭 1开启 + warning_level varchar(10) NULL, -- 预警等级 高 中 低 + create_date timestamp(6) NULL, + creator int8 NULL, + CONSTRAINT uav_ai_warning_pkey PRIMARY KEY (id) +); +COMMENT +ON TABLE public.bus_ai_warning IS 'AI识别预警'; + +-- Column comments + +COMMENT +ON COLUMN public.bus_ai_warning.app_id IS '应用id'; +COMMENT +ON COLUMN public.bus_ai_warning.app_name IS '应用名称'; +COMMENT +ON COLUMN public.bus_ai_warning.rule_id IS '规则id'; +COMMENT +ON COLUMN public.bus_ai_warning.rule_name IS '规则名称'; +COMMENT +ON COLUMN public.bus_ai_warning.status IS '状态 0关闭 1开启'; +COMMENT +ON COLUMN public.bus_ai_warning.warning_level IS '预警等级 高 中 低'; \ No newline at end of file