From c2f24932bc016fc91bc3d0583517e5d143ee3967 Mon Sep 17 00:00:00 2001 From: shizisheng Date: Wed, 7 May 2025 00:28:00 +0800 Subject: [PATCH 01/29] =?UTF-8?q?=E5=A4=A9=E7=BF=BC=E4=BA=91=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8minio=E8=AE=BF=E9=97=AE=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/config/OssTianyiConfig.java | 79 +++++++ .../controller/OssTianyiController.java | 58 +++++ .../sample/storage/domain/SysUploadFile.java | 211 ++++++++++++++++++ .../storage/util/OssTianyiClientUtils.java | 174 +++++++++++++++ 4 files changed, 522 insertions(+) create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/storage/config/OssTianyiConfig.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/OssTianyiController.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/storage/domain/SysUploadFile.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/storage/util/OssTianyiClientUtils.java diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/storage/config/OssTianyiConfig.java b/dk-modules/sample/src/main/java/org/dromara/sample/storage/config/OssTianyiConfig.java new file mode 100644 index 0000000..3fcf366 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/storage/config/OssTianyiConfig.java @@ -0,0 +1,79 @@ +package org.dromara.sample.storage.config; + +import io.minio.MinioClient; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Minio 配置信息 + * + * @author ruoyi + */ +@Configuration +@ConfigurationProperties(prefix = "osstianyi") +public class OssTianyiConfig +{ + + private String endPoint; + private String accessKey; + private String secretKey; + private String bucketName; + + public String getEndPoint() { + return endPoint; + } + + public void setEndPoint(String endPoint) { + this.endPoint = endPoint; + } + + public String getAccessKey() + { + return accessKey; + } + + public void setAccessKey(String accessKey) + { + this.accessKey = accessKey; + } + + public String getSecretKey() + { + return secretKey; + } + + public void setSecretKey(String secretKey) + { + this.secretKey = secretKey; + } + + public String getBucketName() + { + return bucketName; + } + + public void setBucketName(String bucketName) + { + this.bucketName = bucketName; + } + + @Override + public String toString() { + return "OssTianyiConfig{" + + "endPoint='" + endPoint + '\'' + + ", accessKey='" + accessKey + '\'' + + ", secretKey='" + secretKey + '\'' + + ", bucketName='" + bucketName + '\'' + + '}'; + } + + @Bean + public MinioClient getMinioClient() + { +// System.out.println("OssTianyiConfig"); +// System.out.println("OssTianyiConfig" + endPoint); + System.out.println(toString()); + return MinioClient.builder().endpoint(endPoint).credentials(accessKey, secretKey).build(); + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/OssTianyiController.java b/dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/OssTianyiController.java new file mode 100644 index 0000000..0f29fee --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/OssTianyiController.java @@ -0,0 +1,58 @@ +package org.dromara.sample.storage.controller; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.core.domain.R; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.sample.storage.domain.SysUploadFile; +import org.dromara.sample.storage.util.OssTianyiClientUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.HashMap; + +/** + * 系统上传文件Controller + * + * @author tom + * @date 2024-12-21 + */ +@RestController +@RequestMapping("/ossTianyi") +public class OssTianyiController extends BaseController +{ + + @Autowired + private OssTianyiClientUtils ossTianyiClientUtils; + + /** + * 查询系统上传文件列表 (实际是上传接口) + */ + @SaCheckPermission("file:sysUploadFile:list") + @GetMapping("/list") + public TableDataInfo list(SysUploadFile sysUploadFile) + { + String localFilePath = "D:\\123pan\\page.html"; + try{ + ossTianyiClientUtils.uploadFileTest("page.html","dev/temp",localFilePath); + }catch (Exception e){ + e.printStackTrace(); + } + + return null; + } + + @GetMapping("/upload") + public R> upload(@RequestPart("file") MultipartFile file) { + try { + ossTianyiClientUtils.uploadFile("page.html", "dev/temp", file); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/storage/domain/SysUploadFile.java b/dk-modules/sample/src/main/java/org/dromara/sample/storage/domain/SysUploadFile.java new file mode 100644 index 0000000..9e004dd --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/storage/domain/SysUploadFile.java @@ -0,0 +1,211 @@ +package org.dromara.sample.storage.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +/** + * 系统上传文件对象 sys_upload_file + * + * @author tom + * @date 2024-12-21 + */ +@TableName("sys_upload_file") +public class SysUploadFile extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + @TableId(value="id",type = IdType.AUTO) + private Long id; + + /** 删除标记 */ + @TableField("del_flag") + private Long delFlag; + + /** 文件名称 */ + @TableField("name") + private String name; + + /** 上传时文件名 */ + @TableField("file_name") + private String fileName; + + /** 物理路径 */ + @TableField("path") + private String path; + + /** 文件URL */ + @TableField("url") + private String url; + + /** 文件扩展名 */ + @TableField("extend") + private String extend; + + /** 文件类型 */ + @TableField("dict_file_type") + private Long dictFileType; + + /** 关联对象ID */ + @TableField("object_id") + private Long objectId; + + /** 关联对象类型 */ + @TableField("object_type") + private String objectType; + + /** 关联对象ID */ + @TableField("object_link_id") + private String objectLinkId; + + /** 排序 */ + @TableField("sort") + private Long sort; + + /** 标签 */ + @TableField("tags") + private String tags; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setDelFlag(Long delFlag) + { + this.delFlag = delFlag; + } + + public Long getDelFlag() + { + return delFlag; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setFileName(String fileName) + { + this.fileName = fileName; + } + + public String getFileName() + { + return fileName; + } + public void setPath(String path) + { + this.path = path; + } + + public String getPath() + { + return path; + } + public void setUrl(String url) + { + this.url = url; + } + + public String getUrl() + { + return url; + } + public void setExtend(String extend) + { + this.extend = extend; + } + + public String getExtend() + { + return extend; + } + public void setDictFileType(Long dictFileType) + { + this.dictFileType = dictFileType; + } + + public Long getDictFileType() + { + return dictFileType; + } + public void setObjectId(Long objectId) + { + this.objectId = objectId; + } + + public Long getObjectId() + { + return objectId; + } + public void setObjectType(String objectType) + { + this.objectType = objectType; + } + + public String getObjectType() + { + return objectType; + } + + public String getObjectLinkId() { + return objectLinkId; + } + + public void setObjectLinkId(String objectLinkId) { + this.objectLinkId = objectLinkId; + } + + public void setSort(Long sort) + { + this.sort = sort; + } + + public Long getSort() + { + return sort; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .append("name", getName()) + .append("fileName", getFileName()) + .append("path", getPath()) + .append("url", getUrl()) + .append("extend", getExtend()) + .append("dictFileType", getDictFileType()) + .append("objectId", getObjectId()) + .append("objectType", getObjectType()) + .append("sort", getSort()) + .toString(); + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/storage/util/OssTianyiClientUtils.java b/dk-modules/sample/src/main/java/org/dromara/sample/storage/util/OssTianyiClientUtils.java new file mode 100644 index 0000000..e952f4a --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/storage/util/OssTianyiClientUtils.java @@ -0,0 +1,174 @@ +package org.dromara.sample.storage.util; + +import cn.hutool.core.io.FileUtil; +import io.minio.*; +import io.minio.errors.*; +import io.minio.messages.Item; +import org.dromara.sample.storage.config.OssTianyiConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +@Component +public class OssTianyiClientUtils { + + private static MinioClient minioClient; + +// private static String endPoint = "https://jiangsu-10.zos.ctyun.cn"; //地域节点,可访问 +// // private static String endPoint = "https://dk-ty-oss-bucket.jiangsu-10.zos.ctyun.cn"; //说是桶的域名地址,支持公网访问ZOS,实测报错 +// private static String minioAccessKey = "22e3f37368a242b38f4f25d98c9baf1f"; +// private static String minioSecretKey = "0d858850666248e59830d9a596847062"; + +// private static String bucketName = "dk-ty-oss-bucket"; +// private String bucketName = "dkossbucket"; + private String objectName = "page.html"; + //注意,天翼云里默认路径就是文件名,不需要在前面加根路径/ + private String filePath = "dev/temp/"; + private String fileDir = "dev"; + + + @Autowired + OssTianyiConfig ossTianyiConfig; + + @Autowired + public OssTianyiClientUtils(OssTianyiConfig ossTianyiConfig) { + this.ossTianyiConfig = ossTianyiConfig; + init(); + } + + private void init() { + this.minioClient = MinioClient.builder() + .endpoint(ossTianyiConfig.getEndPoint()) + .credentials(ossTianyiConfig.getAccessKey(), ossTianyiConfig.getSecretKey()) + .build(); + } + + /** + * 天翼云OSS初始化(采用S3 Compatible Storage) + */ +// public void tianyiOssInit() { +// minioClient = MinioClient.builder() +// .endpoint(ossTianyiConfig.getEndPoint()) +// .credentials(ossTianyiConfig.getAccessKey(), ossTianyiConfig.getSecretKey()) +// .build(); +// } + + /** + * 文件上传 (固定) + */ + public void uploadFileTest(String objectName, String filePath, String localFilePath) throws Exception { + File file = new File(localFilePath); + BufferedInputStream inputStream = FileUtil.getInputStream(file); + String contentType = Files.probeContentType(file.toPath()); + if (contentType == null) { + contentType = "application/octet-stream"; + } + PutObjectArgs args = PutObjectArgs.builder() + .bucket(ossTianyiConfig.getBucketName()) + .object(filePath + objectName) + .stream(inputStream, FileUtil.size(file), -1) + .contentType(contentType) + .build(); + minioClient.putObject(args); + } + + public void uploadFile(String s, String s1, MultipartFile file) { + try { + PutObjectArgs args = PutObjectArgs.builder() + .bucket(ossTianyiConfig.getBucketName()) + .object( file.getName()) + .stream(file.getInputStream(), file.getSize(), -1) + .contentType(file.getContentType()) + .build(); + minioClient.putObject(args); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + + /** + * 文件删除 + */ + public void deleteFile(String bucketName, String objectName) throws Exception { + minioClient.removeObject( + RemoveObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .build()); + } + + /** + * 文件下载 + */ + public void downloadFile(String bucketName, String objectName, String downloadPath) throws Exception { + InputStream inputStream = minioClient.getObject( + GetObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .build() + ); + FileUtil.writeFromStream(inputStream, new File(downloadPath)); + } + + /** + * 文件列表 + * @param bucketName + * @param prefix + */ + public void listFiles(String bucketName, String prefix) { + Iterable> results = minioClient.listObjects( + ListObjectsArgs.builder() + .bucket(bucketName) + .prefix(prefix) + .recursive(true) + .build() + ); + + try { + for (Result result : results) { + try { +// System.out.println("文件名:" + result.get().objectName()); // 获取对象名称(文件路径) + System.out.println(result.get().objectName()); // 获取对象名称(文件路径) + } catch (Exception e) { + e.printStackTrace(); + } + } + + } catch (Exception e) { + System.err.println("文件读取异常: " + e.getMessage()); + } + + } + + + + +// public void updateFile(String bucketName, String objectName, String filePath, String localFilePath) throws Exception { +// uploadFile(bucketName, objectName, filePath, localFilePath); +// } + + +// public static void main(String[] args) throws Exception { +// String localFilePath = "D:\\123pan\\page.html"; +// +// tianyiOssInit("", "", ""); +// uploadFile(bucketName, objectName, filePath, localFilePath);//正常 +//// deleteFile(bucketName, filePath + objectName);//正常 +//// listFiles(bucketName, fileDir + "/"); // 正常 +// +//// downloadFile(bucketName, filePath + objectName, "D:\\123pan\\downloaded_page.html"); //正常 +// +// } + +} From 855e915ddee7c048030a197dd8e8275597b8af5e Mon Sep 17 00:00:00 2001 From: yangwei <867012372@qq.com> Date: Sat, 10 May 2025 17:21:16 +0800 Subject: [PATCH 02/29] =?UTF-8?q?[feat]=201=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=A2=84=E8=AD=A6=E6=9F=A5=E8=AF=A2=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/business/BusinessAlertMapper.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml index d044dc9..3d5c716 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml @@ -449,8 +449,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" COUNT(DISTINCT ba.id) AS total from business_alert ba where 1=1 - and = '2024' ]]> - and + and ba.handle_type = 'finish' From e446b8bca40918682c2921c8b38ca5eae240e0eb Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Sun, 11 May 2025 11:00:34 +0800 Subject: [PATCH 03/29] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WaylineJobController.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java index c7df333..a28e0a5 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java @@ -3,25 +3,33 @@ package org.dromara.sample.wayline.controller; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.common.core.domain.R; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.sdk.cloudapi.wayline.FlighttaskProgress; import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum; import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.PaginationData; +import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.wayline.model.dto.WaylineJobDTO; import org.dromara.sample.wayline.model.param.CreateJobParam; import org.dromara.sample.wayline.model.param.UpdateJobParam; import org.dromara.sample.wayline.service.IFlightTaskService; +import org.dromara.sample.wayline.service.IWaylineFileService; import org.dromara.sample.wayline.service.IWaylineJobService; +import org.dromara.sample.wayline.service.IWaylineRedisService; import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.io.IOException; +import java.net.URL; import java.sql.SQLException; import java.util.List; +import java.util.Optional; import java.util.Set; @@ -41,6 +49,11 @@ public class WaylineJobController { @Autowired private IFlightTaskService flighttaskService; + @Autowired + private IWaylineRedisService waylineRedisService; + + @Autowired + private IWaylineFileService waylineFileService; /** * Create a wayline task for the Dock. * @param request @@ -108,6 +121,21 @@ public class WaylineJobController { } - + @GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn") + @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。") + public void getJobFileUrlByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId, + @RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) { + try { + Optional> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn); + if(runningWaylineJob.isEmpty())return; + String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId(); + Optional waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, jobId); + if(waylineJobDTO.isEmpty())return; + URL url = waylineFileService.getObjectUrl(workspaceId, waylineJobDTO.get().getFileId()); + rsp.sendRedirect(url.toString()); + } catch (IOException | SQLException e) { + e.printStackTrace(); + } + } } From 51deca2ed72111e00ce2e11fa059ef7c1a6ae38c Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Sun, 11 May 2025 18:13:02 +0800 Subject: [PATCH 04/29] =?UTF-8?q?=E6=8F=90=E4=BA=A4:=20AI=E9=A2=84?= =?UTF-8?q?=E8=AD=A6=E5=AE=9E=E6=97=B6=E6=8E=A8=E9=80=81=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/api/RemoteNoticeService.java | 10 +++ .../system/api/domain/bo/RemoteNoticeBo.java | 74 +++++++++++++++++++ .../controller/BusinessAlertController.java | 25 ++++++- .../business/domain/vo/BusinessAlertVo.java | 1 + .../org/dromara/system/domain/SysNotice.java | 1 + .../system/dubbo/RemoteNoticeServiceImpl.java | 38 ++++++++++ 6 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java create mode 100644 dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java new file mode 100644 index 0000000..af7661f --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java @@ -0,0 +1,10 @@ +package org.dromara.system.api; + +import org.dromara.system.api.domain.bo.RemoteNoticeBo; +import org.dromara.system.api.domain.vo.RemotePostVo; + +import java.util.List; + +public interface RemoteNoticeService { + int saveNotice(RemoteNoticeBo bo); +} diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java new file mode 100644 index 0000000..9ff720f --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java @@ -0,0 +1,74 @@ +package org.dromara.system.api.domain.bo; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * 操作日志记录表 oper_log + * + * @author Lion Li + */ +@Data +@NoArgsConstructor +public class RemoteNoticeBo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long noticeId; + + + /** + * 公告标题 + */ + private String noticeTitle; + + /** + * 公告类型(1通知 2公告) + */ + private String noticeType; + + /** + * 公告内容 + */ + private String noticeContent; + + /** + * 公告状态(0正常 1关闭) + */ + private String status; + + /** + * 备注 + */ + private String remark; + + private Integer isRead; + /** + * 创建部门 + */ + + private Long createDept; + + /** + * 创建者 + */ + + private Long createBy; + private String deviceSn; + + /** + * 创建时间 + */ + private Date createTime; + + private String param; + + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java index 229dba3..d3f2659 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java @@ -1,6 +1,7 @@ package org.dromara.business.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -9,17 +10,22 @@ import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.vo.BusinessAlertVo; import org.dromara.business.service.IBusinessAlertService; +import org.dromara.business.utils.MinioUntil; +import org.dromara.business.utils.constants.MinIOConstants; import org.dromara.common.core.domain.R; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.system.api.RemoteNoticeService; +import org.dromara.system.api.domain.bo.RemoteNoticeBo; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.Date; import java.util.List; /** @@ -39,6 +45,8 @@ public class BusinessAlertController extends BaseController { private final IBusinessAlertService businessAlertService; @DubboReference(timeout = 30000) private RemoteWorkflowService remoteWorkflowService; + @DubboReference(timeout = 30000) + private RemoteNoticeService remoteNoticeService; /** * 查询全部预警/待办/已完成/忽略 @@ -79,13 +87,28 @@ public class BusinessAlertController extends BaseController { */ @Operation(summary ="ai实时流预警保存",description = "ai实时流预警保存") @PostMapping("/saveAlert") - public void saveAlert(BusinessAlertVo vo) { + public void saveAlert(@RequestBody BusinessAlertVo vo) { vo.setBusinessType(2); BusinessAlert businessAlert = businessAlertService.addBusinessAlert(vo); RemoteStartProcess startProcess = new RemoteStartProcess(); startProcess.setBusinessId(String.valueOf(businessAlert.getId())); startProcess.setFlowCode("alertChz"); remoteWorkflowService.startWorkFlowBatch(List.of(startProcess)); + RemoteNoticeBo remoteNoticeBo = new RemoteNoticeBo(); + remoteNoticeBo.setNoticeTitle(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); + remoteNoticeBo.setNoticeType("3"); + remoteNoticeBo.setNoticeContent(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); + remoteNoticeBo.setStatus("0"); + remoteNoticeBo.setIsRead(0); + remoteNoticeBo.setCreateBy(1L); + remoteNoticeBo.setCreateDept(1L); + remoteNoticeBo.setCreateTime(new Date()); + if (vo.getBusinessType() == 2){ + vo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString()); + } + remoteNoticeBo.setDeviceSn(vo.getDeviceSn()); + remoteNoticeBo.setParam(JSON.toJSONString(vo)); + remoteNoticeService.saveNotice(remoteNoticeBo); } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java index e1c332b..bc23174 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java @@ -205,4 +205,5 @@ public class BusinessAlertVo implements Serializable { private Date createTime; //1:图片比对预警 2:AI实时预警 private Integer businessType; + private String deviceSn; } diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java index fb1df87..8d57adb 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java @@ -48,4 +48,5 @@ public class SysNotice extends TenantEntity { */ private String remark; + private Integer isRead; } diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java new file mode 100644 index 0000000..981c85a --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java @@ -0,0 +1,38 @@ +package org.dromara.system.dubbo; + +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.service.DictService; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.resource.api.RemoteMessageService; +import org.dromara.system.api.RemoteNoticeService; +import org.dromara.system.api.domain.bo.RemoteNoticeBo; +import org.dromara.system.domain.SysNotice; +import org.dromara.system.mapper.SysNoticeMapper; +import org.springframework.stereotype.Service; + + + +/** + * @author sean + * @version 1.1 + * @date 2022/6/1 + */ +@RequiredArgsConstructor +@Service +@DubboService +public class RemoteNoticeServiceImpl implements RemoteNoticeService { + private final DictService dictService; + private final SysNoticeMapper sysNoticeMapper; + @DubboReference + private final RemoteMessageService remoteMessageService; + + @Override + public int saveNotice(RemoteNoticeBo bo) { + SysNotice notice = MapstructUtils.convert(bo, SysNotice.class); + /*String type = dictService.getDictLabel("sys_notice_type", notice.getNoticeType());*/ + remoteMessageService.publishAll(bo.getParam()); + return sysNoticeMapper.insert(notice); + } +} From b962532431499e0a6981c8dd2f6fde92015b7311 Mon Sep 17 00:00:00 2001 From: yangwei <867012372@qq.com> Date: Mon, 12 May 2025 10:12:50 +0800 Subject: [PATCH 05/29] =?UTF-8?q?[feat]=201=E3=80=81=E9=9B=86=E6=88=90rock?= =?UTF-8?q?etmq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dk-common/common-bom/pom.xml | 7 + dk-common/common-rocketmq/pom.xml | 45 +++++ .../rocketmq/config/ProducerConfig.java | 58 ++++++ .../common/rocketmq/model/ProducerMode.java | 25 +++ .../producer/MessageProducerUtil.java | 189 ++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + dk-common/pom.xml | 1 + dk-modules/business/pom.xml | 4 + 8 files changed, 330 insertions(+) create mode 100644 dk-common/common-rocketmq/pom.xml create mode 100644 dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/config/ProducerConfig.java create mode 100644 dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/model/ProducerMode.java create mode 100644 dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/producer/MessageProducerUtil.java create mode 100644 dk-common/common-rocketmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/dk-common/common-bom/pom.xml b/dk-common/common-bom/pom.xml index 7cbb10a..6324395 100644 --- a/dk-common/common-bom/pom.xml +++ b/dk-common/common-bom/pom.xml @@ -257,6 +257,13 @@ ${revision} + + + org.dromara + common-rocketmq + ${revision} + + diff --git a/dk-common/common-rocketmq/pom.xml b/dk-common/common-rocketmq/pom.xml new file mode 100644 index 0000000..412a96a --- /dev/null +++ b/dk-common/common-rocketmq/pom.xml @@ -0,0 +1,45 @@ + + + + org.dromara + dk-common + ${revision} + + 4.0.0 + + common-rocketmq + + + common-rocketmq 配置中心 + + + + + + org.apache.rocketmq + rocketmq-client + 4.9.0 + + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + + + + org.dromara + common-core + + + + org.dromara + common-nacos + + + + + + diff --git a/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/config/ProducerConfig.java b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/config/ProducerConfig.java new file mode 100644 index 0000000..4d82415 --- /dev/null +++ b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/config/ProducerConfig.java @@ -0,0 +1,58 @@ +package org.dromara.common.rocketmq.config; + +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.client.producer.DefaultMQProducer; +import org.dromara.common.rocketmq.model.ProducerMode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + + +/** + * mq搭建地址连接 + * 生产者初者连接信息 具体看nacos配置 + */ +@AutoConfiguration +@Slf4j +@EnableConfigurationProperties(ProducerMode.class) +public class ProducerConfig { + + /** + * 远程调用连接信息 + */ + public static DefaultMQProducer producer; + + /** + * 连接客户端信息配置 具体看nacos配置 + */ + @Autowired + private ProducerMode producerMode; + + @Bean + public DefaultMQProducer getRocketMQProducer() { + producer = new DefaultMQProducer(producerMode.getGroupName()); + producer.setNamesrvAddr(producerMode.getNameServer()); + //如果需要同一个jvm中不同的producer往不同的mq集群发送消息,需要设置不同的instanceName + if(producerMode.getMaxMessageSize()!=null){ + producer.setMaxMessageSize(producerMode.getMaxMessageSize()); + } + if(producerMode.getSendMsgTimeout()!=null){ + producer.setSendMsgTimeout(producerMode.getSendMsgTimeout()); + } + //如果发送消息失败,设置重试次数,默认为2次 + if(producerMode.getRetryTimesWhenSendFailed()!=null){ + producer.setRetryTimesWhenSendFailed(producerMode.getRetryTimesWhenSendFailed()); + } + producer.setVipChannelEnabled(false); + try { + producer.start(); + log.info("生产者初始化成功:{}",producer.toString()); + } catch (MQClientException e) { + log.error("生产者初始化失败:{}",e.getMessage()); + } + return producer; + } + +} diff --git a/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/model/ProducerMode.java b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/model/ProducerMode.java new file mode 100644 index 0000000..e255e1e --- /dev/null +++ b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/model/ProducerMode.java @@ -0,0 +1,25 @@ +package org.dromara.common.rocketmq.model; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * 生产者初始化 + */ +@Data +@ConfigurationProperties(prefix = "rocketmq.producer") +public class ProducerMode { + + private String groupName; + + private String nameServer; + + private Integer maxMessageSize; + + private Integer sendMsgTimeout; + + private Integer retryTimesWhenSendFailed; +} diff --git a/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/producer/MessageProducerUtil.java b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/producer/MessageProducerUtil.java new file mode 100644 index 0000000..14ec0fc --- /dev/null +++ b/dk-common/common-rocketmq/src/main/java/org/dromara/common/rocketmq/producer/MessageProducerUtil.java @@ -0,0 +1,189 @@ +package org.dromara.common.rocketmq.producer; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.exception.MQBrokerException; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.client.producer.SendCallback; +import org.apache.rocketmq.client.producer.SendResult; +import org.apache.rocketmq.common.message.Message; +import org.apache.rocketmq.remoting.common.RemotingHelper; +import org.apache.rocketmq.remoting.exception.RemotingException; +import org.springframework.stereotype.Component; + +import java.io.UnsupportedEncodingException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import static org.dromara.common.rocketmq.config.ProducerConfig.producer; + + +/** + * 消息发送 + */ +@Slf4j +public class MessageProducerUtil { + + /** + * 同步发送消息 + * @param topic 主题 + * @param tag 标签 + * @param key 自定义的key,根据业务来定 + * @param value 消息的内容 + * 通过调用 send() 方法发送消息,阻塞等待服务器响应。 + */ + public static SendResult sendSynchronizeMessage(String topic, String tag, String key, String value){ + String body = "topic:【"+topic+"】, tag:【"+tag+"】, key:【"+key+"】, value:【"+value+"】"; + try { + Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); + System.out.println("生产者发送消息:"+ JSON.toJSONString(value)); + SendResult result = producer.send(msg); + return result; + } catch (Exception e) { + e.printStackTrace(); + log.error("消息初始化失败!body:{}",body); + + } + return null; + } + + /** + * 单向发送消息 + * @param topic 主题 + * @param tag 标签 + * @param key 自定义的key,根据业务来定 + * @param value 消息的内容 + * 单向发送:通过调用 sendOneway() 方法发送消息,不关心发送结果,适用于对可靠性要求不高的场景。 + */ + public static void sendOnewayMessage(String topic, String tag, String key, String value){ + String body = "topic:【"+topic+"】, tag:【"+tag+"】, key:【"+key+"】, value:【"+value+"】"; + try { + Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); + System.out.println("生产者发送消息:"+ JSON.toJSONString(value)); + producer.sendOneway(msg); + } catch (UnsupportedEncodingException e) { + log.error("消息初始化失败!body:{}",body); + + } catch (MQClientException | InterruptedException | RemotingException e) { + log.error("消息发送失败! body:{}",body); + } + } + + + /** + * 批量发送消息 + * @param messages 消息列表 + * 批量发送:通过调用 send() 方法并传入多条消息,实现批量发送消息。 + */ +// public static SendResult sendBatchMessage(List messages){ +// String body = messages.toString(); +// try { +// System.out.println("生产者发送消息:"+ messages); +// // 发送批量消息 +// SendResult sendResult = producer.send(messages); +// return sendResult; +// } catch (MQClientException | InterruptedException | RemotingException e) { +// log.error("消息发送失败! body:{}",body); +// } catch (MQBrokerException e) { +// throw new RuntimeException(e); +// } +// return null; +// } + + + /** + * 发送有序的消息 + * @param messagesList Message集合 + * @param messageQueueNumber 消息队列数量,根据实际情况设定 + * 顺序发送: messageQueueNumber 表示消息的业务标识,可以根据具体需求进行设置来保证消息按顺序发送。 + */ +// public static SendResult sendOrderlyMessage(List messagesList, Integer messageQueueNumber) { +// SendResult result = null; +// for (Message message : messagesList) { +// try { +// result = producer.send(message, (list, msg, arg) -> { +// Integer queueNumber = (Integer) arg; +// //int queueIndex = queueNumber % list.size(); +// return list.get(queueNumber); +// }, messageQueueNumber);//根据编号取模,选择消息队列 +// } catch (MQClientException | RemotingException | MQBrokerException | InterruptedException e) { +// log.error("发送有序消息失败"); +// return result; +// } +// } +// return result; +// } + + /** + * 发送延迟消息 + * @param topic 主题 + * @param tag 标签 + * @param key 自定义的key,根据业务来定 + * @param value 消息的内容 + * 延迟发送:通过设置延迟级别来实现延迟发送消息。 + */ + public static SendResult sendDelayMessage(String topic, String tag, String key, String value) + { + SendResult result = null; + try + { + Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); + //设置消息延迟级别,我这里设置5,对应就是延时一分钟 + // "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h" + msg.setDelayTimeLevel(4); + // 发送消息到一个Broker + result = producer.send(msg); + // 通过sendResult返回消息是否成功送达 + log.info("发送延迟消息结果:======sendResult:{}", result); + DateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("发送时间:{}", format.format(new Date())); + return result; + } + catch (Exception e) + { + e.printStackTrace(); + log.error("延迟消息队列推送消息异常:{},推送内容:{}", e.getMessage(), result); + } + return result; + } + /** + * 发送异步的消息 + * @param topic 主题 + * @param tag 标签 + * @param key 自定义的key,根据业务来定 + * @param value 消息的内容 + * 通过调用 send() 方法,并传入一个 SendCallback 对象,在发送消息的同时可以继续处理其他逻辑,消息发送结果通过回调函数通知。 + */ + public static SendResult sendAsyncProducerMessage(String topic, String tag, String key, String value){ + + try { + //创建一个消息实例,指定主题、标签和消息体。 + Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); + System.out.println("生产者发送消息:"+ JSON.toJSONString(value)); + producer.send(msg,new SendCallback() { + // 异步回调的处理 + @Override + public void onSuccess(SendResult sendResult) { + System.out.printf("%-10d 异步发送消息成功 %s %n", msg, sendResult.getMsgId()); + } + @Override + public void onException(Throwable e) { + System.out.printf("%-10d 异步发送消息失败 %s %n", msg, e); + e.printStackTrace(); + } + }); + } catch (MQClientException e) { + e.printStackTrace(); + } catch (RemotingException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + return null; + } + +} diff --git a/dk-common/common-rocketmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/dk-common/common-rocketmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..0d19465 --- /dev/null +++ b/dk-common/common-rocketmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.dromara.common.rocketmq.config.ProducerConfig diff --git a/dk-common/pom.xml b/dk-common/pom.xml index a0eb4a7..d1527b3 100644 --- a/dk-common/pom.xml +++ b/dk-common/pom.xml @@ -46,6 +46,7 @@ common-bus common-sse common-cloudsdk + common-rocketmq dk-common diff --git a/dk-modules/business/pom.xml b/dk-modules/business/pom.xml index 78874bb..1b3151d 100644 --- a/dk-modules/business/pom.xml +++ b/dk-modules/business/pom.xml @@ -116,6 +116,10 @@ org.dromara api-workflow + + org.dromara + common-rocketmq + From d9ff5f76ff08e22a0e2602130645891312fc1f82 Mon Sep 17 00:00:00 2001 From: shizisheng Date: Mon, 12 May 2025 12:43:33 +0800 Subject: [PATCH 06/29] =?UTF-8?q?=E8=B5=9B=E9=82=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=94=A8=E6=88=B7+=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E7=9F=AD=E4=BF=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/RemoteSubmailConfigService.java | 20 ++ .../controller/BusinessAlertController.java | 15 + .../SysSubmailConfigUserController.java | 106 +++++++ .../system/SysSubmailConfigController.java | 217 ++++++++++++++ .../system/SysSubmailLogController.java | 106 +++++++ .../controller/system/SysUserController.java | 6 + .../system/domain/SysSubmailConfig.java | 92 ++++++ .../system/domain/SysSubmailConfigUser.java | 52 ++++ .../dromara/system/domain/SysSubmailLog.java | 109 +++++++ .../system/domain/bo/SysSubmailConfigBo.java | 117 ++++++++ .../domain/bo/SysSubmailConfigUserBo.java | 58 ++++ .../system/domain/bo/SysSubmailLogBo.java | 126 ++++++++ .../domain/vo/SysSubmailConfigUserVo.java | 67 +++++ .../system/domain/vo/SysSubmailConfigVo.java | 115 ++++++++ .../system/domain/vo/SysSubmailLogVo.java | 134 +++++++++ .../dubbo/RemoteSubmailConfigServiceImpl.java | 39 +++ .../system/mapper/SysSubmailConfigMapper.java | 15 + .../mapper/SysSubmailConfigUserMapper.java | 15 + .../system/mapper/SysSubmailLogMapper.java | 15 + .../service/ISysSubmailConfigService.java | 75 +++++ .../service/ISysSubmailConfigUserService.java | 73 +++++ .../system/service/ISysSubmailLogService.java | 69 +++++ .../system/service/ISysUserService.java | 4 + .../impl/SysSubmailConfigServiceImpl.java | 272 ++++++++++++++++++ .../impl/SysSubmailConfigUserServiceImpl.java | 140 +++++++++ .../impl/SysSubmailLogServiceImpl.java | 144 ++++++++++ .../service/impl/SysUserServiceImpl.java | 16 ++ .../mapper/system/SysSubmailConfigMapper.xml | 7 + .../system/SysSubmailConfigUserMapper.xml | 7 + .../mapper/system/SysSubmailLogMapper.xml | 7 + 30 files changed, 2238 insertions(+) create mode 100644 dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubmailConfigService.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/controller/SysSubmailConfigUserController.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailConfigController.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailLogController.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfig.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfigUser.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailLog.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigBo.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigUserBo.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailLogBo.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigUserVo.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigVo.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailLogVo.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubmailConfigServiceImpl.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigMapper.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigUserMapper.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailLogMapper.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigService.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigUserService.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailLogService.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigServiceImpl.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigUserServiceImpl.java create mode 100644 dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailLogServiceImpl.java create mode 100644 dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigMapper.xml create mode 100644 dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigUserMapper.xml create mode 100644 dk-modules/system/src/main/resources/mapper/system/SysSubmailLogMapper.xml diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubmailConfigService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubmailConfigService.java new file mode 100644 index 0000000..4bc2563 --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteSubmailConfigService.java @@ -0,0 +1,20 @@ +package org.dromara.system.api; + +import org.dromara.common.core.domain.R; +import org.dromara.system.api.domain.vo.RemoteClientVo; + +/** + * 客户端服务 + * + * @author Michelle.Chung + */ +public interface RemoteSubmailConfigService { + + /** + * 根据客户端id获取客户端详情 + * + * @return 客户端对象 + */ + R remoteCmdSend(String code, String multiParam ); + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java index d3f2659..a0b76bc 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java @@ -19,6 +19,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.system.api.RemoteNoticeService; +import org.dromara.system.api.RemoteSubmailConfigService; import org.dromara.system.api.domain.bo.RemoteNoticeBo; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; @@ -48,6 +49,20 @@ public class BusinessAlertController extends BaseController { @DubboReference(timeout = 30000) private RemoteNoticeService remoteNoticeService; + @DubboReference(timeout = 30000) + private RemoteSubmailConfigService remoteSubmailConfigService; + + /** + * 测试发送调用submail短信服务, + * + * @param code 必须传参:smsMultixsend + * @param multiParam 前台传参 JSON.stringfy( {"jobName":"翟山街道华盛","labelCn":"普通垃圾","labelEn":"garbage","deptName":"翟山街道","lat":"34.20994348014929","lng":"117.2054671683176"}) + * 后台接收json效果 {"jobName":"翟山街道华盛景园违建巡査面状航线(1)2025-05-11 09:32:30","labelCn":"普通垃圾","labelEn":"garbage","deptName":"翟山街道","lat":"34.20994348014929","lng":"117.2054671683176"} + */ + @GetMapping("/demo") + public void demo(@RequestParam("code") String code, @RequestParam("multiParam") String multiParam) { + remoteSubmailConfigService.remoteCmdSend(code, multiParam); + } /** * 查询全部预警/待办/已完成/忽略 */ diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/SysSubmailConfigUserController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/SysSubmailConfigUserController.java new file mode 100644 index 0000000..f778af7 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/SysSubmailConfigUserController.java @@ -0,0 +1,106 @@ +package org.dromara.system.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +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.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.system.service.ISysSubmailConfigUserService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 赛邮服务配置用户 + * 前端访问路由地址为:/system/sysSubmailConfigUser + * + * @author szs + * @date 2025-05-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/sysSubmailConfigUser") +public class SysSubmailConfigUserController extends BaseController { + + private final ISysSubmailConfigUserService sysSubmailConfigUserService; + + /** + * 查询赛邮服务配置用户列表 + */ + @SaCheckPermission("system:sysSubmailConfigUser:list") + @GetMapping("/list") + public TableDataInfo list(SysSubmailConfigUserBo bo, PageQuery pageQuery) { + return sysSubmailConfigUserService.queryPageList(bo, pageQuery); + } + + /** + * 导出赛邮服务配置用户列表 + */ + @SaCheckPermission("system:sysSubmailConfigUser:export") + @Log(title = "赛邮服务配置用户", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysSubmailConfigUserBo bo, HttpServletResponse response) { + List list = sysSubmailConfigUserService.queryList(bo); + ExcelUtil.exportExcel(list, "赛邮服务配置用户", SysSubmailConfigUserVo.class, response); + } + + /** + * 获取赛邮服务配置用户详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:sysSubmailConfigUser:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(sysSubmailConfigUserService.queryById(id)); + } + + /** + * 新增赛邮服务配置用户 + */ + @SaCheckPermission("system:sysSubmailConfigUser:add") + @Log(title = "赛邮服务配置用户", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysSubmailConfigUserBo bo) { + return toAjax(sysSubmailConfigUserService.insertByBo(bo)); + } + + /** + * 修改赛邮服务配置用户 + */ + @SaCheckPermission("system:sysSubmailConfigUser:edit") + @Log(title = "赛邮服务配置用户", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysSubmailConfigUserBo bo) { + return toAjax(sysSubmailConfigUserService.updateByBo(bo)); + } + + /** + * 删除赛邮服务配置用户 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:sysSubmailConfigUser:remove") + @Log(title = "赛邮服务配置用户", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(sysSubmailConfigUserService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailConfigController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailConfigController.java new file mode 100644 index 0000000..5860774 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailConfigController.java @@ -0,0 +1,217 @@ +package org.dromara.system.controller.system; + +import java.nio.file.CopyOption; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.core.utils.SpringUtils; +import org.dromara.system.domain.SysSubmailConfigUser; +import org.dromara.system.domain.SysSubmailLog; +import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.service.ISysConfigService; +import org.dromara.system.service.ISysSubmailConfigUserService; +import org.dromara.system.service.ISysSubmailLogService; +import org.springframework.beans.factory.annotation.Autowired; +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.system.domain.vo.SysSubmailConfigVo; +import org.dromara.system.domain.bo.SysSubmailConfigBo; +import org.dromara.system.service.ISysSubmailConfigService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 赛邮服务配置 + * 前端访问路由地址为:/system/sysSubmailConfig + * + * @author szs + * @date 2025-05-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/submailConfig") +public class SysSubmailConfigController extends BaseController { + + private final ISysSubmailConfigService sysSubmailConfigService; + + @Autowired + private ISysSubmailConfigUserService sysSubmailConfigUserService; + + /** + * 查询赛邮服务配置列表 + */ + @SaCheckPermission("system:sysSubmailConfig:list") + @GetMapping("/list") + public TableDataInfo list(SysSubmailConfigBo bo, PageQuery pageQuery) { + TableDataInfo sysSubmailConfigVoTableDataInfo = sysSubmailConfigService.queryPageList(bo, pageQuery); + List rows = sysSubmailConfigVoTableDataInfo.getRows(); + List configIds = rows.stream().map(SysSubmailConfigVo::getId).toList(); + + List sysSubmailConfigUserVoList = sysSubmailConfigUserService.selectConfigUserByConfigIds(configIds); + for (SysSubmailConfigVo configVo : rows) { + List collect = sysSubmailConfigUserVoList.stream().filter(item -> item.getSubmailConfigId().equals(configVo.getId())).collect(Collectors.toList()); + configVo.setConfigUserList(collect); + } + return sysSubmailConfigVoTableDataInfo; + } + + @SaCheckPermission("system:sysSubmailConfig:list") + @GetMapping("/listAll") + public List listAll(SysSubmailConfigBo bo) { + return sysSubmailConfigService.queryList(bo); + } + + /** + * 导出赛邮服务配置列表 + */ + @SaCheckPermission("system:sysSubmailConfig:export") + @Log(title = "赛邮服务配置", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysSubmailConfigBo bo, HttpServletResponse response) { + List list = sysSubmailConfigService.queryList(bo); + ExcelUtil.exportExcel(list, "赛邮服务配置", SysSubmailConfigVo.class, response); + } + + /** + * 获取赛邮服务配置详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:sysSubmailConfig:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(sysSubmailConfigService.queryById(id)); + } + + /** + * 新增赛邮服务配置 + */ + @SaCheckPermission("system:sysSubmailConfig:add") + @Log(title = "赛邮服务配置", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysSubmailConfigBo bo) { + return toAjax(sysSubmailConfigService.insertByBo(bo)); + } + + /** + * 修改赛邮服务配置 + */ + @SaCheckPermission("system:sysSubmailConfig:edit") + @Log(title = "赛邮服务配置", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysSubmailConfigBo bo) { + return toAjax(sysSubmailConfigService.updateByBo(bo)); + } + + //配置 + @SaCheckPermission("system:sysSubmailConfig:edit") + @Log(title = "配置赛邮服务配置用户", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/configUser") + public R configUser(@Validated(EditGroup.class) @RequestBody SysSubmailConfigBo bo) { + + //删除旧配置 + SysSubmailConfigUserBo userBo = new SysSubmailConfigUserBo(); + userBo.setSubmailConfigId(bo.getId()); + List sysSubmailConfigUserVoList = sysSubmailConfigUserService.queryList(userBo); + List configUserIds = sysSubmailConfigUserVoList.stream().map(SysSubmailConfigUserVo::getId).toList(); + sysSubmailConfigUserService.deleteWithValidByIds(configUserIds,true); + + //保留新配置 + for (SysUser sysUser : bo.getConfigUserList()) { + SysSubmailConfigUserBo sysSubmailConfigUser = new SysSubmailConfigUserBo(); + sysSubmailConfigUser.setSubmailConfigId(bo.getId()); + sysSubmailConfigUser.setUserId(sysUser.getUserId()); + sysSubmailConfigUser.setName(sysUser.getNickName()); + sysSubmailConfigUser.setPhonenumber(sysUser.getPhonenumber()); + sysSubmailConfigUserService.insertByBo(sysSubmailConfigUser); + } + + return toAjax(1); + } + + /** + * 删除赛邮服务配置 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:sysSubmailConfig:remove") + @Log(title = "赛邮服务配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(sysSubmailConfigService.deleteWithValidByIds(List.of(ids), true)); + } + + //发送测试 + + @Autowired + private ISysSubmailLogService sysSubmailLogService; + + /** + * + * @param code 必须传参:smsMultixsend + * @param multiParam 前台传参 JSON.stringfy( {"jobName":"翟山街道华盛","labelCn":"普通垃圾","labelEn":"garbage","deptName":"翟山街道","lat":"34.20994348014929","lng":"117.2054671683176"}) + * @return + */ + @RepeatSubmit() + @PostMapping("/cmdSend") + public R cmdSend(@RequestParam("code") String code, @RequestParam("multiParam") String multiParam) { + if(StrUtil.isBlank(code)){ + return R.fail("发送类型为空"); + } + return sysSubmailConfigService.cmdSend(code, multiParam); + } + + //发送测试 + @RepeatSubmit() + @PostMapping("/autoSend") + public R autoSend(@Validated(AddGroup.class) @RequestBody SysSubmailConfigBo bo) { + + //判断是否配置用户 + SysSubmailConfigUserBo mailUserQuery = new SysSubmailConfigUserBo(); + mailUserQuery.setSubmailConfigId(bo.getId()); + List sysSubmailConfigUserVoList = sysSubmailConfigUserService.queryList(mailUserQuery); + List configUserVoList = sysSubmailConfigUserVoList.stream().filter(item -> StrUtil.isNotBlank(item.getPhonenumber())).collect(Collectors.toList()); + if(configUserVoList.size() <= 0) { + return R.fail("暂无配置有效用户"); + } + + String result = sysSubmailConfigService.submailSendUtil(bo, configUserVoList); + + return R.ok(result); + } + + + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailLogController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailLogController.java new file mode 100644 index 0000000..a213544 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysSubmailLogController.java @@ -0,0 +1,106 @@ +package org.dromara.system.controller.system; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +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.system.domain.vo.SysSubmailLogVo; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.system.service.ISysSubmailLogService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 赛邮服务发送log + * 前端访问路由地址为:/system/sysSubmailLog + * + * @author szs + * @date 2025-05-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/submailLog") +public class SysSubmailLogController extends BaseController { + + private final ISysSubmailLogService sysSubmailLogService; + + /** + * 查询赛邮服务发送log列表 + */ + @SaCheckPermission("system:sysSubmailLog:list") + @GetMapping("/list") + public TableDataInfo list(SysSubmailLogBo bo, PageQuery pageQuery) { + return sysSubmailLogService.queryPageList(bo, pageQuery); + } + + /** + * 导出赛邮服务发送log列表 + */ + @SaCheckPermission("system:sysSubmailLog:export") + @Log(title = "赛邮服务发送log", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysSubmailLogBo bo, HttpServletResponse response) { + List list = sysSubmailLogService.queryList(bo); + ExcelUtil.exportExcel(list, "赛邮服务发送log", SysSubmailLogVo.class, response); + } + + /** + * 获取赛邮服务发送log详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:sysSubmailLog:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(sysSubmailLogService.queryById(id)); + } + + /** + * 新增赛邮服务发送log + */ + @SaCheckPermission("system:sysSubmailLog:add") + @Log(title = "赛邮服务发送log", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysSubmailLogBo bo) { + return toAjax(sysSubmailLogService.insertByBo(bo)); + } + + /** + * 修改赛邮服务发送log + */ + @SaCheckPermission("system:sysSubmailLog:edit") + @Log(title = "赛邮服务发送log", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysSubmailLogBo bo) { + return toAjax(sysSubmailLogService.updateByBo(bo)); + } + + /** + * 删除赛邮服务发送log + * + * @param ids 主键串 + */ + @SaCheckPermission("system:sysSubmailLog:remove") + @Log(title = "赛邮服务发送log", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(sysSubmailLogService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java index 89c13d4..107ee20 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -74,6 +74,12 @@ public class SysUserController extends BaseController { return R.ok(userService.allList(user)); } + @SaCheckPermission("system:user:list") + @GetMapping("/listAll") + public List listAll(SysUserBo user) { + return userService.selectUserwithPhonenumberList(user); + } + /** * 导出用户列表 */ diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfig.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfig.java new file mode 100644 index 0000000..df8d70b --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfig.java @@ -0,0 +1,92 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 赛邮服务配置对象 sys_submail_config + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_submail_config") +public class SysSubmailConfig extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 字典编码 + */ + @TableId(value = "id") + private Long id; + + /** + * 接口名称 + */ + private String name; + + /** + * 接口编码 + */ + private String code; + + /** + * 赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata) + */ + private String type; + + /** + * 接口Url + */ + private String url; + + /** + * AppId + */ + private String appid; + + /** + * signature + */ + private String signature; + private String project; //模板编码 + + /** + * tag参数 + */ + private String tag; + + /** + * UNIX 时间戳 + */ + private String timestamp; + + /** + * API 授权模式(normal) + */ + private String signType; + + /** + * signature加密计算方式 + */ + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ + private String latestResStatus; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfigUser.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfigUser.java new file mode 100644 index 0000000..d1cba1e --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailConfigUser.java @@ -0,0 +1,52 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 赛邮服务配置用户对象 sys_submail_config_user + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_submail_config_user") +public class SysSubmailConfigUser extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 赛邮配置ID + */ + private Long submailConfigId; + private Long userId; + + /** + * 用户名称 + */ + private String name; + + /** + * 手机号 + */ + private String phonenumber; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailLog.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailLog.java new file mode 100644 index 0000000..c98bca4 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysSubmailLog.java @@ -0,0 +1,109 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 赛邮服务发送log对象 sys_submail_log + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_submail_log") +public class SysSubmailLog extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 字典编码 + */ + @TableId(value = "id") + private Long id; + + /** + * 赛邮配置ID + */ + private Long submailConfigId; + + /** + * 接口名称 + */ + private String name; + + /** + * 接口编码 + */ + private String code; + + /** + * 接口Url + */ + private String url; + + /** + * 接收人 + */ +// @TableField("to_receiver") + private String toReceiver; + + /** + * 内容 + */ + private String content; + + /** + * 模板编码 + */ + private String project; + + /** + * 整合文本 + */ + private String multi; + + /** + * 动态变量 + */ + private String vars; + + /** + * tag参数 + */ + private String tag; + + /** + * UNIX 时间戳 + */ + private String timestamp; + + /** + * API 授权模式(normal) + */ + private String signType; + + /** + * signature加密计算方式 + */ + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ + private String latestResStatus; + + private String result; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigBo.java new file mode 100644 index 0000000..136964f --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigBo.java @@ -0,0 +1,117 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.SysSubmailConfig; +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 org.dromara.system.domain.SysUser; + +import java.util.List; + +/** + * 赛邮服务配置业务对象 sys_submail_config + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SysSubmailConfig.class, reverseConvertGenerate = false) +public class SysSubmailConfigBo extends BaseEntity { + + /** + * 字典编码 + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 接口名称 + */ + @NotBlank(message = "接口名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 接口编码 + */ + @NotBlank(message = "接口编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String code; + + /** + * 赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata) + */ + @NotBlank(message = "赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String type; + + /** + * 接口Url + */ + @NotBlank(message = "接口Url不能为空", groups = { AddGroup.class, EditGroup.class }) + private String url; + + /** + * AppId + */ + @NotBlank(message = "AppId不能为空", groups = { AddGroup.class, EditGroup.class }) + private String appid; + + /** + * signature + */ + @NotBlank(message = "signature不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signature; + private String project; //模板编码 + + /** + * tag参数 + */ +// @NotBlank(message = "tag参数不能为空", groups = { AddGroup.class, EditGroup.class }) + private String tag; + + /** + * UNIX 时间戳 + */ +// @NotBlank(message = "UNIX 时间戳不能为空", groups = { AddGroup.class, EditGroup.class }) + private String timestamp; + + /** + * API 授权模式(normal) + */ +// @NotBlank(message = "API 授权模式(normal)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signType; + + /** + * signature加密计算方式 + */ +// @NotBlank(message = "signature加密计算方式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ +// @NotBlank(message = "最新反馈状态(1是 0否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String latestResStatus; + + /** + * 备注 + */ +// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + + + //发送传参 + private String to; //接收人 + private String content; //内容 + private String multi; //整合文本 + private String multiParam; //整合文本-单个参数(适合批量发送) + private String vars; //动态变量 + private Long[] configUserIds; //动态变量 + private List configUserList; //动态变量 + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigUserBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigUserBo.java new file mode 100644 index 0000000..b911a1f --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailConfigUserBo.java @@ -0,0 +1,58 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.SysSubmailConfigUser; +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.*; + +/** + * 赛邮服务配置用户业务对象 sys_submail_config_user + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SysSubmailConfigUser.class, reverseConvertGenerate = false) +public class SysSubmailConfigUserBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 赛邮配置ID + */ + @NotNull(message = "赛邮配置ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long submailConfigId; + + @NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + + /** + * 用户名称 + */ + @NotBlank(message = "用户名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 手机号 + */ + @NotBlank(message = "手机号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String phonenumber; + + /** + * 备注 + */ + @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailLogBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailLogBo.java new file mode 100644 index 0000000..0d5d108 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysSubmailLogBo.java @@ -0,0 +1,126 @@ +package org.dromara.system.domain.bo; + +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.system.domain.SysSubmailLog; +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.*; + +/** + * 赛邮服务发送log业务对象 sys_submail_log + * + * @author szs + * @date 2025-05-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SysSubmailLog.class, reverseConvertGenerate = false) +public class SysSubmailLogBo extends BaseEntity { + + /** + * 字典编码 + */ + @NotNull(message = "字典编码不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 赛邮配置ID + */ + @NotNull(message = "赛邮配置ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long submailConfigId; + + /** + * 接口名称 + */ + @NotBlank(message = "接口名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 接口编码 + */ +// @NotBlank(message = "接口编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String code; + + /** + * 接口Url + */ + @NotBlank(message = "接口Url不能为空", groups = { AddGroup.class, EditGroup.class }) + private String url; + + /** + * 接收人 + */ +// @NotBlank(message = "接收人不能为空", groups = { AddGroup.class, EditGroup.class }) +// @TableField("to_receiver") +// private String to; + private String toReceiver; + + /** + * 内容 + */ +// @NotBlank(message = "内容不能为空", groups = { AddGroup.class, EditGroup.class }) + private String content; + + /** + * 模板编码 + */ +// @NotBlank(message = "模板编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String project; + + /** + * 整合文本 + */ +// @NotBlank(message = "整合文本不能为空", groups = { AddGroup.class, EditGroup.class }) + private String multi; + + /** + * 动态变量 + */ +// @NotBlank(message = "动态变量不能为空", groups = { AddGroup.class, EditGroup.class }) + private String vars; + + /** + * tag参数 + */ +// @NotBlank(message = "tag参数不能为空", groups = { AddGroup.class, EditGroup.class }) + private String tag; + + /** + * UNIX 时间戳 + */ +// @NotBlank(message = "UNIX 时间戳不能为空", groups = { AddGroup.class, EditGroup.class }) + private String timestamp; + + /** + * API 授权模式(normal) + */ +// @NotBlank(message = "API 授权模式(normal)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signType; + + /** + * signature加密计算方式 + */ +// @NotBlank(message = "signature加密计算方式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ +// @NotBlank(message = "最新反馈状态(1是 0否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String latestResStatus; + + private String result; + + + /** + * 备注 + */ +// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigUserVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigUserVo.java new file mode 100644 index 0000000..5d8a7e2 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigUserVo.java @@ -0,0 +1,67 @@ +package org.dromara.system.domain.vo; + +import org.dromara.system.domain.SysSubmailConfigUser; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 赛邮服务配置用户视图对象 sys_submail_config_user + * + * @author szs + * @date 2025-05-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysSubmailConfigUser.class) +public class SysSubmailConfigUserVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 赛邮配置ID + */ + @ExcelProperty(value = "赛邮配置ID") + private Long submailConfigId; + + + @ExcelProperty(value = "用户ID") + private Long userId; + + + /** + * 用户名称 + */ + @ExcelProperty(value = "用户名称") + private String name; + + /** + * 手机号 + */ + @ExcelProperty(value = "手机号") + private String phonenumber; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigVo.java new file mode 100644 index 0000000..6ed78ef --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailConfigVo.java @@ -0,0 +1,115 @@ +package org.dromara.system.domain.vo; + +import org.dromara.system.domain.SysSubmailConfig; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.system.domain.SysUser; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 赛邮服务配置视图对象 sys_submail_config + * + * @author szs + * @date 2025-05-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysSubmailConfig.class) +public class SysSubmailConfigVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 字典编码 + */ + @ExcelProperty(value = "字典编码") + private Long id; + + /** + * 接口名称 + */ + @ExcelProperty(value = "接口名称") + private String name; + + /** + * 接口编码 + */ + @ExcelProperty(value = "接口编码") + private String code; + + /** + * 赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata) + */ + @ExcelProperty(value = "赛邮类型(Mail, Message,Voice,Internationalsms,Mobiledata)") + private String type; + + /** + * 接口Url + */ + @ExcelProperty(value = "接口Url") + private String url; + + /** + * AppId + */ + @ExcelProperty(value = "AppId") + private String appid; + + /** + * signature + */ + @ExcelProperty(value = "signature") + private String signature; + private String project; //模板编码 + /** + * tag参数 + */ + @ExcelProperty(value = "tag参数") + private String tag; + + /** + * UNIX 时间戳 + */ + @ExcelProperty(value = "UNIX 时间戳") + private String timestamp; + + /** + * API 授权模式(normal) + */ + @ExcelProperty(value = "API 授权模式(normal)") + private String signType; + + /** + * signature加密计算方式 + */ + @ExcelProperty(value = "signature加密计算方式") + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ + @ExcelProperty(value = "最新反馈状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_yes_no") + private String latestResStatus; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + private Long[] configUserIds; //动态变量 + private List configUserList; //动态变量 + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailLogVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailLogVo.java new file mode 100644 index 0000000..3e5dd70 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysSubmailLogVo.java @@ -0,0 +1,134 @@ +package org.dromara.system.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.system.domain.SysSubmailLog; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 赛邮服务发送log视图对象 sys_submail_log + * + * @author szs + * @date 2025-05-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysSubmailLog.class) +public class SysSubmailLogVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 字典编码 + */ + @ExcelProperty(value = "字典编码") + private Long id; + + /** + * 赛邮配置ID + */ + @ExcelProperty(value = "赛邮配置ID") + private Long submailConfigId; + + /** + * 接口名称 + */ + @ExcelProperty(value = "接口名称") + private String name; + + /** + * 接口编码 + */ + @ExcelProperty(value = "接口编码") + private String code; + + /** + * 接口Url + */ + @ExcelProperty(value = "接口Url") + private String url; + + /** + * 接收人 + */ + @ExcelProperty(value = "接收人") +// @TableField("to_receiver") + private String toReceiver; + + /** + * 内容 + */ + @ExcelProperty(value = "内容") + private String content; + + /** + * 模板编码 + */ + @ExcelProperty(value = "模板编码") + private String project; + + /** + * 整合文本 + */ + @ExcelProperty(value = "整合文本") + private String multi; + + /** + * 动态变量 + */ + @ExcelProperty(value = "动态变量") + private String vars; + + /** + * tag参数 + */ + @ExcelProperty(value = "tag参数") + private String tag; + + /** + * UNIX 时间戳 + */ + @ExcelProperty(value = "UNIX 时间戳") + private String timestamp; + + /** + * API 授权模式(normal) + */ + @ExcelProperty(value = "API 授权模式(normal)") + private String signType; + + /** + * signature加密计算方式 + */ + @ExcelProperty(value = "signature加密计算方式") + private String signVersion; + + /** + * 最新反馈状态(1是 0否) + */ + @ExcelProperty(value = "最新反馈状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_yes_no") + private String latestResStatus; + + @ExcelProperty(value = "返回结果") + private String result; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubmailConfigServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubmailConfigServiceImpl.java new file mode 100644 index 0000000..e35f1c8 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteSubmailConfigServiceImpl.java @@ -0,0 +1,39 @@ +package org.dromara.system.dubbo; + +import cn.hutool.core.bean.BeanUtil; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.domain.R; +import org.dromara.system.api.RemoteClientService; +import org.dromara.system.api.RemoteSubmailConfigService; +import org.dromara.system.api.domain.vo.RemoteClientVo; +import org.dromara.system.domain.vo.SysClientVo; +import org.dromara.system.service.ISysClientService; +import org.dromara.system.service.ISysSubmailConfigService; +import org.springframework.stereotype.Service; + +/** + * 客户端服务 + * + * @author Michelle.Chung + */ +@RequiredArgsConstructor +@Service +@DubboService +public class RemoteSubmailConfigServiceImpl implements RemoteSubmailConfigService { + + + private final ISysSubmailConfigService sysSubmailConfigService; + + + /** + * + * @param code 必须传参:smsMultixsend + * @param multiParam 前台传参 JSON.stringfy( {"jobName":"翟山街道华盛","labelCn":"普通垃圾","labelEn":"garbage","deptName":"翟山街道","lat":"34.20994348014929","lng":"117.2054671683176"}) + * @return + */ + @Override + public R remoteCmdSend(String code, String multiParam) { + return sysSubmailConfigService.cmdSend(code, multiParam); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigMapper.java new file mode 100644 index 0000000..6b454e1 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SysSubmailConfig; +import org.dromara.system.domain.vo.SysSubmailConfigVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 赛邮服务配置Mapper接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface SysSubmailConfigMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigUserMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigUserMapper.java new file mode 100644 index 0000000..842e632 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailConfigUserMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SysSubmailConfigUser; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 赛邮服务配置用户Mapper接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface SysSubmailConfigUserMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailLogMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailLogMapper.java new file mode 100644 index 0000000..7913845 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysSubmailLogMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SysSubmailLog; +import org.dromara.system.domain.vo.SysSubmailLogVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 赛邮服务发送logMapper接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface SysSubmailLogMapper extends BaseMapperPlus { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigService.java new file mode 100644 index 0000000..7ae1f1c --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigService.java @@ -0,0 +1,75 @@ +package org.dromara.system.service; + +import org.dromara.common.core.domain.R; +import org.dromara.system.domain.SysSubmailConfig; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.domain.vo.SysSubmailConfigVo; +import org.dromara.system.domain.bo.SysSubmailConfigBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 赛邮服务配置Service接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface ISysSubmailConfigService { + + /** + * 查询赛邮服务配置 + * + * @param id 主键 + * @return 赛邮服务配置 + */ + SysSubmailConfigVo queryById(Long id); + + /** + * 分页查询赛邮服务配置列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务配置分页列表 + */ + TableDataInfo queryPageList(SysSubmailConfigBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的赛邮服务配置列表 + * + * @param bo 查询条件 + * @return 赛邮服务配置列表 + */ + List queryList(SysSubmailConfigBo bo); + + /** + * 新增赛邮服务配置 + * + * @param bo 赛邮服务配置 + * @return 是否新增成功 + */ + Boolean insertByBo(SysSubmailConfigBo bo); + + /** + * 修改赛邮服务配置 + * + * @param bo 赛邮服务配置 + * @return 是否修改成功 + */ + Boolean updateByBo(SysSubmailConfigBo bo); + + /** + * 校验并批量删除赛邮服务配置信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + R cmdSend(String code, String multiParam); + + String submailSendUtil(SysSubmailConfigBo bo, List configUserVoList); +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigUserService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigUserService.java new file mode 100644 index 0000000..f9ad8fb --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailConfigUserService.java @@ -0,0 +1,73 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.SysSubmailConfigUser; +import org.dromara.system.domain.bo.SysSubmailConfigBo; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 赛邮服务配置用户Service接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface ISysSubmailConfigUserService { + + /** + * 查询赛邮服务配置用户 + * + * @param id 主键 + * @return 赛邮服务配置用户 + */ + SysSubmailConfigUserVo queryById(Long id); + + /** + * 分页查询赛邮服务配置用户列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务配置用户分页列表 + */ + TableDataInfo queryPageList(SysSubmailConfigUserBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的赛邮服务配置用户列表 + * + * @param bo 查询条件 + * @return 赛邮服务配置用户列表 + */ + List queryList(SysSubmailConfigUserBo bo); + + /** + * 新增赛邮服务配置用户 + * + * @param bo 赛邮服务配置用户 + * @return 是否新增成功 + */ + Boolean insertByBo(SysSubmailConfigUserBo bo); + + /** + * 修改赛邮服务配置用户 + * + * @param bo 赛邮服务配置用户 + * @return 是否修改成功 + */ + Boolean updateByBo(SysSubmailConfigUserBo bo); + + /** + * 校验并批量删除赛邮服务配置用户信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + List selectConfigUserByConfigIds(List configIds); + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailLogService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailLogService.java new file mode 100644 index 0000000..3fda1eb --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysSubmailLogService.java @@ -0,0 +1,69 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.SysSubmailLog; +import org.dromara.system.domain.vo.SysSubmailLogVo; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 赛邮服务发送logService接口 + * + * @author szs + * @date 2025-05-11 + */ +public interface ISysSubmailLogService { + + /** + * 查询赛邮服务发送log + * + * @param id 主键 + * @return 赛邮服务发送log + */ + SysSubmailLogVo queryById(Long id); + + /** + * 分页查询赛邮服务发送log列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务发送log分页列表 + */ + TableDataInfo queryPageList(SysSubmailLogBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的赛邮服务发送log列表 + * + * @param bo 查询条件 + * @return 赛邮服务发送log列表 + */ + List queryList(SysSubmailLogBo bo); + + /** + * 新增赛邮服务发送log + * + * @param bo 赛邮服务发送log + * @return 是否新增成功 + */ + Boolean insertByBo(SysSubmailLogBo bo); + + /** + * 修改赛邮服务发送log + * + * @param bo 赛邮服务发送log + * @return 是否修改成功 + */ + Boolean updateByBo(SysSubmailLogBo bo); + + /** + * 校验并批量删除赛邮服务发送log信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java index 8f5e0d6..5b188c5 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -260,6 +260,10 @@ public interface ISysUserService { */ List selectUserListByDept(Long deptId); + List selectUserList(SysUserBo user); //全量查询用户 + List selectUserwithPhonenumberList(SysUserBo user); //查询用户-有电话 + + /** * 通过角色ID查询用户ID * diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigServiceImpl.java new file mode 100644 index 0000000..c5d9894 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigServiceImpl.java @@ -0,0 +1,272 @@ +package org.dromara.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.SpringUtils; +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.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.service.ISysConfigService; +import org.dromara.system.service.ISysSubmailConfigUserService; +import org.dromara.system.service.ISysSubmailLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SysSubmailConfigBo; +import org.dromara.system.domain.vo.SysSubmailConfigVo; +import org.dromara.system.domain.SysSubmailConfig; +import org.dromara.system.mapper.SysSubmailConfigMapper; +import org.dromara.system.service.ISysSubmailConfigService; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.stream.Collectors; + +/** + * 赛邮服务配置Service业务层处理 + * + * @author szs + * @date 2025-05-11 + */ +@RequiredArgsConstructor +@Service +public class SysSubmailConfigServiceImpl implements ISysSubmailConfigService { + + private final SysSubmailConfigMapper baseMapper; + + @Autowired + private ISysSubmailConfigUserService sysSubmailConfigUserService; + @Autowired + private ISysSubmailLogService sysSubmailLogService; + + /** + * 查询赛邮服务配置 + * + * @param id 主键 + * @return 赛邮服务配置 + */ + @Override + public SysSubmailConfigVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询赛邮服务配置列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务配置分页列表 + */ + @Override + public TableDataInfo queryPageList(SysSubmailConfigBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的赛邮服务配置列表 + * + * @param bo 查询条件 + * @return 赛邮服务配置列表 + */ + @Override + public List queryList(SysSubmailConfigBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysSubmailConfigBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getName()), SysSubmailConfig::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getCode()), SysSubmailConfig::getCode, bo.getCode()); + lqw.eq(StringUtils.isNotBlank(bo.getType()), SysSubmailConfig::getType, bo.getType()); + lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysSubmailConfig::getUrl, bo.getUrl()); + lqw.eq(StringUtils.isNotBlank(bo.getAppid()), SysSubmailConfig::getAppid, bo.getAppid()); + lqw.eq(StringUtils.isNotBlank(bo.getSignature()), SysSubmailConfig::getSignature, bo.getSignature()); + lqw.eq(StringUtils.isNotBlank(bo.getTag()), SysSubmailConfig::getTag, bo.getTag()); + lqw.eq(StringUtils.isNotBlank(bo.getTimestamp()), SysSubmailConfig::getTimestamp, bo.getTimestamp()); + lqw.eq(StringUtils.isNotBlank(bo.getSignType()), SysSubmailConfig::getSignType, bo.getSignType()); + lqw.eq(StringUtils.isNotBlank(bo.getSignVersion()), SysSubmailConfig::getSignVersion, bo.getSignVersion()); + lqw.eq(StringUtils.isNotBlank(bo.getLatestResStatus()), SysSubmailConfig::getLatestResStatus, bo.getLatestResStatus()); + return lqw; + } + + /** + * 新增赛邮服务配置 + * + * @param bo 赛邮服务配置 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SysSubmailConfigBo bo) { + SysSubmailConfig add = MapstructUtils.convert(bo, SysSubmailConfig.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改赛邮服务配置 + * + * @param bo 赛邮服务配置 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SysSubmailConfigBo bo) { + SysSubmailConfig update = MapstructUtils.convert(bo, SysSubmailConfig.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysSubmailConfig 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 R cmdSend(String code, String multiParam) { + + //找到生效配置 + SysSubmailConfigBo bo = new SysSubmailConfigBo(); + bo.setCode(code); + List sysSubmailConfigVoTempList = this.queryList(bo); + if (sysSubmailConfigVoTempList.size() <= 0) { + return R.fail("暂无有效配置"); + } + SysSubmailConfigVo firstConfigVo = sysSubmailConfigVoTempList.get(0); + + BeanUtil.copyProperties(firstConfigVo,bo); + bo.setMultiParam(multiParam); + + //判断是否配置用户 + SysSubmailConfigUserBo mailUserQuery = new SysSubmailConfigUserBo(); + mailUserQuery.setSubmailConfigId(bo.getId()); + List sysSubmailConfigUserVoList = sysSubmailConfigUserService.queryList(mailUserQuery); + List configUserVoList = sysSubmailConfigUserVoList.stream().filter(item -> StrUtil.isNotBlank(item.getPhonenumber())).collect(Collectors.toList()); + if(configUserVoList.size() <= 0) { + return R.fail("暂无配置有效用户"); + } + + String result = submailSendUtil(bo, configUserVoList); + return R.ok(result); + } + + public String submailSendUtil(SysSubmailConfigBo bo, List configUserVoList) { + String subMailSaveFlag = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("submail.log.save"); + HashMap postParam = new HashMap<>(); + postParam.put("appid", bo.getAppid()); + postParam.put("signature", bo.getSignature()); + + String phonenumber = configUserVoList.get(0).getPhonenumber(); + String result = ""; + switch (bo.getCode()){ + case "smsSend": //短信发送 to/content + postParam.put("to", phonenumber); + postParam.put("content", bo.getContent()); + result = HttpUtil.post(bo.getUrl(), postParam); //JSONUtil.parseObj(result).getStr("status") + saveConfigLog(bo, subMailSaveFlag, phonenumber, result); + break; + case "smsXsend": //短信模板发送 to/project + postParam.put("to", phonenumber); + postParam.put("project", bo.getProject()); + postParam.put("vars", bo.getVars()); + result = HttpUtil.post(bo.getUrl(), postParam); + saveConfigLog(bo, subMailSaveFlag, phonenumber, result); + break; + case "smsMultisend": //短信一对多发送 multi +// postParam.put("to", phonenumber); +// postParam.put("project", bo.getProject()); +// postParam.put("vars", bo.getVars()); +// result = HttpUtil.post(bo.getUrl(), postParam); +// saveConfigLog(bo, subMailSaveFlag, phonenumber, result); + break; + case "smsMultixsend": //短信模板一对多发送 project/multi + postParam.put("to", phonenumber); + postParam.put("project", bo.getProject()); +// 拼接multi + JSONArray multiJson = new JSONArray(); + for (SysSubmailConfigUserVo sysSubmailConfigUserVo : configUserVoList) { + JSONObject entries = new JSONObject(); + entries.set("to",sysSubmailConfigUserVo.getPhonenumber()); + entries.set("vars", JSONUtil.parseObj(bo.getMultiParam())); + multiJson.add(entries); + } + String multiJsonStr = multiJson.toString(); +// postParam.put("multi", multiJson.toString()); + postParam.put("multi", multiJsonStr); + + result = HttpUtil.post(bo.getUrl(), postParam); + saveConfigLog(bo, subMailSaveFlag, phonenumber, result); + break; + } + return result; + } + + //保存config发送log + private void saveConfigLog(SysSubmailConfigBo bo, String subMailSaveFlag, String phonenumber, String result) { + String [] ignoreProp = {"id","createBy","createTime","updateBy","updateTime","remark"}; + + if(BooleanUtil.toBoolean(subMailSaveFlag)){ + SysSubmailLogBo sysSubmailLog = new SysSubmailLogBo(); + BeanUtil.copyProperties(bo, sysSubmailLog, CopyOptions.create().setIgnoreProperties(ignoreProp)); + sysSubmailLog.setSubmailConfigId(bo.getId()); + sysSubmailLog.setToReceiver(phonenumber); + sysSubmailLog.setContent(bo.getContent()); + String latestStatus = ""; + if(JSONUtil.isTypeJSONArray(result)) { + latestStatus = new JSONObject(JSONUtil.parseArray(result).get(0)).getStr("status"); + }else{ + latestStatus = JSONUtil.parseObj(result).getStr("status"); + } + boolean successFlag = "success".equals(latestStatus); + String latestResStatus = successFlag ? "Y" : "N"; + sysSubmailLog.setLatestResStatus(latestResStatus); + sysSubmailLog.setResult(result); + sysSubmailLogService.insertByBo(sysSubmailLog); + + //更新状态 + SysSubmailConfigBo sysSubmailConfigBo = new SysSubmailConfigBo(); + sysSubmailConfigBo.setId(bo.getId()); + sysSubmailConfigBo.setLatestResStatus(latestResStatus); + this.updateByBo(sysSubmailConfigBo); + } + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigUserServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigUserServiceImpl.java new file mode 100644 index 0000000..e8a0659 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailConfigUserServiceImpl.java @@ -0,0 +1,140 @@ +package org.dromara.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +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.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SysSubmailConfigUserBo; +import org.dromara.system.domain.vo.SysSubmailConfigUserVo; +import org.dromara.system.domain.SysSubmailConfigUser; +import org.dromara.system.mapper.SysSubmailConfigUserMapper; +import org.dromara.system.service.ISysSubmailConfigUserService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 赛邮服务配置用户Service业务层处理 + * + * @author szs + * @date 2025-05-11 + */ +@RequiredArgsConstructor +@Service +public class SysSubmailConfigUserServiceImpl implements ISysSubmailConfigUserService { + + private final SysSubmailConfigUserMapper baseMapper; + + /** + * 查询赛邮服务配置用户 + * + * @param id 主键 + * @return 赛邮服务配置用户 + */ + @Override + public SysSubmailConfigUserVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询赛邮服务配置用户列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务配置用户分页列表 + */ + @Override + public TableDataInfo queryPageList(SysSubmailConfigUserBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的赛邮服务配置用户列表 + * + * @param bo 查询条件 + * @return 赛邮服务配置用户列表 + */ + @Override + public List queryList(SysSubmailConfigUserBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysSubmailConfigUserBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSubmailConfigId() != null, SysSubmailConfigUser::getSubmailConfigId, bo.getSubmailConfigId()); + lqw.like(StringUtils.isNotBlank(bo.getName()), SysSubmailConfigUser::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getPhonenumber()), SysSubmailConfigUser::getPhonenumber, bo.getPhonenumber()); + return lqw; + } + + /** + * 新增赛邮服务配置用户 + * + * @param bo 赛邮服务配置用户 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SysSubmailConfigUserBo bo) { + SysSubmailConfigUser add = MapstructUtils.convert(bo, SysSubmailConfigUser.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改赛邮服务配置用户 + * + * @param bo 赛邮服务配置用户 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SysSubmailConfigUserBo bo) { + SysSubmailConfigUser update = MapstructUtils.convert(bo, SysSubmailConfigUser.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysSubmailConfigUser 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 List selectConfigUserByConfigIds(List configIds) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + lambdaQueryWrapper.in(SysSubmailConfigUser::getSubmailConfigId,configIds); + List sysSubmailConfigUserVoList = baseMapper.selectVoList(lambdaQueryWrapper); + return sysSubmailConfigUserVoList; + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailLogServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailLogServiceImpl.java new file mode 100644 index 0000000..466ec4d --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysSubmailLogServiceImpl.java @@ -0,0 +1,144 @@ +package org.dromara.system.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.domain.BaseEntity; +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.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SysSubmailLogBo; +import org.dromara.system.domain.vo.SysSubmailLogVo; +import org.dromara.system.domain.SysSubmailLog; +import org.dromara.system.mapper.SysSubmailLogMapper; +import org.dromara.system.service.ISysSubmailLogService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 赛邮服务发送logService业务层处理 + * + * @author szs + * @date 2025-05-11 + */ +@RequiredArgsConstructor +@Service +public class SysSubmailLogServiceImpl implements ISysSubmailLogService { + + private final SysSubmailLogMapper baseMapper; + + /** + * 查询赛邮服务发送log + * + * @param id 主键 + * @return 赛邮服务发送log + */ + @Override + public SysSubmailLogVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询赛邮服务发送log列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 赛邮服务发送log分页列表 + */ + @Override + public TableDataInfo queryPageList(SysSubmailLogBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + lqw.orderByDesc(BaseEntity::getCreateTime); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的赛邮服务发送log列表 + * + * @param bo 查询条件 + * @return 赛邮服务发送log列表 + */ + @Override + public List queryList(SysSubmailLogBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysSubmailLogBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSubmailConfigId() != null, SysSubmailLog::getSubmailConfigId, bo.getSubmailConfigId()); + lqw.like(StringUtils.isNotBlank(bo.getName()), SysSubmailLog::getName, bo.getName()); + lqw.eq(StringUtils.isNotBlank(bo.getCode()), SysSubmailLog::getCode, bo.getCode()); + lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysSubmailLog::getUrl, bo.getUrl()); + lqw.eq(StringUtils.isNotBlank(bo.getToReceiver()), SysSubmailLog::getToReceiver, bo.getToReceiver()); + lqw.eq(StringUtils.isNotBlank(bo.getContent()), SysSubmailLog::getContent, bo.getContent()); + lqw.eq(StringUtils.isNotBlank(bo.getProject()), SysSubmailLog::getProject, bo.getProject()); + lqw.eq(StringUtils.isNotBlank(bo.getMulti()), SysSubmailLog::getMulti, bo.getMulti()); + lqw.eq(StringUtils.isNotBlank(bo.getVars()), SysSubmailLog::getVars, bo.getVars()); + lqw.eq(StringUtils.isNotBlank(bo.getTag()), SysSubmailLog::getTag, bo.getTag()); + lqw.eq(StringUtils.isNotBlank(bo.getTimestamp()), SysSubmailLog::getTimestamp, bo.getTimestamp()); + lqw.eq(StringUtils.isNotBlank(bo.getSignType()), SysSubmailLog::getSignType, bo.getSignType()); + lqw.eq(StringUtils.isNotBlank(bo.getSignVersion()), SysSubmailLog::getSignVersion, bo.getSignVersion()); + lqw.eq(StringUtils.isNotBlank(bo.getLatestResStatus()), SysSubmailLog::getLatestResStatus, bo.getLatestResStatus()); + return lqw; + } + + /** + * 新增赛邮服务发送log + * + * @param bo 赛邮服务发送log + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SysSubmailLogBo bo) { + SysSubmailLog add = MapstructUtils.convert(bo, SysSubmailLog.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改赛邮服务发送log + * + * @param bo 赛邮服务发送log + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SysSubmailLogBo bo) { + SysSubmailLog update = MapstructUtils.convert(bo, SysSubmailLog.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysSubmailLog entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除赛邮服务发送log信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index aae5b7b..8849a41 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ArrayUtil; @@ -552,6 +553,21 @@ public class SysUserServiceImpl implements ISysUserService { return baseMapper.selectVoList(lqw); } + @Override + public List selectUserList(SysUserBo user) { + List sysuserVoList = baseMapper.selectUserList(this.buildQueryWrapper(user)); + return sysuserVoList; + } + + @Override + public List selectUserwithPhonenumberList(SysUserBo user) { +// SysUser sysUser = BeanUtil.copyProperties(user, SysUser.class); + LambdaQueryWrapper sysUserBoLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserBoLambdaQueryWrapper.isNotNull(SysUser::getPhonenumber); + List sysUserVoList = baseMapper.selectUserList(sysUserBoLambdaQueryWrapper); + return sysUserVoList; + } + @Override public List selectUserIdsByRoleIds(List roleIds) { List userRoles = userRoleMapper.selectList( diff --git a/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigMapper.xml new file mode 100644 index 0000000..078246b --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigUserMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigUserMapper.xml new file mode 100644 index 0000000..bcd53cd --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/system/SysSubmailConfigUserMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/dk-modules/system/src/main/resources/mapper/system/SysSubmailLogMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SysSubmailLogMapper.xml new file mode 100644 index 0000000..8484568 --- /dev/null +++ b/dk-modules/system/src/main/resources/mapper/system/SysSubmailLogMapper.xml @@ -0,0 +1,7 @@ + + + + + From 9337904788cde21a22b96f17ed01c19f3ccfbe08 Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Mon, 12 May 2025 13:42:22 +0800 Subject: [PATCH 07/29] =?UTF-8?q?=E6=8F=90=E4=BA=A4:=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E4=B8=8E=E9=A2=84=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BusinessAlertController.java | 8 +++-- .../controller/system/AiLabelController.java | 8 +++++ .../system/service/IAiLabelService.java | 1 + .../service/impl/AiLabelServiceImpl.java | 31 ++++++++++++++----- .../handler/WorkflowPermissionHandler.java | 12 ++++--- 5 files changed, 46 insertions(+), 14 deletions(-) diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java index d3f2659..5561834 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java @@ -2,6 +2,7 @@ package org.dromara.business.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.client.utils.TenantUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -17,6 +18,8 @@ import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.web.core.BaseController; import org.dromara.system.api.RemoteNoticeService; import org.dromara.system.api.domain.bo.RemoteNoticeBo; @@ -87,7 +90,7 @@ public class BusinessAlertController extends BaseController { */ @Operation(summary ="ai实时流预警保存",description = "ai实时流预警保存") @PostMapping("/saveAlert") - public void saveAlert(@RequestBody BusinessAlertVo vo) { + public R saveAlert(@RequestBody BusinessAlertVo vo) { vo.setBusinessType(2); BusinessAlert businessAlert = businessAlertService.addBusinessAlert(vo); RemoteStartProcess startProcess = new RemoteStartProcess(); @@ -102,13 +105,14 @@ public class BusinessAlertController extends BaseController { remoteNoticeBo.setIsRead(0); remoteNoticeBo.setCreateBy(1L); remoteNoticeBo.setCreateDept(1L); - remoteNoticeBo.setCreateTime(new Date()); + remoteNoticeBo.setCreateTime(vo.getCreateTime()); if (vo.getBusinessType() == 2){ vo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString()); } remoteNoticeBo.setDeviceSn(vo.getDeviceSn()); remoteNoticeBo.setParam(JSON.toJSONString(vo)); remoteNoticeService.saveNotice(remoteNoticeBo); + return R.ok(); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java index 2a3b69d..845a44d 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java @@ -57,6 +57,14 @@ public class AiLabelController extends BaseController { return aiLabelService.allList(); } + /** + * 下拉框集合-绑定过的标签 + */ + @GetMapping("/bing/list") + public List listPostLabel() { + return aiLabelService.selectLabelList(); + } + /** * 下拉框集合 */ diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java b/dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java index ede3b27..2994447 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java @@ -76,4 +76,5 @@ public interface IAiLabelService { String getFlowCode(String labelCode); List selectLabelByList(String postCode); + List selectLabelList(); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java index 19cdee1..b42756c 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java @@ -54,7 +54,7 @@ public class AiLabelServiceImpl implements IAiLabelService { * @return ai 识别类型 */ @Override - public AiLabelVo queryById(Long labelId){ + public AiLabelVo queryById(Long labelId) { return baseMapper.selectVoById(labelId); } @@ -132,7 +132,7 @@ public class AiLabelServiceImpl implements IAiLabelService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(AiLabel entity){ + private void validEntityBeforeSave(AiLabel entity) { //TODO 做一些数据校验,如唯一约束 } @@ -145,7 +145,7 @@ public class AiLabelServiceImpl implements IAiLabelService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; @@ -154,7 +154,7 @@ public class AiLabelServiceImpl implements IAiLabelService { @Override public List queryListByLabel(List labelIds) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(!labelIds.isEmpty(),"label_id",labelIds); + queryWrapper.in(!labelIds.isEmpty(), "label_id", labelIds); return this.baseMapper.selectList(queryWrapper); } @@ -165,10 +165,10 @@ public class AiLabelServiceImpl implements IAiLabelService { @Override public List selectLabelByList(String postCode) { - SysPostVo sysPostVo = sysPostService.selectLableByList(postCode,null); - if(sysPostVo != null){ + SysPostVo sysPostVo = sysPostService.selectLableByList(postCode, null); + if (sysPostVo != null) { List postVoList = aiLabelPostService.queryListByLabel(sysPostVo.getPostId()); - return postVoList.stream() + return postVoList.stream() .map(aiLabel -> { AiLabelVo aiLabelVo = new AiLabelVo(); aiLabelVo.setLabelId(aiLabel.getLabelId()); @@ -181,4 +181,21 @@ public class AiLabelServiceImpl implements IAiLabelService { } return ListUtil.empty(); } + + @Override + public List selectLabelList() { + List aiLabelList = aiLabelPostService.getAiLabelList(); + return aiLabelList.stream() + .map(aiLabel -> { + AiLabelVo aiLabelVo = new AiLabelVo(); + aiLabelVo.setLabelId(aiLabel.getLabelId()); + aiLabelVo.setLabelEn(aiLabel.getLabelEn()); + aiLabelVo.setLabelCn(aiLabel.getLabelCn()); + aiLabelVo.setAiName(aiLabel.getAiName()); + return aiLabelVo; + }) + .collect(Collectors.toList()); + } + + } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java index 138c2e1..959e93f 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java @@ -36,19 +36,21 @@ public class WorkflowPermissionHandler implements PermissionHandler { */ @Override public List permissions() { - LoginUser loginUser = LoginHelper.getLoginUser(); List resultList = new ArrayList<>(); - //如果为空则将管理员放进去 - resultList.add("1"); - resultList.add("dept:100"); + resultList.add("1"); + resultList.add("dept:1"); resultList.add("${handler}"); - if (ObjectUtil.isNull(loginUser)) { + //没登陆 + if (!LoginHelper.isLogin()){ + return resultList; } + LoginUser loginUser = LoginHelper.getLoginUser(); + // 使用一个流来构建权限列表 List permissionList = Stream.of( // 角色权限前缀 From e8aad6f9685aa50c6b472ee5012ff0e627bebeae Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Mon, 12 May 2025 14:48:22 +0800 Subject: [PATCH 08/29] =?UTF-8?q?=E6=8F=90=E4=BA=A4:=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BusinessAlertController.java | 9 +- .../manage/service/impl/SDKDeviceService.java | 1 + .../storage/config/OssTianyiConfig.java | 79 -------- .../controller/OssTianyiController.java | 58 ------ .../storage/util/OssTianyiClientUtils.java | 174 ------------------ 5 files changed, 6 insertions(+), 315 deletions(-) delete mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/storage/config/OssTianyiConfig.java delete mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/OssTianyiController.java delete mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/storage/util/OssTianyiClientUtils.java diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java index 564022a..e3e3d51 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java @@ -120,13 +120,14 @@ public class BusinessAlertController extends BaseController { remoteNoticeBo.setIsRead(0); remoteNoticeBo.setCreateBy(1L); remoteNoticeBo.setCreateDept(1L); - remoteNoticeBo.setCreateTime(vo.getCreateTime()); - if (vo.getBusinessType() == 2){ - vo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString()); + remoteNoticeBo.setCreateTime(businessAlert.getCreateTime()); + if (businessAlert.getBusinessType() == 2){ + businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString()); } remoteNoticeBo.setDeviceSn(vo.getDeviceSn()); - remoteNoticeBo.setParam(JSON.toJSONString(vo)); + remoteNoticeBo.setParam(JSON.toJSONString(businessAlert)); remoteNoticeService.saveNotice(remoteNoticeBo); + remoteSubmailConfigService.remoteCmdSend("smsMultixsend", JSON.toJSONString(vo)); return R.ok(); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java index 87c84bb..b31211a 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java @@ -176,6 +176,7 @@ public class SDKDeviceService extends AbstractDeviceService { public void osdDockDrone(TopicOsdRequest request, MessageHeaders headers) { String from = request.getFrom(); Optional deviceOpt = deviceRedisService.getDeviceOnline(from); + log.error(deviceOpt.get().getDeviceSn()); if (deviceOpt.isEmpty()) { deviceOpt = deviceService.getDeviceBySn(from); if (deviceOpt.isEmpty()) { diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/storage/config/OssTianyiConfig.java b/dk-modules/sample/src/main/java/org/dromara/sample/storage/config/OssTianyiConfig.java deleted file mode 100644 index 3fcf366..0000000 --- a/dk-modules/sample/src/main/java/org/dromara/sample/storage/config/OssTianyiConfig.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.dromara.sample.storage.config; - -import io.minio.MinioClient; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * Minio 配置信息 - * - * @author ruoyi - */ -@Configuration -@ConfigurationProperties(prefix = "osstianyi") -public class OssTianyiConfig -{ - - private String endPoint; - private String accessKey; - private String secretKey; - private String bucketName; - - public String getEndPoint() { - return endPoint; - } - - public void setEndPoint(String endPoint) { - this.endPoint = endPoint; - } - - public String getAccessKey() - { - return accessKey; - } - - public void setAccessKey(String accessKey) - { - this.accessKey = accessKey; - } - - public String getSecretKey() - { - return secretKey; - } - - public void setSecretKey(String secretKey) - { - this.secretKey = secretKey; - } - - public String getBucketName() - { - return bucketName; - } - - public void setBucketName(String bucketName) - { - this.bucketName = bucketName; - } - - @Override - public String toString() { - return "OssTianyiConfig{" + - "endPoint='" + endPoint + '\'' + - ", accessKey='" + accessKey + '\'' + - ", secretKey='" + secretKey + '\'' + - ", bucketName='" + bucketName + '\'' + - '}'; - } - - @Bean - public MinioClient getMinioClient() - { -// System.out.println("OssTianyiConfig"); -// System.out.println("OssTianyiConfig" + endPoint); - System.out.println(toString()); - return MinioClient.builder().endpoint(endPoint).credentials(accessKey, secretKey).build(); - } -} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/OssTianyiController.java b/dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/OssTianyiController.java deleted file mode 100644 index 0f29fee..0000000 --- a/dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/OssTianyiController.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.dromara.sample.storage.controller; - - -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.dromara.common.core.domain.R; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.web.core.BaseController; -import org.dromara.sample.storage.domain.SysUploadFile; -import org.dromara.sample.storage.util.OssTianyiClientUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.util.HashMap; - -/** - * 系统上传文件Controller - * - * @author tom - * @date 2024-12-21 - */ -@RestController -@RequestMapping("/ossTianyi") -public class OssTianyiController extends BaseController -{ - - @Autowired - private OssTianyiClientUtils ossTianyiClientUtils; - - /** - * 查询系统上传文件列表 (实际是上传接口) - */ - @SaCheckPermission("file:sysUploadFile:list") - @GetMapping("/list") - public TableDataInfo list(SysUploadFile sysUploadFile) - { - String localFilePath = "D:\\123pan\\page.html"; - try{ - ossTianyiClientUtils.uploadFileTest("page.html","dev/temp",localFilePath); - }catch (Exception e){ - e.printStackTrace(); - } - - return null; - } - - @GetMapping("/upload") - public R> upload(@RequestPart("file") MultipartFile file) { - try { - ossTianyiClientUtils.uploadFile("page.html", "dev/temp", file); - } catch (Exception e) { - e.printStackTrace(); - } - - return null; - } - -} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/storage/util/OssTianyiClientUtils.java b/dk-modules/sample/src/main/java/org/dromara/sample/storage/util/OssTianyiClientUtils.java deleted file mode 100644 index e952f4a..0000000 --- a/dk-modules/sample/src/main/java/org/dromara/sample/storage/util/OssTianyiClientUtils.java +++ /dev/null @@ -1,174 +0,0 @@ -package org.dromara.sample.storage.util; - -import cn.hutool.core.io.FileUtil; -import io.minio.*; -import io.minio.errors.*; -import io.minio.messages.Item; -import org.dromara.sample.storage.config.OssTianyiConfig; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.multipart.MultipartFile; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; - -@Component -public class OssTianyiClientUtils { - - private static MinioClient minioClient; - -// private static String endPoint = "https://jiangsu-10.zos.ctyun.cn"; //地域节点,可访问 -// // private static String endPoint = "https://dk-ty-oss-bucket.jiangsu-10.zos.ctyun.cn"; //说是桶的域名地址,支持公网访问ZOS,实测报错 -// private static String minioAccessKey = "22e3f37368a242b38f4f25d98c9baf1f"; -// private static String minioSecretKey = "0d858850666248e59830d9a596847062"; - -// private static String bucketName = "dk-ty-oss-bucket"; -// private String bucketName = "dkossbucket"; - private String objectName = "page.html"; - //注意,天翼云里默认路径就是文件名,不需要在前面加根路径/ - private String filePath = "dev/temp/"; - private String fileDir = "dev"; - - - @Autowired - OssTianyiConfig ossTianyiConfig; - - @Autowired - public OssTianyiClientUtils(OssTianyiConfig ossTianyiConfig) { - this.ossTianyiConfig = ossTianyiConfig; - init(); - } - - private void init() { - this.minioClient = MinioClient.builder() - .endpoint(ossTianyiConfig.getEndPoint()) - .credentials(ossTianyiConfig.getAccessKey(), ossTianyiConfig.getSecretKey()) - .build(); - } - - /** - * 天翼云OSS初始化(采用S3 Compatible Storage) - */ -// public void tianyiOssInit() { -// minioClient = MinioClient.builder() -// .endpoint(ossTianyiConfig.getEndPoint()) -// .credentials(ossTianyiConfig.getAccessKey(), ossTianyiConfig.getSecretKey()) -// .build(); -// } - - /** - * 文件上传 (固定) - */ - public void uploadFileTest(String objectName, String filePath, String localFilePath) throws Exception { - File file = new File(localFilePath); - BufferedInputStream inputStream = FileUtil.getInputStream(file); - String contentType = Files.probeContentType(file.toPath()); - if (contentType == null) { - contentType = "application/octet-stream"; - } - PutObjectArgs args = PutObjectArgs.builder() - .bucket(ossTianyiConfig.getBucketName()) - .object(filePath + objectName) - .stream(inputStream, FileUtil.size(file), -1) - .contentType(contentType) - .build(); - minioClient.putObject(args); - } - - public void uploadFile(String s, String s1, MultipartFile file) { - try { - PutObjectArgs args = PutObjectArgs.builder() - .bucket(ossTianyiConfig.getBucketName()) - .object( file.getName()) - .stream(file.getInputStream(), file.getSize(), -1) - .contentType(file.getContentType()) - .build(); - minioClient.putObject(args); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - - - /** - * 文件删除 - */ - public void deleteFile(String bucketName, String objectName) throws Exception { - minioClient.removeObject( - RemoveObjectArgs.builder() - .bucket(bucketName) - .object(objectName) - .build()); - } - - /** - * 文件下载 - */ - public void downloadFile(String bucketName, String objectName, String downloadPath) throws Exception { - InputStream inputStream = minioClient.getObject( - GetObjectArgs.builder() - .bucket(bucketName) - .object(objectName) - .build() - ); - FileUtil.writeFromStream(inputStream, new File(downloadPath)); - } - - /** - * 文件列表 - * @param bucketName - * @param prefix - */ - public void listFiles(String bucketName, String prefix) { - Iterable> results = minioClient.listObjects( - ListObjectsArgs.builder() - .bucket(bucketName) - .prefix(prefix) - .recursive(true) - .build() - ); - - try { - for (Result result : results) { - try { -// System.out.println("文件名:" + result.get().objectName()); // 获取对象名称(文件路径) - System.out.println(result.get().objectName()); // 获取对象名称(文件路径) - } catch (Exception e) { - e.printStackTrace(); - } - } - - } catch (Exception e) { - System.err.println("文件读取异常: " + e.getMessage()); - } - - } - - - - -// public void updateFile(String bucketName, String objectName, String filePath, String localFilePath) throws Exception { -// uploadFile(bucketName, objectName, filePath, localFilePath); -// } - - -// public static void main(String[] args) throws Exception { -// String localFilePath = "D:\\123pan\\page.html"; -// -// tianyiOssInit("", "", ""); -// uploadFile(bucketName, objectName, filePath, localFilePath);//正常 -//// deleteFile(bucketName, filePath + objectName);//正常 -//// listFiles(bucketName, fileDir + "/"); // 正常 -// -//// downloadFile(bucketName, filePath + objectName, "D:\\123pan\\downloaded_page.html"); //正常 -// -// } - -} From aa12725241d58f67f35f5cc614086e2e2232833e Mon Sep 17 00:00:00 2001 From: like <1025687351@qq.com> Date: Mon, 12 May 2025 15:04:36 +0800 Subject: [PATCH 09/29] =?UTF-8?q?=E6=98=9F=E7=BD=97=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E5=92=8C=E8=A7=86=E9=A2=91=E6=B5=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/api/RemoteConfigService.java | 2 + .../dromara/sample/common/util/Md5Utils.java | 68 +++++ .../controller/EngineRecordController.java | 87 +++++++ .../controller/MegaphoneController.java | 141 ++++++++++ .../manage/controller/PlayTextController.java | 17 ++ .../manage/mapper/IEngineRecordMapper.java | 16 ++ .../manage/mapper/WarningRecordMapper.java | 18 ++ .../sample/manage/model/dto/CallBackDTO.java | 30 +++ .../sample/manage/model/dto/Engine.java | 31 +++ .../manage/model/dto/EngineResponse.java | 31 +++ .../sample/manage/model/dto/EventsDTO.java | 45 ++++ .../sample/manage/model/dto/ExtraType.java | 46 ++++ .../manage/model/dto/ExtraTypeResponse.java | 31 +++ .../sample/manage/model/dto/ObjectsDTO.java | 49 ++++ .../manage/model/dto/StreamTypeDTO.java | 37 +++ .../model/entity/EngineRecordEntity.java | 48 ++++ .../model/entity/WarningRecordEntity.java | 55 ++++ .../manage/service/IEngineRecordService.java | 32 +++ .../manage/service/IPlayTextService.java | 3 + .../manage/service/IWarningRecordService.java | 15 ++ .../service/impl/EngineRecordServiceImpl.java | 246 ++++++++++++++++++ .../service/impl/PlayTextServiceImpl.java | 40 ++- .../impl/WarningRecordServiceImpl.java | 20 ++ .../system/dubbo/RemoteConfigServiceImpl.java | 6 + .../system/service/ISysConfigService.java | 2 + .../service/impl/SysConfigServiceImpl.java | 7 + 26 files changed, 1118 insertions(+), 5 deletions(-) create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/common/util/Md5Utils.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/EngineRecordController.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IEngineRecordMapper.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/WarningRecordMapper.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/CallBackDTO.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/Engine.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EngineResponse.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EventsDTO.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ExtraType.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ExtraTypeResponse.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ObjectsDTO.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/StreamTypeDTO.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/EngineRecordEntity.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IEngineRecordService.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IWarningRecordService.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/EngineRecordServiceImpl.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/WarningRecordServiceImpl.java diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java index 4be1ec1..201967a 100644 --- a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java @@ -21,4 +21,6 @@ public interface RemoteConfigService { */ String selectStreamIp(); + + String selectStreamType(String deviceSn); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/common/util/Md5Utils.java b/dk-modules/sample/src/main/java/org/dromara/sample/common/util/Md5Utils.java new file mode 100644 index 0000000..7eccf44 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/common/util/Md5Utils.java @@ -0,0 +1,68 @@ +package org.dromara.sample.common.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; + +/** + * Md5加密方法 + * + * @author ruoyi + */ +public class Md5Utils +{ + private static final Logger log = LoggerFactory.getLogger(Md5Utils.class); + + private static byte[] md5(String s) + { + MessageDigest algorithm; + try + { + algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(s.getBytes("UTF-8")); + byte[] messageDigest = algorithm.digest(); + return messageDigest; + } + catch (Exception e) + { + log.error("MD5 Error...", e); + } + return null; + } + + private static final String toHex(byte hash[]) + { + if (hash == null) + { + return null; + } + StringBuffer buf = new StringBuffer(hash.length * 2); + int i; + + for (i = 0; i < hash.length; i++) + { + if ((hash[i] & 0xff) < 0x10) + { + buf.append("0"); + } + buf.append(Long.toString(hash[i] & 0xff, 16)); + } + return buf.toString(); + } + + public static String hash(String s) + { + try + { + return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + } + catch (Exception e) + { + log.error("not supported charset...{}", e); + return s; + } + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/EngineRecordController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/EngineRecordController.java new file mode 100644 index 0000000..a1f7d75 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/EngineRecordController.java @@ -0,0 +1,87 @@ +package org.dromara.sample.manage.controller; + +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.fasterxml.jackson.databind.JsonNode; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.sdk.common.HttpResultResponse; +import org.dromara.common.sdk.common.PaginationData; +import org.dromara.common.sdk.exception.CloudSDKErrorEnum; +import org.dromara.common.sdk.mqtt.property.PropertySetReplyResultEnum; +import org.dromara.sample.manage.model.dto.CallBackDTO; +import org.dromara.sample.manage.model.dto.DeviceDTO; +import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO; +import org.dromara.sample.manage.model.dto.EventsDTO; +import org.dromara.sample.manage.model.entity.WarningRecordEntity; +import org.dromara.sample.manage.service.IDeviceService; +import org.dromara.sample.manage.service.IEngineRecordService; +import org.dromara.sample.manage.service.IWarningRecordService; +import org.dromara.system.api.model.LoginUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * @author sean.zhou + * @version 0.1 + * @date 2021/11/15 + */ +@RestController +@Slf4j +@RequestMapping("${url.manage.prefix}${url.manage.version}/engineRecord") +@Tag(name = "无人机设备模块") +public class EngineRecordController { + + @Autowired + private IEngineRecordService engineRecordService; + @Autowired + private IWarningRecordService warningRecordService; + + /** + * 启动星罗引擎。 + * Get the topology list of all online devices in one workspace. + * @return + */ + @PostMapping("/startEngine") + @Operation(summary = "启动星罗引擎。", description = "启动星罗引擎") + public HttpResultResponse> startEngine(@RequestBody Map objectMap) { + return HttpResultResponse.success(engineRecordService.startEngine(objectMap)); + } + + @PostMapping("/closeEngine") + @Operation(summary = "关闭星罗引擎。", description = "关闭星罗引擎") + public HttpResultResponse closeEngine(@RequestBody Map objectMap) { + engineRecordService.closeEngine(objectMap); + return HttpResultResponse.success(); + } + + @PostMapping("/some") + @Operation(summary = "存储推流的预警(对外接口)。", description = "存储推流的预警(对外接口)。") + public void some(@RequestBody CallBackDTO callBackVo){ + WarningRecordEntity warningRecord = new WarningRecordEntity(); + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(callBackVo.getEvents())){ + for (EventsDTO eventsVo :callBackVo.getEvents()){ + warningRecord.setTaskId(callBackVo.getTaskId()); + warningRecord.setAlgoId(eventsVo.getAlgoId()); + warningRecord.setEventId(eventsVo.getEventId()); + warningRecord.setExtraType(eventsVo.getExtraType()); + warningRecord.setPicUrl(eventsVo.getPicUrl()); + warningRecord.setTimestamp(eventsVo.getTimestamp()); + list.add(warningRecord); + } + warningRecordService.saveBatch(list); + System.out.println(callBackVo); + } + + + + + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java index ae6737a..9e403c9 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java @@ -1,12 +1,23 @@ package org.dromara.sample.manage.controller; import cn.hutool.core.convert.Convert; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import io.seata.common.util.StringUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.implementation.bytecode.Throw; import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.utils.URIBuilder; +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.common.redis.utils.RedisOpsUtils; import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.mqtt.CommonTopicRequest; @@ -17,12 +28,19 @@ import org.dromara.common.sdk.mqtt.property.PropertySetPublish; import org.dromara.common.sdk.mqtt.services.ServicesPublish; import org.dromara.common.sdk.mqtt.services.ServicesReplyReceiver; import org.dromara.common.sdk.mqtt.services.TopicServicesRequest; +import org.dromara.sample.common.util.Md5Utils; import org.dromara.sample.manage.model.dto.*; +import org.dromara.sample.media.mapper.IFileMapper; import org.dromara.system.api.RemoteConfigService; +import org.json.JSONObject; import org.springframework.web.bind.annotation.*; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import java.util.*; +import static org.apache.commons.compress.utils.ArchiveUtils.sanitize; import static org.dromara.common.sdk.mqtt.MqttGatewayPublish.DEFAULT_RETRY_COUNT; import static org.dromara.common.sdk.mqtt.MqttGatewayPublish.DEFAULT_RETRY_TIMEOUT; @@ -50,6 +68,7 @@ public class MegaphoneController { @DubboReference private RemoteConfigService remoteConfigService; + /** * 喊话器-开始播放文档(对应遥控器的录音广播模式) * Get the topology list of all online devices in one workspace. @@ -276,4 +295,126 @@ public class MegaphoneController { MegaphoneDTO megaphoneDTO = (MegaphoneDTO) RedisOpsUtils.get(key); return HttpResultResponse.success(megaphoneDTO); } + + + /** + * 获取媒体流ip + * Get the topology list of all online devices in one workspace. + * @return + */ +// @PostMapping("/getAlgorithm") +// @Operation(summary = "第三方星罗接口", description = "获取媒体流ip。") +// public HttpResultResponse getAlgorithm(@RequestBody Map objectMap +// ) { +// //获取token +// //设置请求Header和Body(如JSON) +// String md5 = Md5Utils.hash("xuzhou_ai"); +// JSONObject jsonObj = new JSONObject(); +// jsonObj.put("username", sanitize("xuzhou_ai")); // sanitize函数见下文 +// jsonObj.put("password", sanitize(md5)); +// String responseBody = PostRequest(jsonObj, "http://60.204.247.65:8100/Third/Login"); +// JSONObject jsonObject = new JSONObject(responseBody); +// // 逐层获取 data -> token +// JSONObject data = jsonObject.getJSONObject("data"); +// String token = data.getString("token"); +// String sceneResponseBody = null; +// String algorithmResponseBody = null; +// //查询用户开通的场景 +// if (StringUtils.isNotEmpty(token)){ +// try { +// URI uri = new URIBuilder("http://60.204.247.65:8100/V2/AI/WX/User/Scene") +// .build(); +// sceneResponseBody = GetRequest(uri, token); +// } catch (URISyntaxException e) { +// throw new RuntimeException(e); +// } +// JSONObject jsonObject1 = new JSONObject(sceneResponseBody); +// // 逐层获取 data -> token +// JSONObject data1 = jsonObject.getJSONObject("data"); +// String scene = data1.getString("scene"); +// +// //查询场景算法 +// List extra_type_list = new ArrayList<>(); +// try { +// URI uri = new URIBuilder("http://60.204.247.65:8100/V2/AI/WX/User/ExtraType/Get") +// .addParameter("scene",scene) +// .addParameter("if_open","1") +// .build(); +// algorithmResponseBody = GetRequest(uri, token); +// ObjectMapper mapper = new ObjectMapper(); +// ExtraTypeResponse response = mapper.readValue(algorithmResponseBody,ExtraTypeResponse.class); +// List list = response.getData(); +// for (ExtraType extraType : list) { +// extra_type_list.add(extraType.getExtra_type()); +// break; +// } +// } catch (URISyntaxException | JsonProcessingException e) { +// throw new RuntimeException(e); +// } +// +// JSONObject jsonObj2 = new JSONObject(); +// jsonObj2.put("scene", scene); // sanitize函数见下文 +// jsonObj2.put("callback_url", objectMap.get("callback_url")); +// jsonObj2.put("input_url", objectMap.get("input_url")); +// jsonObj2.put("push_url", objectMap.get("push_url")); +// jsonObj2.put("play_url", objectMap.get("play_url")); +// String responseBody2 = PostRequest(jsonObj2, "http://60.204.247.65:8100/Third/Engine/Start"); +// JSONObject jsonObject2 = new JSONObject(responseBody2); +// } +// +// return HttpResultResponse.success(); +// } +// +// +// public String PostRequest( JSONObject jsonObj, String url +// ) { +// try (CloseableHttpClient httpClient = HttpClients.createDefault()) { +// // 1. 创建POST请求对象 +// HttpPost post = new HttpPost(url); +// StringEntity requestEntity = new StringEntity(jsonObj.toString(), "UTF-8"); +// requestEntity.setContentType("application/json"); +// post.setEntity(requestEntity); +// post.setHeader("Accept", "application/json"); +// // 3. 执行请求并获取响应 +// try (CloseableHttpResponse response = httpClient.execute(post)) { +// String responseBody = EntityUtils.toString(response.getEntity()); +// if (response.getStatusLine().getStatusCode() == 200) { +// return responseBody; +// } else { +// throw new RuntimeException("第三方接口调用失败!"); +// } +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return null; +// +// } +// +// public String GetRequest(URI uri, String token +// ) { +// try (CloseableHttpClient httpClient = HttpClients.createDefault()) { +//// URI uri = new URIBuilder("https://api.example.com/data") +//// .addParameter("param1", "value1") +//// .addParameter("param2", "value2") +//// .build(); +// HttpGet httpGet = new HttpGet(uri); +// httpGet.setHeader("token",token); +// try (CloseableHttpResponse response = httpClient.execute(httpGet)) { +// // 处理响应 +// String responseBody = EntityUtils.toString(response.getEntity()); +// if (response.getStatusLine().getStatusCode() == 200){ +// return responseBody; +// }else { +// throw new RuntimeException("第三方接口调用失败!"); +// } +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return null; +// +// } + + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/PlayTextController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/PlayTextController.java index 89ef7f8..f94cc91 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/PlayTextController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/PlayTextController.java @@ -1,24 +1,31 @@ package org.dromara.sample.manage.controller; +import cn.hutool.core.convert.Convert; +import io.seata.common.util.StringUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.PaginationData; +import org.dromara.common.sdk.mqtt.CommonTopicRequest; import org.dromara.common.sdk.mqtt.MegaphoneTopicRequest; import org.dromara.common.sdk.mqtt.MqttGatewayPublish; import org.dromara.common.sdk.mqtt.TopicConst; import org.dromara.sample.manage.model.dto.DeviceDTO; +import org.dromara.sample.manage.model.dto.StreamTypeDTO; import org.dromara.sample.manage.model.dto.TextDTO; import org.dromara.sample.manage.model.entity.PlayTextEntity; import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.IPlayTextService; +import org.dromara.system.api.RemoteConfigService; import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.Map; import java.util.Objects; import java.util.UUID; @@ -37,6 +44,8 @@ public class PlayTextController { @Autowired private IPlayTextService playTextService; + + /** * 获取一个工作区中所有在线设备的列表。 * Get the topology list of all online devices in one workspace. @@ -73,5 +82,13 @@ public class PlayTextController { return HttpResultResponse.success(pageText); } + @PostMapping("/streamType") + @Operation(summary = "获取媒体流算法类型。", description = "获取媒体流算法类型。") + public HttpResultResponse grtStreamType(@RequestBody Map objectMap + ) { + + return playTextService.streamType(objectMap); + } + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IEngineRecordMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IEngineRecordMapper.java new file mode 100644 index 0000000..6e4e4e4 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IEngineRecordMapper.java @@ -0,0 +1,16 @@ +package org.dromara.sample.manage.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.dromara.sample.manage.model.entity.DeviceEntity; +import org.dromara.sample.manage.model.entity.EngineRecordEntity; + +/** + * + * @author sean.zhou + * @date 2021/11/10 + * @version 0.1 + */ +public interface IEngineRecordMapper extends BaseMapper { + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/WarningRecordMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/WarningRecordMapper.java new file mode 100644 index 0000000..80e3e34 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/WarningRecordMapper.java @@ -0,0 +1,18 @@ +package org.dromara.sample.manage.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.dromara.sample.manage.model.entity.WarningRecordEntity; + +/** + * 设备对象-》用于存储设备Mapper接口 + * + * @author wuyuan + * @date 2022-10-25 + */ +@Mapper +public interface WarningRecordMapper extends BaseMapper { + +} + diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/CallBackDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/CallBackDTO.java new file mode 100644 index 0000000..2100bd4 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/CallBackDTO.java @@ -0,0 +1,30 @@ +package org.dromara.sample.manage.model.dto; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * 设备对象-》用于存储设备对象 iot_device + * + * @author wuyuan + * @date 2022-10-25 + */ +@TableName("iot_device") +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class CallBackDTO implements Serializable { + //任务 id + private String taskId; + + //检测事件列表 + private List events; + + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/Engine.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/Engine.java new file mode 100644 index 0000000..afe1245 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/Engine.java @@ -0,0 +1,31 @@ +package org.dromara.sample.manage.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * The entity class of the device + * + * @author sean.zhou + * @version 0.1 + * @date 2021/11/10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Engine implements Serializable { + + + + private String task_id; + + private String mission_batch; + + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EngineResponse.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EngineResponse.java new file mode 100644 index 0000000..3aa3061 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EngineResponse.java @@ -0,0 +1,31 @@ +package org.dromara.sample.manage.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * The entity class of the device + * + * @author sean.zhou + * @version 0.1 + * @date 2021/11/10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EngineResponse implements Serializable { + + private Long code; + + private String message; + + private Engine data; + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EventsDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EventsDTO.java new file mode 100644 index 0000000..37be3cf --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EventsDTO.java @@ -0,0 +1,45 @@ +package org.dromara.sample.manage.model.dto; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * 设备对象-》用于存储设备对象 iot_device + * + * @author wuyuan + * @date 2022-10-25 + */ +@TableName("iot_device") +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class EventsDTO implements Serializable { + //算法 id") + private Integer algoId; + + //算法类型字符串") + private String extraType; + + + //分配的事件 id") + private String eventId; + + + //保存后图片的 url") + private String picUrl; + + + //事件时间戳,单位:毫秒") + private Integer timestamp; + + //检测事件列表") + private List objects; + + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ExtraType.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ExtraType.java new file mode 100644 index 0000000..92c0aaa --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ExtraType.java @@ -0,0 +1,46 @@ +package org.dromara.sample.manage.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * The entity class of the device + * + * @author sean.zhou + * @version 0.1 + * @date 2021/11/10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ExtraType implements Serializable { + + private Long id; + + private String sence; + + private String type; + + private String extra_type; + + private String model; + + private String user; + + private int difficult; + + private int if_open; + + private int sence_id; + + private Double conf; + + private int aiConfig; + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ExtraTypeResponse.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ExtraTypeResponse.java new file mode 100644 index 0000000..a4a320b --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ExtraTypeResponse.java @@ -0,0 +1,31 @@ +package org.dromara.sample.manage.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * The entity class of the device + * + * @author sean.zhou + * @version 0.1 + * @date 2021/11/10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ExtraTypeResponse implements Serializable { + + private Long code; + + private String message; + + private List data; + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ObjectsDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ObjectsDTO.java new file mode 100644 index 0000000..96f66b8 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/ObjectsDTO.java @@ -0,0 +1,49 @@ +package org.dromara.sample.manage.model.dto; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 设备对象-》用于存储设备对象 iot_device + * + * @author wuyuan + * @date 2022-10-25 + */ +@TableName("iot_device") +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class ObjectsDTO implements Serializable { + //画面运动方向角度,-180度 到 180度") + private String anglePx; + + //属性截图,base64编码") + private String attrImage; + + //属性名称,车牌,人脸,或其他") + private String attrName; + + //属性文字") + private String attrText; + + //类别唯一ID") + private String classId; + + //画面像素速度,单位(像素/秒)") + private Integer speedPx; + + //追踪ID") + private String trackId; + + //目标中心X") + private Integer x; + + //目标中心Y") + private Integer y; + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/StreamTypeDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/StreamTypeDTO.java new file mode 100644 index 0000000..bdbd47d --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/StreamTypeDTO.java @@ -0,0 +1,37 @@ +package org.dromara.sample.manage.model.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.util.List; + +/** + * @author sean.zhou + * @version 0.1 + * @date 2021/11/23 + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class StreamTypeDTO { + private String jobId; + + private String jobName; + + private String labelCn; + + + private String labelEn; + + private Long deptId; + + private String deptName; + + private String deviceSn; + + private String lat; + + private String lng; + + private String images; + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/EngineRecordEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/EngineRecordEntity.java new file mode 100644 index 0000000..ebffdb9 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/EngineRecordEntity.java @@ -0,0 +1,48 @@ +package org.dromara.sample.manage.model.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * The entity class of the EngineRecord + * + * @author sean.zhou + * @version 0.1 + * @date 2021/11/10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "engine_record") +public class EngineRecordEntity implements Serializable { + + @TableId(type = IdType.AUTO) + private Integer id; + + @TableField(value = "device_sn") + private String deviceSn; + + @TableField(value = "extra_type") + private String extraType; + + @TableField(value = "task_id") + private String taskId; + + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + @TableField(value = "push_url") + private String pushUrl; + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java new file mode 100644 index 0000000..70f8e17 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java @@ -0,0 +1,55 @@ +package org.dromara.sample.manage.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 设备对象-》用于存储设备对象 iot_device + * + * @author wuyuan + * @date 2022-10-25 + */ +@TableName("warning_record") +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class WarningRecordEntity implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.AUTO) + private String id; + + @TableField(value = "task_id") + private String taskId; + + @TableField(value = "algo_id") + //算法 id") + private Integer algoId; + + @TableField(value = "extra_type") + //算法类型字符串") + private String extraType; + + @TableField(value = "event_id") + //分配的事件 id") + private String eventId; + + @TableField(value = "pic_url") + //保存后图片的 url") + private String picUrl; + + @TableField(value = "timestamp") + //事件时间戳,单位:毫秒") + private Integer timestamp; + + + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IEngineRecordService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IEngineRecordService.java new file mode 100644 index 0000000..44944ad --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IEngineRecordService.java @@ -0,0 +1,32 @@ +package org.dromara.sample.manage.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import org.dromara.common.sdk.cloudapi.device.ControlSourceEnum; +import org.dromara.common.sdk.cloudapi.device.DeviceOsdHost; +import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum; +import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum; +import org.dromara.common.sdk.common.HttpResultResponse; +import org.dromara.common.sdk.common.PaginationData; +import org.dromara.common.sdk.config.version.GatewayManager; +import org.dromara.common.websocket.dto.BizCodeEnum; +import org.dromara.sample.manage.model.dto.DeviceDTO; +import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO; +import org.dromara.sample.manage.model.dto.TopologyDeviceDTO; +import org.dromara.sample.manage.model.param.DeviceQueryParam; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * @author sean.zhou + * @date 2021/11/10 + * @version 0.1 + */ +public interface IEngineRecordService { + + Map startEngine(Map objectMap); + + void closeEngine(Map objectMap); +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IPlayTextService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IPlayTextService.java index 97603b2..5ba0751 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IPlayTextService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IPlayTextService.java @@ -17,6 +17,7 @@ import org.dromara.sample.manage.model.entity.PlayTextEntity; import org.dromara.sample.manage.model.param.DeviceQueryParam; import java.util.List; +import java.util.Map; import java.util.Optional; /** @@ -34,4 +35,6 @@ public interface IPlayTextService { PaginationData pageText(Long page, Long pageSize); + HttpResultResponse streamType(Map objectMap); + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IWarningRecordService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IWarningRecordService.java new file mode 100644 index 0000000..16ce42e --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IWarningRecordService.java @@ -0,0 +1,15 @@ +package org.dromara.sample.manage.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.sample.manage.model.entity.WarningRecordEntity; + +/** + * 设备对象-》用于存储设备Service接口 + * + * @author wuyuan + * @date 2022-10-25 + */ +public interface IWarningRecordService extends IService{ + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/EngineRecordServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/EngineRecordServiceImpl.java new file mode 100644 index 0000000..50c040b --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/EngineRecordServiceImpl.java @@ -0,0 +1,246 @@ +package org.dromara.sample.manage.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.seata.common.util.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.utils.URIBuilder; +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.common.sdk.cloudapi.device.*; +import org.dromara.common.sdk.cloudapi.firmware.*; +import org.dromara.common.sdk.cloudapi.firmware.api.AbstractFirmwareService; +import org.dromara.common.sdk.cloudapi.property.api.AbstractPropertyService; +import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl; +import org.dromara.common.sdk.cloudapi.tsa.TopologyDeviceModel; +import org.dromara.common.sdk.common.*; +import org.dromara.common.sdk.config.version.GatewayManager; +import org.dromara.common.sdk.exception.CloudSDKException; +import org.dromara.common.sdk.mqtt.IMqttTopicService; +import org.dromara.common.sdk.mqtt.MqttGatewayPublish; +import org.dromara.common.sdk.mqtt.events.EventsSubscribe; +import org.dromara.common.sdk.mqtt.osd.OsdSubscribe; +import org.dromara.common.sdk.mqtt.property.PropertySetReplyResultEnum; +import org.dromara.common.sdk.mqtt.property.PropertySetSubscribe; +import org.dromara.common.sdk.mqtt.requests.RequestsSubscribe; +import org.dromara.common.sdk.mqtt.services.ServicesReplyData; +import org.dromara.common.sdk.mqtt.services.ServicesSubscribe; +import org.dromara.common.sdk.mqtt.services.TopicServicesResponse; +import org.dromara.common.sdk.mqtt.state.StateSubscribe; +import org.dromara.common.sdk.mqtt.status.StatusSubscribe; +import org.dromara.common.websocket.dto.BizCodeEnum; +import org.dromara.sample.common.error.CommonErrorEnum; +import org.dromara.sample.common.util.Md5Utils; +import org.dromara.sample.component.mqtt.model.EventsReceiver; +import org.dromara.sample.control.model.enums.DroneAuthorityEnum; +import org.dromara.sample.manage.mapper.IDeviceMapper; +import org.dromara.sample.manage.mapper.IDeviceProMapper; +import org.dromara.sample.manage.mapper.IEngineRecordMapper; +import org.dromara.sample.manage.model.dto.*; +import org.dromara.sample.manage.model.entity.DeviceEntity; +import org.dromara.sample.manage.model.entity.DeviceProEntity; +import org.dromara.sample.manage.model.entity.EngineRecordEntity; +import org.dromara.sample.manage.model.enums.DeviceFirmwareStatusEnum; +import org.dromara.sample.manage.model.enums.PropertySetFieldEnum; +import org.dromara.sample.manage.model.enums.UserTypeEnum; +import org.dromara.sample.manage.model.param.DeviceQueryParam; +import org.dromara.sample.manage.model.receiver.BasicDeviceProperty; +import org.dromara.sample.manage.service.*; +import org.dromara.sample.websocket.service.IWebSocketMessageService; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.net.URI; +import java.net.URISyntaxException; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static org.apache.commons.compress.utils.ArchiveUtils.sanitize; + +/** + * + * @author sean.zhou + * @version 0.1 + * @date 2021/11/10 + */ +@Service +@Slf4j +@Transactional +public class EngineRecordServiceImpl implements IEngineRecordService { + @Resource + IEngineRecordMapper mapper; + + + @Override + public Map startEngine(Map objectMap){ + EngineRecordEntity record = new EngineRecordEntity(); + //获取token + //设置请求Header和Body(如JSON) + String md5 = Md5Utils.hash("xuzhou_ai"); + JSONObject jsonObj = new JSONObject(); + jsonObj.put("username", sanitize("xuzhou_ai")); // sanitize函数见下文 + jsonObj.put("password", sanitize(md5)); + String responseBody = PostRequest(jsonObj, "http://60.204.247.65:8100/Third/Login"); + JSONObject jsonObject = new JSONObject(responseBody); + // 逐层获取 data -> token + JSONObject data = jsonObject.getJSONObject("data"); + String token = data.getString("token"); + String sceneResponseBody = null; + String algorithmResponseBody = null; + //查询用户开通的场景 + if (StringUtils.isNotEmpty(token)){ + try { + URI uri = new URIBuilder("http://60.204.247.65:8100/V2/AI/WX/User/Scene") + .build(); + sceneResponseBody = GetRequest(uri, token); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + JSONObject jsonObject1 = new JSONObject(sceneResponseBody); + // 逐层获取 data -> token + JSONObject data1 = jsonObject.getJSONObject("data"); + String scene = data1.getString("scene"); + + //查询场景算法 + List extra_type_list = new ArrayList<>(); + try { + URI uri = new URIBuilder("http://60.204.247.65:8100/V2/AI/WX/User/ExtraType/Get") + .addParameter("scene",scene) + .addParameter("if_open","1") + .build(); + algorithmResponseBody = GetRequest(uri, token); + ObjectMapper mapper = new ObjectMapper(); + ExtraTypeResponse response = mapper.readValue(algorithmResponseBody,ExtraTypeResponse.class); + List list = response.getData(); + for (ExtraType extraType : list) { + extra_type_list.add(extraType.getExtra_type()); + break; + } + } catch (URISyntaxException | JsonProcessingException e) { + throw new RuntimeException(e); + } + + JSONObject jsonObj2 = new JSONObject(); + jsonObj2.put("scene", scene); // sanitize函数见下文 + jsonObj2.put("callback_url", objectMap.get("callback_url")); + jsonObj2.put("input_url", objectMap.get("input_url")); + jsonObj2.put("push_url", objectMap.get("push_url")); + jsonObj2.put("play_url", objectMap.get("play_url")); + String responseBody2 = PostRequest(jsonObj2, "http://60.204.247.65:8100/Third/Engine/Start"); + ObjectMapper mapper1 = new ObjectMapper(); + EngineResponse response = null; + try { + response = mapper1.readValue(responseBody2, EngineResponse.class); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + objectMap.put("task_id",response.getData().getTask_id()); + record.setPushUrl(objectMap.get("push_url").toString()); + record.setDeviceSn(objectMap.get("device_sn").toString()); + record.setTaskId(response.getData().getTask_id()); + record.setExtraType(String.join(",", extra_type_list)); + } + Map map = new HashMap(); + map.put("callback_url", objectMap.get("callback_url")); + map.put("input_url", objectMap.get("input_url")); + map.put("push_url", objectMap.get("push_url")); + map.put("play_url", objectMap.get("play_url")); + map.put("task_id", objectMap.get("task_id")); + //添加启动引擎记录 + mapper.insert(record); + return map; + } + + @Override + public void closeEngine(Map objectMap) { + JSONObject jsonObj2 = new JSONObject(); + EngineRecordEntity record = mapper.selectOne(new LambdaQueryWrapper().eq(EngineRecordEntity::getDeviceSn, objectMap.get("device_sn"))); + if (record == null){ + throw new RuntimeException("关闭引擎失败!"); + } + jsonObj2.put("task_id", record.getTaskId()); // sanitize函数见下文 + String responseBody2 = PostRequest(jsonObj2, "http://60.204.247.65:8100/Third/Engine/Stop"); + JSONObject json = new JSONObject(responseBody2); + // 方式2:安全获取(先判空再转换) + Object dataObj = json.get("data"); + if(dataObj != null && dataObj instanceof Integer) { + int data = (Integer) dataObj; + if (data ==1){ + mapper.delete(new LambdaQueryWrapper().eq(EngineRecordEntity::getDeviceSn, objectMap.get("device_sn"))); + }else { + throw new RuntimeException("关闭引擎失败!"); + } + } else { + throw new RuntimeException("关闭引擎失败!"); + } + + + } + + + public String PostRequest( JSONObject jsonObj, String url + ) { + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + // 1. 创建POST请求对象 + HttpPost post = new HttpPost(url); + StringEntity requestEntity = new StringEntity(jsonObj.toString(), "UTF-8"); + requestEntity.setContentType("application/json"); + post.setEntity(requestEntity); + post.setHeader("Accept", "application/json"); + // 3. 执行请求并获取响应 + try (CloseableHttpResponse response = httpClient.execute(post)) { + String responseBody = EntityUtils.toString(response.getEntity()); + if (response.getStatusLine().getStatusCode() == 200) { + return responseBody; + } else { + throw new RuntimeException("第三方接口调用失败!"); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + + } + + public String GetRequest(URI uri, String token + ) { + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { +// URI uri = new URIBuilder("https://api.example.com/data") +// .addParameter("param1", "value1") +// .addParameter("param2", "value2") +// .build(); + HttpGet httpGet = new HttpGet(uri); + httpGet.setHeader("token",token); + try (CloseableHttpResponse response = httpClient.execute(httpGet)) { + // 处理响应 + String responseBody = EntityUtils.toString(response.getEntity()); + if (response.getStatusLine().getStatusCode() == 200){ + return responseBody; + }else { + throw new RuntimeException("第三方接口调用失败!"); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + + } + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java index ccf0eba..fdc0179 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java @@ -1,28 +1,37 @@ package org.dromara.sample.manage.service.impl; +import cn.hutool.core.convert.Convert; import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import io.seata.common.util.StringUtils; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.firmware.*; import org.dromara.common.sdk.cloudapi.firmware.api.AbstractFirmwareService; import org.dromara.common.sdk.cloudapi.property.api.AbstractPropertyService; import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl; import org.dromara.common.sdk.cloudapi.tsa.TopologyDeviceModel; -import org.dromara.common.sdk.common.*; +import org.dromara.common.sdk.common.HttpResultResponse; +import org.dromara.common.sdk.common.Pagination; +import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.config.version.GatewayManager; import org.dromara.common.sdk.exception.CloudSDKException; +import org.dromara.common.sdk.mqtt.CommonTopicRequest; import org.dromara.common.sdk.mqtt.IMqttTopicService; import org.dromara.common.sdk.mqtt.MqttGatewayPublish; import org.dromara.common.sdk.mqtt.events.EventsSubscribe; import org.dromara.common.sdk.mqtt.osd.OsdSubscribe; +import org.dromara.common.sdk.mqtt.property.PropertySetPublish; import org.dromara.common.sdk.mqtt.property.PropertySetReplyResultEnum; import org.dromara.common.sdk.mqtt.property.PropertySetSubscribe; import org.dromara.common.sdk.mqtt.requests.RequestsSubscribe; +import org.dromara.common.sdk.mqtt.services.ServicesPublish; import org.dromara.common.sdk.mqtt.services.ServicesReplyData; import org.dromara.common.sdk.mqtt.services.ServicesSubscribe; import org.dromara.common.sdk.mqtt.services.TopicServicesResponse; @@ -43,16 +52,14 @@ import org.dromara.sample.manage.model.enums.UserTypeEnum; import org.dromara.sample.manage.model.param.DeviceQueryParam; import org.dromara.sample.manage.model.receiver.BasicDeviceProperty; import org.dromara.sample.manage.service.*; +import org.dromara.system.api.RemoteConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; import java.time.LocalDateTime; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; /** @@ -68,6 +75,11 @@ public class PlayTextServiceImpl implements IPlayTextService { @Autowired private IPlayTextMapper playTextMapper; + @Resource + private MqttGatewayPublish gatewayPublish; + + @DubboReference + private RemoteConfigService remoteConfigService; @Override public HttpResultResponse insertPlayText(PlayTextEntity param) { @@ -107,4 +119,22 @@ public class PlayTextServiceImpl implements IPlayTextService { .orderByDesc(true,PlayTextEntity::getId)); return new PaginationData(pagination.getRecords(), new Pagination(pagination.getCurrent(), pagination.getSize(), pagination.getTotal())); } + + @Override + public HttpResultResponse streamType(Map objectMap) { + String top = "task/image/disobey/streamType"; + //发送mqtt + String s = remoteConfigService.selectStreamType(objectMap.get("deviceSn").toString()); + if (StringUtils.isNotEmpty(s)){ + String[] split = s.split(","); + objectMap.put("deptId",split[0]); + objectMap.put("deptName",split[1]); + objectMap.put("labelEn",split[2]); + objectMap.put("labelCn",split[3]); + StreamTypeDTO param = Convert.convert(StreamTypeDTO.class, objectMap); + gatewayPublish.publish(top,new CommonTopicRequest<>() + .setData(Objects.requireNonNull(param)),1); + } + return HttpResultResponse.error("请求成功"); + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/WarningRecordServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/WarningRecordServiceImpl.java new file mode 100644 index 0000000..7199e94 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/WarningRecordServiceImpl.java @@ -0,0 +1,20 @@ +package org.dromara.sample.manage.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.dromara.sample.manage.mapper.WarningRecordMapper; +import org.dromara.sample.manage.model.entity.WarningRecordEntity; +import org.dromara.sample.manage.service.IWarningRecordService; +import org.springframework.stereotype.Service; + +/** + * 设备对象-》用于存储设备Service业务层处理 + * + * @author wuyuan + * @date 2022-10-25 + */ +@Service +@Slf4j +public class WarningRecordServiceImpl extends ServiceImpl implements IWarningRecordService { + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java index 21be450..85cd78a 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java @@ -36,4 +36,10 @@ public class RemoteConfigServiceImpl implements RemoteConfigService { return ip; } + @Override + public String selectStreamType(String deviceSn) { + String ip =sysConfigService.selectStreamType(deviceSn); + return ip; + } + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java index e8dda5f..5a7c566 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java @@ -86,4 +86,6 @@ public interface ISysConfigService { String selectStreamIp(); + String selectStreamType(String deviceSn); + } 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 0899e3c..721962c 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 @@ -210,4 +210,11 @@ public class SysConfigServiceImpl implements ISysConfigService { return sysConfig.getConfigValue(); } + @Override + public String selectStreamType(String deviceSn) { + SysConfig sysConfig = baseMapper.selectOne(new LambdaQueryWrapper() + .eq(SysConfig::getConfigKey, "streamType").eq(SysConfig::getConfigValue, deviceSn)); + return sysConfig.getRemark(); + } + } From cbd3cf974ad09570684737b22687905da1dde8f4 Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Mon, 12 May 2025 15:18:06 +0800 Subject: [PATCH 10/29] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E7=9B=B4=E6=92=AD=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sdk/cloudapi/device/DeviceEnum.java | 13 +++ .../cloudapi/device/DeviceTypeVideoEnum.java | 39 +++++++++ .../sdk/cloudapi/device/DeviceVideoEnum.java | 80 +++++++++++++++++++ .../common/core/utils/StringUtils.java | 2 + .../common/redis/config/RedisConst.java | 5 ++ dk-modules/sample/pom.xml | 4 + .../manage/service/IDeviceRedisService.java | 9 +++ .../service/impl/DeviceRedisServiceImpl.java | 23 ++++++ .../manage/service/impl/SDKDeviceService.java | 41 +++++++++- .../sample/rocketmq/RocketMqConsum.java | 46 +++++++++++ .../controller/WaylineJobController.java | 8 +- .../wayline/service/IFlightTaskService.java | 2 + .../service/impl/FlightTaskServiceImpl.java | 28 +++++++ .../src/main/resources/application.properties | 4 +- 14 files changed, 299 insertions(+), 5 deletions(-) create mode 100644 dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceTypeVideoEnum.java create mode 100644 dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java index d63bcc3..9c5f9b5 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java @@ -142,4 +142,17 @@ public enum DeviceEnum { return Arrays.stream(values()).filter(device -> device.getDevice().equals(finalKey)) .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey1)); } + + @JsonCreator + public static DeviceEnum findKey(String key) { + if(StringUtils.isEmpty(key)){ + key = DeviceEnum.M3TD.getDevice(); + } + String finalKey = key; + String finalKey1 = key; + return Arrays.stream(values()).filter(device -> device.toString().equals(finalKey)) + .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey1)); + } + + } diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceTypeVideoEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceTypeVideoEnum.java new file mode 100644 index 0000000..f3ce4d4 --- /dev/null +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceTypeVideoEnum.java @@ -0,0 +1,39 @@ +package org.dromara.common.sdk.cloudapi.device; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.media.Schema; +import org.dromara.common.sdk.exception.CloudSDKException; + +import java.util.Arrays; + +/** + * @author sean + * @version 1.7 + * @date 2023/5/26 + */ +@Schema(description = "DeviceTypeVideoEnum", enumAsRef = true) +public enum DeviceTypeVideoEnum { + + ZERO(0), + SEVEN(7); + + ; + + private final int videoType; + + DeviceTypeVideoEnum(int videoType) { + this.videoType = videoType; + } + + @JsonValue + public int getVideoType() { + return videoType; + } + + @JsonCreator + public static DeviceTypeVideoEnum find(int videoType) { + return Arrays.stream(values()).filter(typeEnum -> typeEnum.videoType == videoType).findAny() + .orElseThrow(() -> new CloudSDKException(DeviceTypeVideoEnum.class, videoType)); + } +} diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java new file mode 100644 index 0000000..c851c1c --- /dev/null +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceVideoEnum.java @@ -0,0 +1,80 @@ +package org.dromara.common.sdk.cloudapi.device; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.media.Schema; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.sdk.exception.CloudSDKException; + +import java.util.Arrays; + +/** + * @author sean + * @version 1.7 + * @date 2023/5/19 + */ +@Schema(description = "device model key.", format = "domain-type-subType", enumAsRef = true, example = "0-89-0") +public enum DeviceVideoEnum { + + + DOCK(DeviceTypeEnum.DOCK_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.SEVEN), + + DJIDock2(DeviceTypeEnum.DOCK_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.SEVEN), + + DOCK3(DeviceTypeEnum.DOCK_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.SEVEN), + Matrice30(DeviceTypeEnum.M30_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + Matrice30T(DeviceTypeEnum.M30T_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + M3D(DeviceTypeEnum.M3D_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + M3TD(DeviceTypeEnum.M3TD_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + M4D(DeviceTypeEnum.M4D_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + M4TD(DeviceTypeEnum.M4TD_CAMERA, DeviceSubTypeEnum.ZERO, DeviceTypeVideoEnum.ZERO), + + ; + + + @Schema(enumAsRef = true) + private final DeviceTypeEnum type; + + @Schema(enumAsRef = true) + private final DeviceSubTypeEnum subType; + + @Schema(enumAsRef = true) + private final DeviceTypeVideoEnum videoType; + + DeviceVideoEnum(DeviceTypeEnum type, DeviceSubTypeEnum subType, DeviceTypeVideoEnum videoType) { + this.type = type; + this.subType = subType; + this.videoType = videoType; + } + + public DeviceTypeEnum getType() { + return type; + } + + public DeviceSubTypeEnum getSubType() { + return subType; + } + + public DeviceTypeVideoEnum getVideoType() { + return videoType; + } + + @JsonValue + public String getDevice() { + return String.format("%s-%s-%s", type.getType(), subType.getSubType(),videoType.getVideoType()); + } + + + @JsonCreator + public static DeviceVideoEnum find(String key) { + String finalKey = key.replaceAll(" ",""); + return Arrays.stream(values()).filter(device -> device.toString().equals(finalKey)) + .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey)); + } + + +} diff --git a/dk-common/common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java b/dk-common/common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java index dd6ebb1..46bccfd 100644 --- a/dk-common/common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java +++ b/dk-common/common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java @@ -24,6 +24,8 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { public static final String SLASH = "/"; + public static final String DASH = "-"; + /** * 获取参数不为空值 * diff --git a/dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java b/dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java index 68548ed..7f2713f 100644 --- a/dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java +++ b/dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java @@ -19,6 +19,8 @@ public final class RedisConst { public static final Integer WEBSOCKET_ALIVE_SECOND = 60 * 60 * 24; + public static final Integer DEVICE_VIDEO_STATUE_SECOND = 60 * 50; + public static final String DEVICE_ONLINE_PREFIX = "online" + DELIMITER; public static final String WEBSOCKET_PREFIX = "webSocket" + DELIMITER; @@ -62,4 +64,7 @@ public final class RedisConst { public static final String FILE_UPLOADING_PREFIX = "file_uploading" + DELIMITER; public static final String DRONE_CONTROL_PREFiX = "control_source" + DELIMITER; + + + public static final String VIDEO_STATUS = "video_status" + DELIMITER; } diff --git a/dk-modules/sample/pom.xml b/dk-modules/sample/pom.xml index ac6066c..1a4c98a 100644 --- a/dk-modules/sample/pom.xml +++ b/dk-modules/sample/pom.xml @@ -140,6 +140,10 @@ org.dromara api-workflow + + org.dromara + common-rocketmq + org.springframework.boot spring-boot-starter diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceRedisService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceRedisService.java index 601a862..3e78f12 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceRedisService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceRedisService.java @@ -1,6 +1,7 @@ package org.dromara.sample.manage.service; import org.dromara.common.sdk.cloudapi.device.OsdDockDrone; +import org.dromara.common.sdk.cloudapi.device.VideoId; import org.dromara.common.sdk.cloudapi.firmware.OtaProgress; import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.manage.model.dto.DeviceDTO; @@ -126,4 +127,12 @@ public interface IDeviceRedisService { */ List getDevicesOsdInfo(List snList); + + Boolean checkDeviceVideo(String sn); + + void setDeviceVideo(String sn, Object data); + + Optional getDeviceVideo(String sn, Object data); + + Boolean delDeviceVideo(String sn); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceRedisServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceRedisServiceImpl.java index 2892e1d..d3310d7 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceRedisServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceRedisServiceImpl.java @@ -2,7 +2,9 @@ package org.dromara.sample.manage.service.impl; import org.dromara.common.redis.config.RedisConst; import org.dromara.common.redis.utils.RedisOpsUtils; +import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.sdk.cloudapi.device.OsdDockDrone; +import org.dromara.common.sdk.cloudapi.device.VideoId; import org.dromara.common.sdk.cloudapi.firmware.OtaProgress; import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.manage.model.dto.DeviceDTO; @@ -133,4 +135,25 @@ public class DeviceRedisServiceImpl implements IDeviceRedisService { return resultList; } + + @Override + public Boolean checkDeviceVideo(String sn) { + + return RedisOpsUtils.checkExist(RedisConst.VIDEO_STATUS + sn) && RedisOpsUtils.getExpire(RedisConst.VIDEO_STATUS + sn) > 0; + } + + @Override + public void setDeviceVideo(String sn, Object data) { + RedisOpsUtils.setWithExpire(RedisConst.VIDEO_STATUS + sn, data, RedisConst.DEVICE_VIDEO_STATUE_SECOND); + } + + @Override + public Optional getDeviceVideo(String sn, Object data) { + return Optional.ofNullable((VideoId) RedisOpsUtils.get(RedisConst.VIDEO_STATUS + sn)); + } + + @Override + public Boolean delDeviceVideo(String sn) { + return RedisOpsUtils.del(sn); + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java index 87c84bb..359f8fd 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java @@ -2,8 +2,10 @@ package org.dromara.sample.manage.service.impl; import cn.hutool.core.util.ObjectUtil; import org.dromara.common.redis.utils.RedisOpsUtils; +import org.dromara.common.rocketmq.producer.MessageProducerUtil; import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.device.api.AbstractDeviceService; +import org.dromara.common.sdk.cloudapi.livestream.VideoTypeEnum; import org.dromara.common.sdk.cloudapi.psdk.PsdkUiResource; import org.dromara.common.sdk.cloudapi.psdk.PsdkWidgetValues; import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl; @@ -36,6 +38,9 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.stream.Collectors; +import static org.dromara.common.core.utils.StringUtils.DASH; +import static org.dromara.common.core.utils.StringUtils.SLASH; + /** * @author sean * @version 1.7 @@ -172,6 +177,34 @@ public class SDKDeviceService extends AbstractDeviceService { deviceService.pushOsdDataToWeb(device.getWorkspaceId(), BizCodeEnum.DOCK_OSD, from, request.getData()); } + @Override + public void dockLiveStatusUpdate(TopicStateRequest request, MessageHeaders headers){ + Optional dockOnline = deviceRedisService.getDeviceOnline(request.getGateway()); + Optional deviceOnline = deviceRedisService.getDeviceOnline(dockOnline.get().getChildDeviceSn()); + if(deviceOnline.isEmpty()){ + return; + } + if(request.getData().getLiveStatus().size() == 0 ){ + String deviceVideoEnum = DeviceVideoEnum.find(deviceOnline.get().getDeviceName()).getDevice(); + if(!deviceRedisService.checkDeviceVideo(deviceOnline.get().getDeviceSn())){ + VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()); + deviceRedisService.setDeviceVideo(deviceOnline.get().getDeviceSn(),videoId); + MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStopStart",deviceOnline.get().getDeviceSn(),videoId.toString()); + } + + } + List dockLiveStatusDataList = request.getData().getLiveStatus().stream().filter(item -> + item.getVideoId().getDroneSn().equals(dockOnline.get().getChildDeviceSn()) && item.getStatus() == true).collect(Collectors.toList()); + if(dockLiveStatusDataList.size() == 0){ + String deviceVideoEnum = DeviceVideoEnum.find(deviceOnline.get().getDeviceName()).getDevice(); + if(!deviceRedisService.checkDeviceVideo(deviceOnline.get().getDeviceSn())){ + VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()); + deviceRedisService.setDeviceVideo(deviceOnline.get().getDeviceSn(),videoId); + MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStopStart",deviceOnline.get().getDeviceSn(),videoId.toString()); + } + } + } + @Override public void osdDockDrone(TopicOsdRequest request, MessageHeaders headers) { String from = request.getFrom(); @@ -190,12 +223,18 @@ public class SDKDeviceService extends AbstractDeviceService { } DeviceDTO device = deviceOpt.get(); + String deviceVideoEnum = DeviceVideoEnum.find(device.getDeviceName()).getDevice(); + if(!deviceRedisService.checkDeviceVideo(device.getDeviceSn())){ + VideoId videoId = new VideoId(device.getDeviceSn()+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()); + deviceRedisService.setDeviceVideo(device.getDeviceSn(),videoId); + MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",device.getDeviceSn(),videoId.toString()); + } deviceRedisService.setDeviceOnline(device); deviceRedisService.setDeviceOsd(from, request.getData()); - deviceService.pushOsdDataToWeb(device.getWorkspaceId(), BizCodeEnum.DEVICE_OSD, from, request.getData()); } + @Override public void osdRemoteControl(TopicOsdRequest request, MessageHeaders headers) { String from = request.getFrom(); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java b/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java new file mode 100644 index 0000000..0341e00 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java @@ -0,0 +1,46 @@ +package org.dromara.sample.rocketmq; + +import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.dromara.common.sdk.cloudapi.device.VideoId; +import org.dromara.common.sdk.cloudapi.livestream.LensChangeVideoTypeEnum; +import org.dromara.common.sdk.cloudapi.livestream.UrlTypeEnum; +import org.dromara.common.sdk.cloudapi.livestream.VideoQualityEnum; +import org.dromara.sample.manage.model.dto.LiveTypeDTO; +import org.dromara.sample.manage.service.ILiveStreamService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; + +/** + * @auther wuyuan + * @data 2025/5/12 + */ +@RocketMQMessageListener(consumerGroup = "videoStart",topic = "videoStartConsum") +@Component +public class RocketMqConsum implements RocketMQListener { + + @Autowired + private ILiveStreamService liveStreamService; + + @Override + public void onMessage(MessageExt message) { + String tags = message.getTags(); + String videoIds = new String(message.getBody()); + VideoId videoId = new VideoId(videoIds); + LiveTypeDTO liveTypeDTO = new LiveTypeDTO(); + liveTypeDTO.setUrlType(UrlTypeEnum.WHIP); + liveTypeDTO.setVideoType(LensChangeVideoTypeEnum.WIDE); + liveTypeDTO.setVideoQuality(VideoQualityEnum.ULTRA_HD); + liveTypeDTO.setVideoId(videoId); + if(tags.equals("videoStart")){ + liveStreamService.liveStart(liveTypeDTO); + }else if(tags.equals("videoStopStart")){ + liveStreamService.liveStop(videoId); + liveStreamService.liveStart(liveTypeDTO); + } + + + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java index a28e0a5..0182596 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java @@ -127,10 +127,14 @@ public class WaylineJobController { @RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) { try { Optional> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn); - if(runningWaylineJob.isEmpty())return; + if(runningWaylineJob.isEmpty()) { + return; + } String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId(); Optional waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, jobId); - if(waylineJobDTO.isEmpty())return; + if(waylineJobDTO.isEmpty()) { + return; + } URL url = waylineFileService.getObjectUrl(workspaceId, waylineJobDTO.get().getFileId()); rsp.sendRedirect(url.toString()); } catch (IOException | SQLException e) { diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IFlightTaskService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IFlightTaskService.java index 4b4bb20..c4a2bce 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IFlightTaskService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IFlightTaskService.java @@ -74,5 +74,7 @@ public interface IFlightTaskService { */ void updateJobStatus(String workspaceId, String jobId, UpdateJobParam param); + void updateJobDeviceSnStatus(String workspaceId, String deviceSn, UpdateJobParam param); + void retryPrepareJob(ConditionalWaylineJobKey jobKey, WaylineJobDTO waylineJob); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java index e3011e4..f87d1f6 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java @@ -505,6 +505,34 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl } + @Override + public void updateJobDeviceSnStatus(String workspaceId, String deviceSn, UpdateJobParam param) { + Optional> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn); + if(runningWaylineJob.isEmpty()) { + return; + } + String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId(); + Optional waylineJobOpt = waylineJobService.getJobByJobId(workspaceId, jobId); + if (waylineJobOpt.isEmpty()) { + throw new RuntimeException("作业不存在。"); + } + WaylineJobDTO waylineJob = waylineJobOpt.get(); + WaylineJobStatusEnum statusEnum = waylineJobService.getWaylineState(waylineJob.getDockSn()); + if (statusEnum.getEnd() || WaylineJobStatusEnum.PENDING == statusEnum) { + throw new RuntimeException("路线作业状态不匹配,因此无法执行该操作。"); + } + + switch (param.getStatus()) { + case PAUSE: + pauseJob(workspaceId, waylineJob.getDockSn(), jobId, statusEnum); + break; + case RESUME: + resumeJob(workspaceId, waylineJob.getDockSn(), jobId, statusEnum); + break; + } + + } + private void pauseJob(String workspaceId, String dockSn, String jobId, WaylineJobStatusEnum statusEnum) { if (WaylineJobStatusEnum.PAUSED == statusEnum && jobId.equals(waylineRedisService.getPausedWaylineJobId(dockSn))) { waylineRedisService.setPausedWaylineJob(dockSn, jobId); diff --git a/dk-visual/nacos/src/main/resources/application.properties b/dk-visual/nacos/src/main/resources/application.properties index 972740f..44fe8a3 100644 --- a/dk-visual/nacos/src/main/resources/application.properties +++ b/dk-visual/nacos/src/main/resources/application.properties @@ -40,9 +40,9 @@ spring.sql.init.platform=mysql db.num=1 ### Connect URL of DB: -db.url.0=jdbc:mysql://127.0.0.1:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true +db.url.0=jdbc:mysql://114.235.183.147:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true db.user.0=root -db.password.0=123456 +db.password.0=dkcy@yf ### the maximum retry times for push nacos.config.push.maxRetryTime=50 From 7a4c75655bbd3b9a7ca13b81bb445725ac04be8e Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Mon, 12 May 2025 15:28:06 +0800 Subject: [PATCH 11/29] =?UTF-8?q?[bug]=E4=BF=AE=E6=94=B9=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E9=A2=84=E8=AD=A6=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/service/impl/BusinessAlertServiceImpl.java | 4 ++-- .../service/impl/BusinessAlertStatisticsServiceImpl.java | 2 +- 2 files changed, 3 insertions(+), 3 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 6afe490..fcae9d1 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 @@ -579,7 +579,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { infoMap.put("date", startTime + "~" + endTime); //不是空的话查看是对应各局的 - List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId()); + List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), null); Map> aiNameMap = postVoList.stream().collect(Collectors.groupingBy(RemoteAiLabelPostVo::getAiName)); @@ -637,7 +637,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { Map infoMap = new HashMap<>(); //不是空的话查看是对应各局的 - List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId()); + List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), null); Map> aiNameMap = postVoList.stream().collect(Collectors.groupingBy(RemoteAiLabelPostVo::getAiName)); diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java index 6847651..168cdfd 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java @@ -687,7 +687,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //构建查询数据权限 createPermissions(businessAlertBo); - List postVoList = remoteLabelPostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId()); + List postVoList = remoteLabelPostService.selectLabelByList(businessAlertBo.getPostCode(), null); Map> aiNameMap = postVoList.stream().collect(Collectors.groupingBy(RemoteAiLabelPostVo::getAiName)); From 679ff0ed8c86f067a132a99404f86e8469d7d4dd Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Mon, 12 May 2025 16:04:12 +0800 Subject: [PATCH 12/29] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E7=9B=B4=E6=92=AD=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sample/rocketmq/RocketMqConsum.java | 53 ++++++++++++++++++- .../wayline/service/IWaylineJobService.java | 2 + .../service/impl/WaylineJobServiceImpl.java | 8 +++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java b/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java index 0341e00..326f5bf 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java @@ -7,12 +7,26 @@ import org.dromara.common.sdk.cloudapi.device.VideoId; import org.dromara.common.sdk.cloudapi.livestream.LensChangeVideoTypeEnum; import org.dromara.common.sdk.cloudapi.livestream.UrlTypeEnum; import org.dromara.common.sdk.cloudapi.livestream.VideoQualityEnum; +import org.dromara.common.sdk.cloudapi.wayline.FlighttaskProgress; +import org.dromara.common.sdk.common.HttpResultResponse; +import org.dromara.sample.component.mqtt.model.EventsReceiver; +import org.dromara.sample.manage.model.dto.DeviceDTO; +import org.dromara.sample.manage.model.dto.LiveDTO; import org.dromara.sample.manage.model.dto.LiveTypeDTO; +import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.ILiveStreamService; +import org.dromara.sample.manage.service.IPlayTextService; +import org.dromara.sample.wayline.model.dto.WaylineJobDTO; +import org.dromara.sample.wayline.service.IWaylineJobService; +import org.dromara.sample.wayline.service.IWaylineRedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + /** * @auther wuyuan * @data 2025/5/12 @@ -24,6 +38,19 @@ public class RocketMqConsum implements RocketMQListener { @Autowired private ILiveStreamService liveStreamService; + @Autowired + private IPlayTextService playTextService; + + @Autowired + private IWaylineRedisService waylineRedisService; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private IWaylineJobService waylineJobService; + + @Override public void onMessage(MessageExt message) { String tags = message.getTags(); @@ -34,11 +61,33 @@ public class RocketMqConsum implements RocketMQListener { liveTypeDTO.setVideoType(LensChangeVideoTypeEnum.WIDE); liveTypeDTO.setVideoQuality(VideoQualityEnum.ULTRA_HD); liveTypeDTO.setVideoId(videoId); + Optional deviceBySn = deviceService.getDeviceBySn(videoId.getDroneSn()); + Optional> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceBySn.get().getDeviceSn()); + if(runningWaylineJob.isEmpty()) { + return; + } + String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId(); + Optional waylineJobDTO = waylineJobService.getJobByJobInternalId(jobId); if(tags.equals("videoStart")){ - liveStreamService.liveStart(liveTypeDTO); + HttpResultResponse httpResultResponse = liveStreamService.liveStart(liveTypeDTO); + if (httpResultResponse.getCode() == 0 || httpResultResponse.getCode() == 513012 || httpResultResponse.getCode() == 513003){ + Map reqMap = new HashMap<>(); + reqMap.put("deviceSn:",videoId.getDroneSn()); + reqMap.put("jobId",waylineJobDTO.get().getJobId()); + reqMap.put("jobName",waylineJobDTO.get().getJobName()); + playTextService.streamType(reqMap); + } + }else if(tags.equals("videoStopStart")){ - liveStreamService.liveStop(videoId); + HttpResultResponse httpResultResponse = liveStreamService.liveStop(videoId); liveStreamService.liveStart(liveTypeDTO); + if (httpResultResponse.getCode() == 0 || httpResultResponse.getCode() == 513012 || httpResultResponse.getCode() == 513003){ + Map reqMap = new HashMap<>(); + reqMap.put("deviceSn:",videoId.getDroneSn()); + reqMap.put("jobId",waylineJobDTO.get().getJobId()); + reqMap.put("jobName",waylineJobDTO.get().getJobName()); + playTextService.streamType(reqMap); + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java index a0c6492..f38ca24 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java @@ -55,6 +55,8 @@ public interface IWaylineJobService { */ Optional getJobByJobId(String workspaceId, String jobId); + Optional getJobByJobInternalId(String jobId); + /** * Update job data. * @param dto 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 23d1c98..7774ea1 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 @@ -146,6 +146,14 @@ public class WaylineJobServiceImpl implements IWaylineJobService { return Optional.ofNullable(entity2Dto(jobEntity)); } + @Override + public Optional getJobByJobInternalId(String jobId) { + WaylineJobEntity jobEntity = mapper.selectOne( + new LambdaQueryWrapper() + .eq(WaylineJobEntity::getJobId, jobId)); + return Optional.ofNullable(entity2Dto(jobEntity)); + } + @Override public Boolean updateJob(WaylineJobDTO dto) { return mapper.update(this.dto2Entity(dto), From e6c561a6ce3a4bdbd28d074a8ab4683d2a8136a7 Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Mon, 12 May 2025 16:27:56 +0800 Subject: [PATCH 13/29] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E7=9B=B4=E6=92=AD=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/dromara/sample/rocketmq/RocketMqConsum.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java b/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java index 326f5bf..5dc8b2d 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java @@ -79,8 +79,8 @@ public class RocketMqConsum implements RocketMQListener { } }else if(tags.equals("videoStopStart")){ - HttpResultResponse httpResultResponse = liveStreamService.liveStop(videoId); - liveStreamService.liveStart(liveTypeDTO); + liveStreamService.liveStop(videoId); + HttpResultResponse httpResultResponse = liveStreamService.liveStart(liveTypeDTO); if (httpResultResponse.getCode() == 0 || httpResultResponse.getCode() == 513012 || httpResultResponse.getCode() == 513003){ Map reqMap = new HashMap<>(); reqMap.put("deviceSn:",videoId.getDroneSn()); From cc70dd856581a36713844fe75d703d198028e46f Mon Sep 17 00:00:00 2001 From: like <1025687351@qq.com> Date: Mon, 12 May 2025 16:49:27 +0800 Subject: [PATCH 14/29] =?UTF-8?q?=E6=98=9F=E7=BD=97=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E5=92=8C=E8=A7=86=E9=A2=91=E6=B5=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/api/RemoteConfigService.java | 4 +++- .../service/impl/PlayTextServiceImpl.java | 24 ++++++++++--------- .../system/dubbo/RemoteConfigServiceImpl.java | 8 ++++--- .../system/service/ISysConfigService.java | 2 +- .../service/impl/SysConfigServiceImpl.java | 8 ++++--- 5 files changed, 27 insertions(+), 19 deletions(-) diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java index 201967a..014763f 100644 --- a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java @@ -1,5 +1,7 @@ package org.dromara.system.api; +import java.util.List; + /** * 配置服务 * @@ -22,5 +24,5 @@ public interface RemoteConfigService { String selectStreamIp(); - String selectStreamType(String deviceSn); + List selectStreamType(String deviceSn); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java index fdc0179..d63d5c9 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.seata.common.util.StringUtils; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.firmware.*; @@ -56,7 +57,6 @@ import org.dromara.system.api.RemoteConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; import java.util.*; @@ -124,16 +124,18 @@ public class PlayTextServiceImpl implements IPlayTextService { public HttpResultResponse streamType(Map objectMap) { String top = "task/image/disobey/streamType"; //发送mqtt - String s = remoteConfigService.selectStreamType(objectMap.get("deviceSn").toString()); - if (StringUtils.isNotEmpty(s)){ - String[] split = s.split(","); - objectMap.put("deptId",split[0]); - objectMap.put("deptName",split[1]); - objectMap.put("labelEn",split[2]); - objectMap.put("labelCn",split[3]); - StreamTypeDTO param = Convert.convert(StreamTypeDTO.class, objectMap); - gatewayPublish.publish(top,new CommonTopicRequest<>() - .setData(Objects.requireNonNull(param)),1); + List list = remoteConfigService.selectStreamType(objectMap.get("deviceSn").toString()); + if (CollectionUtils.isNotEmpty(list)){ + for (String s : list){ + String[] split = s.split(","); + objectMap.put("deptId",split[0]); + objectMap.put("deptName",split[1]); + objectMap.put("labelEn",split[2]); + objectMap.put("labelCn",split[3]); + StreamTypeDTO param = Convert.convert(StreamTypeDTO.class, objectMap); + gatewayPublish.publish(top,new CommonTopicRequest<>() + .setData(Objects.requireNonNull(param)),1); + } } return HttpResultResponse.error("请求成功"); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java index 85cd78a..93b41a8 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java @@ -8,6 +8,8 @@ import org.dromara.system.domain.SysConfig; import org.dromara.system.service.ISysConfigService; import org.springframework.stereotype.Service; +import java.util.List; + /** * 配置服务 * @@ -37,9 +39,9 @@ public class RemoteConfigServiceImpl implements RemoteConfigService { } @Override - public String selectStreamType(String deviceSn) { - String ip =sysConfigService.selectStreamType(deviceSn); - return ip; + public List selectStreamType(String deviceSn) { + List list =sysConfigService.selectStreamType(deviceSn); + return list; } } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java index 5a7c566..981170b 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysConfigService.java @@ -86,6 +86,6 @@ public interface ISysConfigService { String selectStreamIp(); - String selectStreamType(String deviceSn); + List selectStreamType(String deviceSn); } 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 721962c..e99a3d1 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 @@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 参数配置 服务层实现 @@ -211,10 +212,11 @@ public class SysConfigServiceImpl implements ISysConfigService { } @Override - public String selectStreamType(String deviceSn) { - SysConfig sysConfig = baseMapper.selectOne(new LambdaQueryWrapper() + public List selectStreamType(String deviceSn) { + List sysConfig = baseMapper.selectList(new LambdaQueryWrapper() .eq(SysConfig::getConfigKey, "streamType").eq(SysConfig::getConfigValue, deviceSn)); - return sysConfig.getRemark(); + List collect = sysConfig.stream().map(SysConfig::getRemark).collect(Collectors.toList()); + return collect; } } From c69d7a676838ff7e2bb2179ef63bba6707fdf118 Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Mon, 12 May 2025 17:19:30 +0800 Subject: [PATCH 15/29] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E7=9B=B4=E6=92=AD=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/service/impl/DeviceServiceImpl.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java index aee999d..b833029 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java @@ -551,6 +551,18 @@ public class DeviceServiceImpl implements IDeviceService { } DeviceDTO device = devicesList.get(0); device.setStatus(deviceRedisService.checkDeviceOnline(sn)); + if (StringUtils.hasText(device.getChildDeviceSn())) { + Optional childOpt = this.getDeviceBySn(device.getChildDeviceSn()); + childOpt.ifPresent(child -> { + child.setStatus(deviceRedisService.checkDeviceOnline(child.getDeviceSn())); + child.setWorkspaceName(device.getWorkspaceName()); + device.setChildren(child); + }); + } + if(device.getProId() != null){ + DeviceProEntity deviceProEntitie = deviceProMapper.selectOne(new LambdaQueryWrapper().eq(DeviceProEntity::getId, device.getProId())); + device.setDeviceProEntity(deviceProEntitie); + } return Optional.of(device); } From 56d59d7ff7148765a627267fa0447e0ef3a15e57 Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Tue, 13 May 2025 09:01:51 +0800 Subject: [PATCH 16/29] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sdk/cloudapi/device/DeviceEnum.java | 4 +-- .../controller/BusinessTaskController.java | 1 - .../business/domain/BusinessTaskLabel.java | 34 ++++++++++++++++++ .../business/domain/bo/BusinessTaskBo.java | 10 +++--- .../domain/vo/BusinessTaskLabelVo.java | 35 +++++++++++++++++++ .../business/domain/vo/BusinessTaskVo.java | 5 +-- .../mapper/BusinessTaskLabelMapper.java | 27 ++++++++++++++ .../service/impl/BusinessTaskServiceImpl.java | 11 ++++++ .../mapper/business/BusinessAlertMapper.xml | 12 +++---- .../business/BusinessTaskLabelMapper.xml | 11 ++++++ .../mapper/business/BusinessTaskMapper.xml | 5 +++ .../controller/LiveStreamController.java | 5 +++ .../sample/manage/service/IDeviceService.java | 4 +++ .../service/impl/DeviceRedisServiceImpl.java | 2 +- .../service/impl/DeviceServiceImpl.java | 6 ++++ .../service/impl/LiveStreamServiceImpl.java | 30 ++++++++-------- .../manage/service/impl/SDKDeviceService.java | 24 ++++++------- .../sample/rocketmq/RocketMqConsum.java | 28 ++++++++------- 18 files changed, 197 insertions(+), 57 deletions(-) create mode 100644 dk-modules/business/src/main/java/org/dromara/business/domain/BusinessTaskLabel.java create mode 100644 dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskLabelVo.java create mode 100644 dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessTaskLabelMapper.java create mode 100644 dk-modules/business/src/main/resources/mapper/business/BusinessTaskLabelMapper.xml diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java index 9c5f9b5..4c57050 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java +++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java @@ -143,7 +143,7 @@ public enum DeviceEnum { .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey1)); } - @JsonCreator + /* @JsonCreator public static DeviceEnum findKey(String key) { if(StringUtils.isEmpty(key)){ key = DeviceEnum.M3TD.getDevice(); @@ -152,7 +152,7 @@ public enum DeviceEnum { String finalKey1 = key; return Arrays.stream(values()).filter(device -> device.toString().equals(finalKey)) .findAny().orElseThrow(() -> new CloudSDKException(DeviceEnum.class, finalKey1)); - } + }*/ } diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java index d1967dd..01871c7 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java @@ -46,7 +46,6 @@ public class BusinessTaskController extends BaseController { /** * 查询工单预约列表 */ - @ApiEncrypt(response=true) @SaCheckPermission("business:task:list") @GetMapping("/list") public TableDataInfo list(BusinessTaskBo bo, PageQuery pageQuery) { diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessTaskLabel.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessTaskLabel.java new file mode 100644 index 0000000..05b5fa6 --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessTaskLabel.java @@ -0,0 +1,34 @@ +package org.dromara.business.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * @auther yq + * @data 2025/2/26 + */ +@Data +@TableName("business_task_label") +public class BusinessTaskLabel implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long taskId; + + private String labelCn; + private String labelEn; + + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessTaskBo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessTaskBo.java index d0d8695..8f79a7d 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessTaskBo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessTaskBo.java @@ -1,10 +1,9 @@ package org.dromara.business.domain.bo; -import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; + import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; @@ -13,8 +12,9 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; -import java.awt.*; + import java.util.Date; +import java.util.List; /** * 工单预约业务对象 business_task @@ -87,4 +87,6 @@ public class BusinessTaskBo extends BaseEntity { private Date flightTime; //飞行说明 private String flightExplain; + + private List taskLabelList; } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskLabelVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskLabelVo.java new file mode 100644 index 0000000..2d3621d --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskLabelVo.java @@ -0,0 +1,35 @@ +package org.dromara.business.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @auther yq + * @data 2025/2/26 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusinessTaskLabel.class) +public class BusinessTaskLabelVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + + private Long id; + + private Long taskId; + + private String labelCn; + private String labelEn; + + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java index d74446a..0717344 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java @@ -5,13 +5,14 @@ import com.alibaba.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -91,6 +92,6 @@ public class BusinessTaskVo implements Serializable { private String flightExplain; - + private List taskLabelList; } diff --git a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessTaskLabelMapper.java b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessTaskLabelMapper.java new file mode 100644 index 0000000..ff11436 --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessTaskLabelMapper.java @@ -0,0 +1,27 @@ +package org.dromara.business.mapper; + + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; +import org.dromara.business.domain.bo.BusinessTaskBo; +import org.dromara.business.domain.vo.BusinessTaskLabelVo; +import org.dromara.business.domain.vo.BusinessTaskVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +import java.util.List; + + +/** + * 工单预约Mapper接口 + * + * @author LionLi + * @date 2025-02-26 + */ +public interface BusinessTaskLabelMapper extends BaseMapperPlus { + List selectTaskLabelList(@Param("taskId") Long taskId); + + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java index 6123802..3fc4f9f 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java @@ -2,12 +2,15 @@ package org.dromara.business.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.dromara.business.domain.BusinessTask; +import org.dromara.business.domain.BusinessTaskLabel; import org.dromara.business.domain.bo.BusinessTaskBo; import org.dromara.business.domain.vo.BusinessTaskVo; +import org.dromara.business.mapper.BusinessTaskLabelMapper; import org.dromara.business.mapper.BusinessTaskMapper; import org.dromara.business.service.IBusinessTaskService; import org.dromara.common.core.constant.BusinessConstants; @@ -35,6 +38,7 @@ import java.util.Map; public class BusinessTaskServiceImpl implements IBusinessTaskService { private final BusinessTaskMapper baseMapper; + private final BusinessTaskLabelMapper taskLabelMapper; /** * 查询工单预约 @@ -92,6 +96,9 @@ public class BusinessTaskServiceImpl implements IBusinessTaskService { */ @Override public Boolean insertByBo(BusinessTaskBo bo) { + if(bo.getTaskLabelList().isEmpty()){ + throw new RuntimeException("未获取到识别类型标签"); + } // 获取当前登录用户信息 LoginUser currentUser = LoginHelper.getLoginUser(); bo.setCreateBy(currentUser.getUserId()); @@ -105,6 +112,10 @@ public class BusinessTaskServiceImpl implements IBusinessTaskService { boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); + bo.getTaskLabelList().forEach(labelVo -> { + labelVo.setTaskId(bo.getId()); + }); + taskLabelMapper.insert(bo.getTaskLabelList()); } return flag; } diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml index 3d5c716..fd1fdf4 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml @@ -890,8 +890,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT temp.label_en AS labelEn, temp.label_cn as labelCn, - bl.lat AS lat, - bl.lng AS lng, + ba.lat AS lat, + ba.lng AS lng, COUNT(*) AS value FROM ( @@ -904,15 +904,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ba.label_en, ba.label_cn ) temp INNER JOIN - business_alert bl ON temp.label_en = bl.label_en - AND bl.lat IS NOT NULL + business_alert ba ON temp.label_en = ba.label_en + AND ba.lat IS NOT NULL GROUP BY - temp.label_en,temp.label_cn, bl.lat, bl.lng + temp.label_en,temp.label_cn, ba.lat, ba.lng HAVING - + diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessTaskLabelMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskLabelMapper.xml new file mode 100644 index 0000000..30fd654 --- /dev/null +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskLabelMapper.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml index 66499c7..10f657c 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessTaskMapper.xml @@ -28,6 +28,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + +