From 8287a45d39a829f031dd3e615035a4fdfab3c74f Mon Sep 17 00:00:00 2001 From: shizisheng Date: Sat, 14 Jun 2025 16:53:29 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E9=A2=84=E8=AD=A6=E5=AF=BC=E5=87=BA-?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=BC=E5=87=BA=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/BusinessAlertServiceImpl.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index 27f5acc..91ad10d 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -1017,7 +1017,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { throw new RuntimeException("没有可查看的预警数据!"); } - wrapper.eq("t.business_type",1); +// wrapper.eq("t.business_type",1); //根据前端查询条件查询 List alertList = this.baseMapper.exportAlert(wrapper,ptPrefix); @@ -1052,7 +1052,8 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { businessAlert.setMaxMateSourceImgUrl(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlert.getMaxMateSourceImgUrl(), 3600).toString()); businessAlert.setMateSourceImgUrl(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlert.getMateSourceImgUrl(), 3600).toString()); }else { - businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlert.getImages(), 3600).toString()); + //url渲染快(只要不报错),base64模式超级卡慢 + businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlert.getImages(), 3600).toString()); // 9001/dkcy//ai/report/ > 9001/dkcy/ai/report/ } //获取指南针 @@ -1083,6 +1084,17 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { if (bo.getExportType().equalsIgnoreCase("world")){ + /** + * http://114.235.183.147:9001/dkcy//ai/report/29847/xwoKJvrqpp/zDASKjUVlN/events/8UUXN2B00A00SKdlfHClDieQ.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250614T061025Z&X-Amz-SignedHeaders=host&X-Amz-Credential=wuyuan%40yf%2F20250614%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Expires=3600&X-Amz-Signature=a90766f63fbecebf99fd50fed5ac018458225d5df0f6afee39b5c58b6447b16e + * 特殊字符里有特殊符号,图片处理报错 class com.spire.doc.packages.sprghs: The string contains invalid characters + * 先处理 businessType=2的数据 + */ + for (BusinessAlert businessAlert : alertList) { + if(ObjectUtil.equals(businessAlert.getBusinessType(),2)){ + businessAlert.setImages(imageUrlToBase64(businessAlert.getImages())); + } + } + //生成word FreemarkerUtil.renderTplFileToWord("预警导出.docx","alert.ftl",resultMap,response); } else if (bo.getExportType().equalsIgnoreCase("pdf")) { @@ -1094,6 +1106,18 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { } } + + // 图片url转base64 + public static String imageUrlToBase64(String imageUrl) { + try (InputStream in = new URL(imageUrl).openStream()) { + byte[] bytes = in.readAllBytes(); + return Base64.getEncoder().encodeToString(bytes); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + @Override public void pushAlert(Long alertId, String deptId, String deptName) { BusinessAlert businessAlert= this.getBusinessAlert(alertId); From f54221e3e6716a1f7713fba00baffc2e08ea5429 Mon Sep 17 00:00:00 2001 From: shizisheng Date: Tue, 17 Jun 2025 15:12:06 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BB=BB=E5=8A=A1-=E7=81=B5=E5=97=85?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=BF=9D=E5=AD=98=E6=89=A9=E5=B1=95-?= =?UTF-8?q?=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WaylineJobAtmosphereController.java | 128 +++++++++++ .../wayline/domain/WaylineJobAtmosphere.java | 127 +++++++++++ .../domain/bo/WaylineJobAtmosphereBo.java | 178 +++++++++++++++ .../domain/vo/WaylineJobAtmosphereVo.java | 210 ++++++++++++++++++ .../mapper/WaylineJobAtmosphereMapper.java | 15 ++ .../service/IWaylineJobAtmosphereService.java | 74 ++++++ .../impl/WaylineJobAtmosphereServiceImpl.java | 188 ++++++++++++++++ .../mapper/WaylineJobAtmosphereMapper.xml | 7 + 8 files changed, 927 insertions(+) create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobAtmosphereController.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/WaylineJobAtmosphere.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/bo/WaylineJobAtmosphereBo.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/vo/WaylineJobAtmosphereVo.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/WaylineJobAtmosphereMapper.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobAtmosphereService.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobAtmosphereServiceImpl.java create mode 100644 dk-modules/sample/src/main/resources/mapper/WaylineJobAtmosphereMapper.xml diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobAtmosphereController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobAtmosphereController.java new file mode 100644 index 0000000..2fe9863 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobAtmosphereController.java @@ -0,0 +1,128 @@ +package org.dromara.sample.wayline.controller; + +import java.util.List; +import java.util.Optional; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.sdk.common.HttpResultResponse; +import org.dromara.sample.wayline.model.dto.WaylineJobDTO; +import org.dromara.sample.wayline.service.IWaylineJobService; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.sample.wayline.domain.vo.WaylineJobAtmosphereVo; +import org.dromara.sample.wayline.domain.bo.WaylineJobAtmosphereBo; +import org.dromara.sample.wayline.service.IWaylineJobAtmosphereService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 无人机任务-空气质量 + * 前端访问路由地址为:/sample/WaylineJobAtmosphere + * + * @author szs + * @date 2025-06-16 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/WaylineJobAtmosphere") +public class WaylineJobAtmosphereController extends BaseController { + + private final IWaylineJobAtmosphereService waylineJobAtmosphereService; + private final IWaylineJobService waylineJobService; + + /** + * 查询无人机任务-空气质量列表 + */ + @SaCheckPermission("sample:WaylineJobAtmosphere:list") + @GetMapping("/list") + public TableDataInfo list(WaylineJobAtmosphereBo bo, PageQuery pageQuery) { + return waylineJobAtmosphereService.queryPageList(bo, pageQuery); + } + + @GetMapping("/list/demo") + public List demoList(WaylineJobAtmosphereBo bo, PageQuery pageQuery) { + List demoList= waylineJobAtmosphereService.demoList(bo); + return demoList; + } + + /** + * 导出无人机任务-空气质量列表 + */ + @SaCheckPermission("sample:WaylineJobAtmosphere:export") + @Log(title = "无人机任务-空气质量", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WaylineJobAtmosphereBo bo, HttpServletResponse response) { + List list = waylineJobAtmosphereService.queryList(bo); + ExcelUtil.exportExcel(list, "无人机任务-空气质量", WaylineJobAtmosphereVo.class, response); + } + + /** + * 获取无人机任务-空气质量详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("sample:WaylineJobAtmosphere:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(waylineJobAtmosphereService.queryById(id)); + } + + /** + * 新增无人机任务-空气质量 + */ + @SaCheckPermission("sample:WaylineJobAtmosphere:add") + @Log(title = "无人机任务-空气质量", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WaylineJobAtmosphereBo bo) { + +// Optional waylineJobDTO = waylineJobService.getJobByJobInternalId(objectMap.get("jobId").toString()); +// map.put("jobId",objectMap.get("jobId")); +// if (!waylineJobDTO.isEmpty()){ +// map.put("jobName",waylineJobDTO.get().getJobName()); +// }else { +// map.put("jobName",null); +// } + +// waylineJobService.getJobByDockSn(""); + + return toAjax(waylineJobAtmosphereService.insertByBo(bo)); + } + + /** + * 修改无人机任务-空气质量 + */ + @SaCheckPermission("sample:WaylineJobAtmosphere:edit") + @Log(title = "无人机任务-空气质量", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WaylineJobAtmosphereBo bo) { + return toAjax(waylineJobAtmosphereService.updateByBo(bo)); + } + + /** + * 删除无人机任务-空气质量 + * + * @param ids 主键串 + */ + @SaCheckPermission("sample:WaylineJobAtmosphere:remove") + @Log(title = "无人机任务-空气质量", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(waylineJobAtmosphereService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/WaylineJobAtmosphere.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/WaylineJobAtmosphere.java new file mode 100644 index 0000000..0e9d70d --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/WaylineJobAtmosphere.java @@ -0,0 +1,127 @@ +package org.dromara.sample.wayline.domain; + +import cn.hutool.json.JSONObject; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 无人机任务-空气质量对象 wayline_job_atmosphere + * + * @author szs + * @date 2025-06-16 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("wayline_job_atmosphere") +public class WaylineJobAtmosphere implements Serializable { + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @TableField("wayline_job_id") + private Long waylineJobId; //无人机任务ID + + @TableField("job_id") + private String jobId; //任务UUID + + @TableField("name") + private String name;//任务名称 + + @TableField("file_id") + private String fileId; //航线id 对应wayline_id 字段 + + @TableField("wayline_name") + private String waylineName;//航线名称 + + @TableField("dock_sn") + private String dockSn; //机场sn + + @TableField("drone_sn") + private String droneSn;//无人机sn + + @TableField("workspace_id") + private String workspaceId;//工作区id + + @TableField("task_type") + private Long taskType;//任务类型 + + @TableField("begin_time") + private Date beginTime;//计划的开始时间 + + @TableField("end_time") + private Date endTime; //计划的结束时间 + + @TableField("serial") + private String serial; //负载设备序列号 + + @TableField("sequence") + private Long sequence;//数据序列号 + + @TableField("sate_num") + private Long sateNum; //卫星数量 + + @TableField("hdop") + private Long hdop; //水平精度因子 + + @TableField("utc_time_str") + private String utcTimeStr; //UTC时间 + + @TableField("latitude") + private Float latitude; //纬度 + + @TableField("longitude") + private Float longitude;//经度 + + @TableField("altitude") + private Float altitude;//海拔高度 + + @TableField("temperature") + private Float temperature; //温度 + + @TableField("humidity") + private Float humidity;//湿度 + + @TableField("pressure") + private Float pressure;//气压 + +// @TableField(value = "air_data", typeHandler = JacksonTypeHandler.class) + @TableField("air_data") + private String airData;//空气质量数据 + + @TableField("error_code") + private Long errorCode;//错误码 + + @TableField("status") + private Long status;//状态 1:待处理;2: 进行中;3:成功;4: 取消;5:失败 + + @TableField("parent_id") + private String parentId; //父级ID + + @TableField("job_type") + private Long jobType;//任务类型 1:手动任务,2:自动任务,3:指令飞行,4:工单飞行 + + @TableField("pro_id") + private Long proId; //proID + + + @TableField(value = "create_time", fill = FieldFill.INSERT) + private Date createTime; + + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/bo/WaylineJobAtmosphereBo.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/bo/WaylineJobAtmosphereBo.java new file mode 100644 index 0000000..b7c25a2 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/bo/WaylineJobAtmosphereBo.java @@ -0,0 +1,178 @@ +package org.dromara.sample.wayline.domain.bo; + +import cn.hutool.json.JSONObject; +import org.dromara.sample.wayline.domain.WaylineJobAtmosphere; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; + +/** + * 无人机任务-空气质量业务对象 wayline_job_atmosphere + * + * @author szs + * @date 2025-06-16 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = WaylineJobAtmosphere.class, reverseConvertGenerate = false) +public class WaylineJobAtmosphereBo extends BaseEntity { + + /** + * ID + */ + private Long id; + + /** + * 无人机任务ID + */ +// @NotNull(message = "无人机任务ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long waylineJobId; + + /** + * 任务UUID + */ +// @NotBlank(message = "任务UUID不能为空", groups = { AddGroup.class, EditGroup.class }) + private String jobId; + + /** + * 任务名称 + */ +// @NotBlank(message = "任务名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 航线id 对应wayline_id 字段 + */ +// @NotBlank(message = "航线id 对应wayline_id 字段不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fileId; + + /** + * 航线名称 + */ + private String waylineName; + + /** + * 机场sn + */ +// @NotBlank(message = "机场sn不能为空", groups = { AddGroup.class, EditGroup.class }) + private String dockSn; + + /** + * 无人机sn + */ + private String droneSn; + + /** + * 工作区id + */ +// @NotBlank(message = "工作区id不能为空", groups = { AddGroup.class, EditGroup.class }) + private String workspaceId; + + /** + * 任务类型 + */ + private Long taskType; + + /** + * 计划的开始时间 + */ + private Date beginTime; + + /** + * 计划的结束时间 + */ + private Date endTime; + + /** + * 负载设备序列号 + */ +// @NotBlank(message = "负载设备序列号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String serial; + + /** + * 数据序列号 + */ + private Long sequence; + + /** + * 卫星数量 + */ + private Long sateNum; + + /** + * 水平精度因子 + */ + private Long hdop; + + /** + * UTC时间 + */ + private String utcTimeStr; + + /** + * 纬度 + */ + private Float latitude; + + /** + * 经度 + */ + private Float longitude; + + /** + * 海拔高度 + */ + private Float altitude; + + /** + * 温度 + */ + private Float temperature; + + /** + * 湿度 + */ + private Float humidity; + + /** + * 气压 + */ + private Float pressure; + + /** + * 空气质量数据 + */ + private String airData; + + /** + * 错误码 + */ + private Long errorCode; + + /** + * 1:待处理;2: 进行中;3:成功;4: 取消;5:失败 + */ + private Long status; + + /** + * 父级ID + */ + private String parentId; + + /** + * 1:手动任务,2:自动任务,3:指令飞行,4:工单飞行 + */ + private Long jobType; + + /** + * proID + */ + private Long proId; + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/vo/WaylineJobAtmosphereVo.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/vo/WaylineJobAtmosphereVo.java new file mode 100644 index 0000000..0ff451a --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/domain/vo/WaylineJobAtmosphereVo.java @@ -0,0 +1,210 @@ +package org.dromara.sample.wayline.domain.vo; + +import java.util.Date; + +import cn.hutool.json.JSONObject; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.dromara.sample.wayline.domain.WaylineJobAtmosphere; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Map; + + +/** + * 无人机任务-空气质量视图对象 wayline_job_atmosphere + * + * @author szs + * @date 2025-06-16 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = WaylineJobAtmosphere.class) +public class WaylineJobAtmosphereVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 无人机任务ID + */ + @ExcelProperty(value = "无人机任务ID") + private Long waylineJobId; + + /** + * 任务UUID + */ + @ExcelProperty(value = "任务UUID") + private String jobId; + + /** + * 任务名称 + */ + @ExcelProperty(value = "任务名称") + private String name; + + /** + * 航线id 对应wayline_id 字段 + */ + @ExcelProperty(value = "航线id 对应wayline_id 字段") + private String fileId; + + /** + * 航线名称 + */ + @ExcelProperty(value = "航线名称") + private String waylineName; + + /** + * 机场sn + */ + @ExcelProperty(value = "机场sn") + private String dockSn; + + /** + * 无人机sn + */ + @ExcelProperty(value = "无人机sn") + private String droneSn; + + /** + * 工作区id + */ + @ExcelProperty(value = "工作区id") + private String workspaceId; + + /** + * 任务类型 + */ + @ExcelProperty(value = "任务类型") + private Long taskType; + + /** + * 计划的开始时间 + */ + @ExcelProperty(value = "计划的开始时间") + private Date beginTime; + + /** + * 计划的结束时间 + */ + @ExcelProperty(value = "计划的结束时间") + private Date endTime; + + /** + * 负载设备序列号 + */ + @ExcelProperty(value = "负载设备序列号") + private String serial; + + /** + * 数据序列号 + */ + @ExcelProperty(value = "数据序列号") + private Long sequence; + + /** + * 卫星数量 + */ + @ExcelProperty(value = "卫星数量") + private Long sateNum; + + /** + * 水平精度因子 + */ + @ExcelProperty(value = "水平精度因子") + private Long hdop; + + /** + * UTC时间 + */ + @ExcelProperty(value = "UTC时间") + private String utcTimeStr; + + /** + * 纬度 + */ + @ExcelProperty(value = "纬度") + private Float latitude; + + /** + * 经度 + */ + @ExcelProperty(value = "经度") + private Float longitude; + + /** + * 海拔高度 + */ + @ExcelProperty(value = "海拔高度") + private Float altitude; + + /** + * 温度 + */ + @ExcelProperty(value = "温度") + private Float temperature; + + /** + * 湿度 + */ + @ExcelProperty(value = "湿度") + private Float humidity; + + /** + * 气压 + */ + @ExcelProperty(value = "气压") + private Float pressure; + + /** + * 空气质量数据 + */ + @ExcelProperty(value = "空气质量数据") +// @JsonProperty("air_data") //无效 + private String airData; + + private JSONObject airDataJson; + + /** + * 错误码 + */ + @ExcelProperty(value = "错误码") + private Long errorCode; + + /** + * 1:待处理;2: 进行中;3:成功;4: 取消;5:失败 + */ + @ExcelProperty(value = "1:待处理;2: 进行中;3:成功;4: 取消;5:失败") + private Long status; + + /** + * 父级ID + */ + @ExcelProperty(value = "父级ID") + private String parentId; + + /** + * 1:手动任务,2:自动任务,3:指令飞行,4:工单飞行 + */ + @ExcelProperty(value = "1:手动任务,2:自动任务,3:指令飞行,4:工单飞行") + private Long jobType; + + /** + * proID + */ + @ExcelProperty(value = "proID") + private Long proId; + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/WaylineJobAtmosphereMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/WaylineJobAtmosphereMapper.java new file mode 100644 index 0000000..d52158f --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/mapper/WaylineJobAtmosphereMapper.java @@ -0,0 +1,15 @@ +package org.dromara.sample.wayline.mapper; + +import org.dromara.sample.wayline.domain.WaylineJobAtmosphere; +import org.dromara.sample.wayline.domain.vo.WaylineJobAtmosphereVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 无人机任务-空气质量Mapper接口 + * + * @author szs + * @date 2025-06-16 + */ +public interface WaylineJobAtmosphereMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobAtmosphereService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobAtmosphereService.java new file mode 100644 index 0000000..7085f40 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobAtmosphereService.java @@ -0,0 +1,74 @@ +package org.dromara.sample.wayline.service; + +import cn.hutool.json.JSONObject; +import org.dromara.sample.wayline.domain.vo.WaylineJobAtmosphereVo; +import org.dromara.sample.wayline.domain.bo.WaylineJobAtmosphereBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.sample.wayline.model.dto.WaylineJobDTO; + +import java.util.Collection; +import java.util.List; + +/** + * 无人机任务-空气质量Service接口 + * + * @author szs + * @date 2025-06-16 + */ +public interface IWaylineJobAtmosphereService { + + /** + * 查询无人机任务-空气质量 + * + * @param id 主键 + * @return 无人机任务-空气质量 + */ + WaylineJobAtmosphereVo queryById(Long id); + + /** + * 分页查询无人机任务-空气质量列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 无人机任务-空气质量分页列表 + */ + TableDataInfo queryPageList(WaylineJobAtmosphereBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的无人机任务-空气质量列表 + * + * @param bo 查询条件 + * @return 无人机任务-空气质量列表 + */ + List queryList(WaylineJobAtmosphereBo bo); + + /** + * 新增无人机任务-空气质量 + * + * @param bo 无人机任务-空气质量 + * @return 是否新增成功 + */ + Boolean insertByBo(WaylineJobAtmosphereBo bo); + + /** + * 修改无人机任务-空气质量 + * + * @param bo 无人机任务-空气质量 + * @return 是否修改成功 + */ + Boolean updateByBo(WaylineJobAtmosphereBo bo); + + /** + * 校验并批量删除无人机任务-空气质量信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + void handleAdd(WaylineJobDTO waylineJobDTO, JSONObject json); + + List demoList(WaylineJobAtmosphereBo bo); +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobAtmosphereServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobAtmosphereServiceImpl.java new file mode 100644 index 0000000..3c91f8a --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobAtmosphereServiceImpl.java @@ -0,0 +1,188 @@ +package org.dromara.sample.wayline.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.sample.wayline.model.dto.WaylineJobDTO; +import org.springframework.stereotype.Service; +import org.dromara.sample.wayline.domain.bo.WaylineJobAtmosphereBo; +import org.dromara.sample.wayline.domain.vo.WaylineJobAtmosphereVo; +import org.dromara.sample.wayline.domain.WaylineJobAtmosphere; +import org.dromara.sample.wayline.mapper.WaylineJobAtmosphereMapper; +import org.dromara.sample.wayline.service.IWaylineJobAtmosphereService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 无人机任务-空气质量Service业务层处理 + * + * @author szs + * @date 2025-06-16 + */ +@RequiredArgsConstructor +@Service +public class WaylineJobAtmosphereServiceImpl implements IWaylineJobAtmosphereService { + + private final WaylineJobAtmosphereMapper baseMapper; + + /** + * 查询无人机任务-空气质量 + * + * @param id 主键 + * @return 无人机任务-空气质量 + */ + @Override + public WaylineJobAtmosphereVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询无人机任务-空气质量列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 无人机任务-空气质量分页列表 + */ + @Override + public TableDataInfo queryPageList(WaylineJobAtmosphereBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + + //转换airData让前台处理 + for (WaylineJobAtmosphereVo record : result.getRecords()) { + if(ObjectUtil.isNotEmpty(record.getAirData())){ + record.setAirDataJson(JSONUtil.parseObj(record.getAirData())); + } + } + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的无人机任务-空气质量列表 + * + * @param bo 查询条件 + * @return 无人机任务-空气质量列表 + */ + @Override + public List queryList(WaylineJobAtmosphereBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(WaylineJobAtmosphereBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getWaylineJobId() != null, WaylineJobAtmosphere::getWaylineJobId, bo.getWaylineJobId()); + lqw.eq(StringUtils.isNotBlank(bo.getJobId()), WaylineJobAtmosphere::getJobId, bo.getJobId()); + lqw.like(StringUtils.isNotBlank(bo.getName()), WaylineJobAtmosphere::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), WaylineJobAtmosphere::getFileId, bo.getFileId()); + lqw.like(StringUtils.isNotBlank(bo.getWaylineName()), WaylineJobAtmosphere::getWaylineName, bo.getWaylineName()); + lqw.eq(StringUtils.isNotBlank(bo.getDockSn()), WaylineJobAtmosphere::getDockSn, bo.getDockSn()); + lqw.eq(StringUtils.isNotBlank(bo.getDroneSn()), WaylineJobAtmosphere::getDroneSn, bo.getDroneSn()); + lqw.eq(StringUtils.isNotBlank(bo.getWorkspaceId()), WaylineJobAtmosphere::getWorkspaceId, bo.getWorkspaceId()); + lqw.eq(bo.getTaskType() != null, WaylineJobAtmosphere::getTaskType, bo.getTaskType()); + lqw.eq(bo.getBeginTime() != null, WaylineJobAtmosphere::getBeginTime, bo.getBeginTime()); + lqw.eq(bo.getEndTime() != null, WaylineJobAtmosphere::getEndTime, bo.getEndTime()); + lqw.eq(StringUtils.isNotBlank(bo.getSerial()), WaylineJobAtmosphere::getSerial, bo.getSerial()); + lqw.eq(bo.getSequence() != null, WaylineJobAtmosphere::getSequence, bo.getSequence()); + lqw.eq(bo.getSateNum() != null, WaylineJobAtmosphere::getSateNum, bo.getSateNum()); + lqw.eq(bo.getHdop() != null, WaylineJobAtmosphere::getHdop, bo.getHdop()); + lqw.eq(bo.getUtcTimeStr() != null, WaylineJobAtmosphere::getUtcTimeStr, bo.getUtcTimeStr()); + lqw.eq(bo.getLatitude() != null, WaylineJobAtmosphere::getLatitude, bo.getLatitude()); + lqw.eq(bo.getLongitude() != null, WaylineJobAtmosphere::getLongitude, bo.getLongitude()); + lqw.eq(bo.getAltitude() != null, WaylineJobAtmosphere::getAltitude, bo.getAltitude()); + lqw.eq(bo.getTemperature() != null, WaylineJobAtmosphere::getTemperature, bo.getTemperature()); + lqw.eq(bo.getHumidity() != null, WaylineJobAtmosphere::getHumidity, bo.getHumidity()); + lqw.eq(bo.getPressure() != null, WaylineJobAtmosphere::getPressure, bo.getPressure()); +// lqw.eq(JSONUtil.isTypeJSONObject(bo.getAirData().toString()), WaylineJobAtmosphere::getAirData, bo.getAirData()); + lqw.eq(bo.getErrorCode() != null, WaylineJobAtmosphere::getErrorCode, bo.getErrorCode()); + lqw.eq(bo.getStatus() != null, WaylineJobAtmosphere::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getParentId()), WaylineJobAtmosphere::getParentId, bo.getParentId()); + lqw.eq(bo.getJobType() != null, WaylineJobAtmosphere::getJobType, bo.getJobType()); + lqw.eq(bo.getProId() != null, WaylineJobAtmosphere::getProId, bo.getProId()); + return lqw; + } + + /** + * 新增无人机任务-空气质量 + * + * @param bo 无人机任务-空气质量 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(WaylineJobAtmosphereBo bo) { + WaylineJobAtmosphere add = MapstructUtils.convert(bo, WaylineJobAtmosphere.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改无人机任务-空气质量 + * + * @param bo 无人机任务-空气质量 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(WaylineJobAtmosphereBo bo) { + WaylineJobAtmosphere update = MapstructUtils.convert(bo, WaylineJobAtmosphere.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WaylineJobAtmosphere entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除无人机任务-空气质量信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public void handleAdd(WaylineJobDTO waylineJobDTO, JSONObject json) { + System.out.println(waylineJobDTO); + System.out.println(json); + } + + @Override + public List demoList(WaylineJobAtmosphereBo bo) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.gt(WaylineJobAtmosphere::getId, 1240); + wrapper.lt(WaylineJobAtmosphere::getId, 2495); + List waylineJobAtmosphereVos = baseMapper.selectVoList(wrapper); + //转换airData让前台处理 + for (WaylineJobAtmosphereVo record : waylineJobAtmosphereVos) { + if(ObjectUtil.isNotEmpty(record.getAirData())){ + record.setAirDataJson(JSONUtil.parseObj(record.getAirData())); + } + } + return waylineJobAtmosphereVos; + } +} diff --git a/dk-modules/sample/src/main/resources/mapper/WaylineJobAtmosphereMapper.xml b/dk-modules/sample/src/main/resources/mapper/WaylineJobAtmosphereMapper.xml new file mode 100644 index 0000000..537db7b --- /dev/null +++ b/dk-modules/sample/src/main/resources/mapper/WaylineJobAtmosphereMapper.xml @@ -0,0 +1,7 @@ + + + + + From f78ba0fe94701370fee11877602f56227dad1944 Mon Sep 17 00:00:00 2001 From: shizisheng Date: Tue, 17 Jun 2025 15:13:22 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E7=81=B5=E5=97=85mqtt=E5=8D=95=E4=B8=80?= =?UTF-8?q?=E9=9B=86=E6=88=90-Lingxiu=20waylinejobDTO=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E6=8E=A5=E6=94=B6id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LingxiuMqttMessageProcessor.java | 5 + .../LingxiuMqttMessageProcessorImpl.java | 93 +++++++++++++++++++ .../LingxiuMqttStartupRunner.java | 22 +++++ .../configuration/MqttLingxiuConfig.java | 45 +++++++++ .../configuration/MqttLingxiuSubscriber.java | 45 +++++++++ .../wayline/model/dto/WaylineJobDTO.java | 2 + .../service/impl/WaylineJobServiceImpl.java | 1 + 7 files changed, 213 insertions(+) create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttMessageProcessor.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttMessageProcessorImpl.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttStartupRunner.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/configuration/MqttLingxiuConfig.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/configuration/MqttLingxiuSubscriber.java diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttMessageProcessor.java b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttMessageProcessor.java new file mode 100644 index 0000000..b993f16 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttMessageProcessor.java @@ -0,0 +1,5 @@ +package org.dromara.sample.configuration; + +public interface LingxiuMqttMessageProcessor { + void process(String topic, String payload); +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttMessageProcessorImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttMessageProcessorImpl.java new file mode 100644 index 0000000..edbf028 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttMessageProcessorImpl.java @@ -0,0 +1,93 @@ +package org.dromara.sample.configuration; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.sample.manage.mapper.IDevicePayloadMapper; +import org.dromara.sample.manage.model.dto.DevicePayloadDTO; +import org.dromara.sample.manage.model.entity.DevicePayloadEntity; +import org.dromara.sample.manage.service.IDevicePayloadService; +import org.dromara.sample.wayline.domain.WaylineJobAtmosphere; +import org.dromara.sample.wayline.domain.bo.WaylineJobAtmosphereBo; +import org.dromara.sample.wayline.model.dto.WaylineJobDTO; +import org.dromara.sample.wayline.model.entity.WaylineJobEntity; +import org.dromara.sample.wayline.service.IWaylineJobAtmosphereService; +import org.dromara.sample.wayline.service.IWaylineJobService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Optional; + +@Slf4j +@Component +@RequiredArgsConstructor +public class LingxiuMqttMessageProcessorImpl implements LingxiuMqttMessageProcessor{ + private final IWaylineJobAtmosphereService waylineJobAtmosphereService; + private final IWaylineJobService waylineJobService; + private final IDevicePayloadService devicePayloadService; + + @Autowired + private final IDevicePayloadMapper devicePayloadMapper; + + @Override + public void process(String topic, String payload) { + log.info("处理灵嗅MQTT数据 topic={}, payload={}", topic, payload); + // {"serial":"37c12953","sequence":12,"sateNum":0,"hdop":0,"utcTime":"2025-06-17-01-37-22","latitude":34.270486,"longitude":117.149302,"altitude":0.03,"temperature":29.61,"humidity":21.37,"pressure":100071.42,"airData":{"SO2(ppm)":0,"NO2(ppm)":0,"Ox(ppm)":0,"PM1.0(ug/m3)":14,"PM2.5(ug/m3)":35,"PM10(ug/m3)":46}} + +// if(1==1){ //关闭数据 +// return; +// } + try { + JSONObject json = JSONUtil.parseObj(payload); + System.out.println("json打印"+json); + JSONObject airData = json.getJSONObject("airData"); + String utcTimeStr = json.getStr("utcTime"); + + + //"airData":{"SO2(ppm)":0,"NO2(ppm)":0,"Ox(ppm)":0,"PM1.0(ug/m3)":16,"PM2.5(ug/m3)":39,"PM10(ug/m3)":51} + //找默认数据 + WaylineJobAtmosphereBo jobAtmosphere = JSONUtil.toBean(json, WaylineJobAtmosphereBo.class); + jobAtmosphere.setAirData(JSONUtil.toJsonStr(airData)); + jobAtmosphere.setUtcTimeStr(utcTimeStr); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(DevicePayloadEntity::getPayloadSn,jobAtmosphere.getSerial()); + DevicePayloadEntity devicePayloadEntity = devicePayloadMapper.selectOne(queryWrapper); + String deviceSn = devicePayloadEntity.getDeviceSn(); + System.out.println(deviceSn); +// List devicePayloadEntitiesByDeviceSn = devicePayloadService.getDevicePayloadEntitiesByDeviceSn(""); + + +// String sn = json.getStr("8UUXN3100A01WS");//8UUXN3100A01WS 8UUXN2T00A01R8 + // 查找无人机/wayline信息 + WaylineJobDTO waylineJobDTO = waylineJobService.getJobByDockSn(deviceSn); +// waylineJobService.getid +// Optional jobOpt = waylineJobService.getJobByJobInternalId(sn); +// if (jobOpt.isPresent()) { +// waylineJobAtmosphereService.handleAdd(jobOpt.get(), json); +// } else { +// log.warn("找不到对应无人机任务:sn={}", sn); +// } +// "{\"SO2(ppm)\":0,\"NO2(ppm)\":0,\"Ox(ppm)\":0,\"PM1.0(ug/m3)\":16,\"PM2.5(ug/m3)\":38,\"PM10(ug/m3)\":48}" + + if(ObjectUtil.isNotEmpty(waylineJobDTO)){ + jobAtmosphere.setWaylineJobId((long)waylineJobDTO.getId()); + jobAtmosphere.setWaylineName(waylineJobDTO.getWaylineName()); + jobAtmosphere.setJobId(waylineJobDTO.getJobId()); + jobAtmosphere.setName(waylineJobDTO.getJobName()); + jobAtmosphere.setFileId(waylineJobDTO.getFileId()); + jobAtmosphere.setWorkspaceId(waylineJobDTO.getWorkspaceId()); + jobAtmosphere.setDockSn(waylineJobDTO.getDockSn()); +// BeanUtil.copyProperties(); + waylineJobAtmosphereService.insertByBo(jobAtmosphere); + } + } catch (Exception e) { + log.error("处理灵嗅MQTT消息异常", e); + } + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttStartupRunner.java b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttStartupRunner.java new file mode 100644 index 0000000..68dd5da --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/LingxiuMqttStartupRunner.java @@ -0,0 +1,22 @@ +package org.dromara.sample.configuration; + +import lombok.RequiredArgsConstructor; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class LingxiuMqttStartupRunner implements ApplicationRunner { + private final MqttLingxiuSubscriber subscriber; + + @Override + public void run(ApplicationArguments args) { + try { + subscriber.subscribe(); + } catch (Exception e) { + System.err.println("启动灵嗅 MQTT 订阅失败"+ e); + } + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/configuration/MqttLingxiuConfig.java b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/MqttLingxiuConfig.java new file mode 100644 index 0000000..72dbcf3 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/MqttLingxiuConfig.java @@ -0,0 +1,45 @@ +package org.dromara.sample.configuration; + +import org.eclipse.paho.client.mqttv3.MqttClient; +import org.eclipse.paho.client.mqttv3.MqttConnectOptions; +import org.eclipse.paho.client.mqttv3.MqttException; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MqttLingxiuConfig { + + @Value("${lingxiu.mqtt.broker}") + private String brokerUrl; + + @Value("${lingxiu.mqtt.clientId}") + private String clientId; + + @Value("${lingxiu.mqtt.username}") + private String username; + + @Value("${lingxiu.mqtt.password}") + private String password; + + @Bean + public MqttClient lingxiuMqttClient() throws MqttException { + MqttClient client = new MqttClient(brokerUrl, clientId, new MemoryPersistence()); + + MqttConnectOptions options = new MqttConnectOptions(); + options.setUserName(username); + options.setPassword(password.toCharArray()); + options.setAutomaticReconnect(true); + options.setCleanSession(true); + + client.connect(options); + return client; + } + + @Bean + public MqttLingxiuSubscriber mqttLingxiuSubscriber(MqttClient client, + LingxiuMqttMessageProcessor processor) { + return new MqttLingxiuSubscriber(client, processor); + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/configuration/MqttLingxiuSubscriber.java b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/MqttLingxiuSubscriber.java new file mode 100644 index 0000000..9ee2d30 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/MqttLingxiuSubscriber.java @@ -0,0 +1,45 @@ +package org.dromara.sample.configuration; + +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.*; + +import java.nio.charset.StandardCharsets; +import java.util.Arrays; + +@Slf4j +public class MqttLingxiuSubscriber { + + private final MqttClient client; + private final LingxiuMqttMessageProcessor processor; + + public MqttLingxiuSubscriber(MqttClient client, LingxiuMqttMessageProcessor processor) { + this.client = client; + this.processor = processor; + } + + public void subscribe() throws MqttException { + String[] topics = new String[]{"/topic/#"}; + + client.setCallback(new MqttCallback() { + @Override + public void connectionLost(Throwable cause) { + log.warn("灵嗅MQTT连接断开", cause); + } + + @Override + public void messageArrived(String topic, MqttMessage message) { + String payload = new String(message.getPayload(), StandardCharsets.UTF_8); + log.info("MQTT 收到消息:{} -> {}", topic, payload); + + processor.process(topic, payload); // 业务分发 + } + + @Override + public void deliveryComplete(IMqttDeliveryToken token) {} + }); + + for (String topic : topics) { + client.subscribe(topic, 1); + } + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java index a702779..7d97e73 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java @@ -23,6 +23,8 @@ import java.util.List; @Builder public class WaylineJobDTO { + private Integer id; + private String jobId; private String jobName; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java index 82790e3..f3786e7 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java @@ -293,6 +293,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService { } WaylineJobDTO.WaylineJobDTOBuilder builder = WaylineJobDTO.builder() + .id(entity.getId()) .jobId(entity.getJobId()) .jobName(entity.getName()) .fileId(entity.getFileId()) From 3c16e090bbf980fd38959cddbe953b27585fd6d1 Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Tue, 17 Jun 2025 16:22:35 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=8F=90=E4=BA=A4:=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/AiCompareStatusConstants.java | 4 + .../sample/wayline/model/dto/FrameDTO.java | 2 + .../service/impl/AiCompareServiceImpl.java | 117 ++++++++++++++++-- 3 files changed, 111 insertions(+), 12 deletions(-) diff --git a/dk-common/common-core/src/main/java/org/dromara/common/core/constant/AiCompareStatusConstants.java b/dk-common/common-core/src/main/java/org/dromara/common/core/constant/AiCompareStatusConstants.java index 20fd053..6d9c4d0 100644 --- a/dk-common/common-core/src/main/java/org/dromara/common/core/constant/AiCompareStatusConstants.java +++ b/dk-common/common-core/src/main/java/org/dromara/common/core/constant/AiCompareStatusConstants.java @@ -33,4 +33,8 @@ public interface AiCompareStatusConstants { String QUEUW_TYPE_0="0"; String QUEUW_TYPE_1="1"; + /** 平台类型 2:天眼巡*/ + Integer COMPARETYPE=2; + + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java index 886f697..b69ddad 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java @@ -48,4 +48,6 @@ public class FrameDTO { /**模板图片*/ private String mateFileUrl; + + private Integer compareType; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java index b7aaa42..278ea2c 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -14,6 +15,12 @@ import io.minio.StatObjectArgs; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; import org.dromara.business.api.RemoteBusinessAlertService; import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo; import org.dromara.business.api.domain.vo.RemoteBusinessAlertConstructInfo; @@ -28,6 +35,8 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.sdk.mqtt.CommonTopicRequest; import org.dromara.common.sdk.mqtt.MqttGatewayPublish; import org.dromara.common.sdk.mqtt.TopicConst; +import org.dromara.sample.feign.RemoteConfigFeign; +import org.dromara.sample.feign.RemoteSystemFeign; import org.dromara.sample.media.constant.MinIOConstants; import org.dromara.sample.media.service.IFileService; import org.dromara.sample.wayline.mapper.IAiCompareMapper; @@ -43,10 +52,13 @@ import org.dromara.sample.wayline.service.IAiCompareService; import org.dromara.system.api.model.LoginUser; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; +import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; +import java.net.URI; import java.util.*; import java.util.stream.Collectors; @@ -68,8 +80,9 @@ public class AiCompareServiceImpl implements IAiCompareService { @DubboReference private final RemoteBusinessAlertService businessAlertService; + private final RemoteSystemFeign remoteSystemFeign; @DubboReference(timeout = 30000) - private RemoteWorkflowService remoteWorkflowService; + private final RemoteWorkflowService remoteWorkflowService; @Override public TableDataInfo queryPageList(AiCompareDTO bo, PageQuery pageQuery) { @@ -88,7 +101,6 @@ public class AiCompareServiceImpl implements IAiCompareService { return wrapper; } @Override - @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(List> compareDTOList) { if(compareDTOList.isEmpty()){ throw new RuntimeException("未选择比对数据"); @@ -131,19 +143,53 @@ public class AiCompareServiceImpl implements IAiCompareService { if(jobEntityList.isEmpty()){ throw new RuntimeException("("+serviceInfo.getWaylineName()+")未找到对应的模板"); }else { - aiCompareEntity.setTemplateId(jobEntityList.get(0).getJobId()); + templateId=jobEntityList.get(0).getJobId(); + aiCompareEntity.setTemplateId(templateId); } } aiCompareMapper.insert(aiCompareEntity); - String topic = TopicConst.IMAGE +TopicConst.COMPARE; List mediaFileDTOS = listMediaFile(aiCompareEntity.getJobId(),aiCompareEntity.getId(),43200,false); - mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1); + + String compareUrl = remoteSystemFeign.getConfigKeyFeign("ai_algorithm_compare"); + if(StrUtil.isNotEmpty(compareUrl)){ + //添加到算法平台 + MapcompareMap = new HashMap<>(); + compareMap.put("id",aiCompareEntity.getId()); + compareMap.put("totalNum",aiCompareEntity.getTotalNum()); + compareMap.put("compareType",AiCompareStatusConstants.COMPARETYPE); + compareMap.put("compareName",aiCompareEntity.getWaylineName()); + compareMap.put("parm",mediaFileDTOS); + compareMap.put("mateTask",templateId); + try(CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost httpPost =new HttpPost(); + httpPost.setHeader("Content-Type","application/json"); + httpPost.setURI(URI.create(compareUrl)); + httpPost.setEntity(new StringEntity(JSON.toJSONString(compareMap), "UTF-8")); + CloseableHttpResponse response = httpClient.execute(httpPost); + String resp = EntityUtils.toString(response.getEntity(), "utf-8"); + }catch (IOException e) { + e.printStackTrace(); + + } + }else { + String topic = TopicConst.IMAGE +TopicConst.COMPARE; + mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1); + } + + + // insertList.add(aiCompareEntity); } // List resultList = aiCompareMapper.insertOrUpdate(insertList, 10); List list =compareDTOList.stream().map(e->Convert.toLong(e.get("queueId"))).collect(Collectors.toList()); return aiCompareQueueService.updateStatus(list,AiCompareStatusConstants.QUEUW_TYPE_1); } + + @Nullable + private static Object getId(Map compareMap, AiCompareEntity aiCompareEntity) { + return compareMap.put("id", aiCompareEntity.getId()); + } + public List listMediaFile(String jobId,Long compareId,Integer seconds ,boolean isIllegal){ List mediaFileDTOList = aiCompareMapper.listMediaFile(jobId,compareId); if(!mediaFileDTOList.isEmpty()){ @@ -166,8 +212,8 @@ public class AiCompareServiceImpl implements IAiCompareService { @Override public Boolean update(Map compareDTO) { - AiCompareEntity aiCompareEntity =new AiCompareEntity(); Long id = compareDTO.containsKey("id") ? Convert.toLong(compareDTO.get("id")) : null; + AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(id); String templateId = compareDTO.containsKey("templateId") ? Convert.toStr(compareDTO.get("templateId")) : null; aiCompareEntity.setId(id); if(StrUtil.isNotEmpty(templateId)){ @@ -176,9 +222,36 @@ public class AiCompareServiceImpl implements IAiCompareService { aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_1); int i = aiCompareMapper.updateById(aiCompareEntity); AiCompareEntity compareEntity = aiCompareMapper.selectById(id); - String topic = TopicConst.IMAGE +TopicConst.COMPARE; + List mediaFileDTOS = listMediaFile(compareEntity.getJobId(),compareEntity.getId(),43200,false); - mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1); + + //平台url + String compareUrl = remoteSystemFeign.getConfigKeyFeign("ai_algorithm_compare"); + if(StrUtil.isNotEmpty(compareUrl)){ + //添加到算法平台 + MapcompareMap = new HashMap<>(); + compareMap.put("id",aiCompareEntity.getId()); + compareMap.put("totalNum",aiCompareEntity.getTotalNum()); + compareMap.put("compareType",AiCompareStatusConstants.COMPARETYPE); + compareMap.put("compareName",aiCompareEntity.getWaylineName()); + compareMap.put("parm",mediaFileDTOS); + compareMap.put("mateTask",templateId); + try(CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost httpPost =new HttpPost(); + httpPost.setHeader("Content-Type","application/json"); + httpPost.setURI(URI.create(compareUrl)); + httpPost.setEntity(new StringEntity(JSON.toJSONString(compareMap), "UTF-8")); + CloseableHttpResponse response = httpClient.execute(httpPost); + String resp = EntityUtils.toString(response.getEntity(), "utf-8"); + }catch (IOException e) { + e.printStackTrace(); + + } + }else { + System.out.println("mqtt推送"); + String topic = TopicConst.IMAGE +TopicConst.COMPARE; + mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(mediaFileDTOS),1); + } return i>0; } @@ -220,15 +293,35 @@ public class AiCompareServiceImpl implements IAiCompareService { String originMateFileUrl = frameDTO.getMateFileUrl(); String mateFileUrl = fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE, originMateFileUrl, 3600).toString(); frameDTO.setMateFileUrl(mateFileUrl); - String topic = TopicConst.IMAGE +TopicConst.FRAME; - - // if(StrUtil.equals(activeProfile,"w_fengxianranqi")) // activeProfile="w_fengxianranqi" String activeProfile = MapUtil.getStr(objectMap, "activeProfile", "default"); if (StrUtil.equals("default", activeProfile)) { + /* String topic = TopicConst.IMAGE +TopicConst.FRAME; //发送mqtt给算法,处理完 - mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(frameDTO), 1); + mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(frameDTO), 1);*/ + + //添加到算法平台 + String compareUrl = remoteSystemFeign.getConfigKeyFeign("ai_algorithm_frame"); + if(StrUtil.isNotEmpty(compareUrl)){ + frameDTO.setCompareType(AiCompareStatusConstants.COMPARETYPE); + try(CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost httpPost =new HttpPost(); + httpPost.setHeader("Content-Type","application/json"); + httpPost.setURI(URI.create(compareUrl)); + httpPost.setEntity(new StringEntity(JSON.toJSONString(frameDTO), "UTF-8")); + CloseableHttpResponse response = httpClient.execute(httpPost); + String resp = EntityUtils.toString(response.getEntity(), "utf-8"); + }catch (IOException e) { + e.printStackTrace(); + + } + }else { + String topic = TopicConst.IMAGE +TopicConst.FRAME; + //发送mqtt给算法,处理完 + mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(frameDTO), 1); + } + } else { //图片处理 From d466edcc6f0daf4647ffead93912f430fd0705b1 Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Wed, 18 Jun 2025 10:16:24 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=8F=90=E4=BA=A4:=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E8=A1=A8=E5=8E=BB=E6=8E=89=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/system/SysConfigController.java | 8 ++++---- .../dromara/system/service/impl/SysConfigServiceImpl.java | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysConfigController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysConfigController.java index 4c5761b..7531c59 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysConfigController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysConfigController.java @@ -86,9 +86,9 @@ public class SysConfigController extends BaseController { @Log(title = "参数管理", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysConfigBo config) { - if (!configService.checkConfigKeyUnique(config)) { + /*if (!configService.checkConfigKeyUnique(config)) { return R.fail("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); - } + }*/ configService.insertConfig(config); return R.ok(); } @@ -100,9 +100,9 @@ public class SysConfigController extends BaseController { @Log(title = "参数管理", businessType = BusinessType.UPDATE) @PutMapping public R edit(@Validated @RequestBody SysConfigBo config) { - if (!configService.checkConfigKeyUnique(config)) { + /*if (!configService.checkConfigKeyUnique(config)) { return R.fail("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); - } + }*/ configService.updateConfig(config); return R.ok(); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java index b043d07..f295e77 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java @@ -67,7 +67,7 @@ public class SysConfigServiceImpl implements ISysConfigService { * @param configKey 参数key * @return 参数键值 */ - @Cacheable(cacheNames = CacheNames.SYS_CONFIG, key = "#configKey") + /*@Cacheable(cacheNames = CacheNames.SYS_CONFIG, key = "#configKey")*/ @Override public String selectConfigByKey(String configKey) { SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper() @@ -125,7 +125,7 @@ public class SysConfigServiceImpl implements ISysConfigService { * @param bo 参数配置信息 * @return 结果 */ - @CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#bo.configKey") + /*@CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#bo.configKey")*/ @Override public String insertConfig(SysConfigBo bo) { SysConfig config = MapstructUtils.convert(bo, SysConfig.class); @@ -142,7 +142,7 @@ public class SysConfigServiceImpl implements ISysConfigService { * @param bo 参数配置信息 * @return 结果 */ - @CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#bo.configKey") + /* @CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#bo.configKey")*/ @Override public String updateConfig(SysConfigBo bo) { int row = 0; From 61697cb424d6ae222ad606ad93370ead0113672f Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Wed, 18 Jun 2025 13:53:50 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=8F=90=E4=BA=A4:=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E8=8E=B7=E5=8F=96=E9=A2=84=E8=AD=A6=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/RemoteDepartBoundaryService.java | 9 ++++ .../domain/vo/RemoteSysDepartBoundaryVo.java | 54 +++++++++++++++++++ .../impl/BusinessAlertServiceImpl.java | 18 ++++--- .../controller/AiCompareController.java | 3 +- .../wayline/service/IAiCompareService.java | 2 +- .../service/impl/AiCompareServiceImpl.java | 15 +++++- .../RemoteDepartBoundaryServiceImpl.java | 31 +++++++++++ 7 files changed, 122 insertions(+), 10 deletions(-) create mode 100644 dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDepartBoundaryService.java create mode 100644 dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSysDepartBoundaryVo.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDepartBoundaryServiceImpl.java diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDepartBoundaryService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDepartBoundaryService.java new file mode 100644 index 0000000..beab0f2 --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDepartBoundaryService.java @@ -0,0 +1,9 @@ +package org.dromara.system.api; + +import org.dromara.system.api.domain.vo.RemoteSysDepartBoundaryVo; + +import java.util.List; + +public interface RemoteDepartBoundaryService { + List listDepartBoundaryByLngAndLat(Double lng, Double lat); +} diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSysDepartBoundaryVo.java b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSysDepartBoundaryVo.java new file mode 100644 index 0000000..fb7cc42 --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteSysDepartBoundaryVo.java @@ -0,0 +1,54 @@ +package org.dromara.system.api.domain.vo; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +@NoArgsConstructor +public class RemoteSysDepartBoundaryVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Long id; + /**机构ID*/ + private Long deptId; + + /**机构/部门名称*/ + private String deptName; + + /**部门全路径*/ + private String namePath; + + /**边界*/ + private String boundary; + + /** + * 区域类别 areaType: 0:市级 1:区级(县) 2:镇级(街道) 3:村级 + */ + private Integer areaType; + + /** + * 父类id + */ + private Long parentId; + + /**删除状态(0,正常,1已删除)*/ + private String delFlag; + + + private List deptIds; + + + + + + + + + + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index 91ad10d..967c377 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -49,10 +49,7 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.resource.api.RemoteMessageService; import org.dromara.system.api.*; import org.dromara.system.api.domain.bo.RemoteNoticeBo; -import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo; -import org.dromara.system.api.domain.vo.RemoteDeptVo; -import org.dromara.system.api.domain.vo.RemotePostVo; -import org.dromara.system.api.domain.vo.RemoteUserVo; +import org.dromara.system.api.domain.vo.*; import org.dromara.business.domain.BusinessAlertConstructInfoOss; import org.dromara.business.mapper.BusinessAlertConstructInfoOssMapper; import org.dromara.system.api.model.RoleDTO; @@ -140,7 +137,8 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { @DubboReference(timeout = 30000) RemoteDataScopeService remoteDataScopeService; - + @DubboReference(timeout = 30000) + RemoteDepartBoundaryService remoteDepartBoundaryService; /** * 新增预警任务 * @@ -282,7 +280,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { */ @Override public Boolean batchAddBusinessAlert(List alertVoList, String activeProfile, Long pushDeptId) { - List businessAlerts = alertVoList.stream().map(alert -> { + List businessAlerts = alertVoList.parallelStream().map(alert -> { BusinessAlert businessAlert = new BusinessAlert(); alert.setCreateTime(new Date()); alert.setHandleType(BusinessStatusEnum.VERIFY.getStatus()); @@ -300,7 +298,13 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { //查询历史预警 List businessAlertList = this.listHandleHistory(alert.getLng(), alert.getLat(), DateUtils.parseDateToStr(FormatsType.YYYY_MM_DD_HH_MM_SS, alert.getCreateTime())); businessAlert.setHandleNum(businessAlertList.size()); - + //查询预警所在的部门 + List boundaryVoList = remoteDepartBoundaryService.listDepartBoundaryByLngAndLat(Convert.toDouble(alert.getLng()), Convert.toDouble(alert.getLat())); + if(!boundaryVoList.isEmpty()){ + RemoteSysDepartBoundaryVo boundaryVo = boundaryVoList.get(boundaryVoList.size() - 1); + businessAlert.setDeptId(Convert.toStr(boundaryVo.getDeptId())); + businessAlert.setDeptName(boundaryVo.getDeptName()); + } return businessAlert; }).toList(); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java index 0e4b2b4..dfe9d9d 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java @@ -189,11 +189,12 @@ public class AiCompareController extends BaseController { /** * * 删除验证列表预警 - * @param ids 主键串 + * @param ids 主键 * * */ @SaCheckPermission("sample:compare:delAlertList") @DeleteMapping("/delAlertList") public R delAlertList(Long ids) { + return toAjax(aiCompareService.delAlertList(List.of(ids))); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java index dae7a03..a385aa4 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java @@ -30,7 +30,7 @@ public interface IAiCompareService { Boolean pictureFrame(MapobjectMap); Boolean expose(List> mapList); Boolean alert(Mapmap); - + AiCompareEntity selectById(Long id); List alertList(String jobId); Boolean delAlertList(Listids); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java index 278ea2c..e299446 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java @@ -97,7 +97,8 @@ public class AiCompareServiceImpl implements IAiCompareService { .like(StringUtils.isNotBlank(bo.getDeptName()), "lower(dept_name)", StringUtils.lowerCase(bo.getDeptName())) .like(StringUtils.isNotBlank(bo.getJobName()), "lower(job_name)", StringUtils.lowerCase(bo.getJobName())) .between(params.get("beginTime") != null && params.get("endTime") != null, - "create_time", params.get("beginTime"), params.get("endTime")).orderByDesc("create_time"); + "create_time", params.get("beginTime"), params.get("endTime")).orderByDesc("create_time") + .gt(ObjectUtil.isNotEmpty(bo.getCreateTime()),"create_time",bo.getCreateTime()); return wrapper; } @Override @@ -444,6 +445,11 @@ public class AiCompareServiceImpl implements IAiCompareService { return businessAlertService.saveBusinessAlert(handleList,"default"); } + @Override + public AiCompareEntity selectById(Long id) { + return aiCompareMapper.selectById(id); + } + @Override public List alertList(String jobId) { RemoteBusinessAlertBo businessAlertBo = new RemoteBusinessAlertBo(); @@ -453,6 +459,13 @@ public class AiCompareServiceImpl implements IAiCompareService { @Override public Boolean delAlertList(List ids) { + + /* AiCompareEntity aiCompareEntity =aiCompareMapper.selectById(compareId); + aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_4); + List alertList = alertList(aiCompareEntity.getJobId()); + if(alertList.isEmpty()){ + aiCompareMapper.updateById(aiCompareEntity); + }*/ return businessAlertService.deleteAlert(ids); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDepartBoundaryServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDepartBoundaryServiceImpl.java new file mode 100644 index 0000000..f616e51 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDepartBoundaryServiceImpl.java @@ -0,0 +1,31 @@ +package org.dromara.system.dubbo; + +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.system.api.RemoteDepartBoundaryService; +import org.dromara.system.api.domain.vo.RemoteSocialVo; +import org.dromara.system.api.domain.vo.RemoteSysDepartBoundaryVo; +import org.dromara.system.domain.SysDepartBoundary; +import org.dromara.system.domain.vo.SysSocialVo; +import org.dromara.system.service.ISysDepartBoundaryService; +import org.dromara.system.service.ISysDeptService; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static kotlin.reflect.jvm.internal.impl.builtins.StandardNames.FqNames.list; + +@RequiredArgsConstructor +@Service +@DubboService +public class RemoteDepartBoundaryServiceImpl implements RemoteDepartBoundaryService { + + private final ISysDepartBoundaryService sysDepartBoundaryService; + + @Override + public List listDepartBoundaryByLngAndLat(Double lng, Double lat) { + List boundaryList = sysDepartBoundaryService.listDepartBoundaryByLngAndLat(lng, lat); + return MapstructUtils.convert(boundaryList, RemoteSysDepartBoundaryVo.class); + } +}