Compare commits

...

74 Commits

Author SHA1 Message Date
袁强 b00159d492 Merge pull request 'dev' (#6) from dev into test 11 months ago
李克 b626ee65f3 推流接口 11 months ago
吴远 7fdf677a8a 取消负载控制验证 11 months ago
时子升 8e383badf3 Merge remote-tracking branch 'origin/dev' into dev 11 months ago
时子升 f3b0e734e8 预警信息扩展-提交预警记录+文件 11 months ago
吴远 b011937260 Merge branch 'dev' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone into dev 11 months ago
吴远 b27068b3a2 取消负载控制验证 11 months ago
时子升 343163f500 驭光算法-克隆版 11 months ago
袁强 852db5c9fc 提交:演示测试 11 months ago
吴远 210ccbec1b 取消负载控制验证 11 months ago
吴远 52c60b63b7 Merge remote-tracking branch 'origin/dev' into dev 11 months ago
吴远 5eab033669 取消负载控制验证 11 months ago
袁强 b729f33c01 提交 11 months ago
袁强 2efece6054 提交:演示流程修改 11 months ago
吴远 94b291c967 Merge remote-tracking branch 'origin/dev' into dev 11 months ago
吴远 f9a167cd64 取消负载控制验证 11 months ago
袁强 0f261990f8 提交:无人机自动飞行逻辑修改 11 months ago
吴远 00b94b21a7 Merge remote-tracking branch 'origin/dev' into dev 11 months ago
吴远 edf2421452 取消负载控制验证 11 months ago
李克 7e3fbe05ba 推流接口 11 months ago
袁强 0be8b2fb90 提交 11 months ago
吴远 f1cdcf7e55 Merge remote-tracking branch 'origin/dev' into dev 11 months ago
吴远 0f425dd451 取消负载控制验证 11 months ago
袁强 1cd95b2073 提交 11 months ago
李克 d223adbef5 推流接口 11 months ago
袁强 53856e06d8 提交 11 months ago
杨威 a30fa0eace [feat]修改实时流预警增加分页查询&修改推送逻辑增加页面选择部门提交&增加查询降序排序② 11 months ago
杨威 8659c2cfae [feat]修改实时流预警增加分页查询&修改推送逻辑增加页面选择部门提交① 11 months ago
杨威 3490a6efdf [feat]修改实时流预警增加分页查询&修改推送逻辑增加页面选择部门提交 11 months ago
袁强 3d1239ea10 Merge branch 'dev' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone into dev 11 months ago
袁强 7748ed2f74 [bug]实时预警接口-新增部门 11 months ago
时子升 3842d00629 不同项目-特定数据库查询加入动态配置,处理南通工地/丰县燃气项目。 11 months ago
杨威 eadc252337 Merge remote-tracking branch 'origin/dev' into dev 11 months ago
杨威 90fdcfc75f [feat]去掉ai实时流预警权限 11 months ago
吴远 344d15a734 Merge remote-tracking branch 'origin/dev' into dev 11 months ago
吴远 96233bb44e 取消负载控制验证 11 months ago
杨威 188fa5595d [feat]修改ai实时流预警推送 11 months ago
袁强 f1856400cc Merge branch 'dev' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone into dev 11 months ago
袁强 3e713dc9ce [bug]实时预警接口 11 months ago
杨威 5a88dc5b6d Merge remote-tracking branch 'origin/dev' into dev 11 months ago
杨威 bbf2dc57d0 [feat]修改预警统计查询 11 months ago
吴远 731faee877 取消负载控制验证 11 months ago
李克 fe95340e68 推流接口 11 months ago
李克 5d7223be75 推流接口 11 months ago
李克 bfa2ea542a Merge remote-tracking branch 'origin/dev' into dev 11 months ago
李克 175de6bb82 推流接口 11 months ago
吴远 28b616b5bf Merge remote-tracking branch 'origin/dev' into dev 11 months ago
吴远 38ae466a5a 改动 11 months ago
杨威 1685c8892f [feat]增加ai实时流预警列表查询 11 months ago
袁强 3615d66873 ai预警平台推送用户 11 months ago
吴远 fcdbbd0683 Merge branch 'dev' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone into dev 11 months ago
袁强 90d3ef685e Merge branch 'dev' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone into dev 11 months ago
袁强 045159043f [bug]实时预警接口 11 months ago
杨威 f17a1432c1 [feat]修改生成案件号 11 months ago
吴远 3a6821b572 改动 11 months ago
吴远 08343e9e51 Merge branch 'dev' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone into dev 11 months ago
吴远 64df39fdd2 改动 11 months ago
吴远 8e8f5cbffb Merge branch 'wuyuan' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone into dev 11 months ago
吴远 1f43d62910 改动 11 months ago
吴远 ec7d7da18f 改动 12 months ago
吴远 1cf4aa57f3 1 12 months ago
吴远 579001a1a8 Merge branch 'wuyuan' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone 12 months ago
吴远 d51c1bfb40 Merge branch 'dev' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone 12 months ago
袁强 60dd87a197 Merge pull request 'test' (#3) from test into master 12 months ago
吴远 97895d4aef Merge branch 'dev' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone 12 months ago
吴远 38758ec5b7 Merge branch 'master' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone 12 months ago
吴远 6095947d8f Merge branch 'master' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone 12 months ago
吴远 fc55fa0267 改动 12 months ago
吴远 0f8f8603ba 改动 12 months ago
杨威 16b741290d [feat] 12 months ago
杨威 648fad0e8a [feat] 12 months ago
杨威 7321f972b0 [feat] 12 months ago
袁强 6e16e0a2bb 提交:图片比对修改 12 months ago
杨威 a17dc254d5 [feat] 12 months ago
  1. 3
      dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java
  2. 85
      dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertConstructInfo.java
  3. 4
      dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertVo.java
  4. 3
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java
  5. 14
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java
  6. 3
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/Dock2ThingVersionEnum.java
  7. 2
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/Dock3ThingVersionEnum.java
  8. 2
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/DockThingVersionEnum.java
  9. 2
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/DroneThingVersionEnum.java
  10. 26
      dk-modules/business/src/main/java/org/dromara/business/config/ProjectTablePrefixConfig.java
  11. 106
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertConstructInfoController.java
  12. 78
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java
  13. 7
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java
  14. 5
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  15. 86
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java
  16. 87
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertConstructInfoBo.java
  17. 104
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertConstructInfoVo.java
  18. 4
      dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java
  19. 15
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertConstructInfoMapper.java
  20. 38
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  21. 69
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertConstructInfoService.java
  22. 10
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  23. 3
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java
  24. 138
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertConstructInfoServiceImpl.java
  25. 178
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  26. 61
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  27. 183
      dk-modules/business/src/main/java/org/dromara/business/utils/MinioUtil.java
  28. 7
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertConstructInfoMapper.xml
  29. 142
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  30. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java
  31. 59
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java
  32. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/PayloadCommandsHandler.java
  33. 1
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java
  34. 38
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java
  35. 59
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java
  36. 77
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/SampleEngineRecordController.java
  37. 9
      dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/ISampleEngineRecordMapper.java
  38. 15
      dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/ITaskJobMapper.java
  39. 18
      dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/SampleWarningRecordMapper.java
  40. 212
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/BusinessAlertVo.java
  41. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java
  42. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceQrtzDTO.java
  43. 30
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EngineType.java
  44. 30
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EngineTypeResponse.java
  45. 9
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java
  46. 33
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/TaskJobEntity.java
  47. 18
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java
  48. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceQueryParam.java
  49. 4
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java
  50. 9
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/ISampleEngineRecordService.java
  51. 8
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/ISampleWarningRecordService.java
  52. 15
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/ITaskJobService.java
  53. 106
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java
  54. 46
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java
  55. 4
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java
  56. 14
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java
  57. 250
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SampleEngineRecordServiceImpl.java
  58. 15
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SampleWarningRecordServiceImpl.java
  59. 44
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/TaskJobServiceImpl.java
  60. 14
      dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java
  61. 4
      dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java
  62. 3
      dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java
  63. 8
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java
  64. 2
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java
  65. 43
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
  66. 19
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
  67. 183
      dk-modules/sample/src/main/java/org/dromara/sample/utils/MinioUtil.java
  68. 29
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java
  69. 35
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java
  70. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java
  71. 3
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java
  72. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java
  73. 3
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java
  74. 9
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java
  75. 4
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java
  76. 123
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java
  77. 20
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java
  78. 15
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java
  79. 53
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
  80. 37
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java
  81. 6
      dk-modules/sample/src/main/resources/mapper/DeviceQrtzMapper.xml
  82. 54
      dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml
  83. 25
      dk-modules/system/src/main/java/org/dromara/system/config/ProjectTablePrefixConfig.java
  84. 17
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java
  85. 3
      dk-modules/system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java
  86. 8
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java
  87. 5
      dk-modules/system/src/main/resources/mapper/system/SysDeptMapper.xml

3
dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java

@ -16,8 +16,9 @@ public interface RemoteBusinessAlertService {
/** /**
* 生成预警待验证状态 * 生成预警待验证状态
* activeProfile :用于处理南通/丰县数据类型 default是原始处理流如果非default就会将businessType处理为2
*/ */
Boolean saveBusinessAlert(List<RemoteBusinessAlertVo> alertVoList); Boolean saveBusinessAlert(List<RemoteBusinessAlertVo> alertVoList,String activeProfile);
/** /**
* 更新此条预警审批时候的状态 * 更新此条预警审批时候的状态
* @param businessId 业务id(预警工单) * @param businessId 业务id(预警工单)

85
dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertConstructInfo.java

@ -0,0 +1,85 @@
package org.dromara.business.api.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 预警任务-施工信息对象 business_alert_construct_info
*
* @author szs
* @date 2025-05-21
*/
@Data
public class RemoteBusinessAlertConstructInfo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
private Long id;
private String tenantId;
/**
* 1:图片比对预警 2AI实时预警
*/
private Long businessType;
/**
* job任务id
*/
private String jobId;
/**
* 预警名称
*/
private String jobName;
/**
* 预警任务id
*/
private Long businessAlertId;
/**
* 施工名称
*/
private String constructName;
/**
* 施工单位
*/
private String constructDept;
/**
* 施工单位负责人
*/
private String constructLeader;
/**
* 联系电话
*/
private String phonenumber;
/**
* 施工地址
*/
private String address;
/**
* 所属管道
*/
private String pipeline;
/**
* 备注
*/
private String remark;
}

4
dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertVo.java

@ -189,5 +189,9 @@ public class RemoteBusinessAlertVo implements Serializable {
*/ */
private Integer handleSource; private Integer handleSource;
//预警扩展施工信息
private RemoteBusinessAlertConstructInfo remoteAlertConstructInfo;
// private Map<String,Object> infoMap;
} }

3
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java

@ -70,9 +70,10 @@ public interface IHttpMediaService {
value = "{\"code\": 0, \"message\":\"success\", \"data\": \"media/DJI_20220831151616_0004_W_Waypoint4.JPG\"}" value = "{\"code\": 0, \"message\":\"success\", \"data\": \"media/DJI_20220831151616_0004_W_Waypoint4.JPG\"}"
)}))) )})))
@PostMapping(PREFIX + "/workspaces/{workspace_id}/upload-callback") @PostMapping(PREFIX + "/workspaces/{workspace_id}/{pro_id}/upload-callback")
HttpResultResponse<String> mediaUploadCallback( HttpResultResponse<String> mediaUploadCallback(
@PathVariable(name = "workspace_id") String workspaceId, @PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "pro_id") Integer proId,
@Valid @RequestBody MediaUploadCallbackRequest request, @Valid @RequestBody MediaUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);

14
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java

@ -45,9 +45,21 @@ public interface IHttpWaylineService {
@Parameter(name = "workspace_id", description = "workspace_id", schema = @Schema(format = "uuid")) @Parameter(name = "workspace_id", description = "workspace_id", schema = @Schema(format = "uuid"))
}) })
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines") @GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines")
HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList( HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylines(
@Valid @ParameterObject GetWaylineListRequest request, @Valid @ParameterObject GetWaylineListRequest request,
@PathVariable(name = "workspace_id") String workspaceId, @PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "proIds",required = false) List<Integer> proIds,
HttpServletRequest req, HttpServletResponse rsp);
@Operation(summary = "获取航线路线列表", description = "根据查询条件査询路线文件的基本数据。飞行员中的查询条件字段是固定的。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace_id", schema = @Schema(format = "uuid"))
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylinesList")
HttpResultResponse<List<GetWaylineListResponse>> getWaylineList(
@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "pro_id",required = false) Integer proId,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
/** /**

3
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/Dock2ThingVersionEnum.java

@ -12,6 +12,7 @@ import java.util.Arrays;
*/ */
public enum Dock2ThingVersionEnum implements IThingVersion { public enum Dock2ThingVersionEnum implements IThingVersion {
V1_0_0("1.0.0", CloudSDKVersionEnum.V0_0_1), V1_0_0("1.0.0", CloudSDKVersionEnum.V0_0_1),
V1_1_0("1.1.0", CloudSDKVersionEnum.V1_0_0), V1_1_0("1.1.0", CloudSDKVersionEnum.V1_0_0),
@ -24,6 +25,8 @@ public enum Dock2ThingVersionEnum implements IThingVersion {
V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3), V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3),
V1_2_4("1.2.4", CloudSDKVersionEnum.V1_0_3),
V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3), V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3),

2
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/Dock3ThingVersionEnum.java

@ -24,6 +24,8 @@ public enum Dock3ThingVersionEnum implements IThingVersion {
V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3), V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3),
V1_2_4("1.2.4", CloudSDKVersionEnum.V1_0_3),
V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3), V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3),
V1_3_1("1.3.1", CloudSDKVersionEnum.V1_0_3), V1_3_1("1.3.1", CloudSDKVersionEnum.V1_0_3),

2
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/DockThingVersionEnum.java

@ -24,6 +24,8 @@ public enum DockThingVersionEnum implements IThingVersion {
V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3), V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3),
V1_2_4("1.2.4", CloudSDKVersionEnum.V1_0_3),
V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3), V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3),
V1_3_1("1.3.1", CloudSDKVersionEnum.V1_0_3), V1_3_1("1.3.1", CloudSDKVersionEnum.V1_0_3),

2
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/DroneThingVersionEnum.java

@ -27,6 +27,8 @@ public enum DroneThingVersionEnum implements IThingVersion {
V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3), V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3),
V1_2_4("1.2.4", CloudSDKVersionEnum.V1_0_3),
V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3), V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3),
V1_3_1("1.3.1", CloudSDKVersionEnum.V1_3_1), V1_3_1("1.3.1", CloudSDKVersionEnum.V1_3_1),

26
dk-modules/business/src/main/java/org/dromara/business/config/ProjectTablePrefixConfig.java

@ -0,0 +1,26 @@
package org.dromara.business.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* szs
* 系统-表名配置
* 多个profile环境中会查询不同表需要处理拼接表名 ,比如 dk_business变成 w_dk_business
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "projecttableprefix")
public class ProjectTablePrefixConfig {
@Value("${projectTablePrefix.tableBusiness:dk_business}")
private String tableBusiness;
@Value("${projectTablePrefix.tableCloud:dk_cloud}")
private String tableCloud;
@Value("${projectTablePrefix.tableWorkflow:dk_workflow}")
private String tableWorkflow;
}

106
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertConstructInfoController.java

@ -0,0 +1,106 @@
package org.dromara.business.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.business.domain.vo.BusinessAlertConstructInfoVo;
import org.dromara.business.domain.bo.BusinessAlertConstructInfoBo;
import org.dromara.business.service.IBusinessAlertConstructInfoService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 预警任务-施工信息
* 前端访问路由地址为:/business/alertConstructInfo
*
* @author szs
* @date 2025-05-21
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/alertConstructInfo")
public class BusinessAlertConstructInfoController extends BaseController {
private final IBusinessAlertConstructInfoService businessAlertConstructInfoService;
/**
* 查询预警任务-施工信息列表
*/
@SaCheckPermission("business:businessAlertConstructInfo:list")
@GetMapping("/list")
public TableDataInfo<BusinessAlertConstructInfoVo> list(BusinessAlertConstructInfoBo bo, PageQuery pageQuery) {
return businessAlertConstructInfoService.queryPageList(bo, pageQuery);
}
/**
* 导出预警任务-施工信息列表
*/
@SaCheckPermission("business:businessAlertConstructInfo:export")
@Log(title = "预警任务-施工信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BusinessAlertConstructInfoBo bo, HttpServletResponse response) {
List<BusinessAlertConstructInfoVo> list = businessAlertConstructInfoService.queryList(bo);
ExcelUtil.exportExcel(list, "预警任务-施工信息", BusinessAlertConstructInfoVo.class, response);
}
/**
* 获取预警任务-施工信息详细信息
*
* @param id 主键
*/
@SaCheckPermission("business:businessAlertConstructInfo:query")
@GetMapping("/{id}")
public R<BusinessAlertConstructInfoVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(businessAlertConstructInfoService.queryById(id));
}
/**
* 新增预警任务-施工信息
*/
@SaCheckPermission("business:businessAlertConstructInfo:add")
@Log(title = "预警任务-施工信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusinessAlertConstructInfoBo bo) {
return toAjax(businessAlertConstructInfoService.insertByBo(bo));
}
/**
* 修改预警任务-施工信息
*/
@SaCheckPermission("business:businessAlertConstructInfo:edit")
@Log(title = "预警任务-施工信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusinessAlertConstructInfoBo bo) {
return toAjax(businessAlertConstructInfoService.updateByBo(bo));
}
/**
* 删除预警任务-施工信息
*
* @param ids 主键串
*/
@SaCheckPermission("business:businessAlertConstructInfo:remove")
@Log(title = "预警任务-施工信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(businessAlertConstructInfoService.deleteWithValidByIds(List.of(ids), true));
}
}

78
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java

@ -1,6 +1,8 @@
package org.dromara.business.controller; package org.dromara.business.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.client.utils.TenantUtil; import com.alibaba.nacos.client.utils.TenantUtil;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -14,6 +16,7 @@ import org.dromara.business.service.IBusinessAlertService;
import org.dromara.business.utils.MinioUntil; import org.dromara.business.utils.MinioUntil;
import org.dromara.business.utils.constants.MinIOConstants; import org.dromara.business.utils.constants.MinIOConstants;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
@ -105,30 +108,48 @@ public class BusinessAlertController extends BaseController {
*/ */
@Operation(summary ="ai实时流预警保存-用于演示",description = "ai实时流预警保存-用于演示") @Operation(summary ="ai实时流预警保存-用于演示",description = "ai实时流预警保存-用于演示")
@PostMapping("/saveAlert") @PostMapping("/saveAlert")
public R saveAlert(@RequestBody BusinessAlertVo vo) { public R<BusinessAlert> saveAlert(@RequestBody BusinessAlert vo) {
vo.setBusinessType(2); vo.setBusinessType(2);
BusinessAlert businessAlert = businessAlertService.addBusinessAlert(vo); vo.setHandleType("verify");
BusinessAlert businessAlert = businessAlertService.addAlert(vo);
return R.ok(businessAlert);
}
/**
* ai实时流预警保存
*/
@Operation(summary ="预警推送-实时预警模块专用",description = "预警推送-实时预警模块专用")
@GetMapping("/pushAlert")
public R pushAlert(Long alertId,@RequestParam(required = false) String deptId,@RequestParam(required = false)String deptName) {
BusinessAlert businessAlert= businessAlertService.getBusinessAlert(alertId);
if(!ObjectUtil.hasEmpty(deptId,deptName)){
businessAlert.setDeptName(deptName);
businessAlert.setDeptId(deptId);
}
businessAlert.setCreateTime(new Date());
//businessAlert.setJobName(deptName + businessAlert.getLabelCn() + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",businessAlert.getCreateTime()));
businessAlertService.updateBusinessAlert(businessAlert);
RemoteStartProcess startProcess = new RemoteStartProcess(); RemoteStartProcess startProcess = new RemoteStartProcess();
startProcess.setBusinessId(String.valueOf(businessAlert.getId())); startProcess.setBusinessId(String.valueOf(businessAlert.getId()));
startProcess.setFlowCode("alertChz"); startProcess.setFlowCode("alertChz");
remoteWorkflowService.startWorkFlowBatch(List.of(startProcess)); remoteWorkflowService.startWorkFlowBatch(List.of(startProcess));
RemoteNoticeBo remoteNoticeBo = new RemoteNoticeBo(); RemoteNoticeBo remoteNoticeBo = new RemoteNoticeBo();
remoteNoticeBo.setNoticeTitle(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); remoteNoticeBo.setNoticeTitle(businessAlert.getDeptName()+"产生预警,预警类型["+businessAlert.getLabelCn()+"],请立即查看");
remoteNoticeBo.setNoticeType("3"); remoteNoticeBo.setNoticeType("3");
remoteNoticeBo.setNoticeContent(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); remoteNoticeBo.setNoticeContent(businessAlert.getDeptName()+"产生预警,预警类型["+businessAlert.getLabelCn()+"],请立即查看");
remoteNoticeBo.setStatus("0"); remoteNoticeBo.setStatus("0");
remoteNoticeBo.setIsRead(0); remoteNoticeBo.setIsRead(0);
remoteNoticeBo.setCreateBy(1L); remoteNoticeBo.setCreateBy(1L);
remoteNoticeBo.setCreateDept(1L); remoteNoticeBo.setCreateDept(1L);
remoteNoticeBo.setCreateTime(businessAlert.getCreateTime()); remoteNoticeBo.setCreateTime(businessAlert.getCreateTime());
if (businessAlert.getBusinessType() == 2){ if (businessAlert.getBusinessType() == 2){
businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString()); businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlert.getImages(), 3600).toString());
} }
remoteNoticeBo.setDeviceSn(vo.getDeviceSn()); remoteNoticeBo.setDeviceSn(businessAlert.getDeviceSn());
businessAlert.setDeviceSn(vo.getDeviceSn()); businessAlert.setDeviceSn(businessAlert.getDeviceSn());
remoteNoticeBo.setParam(JSON.toJSONString(businessAlert)); remoteNoticeBo.setParam(JSON.toJSONString(businessAlert));
remoteNoticeService.saveNotice(remoteNoticeBo); remoteNoticeService.saveNotice(remoteNoticeBo);
remoteSubmailConfigService.remoteCmdSend("smsMultixsend", JSON.toJSONString(vo)); remoteSubmailConfigService.remoteCmdSend("smsMultixsend", JSON.toJSONString(businessAlert));
return R.ok(); return R.ok();
} }
@ -154,4 +175,45 @@ public class BusinessAlertController extends BaseController {
} }
/**
* 查询实时流预警
*/
// @SaCheckPermission("business:alertAi:list")
@Operation(summary ="查询实时流预警",description = "查询实时流预警")
@GetMapping("/ai/verify/alert")
public R<TableDataInfo<BusinessAlertVo>> listAiVerifyAlert(BusinessAlertVo vo,PageQuery pageQuery) {
return R.ok(businessAlertService.listAiVerifyAlert(vo,pageQuery));
}
@Operation(summary ="ai实时流预警保存-用于演示",description = "ai实时流预警保存-用于演示")
@PostMapping("/saveAlert")
public R selectAlert(@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(businessAlert.getCreateTime());
if (businessAlert.getBusinessType() == 2){
businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString());
}
remoteNoticeBo.setDeviceSn(vo.getDeviceSn());
businessAlert.setDeviceSn(vo.getDeviceSn());
remoteNoticeBo.setParam(JSON.toJSONString(businessAlert));
remoteNoticeService.saveNotice(remoteNoticeBo);
remoteSubmailConfigService.remoteCmdSend("smsMultixsend", JSON.toJSONString(vo));
return R.ok();
}
} }

7
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java

@ -84,6 +84,12 @@ public class BusinessAlertStatisticsController extends BaseController {
return R.ok(statisticsService.countPostAlert(businessAlertBo)); return R.ok(statisticsService.countPostAlert(businessAlertBo));
} }
@Operation(summary="各大类全部预警数", description="各大类全部预警数")
@GetMapping(value = "/post/count/all")
public R<List<StatObj>> countPostAll(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countPostAllAlert(businessAlertBo));
}
/** /**
* 出警效率 * 出警效率
@ -198,6 +204,7 @@ public class BusinessAlertStatisticsController extends BaseController {
@Operation(summary="预警对比统计(预警状态)", description="预警对比统计(预警状态)") @Operation(summary="预警对比统计(预警状态)", description="预警对比统计(预警状态)")
@GetMapping(value = "/compare/status/count") @GetMapping(value = "/compare/status/count")
public R<List<Map<String, Object>>> countAlertStatusCompare(BusinessAlertBo businessAlertBo) { public R<List<Map<String, Object>>> countAlertStatusCompare(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countAlertStatusCompare(businessAlertBo)); return R.ok(statisticsService.countAlertStatusCompare(businessAlertBo));
} }

5
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import org.dromara.business.domain.vo.BusinessAlertConstructInfoVo;
import org.dromara.common.translation.annotation.Translation; import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant; import org.dromara.common.translation.constant.TransConstant;
@ -252,4 +253,8 @@ public class BusinessAlert {
@TableField(exist = false) @TableField(exist = false)
private String deviceSn; private String deviceSn;
//预警扩展施工信息
@TableField(exist = false)
private BusinessAlertConstructInfoVo alertConstructInfoVo;
} }

86
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlertConstructInfo.java

@ -0,0 +1,86 @@
package org.dromara.business.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 预警任务-施工信息对象 business_alert_construct_info
*
* @author szs
* @date 2025-05-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("business_alert_construct_info")
public class BusinessAlertConstructInfo extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 1:图片比对预警 2AI实时预警
*/
private Long businessType;
/**
* job任务id
*/
private String jobId;
/**
* 预警名称
*/
private String jobName;
/**
* 预警任务id
*/
private Long businessAlertId;
/**
* 施工名称
*/
private String constructName;
/**
* 施工单位
*/
private String constructDept;
/**
* 施工单位负责人
*/
private String constructLeader;
/**
* 联系电话
*/
private String phonenumber;
/**
* 施工地址
*/
private String address;
/**
* 所属管道
*/
private String pipeline;
/**
* 备注
*/
private String remark;
}

87
dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertConstructInfoBo.java

@ -0,0 +1,87 @@
package org.dromara.business.domain.bo;
import org.dromara.business.domain.BusinessAlertConstructInfo;
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.*;
/**
* 预警任务-施工信息业务对象 business_alert_construct_info
*
* @author szs
* @date 2025-05-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = BusinessAlertConstructInfo.class, reverseConvertGenerate = false)
public class BusinessAlertConstructInfoBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 1:图片比对预警 2AI实时预警
*/
private Long businessType;
/**
* job任务id
*/
private String jobId;
/**
* 预警名称
*/
private String jobName;
/**
* 预警任务id
*/
@NotNull(message = "预警任务id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long businessAlertId;
/**
* 施工名称
*/
@NotBlank(message = "施工名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String constructName;
/**
* 施工单位
*/
private String constructDept;
/**
* 施工单位负责人
*/
private String constructLeader;
/**
* 联系电话
*/
private String phonenumber;
/**
* 施工地址
*/
private String address;
/**
* 所属管道
*/
private String pipeline;
/**
* 备注
*/
private String remark;
}

104
dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertConstructInfoVo.java

@ -0,0 +1,104 @@
package org.dromara.business.domain.vo;
import org.dromara.business.domain.BusinessAlertConstructInfo;
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;
/**
* 预警任务-施工信息视图对象 business_alert_construct_info
*
* @author szs
* @date 2025-05-21
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusinessAlertConstructInfo.class)
public class BusinessAlertConstructInfoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 1:图片比对预警 2AI实时预警
*/
@ExcelProperty(value = "1:图片比对预警 2:AI实时预警")
private Long businessType;
/**
* job任务id
*/
@ExcelProperty(value = "job任务id")
private String jobId;
/**
* 预警名称
*/
@ExcelProperty(value = "预警名称")
private String jobName;
/**
* 预警任务id
*/
@ExcelProperty(value = "预警任务id")
private Long businessAlertId;
/**
* 施工名称
*/
@ExcelProperty(value = "施工名称")
private String constructName;
/**
* 施工单位
*/
@ExcelProperty(value = "施工单位")
private String constructDept;
/**
* 施工单位负责人
*/
@ExcelProperty(value = "施工单位负责人")
private String constructLeader;
/**
* 联系电话
*/
@ExcelProperty(value = "联系电话")
private String phonenumber;
/**
* 施工地址
*/
@ExcelProperty(value = "施工地址")
private String address;
/**
* 所属管道
*/
@ExcelProperty(value = "所属管道")
private String pipeline;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

4
dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java

@ -29,8 +29,8 @@ public class RemoteBusinessAlertServiceImpl implements RemoteBusinessAlertServic
@Override @Override
public Boolean saveBusinessAlert(List<RemoteBusinessAlertVo> alertVoList) { public Boolean saveBusinessAlert(List<RemoteBusinessAlertVo> alertVoList, String activeProfile) {
return businessAlertService.batchAddBusinessAlert(alertVoList); return businessAlertService.batchAddBusinessAlert(alertVoList, activeProfile);
} }
/** /**

15
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertConstructInfoMapper.java

@ -0,0 +1,15 @@
package org.dromara.business.mapper;
import org.dromara.business.domain.BusinessAlertConstructInfo;
import org.dromara.business.domain.vo.BusinessAlertConstructInfoVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 预警任务-施工信息Mapper接口
*
* @author szs
* @date 2025-05-21
*/
public interface BusinessAlertConstructInfoMapper extends BaseMapperPlus<BusinessAlertConstructInfo, BusinessAlertConstructInfoVo> {
}

38
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java

@ -3,6 +3,7 @@ package org.dromara.business.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.dromara.business.config.ProjectTablePrefixConfig;
import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.domain.vo.BusinessAlertVo; import org.dromara.business.domain.vo.BusinessAlertVo;
@ -24,12 +25,12 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
@DataPermission( @DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id") @DataColumn(key = "deptName", value = "t.dept_id")
) )
Page<BusinessAlert> pageBusinessAlert(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageBusinessAlert(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableBusiness") String tableBusiness
@DataPermission( @DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id") @DataColumn(key = "deptName", value = "t.dept_id")
) )
Page<BusinessAlert> pageBusinessAlertHandle(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageBusinessAlertHandle(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableBusiness") String tableBusiness, @Param("tableWorkflow") String tableWorkflow
/** /**
* 处理中 * 处理中
@ -40,34 +41,34 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
@DataPermission( @DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id") @DataColumn(key = "deptName", value = "t.dept_id")
) )
Page<BusinessAlert> pageAlertTodo(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageAlertTodo(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableBusiness") String tableBusiness, @Param("tableWorkflow") String tableWorkflow
@DataPermission( @DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id") @DataColumn(key = "deptName", value = "t.dept_id")
) )
Page<BusinessAlert> pageBusinessAlertCancel(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageBusinessAlertCancel(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableBusiness") String tableBusiness, @Param("tableWorkflow") String tableWorkflow
@DataPermission( @DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id") @DataColumn(key = "deptName", value = "t.dept_id")
) )
Page<BusinessAlert> pageBusinessAlertFinish(@Param("page") Page<BusinessAlert> page, @Param("ew") QueryWrapper<BusinessAlert> wrapper); Page<BusinessAlert> pageBusinessAlertFinish(@Param("page") Page<BusinessAlert> page, @Param("ew") QueryWrapper<BusinessAlert> wrapper, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableBusiness") String tableBusiness
@DataPermission( @DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id") @DataColumn(key = "deptName", value = "t.dept_id")
) )
List<BusinessAlert> listTodoAlert(@Param("ew") QueryWrapper<BusinessAlert> ew); List<BusinessAlert> listTodoAlert(@Param("ew") QueryWrapper<BusinessAlert> ew, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableBusiness") String tableBusiness, @Param("tableWorkflow") String tableWorkflow
List<Map<String, Object>> listMonthAlert(@Param("param") BusinessAlertBo businessAlertBo); List<Map<String, Object>> listMonthAlert(@Param("param") BusinessAlertBo businessAlertBo);
List<Map<String, Object>> listDepartAlert(@Param("param") BusinessAlertBo businessAlertBo); List<Map<String, Object>> listDepartAlert(@Param("param") BusinessAlertBo businessAlertBo, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableCloud") String tableCloud
List<Map<String, Object>> listMonthAlertStatus(@Param("param")BusinessAlertBo businessAlertBo); List<Map<String, Object>> listMonthAlertStatus(@Param("param")BusinessAlertBo businessAlertBo);
List<Map<String, Object>> listDepartAlertStatus(@Param("param") BusinessAlertBo businessAlertBo); List<Map<String, Object>> listDepartAlertStatus(@Param("param") BusinessAlertBo businessAlertBo, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableCloud") String tableCloud
List<Map<String, Object>> countAlertCompare(@Param("param")BusinessAlertBo businessAlertBo); List<Map<String, Object>> countAlertCompare(@Param("param")BusinessAlertBo businessAlertBo);
@ -89,21 +90,22 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
List<Map<String, Object>> handlerRate(@Param("param") BusinessAlertBo businessAlertBo,@Param("months") List<String> months); List<Map<String, Object>> handlerRate(@Param("param") BusinessAlertBo businessAlertBo,@Param("months") List<String> months);
Map<String, Object> countPastYearAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); Map<String, Object> countPastYearAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime);
Map<String, Object> countTotalAlert(@Param("param") BusinessAlertBo businessAlertBo);
List<Map<String, Object>> countAiLabel(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); List<Map<String, Object>> countAiLabel(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableCloud") String tableCloud
List<Map<String,Object>> countStreetAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList); List<Map<String,Object>> countStreetAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableCloud") String tableCloud
List<BusinessAlert> listAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); List<BusinessAlert> listAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableBusiness") String tableBusiness
List<BusinessAlertVo> heatList(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); List<BusinessAlertVo> heatList(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableBusiness") String tableBusiness
List<Map<String,Object>> countStreetRateAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList); List<Map<String,Object>> countStreetRateAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableCloud") String tableCloud
Map<String, Object> streetRateTopAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList); Map<String, Object> streetRateTopAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableCloud") String tableCloud
Map<String, Object> streetTopAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList); Map<String, Object> streetTopAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableCloud") String tableCloud
List<Map<String, Object>> countLabelRateAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); List<Map<String, Object>> countLabelRateAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);//@Param("tableCloud") String tableCloud
void batchUpdateDept(@Param("list") List<BusinessAlertVo> alertVoList); void batchUpdateDept(@Param("list") List<BusinessAlertVo> alertVoList);
@ -112,9 +114,9 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
List<BusinessAlert> listHandleHistory(@Param("lng") String lng, @Param("lat") String lat,@Param("createTime") String createTime); List<BusinessAlert> listHandleHistory(@Param("lng") String lng, @Param("lat") String lat,@Param("createTime") String createTime);
List<Map<String, Object>> listOneDepartAlert(@Param("param") BusinessAlertBo businessAlertBo); List<Map<String, Object>> listOneDepartAlert(@Param("param") BusinessAlertBo businessAlertBo, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix); //@Param("tableCloud") String tableCloud
List<Map<String, Object>> listOneDepartAlertStatus(@Param("param") BusinessAlertBo businessAlertBo); List<Map<String, Object>> listOneDepartAlertStatus(@Param("param") BusinessAlertBo businessAlertBo, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix); //@Param("tableCloud") String tableCloud
Integer selectCurrentAlertCount(@Param("currentDate") String currentDate); Integer selectCurrentAlertCount(@Param("currentDate") String currentDate);

69
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertConstructInfoService.java

@ -0,0 +1,69 @@
package org.dromara.business.service;
import org.dromara.business.domain.BusinessAlertConstructInfo;
import org.dromara.business.domain.vo.BusinessAlertConstructInfoVo;
import org.dromara.business.domain.bo.BusinessAlertConstructInfoBo;
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-21
*/
public interface IBusinessAlertConstructInfoService {
/**
* 查询预警任务-施工信息
*
* @param id 主键
* @return 预警任务-施工信息
*/
BusinessAlertConstructInfoVo queryById(Long id);
/**
* 分页查询预警任务-施工信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 预警任务-施工信息分页列表
*/
TableDataInfo<BusinessAlertConstructInfoVo> queryPageList(BusinessAlertConstructInfoBo bo, PageQuery pageQuery);
/**
* 查询符合条件的预警任务-施工信息列表
*
* @param bo 查询条件
* @return 预警任务-施工信息列表
*/
List<BusinessAlertConstructInfoVo> queryList(BusinessAlertConstructInfoBo bo);
/**
* 新增预警任务-施工信息
*
* @param bo 预警任务-施工信息
* @return 是否新增成功
*/
Boolean insertByBo(BusinessAlertConstructInfoBo bo);
/**
* 修改预警任务-施工信息
*
* @param bo 预警任务-施工信息
* @return 是否修改成功
*/
Boolean updateByBo(BusinessAlertConstructInfoBo bo);
/**
* 校验并批量删除预警任务-施工信息信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

10
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java

@ -36,6 +36,8 @@ public interface IBusinessAlertService {
* @return 是否新增成功 * @return 是否新增成功
*/ */
BusinessAlert addBusinessAlert(BusinessAlertVo param); BusinessAlert addBusinessAlert(BusinessAlertVo param);
//用于演示
BusinessAlert addAlert(BusinessAlert param);
void addBusinessAlertList(List<BusinessAlertVo> alertVoList); void addBusinessAlertList(List<BusinessAlertVo> alertVoList);
@ -45,7 +47,7 @@ public interface IBusinessAlertService {
* @param alertVoList 预警任务 * @param alertVoList 预警任务
* @return 是否新增成功 * @return 是否新增成功
*/ */
Boolean batchAddBusinessAlert(List<RemoteBusinessAlertVo> alertVoList); Boolean batchAddBusinessAlert(List<RemoteBusinessAlertVo> alertVoList, String activeProfile);
/** /**
* 修改预警任务 * 修改预警任务
@ -94,4 +96,10 @@ public interface IBusinessAlertService {
List<BusinessAlert> listHandleHistory(String lng, String lat, String createTime); List<BusinessAlert> listHandleHistory(String lng, String lat, String createTime);
Boolean transferAlert(BusinessAlertVo vo); Boolean transferAlert(BusinessAlertVo vo);
BusinessAlert getBusinessAlert(Long alertId);
Boolean updateBusinessAlert(BusinessAlert businessAlert);
TableDataInfo<BusinessAlertVo> listAiVerifyAlert(BusinessAlertVo vo,PageQuery pageQuery);
} }

3
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java

@ -38,4 +38,7 @@ public interface IBusinessAlertStatisticsService {
Map<String, Object> listAppAlertCount(BusinessAlertBo businessAlertBo); Map<String, Object> listAppAlertCount(BusinessAlertBo businessAlertBo);
List<StatObj> countPostAllAlert(BusinessAlertBo businessAlertBo);
} }

138
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertConstructInfoServiceImpl.java

@ -0,0 +1,138 @@
package org.dromara.business.service.impl;
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.business.domain.bo.BusinessAlertConstructInfoBo;
import org.dromara.business.domain.vo.BusinessAlertConstructInfoVo;
import org.dromara.business.domain.BusinessAlertConstructInfo;
import org.dromara.business.mapper.BusinessAlertConstructInfoMapper;
import org.dromara.business.service.IBusinessAlertConstructInfoService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 预警任务-施工信息Service业务层处理
*
* @author szs
* @date 2025-05-21
*/
@RequiredArgsConstructor
@Service
public class BusinessAlertConstructInfoServiceImpl implements IBusinessAlertConstructInfoService {
private final BusinessAlertConstructInfoMapper baseMapper;
/**
* 查询预警任务-施工信息
*
* @param id 主键
* @return 预警任务-施工信息
*/
@Override
public BusinessAlertConstructInfoVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询预警任务-施工信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 预警任务-施工信息分页列表
*/
@Override
public TableDataInfo<BusinessAlertConstructInfoVo> queryPageList(BusinessAlertConstructInfoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<BusinessAlertConstructInfo> lqw = buildQueryWrapper(bo);
Page<BusinessAlertConstructInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的预警任务-施工信息列表
*
* @param bo 查询条件
* @return 预警任务-施工信息列表
*/
@Override
public List<BusinessAlertConstructInfoVo> queryList(BusinessAlertConstructInfoBo bo) {
LambdaQueryWrapper<BusinessAlertConstructInfo> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<BusinessAlertConstructInfo> buildQueryWrapper(BusinessAlertConstructInfoBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BusinessAlertConstructInfo> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getBusinessType() != null, BusinessAlertConstructInfo::getBusinessType, bo.getBusinessType());
lqw.eq(StringUtils.isNotBlank(bo.getJobId()), BusinessAlertConstructInfo::getJobId, bo.getJobId());
lqw.like(StringUtils.isNotBlank(bo.getJobName()), BusinessAlertConstructInfo::getJobName, bo.getJobName());
lqw.eq(bo.getBusinessAlertId() != null, BusinessAlertConstructInfo::getBusinessAlertId, bo.getBusinessAlertId());
lqw.like(StringUtils.isNotBlank(bo.getConstructName()), BusinessAlertConstructInfo::getConstructName, bo.getConstructName());
lqw.eq(StringUtils.isNotBlank(bo.getConstructDept()), BusinessAlertConstructInfo::getConstructDept, bo.getConstructDept());
lqw.eq(StringUtils.isNotBlank(bo.getConstructLeader()), BusinessAlertConstructInfo::getConstructLeader, bo.getConstructLeader());
lqw.eq(StringUtils.isNotBlank(bo.getPhonenumber()), BusinessAlertConstructInfo::getPhonenumber, bo.getPhonenumber());
lqw.eq(StringUtils.isNotBlank(bo.getAddress()), BusinessAlertConstructInfo::getAddress, bo.getAddress());
lqw.eq(StringUtils.isNotBlank(bo.getPipeline()), BusinessAlertConstructInfo::getPipeline, bo.getPipeline());
return lqw;
}
/**
* 新增预警任务-施工信息
*
* @param bo 预警任务-施工信息
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(BusinessAlertConstructInfoBo bo) {
BusinessAlertConstructInfo add = MapstructUtils.convert(bo, BusinessAlertConstructInfo.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改预警任务-施工信息
*
* @param bo 预警任务-施工信息
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(BusinessAlertConstructInfoBo bo) {
BusinessAlertConstructInfo update = MapstructUtils.convert(bo, BusinessAlertConstructInfo.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusinessAlertConstructInfo entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除预警任务-施工信息信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

178
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java

@ -3,18 +3,24 @@ package org.dromara.business.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo; import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo;
import org.dromara.business.api.domain.vo.RemoteBusinessAlertConstructInfo;
import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo;
import org.dromara.business.config.ProjectTablePrefixConfig;
import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.domain.vo.BusinessAlertConstructInfoVo;
import org.dromara.business.domain.vo.BusinessAlertVo; import org.dromara.business.domain.vo.BusinessAlertVo;
import org.dromara.business.mapper.BusinessAlertConstructInfoMapper;
import org.dromara.business.mapper.BusinessAlertMapper; import org.dromara.business.mapper.BusinessAlertMapper;
import org.dromara.business.service.IBusinessAlertService; import org.dromara.business.service.IBusinessAlertService;
import org.dromara.business.utils.BatchProcessorUtil; import org.dromara.business.utils.BatchProcessorUtil;
@ -28,6 +34,7 @@ import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.business.utils.MinioUtil;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RemoteLabelPostService; import org.dromara.system.api.RemoteLabelPostService;
import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo; import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo;
@ -35,6 +42,7 @@ import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -62,12 +70,17 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
private final BusinessAlertMapper baseMapper; private final BusinessAlertMapper baseMapper;
@Autowired
private BusinessAlertConstructInfoMapper businessAlertConstructInfoMapper;
@DubboReference(timeout = 30000) @DubboReference(timeout = 30000)
RemoteWorkflowService remoteWorkflowService; RemoteWorkflowService remoteWorkflowService;
@DubboReference @DubboReference
RemoteLabelPostService remoteLablePostService; RemoteLabelPostService remoteLablePostService;
@Autowired
private ProjectTablePrefixConfig ptPrefix;
/** /**
* 新增预警任务 * 新增预警任务
@ -79,8 +92,37 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
public BusinessAlert addBusinessAlert(BusinessAlertVo param) { public BusinessAlert addBusinessAlert(BusinessAlertVo param) {
BusinessAlert alert = MapstructUtils.convert(param, BusinessAlert.class); BusinessAlert alert = MapstructUtils.convert(param, BusinessAlert.class);
alert.setCreateTime(new Date()); alert.setCreateTime(new Date());
alert.setCaseNumber(param.getCaseNumber()); alert.setJobName(alert.getLabelCn()+ DateUtils.getTime());
alert.setJobName(alert.getDeptName()+alert.getLabelCn()+ DateUtils.getTime()); //创建案件号
try {
incrementalAlertCount(alert);
} catch (Exception e) {
log.error(e.getMessage(),e);
}
this.baseMapper.insert(alert);
return alert;
}
@Override
public BusinessAlert addAlert(BusinessAlert alert) {
alert.setCreateTime(new Date());
if(ObjectUtil.isNull(alert.getJobName())){
alert.setJobName(alert.getLabelCn()+ DateUtils.getTime());
alert.setDeptId("106");
alert.setDeptName("金山街道");
}
if(ObjectUtil.equals("车辆",alert.getLabelCn())){
alert.setLat("34.22403");
alert.setLng("117.13597");
}else if(ObjectUtil.equals("烟雾",alert.getLabelCn())){
alert.setLat("34.22825");
alert.setLng("117.14087");
}else if(ObjectUtil.equals("垃圾",alert.getLabelCn())){
alert.setLat("34.2264");
alert.setLng("117.13919");
}
this.baseMapper.insert(alert); this.baseMapper.insert(alert);
return alert; return alert;
} }
@ -117,22 +159,38 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
* @return * @return
*/ */
@Override @Override
public Boolean batchAddBusinessAlert(List<RemoteBusinessAlertVo> alertVoList) { public Boolean batchAddBusinessAlert(List<RemoteBusinessAlertVo> alertVoList, String activeProfile) {
List<BusinessAlert> businessAlerts = alertVoList.stream().map(alert -> { List<BusinessAlert> businessAlerts = alertVoList.stream().map(alert -> {
BusinessAlert businessAlert = new BusinessAlert(); BusinessAlert businessAlert = new BusinessAlert();
alert.setCreateTime(new Date()); alert.setCreateTime(new Date());
alert.setHandleType(BusinessStatusEnum.VERIFY.getStatus()); alert.setHandleType(BusinessStatusEnum.VERIFY.getStatus());
RemoteBusinessAlertConstructInfo remoteAlertConstructInfo = alert.getRemoteAlertConstructInfo();
BusinessAlertConstructInfoVo alertConstructInfoVo = new BusinessAlertConstructInfoVo();
BeanUtils.copyProperties(alert.getRemoteAlertConstructInfo(), alertConstructInfoVo);
businessAlert.setAlertConstructInfoVo(alertConstructInfoVo);
BeanUtils.copyProperties(alert, businessAlert); BeanUtils.copyProperties(alert, businessAlert);
if(!StrUtil.equals("default", activeProfile)){
businessAlert.setBusinessType(2);
}
//查询历史预警 //查询历史预警
List<BusinessAlert> businessAlertList = this.listHandleHistory(alert.getLng(), alert.getLat(), DateUtils.parseDateToStr(FormatsType.YYYY_MM_DD_HH_MM_SS, alert.getCreateTime())); List<BusinessAlert> businessAlertList = this.listHandleHistory(alert.getLng(), alert.getLat(), DateUtils.parseDateToStr(FormatsType.YYYY_MM_DD_HH_MM_SS, alert.getCreateTime()));
businessAlert.setHandleNum(businessAlertList.size()); businessAlert.setHandleNum(businessAlertList.size());
return businessAlert; return businessAlert;
}).toList(); }).toList();
return this.baseMapper.insertBatch(businessAlerts); boolean b = this.baseMapper.insertBatch(businessAlerts);
/*List<BusinessAlertConstructInfo> alertConstructInfoList = businessAlerts.stream().map(alert -> {
BusinessAlertConstructInfoVo alertConstructInfoVo = alert.getAlertConstructInfoVo();
BusinessAlertConstructInfo businessAlertConstructInfo = new BusinessAlertConstructInfo();
BeanUtils.copyProperties(alertConstructInfoVo, businessAlertConstructInfo);
businessAlertConstructInfo.setBusinessAlertId(alert.getId());
return businessAlertConstructInfo;
}).collect(Collectors.toList());
businessAlertConstructInfoMapper.insertBatch(alertConstructInfoList);*/
return b;
} }
/** /**
@ -216,9 +274,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return new TableDataInfo<>(); return new TableDataInfo<>();
} }
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlert(pageQuery.build(), wrapper); Page<BusinessAlert> page = this.baseMapper.pageBusinessAlert(pageQuery.build(), wrapper, ptPrefix);
try { try {//预警管理查询图片
page.getRecords().forEach(businessAlertVo->{ page.getRecords().forEach(businessAlertVo->{
if (businessAlertVo.getBusinessType() == 2){ if (businessAlertVo.getBusinessType() == 2){
businessAlertVo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlertVo.getImages(), 3600).toString()); businessAlertVo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlertVo.getImages(), 3600).toString());
@ -253,7 +311,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
wrapper.in("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus()); wrapper.in("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper); Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper, ptPrefix);
try { try {
page.getRecords().forEach(businessAlertVo->{ page.getRecords().forEach(businessAlertVo->{
@ -291,7 +349,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
wrapper.eq("t.handle_type",BusinessStatusEnum.FINISH.getStatus()); wrapper.eq("t.handle_type",BusinessStatusEnum.FINISH.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertFinish(pageQuery.build(), wrapper); Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertFinish(pageQuery.build(), wrapper, ptPrefix);
try { try {
page.getRecords().forEach(businessAlertVo->{ page.getRecords().forEach(businessAlertVo->{
@ -311,7 +369,6 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
/** /**
* 查询当前用户待办预警 * 查询当前用户待办预警
* @param bo * @param bo
@ -330,7 +387,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
wrapper.in("t.approver", remoteWorkflowService.getPermissions()); wrapper.in("t.approver", remoteWorkflowService.getPermissions());
wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageAlertTodo(pageQuery.build(), wrapper); Page<BusinessAlert> page = this.baseMapper.pageAlertTodo(pageQuery.build(), wrapper, ptPrefix);
List<BusinessAlert> records = page.getRecords(); List<BusinessAlert> records = page.getRecords();
if (CollUtil.isNotEmpty(records)) { if (CollUtil.isNotEmpty(records)) {
@ -371,11 +428,13 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return new TableDataInfo<>(); return new TableDataInfo<>();
} }
String tableWorkflow = ptPrefix.getTableWorkflow(); // eg: "dk_workflow"
wrapper.notIn("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus()); wrapper.notIn("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus());
wrapper.apply(" EXISTS(select * from dk_workflow.flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)"); // wrapper.apply(" EXISTS(select * from w_dk_workflow.flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)");
wrapper.apply(" EXISTS(select * from "+tableWorkflow+".flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)");
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertHandle(pageQuery.build(), wrapper); Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertHandle(pageQuery.build(), wrapper, ptPrefix);
try { try {
page.getRecords().forEach(businessAlertVo->{ page.getRecords().forEach(businessAlertVo->{
@ -490,7 +549,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
//查看的是总览的预警信息 //查看的是总览的预警信息
if (ObjectUtil.isEmpty(businessAlertBo.getPostCode())) { if (ObjectUtil.isEmpty(businessAlertBo.getPostCode())) {
List<BusinessAlert> businessAlerts = this.baseMapper.listAlert(businessAlertBo, startTime, endTime); List<BusinessAlert> businessAlerts = this.baseMapper.listAlert(businessAlertBo, startTime, endTime, ptPrefix);
businessAlerts.forEach(businessAlertVo->{ businessAlerts.forEach(businessAlertVo->{
if (businessAlertVo.getBusinessType() == 2){ if (businessAlertVo.getBusinessType() == 2){
@ -514,7 +573,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
Map<String,Object> handlerMap = new HashMap<>(); Map<String,Object> handlerMap = new HashMap<>();
List<BusinessAlert> alertList = this.baseMapper.listAlert(businessAlertBo, startTime, endTime); List<BusinessAlert> alertList = this.baseMapper.listAlert(businessAlertBo, startTime, endTime, ptPrefix);
alertList.forEach(businessAlertVo->{ alertList.forEach(businessAlertVo->{
if (businessAlertVo.getBusinessType() == 2){ if (businessAlertVo.getBusinessType() == 2){
@ -554,7 +613,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
//查看的是总览的预警信息 //查看的是总览的预警信息
if (ObjectUtil.isEmpty(businessAlertBo.getPostCode())) { if (ObjectUtil.isEmpty(businessAlertBo.getPostCode())) {
List<BusinessAlertVo> businessAlerts = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime()); List<BusinessAlertVo> businessAlerts = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime(), ptPrefix);
Map<String, List<BusinessAlertVo>> listMap = businessAlerts.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn)); Map<String, List<BusinessAlertVo>> listMap = businessAlerts.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn));
result.putAll(listMap); result.putAll(listMap);
return result; return result;
@ -567,7 +626,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return result; return result;
} }
businessAlertBo.setAiLabelEnList(postVoList.stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList()); businessAlertBo.setAiLabelEnList(postVoList.stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList());
List<BusinessAlertVo> alertList = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime()); List<BusinessAlertVo> alertList = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime(), ptPrefix);
Map<String, List<BusinessAlertVo>> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn)); Map<String, List<BusinessAlertVo>> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn));
result.putAll(listMap); result.putAll(listMap);
return result; return result;
@ -604,7 +663,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
businessAlertBo.setAiLabelEnList(aiNameMap.get(businessAlertBo.getAiName()).stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList()); businessAlertBo.setAiLabelEnList(aiNameMap.get(businessAlertBo.getAiName()).stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList());
List<BusinessAlert> alertList = this.baseMapper.listAlert(businessAlertBo, startTime, endTime); List<BusinessAlert> alertList = this.baseMapper.listAlert(businessAlertBo, startTime, endTime, ptPrefix);
alertList.forEach(businessAlertVo->{ alertList.forEach(businessAlertVo->{
if (businessAlertVo.getBusinessType() == 2){ if (businessAlertVo.getBusinessType() == 2){
@ -655,7 +714,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return infoMap; return infoMap;
} }
businessAlertBo.setAiLabelEnList(aiNameMap.get(businessAlertBo.getAiName()).stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList()); businessAlertBo.setAiLabelEnList(aiNameMap.get(businessAlertBo.getAiName()).stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList());
List<BusinessAlertVo> alertList = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime()); List<BusinessAlertVo> alertList = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime(), ptPrefix);
Map<String, List<BusinessAlertVo>> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn)); Map<String, List<BusinessAlertVo>> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn));
infoMap.putAll(listMap); infoMap.putAll(listMap);
return infoMap; return infoMap;
@ -669,6 +728,37 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return this.baseMapper.selectVoList(wrapper); return this.baseMapper.selectVoList(wrapper);
} }
/**
* 查询实时流待验证预警
* @param vo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<BusinessAlertVo> listAiVerifyAlert(BusinessAlertVo vo,PageQuery pageQuery) {
LambdaQueryWrapper<BusinessAlert> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BusinessAlert::getHandleType, BusinessStatusEnum.VERIFY.getStatus());
wrapper.eq(BusinessAlert::getBusinessType, vo.getBusinessType());
if (ObjectUtil.isNotEmpty(vo.getDeptId())){
wrapper.eq(BusinessAlert::getDeptId, vo.getDeptId());
}
if (ObjectUtil.isNotEmpty(vo.getJobName())){
wrapper.like(BusinessAlert::getJobName, vo.getJobName());
}
wrapper.orderByDesc(BusinessAlert::getCreateTime);
IPage<BusinessAlertVo> businessAlertVos = this.baseMapper.selectVoPage(pageQuery.build(), wrapper);
businessAlertVos.getRecords().forEach(businessAlertVo->{
URL url = MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlertVo.getImages(), 3600);
businessAlertVo.setImages(url.toString());
});
return TableDataInfo.build(businessAlertVos);
}
@Override @Override
public Boolean deleteAlert(List<Long> alertIdList) { public Boolean deleteAlert(List<Long> alertIdList) {
if (ObjectUtil.isEmpty(alertIdList)) { if (ObjectUtil.isEmpty(alertIdList)) {
@ -687,10 +777,14 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
//更新部门 //更新部门
this.baseMapper.batchUpdateDept(alertVoList); this.baseMapper.batchUpdateDept(alertVoList);
incrementalCount(alertVoList); try {
incrementalCount(alertVoList);
//更新number //更新number
this.baseMapper.batchUpdateCaseNumber(alertVoList); this.baseMapper.batchUpdateCaseNumber(alertVoList);
} catch (Exception e) {
log.error(e.getMessage(),e);
}
} }
@ -715,6 +809,22 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
}); });
} }
/**
* 创建递归caseNumber
* @param
*/
public void incrementalAlertCount(BusinessAlert businessAlert){
//查询当天时间有多少条预警
Integer currentCount = this.baseMapper.selectCurrentAlertCount(DateUtils.getDate());
//获取当天的时间戳
String currentDate = DateUtils.getDate().replace("-","");
//然后0 + 个数 + 1 当前年月日 例如 202505150 total + 1
businessAlert.setCaseNumber(currentDate + "0" + (currentCount + 1));
}
public static List<String> getLastSixDays() { public static List<String> getLastSixDays() {
List<String> days = new ArrayList<>(7); List<String> days = new ArrayList<>(7);
@ -745,7 +855,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
wrapper.in("t.approver", remoteWorkflowService.getPermissions()); wrapper.in("t.approver", remoteWorkflowService.getPermissions());
wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
return this.baseMapper.listTodoAlert(wrapper); return this.baseMapper.listTodoAlert(wrapper, ptPrefix);
} }
/** /**
@ -761,7 +871,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
wrapper.in("t.approver", remoteWorkflowService.getPermissions()); wrapper.in("t.approver", remoteWorkflowService.getPermissions());
wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
List<BusinessAlert> businessAlerts = this.baseMapper.listTodoAlert(wrapper); List<BusinessAlert> businessAlerts = this.baseMapper.listTodoAlert(wrapper, ptPrefix);
BusinessAlert businessAlert = businessAlerts.stream().filter(p -> p.getId().equals(alertId)).findFirst().get(); BusinessAlert businessAlert = businessAlerts.stream().filter(p -> p.getId().equals(alertId)).findFirst().get();
try { try {
@ -785,6 +895,16 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
LambdaUpdateWrapper<BusinessAlert> wrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<BusinessAlert> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(BusinessAlert::getId, alertId); wrapper.eq(BusinessAlert::getId, alertId);
wrapper.set(BusinessAlert::getDelFlag,1); wrapper.set(BusinessAlert::getDelFlag,1);
BusinessAlert businessAlert = this.baseMapper.selectById(alertId);
//删除minio多余数据
try {
MinioUtil.deleteFile(businessAlert.getImages(), MinIOConstants.BUCKET_DKCY);
MinioUtil.deleteFile(businessAlert.getImages(), MinIOConstants.BUCKET_ALERT);
} catch (Exception e) {
throw new RuntimeException(e);
}
return this.baseMapper.update(wrapper) > 0; return this.baseMapper.update(wrapper) > 0;
} }
@ -831,6 +951,16 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return this.baseMapper.update(wrapper) > 0; return this.baseMapper.update(wrapper) > 0;
} }
@Override
public BusinessAlert getBusinessAlert(Long alertId) {
return baseMapper.selectById(alertId);
}
@Override
public Boolean updateBusinessAlert(BusinessAlert businessAlert) {
return baseMapper.updateById(businessAlert) > 0;
}
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(getLastSixDays()); System.out.println(getLastSixDays());

61
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java

@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.config.ProjectTablePrefixConfig;
import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.domain.model.StatObj; import org.dromara.business.domain.model.StatObj;
@ -72,6 +73,9 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
private final IBusinessAlertService businessAlertService; private final IBusinessAlertService businessAlertService;
@Autowired
private ProjectTablePrefixConfig ptPrefix;
/** /**
* 按照月份分类预警数量 * 按照月份分类预警数量
* @param businessAlertBo * @param businessAlertBo
@ -111,12 +115,12 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
.collect(Collectors.toList()); .collect(Collectors.toList());
//排除自己如果没有下级则默认使用下边的逻辑查询 //排除自己如果没有下级则默认使用下边的逻辑查询
if (ObjectUtil.isEmpty(remoteDeptVoList)) { if (ObjectUtil.isEmpty(remoteDeptVoList)) {
List<Map<String, Object>> mapList = baseMapper.listOneDepartAlert(businessAlertBo); List<Map<String, Object>> mapList = baseMapper.listOneDepartAlert(businessAlertBo, ptPrefix);
return mapList.stream().map(data -> new StatObj(data.get("deptName") + "", Long.parseLong(data.get("total") + ""),"deptId",data.get("deptId"))).collect(Collectors.toList()); return mapList.stream().map(data -> new StatObj(data.get("deptName") + "", Long.parseLong(data.get("total") + ""),"deptId",data.get("deptId"))).collect(Collectors.toList());
} }
//如果有则使用这个查询 //如果有则使用这个查询
List<Map<String, Object>> mapList = baseMapper.listDepartAlert(businessAlertBo); List<Map<String, Object>> mapList = baseMapper.listDepartAlert(businessAlertBo, ptPrefix);
return mapList.stream().map(data -> new StatObj(data.get("deptName") + "", Long.parseLong(data.get("total") + ""),"deptId",data.get("deptId"))).collect(Collectors.toList()); return mapList.stream().map(data -> new StatObj(data.get("deptName") + "", Long.parseLong(data.get("total") + ""),"deptId",data.get("deptId"))).collect(Collectors.toList());
} }
@ -159,7 +163,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
//排除自己如果没有下级则默认使用下边的逻辑查询 //排除自己如果没有下级则默认使用下边的逻辑查询
if (ObjectUtil.isEmpty(remoteDeptVoList)) { if (ObjectUtil.isEmpty(remoteDeptVoList)) {
List<Map<String, Object>> mapList = baseMapper.listOneDepartAlertStatus(businessAlertBo); List<Map<String, Object>> mapList = baseMapper.listOneDepartAlertStatus(businessAlertBo, ptPrefix);
return mapList.stream() return mapList.stream()
.map(map -> new StatObj( .map(map -> new StatObj(
@ -176,7 +180,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
} }
//如果有下级则使用下方方法 //如果有下级则使用下方方法
List<Map<String, Object>> mapList = baseMapper.listDepartAlertStatus(businessAlertBo); List<Map<String, Object>> mapList = baseMapper.listDepartAlertStatus(businessAlertBo, ptPrefix);
return mapList.stream() return mapList.stream()
.map(map -> new StatObj( .map(map -> new StatObj(
@ -494,6 +498,41 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
return result; return result;
} }
@Override
public List<StatObj> countPostAllAlert(BusinessAlertBo businessAlertBo) {
//构建查询数据权限
createPermissions(businessAlertBo);
//查询所有的职能岗位
List<RemotePostVo> postVoList = remotePostService.listPost();
postVoList = postVoList.stream().filter(item -> StrUtil.equals("0",item.getStatus())).toList();//剔除禁用规则
List<StatObj> result = new ArrayList<>();
if (ObjectUtil.isEmpty(postVoList)) {
return ListUtil.empty();
}
postVoList.forEach(postVo -> {
List<String> labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList());
Map<String, Object> dateMap = new HashMap<>();
if (ObjectUtil.isEmpty(labelList)) {
dateMap.put("todoCount",0);
dateMap.put("finishCount",0);
}else {
businessAlertBo.setAiLabelEnList(labelList);
dateMap = baseMapper.countTotalAlert(businessAlertBo);
}
result.add(new StatObj(
postVo.getPostName(),
dateMap.get("todoCount"),
dateMap.get("finishCount")
));
});
return result;
}
/** /**
* 出警效率 * 出警效率
* @param businessAlertBo * @param businessAlertBo
@ -585,7 +624,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
//-------------------------------------------------------识别类型事件情况-------------------------------------------- //-------------------------------------------------------识别类型事件情况--------------------------------------------
List<Map<String,Object>> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime); List<Map<String,Object>> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime, ptPrefix);
List<StatObj> labelStatObj = new ArrayList<>(); List<StatObj> labelStatObj = new ArrayList<>();
@ -603,7 +642,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
List<RemoteDeptVo> streetList = remoteDeptService.selectListByParentId(String.valueOf(deptId)); List<RemoteDeptVo> streetList = remoteDeptService.selectListByParentId(String.valueOf(deptId));
List<Long> deptIdList = streetList.stream().filter(p-> p.getParentId().equals(deptId)).map(RemoteDeptVo::getDeptId).distinct().toList(); List<Long> deptIdList = streetList.stream().filter(p-> p.getParentId().equals(deptId)).map(RemoteDeptVo::getDeptId).distinct().toList();
List<Map<String,Object>> top5Map = this.baseMapper.countStreetAlert(businessAlertBo,startTime,endTime,deptIdList); List<Map<String,Object>> top5Map = this.baseMapper.countStreetAlert(businessAlertBo,startTime,endTime,deptIdList, ptPrefix);
List<StatObj> top5StatObj = new ArrayList<>(); List<StatObj> top5StatObj = new ArrayList<>();
@ -616,7 +655,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
//-------------------------------------------------------街道处理效率Top5-------------------------------------------- //-------------------------------------------------------街道处理效率Top5--------------------------------------------
List<Map<String,Object>> streetRateTop5Map = this.baseMapper.countStreetRateAlert(businessAlertBo,startTime,endTime,deptIdList); List<Map<String,Object>> streetRateTop5Map = this.baseMapper.countStreetRateAlert(businessAlertBo,startTime,endTime,deptIdList, ptPrefix);
List<StatObj> streetRateTop5StatObj = new ArrayList<>(); List<StatObj> streetRateTop5StatObj = new ArrayList<>();
@ -630,7 +669,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
//-------------------------------------------------------识别类型事件处理情况-------------------------------------------- //-------------------------------------------------------识别类型事件处理情况--------------------------------------------
//识别类型事件处理情况 //识别类型事件处理情况
List<Map<String,Object>> labelRateMap = this.baseMapper.countLabelRateAlert(businessAlertBo,startTime,endTime); List<Map<String,Object>> labelRateMap = this.baseMapper.countLabelRateAlert(businessAlertBo,startTime,endTime, ptPrefix);
List<StatObj> labelRateStatObj = new ArrayList<>(); List<StatObj> labelRateStatObj = new ArrayList<>();
@ -736,7 +775,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
} }
List<Map<String,Object>> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime); List<Map<String,Object>> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime, ptPrefix);
List<StatObj> incidentHandlerStatStat = new ArrayList<>(); List<StatObj> incidentHandlerStatStat = new ArrayList<>();
@ -750,13 +789,13 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
//-------------------------------------------------------事件高发区-------------------------------------------- //-------------------------------------------------------事件高发区--------------------------------------------
//事件高发区top1 //事件高发区top1
Map<String,Object> topStreet = this.baseMapper.streetTopAlert(businessAlertBo,startTime,endTime,deptIdList); Map<String,Object> topStreet = this.baseMapper.streetTopAlert(businessAlertBo,startTime,endTime,deptIdList, ptPrefix);
keyMap.put("incidentTop1",ObjectUtil.isEmpty(topStreet)?"":topStreet.get("deptName")); keyMap.put("incidentTop1",ObjectUtil.isEmpty(topStreet)?"":topStreet.get("deptName"));
//-------------------------------------------------------处理效率-------------------------------------------- //-------------------------------------------------------处理效率--------------------------------------------
//处理效率top1 //处理效率top1
Map<String,Object> topStreetRate = this.baseMapper.streetRateTopAlert(businessAlertBo,startTime,endTime,deptIdList); Map<String,Object> topStreetRate = this.baseMapper.streetRateTopAlert(businessAlertBo,startTime,endTime,deptIdList, ptPrefix);
keyMap.put("handlerRateTop1", ObjectUtil.isEmpty(topStreetRate)?"":topStreetRate.get("deptName")); keyMap.put("handlerRateTop1", ObjectUtil.isEmpty(topStreetRate)?"":topStreetRate.get("deptName"));

183
dk-modules/business/src/main/java/org/dromara/business/utils/MinioUtil.java

@ -0,0 +1,183 @@
package org.dromara.business.utils;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import io.minio.*;
import io.minio.http.Method;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.InputStream;
import java.util.HashMap;
@Component
public class MinioUtil {
// 指定MinIO服务的访问地址(包括协议、域名或IP以及端口)
private static String endpoint;
// MinIO的访问密钥(Access Key),用于身份验证
private static String accessKey;
// MinIO的秘密密钥(Secret Key),与访问密钥配对使用,也是认证的一部分。
private static String secretKey;
// 指定默认的存储桶(Bucket)名称,MinIO中用于组织和存储对象(文件)的基本容器。
private static String bucket;
@Value("${minio.endpoint:http://114.235.183.147:9090}")
public void setEndpoint(String endpoint) {
MinioUtil.endpoint = endpoint;
}
@Value("${minio.accessKey:wuyuan@yf}")
public void setAccessKey(String accessKey) {
MinioUtil.accessKey = accessKey;
}
@Value("${minio.secretKey:wuyuan@yf}")
public void setSecretKey(String secretKey) {
MinioUtil.secretKey = secretKey;
}
@Value("${minio.bucket:dkcy}")
public void setBucket(String bucket) {
MinioUtil.bucket = bucket;
}
/**
* 创建并返回一个配置好的MinioClient实例
* 用于与MinIO服务器交互,上传文件下载文件删除文件
*
* @return 配置
*/
public static MinioClient getMinioClient() {
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
/**
* 上传将一个输入流中的文件上传到MinIO服务器上指定的存储桶bucket
*
* @param objectName .object(objectName)指定了上传后对象的名称
* @param inputStream 转换为
* @param size 文件大小
* @param contentType 内容类型
* @throws Exception 异常
*/
public static void uploadFile(String objectName, InputStream inputStream, long size, String contentType,String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient minioClient = getMinioClient();
minioClient.putObject(
// .bucket(bucket) 指定了目标存储桶的名称。.object(objectName)指定了上传后对象的名称。
PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(inputStream, size, -1)
// .contentType(contentType)指定了上传文件的内容类型。
.contentType(contentType)
.build());
}
/**
* 下载从MinIO服务器下载指定存储桶bucket中的文件
*
* @param objectName 指定要从MinIO下载的文件对象名称即文件路径和文件名
* @return 对象
* @throws Exception 异常
*/
public static InputStream downloadFile(String objectName,String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient minioClient = getMinioClient();
return minioClient.getObject(
GetObjectArgs.builder()
// .bucket(bucket)指定了文件所在的存储桶名称。
.bucket(bucketName)
// .object(objectName)指定了要下载的对象名称。
.object(objectName)
.build());
}
/**
* 预览生成一个预签名的URL允许用户通过浏览器或其他HTTP客户端以GET方法访问MinIO存储桶中指定对象文件的临时链接
*
* @param objectName 指定需要获取预览链接的文件对象名称包括路径
* @return 对象
* @throws Exception .method(Method.GET)指定了请求的方法为GET这是预览文件时的标准HTTP方法
* .bucket(bucket)指定了存储桶的名称
* .object(objectName)指定了对象文件的名称
*/
public static String getPreviewUrl(String objectName,String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient minioClient = getMinioClient();
return minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(bucketName)
.object(objectName)
.build());
}
/**
* 删除从MinIO服务器上的指定存储桶中删除一个文件
*
* @param objectName 指定要删除的文件对象名称包括路径和文件名
* @throws Exception
*/
public static void deleteFile(String objectName,String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient minioClient = getMinioClient();
minioClient.removeObject(
RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
}
//查询文件信息
public static HashMap<String,Object> getFileAsMultipart(String objectName, String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient client = getMinioClient();
// 获取对象
InputStream is = client.getObject(GetObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build());
// 获取文件元信息(如 contentType)
StatObjectResponse stat = client.statObject(StatObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build());
String contentType = stat.contentType();
// 将流读为 byte[] 以生成 MockMultipartFile
byte[] bytes = IoUtil.readBytes(is); // Hutool 工具类
HashMap<String, Object> map = new HashMap<>();
map.put("objectName",objectName);
map.put("contentType",contentType);
map.put("bytes",bytes);
return map;
}
//文件复制
public static void copyFile(String sourceObjectName, String targetObjectName, String sourceBucket, String targetBucket) throws Exception {
MinioClient client = getMinioClient();
// 使用服务器端复制,无需下载上传
client.copyObject(CopyObjectArgs.builder()
.bucket(targetBucket) // 目标桶
.object(targetObjectName) // 目标对象
.source(CopySource.builder()
.bucket(sourceBucket)
.object(sourceObjectName)
.build())
.build());
}
}

7
dk-modules/business/src/main/resources/mapper/business/BusinessAlertConstructInfoMapper.xml

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.business.mapper.BusinessAlertConstructInfoMapper">
</mapper>

142
dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml

@ -30,20 +30,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if> </if>
</sql> </sql>
<!-- w_dk_business-->
<select id="pageBusinessAlert" resultType="org.dromara.business.domain.BusinessAlert"> <select id="pageBusinessAlert" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from (select select t.* from (select
ba.* ba.*
from dk_business.business_alert ba) t from ${tbPrefix.tableBusiness}.business_alert ba) t
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<!-- w_dk_business-->
<select id="pageBusinessAlertFinish" resultType="org.dromara.business.domain.BusinessAlert"> <select id="pageBusinessAlertFinish" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from (select select t.* from (select
ba.* ba.*
from dk_business.business_alert ba) t from ${tbPrefix.tableBusiness}.business_alert ba) t
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<!-- w_dk_business-->
<!-- w_dk_workflow-->
<select id="pageBusinessAlertCancel" resultType="org.dromara.business.domain.BusinessAlert"> <select id="pageBusinessAlertCancel" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from ( select t.* from (
select select
@ -51,12 +55,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
b.flow_status flowStatus, b.flow_status flowStatus,
b.business_id businessId, b.business_id businessId,
b.id instanceId b.id instanceId
from dk_business.business_alert ba from ${tbPrefix.tableBusiness}.business_alert ba
inner join dk_workflow.flow_instance b on ba.id = b.business_id inner join ${tbPrefix.tableWorkflow}.flow_instance b on ba.id = b.business_id
) t ) t
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<!-- w_dk_business-->
<!-- w_dk_workflow-->
<select id="pageBusinessAlertHandle" resultType="org.dromara.business.domain.BusinessAlert"> <select id="pageBusinessAlertHandle" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from ( select t.* from (
select select
@ -64,15 +70,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
b.flow_status flowStatus, b.flow_status flowStatus,
b.business_id businessId, b.business_id businessId,
b.id instanceId b.id instanceId
from dk_business.business_alert ba from ${tbPrefix.tableBusiness}.business_alert ba
inner join dk_workflow.flow_instance b on ba.id = b.business_id inner join ${tbPrefix.tableWorkflow}.flow_instance b on ba.id = b.business_id
where where
b.del_flag = '0' b.del_flag = '0'
) t ) t
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<!-- w_dk_business-->
<!-- w_dk_workflow-->
<select id="pageAlertTodo" resultType="org.dromara.business.domain.BusinessAlert"> <select id="pageAlertTodo" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from ( select t.* from (
select select
@ -85,16 +92,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.node_type, a.node_type,
fnData.buttonPermission, fnData.buttonPermission,
fnData.permissions fnData.permissions
from dk_business.business_alert ba from ${tbPrefix.tableBusiness}.business_alert ba
inner join dk_workflow.flow_instance b on ba.id = b.business_id inner join ${tbPrefix.tableWorkflow}.flow_instance b on ba.id = b.business_id
left join dk_workflow.flow_task a on a.instance_id = b.id left join ${tbPrefix.tableWorkflow}.flow_task a on a.instance_id = b.id
left join dk_workflow.flow_user uu on uu.associated = a.id left join ${tbPrefix.tableWorkflow}.flow_user uu on uu.associated = a.id
left join dk_workflow.flow_definition c on a.definition_id = c.id left join ${tbPrefix.tableWorkflow}.flow_definition c on a.definition_id = c.id
LEFT JOIN LATERAL ( LEFT JOIN LATERAL (
SELECT SELECT
JSON_UNQUOTE(JSON_EXTRACT(fn.ext, '$[0].value')) AS buttonPermission, JSON_UNQUOTE(JSON_EXTRACT(fn.ext, '$[0].value')) AS buttonPermission,
fn.permissions fn.permissions
FROM dk_workflow.flow_node fn FROM ${tbPrefix.tableWorkflow}.flow_node fn
WHERE WHERE
fn.node_code = b.node_code fn.node_code = b.node_code
and fn.definition_id = c.id and fn.definition_id = c.id
@ -111,54 +118,55 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="listMonthAlert" resultType="java.util.Map"> <select id="listMonthAlert" resultType="java.util.Map">
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -11 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -11 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 0 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -11 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -10 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -10 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 1 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -10 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -9 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -9 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 2 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -9 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -8 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -8 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 3 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -8 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -7 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -7 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 4 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -7 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -6 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -6 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 5 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -6 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -5 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -5 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 6 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -5 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -4 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -4 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 7 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -4 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -3 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -3 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 8 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -3 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -2 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -2 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 9 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -2 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -1 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -1 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 10 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -1 MONTH), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
union all union all
SELECT DATE_FORMAT(CURDATE(), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(CURDATE(), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 11 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(CURDATE(), '%Y-%m')
<include refid="searchSql"></include> <include refid="searchSql"></include>
</select> </select>
<!-- w_dk_cloud-->
<select id="listDepartAlert" resultType="java.util.Map"> <select id="listDepartAlert" resultType="java.util.Map">
WITH RECURSIVE sub_depts AS ( WITH RECURSIVE sub_depts AS (
SELECT SELECT
@ -167,13 +175,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
parent_id, parent_id,
tenant_id tenant_id
FROM FROM
dk_cloud.sys_dept ${tbPrefix.tableCloud}.sys_dept
<where> <where>
<if test="param.deptId != null and param.deptId != ''"> <if test="param.deptId != null and param.deptId != ''">
parent_id = #{param.deptId} parent_id = #{param.deptId}
</if> </if>
<if test="param.deptId == null or param.deptId == ''"> <if test="param.deptId == null or param.deptId == ''">
parent_id in (select dsd.dept_id from dk_cloud.sys_dept dsd where dsd.parent_id = '0') parent_id in (select dsd.dept_id from ${tbPrefix.tableCloud}.sys_dept dsd where dsd.parent_id = '0')
</if> </if>
</where> </where>
UNION ALL UNION ALL
@ -184,7 +192,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
d.parent_id, d.parent_id,
d.tenant_id d.tenant_id
FROM FROM
dk_cloud.sys_dept d ${tbPrefix.tableCloud}.sys_dept d
INNER JOIN sub_depts st ON d.parent_id = st.dept_id INNER JOIN sub_depts st ON d.parent_id = st.dept_id
), ),
-- 获取直接子部门(用于最终显示) -- 获取直接子部门(用于最终显示)
@ -195,13 +203,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
parent_id, parent_id,
tenant_id tenant_id
FROM FROM
dk_cloud.sys_dept ${tbPrefix.tableCloud}.sys_dept
<where> <where>
<if test="param.deptId != null and param.deptId != ''"> <if test="param.deptId != null and param.deptId != ''">
parent_id = #{param.deptId} parent_id = #{param.deptId}
</if> </if>
<if test="param.deptId == null or param.deptId == ''"> <if test="param.deptId == null or param.deptId == ''">
parent_id in (select dsd.dept_id from dk_cloud.sys_dept dsd where dsd.parent_id = '0') parent_id in (select dsd.dept_id from ${tbPrefix.tableCloud}.sys_dept dsd where dsd.parent_id = '0')
</if> </if>
</where> </where>
), ),
@ -248,6 +256,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ORDER BY m.dateMonth ORDER BY m.dateMonth
</select> </select>
<!-- w_dk_cloud-->
<select id="listDepartAlertStatus" resultType="java.util.Map"> <select id="listDepartAlertStatus" resultType="java.util.Map">
WITH RECURSIVE sub_depts AS ( WITH RECURSIVE sub_depts AS (
SELECT SELECT
@ -256,13 +265,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
parent_id, parent_id,
tenant_id tenant_id
FROM FROM
dk_cloud.sys_dept ${tbPrefix.tableCloud}.sys_dept
<where> <where>
<if test="param.deptId != null and param.deptId != ''"> <if test="param.deptId != null and param.deptId != ''">
parent_id = #{param.deptId} parent_id = #{param.deptId}
</if> </if>
<if test="param.deptId == null or param.deptId == ''"> <if test="param.deptId == null or param.deptId == ''">
parent_id in (select dsd.dept_id from dk_cloud.sys_dept dsd where dsd.parent_id = '0') parent_id in (select dsd.dept_id from ${tbPrefix.tableCloud}.sys_dept dsd where dsd.parent_id = '0')
</if> </if>
</where> </where>
UNION ALL UNION ALL
@ -273,7 +282,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
d.parent_id, d.parent_id,
d.tenant_id d.tenant_id
FROM FROM
dk_cloud.sys_dept d ${tbPrefix.tableCloud}.sys_dept d
INNER JOIN sub_depts st ON d.parent_id = st.dept_id INNER JOIN sub_depts st ON d.parent_id = st.dept_id
), ),
-- 获取直接子部门(用于最终显示) -- 获取直接子部门(用于最终显示)
@ -284,13 +293,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
parent_id, parent_id,
tenant_id tenant_id
FROM FROM
dk_cloud.sys_dept ${tbPrefix.tableCloud}.sys_dept
<where> <where>
<if test="param.deptId != null and param.deptId != ''"> <if test="param.deptId != null and param.deptId != ''">
parent_id = #{param.deptId} parent_id = #{param.deptId}
</if> </if>
<if test="param.deptId == null or param.deptId == ''"> <if test="param.deptId == null or param.deptId == ''">
parent_id in (select dsd.dept_id from dk_cloud.sys_dept dsd where dsd.parent_id = '0') parent_id in (select dsd.dept_id from ${tbPrefix.tableCloud}.sys_dept dsd where dsd.parent_id = '0')
</if> </if>
</where> </where>
), ),
@ -515,10 +524,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="searchSql"></include> <include refid="searchSql"></include>
</select> </select>
<select id="countTotalAlert" resultType="java.util.Map">
select
IFNULL(SUM( ba.handle_type = 'waiting' ),0) AS todoCount,
IFNULL(SUM( ba.handle_type = 'finish' ),0) AS finishCount
from business_alert ba
where 1=1
<include refid="searchSql"></include>
</select>
<!-- w_dk_cloud-->
<select id="countAiLabel" resultType="java.util.Map"> <select id="countAiLabel" resultType="java.util.Map">
WITH warning_summary AS ( WITH warning_summary AS (
SELECT al.label_cn, al.label_en SELECT al.label_cn, al.label_en
FROM dk_cloud.ai_label al where al.label_en in FROM ${tbPrefix.tableCloud}.ai_label al where al.label_en in
<foreach collection="param.aiLabelEnList" item="item" open="(" close=")" separator=","> <foreach collection="param.aiLabelEnList" item="item" open="(" close=")" separator=",">
#{item} #{item}
</foreach> </foreach>
@ -543,6 +562,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ws.label_en ws.label_en
</select> </select>
<!-- w_dk_cloud-->
<select id="countStreetAlert" resultType="java.util.Map"> <select id="countStreetAlert" resultType="java.util.Map">
WITH RECURSIVE warning_summary AS ( WITH RECURSIVE warning_summary AS (
SELECT SELECT
@ -551,7 +571,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dept_id, dept_id,
dept_name dept_name
FROM FROM
dk_cloud.sys_dept ${tbPrefix.tableCloud}.sys_dept
WHERE dept_id IN WHERE dept_id IN
<foreach collection="deptIdList" item="deptId" open="(" separator="," close=")"> <foreach collection="deptIdList" item="deptId" open="(" separator="," close=")">
#{deptId} #{deptId}
@ -563,7 +583,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
d.dept_id, d.dept_id,
d.dept_name d.dept_name
FROM FROM
dk_cloud.sys_dept d ${tbPrefix.tableCloud}.sys_dept d
JOIN warning_summary dt ON d.parent_id = dt.dept_id JOIN warning_summary dt ON d.parent_id = dt.dept_id
WHERE WHERE
d.del_flag = '0' d.del_flag = '0'
@ -586,6 +606,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LIMIT 5 LIMIT 5
</select> </select>
<!-- w_dk_business-->
<select id="listAlert" resultType="org.dromara.business.domain.BusinessAlert"> <select id="listAlert" resultType="org.dromara.business.domain.BusinessAlert">
select select
ba.label_en labelEn, ba.label_en labelEn,
@ -596,7 +617,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ba.business_type businessType, ba.business_type businessType,
ba.lat, ba.lat,
ba.lng ba.lng
from dk_business.business_alert ba from ${tbPrefix.tableBusiness}.business_alert ba
where 1=1 where 1=1
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') >= #{startTime} ]]> and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') >= #{startTime} ]]>
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') <= #{endTime} ]]> and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') <= #{endTime} ]]>
@ -604,6 +625,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by ba.create_time desc order by ba.create_time desc
</select> </select>
<!-- w_dk_cloud-->
<select id="countStreetRateAlert" resultType="java.util.Map"> <select id="countStreetRateAlert" resultType="java.util.Map">
WITH RECURSIVE warning_summary AS ( WITH RECURSIVE warning_summary AS (
SELECT SELECT
@ -612,7 +634,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dept_id, dept_id,
dept_name dept_name
FROM FROM
dk_cloud.sys_dept ${tbPrefix.tableCloud}.sys_dept
WHERE dept_id IN WHERE dept_id IN
<foreach collection="deptIdList" item="deptId" open="(" separator="," close=")"> <foreach collection="deptIdList" item="deptId" open="(" separator="," close=")">
#{deptId} #{deptId}
@ -624,7 +646,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
d.dept_id, d.dept_id,
d.dept_name d.dept_name
FROM FROM
dk_cloud.sys_dept d ${tbPrefix.tableCloud}.sys_dept d
JOIN warning_summary dt ON d.parent_id = dt.dept_id JOIN warning_summary dt ON d.parent_id = dt.dept_id
WHERE WHERE
d.del_flag = '0' d.del_flag = '0'
@ -652,6 +674,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LIMIT 5 LIMIT 5
</select> </select>
<!-- w_dk_cloud-->
<select id="streetRateTopAlert" resultType="java.util.Map"> <select id="streetRateTopAlert" resultType="java.util.Map">
WITH RECURSIVE warning_summary AS ( WITH RECURSIVE warning_summary AS (
SELECT SELECT
@ -659,7 +682,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dept_name AS root_dept_name, dept_name AS root_dept_name,
dept_id, dept_id,
dept_name dept_name
FROM dk_cloud.sys_dept FROM ${tbPrefix.tableCloud}.sys_dept
WHERE dept_id IN WHERE dept_id IN
<foreach collection="deptIdList" item="deptId" open="(" separator="," close=")"> <foreach collection="deptIdList" item="deptId" open="(" separator="," close=")">
#{deptId} #{deptId}
@ -670,7 +693,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dt.root_dept_name, dt.root_dept_name,
d.dept_id, d.dept_id,
d.dept_name d.dept_name
FROM dk_cloud.sys_dept d FROM ${tbPrefix.tableCloud}.sys_dept d
JOIN warning_summary dt JOIN warning_summary dt
ON d.parent_id = dt.dept_id ON d.parent_id = dt.dept_id
WHERE d.del_flag = '0' WHERE d.del_flag = '0'
@ -702,6 +725,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LIMIT 1 LIMIT 1
</select> </select>
<!-- w_dk_cloud-->
<select id="streetTopAlert" resultType="java.util.Map"> <select id="streetTopAlert" resultType="java.util.Map">
WITH RECURSIVE warning_summary AS ( WITH RECURSIVE warning_summary AS (
SELECT SELECT
@ -709,7 +733,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dept_name AS root_dept_name, dept_name AS root_dept_name,
dept_id, dept_id,
dept_name dept_name
FROM dk_cloud.sys_dept FROM ${tbPrefix.tableCloud}.sys_dept
WHERE dept_id IN WHERE dept_id IN
<foreach collection="deptIdList" item="deptId" open="(" separator="," close=")"> <foreach collection="deptIdList" item="deptId" open="(" separator="," close=")">
#{deptId} #{deptId}
@ -720,7 +744,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dt.root_dept_name, dt.root_dept_name,
d.dept_id, d.dept_id,
d.dept_name d.dept_name
FROM dk_cloud.sys_dept d FROM ${tbPrefix.tableCloud}.sys_dept d
JOIN warning_summary dt JOIN warning_summary dt
ON d.parent_id = dt.dept_id ON d.parent_id = dt.dept_id
WHERE d.del_flag = '0' WHERE d.del_flag = '0'
@ -748,14 +772,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LIMIT 1; LIMIT 1;
</select> </select>
<!-- w_dk_cloud-->
<select id="countLabelRateAlert" resultType="java.util.Map"> <select id="countLabelRateAlert" resultType="java.util.Map">
WITH warning_summary AS ( WITH warning_summary AS (
SELECT SELECT
al.label_cn, al.label_cn,
al.label_en al.label_en
FROM FROM
dk_cloud.ai_label al ${tbPrefix.tableCloud}.ai_label al
WHERE WHERE
al.label_en IN al.label_en IN
<foreach collection="param.aiLabelEnList" item="item" open="(" close=")" separator=","> <foreach collection="param.aiLabelEnList" item="item" open="(" close=")" separator=",">
@ -812,6 +836,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="searchSql"></include> <include refid="searchSql"></include>
</select> </select>
<!-- w_dk_business-->
<!-- w_dk_workflow-->
<select id="listTodoAlert" resultType="org.dromara.business.domain.BusinessAlert"> <select id="listTodoAlert" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from ( select t.* from (
select select
@ -824,16 +850,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.node_type, a.node_type,
fnData.buttonPermission, fnData.buttonPermission,
fnData.permissions fnData.permissions
from dk_business.business_alert ba from ${tbPrefix.tableBusiness}.business_alert ba
inner join dk_workflow.flow_instance b on ba.id = b.business_id inner join ${tbPrefix.tableWorkflow}.flow_instance b on ba.id = b.business_id
left join dk_workflow.flow_task a on a.instance_id = b.id left join ${tbPrefix.tableWorkflow}.flow_task a on a.instance_id = b.id
left join dk_workflow.flow_user uu on uu.associated = a.id left join ${tbPrefix.tableWorkflow}.flow_user uu on uu.associated = a.id
left join dk_workflow.flow_definition c on a.definition_id = c.id left join ${tbPrefix.tableWorkflow}.flow_definition c on a.definition_id = c.id
LEFT JOIN LATERAL ( LEFT JOIN LATERAL (
SELECT SELECT
JSON_UNQUOTE(JSON_EXTRACT(fn.ext, '$[0].value')) AS buttonPermission, JSON_UNQUOTE(JSON_EXTRACT(fn.ext, '$[0].value')) AS buttonPermission,
fn.permissions fn.permissions
FROM dk_workflow.flow_node fn FROM ${tbPrefix.tableWorkflow}.flow_node fn
WHERE WHERE
fn.node_code = b.node_code fn.node_code = b.node_code
and fn.definition_id = c.id and fn.definition_id = c.id
@ -858,19 +884,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ORDER BY create_time desc ORDER BY create_time desc
</select> </select>
<!-- w_dk_cloud-->
<select id="listOneDepartAlert" resultType="java.util.Map"> <select id="listOneDepartAlert" resultType="java.util.Map">
SELECT SELECT
dc.dept_id AS deptId, dc.dept_id AS deptId,
dc.dept_name AS deptName, dc.dept_name AS deptName,
COALESCE(COUNT(ba.id), 0) AS total COALESCE(COUNT(ba.id), 0) AS total
FROM FROM
(select dept_id,dept_name from dk_cloud.sys_dept sd where sd.dept_id = #{param.deptId}) dc (select dept_id,dept_name from ${tbPrefix.tableCloud}.sys_dept sd where sd.dept_id = #{param.deptId}) dc
LEFT JOIN business_alert ba ON ba.dept_id = dc.dept_id LEFT JOIN business_alert ba ON ba.dept_id = dc.dept_id
<include refid="searchSql"></include> <include refid="searchSql"></include>
GROUP BY GROUP BY
dc.dept_id,dc.dept_name dc.dept_id,dc.dept_name
</select> </select>
<!-- w_dk_cloud-->
<select id="listOneDepartAlertStatus" resultType="java.util.Map"> <select id="listOneDepartAlertStatus" resultType="java.util.Map">
SELECT SELECT
dc.dept_id AS deptId, dc.dept_id AS deptId,
@ -880,12 +908,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
IFNULL(SUM(ba.handle_type = 'finish'), 0) AS finishCount, IFNULL(SUM(ba.handle_type = 'finish'), 0) AS finishCount,
IFNULL(SUM(ba.handle_type = 'cancel'), 0) AS cancelCount IFNULL(SUM(ba.handle_type = 'cancel'), 0) AS cancelCount
FROM FROM
(select dept_id,dept_name from dk_cloud.sys_dept sd where sd.dept_id = #{param.deptId}) dc (select dept_id,dept_name from ${tbPrefix.tableCloud}.sys_dept sd where sd.dept_id = #{param.deptId}) dc
LEFT JOIN business_alert ba ON ba.dept_id = dc.dept_id LEFT JOIN business_alert ba ON ba.dept_id = dc.dept_id
<include refid="searchSql"></include> <include refid="searchSql"></include>
GROUP BY GROUP BY
dc.dept_id,dc.dept_name dc.dept_id,dc.dept_name
</select> </select>
<!-- w_dk_business-->
<select id="heatList" resultType="org.dromara.business.domain.vo.BusinessAlertVo"> <select id="heatList" resultType="org.dromara.business.domain.vo.BusinessAlertVo">
SELECT SELECT
temp.label_en AS labelEn, temp.label_en AS labelEn,
@ -899,7 +929,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ba.label_en, ba.label_en,
ba.label_cn ba.label_cn
FROM FROM
dk_business.business_alert ba ${tbPrefix.tableBusiness}.business_alert ba
GROUP BY GROUP BY
ba.label_en, ba.label_cn ba.label_en, ba.label_cn
) temp ) temp

2
dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java

@ -60,6 +60,8 @@ public interface IControlService {
* @param param * @param param
* @return * @return
*/ */
HttpResultResponse seizeAuthorityCheck(String sn, DroneAuthorityEnum authority, DronePayloadParam param);
HttpResultResponse seizeAuthority(String sn, DroneAuthorityEnum authority, DronePayloadParam param); HttpResultResponse seizeAuthority(String sn, DroneAuthorityEnum authority, DronePayloadParam param);
/** /**

59
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java

@ -3,19 +3,18 @@ package org.dromara.sample.control.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.control.*;
import org.dromara.common.sdk.cloudapi.wayline.OutOfControlActionEnum; import org.dromara.common.sdk.cloudapi.wayline.OutOfControlActionEnum;
import org.dromara.common.sdk.cloudapi.wayline.TaskTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.TaskTypeEnum;
import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum;
import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum;
import org.dromara.sample.control.model.enums.PayloadCommandsEnum;
import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDevicePayloadService; import org.dromara.sample.manage.service.IDevicePayloadService;
import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.IDeviceService;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.cloudapi.control.FlyToPointRequest;
import org.dromara.common.sdk.cloudapi.control.PayloadAuthorityGrabRequest;
import org.dromara.common.sdk.cloudapi.control.TakeoffToPointRequest;
import org.dromara.common.sdk.cloudapi.control.api.AbstractControlService; import org.dromara.common.sdk.cloudapi.control.api.AbstractControlService;
import org.dromara.common.sdk.cloudapi.debug.DebugMethodEnum; import org.dromara.common.sdk.cloudapi.debug.DebugMethodEnum;
import org.dromara.common.sdk.cloudapi.debug.api.AbstractDebugService; import org.dromara.common.sdk.cloudapi.debug.api.AbstractDebugService;
@ -32,6 +31,8 @@ import org.dromara.sample.control.model.enums.DroneAuthorityEnum;
import org.dromara.sample.control.model.enums.RemoteDebugMethodEnum; import org.dromara.sample.control.model.enums.RemoteDebugMethodEnum;
import org.dromara.sample.control.model.param.*; import org.dromara.sample.control.model.param.*;
import org.dromara.sample.control.service.IControlService; import org.dromara.sample.control.service.IControlService;
import org.dromara.sample.media.model.MediaFileCountDTO;
import org.dromara.sample.media.service.IMediaRedisService;
import org.dromara.sample.wayline.mapper.IWaylineJobMapper; import org.dromara.sample.wayline.mapper.IWaylineJobMapper;
import org.dromara.sample.wayline.model.entity.WaylineJobEntity; import org.dromara.sample.wayline.model.entity.WaylineJobEntity;
import org.dromara.sample.wayline.model.enums.WaylineJobStatusEnum; import org.dromara.sample.wayline.model.enums.WaylineJobStatusEnum;
@ -41,10 +42,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.*;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import static org.dromara.common.sdk.cloudapi.device.RcLostActionEnum.RETURN_HOME; import static org.dromara.common.sdk.cloudapi.device.RcLostActionEnum.RETURN_HOME;
import static org.dromara.common.sdk.cloudapi.wayline.WaylineMethodEnum.RETURN_HOME_CANCEL; import static org.dromara.common.sdk.cloudapi.wayline.WaylineMethodEnum.RETURN_HOME_CANCEL;
@ -85,6 +83,9 @@ public class ControlServiceImpl implements IControlService {
@Autowired @Autowired
private IWaylineJobMapper waylineJobMapper; private IWaylineJobMapper waylineJobMapper;
@Autowired
private IMediaRedisService mediaRedisService;
private RemoteDebugHandler checkDebugCondition(String sn, RemoteDebugParam param, RemoteDebugMethodEnum controlMethodEnum) { private RemoteDebugHandler checkDebugCondition(String sn, RemoteDebugParam param, RemoteDebugMethodEnum controlMethodEnum) {
RemoteDebugHandler handler = Objects.nonNull(controlMethodEnum.getClazz()) ? RemoteDebugHandler handler = Objects.nonNull(controlMethodEnum.getClazz()) ?
mapper.convertValue(Objects.nonNull(param) ? param : new Object(), controlMethodEnum.getClazz()) mapper.convertValue(Objects.nonNull(param) ? param : new Object(), controlMethodEnum.getClazz())
@ -194,11 +195,18 @@ public class ControlServiceImpl implements IControlService {
waylineJobEntity.setUsername(loginUser.getUsername()); waylineJobEntity.setUsername(loginUser.getUsername());
waylineJobEntity.setExecuteTime(new Date()); waylineJobEntity.setExecuteTime(new Date());
waylineJobEntity.setBeginTime(new Date()); waylineJobEntity.setBeginTime(new Date());
waylineJobEntity.setStatus(WaylineJobStatusEnum.PENDING.getVal()); waylineJobEntity.setStatus(WaylineJobStatusEnum.SUCCESS.getVal());
waylineJobEntity.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME.getAction()); waylineJobEntity.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME.getAction());
waylineJobEntity.setRthAltitude(param.getRthAltitude()); waylineJobEntity.setRthAltitude(param.getRthAltitude());
waylineJobEntity.setMediaCount(0); waylineJobEntity.setMediaCount(0);
waylineJobEntity.setProId(dockOpt.get().getProId());
waylineJobEntity.setFileId("-1");
waylineJobEntity.setJobType(WaylineJobTypeEnum.INSTRUCT.getType()); waylineJobEntity.setJobType(WaylineJobTypeEnum.INSTRUCT.getType());
MediaFileCountDTO mediaFileCountDTO = new MediaFileCountDTO();
mediaFileCountDTO.setJobId(waylineJobEntity.getJobId());
mediaFileCountDTO.setDeviceSn(sn);
mediaFileCountDTO.setFileId("-1");
mediaRedisService.setMediaCount(sn, waylineJobEntity.getJobId(),mediaFileCountDTO);
TopicServicesResponse<ServicesReplyData> response = abstractControlService.takeoffToPoint( TopicServicesResponse<ServicesReplyData> response = abstractControlService.takeoffToPoint(
SDKManager.getDeviceSDK(sn), mapper.convertValue(param, TakeoffToPointRequest.class)); SDKManager.getDeviceSDK(sn), mapper.convertValue(param, TakeoffToPointRequest.class));
ServicesReplyData reply = response.getData(); ServicesReplyData reply = response.getData();
@ -212,6 +220,34 @@ public class ControlServiceImpl implements IControlService {
} }
@Override
public HttpResultResponse seizeAuthorityCheck(String sn, DroneAuthorityEnum authority, DronePayloadParam param) {
TopicServicesResponse<ServicesReplyData> response;
switch (authority) {
case FLIGHT:
// if (deviceService.checkAuthorityFlight(sn)) {
// return HttpResultResponse.success();
// }
response = abstractControlService.flightAuthorityGrab(SDKManager.getDeviceSDK(sn));
break;
case PAYLOAD:
// if (checkPayloadAuthority(sn, param.getPayloadIndex())) {
// return HttpResultResponse.success();
// }
response = abstractControlService.payloadAuthorityGrab(SDKManager.getDeviceSDK(sn),
new PayloadAuthorityGrabRequest().setPayloadIndex(new PayloadIndex(param.getPayloadIndex())));
break;
default:
return HttpResultResponse.error(CloudSDKErrorEnum.INVALID_PARAMETER);
}
ServicesReplyData serviceReply = response.getData();
return serviceReply.getResult().isSuccess() ?
HttpResultResponse.success()
: HttpResultResponse.error(serviceReply.getResult());
}
@Override @Override
public HttpResultResponse seizeAuthority(String sn, DroneAuthorityEnum authority, DronePayloadParam param) { public HttpResultResponse seizeAuthority(String sn, DroneAuthorityEnum authority, DronePayloadParam param) {
TopicServicesResponse<ServicesReplyData> response; TopicServicesResponse<ServicesReplyData> response;
@ -228,7 +264,7 @@ public class ControlServiceImpl implements IControlService {
return HttpResultResponse.success(); return HttpResultResponse.success();
} }
response = abstractControlService.payloadAuthorityGrab(SDKManager.getDeviceSDK(sn), response = abstractControlService.payloadAuthorityGrab(SDKManager.getDeviceSDK(sn),
new PayloadAuthorityGrabRequest().setPayloadIndex(new PayloadIndex(param.getPayloadIndex()))); new PayloadAuthorityGrabRequest().setPayloadIndex(new PayloadIndex(param.getPayloadIndex())));
break; break;
default: default:
return HttpResultResponse.error(CloudSDKErrorEnum.INVALID_PARAMETER); return HttpResultResponse.error(CloudSDKErrorEnum.INVALID_PARAMETER);
@ -236,8 +272,8 @@ public class ControlServiceImpl implements IControlService {
ServicesReplyData serviceReply = response.getData(); ServicesReplyData serviceReply = response.getData();
return serviceReply.getResult().isSuccess() ? return serviceReply.getResult().isSuccess() ?
HttpResultResponse.success() HttpResultResponse.success()
: HttpResultResponse.error(serviceReply.getResult()); : HttpResultResponse.error(serviceReply.getResult());
} }
private Boolean checkPayloadAuthority(String sn, String payloadIndex) { private Boolean checkPayloadAuthority(String sn, String payloadIndex) {
@ -260,6 +296,7 @@ public class ControlServiceImpl implements IControlService {
mapper.convertValue(param.getData(), param.getCmd().getCmd().getClazz())); mapper.convertValue(param.getData(), param.getCmd().getCmd().getClazz()));
ServicesReplyData serviceReply = response.getData(); ServicesReplyData serviceReply = response.getData();
return serviceReply.getResult().isSuccess() ? return serviceReply.getResult().isSuccess() ?
HttpResultResponse.success() HttpResultResponse.success()
: HttpResultResponse.error(serviceReply.getResult()); : HttpResultResponse.error(serviceReply.getResult());

2
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/PayloadCommandsHandler.java

@ -73,7 +73,7 @@ public abstract class PayloadCommandsHandler {
String deviceSn = checkDockOnline(dockSn); String deviceSn = checkDockOnline(dockSn);
checkDeviceOnline(deviceSn); checkDeviceOnline(deviceSn);
checkAuthority(deviceSn); //checkAuthority(deviceSn);
if (!canPublish(deviceSn)) { if (!canPublish(deviceSn)) {
throw new RuntimeException("无人机的当前状态不支持此功能,请稍后再试。"); throw new RuntimeException("无人机的当前状态不支持此功能,请稍后再试。");

1
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java

@ -69,6 +69,7 @@ public class SDKControlService extends AbstractControlService {
} }
TakeoffToPointProgress eventsReceiver = request.getData(); TakeoffToPointProgress eventsReceiver = request.getData();
webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(), webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(),
BizCodeEnum.TAKE_OFF_TO_POINT_PROGRESS.getCode(), BizCodeEnum.TAKE_OFF_TO_POINT_PROGRESS.getCode(),
ResultNotifyDTO.builder().sn(dockSn) ResultNotifyDTO.builder().sn(dockSn)

38
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java

@ -9,6 +9,8 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO; import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.IDeviceService;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -37,6 +39,10 @@ public class DeviceController {
@Autowired @Autowired
private IDeviceService deviceService; private IDeviceService deviceService;
@Autowired
private IDeviceRedisService deviceRedisService;
/** /**
* 获取一个工作区中所有在线设备的列表 * 获取一个工作区中所有在线设备的列表
* Get the topology list of all online devices in one workspace. * Get the topology list of all online devices in one workspace.
@ -45,8 +51,8 @@ public class DeviceController {
@GetMapping("/{workspace_id}/devices") @GetMapping("/{workspace_id}/devices")
@Operation(summary = "获取一个工作区中所有在线设备的列表。", description = "获取一个工作区中所有在线设备的列表") @Operation(summary = "获取一个工作区中所有在线设备的列表。", description = "获取一个工作区中所有在线设备的列表")
public HttpResultResponse<List<DeviceDTO>> getDevices(@PathVariable("workspace_id") String workspaceId, public HttpResultResponse<List<DeviceDTO>> getDevices(@PathVariable("workspace_id") String workspaceId,
@RequestParam(name = "nickname",required = false) String nickname) { @RequestParam(name = "nickname",required = false) String nickname,@RequestParam(name = "proIds",required = false) List<Integer> proIds) {
List<DeviceDTO> devicesList = deviceService.getDevicesTopoForWeb(workspaceId,nickname); List<DeviceDTO> devicesList = deviceService.getDevicesTopoForWeb(workspaceId,nickname,proIds);
return HttpResultResponse.success(devicesList); return HttpResultResponse.success(devicesList);
} }
@ -92,9 +98,9 @@ public class DeviceController {
@PathVariable("workspace_id") String workspaceId,Integer domain, @PathVariable("workspace_id") String workspaceId,Integer domain,
@RequestParam(name = "pageNum", defaultValue = "1") Long page, @RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@RequestParam(name = "nickname",required = false) String nickname) { @RequestParam(name = "nickname",required = false) String nickname,
LoginUser loginUser = LoginHelper.getLoginUser(); @RequestParam(name = "proIds",required = false) List<Integer> proIds) {
PaginationData<DeviceDTO> devices = deviceService.getBoundDevicesWithDomain(workspaceId, page, pageSize, domain,nickname); PaginationData<DeviceDTO> devices = deviceService.getBoundDevicesWithDomain(workspaceId, page, pageSize, domain,nickname,proIds);
return HttpResultResponse.success(devices); return HttpResultResponse.success(devices);
} }
@ -125,6 +131,28 @@ public class DeviceController {
@PathVariable("workspace_id") String workspaceId, @PathVariable("workspace_id") String workspaceId,
@PathVariable("device_sn") String deviceSn) { @PathVariable("device_sn") String deviceSn) {
device.setDeviceSn(deviceSn); device.setDeviceSn(deviceSn);
Optional<DeviceDTO> deviceOnline = deviceRedisService.getDeviceOnline(deviceSn);
if(deviceOnline.isPresent()){
deviceOnline.get().setNickname(device.getNickname());
deviceOnline.get().setProId(device.getProId());
if(deviceOnline.get().getChildren() != null){
deviceOnline.get().getChildren().setProId(device.getProId());
deviceOnline.get().getChildren().setNickname(device.getNickname()+"-"+ deviceOnline.get().getChildren().getDeviceName());
deviceService.updateDevice(deviceOnline.get().getChildren());
}
deviceRedisService.setDeviceOnline(deviceOnline.get());
}else {
Optional<DeviceDTO> deviceBySn = deviceService.getDeviceBySn(device.getDeviceSn());
Optional<DeviceDTO> deviceByChildSn = deviceService.getDeviceBySn(device.getChildDeviceSn());
if(deviceByChildSn.isPresent()){
deviceByChildSn.get().setProId(device.getProId());
deviceByChildSn.get().setNickname(device.getNickname()+"-"+ deviceBySn.get().getChildren().getDeviceName());
deviceService.updateDevice(deviceByChildSn.get());
}
}
boolean isUpd = deviceService.updateDevice(device); boolean isUpd = deviceService.updateDevice(device);
return isUpd ? HttpResultResponse.success() : HttpResultResponse.error(); return isUpd ? HttpResultResponse.success() : HttpResultResponse.error();
} }

59
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java

@ -40,8 +40,11 @@ import org.dromara.sample.manage.model.dto.*;
import org.dromara.sample.manage.model.entity.DeviceStreamEntity; import org.dromara.sample.manage.model.entity.DeviceStreamEntity;
import org.dromara.sample.manage.service.IDeviceStreamService; import org.dromara.sample.manage.service.IDeviceStreamService;
import org.dromara.sample.media.mapper.IFileMapper; import org.dromara.sample.media.mapper.IFileMapper;
import org.dromara.sample.wayline.model.dto.WaylineJobDTO;
import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.system.api.RemoteConfigService; import org.dromara.system.api.RemoteConfigService;
import org.json.JSONObject; import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -73,6 +76,8 @@ public class MegaphoneController {
@Resource @Resource
private ServicesPublish servicesPublish; private ServicesPublish servicesPublish;
@Autowired
private IWaylineJobService waylineJobService;
@Resource @Resource
PropertySetPublish propertySetPublish; PropertySetPublish propertySetPublish;
@ -268,6 +273,7 @@ public class MegaphoneController {
@RequestBody Map<String,Object>objectMap @RequestBody Map<String,Object>objectMap
) { ) {
String top = "task/image/disobey/smoke"; String top = "task/image/disobey/smoke";
String topTow = "task/image/disobey/streamType";
//发送mqtt //发送mqtt
String s = remoteConfigService.selectStreamIp(); String s = remoteConfigService.selectStreamIp();
DisobeyDTO param = Convert.convert(DisobeyDTO.class, objectMap); DisobeyDTO param = Convert.convert(DisobeyDTO.class, objectMap);
@ -298,6 +304,26 @@ public class MegaphoneController {
disobeyDTO.setRtmpUrl(param.getRtmpUrl()); disobeyDTO.setRtmpUrl(param.getRtmpUrl());
gatewayPublish.publish(top,new CommonTopicRequest<>() gatewayPublish.publish(top,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(disobeyDTO)),1); .setData(Objects.requireNonNull(disobeyDTO)),1);
Map<String,Object> map = new HashMap<>();
map.put("labelEn",type);
map.put("deviceSn",objectMap.get("deviceSn"));
if (Objects.isNull(objectMap.get("jobId"))){
map.put("jobId",objectMap.get("jobId"));
map.put("jobName",objectMap.get("jobName"));
}else {
Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobInternalId(objectMap.get("jobId").toString());
map.put("jobId",objectMap.get("jobId"));
if (!waylineJobDTO.isEmpty()){
map.put("jobName",waylineJobDTO.get().getJobName());
}else {
map.put("jobName",null);
}
}
StreamTypeDTO param1 = Convert.convert(StreamTypeDTO.class, map);
gatewayPublish.publish(topTow,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(param1)),1);
} }
} }
}else if (CollectionUtils.isNotEmpty(types) && split.length < types.size()){ }else if (CollectionUtils.isNotEmpty(types) && split.length < types.size()){
@ -336,8 +362,41 @@ public class MegaphoneController {
gatewayPublish.publish(top,new CommonTopicRequest<>() gatewayPublish.publish(top,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(disobeyDTO)),1); .setData(Objects.requireNonNull(disobeyDTO)),1);
Map<String,Object> map = new HashMap<>();
map.put("labelEn",type);
map.put("deviceSn",objectMap.get("deviceSn"));
if (Objects.isNull(objectMap.get("jobId"))){
map.put("jobId",objectMap.get("jobId"));
map.put("jobName",objectMap.get("jobName"));
}else {
Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobInternalId(objectMap.get("jobId").toString());
map.put("jobId",waylineJobDTO.get().getJobId());
map.put("jobName",waylineJobDTO.get().getJobName());
}
StreamTypeDTO param1 = Convert.convert(StreamTypeDTO.class, map);
gatewayPublish.publish(topTow,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(param1)),1);
} }
} }
}else {
if (CollectionUtils.isNotEmpty(types)){
//删数据
for (String type : types){
deviceStreamMapper.delete(new QueryWrapper<DeviceStreamEntity>().eq("rtmp_url", param.getRtmpUrl())
.eq("stream_type", type));
List<String> list = new ArrayList<>();
list.add(type);
DisobeyDTO disobeyDTO = new DisobeyDTO();
disobeyDTO.setUrl(s);
disobeyDTO.setOpen(2);
disobeyDTO.setType(list);
disobeyDTO.setRtmpUrl(param.getRtmpUrl());
gatewayPublish.publish(top,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(disobeyDTO)),1);
}
}else {
}
} }
} }
if (param.getOpen() == 2){ if (param.getOpen() == 2){

77
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/SampleEngineRecordController.java

@ -0,0 +1,77 @@
package org.dromara.sample.manage.controller;
import com.alibaba.nacos.common.utils.CollectionUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.sample.manage.model.dto.CallBackDTO;
import org.dromara.sample.manage.model.dto.EventsDTO;
import org.dromara.sample.manage.model.entity.WarningRecordEntity;
import org.dromara.sample.manage.service.ISampleEngineRecordService;
import org.dromara.sample.manage.service.ISampleWarningRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/15
*/
@RestController
@Slf4j
@RequestMapping("${url.manage.prefix}${url.manage.version}/saEngineRecord")
@Tag(name = "无人机设备模块")
public class SampleEngineRecordController {
@Autowired
private ISampleEngineRecordService sampleEngineRecordService;
@Autowired
private ISampleWarningRecordService sampleWarningRecordService;
/**
* 启动星罗引擎
* Get the topology list of all online devices in one workspace.
* @return
*/
@PostMapping("/startEngine")
@Operation(summary = "启动星罗引擎。", description = "启动星罗引擎")
public HttpResultResponse<Map<String,Object>> startEngine(@RequestBody Map<String,Object> objectMap) {
return HttpResultResponse.success(sampleEngineRecordService.startEngine(objectMap));
}
@PostMapping("/closeEngine")
@Operation(summary = "关闭星罗引擎。", description = "关闭星罗引擎")
public HttpResultResponse closeEngine(@RequestBody Map<String,Object> objectMap) {
sampleEngineRecordService.closeEngine(objectMap);
return HttpResultResponse.success();
}
@PostMapping("/some")
@Operation(summary = "存储推流的预警(对外接口)。", description = "存储推流的预警(对外接口)。")
public void some(@RequestBody CallBackDTO callBackVo){
WarningRecordEntity warningRecord = new WarningRecordEntity();
List<WarningRecordEntity> 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);
}
sampleWarningRecordService.saveBatch(list);
System.out.println(callBackVo);
}
}
}

9
dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/ISampleEngineRecordMapper.java

@ -0,0 +1,9 @@
package org.dromara.sample.manage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.dromara.sample.manage.model.entity.EngineRecordEntity;
import org.mapstruct.Mapper;
public interface ISampleEngineRecordMapper extends BaseMapper<EngineRecordEntity> {
}

15
dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/ITaskJobMapper.java

@ -0,0 +1,15 @@
package org.dromara.sample.manage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.dromara.sample.manage.model.entity.PlayTextEntity;
import org.dromara.sample.manage.model.entity.TaskJobEntity;
/**
*
* @author sean.zhou
* @date 2021/11/10
* @version 0.1
*/
public interface ITaskJobMapper extends BaseMapper<TaskJobEntity> {
}

18
dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/SampleWarningRecordMapper.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 SampleWarningRecordMapper extends BaseMapper<WarningRecordEntity> {
}

212
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/BusinessAlertVo.java

@ -0,0 +1,212 @@
package org.dromara.sample.manage.model.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 预警任务视图对象 wayline_alert
*
* @author LionLi
* @date 2025-02-27
*/
@Data
@ExcelIgnoreUnannotated
public class BusinessAlertVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
private Long id;
/**
* job任务id
*/
private String jobId;
/**
* 预警名称
*/
private String jobName;
/**
* 图片id 对应的media_file 的fileId
*/
private String taskImageId;
/**
* 处理原因
*/
private String reason;
/**
* 是否指派
*/
private Boolean assign;
/**
* 图片文件
*/
private String images;
/**
* 纬度
*/
private String lat;
/**
* 精度
*/
private String lng;
/**
* 标签名-
*/
private String labelCn;
/**
* 标签名-
*/
private String labelEn;
/**
* 任务内容
*/
private String taskContent;
/**
* 删除 0 正常 1已删除
*/
private Integer delFlag;
/**
* 模板图片
*/
private String mateSourceImgUrl;
/**
* 放大模板违建区域图片
*/
private String maxMateSourceImgUrl;
/**
* 预警类型
*/
private String alertType;
/**
* 放大违建区域图片
*/
private String maxImages;
/**
* 面积
*/
private Long area;
/**
* 面积
*/
private Long areaL;
/**
* 面积
*/
private Long areaW;
/**
* 流程处置状态(verify:验证,cancel:已撤销,draft:草稿,waiting:待审核,finish:已完成,invalid:已作废,back:已退回,termination:已终止)
*/
private String handleType;
/**
* 指派人员
*/
private String assignUserId;
/**
* 指派时间
*/
private Date assignDate;
/**
* 完成时间
*/
private Date completeDate;
/**
* 是否违建 01
*/
private Boolean isIllegal;
/**
* 部门id
*/
private String deptId;
/**
* 部门名称
*/
private String deptName;
/**
* 处理时间
*/
private Date handleTime;
/**
* 其他内容
*/
private String taskHandle;
/**
* 像素坐标
*/
private String pixelCoordinate;
/**
* 当前位置预警数量
*/
private Integer handleNum;
/**
* 地类信息数据
*/
private String landCategories;
/**
* 忽略原因
*/
private String ignoringCause;
private Integer value;
/**
* 来源0平台 1小程序
*/
private Integer handleSource;
/**
* 指派人员名称
*/
private String assignUserName;
private Date createTime;
//1:图片比对预警 2:AI实时预警
private Integer businessType;
private String deviceSn;
/**
* 案件号
*/
private String caseNumber;
}

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java

@ -102,7 +102,7 @@ public class DeviceDTO {
private String tenantId; private String tenantId;
@Schema(description = "项目ID") @Schema(description = "项目ID")
private String proId; private Integer proId;
@Schema(description = "项目ID") @Schema(description = "项目ID")
private DeviceProEntity deviceProEntity; private DeviceProEntity deviceProEntity;

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceQrtzDTO.java

@ -96,4 +96,6 @@ public class DeviceQrtzDTO {
private String deptName; private String deptName;
private List<Long>deptIds; private List<Long>deptIds;
private List<Integer> proIds;
} }

30
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EngineType.java

@ -0,0 +1,30 @@
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 EngineType implements Serializable {
private String scene;
private int id;
}

30
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/EngineTypeResponse.java

@ -0,0 +1,30 @@
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 EngineTypeResponse implements Serializable {
private Long code;
private String message;
private EngineType data;
}

9
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java

@ -92,4 +92,13 @@ public class DeviceEntity implements Serializable {
@TableField(value = "pro_id") @TableField(value = "pro_id")
private Integer proId; private Integer proId;
@TableField(value = "latitude")
private Float latitude;
@TableField(value = "longitude")
private Float longitude;
@TableField(value = "height")
private Float height;
} }

33
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/TaskJobEntity.java

@ -0,0 +1,33 @@
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.util.Date;
/**
* The entity class of the device
*
* @author sean.zhou
* @version 0.1
* @date 2021/11/10
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "task_job")
public class TaskJobEntity implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
private String taskId;
private String jobId;
}

18
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WarningRecordEntity.java

@ -30,26 +30,18 @@ public class WarningRecordEntity implements Serializable {
private String taskId; private String taskId;
@TableField(value = "algo_id") @TableField(value = "algo_id")
//算法 id") private Integer algoId; //算法 id")
private Integer algoId;
@TableField(value = "extra_type") @TableField(value = "extra_type")
//算法类型字符串") private String extraType; //算法类型字符串")
private String extraType;
@TableField(value = "event_id") @TableField(value = "event_id")
//分配的事件 id") private String eventId;//分配的事件 id")
private String eventId;
@TableField(value = "pic_url") @TableField(value = "pic_url")
//保存后图片的 url") private String picUrl;//保存后图片的 url")
private String picUrl;
@TableField(value = "timestamp") @TableField(value = "timestamp")
//事件时间戳,单位:毫秒") private Integer timestamp;//事件时间戳,单位:毫秒")
private Integer timestamp;
} }

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceQueryParam.java

@ -35,4 +35,6 @@ public class DeviceQueryParam {
private boolean orderBy; private boolean orderBy;
private boolean isAsc; private boolean isAsc;
private List<Integer> proIds;
} }

4
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java

@ -68,7 +68,7 @@ public interface IDeviceService {
* @param workspaceId * @param workspaceId
* @return * @return
*/ */
List<DeviceDTO> getDevicesTopoForWeb(String workspaceId,String nickname); List<DeviceDTO> getDevicesTopoForWeb(String workspaceId,String nickname,List<Integer> proIds);
/** /**
@ -131,7 +131,7 @@ public interface IDeviceService {
* @param domain * @param domain
* @return * @return
*/ */
PaginationData<DeviceDTO> getBoundDevicesWithDomain(String workspaceId, Long page, Long pageSize, Integer domain,String nickname); PaginationData<DeviceDTO> getBoundDevicesWithDomain(String workspaceId, Long page, Long pageSize, Integer domain,String nickname,List<Integer> proIds);
/** /**
* Unbind device base on device's sn. * Unbind device base on device's sn.

9
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/ISampleEngineRecordService.java

@ -0,0 +1,9 @@
package org.dromara.sample.manage.service;
import java.util.Map;
public interface ISampleEngineRecordService {
Map<String,Object> startEngine(Map<String,Object> objectMap);
void closeEngine(Map<String,Object> objectMap);
}

8
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/ISampleWarningRecordService.java

@ -0,0 +1,8 @@
package org.dromara.sample.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.sample.manage.model.entity.WarningRecordEntity;
public interface ISampleWarningRecordService extends IService<WarningRecordEntity> {
}

15
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/ITaskJobService.java

@ -0,0 +1,15 @@
package org.dromara.sample.manage.service;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.model.entity.PlayTextEntity;
import java.util.Map;
/**
* @author sean.zhou
* @date 2021/11/10
* @version 0.1
*/
public interface ITaskJobService {
}

106
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java

@ -154,12 +154,7 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
@Override @Override
public Boolean add( DeviceQrtzDTO deviceQrtzDTO) { public Boolean add( DeviceQrtzDTO deviceQrtzDTO) {
if(!CollectionUtils.isEmpty(deviceQrtzDTO.getDeviceQrtzDates())){
deviceQrtzDTO.getDeviceQrtzDates().forEach(e->{
e.setQrtzId(deviceQrtzDTO.getId());
deviceQrtzDateMapper.insert(e);
});
}
DeviceQrtzEntity entity = new DeviceQrtzEntity(); DeviceQrtzEntity entity = new DeviceQrtzEntity();
entity.setDeviceSn(deviceQrtzDTO.getDeviceSn()); entity.setDeviceSn(deviceQrtzDTO.getDeviceSn());
entity.setName(deviceQrtzDTO.getName()); entity.setName(deviceQrtzDTO.getName());
@ -169,7 +164,14 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
entity.setNickName(loginUser.getNickname()); entity.setNickName(loginUser.getNickname());
entity.setCreateDept(loginUser.getDeptId()); entity.setCreateDept(loginUser.getDeptId());
entity.setDeptName(loginUser.getDeptName()); entity.setDeptName(loginUser.getDeptName());
return deviceQrtzMapper.insert(entity)>0; int insert = deviceQrtzMapper.insert(entity);
if(!CollectionUtils.isEmpty(deviceQrtzDTO.getDeviceQrtzDates())){
deviceQrtzDTO.getDeviceQrtzDates().forEach(e->{
e.setQrtzId(entity.getId());
deviceQrtzDateMapper.insert(e);
});
}
return insert>0;
} }
@Override @Override
@ -190,7 +192,7 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
int sort=1; int sort=1;
Long qrtzId = Convert.toLong(map.get("qrtzId")); Long qrtzId = Convert.toLong(map.get("qrtzId"));
String deviceSn = Convert.toStr(map.get("deviceSn")); String deviceSn = Convert.toStr(map.get("deviceSn"));
Date execDate = Convert.toDate(map.get("execDate")); Date execDate = Convert.toDate(map.get("execDate"),new Date());
String waylineIdStr = Convert.toStr(map.get("waylineIdStr")); String waylineIdStr = Convert.toStr(map.get("waylineIdStr"));
List<DeviceQrtzFileEntity> selectList = deviceQrtzFileMapper.selectList(new QueryWrapper<DeviceQrtzFileEntity>() List<DeviceQrtzFileEntity> selectList = deviceQrtzFileMapper.selectList(new QueryWrapper<DeviceQrtzFileEntity>()
.eq("qrtz_id", qrtzId).eq("exec_date",execDate).orderByDesc("sort")); .eq("qrtz_id", qrtzId).eq("exec_date",execDate).orderByDesc("sort"));
@ -282,7 +284,6 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
if (RedisOpsUtils.checkExist(device.getDeviceSn())) { if (RedisOpsUtils.checkExist(device.getDeviceSn())) {
return; return;
} }
RedisOpsUtils.setWithExpire(device.getDeviceSn(), device, 180);
List<DeviceQrtzEntity> qrtzEntityList = deviceQrtzMapper.selectList(new LambdaQueryWrapper<DeviceQrtzEntity>().eq(DeviceQrtzEntity::getDeviceSn, device.getDeviceSn()).eq(DeviceQrtzEntity::getStatus, DeviceQrtzConstants.QRTZ_STATUS_1)); List<DeviceQrtzEntity> qrtzEntityList = deviceQrtzMapper.selectList(new LambdaQueryWrapper<DeviceQrtzEntity>().eq(DeviceQrtzEntity::getDeviceSn, device.getDeviceSn()).eq(DeviceQrtzEntity::getStatus, DeviceQrtzConstants.QRTZ_STATUS_1));
if(!qrtzEntityList.isEmpty()){ if(!qrtzEntityList.isEmpty()){
// 获取当前日期 // 获取当前日期
@ -292,57 +293,64 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
DateTimeFormatter formatterS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatterS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化当前日期 // 格式化当前日期
String formattedDate = currentDate.format(formatter); String formattedDate = currentDate.format(formatter);
List<DeviceQrtzFileEntity> qrtzFileEntityList = deviceQrtzFileMapper.selectList(new QueryWrapper<DeviceQrtzFileEntity>().eq("device_sn", qrtzEntityList.get(0).getDeviceSn()).eq("exec_date", formattedDate).eq("qrtz_id",qrtzEntityList.get(0).getId()).eq("status", DeviceQrtzConstants.QRTZ_FILE_STATUS_1).orderByAsc("sort")); for (DeviceQrtzEntity deviceQrtzEntity : qrtzEntityList) {
if (!qrtzFileEntityList.isEmpty()) { List<DeviceQrtzDateEntity> qrtzDateEntityList = deviceQrtzDateMapper.listDeviceQrtzDateByQrtzAndDate(deviceQrtzEntity.getId());
DeviceQrtzFileEntity deviceQrtzFileEntity = qrtzFileEntityList.get(0); //判断下是否有时间
List<DeviceQrtzDateEntity> qrtzDateEntityList = deviceQrtzDateMapper.listDeviceQrtzDateByQrtzAndDate(deviceQrtzFileEntity.getQrtzId()); if(!qrtzDateEntityList.isEmpty()){
if (!qrtzDateEntityList.isEmpty()) { //遍历,当前时间是否在范围内
// 获取当前日期和时间
for (DeviceQrtzDateEntity qrtzDate : qrtzDateEntityList) { for (DeviceQrtzDateEntity qrtzDate : qrtzDateEntityList) {
//在里面执行航线,进行无人机飞行
if (!currentDate.isBefore(Convert.toLocalDateTime(qrtzDate.getStartDate())) && !currentDate.isAfter(Convert.toLocalDateTime(qrtzDate.getEndDate()))) { if (!currentDate.isBefore(Convert.toLocalDateTime(qrtzDate.getStartDate())) && !currentDate.isAfter(Convert.toLocalDateTime(qrtzDate.getEndDate()))) {
//获取航线数据发送之类 List<DeviceQrtzFileEntity> qrtzFileEntityList = deviceQrtzFileMapper.selectList(new QueryWrapper<DeviceQrtzFileEntity>().eq("device_sn",deviceQrtzEntity.getDeviceSn()).eq("exec_date", formattedDate).eq("qrtz_id",deviceQrtzEntity.getId()).eq("status", DeviceQrtzConstants.QRTZ_FILE_STATUS_1).orderByAsc("sort"));
WaylineFileEntity waylineFileEntity = waylineFileMapper.selectOne(new LambdaQueryWrapper<WaylineFileEntity>().eq(WaylineFileEntity::getWaylineId, deviceQrtzFileEntity.getWaylineId())); if(!qrtzFileEntityList.isEmpty()){
if (waylineFileEntity == null) { DeviceQrtzFileEntity deviceQrtzFileEntity = qrtzFileEntityList.get(0);
//更改为异常,当前航线不存在 //获取航线数据发送之类
deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_0); WaylineFileEntity waylineFileEntity = waylineFileMapper.selectOne(new LambdaQueryWrapper<WaylineFileEntity>().eq(WaylineFileEntity::getWaylineId, deviceQrtzFileEntity.getWaylineId()));
deviceQrtzFileMapper.updateById(deviceQrtzFileEntity); if (waylineFileEntity == null) {
continue; //更改为异常,当前航线不存在
} deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_0);
//获取是否是工单航线,是修改状态
remoteBusinessTaskFeign.updateTaskStatus(deviceQrtzFileEntity.getWaylineId(), BusinessConstants.TASK_STATUS_2, null, null);
CreateJobParam createJobParam = new CreateJobParam();
try {
createJobParam.setName(deviceQrtzFileEntity.getWaylineName() + "" + currentDate.format(formatterS));
createJobParam.setWaylineName(deviceQrtzFileEntity.getWaylineName());
createJobParam.setFileId(deviceQrtzFileEntity.getWaylineId());
createJobParam.setDockSn(device.getDeviceSn());
createJobParam.setWaylineType(WaylineTypeEnum.find(Integer.parseInt(waylineFileEntity.getTemplateTypes())));
createJobParam.setTaskType(TaskTypeEnum.IMMEDIATE);
createJobParam.setJobId(UUID.randomUUID().toString());
//createJobParam.setRthAltitude();
createJobParam.setMinBatteryCapacity(50);
createJobParam.setJobType(WaylineJobTypeEnum.WISDOM_TASK);
createJobParam.setWaylinePrecisionType(WaylinePrecisionTypeEnum.RTK);
createJobParam.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME);
createJobParam.setRthAltitude(120);
HttpResultResponse httpResultResponse = flightTaskService.publishFlightTask(device.getWorkspaceId(), createJobParam, deviceQrtzFileEntity.getNickName());
if(httpResultResponse.getCode() == 0){
deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_2);
deviceQrtzFileEntity.setFlightDate(new Date());
deviceQrtzFileMapper.updateById(deviceQrtzFileEntity); deviceQrtzFileMapper.updateById(deviceQrtzFileEntity);
continue; continue;
} }
deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_0); //获取是否是工单航线,是修改状态
deviceQrtzFileMapper.updateById(deviceQrtzFileEntity); remoteBusinessTaskFeign.updateTaskStatus(deviceQrtzFileEntity.getWaylineId(), BusinessConstants.TASK_STATUS_2, null, null);
} catch (Exception e) { CreateJobParam createJobParam = new CreateJobParam();
e.printStackTrace(); try {
createJobParam.setName(deviceQrtzFileEntity.getWaylineName() + "" + currentDate.format(formatterS));
createJobParam.setWaylineName(deviceQrtzFileEntity.getWaylineName());
createJobParam.setFileId(deviceQrtzFileEntity.getWaylineId());
createJobParam.setDockSn(device.getDeviceSn());
createJobParam.setWaylineType(WaylineTypeEnum.find(Integer.parseInt(waylineFileEntity.getTemplateTypes())));
createJobParam.setTaskType(TaskTypeEnum.IMMEDIATE);
createJobParam.setJobId(UUID.randomUUID().toString());
//createJobParam.setRthAltitude();
createJobParam.setMinBatteryCapacity(50);
createJobParam.setJobType(WaylineJobTypeEnum.WISDOM_TASK);
createJobParam.setWaylinePrecisionType(WaylinePrecisionTypeEnum.RTK);
createJobParam.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME);
createJobParam.setRthAltitude(120);
HttpResultResponse httpResultResponse = flightTaskService.publishFlightTask(device.getWorkspaceId(), createJobParam, deviceQrtzFileEntity.getNickName());
if(httpResultResponse.getCode() == 0){
deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_2);
deviceQrtzFileEntity.setFlightDate(new Date());
deviceQrtzFileMapper.updateById(deviceQrtzFileEntity);
continue;
}
deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_0);
deviceQrtzFileMapper.updateById(deviceQrtzFileEntity);
RedisOpsUtils.setWithExpire(device.getDeviceSn(), device, 180);
return;
} catch (Exception e) {
e.printStackTrace();
}
} }
} }
} }
} }
} }
} }

46
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java

@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.firmware.*; import org.dromara.common.sdk.cloudapi.firmware.*;
import org.dromara.common.sdk.cloudapi.firmware.api.AbstractFirmwareService; import org.dromara.common.sdk.cloudapi.firmware.api.AbstractFirmwareService;
import org.dromara.common.sdk.cloudapi.livestream.VideoTypeEnum;
import org.dromara.common.sdk.cloudapi.property.api.AbstractPropertyService; import org.dromara.common.sdk.cloudapi.property.api.AbstractPropertyService;
import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl; import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl;
import org.dromara.common.sdk.cloudapi.tsa.TopologyDeviceModel; import org.dromara.common.sdk.cloudapi.tsa.TopologyDeviceModel;
@ -45,6 +47,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.sample.websocket.service.IWebSocketMessageService; import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -58,6 +61,9 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; 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.zhou * @author sean.zhou
@ -132,6 +138,9 @@ public class DeviceServiceImpl implements IDeviceService {
@Autowired @Autowired
private IDeviceProMapper deviceProMapper; private IDeviceProMapper deviceProMapper;
@Autowired
private IDeviceProService deviceProService;
@Override @Override
public void subDeviceOffline(String deviceSn) { public void subDeviceOffline(String deviceSn) {
// If no information about this device exists in the cache, the drone is considered to be offline. // If no information about this device exists in the cache, the drone is considered to be offline.
@ -221,21 +230,28 @@ public class DeviceServiceImpl implements IDeviceService {
} }
}) })
.eq(StringUtils.hasText(param.getWorkspaceId()), .eq(StringUtils.hasText(param.getWorkspaceId()),
DeviceEntity::getWorkspaceId, param.getWorkspaceId()) DeviceEntity::getWorkspaceId, param.getWorkspaceId())
.eq(param.getBoundStatus() != null, DeviceEntity::getBoundStatus, param.getBoundStatus()) .eq(param.getBoundStatus() != null, DeviceEntity::getBoundStatus, param.getBoundStatus())
.in(ObjectUtil.isAllNotEmpty(param.getProIds()),
DeviceEntity::getProId, param.getProIds())
.orderBy(param.isOrderBy(), .orderBy(param.isOrderBy(),
param.isAsc(), DeviceEntity::getId)) param.isAsc(), DeviceEntity::getId))
.stream() .stream()
.map(this::deviceEntityConvertToDTO) .map(this::deviceEntityConvertToDTO)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@Override @Override
public List<DeviceDTO> getDevicesTopoForWeb(String workspaceId,String nickname) { public List<DeviceDTO> getDevicesTopoForWeb(String workspaceId,String nickname,List<Integer> proIds) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(proIds == null){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
List<DeviceDTO> devicesList = this.getDevicesByParams( List<DeviceDTO> devicesList = this.getDevicesByParams(
DeviceQueryParam.builder() DeviceQueryParam.builder()
.workspaceId(workspaceId) .workspaceId(workspaceId)
.domains(List.of(DeviceDomainEnum.REMOTER_CONTROL.getDomain(), DeviceDomainEnum.DOCK.getDomain())) .domains(List.of(DeviceDomainEnum.REMOTER_CONTROL.getDomain(), DeviceDomainEnum.DOCK.getDomain()))
.proIds(proIds)
.build()); .build());
devicesList.stream() devicesList.stream()
@ -258,14 +274,15 @@ public class DeviceServiceImpl implements IDeviceService {
DeviceDTO subDevice = getDevicesByParams(DeviceQueryParam.builder().deviceSn(gateway.getChildDeviceSn()).build()).get(0); DeviceDTO subDevice = getDevicesByParams(DeviceQueryParam.builder().deviceSn(gateway.getChildDeviceSn()).build()).get(0);
subDevice.setStatus(deviceRedisService.checkDeviceOnline(subDevice.getDeviceSn())); subDevice.setStatus(deviceRedisService.checkDeviceOnline(subDevice.getDeviceSn()));
List<CapacityCameraDTO> capacityCameraByDeviceSn = capacityCameraService.getCapacityCameraByDeviceSn(gateway.getChildDeviceSn()); /*List<CapacityCameraDTO> capacityCameraByDeviceSn = capacityCameraService.getCapacityCameraByDeviceSn(gateway.getChildDeviceSn());
String videoId = ""; String videoId = "";
if(capacityCameraByDeviceSn != null && capacityCameraByDeviceSn.size() > 0 ){ if(capacityCameraByDeviceSn != null && capacityCameraByDeviceSn.size() > 0 ){
if(capacityCameraByDeviceSn.get(0).getVideosList().size() > 0){ if(capacityCameraByDeviceSn.get(0).getVideosList().size() > 0){
videoId = gateway.getChildDeviceSn() + "/" + capacityCameraByDeviceSn.get(0).getIndex() + "/" + capacityCameraByDeviceSn.get(0).getVideosList().get(0).getIndex(); videoId = gateway.getChildDeviceSn() + "/" + capacityCameraByDeviceSn.get(0).getIndex() + "/" + capacityCameraByDeviceSn.get(0).getVideosList().get(0).getIndex();
} }
} }*/
subDevice.setVideoId(videoId); String deviceVideoEnum = DeviceVideoEnum.find(subDevice.getDeviceName()).getDevice();
subDevice.setVideoId(new VideoId(subDevice.getDeviceSn()+SLASH+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL.getType() + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()).toString());
gateway.setChildren(subDevice); gateway.setChildren(subDevice);
// gateway.setVideoId(DeviceEnum.videoId); // gateway.setVideoId(DeviceEnum.videoId);
// payloads // payloads
@ -405,13 +422,17 @@ public class DeviceServiceImpl implements IDeviceService {
.map(WorkspaceDTO::getWorkspaceName).orElse("") : "") .map(WorkspaceDTO::getWorkspaceName).orElse("") : "")
.firmwareStatus(DeviceFirmwareStatusEnum.NOT_UPGRADE) .firmwareStatus(DeviceFirmwareStatusEnum.NOT_UPGRADE)
.videoId(dockVideoId) .videoId(dockVideoId)
.thingVersion(entity.getVersion()).proId(ObjectUtil.isNotEmpty(entity.getProId())?String.valueOf(entity.getProId()):"").build(); .proId(ObjectUtil.isNotEmpty(entity.getProId())?entity.getProId():null)
.latitude(entity.getLatitude())
.longitude(entity.getLongitude())
.height(entity.getHeight())
.thingVersion(entity.getVersion()).build();
} catch (CloudSDKException e) { } catch (CloudSDKException e) {
log.error(e.getLocalizedMessage() + "Entity: {}", entity); log.error(e.getLocalizedMessage() + "Entity: {}", entity);
} }
DeviceDTO deviceDTO = builder.build(); DeviceDTO deviceDTO = builder.build();
if(deviceDTO.getDomain() != null && deviceDTO.getDomain().getDomain() == 3 && deviceDTO.getLatitude() != null){ if(deviceDTO.getDomain() != null && deviceDTO.getDomain().getDomain() == 3 && deviceDTO.getLatitude() != null){
Optional<OsdDockDrone> deviceOsd = deviceRedisService.getDeviceOsd(entity.getDeviceSn(), OsdDockDrone.class); Optional<OsdDock> deviceOsd = deviceRedisService.getDeviceOsd(entity.getDeviceSn(), OsdDock.class);
if(!deviceOsd.isEmpty()){ if(!deviceOsd.isEmpty()){
deviceDTO.setLatitude(deviceOsd.get().getLatitude()); deviceDTO.setLatitude(deviceOsd.get().getLatitude());
deviceDTO.setLongitude(deviceOsd.get().getLongitude()); deviceDTO.setLongitude(deviceOsd.get().getLongitude());
@ -495,13 +516,14 @@ public class DeviceServiceImpl implements IDeviceService {
@Override @Override
public PaginationData<DeviceDTO> getBoundDevicesWithDomain(String workspaceId, Long page, public PaginationData<DeviceDTO> getBoundDevicesWithDomain(String workspaceId, Long page,
Long pageSize, Integer domain,String nickname) { Long pageSize, Integer domain,String nickname,List<Integer> proIds) {
Page<DeviceEntity> pagination = mapper.selectPage(new Page<>(page, pageSize), Page<DeviceEntity> pagination = mapper.selectPage(new Page<>(page, pageSize),
new LambdaQueryWrapper<DeviceEntity>() new LambdaQueryWrapper<DeviceEntity>()
.eq(DeviceEntity::getDomain, domain) .eq(DeviceEntity::getDomain, domain)
.eq(DeviceEntity::getWorkspaceId, workspaceId) .eq(DeviceEntity::getWorkspaceId, workspaceId)
.eq(DeviceEntity::getBoundStatus, true) .eq(DeviceEntity::getBoundStatus, true)
.in(ObjectUtil.isAllNotEmpty(proIds),DeviceEntity::getProId, proIds)
.eq(org.dromara.common.core.utils.StringUtils.isNotEmpty(nickname),DeviceEntity::getNickname,nickname)); .eq(org.dromara.common.core.utils.StringUtils.isNotEmpty(nickname),DeviceEntity::getNickname,nickname));
List<DeviceDTO> devicesList = pagination.getRecords().stream().map(this::deviceEntityConvertToDTO) List<DeviceDTO> devicesList = pagination.getRecords().stream().map(this::deviceEntityConvertToDTO)
.peek(device -> { .peek(device -> {
@ -728,7 +750,11 @@ public class DeviceServiceImpl implements IDeviceService {
.firmwareVersion(dto.getFirmwareVersion()) .firmwareVersion(dto.getFirmwareVersion())
.compatibleStatus(dto.getFirmwareStatus() == null ? null : .compatibleStatus(dto.getFirmwareStatus() == null ? null :
DeviceFirmwareStatusEnum.CONSISTENT_UPGRADE != dto.getFirmwareStatus()) DeviceFirmwareStatusEnum.CONSISTENT_UPGRADE != dto.getFirmwareStatus())
.deviceDesc(dto.getDeviceDesc()).proId(ObjectUtil.isNotEmpty(dto.getProId())?Integer.valueOf(dto.getProId()):null) .deviceDesc(dto.getDeviceDesc())
.latitude(dto.getLatitude())
.longitude(dto.getLongitude())
.height(dto.getHeight())
.proId(dto.getProId() == null ? null : dto.getProId())
.build(); .build();
} }
} }

4
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java

@ -139,7 +139,7 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
default: default:
return HttpResultResponse.error(LiveErrorCodeEnum.URL_TYPE_NOT_SUPPORTED); return HttpResultResponse.error(LiveErrorCodeEnum.URL_TYPE_NOT_SUPPORTED);
} }
DeviceEntity deviceBySn = deviceService.getDeviceByChildSn(liveParam.getVideoId().getDroneSn()); /* DeviceEntity deviceBySn = deviceService.getDeviceByChildSn(liveParam.getVideoId().getDroneSn());
if(deviceBySn != null){ if(deviceBySn != null){
Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceBySn.getDeviceSn()); Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceBySn.getDeviceSn());
@ -172,7 +172,7 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
} }
} }
} }*/
// MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",liveParam.getVideoId().getDroneSn(),liveParam.getVideoId().toString()); // MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",liveParam.getVideoId().getDroneSn(),liveParam.getVideoId().toString());
return HttpResultResponse.success(live); return HttpResultResponse.success(live);

14
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java

@ -3,6 +3,7 @@ package org.dromara.sample.manage.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.dromara.common.redis.utils.RedisOpsUtils; import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.rocketmq.producer.MessageProducerUtil; import org.dromara.common.rocketmq.producer.MessageProducerUtil;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.device.api.AbstractDeviceService; import org.dromara.common.sdk.cloudapi.device.api.AbstractDeviceService;
import org.dromara.common.sdk.cloudapi.livestream.VideoTypeEnum; import org.dromara.common.sdk.cloudapi.livestream.VideoTypeEnum;
@ -41,6 +42,8 @@ import java.util.stream.Collectors;
import static org.dromara.common.core.utils.StringUtils.DASH; import static org.dromara.common.core.utils.StringUtils.DASH;
import static org.dromara.common.core.utils.StringUtils.SLASH; import static org.dromara.common.core.utils.StringUtils.SLASH;
import static org.dromara.common.core.constant.Constants.FLY_COUNT;
/** /**
* @author sean * @author sean
* @version 1.7 * @version 1.7
@ -159,10 +162,15 @@ public class SDKDeviceService extends AbstractDeviceService {
if(request.getData().getMediaFileDetail() != null){ if(request.getData().getMediaFileDetail() != null){
RedisOpsUtils.hashSet("updateMediaFileDetail",from,request.getData().getMediaFileDetail().getRemainUpload()); RedisOpsUtils.hashSet("updateMediaFileDetail",from,request.getData().getMediaFileDetail().getRemainUpload());
} }
if( deviceRedisService.getDeviceOsd(deviceOpt.get().getChildDeviceSn(),OsdDockDrone.class).isEmpty() && deviceRedisService.checkDeviceVideo(deviceOpt.get().getChildDeviceSn())){
deviceRedisService.delDeviceVideo(deviceOpt.get().getChildDeviceSn());
}
DeviceDTO device = deviceOpt.get(); DeviceDTO device = deviceOpt.get();
if(request.getData().getLatitude() != null && request.getData().getLongitude() != null
&& ((deviceOpt.get().getLatitude() == null && deviceOpt.get().getLongitude() == null)) || (request.getData().getLatitude() != deviceOpt.get().getLatitude() && request.getData().getLongitude() != deviceOpt.get().getLongitude())){
deviceOpt.get().setLatitude(request.getData().getLatitude());
deviceOpt.get().setLongitude(request.getData().getLongitude());
deviceOpt.get().setHeight(request.getData().getHeight());
deviceRedisService.setDeviceOnline(deviceOpt.get());
deviceService.updateDevice(deviceOpt.get());
}
if (StringUtils.hasText(device.getChildDeviceSn())) { if (StringUtils.hasText(device.getChildDeviceSn())) {
deviceService.getDeviceBySn(device.getChildDeviceSn()).ifPresent(device::setChildren); deviceService.getDeviceBySn(device.getChildDeviceSn()).ifPresent(device::setChildren);
} }

250
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SampleEngineRecordServiceImpl.java

@ -0,0 +1,250 @@
package org.dromara.sample.manage.service.impl;
import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.seata.common.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.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.sample.common.util.Md5Utils;
import org.dromara.sample.manage.mapper.ISampleEngineRecordMapper;
import org.dromara.sample.manage.mapper.ITaskJobMapper;
import org.dromara.sample.manage.model.dto.*;
import org.dromara.sample.manage.model.entity.EngineRecordEntity;
import org.dromara.sample.manage.model.entity.TaskJobEntity;
import org.dromara.sample.manage.service.ISampleEngineRecordService;
import org.dromara.system.api.RemoteConfigService;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
import static org.apache.commons.compress.utils.ArchiveUtils.sanitize;
@Service
@Slf4j
@Transactional
public class SampleEngineRecordServiceImpl implements ISampleEngineRecordService {
@Resource
ISampleEngineRecordMapper mapper;
@Resource
ITaskJobMapper taskJobMapper;
@DubboReference
private RemoteConfigService remoteConfigService;
@Override
public Map<String, Object> startEngine(Map<String, Object> objectMap){
EngineRecordEntity record = new EngineRecordEntity();
String ip = remoteConfigService.selectStreamIp();
//获取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);
// }
// EngineTypeResponse engineTypeResponse = null;
// try {
// ObjectMapper mapper = new ObjectMapper();
// engineTypeResponse = mapper.readValue(sceneResponseBody, EngineTypeResponse.class);
// } catch (JsonProcessingException e) {
// throw new RuntimeException(e);
// }
//// JSONObject jsonObject1 = new JSONObject(sceneResponseBody);
// // 逐层获取 data -> token
//// JSONObject data1 = jsonObject1.getJSONObject("data");
// String scene = engineTypeResponse.getData().getScene();
//
// //查询场景算法
// List<String> 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<ExtraType> 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();
String type = objectMap.get("type").toString();
if (StringUtils.isNotEmpty(type)){
List<String> list = Arrays.asList(type.split(","));
jsonObj2.put("scene", "可见光"); // sanitize函数见下文
jsonObj2.put("callback_url", "http://114.235.183.162:9888/ces/iot/deviceLog/some");
jsonObj2.put("extra_type_list",new JSONArray(list));
jsonObj2.put("input_url","http://"+ip+":19008/live/livesteam/"+objectMap.get("rtmpUrl")+".flv");
jsonObj2.put("push_url", "rtmp://"+ip+"/live/livesteam/"+objectMap.get("rtmpUrl")+"ai1");
// jsonObj2.put("play_url", objectMap.get("play_url"));
String responseBody2 = PostRequest(jsonObj2, "http://60.204.247.65:8100/Third/Engine/Start",token);
ObjectMapper mapper1 = new ObjectMapper();
EngineResponse response = null;
try {
response = mapper1.readValue(responseBody2, EngineResponse.class);
if (response.getCode() != 200){
throw new RuntimeException("第三方接口调用失败!");
}
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
objectMap.put("task_id",response.getData().getTask_id());
record.setPushUrl(objectMap.get("rtmpUrl").toString());
record.setTaskId(MapUtil.getStr(objectMap,"task_id",""));
record.setDeviceSn(MapUtil.getStr(objectMap,"deviceSn",""));
record.setTaskId(response.getData().getTask_id());
record.setExtraType(objectMap.get("type").toString());
System.out.print(objectMap);
}
}
Map<String, Object> map = new HashMap();
map.put("push_url", "http://"+ip+":1985/rtc/v1/whep/?app=live/livesteam&stream="+objectMap.get("rtmpUrl")+"ai1");
map.put("task_id", objectMap.get("task_id"));
//添加启动引擎记录
mapper.insert(record);
//添加任务id和jobid关联关系
TaskJobEntity taskJobEntity = new TaskJobEntity();
taskJobEntity.setJobId(objectMap.get("jobId").toString());
taskJobEntity.setTaskId(objectMap.get("task_id").toString());
taskJobMapper.insert(taskJobEntity);
return map;
}
@Override
public void closeEngine(Map<String, Object> objectMap) {
JSONObject jsonObj2 = new JSONObject();
EngineRecordEntity record = mapper.selectOne(new LambdaQueryWrapper<EngineRecordEntity>().eq(EngineRecordEntity::getDeviceSn, objectMap.get("deviceSn")));
if (record == null){
// throw new RuntimeException("关闭引擎失败!");
}else {
//获取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");
jsonObj2.put("task_id", record.getTaskId()); // sanitize函数见下文
String responseBody2 = PostRequest(jsonObj2, "http://60.204.247.65:8100/Third/Engine/Stop",token);
JSONObject json = new JSONObject(responseBody2);
// 方式2:安全获取(先判空再转换)
Object dataObj = json.get("data");
if(dataObj != null && dataObj instanceof Integer) {
int data1 = (Integer) dataObj;
if (data1 ==1){
mapper.delete(new LambdaQueryWrapper<EngineRecordEntity>().eq(EngineRecordEntity::getDeviceSn, objectMap.get("deviceSn")));
}else {
throw new RuntimeException("关闭引擎失败!");
}
} else {
throw new RuntimeException("关闭引擎失败!");
}
}
}
public String PostRequest( JSONObject jsonObj, String url, String token
) {
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");
post.setHeader("token", token);
// 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);
if (StringUtils.isNotEmpty(token)){
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;
}
}

15
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SampleWarningRecordServiceImpl.java

@ -0,0 +1,15 @@
package org.dromara.sample.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sample.manage.mapper.SampleWarningRecordMapper;
import org.dromara.sample.manage.mapper.WarningRecordMapper;
import org.dromara.sample.manage.model.entity.WarningRecordEntity;
import org.dromara.sample.manage.service.ISampleWarningRecordService;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class SampleWarningRecordServiceImpl extends ServiceImpl<SampleWarningRecordMapper, WarningRecordEntity> implements ISampleWarningRecordService {
}

44
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/TaskJobServiceImpl.java

@ -0,0 +1,44 @@
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 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.common.HttpResultResponse;
import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.common.sdk.mqtt.CommonTopicRequest;
import org.dromara.common.sdk.mqtt.MqttGatewayPublish;
import org.dromara.sample.feign.RemoteSystemFeign;
import org.dromara.sample.manage.mapper.IPlayTextMapper;
import org.dromara.sample.manage.model.dto.StreamTypeDTO;
import org.dromara.sample.manage.model.entity.PlayTextEntity;
import org.dromara.sample.manage.service.IPlayTextService;
import org.dromara.sample.manage.service.ITaskJobService;
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 java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
/**
*
* @author sean.zhou
* @version 0.1
* @date 2021/11/10
*/
@Service
@Slf4j
@Transactional
public class TaskJobServiceImpl implements ITaskJobService {
}

14
dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java

@ -6,6 +6,7 @@ import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.media.service.IFileService; import org.dromara.sample.media.service.IFileService;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.List;
/** /**
* @author sean * @author sean
@ -28,6 +30,8 @@ public class FileController {
@Autowired @Autowired
private IFileService fileService; private IFileService fileService;
/** /**
* 根据工作区id获取此工作区中所有媒体文件的信息 * 根据工作区id获取此工作区中所有媒体文件的信息
* Get information about all the media files in this workspace based on the workspace id. * Get information about all the media files in this workspace based on the workspace id.
@ -37,8 +41,9 @@ public class FileController {
@Operation(summary = "根据工作区id获取此工作区中所有媒体文件的信息。", description = "根据工作区id获取此工作区中所有媒体文件的信息。") @Operation(summary = "根据工作区id获取此工作区中所有媒体文件的信息。", description = "根据工作区id获取此工作区中所有媒体文件的信息。")
public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesList(@RequestParam(name = "pageNum", defaultValue = "1") Long page, public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesList(@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId) { @PathVariable(name = "workspace_id") String workspaceId,
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByWorkspaceId(workspaceId, page, pageSize); @RequestParam(name = "proIds",required = false) List<Integer> proIds) {
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByWorkspaceId(workspaceId, page, pageSize,proIds);
return HttpResultResponse.success(filesList); return HttpResultResponse.success(filesList);
} }
@ -72,8 +77,9 @@ public class FileController {
public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesByJobId(@RequestParam(name = "pageNum", defaultValue = "1") Long page, public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesByJobId(@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId, @PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "job_id") String jobId) { @PathVariable(name = "job_id") String jobId,
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId); @RequestParam(name = "type", required = false) Integer type) {
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId,type);
for (MediaFileDTO mediaFileDTO :filesList.getList()){ for (MediaFileDTO mediaFileDTO :filesList.getList()){
mediaFileDTO.setUrl(fileService.getObjectUrl(workspaceId, mediaFileDTO.getFileId()).toString()); mediaFileDTO.setUrl(fileService.getObjectUrl(workspaceId, mediaFileDTO.getFileId()).toString());
} }

4
dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java

@ -52,8 +52,8 @@ public class MediaController implements IHttpMediaService {
* @return * @return
*/ */
@Override @Override
public HttpResultResponse<String> mediaUploadCallback( String workspaceId, @Valid MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) { public HttpResultResponse<String> mediaUploadCallback( String workspaceId,Integer proId, @Valid MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) {
mediaService.saveMediaFile(workspaceId, request); mediaService.saveMediaFile(workspaceId, request,proId);
return HttpResultResponse.success(request.getObjectKey()); return HttpResultResponse.success(request.getObjectKey());
} }

3
dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java

@ -111,5 +111,8 @@ public class MediaFileEntity implements Serializable {
@TableField("file_index") @TableField("file_index")
private Integer fileIndex; private Integer fileIndex;
@TableField("pro_id")
private Integer proId;
} }

8
dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java

@ -29,7 +29,7 @@ public interface IFileService {
* @param file * @param file
* @return * @return
*/ */
Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask); Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask,Integer proId);
/** /**
* Query information about all files in this workspace based on the workspace id. * Query information about all files in this workspace based on the workspace id.
@ -45,7 +45,7 @@ public interface IFileService {
* @param pageSize * @param pageSize
* @return * @return
*/ */
PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize); PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize,List<Integer> proIds);
/** /**
* Get the download address of the file. * Get the download address of the file.
@ -71,7 +71,7 @@ public interface IFileService {
* @param pageSize * @param pageSize
* @return * @return
*/ */
PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId); PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId,Integer type);
/** /**
@ -86,4 +86,6 @@ public interface IFileService {
* @param fileType 图片类型 "jpeg,mp4" * @param fileType 图片类型 "jpeg,mp4"
* */ * */
List<MediaFileDTO> getMediaFileDTO( String jobId,String fileType); List<MediaFileDTO> getMediaFileDTO( String jobId,String fileType);
String copyFile(String sourceBucket, String originFileUrl, String targetBucket);
} }

2
dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java

@ -26,7 +26,7 @@ public interface IMediaService {
* @param file * @param file
* @return * @return
*/ */
Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file); Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file,Integer proId);
/** /**
* Query tiny fingerprints about all files in this workspace based on the workspace id. * Query tiny fingerprints about all files in this workspace based on the workspace id.

43
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java

@ -1,11 +1,14 @@
package org.dromara.sample.media.service.impl; package org.dromara.sample.media.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.DeviceEnum; import org.dromara.common.sdk.cloudapi.device.DeviceEnum;
import org.dromara.common.sdk.cloudapi.media.FlightTask; import org.dromara.common.sdk.cloudapi.media.FlightTask;
import org.dromara.common.sdk.cloudapi.media.MediaSubFileTypeEnum; import org.dromara.common.sdk.cloudapi.media.MediaSubFileTypeEnum;
@ -14,11 +17,14 @@ import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.model.dto.DeviceDictionaryDTO; import org.dromara.sample.manage.model.dto.DeviceDictionaryDTO;
import org.dromara.sample.manage.service.IDeviceDictionaryService; import org.dromara.sample.manage.service.IDeviceDictionaryService;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.media.constant.MinIOConstants; import org.dromara.sample.media.constant.MinIOConstants;
import org.dromara.sample.media.mapper.IFileMapper; import org.dromara.sample.media.mapper.IFileMapper;
import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.media.model.MediaFileEntity; import org.dromara.sample.media.model.MediaFileEntity;
import org.dromara.sample.media.service.IFileService; import org.dromara.sample.media.service.IFileService;
import org.dromara.sample.utils.MinioUtil;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -43,6 +49,8 @@ public class FileServiceImpl implements IFileService {
@Autowired @Autowired
private IDeviceDictionaryService deviceDictionaryService; private IDeviceDictionaryService deviceDictionaryService;
@Autowired
private IDeviceProService deviceProService;
private Optional<MediaFileEntity> getMediaByFingerprint(String workspaceId, String fingerprint) { private Optional<MediaFileEntity> getMediaByFingerprint(String workspaceId, String fingerprint) {
@ -65,10 +73,15 @@ public class FileServiceImpl implements IFileService {
} }
@Override @Override
public Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask) { public Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask,Integer proId) {
MediaFileEntity fileEntity = this.fileUploadConvertToEntity(file,flightTask); MediaFileEntity fileEntity = this.fileUploadConvertToEntity(file,flightTask);
if(RedisOpsUtils.checkExist("jobId-media:"+fileEntity.getJobId()+fileEntity.getFileName())) {
return 1;
}
RedisOpsUtils.setWithExpire("jobId-media:"+fileEntity.getJobId()+fileEntity.getFileName(),fileEntity.getObjectKey(),10800);
fileEntity.setWorkspaceId(workspaceId); fileEntity.setWorkspaceId(workspaceId);
fileEntity.setFileId(UUID.randomUUID().toString()); fileEntity.setFileId(UUID.randomUUID().toString());
fileEntity.setProId(proId);
fileEntity.setFileType(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf(".")+1)); fileEntity.setFileType(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf(".")+1));
if(!fileEntity.getFileType().equals("DAT")){ if(!fileEntity.getFileType().equals("DAT")){
fileEntity.setFileStatus(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf("_")+1, fileEntity.getFileName().lastIndexOf("."))); fileEntity.setFileStatus(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf("_")+1, fileEntity.getFileName().lastIndexOf(".")));
@ -91,11 +104,16 @@ public class FileServiceImpl implements IFileService {
} }
@Override @Override
public PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize) { public PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize,List<Integer> proIds) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(proIds == null){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
Page<MediaFileEntity> pageData = mapper.selectPage( Page<MediaFileEntity> pageData = mapper.selectPage(
new Page<MediaFileEntity>(page, pageSize), new Page<MediaFileEntity>(page, pageSize),
new LambdaQueryWrapper<MediaFileEntity>() new LambdaQueryWrapper<MediaFileEntity>()
.eq(MediaFileEntity::getWorkspaceId, workspaceId) .eq(MediaFileEntity::getWorkspaceId, workspaceId)
.in(ObjectUtil.isAllNotEmpty(proIds),MediaFileEntity::getProId, proIds)
.orderByDesc(MediaFileEntity::getId)); .orderByDesc(MediaFileEntity::getId));
List<MediaFileDTO> records = pageData.getRecords() List<MediaFileDTO> records = pageData.getRecords()
.stream() .stream()
@ -125,12 +143,15 @@ public class FileServiceImpl implements IFileService {
} }
@Override @Override
public PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId) { public PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId,Integer type) {
String [] fileTypes = new String[]{"jpeg","mp4"};
Page<MediaFileEntity> pageData = mapper.selectPage( Page<MediaFileEntity> pageData = mapper.selectPage(
new Page<MediaFileEntity>(page, pageSize), new Page<MediaFileEntity>(page, pageSize),
new LambdaQueryWrapper<MediaFileEntity>() new LambdaQueryWrapper<MediaFileEntity>()
.eq(MediaFileEntity::getWorkspaceId, workspaceId) .eq(MediaFileEntity::getWorkspaceId, workspaceId)
.eq(MediaFileEntity::getJobId, JobId) .eq(MediaFileEntity::getJobId, JobId)
.in(ObjectUtil.isNotEmpty(type),MediaFileEntity::getFileType,fileTypes)
.orderByDesc(MediaFileEntity::getId)); .orderByDesc(MediaFileEntity::getId));
List<MediaFileDTO> records = pageData.getRecords() List<MediaFileDTO> records = pageData.getRecords()
.stream() .stream()
@ -164,6 +185,22 @@ public class FileServiceImpl implements IFileService {
} }
//文件从 mediafile 复制到 alert库,文件保持相同目录
@Override
public String copyFile(String sourceBucket, String originFileUrl, String targetBucket) {
String fileUrl = "";
try {
// String originalfileName = FileUtil.getName(originFileUrl);
MinioUtil.copyFile(originFileUrl,originFileUrl,sourceBucket,targetBucket);//列表图片
MinioUtil.copyFile(originFileUrl,originFileUrl,sourceBucket,MinIOConstants.BUCKET_ALERT);//预览图片
} catch (Exception e) {
throw new RuntimeException(e);
}
return fileUrl;
}
/** /**
* Convert the received file object into a database entity object. * Convert the received file object into a database entity object.
* @param file * @param file

19
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java

@ -1,5 +1,6 @@
package org.dromara.sample.media.service.impl; package org.dromara.sample.media.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.constant.DeviceQrtzConstants; import org.dromara.common.core.constant.DeviceQrtzConstants;
@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
@ -80,8 +82,8 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
} }
@Override @Override
public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file) { public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file,Integer proId) {
return fileService.saveFile(workspaceId, file,null); return fileService.saveFile(workspaceId, file,null,proId);
} }
@Override @Override
@ -123,8 +125,12 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
} }
return new TopicEventsResponse<MqttReply>().setData(MqttReply.success()); return new TopicEventsResponse<MqttReply>().setData(MqttReply.success());
} }
List<DeviceQrtzFileEntity> deviceQrtzFileEntities = new ArrayList<>();
MediaFileCountDTO mediaFileCount = mediaRedisService.getMediaCount(request.getGateway(), jobId); MediaFileCountDTO mediaFileCount = mediaRedisService.getMediaCount(request.getGateway(), jobId);
List<DeviceQrtzFileEntity> deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper<DeviceQrtzFileEntity>().eq(DeviceQrtzFileEntity::getDeviceSn, request.getGateway()).eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_2).eq(DeviceQrtzFileEntity::getWaylineId, mediaFileCount.getFileId())); if(ObjectUtil.isNull(mediaFileCount)){
deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper<DeviceQrtzFileEntity>().eq(DeviceQrtzFileEntity::getDeviceSn, request.getGateway()).eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_2).eq(DeviceQrtzFileEntity::getWaylineId, mediaFileCount.getFileId()));
}
// duplicate data // duplicate data
if (deviceOpt.isEmpty() if (deviceOpt.isEmpty()
|| (Objects.nonNull(mediaFileCount) && request.getBid().equals(mediaFileCount.getBid()) || (Objects.nonNull(mediaFileCount) && request.getBid().equals(mediaFileCount.getBid())
@ -145,10 +151,11 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
return null; return null;
} }
notifyUploadedCount(mediaFileCount, request, jobId, device,deviceQrtzFileEntities); notifyUploadedCount(mediaFileCount, request, jobId, device);
return new TopicEventsResponse<MqttReply>().setData(MqttReply.success()); return new TopicEventsResponse<MqttReply>().setData(MqttReply.success());
} }
@Override @Override
public TopicEventsResponse<MqttReply> highestPriorityUploadFlightTaskMedia( public TopicEventsResponse<MqttReply> highestPriorityUploadFlightTaskMedia(
TopicEventsRequest<HighestPriorityUploadFlightTaskMedia> request, MessageHeaders headers) { TopicEventsRequest<HighestPriorityUploadFlightTaskMedia> request, MessageHeaders headers) {
@ -189,12 +196,12 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
file.setPath(objectKey.substring(Optional.of(objectKey.indexOf("mediafile")) file.setPath(objectKey.substring(Optional.of(objectKey.indexOf("mediafile"))
.filter(index -> index > 0).map(index -> index++).orElse(0), .filter(index -> index > 0).map(index -> index++).orElse(0),
objectKey.lastIndexOf("/"))); objectKey.lastIndexOf("/")));
Integer fileFlag = fileService.saveFile(device.getWorkspaceId(), file, callback.getFlightTask()); Integer fileFlag = fileService.saveFile(device.getWorkspaceId(), file, callback.getFlightTask(),device.getProId());
return fileFlag> 0; return fileFlag> 0;
} }
private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest<FileUploadCallback> request, String jobId, DeviceDTO dock, List<DeviceQrtzFileEntity> deviceQrtzFileEntities) { private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest<FileUploadCallback> request, String jobId, DeviceDTO dock) {
// Do not notify when files that do not belong to the route are uploaded. // Do not notify when files that do not belong to the route are uploaded.
//不通知不属于路由的文件被上传。 //不通知不属于路由的文件被上传。
if (Objects.isNull(mediaFileCount)) { if (Objects.isNull(mediaFileCount)) {

183
dk-modules/sample/src/main/java/org/dromara/sample/utils/MinioUtil.java

@ -0,0 +1,183 @@
package org.dromara.sample.utils;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import io.minio.*;
import io.minio.http.Method;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.InputStream;
import java.util.HashMap;
@Component
public class MinioUtil {
// 指定MinIO服务的访问地址(包括协议、域名或IP以及端口)
private static String endpoint;
// MinIO的访问密钥(Access Key),用于身份验证
private static String accessKey;
// MinIO的秘密密钥(Secret Key),与访问密钥配对使用,也是认证的一部分。
private static String secretKey;
// 指定默认的存储桶(Bucket)名称,MinIO中用于组织和存储对象(文件)的基本容器。
private static String bucket;
@Value("${minio.endpoint:http://114.235.183.147:9090}")
public void setEndpoint(String endpoint) {
MinioUtil.endpoint = endpoint;
}
@Value("${minio.accessKey:wuyuan@yf}")
public void setAccessKey(String accessKey) {
MinioUtil.accessKey = accessKey;
}
@Value("${minio.secretKey:wuyuan@yf}")
public void setSecretKey(String secretKey) {
MinioUtil.secretKey = secretKey;
}
@Value("${minio.bucket:dkcy}")
public void setBucket(String bucket) {
MinioUtil.bucket = bucket;
}
/**
* 创建并返回一个配置好的MinioClient实例
* 用于与MinIO服务器交互,上传文件下载文件删除文件
*
* @return 配置
*/
public static MinioClient getMinioClient() {
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
/**
* 上传将一个输入流中的文件上传到MinIO服务器上指定的存储桶bucket
*
* @param objectName .object(objectName)指定了上传后对象的名称
* @param inputStream 转换为
* @param size 文件大小
* @param contentType 内容类型
* @throws Exception 异常
*/
public static void uploadFile(String objectName, InputStream inputStream, long size, String contentType,String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient minioClient = getMinioClient();
minioClient.putObject(
// .bucket(bucket) 指定了目标存储桶的名称。.object(objectName)指定了上传后对象的名称。
PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(inputStream, size, -1)
// .contentType(contentType)指定了上传文件的内容类型。
.contentType(contentType)
.build());
}
/**
* 下载从MinIO服务器下载指定存储桶bucket中的文件
*
* @param objectName 指定要从MinIO下载的文件对象名称即文件路径和文件名
* @return 对象
* @throws Exception 异常
*/
public static InputStream downloadFile(String objectName,String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient minioClient = getMinioClient();
return minioClient.getObject(
GetObjectArgs.builder()
// .bucket(bucket)指定了文件所在的存储桶名称。
.bucket(bucketName)
// .object(objectName)指定了要下载的对象名称。
.object(objectName)
.build());
}
/**
* 预览生成一个预签名的URL允许用户通过浏览器或其他HTTP客户端以GET方法访问MinIO存储桶中指定对象文件的临时链接
*
* @param objectName 指定需要获取预览链接的文件对象名称包括路径
* @return 对象
* @throws Exception .method(Method.GET)指定了请求的方法为GET这是预览文件时的标准HTTP方法
* .bucket(bucket)指定了存储桶的名称
* .object(objectName)指定了对象文件的名称
*/
public static String getPreviewUrl(String objectName,String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient minioClient = getMinioClient();
return minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(bucketName)
.object(objectName)
.build());
}
/**
* 删除从MinIO服务器上的指定存储桶中删除一个文件
*
* @param objectName 指定要删除的文件对象名称包括路径和文件名
* @throws Exception
*/
public static void deleteFile(String objectName,String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient minioClient = getMinioClient();
minioClient.removeObject(
RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
}
//查询文件信息
public static HashMap<String,Object> getFileAsMultipart(String objectName, String newBucket) throws Exception {
String bucketName = StrUtil.isEmpty(newBucket) ? bucket : newBucket;
MinioClient client = getMinioClient();
// 获取对象
InputStream is = client.getObject(GetObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build());
// 获取文件元信息(如 contentType)
StatObjectResponse stat = client.statObject(StatObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build());
String contentType = stat.contentType();
// 将流读为 byte[] 以生成 MockMultipartFile
byte[] bytes = IoUtil.readBytes(is); // Hutool 工具类
HashMap<String, Object> map = new HashMap<>();
map.put("objectName",objectName);
map.put("contentType",contentType);
map.put("bytes",bytes);
return map;
}
//文件复制
public static void copyFile(String sourceObjectName, String targetObjectName, String sourceBucket, String targetBucket) throws Exception {
MinioClient client = getMinioClient();
// 使用服务器端复制,无需下载上传
client.copyObject(CopyObjectArgs.builder()
.bucket(targetBucket) // 目标桶
.object(targetObjectName) // 目标对象
.source(CopySource.builder()
.bucket(sourceBucket)
.object(sourceObjectName)
.build())
.build());
}
}

29
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java

@ -1,6 +1,7 @@
package org.dromara.sample.wayline.controller; package org.dromara.sample.wayline.controller;
import io.seata.common.util.CollectionUtils;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@ -14,6 +15,10 @@ import org.dromara.common.sdk.cloudapi.wayline.*;
import org.dromara.common.sdk.cloudapi.wayline.api.IHttpWaylineService; import org.dromara.common.sdk.cloudapi.wayline.api.IHttpWaylineService;
import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.mapper.IDeviceProUserMapper;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO; import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity; import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity; import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
@ -31,8 +36,11 @@ import java.net.URL;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.bouncycastle.internal.asn1.cms.CMSObjectIdentifiers.data;
/** /**
* @author sean * @author sean
@ -46,6 +54,9 @@ public class WaylineFileController implements IHttpWaylineService {
@Autowired @Autowired
private IWaylineFileService waylineFileService; private IWaylineFileService waylineFileService;
@Autowired
private IDeviceRedisService deviceRedisService;
/** /**
* 根据waylineID删除工作区中的wayline文件 * 根据waylineID删除工作区中的wayline文件
* Delete the wayline file in the workspace according to the wayline id. * Delete the wayline file in the workspace according to the wayline id.
@ -67,13 +78,17 @@ public class WaylineFileController implements IHttpWaylineService {
*/ */
@PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/{deviceSn}/upload") @PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/{deviceSn}/upload")
@Operation(summary = "导入kmz航路文件。", description = "导入kmz航路文件。") @Operation(summary = "导入kmz航路文件。", description = "导入kmz航路文件。")
public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file,@PathVariable(name = "deviceSn") String deviceSn) { public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file,@PathVariable(name = "deviceSn") String deviceSn,@RequestParam(name = "proId",required = false) Integer proId) {
if (Objects.isNull(file)) { if (Objects.isNull(file)) {
return HttpResultResponse.error("未收到文件。"); return HttpResultResponse.error("未收到文件。");
} }
Optional<DeviceDTO> deviceOnline = deviceRedisService.getDeviceOnline(deviceSn);
if(proId == null){
proId = deviceOnline.get().getProId();
}
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
String creator = loginUser.getUsername(); String creator = loginUser.getUsername();
waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn); waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn,proId);
return HttpResultResponse.success(); return HttpResultResponse.success();
} }
@ -86,11 +101,17 @@ public class WaylineFileController implements IHttpWaylineService {
* @return * @return
*/ */
@Override @Override
public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(@Valid GetWaylineListRequest request,String workspaceId, HttpServletRequest req, HttpServletResponse rsp) { public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylines(@Valid GetWaylineListRequest request,String workspaceId,List<Integer> proIds, HttpServletRequest req, HttpServletResponse rsp) {
PaginationData<GetWaylineListResponse> data = waylineFileService.getWaylinesByParam(workspaceId, request); PaginationData<GetWaylineListResponse> data = waylineFileService.getWaylinesByParam(workspaceId, request,proIds);
return HttpResultResponse.success(data); return HttpResultResponse.success(data);
} }
@Override
public HttpResultResponse<List<GetWaylineListResponse>> getWaylineList(String workspaceId,Integer proId, HttpServletRequest req, HttpServletResponse rsp) {
List<GetWaylineListResponse> waylinesByParamList = waylineFileService.getWaylinesByParamList(workspaceId, proId);
return HttpResultResponse.success(waylinesByParamList);
}
/** /**
* 根据 wayline 文件 ID 查询文件的下载地址并直接重定向到此地址进行下载 * 根据 wayline 文件 ID 查询文件的下载地址并直接重定向到此地址进行下载
* Query the download address of the file according to the wayline file id, * Query the download address of the file according to the wayline file id,

35
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java

@ -16,12 +16,15 @@ import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.wayline.model.dto.WaylineJobDTO; import org.dromara.sample.wayline.model.dto.WaylineJobDTO;
import org.dromara.sample.wayline.model.enums.WaylineTaskStatusEnum; import org.dromara.sample.wayline.model.enums.WaylineTaskStatusEnum;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.dromara.sample.wayline.model.param.CreateJobParam; import org.dromara.sample.wayline.model.param.CreateJobParam;
import org.dromara.sample.wayline.model.param.UpdateJobParam; import org.dromara.sample.wayline.model.param.UpdateJobParam;
import org.dromara.sample.wayline.service.IFlightTaskService; import org.dromara.sample.wayline.service.IFlightTaskService;
import org.dromara.sample.wayline.service.IWaylineFileService; import org.dromara.sample.wayline.service.IWaylineFileService;
import org.dromara.sample.wayline.service.IWaylineJobService; import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.sample.wayline.service.IWaylineRedisService; import org.dromara.sample.wayline.service.IWaylineRedisService;
import org.dromara.sample.wayline.service.IWaylineRedisService;
import org.dromara.sample.wayline.service.impl.WaylineFileServiceImpl;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -33,6 +36,8 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import static org.bouncycastle.asn1.x500.style.RFC4519Style.name;
/** /**
* @author sean * @author sean
@ -81,8 +86,11 @@ public class WaylineJobController {
@Operation(summary = "查询工作区中的所有作业。。", description = "查询工作区中的所有作业。") @Operation(summary = "查询工作区中的所有作业。。", description = "查询工作区中的所有作业。")
public HttpResultResponse<PaginationData<WaylineJobDTO>> getJobs(@RequestParam(name = "pageNum", defaultValue = "1") Long page, public HttpResultResponse<PaginationData<WaylineJobDTO>> getJobs(@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId) { @PathVariable(name = "workspace_id") String workspaceId,
PaginationData<WaylineJobDTO> data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize); @RequestParam(name = "proIds" , required = false) List<Integer> proIds,
@RequestParam(name = "fileId" , required = false) String fileId,
@RequestParam(name = "name" , required = false) String name) {
PaginationData<WaylineJobDTO> data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize,fileId,proIds,name);
return HttpResultResponse.success(data); return HttpResultResponse.success(data);
} }
@ -120,28 +128,25 @@ public class WaylineJobController {
flighttaskService.updateJobStatus(workspaceId, jobId, param); flighttaskService.updateJobStatus(workspaceId, jobId, param);
return HttpResultResponse.success(); return HttpResultResponse.success();
} }
@GetMapping("/{workspace_id}/getJobIdByDeviceSn")
public static void main(String[] args) { @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。")
WaylineTaskStatusEnum pause = WaylineTaskStatusEnum.RESUME; public HttpResultResponse getJobIdByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId,
System.out.println(pause.getVal()); @RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) {
Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn);
if(runningWaylineJob.isEmpty())return HttpResultResponse.error("不存在");
return HttpResultResponse.success(runningWaylineJob.get().getOutput().getExt().getFlightId()!=null?runningWaylineJob.get().getOutput().getExt().getFlightId():null);
} }
@GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn") @GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn")
@Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。") @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。")
public void getJobFileUrlByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId, public void getJobFileUrlByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) { @RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) {
try { try {
Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn); Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn);
if(runningWaylineJob.isEmpty()) { if(runningWaylineJob.isEmpty())return;
return;
}
String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId(); String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId();
Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, jobId); Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, jobId);
if(waylineJobDTO.isEmpty()) { if(waylineJobDTO.isEmpty())return;
return;
}
URL url = waylineFileService.getObjectUrl(workspaceId, waylineJobDTO.get().getFileId()); URL url = waylineFileService.getObjectUrl(workspaceId, waylineJobDTO.get().getFileId());
rsp.sendRedirect(url.toString()); rsp.sendRedirect(url.toString());
} catch (IOException | SQLException e) { } catch (IOException | SQLException e) {

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java

@ -47,4 +47,6 @@ public class WaylineFileDTO {
private Integer fileNo; private Integer fileNo;
private Integer proId;
} }

3
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java

@ -10,6 +10,7 @@ import org.dromara.common.sdk.cloudapi.wayline.TaskTypeEnum;
import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* @author sean * @author sean
@ -72,4 +73,6 @@ public class WaylineJobDTO {
private String parentId; private String parentId;
private ProgressExtBreakPoint breakPoint; private ProgressExtBreakPoint breakPoint;
private List<Integer> proIds;
} }

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java

@ -69,4 +69,6 @@ public class WaylineFileEntity implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String deviceName; private String deviceName;
@TableField("pro_id")
private Integer proId;
} }

3
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java

@ -94,4 +94,7 @@ public class WaylineJobEntity implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private ProgressExtBreakPoint breakPoint; private ProgressExtBreakPoint breakPoint;
@TableField("pro_id")
private Integer proId;
} }

9
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java

@ -5,6 +5,7 @@ import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListResponse;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO; import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity; import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.File; import java.io.File;
@ -26,7 +27,9 @@ public interface IWaylineFileService {
* @param param * @param param
* @return * @return
*/ */
PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param); PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List<Integer> proIds);
List<GetWaylineListResponse> getWaylinesByParamList(String workspaceId,Integer proId);
/** /**
* Query the information of this wayline file according to the wayline file id. * Query the information of this wayline file according to the wayline file id.
@ -83,10 +86,12 @@ public interface IWaylineFileService {
* @param creator * @param creator
* @return * @return
*/ */
void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn); void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn,Integer proId);
String getWaylineIdByFileId(Integer fileId); String getWaylineIdByFileId(Integer fileId);
WaylineFileEntity getWaylineFileByWaylineId(Integer waylineId);
/** /**
* Perform paging queries based on query parameters. * Perform paging queries based on query parameters.

4
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java

@ -28,7 +28,7 @@ public interface IWaylineJobService {
* @param endTime The time the job ended. * @param endTime The time the job ended.
* @return * @return
*/ */
Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime); Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime, Integer proId);
/** /**
* Create a sub-task based on the information of the parent task. * Create a sub-task based on the information of the parent task.
@ -71,7 +71,7 @@ public interface IWaylineJobService {
* @param pageSize * @param pageSize
* @return * @return
*/ */
PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize); PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List<Integer> proIds,String name);
/** /**
* Query the wayline execution status of the dock. * Query the wayline execution status of the dock.

123
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java

@ -1,25 +1,26 @@
package org.dromara.sample.wayline.service.impl; package org.dromara.sample.wayline.service.impl;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.minio.MinioClient;
import io.minio.StatObjectArgs;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.ibatis.executor.BatchResult;
import org.dromara.business.api.RemoteBusinessAlertService; import org.dromara.business.api.RemoteBusinessAlertService;
import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo; import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo;
import org.dromara.business.api.domain.vo.RemoteBusinessAlertConstructInfo;
import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo;
import org.dromara.common.core.constant.AiCompareStatusConstants; import org.dromara.common.core.constant.AiCompareStatusConstants;
import org.dromara.common.core.constant.BusinessConstants;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -28,10 +29,7 @@ import org.dromara.common.sdk.mqtt.CommonTopicRequest;
import org.dromara.common.sdk.mqtt.MqttGatewayPublish; import org.dromara.common.sdk.mqtt.MqttGatewayPublish;
import org.dromara.common.sdk.mqtt.TopicConst; import org.dromara.common.sdk.mqtt.TopicConst;
import org.dromara.sample.media.constant.MinIOConstants; import org.dromara.sample.media.constant.MinIOConstants;
import org.dromara.sample.media.mapper.IFileMapper;
import org.dromara.sample.media.model.MediaFileEntity;
import org.dromara.sample.media.service.IFileService; import org.dromara.sample.media.service.IFileService;
import org.dromara.sample.media.service.IMediaService;
import org.dromara.sample.wayline.mapper.IAiCompareMapper; import org.dromara.sample.wayline.mapper.IAiCompareMapper;
import org.dromara.sample.wayline.mapper.IAiComparePlateMapper; import org.dromara.sample.wayline.mapper.IAiComparePlateMapper;
import org.dromara.sample.wayline.mapper.IWaylineJobMapper; import org.dromara.sample.wayline.mapper.IWaylineJobMapper;
@ -45,13 +43,11 @@ import org.dromara.sample.wayline.service.IAiCompareService;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -206,21 +202,116 @@ public class AiCompareServiceImpl implements IAiCompareService {
AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(id); AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(id);
return listMediaFile(aiCompareEntity.getJobId(),aiCompareEntity.getId(),3600,true); return listMediaFile(aiCompareEntity.getJobId(),aiCompareEntity.getId(),3600,true);
} }
// @Value("${spring.profiles.active}")
// private String activeProfile;
@Override @Override
public Boolean pictureFrame(Map<String,Object>objectMap) { public Boolean pictureFrame(Map<String,Object> objectMap) {
FrameDTO frameDTO = Convert.convert(FrameDTO.class, objectMap); FrameDTO frameDTO = Convert.convert(FrameDTO.class, objectMap);
AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(frameDTO.getCompareId()); AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(frameDTO.getCompareId());
aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_3); aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_3);
aiCompareEntity.setId(frameDTO.getCompareId()); aiCompareEntity.setId(frameDTO.getCompareId());
aiCompareMapper.updateById(aiCompareEntity); aiCompareMapper.updateById(aiCompareEntity);
frameDTO.setJobName(aiCompareEntity.getJobName()); frameDTO.setJobName(aiCompareEntity.getJobName());
frameDTO.setFileUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE,frameDTO.getFileUrl(),3600).toString()); String originFileUrl = frameDTO.getFileUrl();
frameDTO.setMateFileUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE,frameDTO.getMateFileUrl(),3600).toString()); String fileUrl = fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE, originFileUrl, 3600).toString();
frameDTO.setFileUrl(fileUrl);
String originMateFileUrl = frameDTO.getMateFileUrl();
String mateFileUrl = fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE, originMateFileUrl, 3600).toString();
frameDTO.setMateFileUrl(mateFileUrl);
String topic = TopicConst.IMAGE +TopicConst.FRAME; String topic = TopicConst.IMAGE +TopicConst.FRAME;
mqttGatewayPublish.publish(topic,new CommonTopicRequest().setData(frameDTO),1);
// if(StrUtil.equals(activeProfile,"w_fengxianranqi"))
// activeProfile="w_fengxianranqi"
String activeProfile = MapUtil.getStr(objectMap, "activeProfile", "default");
if (StrUtil.equals("default", activeProfile)) {
//发送mqtt给算法,处理完
mqttGatewayPublish.publish(topic, new CommonTopicRequest().setData(frameDTO), 1);
} else {
//图片处理
// fileService.get(MinIOConstants.BUCKET_MEDIAFILE, originMateFileUrl, 3600);
//复制原图到指定bucket
String copyFileUrl = fileService.copyFile(MinIOConstants.BUCKET_MEDIAFILE, originMateFileUrl, MinIOConstants.BUCKET_DKCY);
// String copyFileUrl = fileService.copyFile(MinIOConstants.BUCKET_MEDIAFILE, originFileUrl, MinIOConstants.BUCKET_ALERT);
ArrayList<RemoteBusinessAlertVo> alertVoList = new ArrayList<>();
//手动简化逻辑,上传图片
int frameCount =0;
for (Map<String, Object> alertMap : frameDTO.getFrameList()) {
if(frameCount >= 1 ){continue;} //暂时只保存一个文件
//businessAlert数据
RemoteBusinessAlertVo remoteBusinessAlertVo = new RemoteBusinessAlertVo();
// remoteBusinessAlertVo.setAlertType("1"); //1:图片比对预警 2:AI实时预警
remoteBusinessAlertVo.setJobId(aiCompareEntity.getJobId());
remoteBusinessAlertVo.setJobName(aiCompareEntity.getJobName());
remoteBusinessAlertVo.setAssign(false);
remoteBusinessAlertVo.setImages(originMateFileUrl);//fileUrl
remoteBusinessAlertVo.setMaxImages(originMateFileUrl);//mateFileUrl
remoteBusinessAlertVo.setMateSourceImgUrl(originFileUrl);//mateFileUrl
remoteBusinessAlertVo.setLat("34.20912175973148");
remoteBusinessAlertVo.setLng("117.2260332850499");
remoteBusinessAlertVo.setLabelCn(MapUtil.getStr(alertMap,"labelCn",""));
remoteBusinessAlertVo.setLabelEn(MapUtil.getStr(alertMap,"labelEn",""));
remoteBusinessAlertVo.setTaskContent("");
//面积计算
setupArea(alertMap, remoteBusinessAlertVo);
remoteBusinessAlertVo.setHandleType("waiting");
remoteBusinessAlertVo.setDeptId(aiCompareEntity.getCreateDept()+"");
remoteBusinessAlertVo.setDeptName(aiCompareEntity.getDeptName());
remoteBusinessAlertVo.setHandleNum(0);
//businessAlertConstructInfo数据
RemoteBusinessAlertConstructInfo acInfo = new RemoteBusinessAlertConstructInfo();
acInfo.setBusinessType(2l);
acInfo.setJobId(aiCompareEntity.getJobId());
acInfo.setJobName(aiCompareEntity.getJobName());
acInfo.setConstructName(MapUtil.getStr(alertMap,"constructName",""));
acInfo.setConstructDept(MapUtil.getStr(alertMap,"constructDept",""));
acInfo.setConstructLeader(MapUtil.getStr(alertMap,"constructLeader",""));
acInfo.setPhonenumber(MapUtil.getStr(alertMap,"phonenumber",""));
acInfo.setAddress(MapUtil.getStr(alertMap,"address",""));
acInfo.setPipeline(MapUtil.getStr(alertMap,"pipeline",""));
acInfo.setRemark(MapUtil.getStr(alertMap,"remark",""));
remoteBusinessAlertVo.setRemoteAlertConstructInfo(acInfo);
alertVoList.add(remoteBusinessAlertVo);
frameCount +=1;
}
businessAlertService.saveBusinessAlert(alertVoList,activeProfile);
}
return true; return true;
} }
private static void setupArea(Map<String, Object> alertMap, RemoteBusinessAlertVo remoteBusinessAlertVo) {
double lx = MapUtil.getInt(alertMap,"lx",0);
double ly = MapUtil.getInt(alertMap,"ly",0);
double rx = MapUtil.getInt(alertMap,"rx",0);
double ry = MapUtil.getInt(alertMap,"ry",0);
double areaw = Math.abs(rx - lx);
double areal = Math.abs(ry - ly);
double area = areaw * areal;
remoteBusinessAlertVo.setArea((long)area);
remoteBusinessAlertVo.setAreaL((long)areal);
remoteBusinessAlertVo.setAreaW((long)areaw);
JSONObject entries = new JSONObject();
entries.set("lef_x", lx);
entries.set("lef_y", ly);
entries.set("right_x", rx);
entries.set("right_y", ry);
remoteBusinessAlertVo.setPixelCoordinate(entries.toString());
}
@Override @Override
public Boolean expose(List<Map<String,Object>> mapList) { public Boolean expose(List<Map<String,Object>> mapList) {
if(!mapList.isEmpty()){ if(!mapList.isEmpty()){
@ -246,7 +337,7 @@ public class AiCompareServiceImpl implements IAiCompareService {
AiCompareAlertDTO compareAlertDTO = Convert.convert(AiCompareAlertDTO.class,map); AiCompareAlertDTO compareAlertDTO = Convert.convert(AiCompareAlertDTO.class,map);
aiComparePlateMapper.update(new LambdaUpdateWrapper<AiComparePlateEntity>().eq(AiComparePlateEntity::getFileId,compareAlertDTO.getFileId()).set(AiComparePlateEntity::getPatternName,compareAlertDTO.getDiscernImgUrl())); aiComparePlateMapper.update(new LambdaUpdateWrapper<AiComparePlateEntity>().eq(AiComparePlateEntity::getFileId,compareAlertDTO.getFileId()).set(AiComparePlateEntity::getPatternName,compareAlertDTO.getDiscernImgUrl()));
List<RemoteBusinessAlertVo> handleList = compareAlertDTO.getHandleList(); List<RemoteBusinessAlertVo> handleList = compareAlertDTO.getHandleList();
return businessAlertService.saveBusinessAlert(handleList); return businessAlertService.saveBusinessAlert(handleList,"default");
} }
@Override @Override

20
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java

@ -241,8 +241,14 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) { if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) {
continue; continue;
} }
Optional<DeviceDTO> deviceOnline = deviceRedisService.getDeviceOnline(param.getDockSn());
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, loginUser.getUsername(), new Date(beginTime), new Date(endTime)); if(deviceOnline.isEmpty()){
throw new SQLException("机场信息不存在");
}
if(deviceOnline.get().getProId() == null){
throw new SQLException("项目组不存在");
}
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, loginUser.getUsername(), new Date(beginTime), new Date(endTime),deviceOnline.get().getProId());
if (waylineJobOpt.isEmpty()) { if (waylineJobOpt.isEmpty()) {
throw new SQLException("无法创建路线作业。"); throw new SQLException("无法创建路线作业。");
} }
@ -273,8 +279,14 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) { if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) {
continue; continue;
} }
Optional<DeviceDTO> deviceOnline = deviceRedisService.getDeviceOnline(param.getDockSn());
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, username, new Date(beginTime), new Date(endTime)); if(deviceOnline.isEmpty()){
throw new SQLException("机场信息不存在");
}
if(deviceOnline.get().getProId() == null){
throw new SQLException("项目组不存在");
}
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, username, new Date(beginTime), new Date(endTime),deviceOnline.get().getProId());
if (waylineJobOpt.isEmpty()) { if (waylineJobOpt.isEmpty()) {
throw new SQLException("无法创建路线作业。"); throw new SQLException("无法创建路线作业。");
} }

15
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java

@ -3,6 +3,7 @@ package org.dromara.sample.wayline.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.constant.DeviceQrtzConstants; import org.dromara.common.core.constant.DeviceQrtzConstants;
import org.dromara.common.sdk.cloudapi.device.OsdDockDrone;
import org.dromara.common.sdk.cloudapi.wayline.*; import org.dromara.common.sdk.cloudapi.wayline.*;
import org.dromara.common.sdk.cloudapi.wayline.api.AbstractWaylineService; import org.dromara.common.sdk.cloudapi.wayline.api.AbstractWaylineService;
import org.dromara.common.sdk.mqtt.MqttReply; import org.dromara.common.sdk.mqtt.MqttReply;
@ -16,8 +17,10 @@ import org.dromara.sample.common.error.CommonErrorEnum;
import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper;
import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.entity.DeviceFlightRecordsEntity;
import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity; import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity;
import org.dromara.sample.manage.model.enums.UserTypeEnum; import org.dromara.sample.manage.model.enums.UserTypeEnum;
import org.dromara.sample.manage.service.IDeviceFlightRecordsService;
import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.media.model.MediaFileCountDTO; import org.dromara.sample.media.model.MediaFileCountDTO;
import org.dromara.sample.media.service.IMediaRedisService; import org.dromara.sample.media.service.IMediaRedisService;
@ -71,6 +74,9 @@ public class SDKWaylineService extends AbstractWaylineService {
@Autowired @Autowired
private IWebSocketMessageService webSocketMessageService; private IWebSocketMessageService webSocketMessageService;
@Autowired
private IDeviceFlightRecordsService deviceFlightRecordsService;
@Override @Override
public TopicEventsResponse<MqttReply> deviceExitHomingNotify(TopicEventsRequest<DeviceExitHomingNotify> request, MessageHeaders headers) { public TopicEventsResponse<MqttReply> deviceExitHomingNotify(TopicEventsRequest<DeviceExitHomingNotify> request, MessageHeaders headers) {
return super.deviceExitHomingNotify(request, headers); return super.deviceExitHomingNotify(request, headers);
@ -105,6 +111,15 @@ public class SDKWaylineService extends AbstractWaylineService {
.completedTime(LocalDateTime.now()) .completedTime(LocalDateTime.now())
.mediaCount(output.getExt().getMediaCount()) .mediaCount(output.getExt().getMediaCount())
.build(); .build();
//Optional<OsdDockDrone> deviceOsd = deviceRedisService.getDeviceOsd(deviceOpt.get().getChildDeviceSn(), OsdDockDrone.class);
// Integer totalFlightSorties = deviceOsd.get().getTotalFlightSorties();
// Float totalFlightTime = deviceOsd.get().getTotalFlightTime();
// DeviceFlightRecordsEntity deviceFlightRecords = new DeviceFlightRecordsEntity();
// deviceFlightRecords.setDeviceSn(response.getGateway());
// deviceFlightRecords.setFlyCount(totalFlightSorties);
// deviceFlightRecords.setFlyAccTime(totalFlightTime.intValue());
// deviceFlightRecordsService.saveDeviceFlight(deviceFlightRecords);
// record the update of the media count. // record the update of the media count.
if (Objects.nonNull(job.getMediaCount()) && job.getMediaCount() != 0) { if (Objects.nonNull(job.getMediaCount()) && job.getMediaCount() != 0) {

53
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java

@ -17,6 +17,7 @@ import org.dom4j.io.SAXReader;
import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum; import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceEnum; import org.dromara.common.sdk.cloudapi.device.DeviceEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceSubTypeEnum; import org.dromara.common.sdk.cloudapi.device.DeviceSubTypeEnum;
@ -28,6 +29,8 @@ import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.resource.api.RemoteFileService; import org.dromara.resource.api.RemoteFileService;
import org.dromara.resource.api.domain.RemoteFile; import org.dromara.resource.api.domain.RemoteFile;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.wayline.mapper.IAudioFileMapper; import org.dromara.sample.wayline.mapper.IAudioFileMapper;
import org.dromara.sample.wayline.mapper.IWaylineFileMapper; import org.dromara.sample.wayline.mapper.IWaylineFileMapper;
import org.dromara.sample.wayline.model.dto.KmzFileProperties; import org.dromara.sample.wayline.model.dto.KmzFileProperties;
@ -35,6 +38,7 @@ import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity; import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity; import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.dromara.sample.wayline.service.IWaylineFileService; import org.dromara.sample.wayline.service.IWaylineFileService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -77,9 +81,21 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
@DubboReference @DubboReference
private RemoteFileService remoteFileService; private RemoteFileService remoteFileService;
@Autowired
private IDeviceProService deviceProService;
@Autowired
private IDeviceRedisService deviceRedisService;
@Override @Override
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param) { public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List<Integer> proIds) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(proIds == null){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
// Paging Query // Paging Query
List<Integer> finalProIds = proIds;
Page<WaylineFileEntity> page = mapper.selectPage( Page<WaylineFileEntity> page = mapper.selectPage(
new Page<WaylineFileEntity>(param.getPage(), param.getPageSize()), new Page<WaylineFileEntity>(param.getPage(), param.getPageSize()),
new LambdaQueryWrapper<WaylineFileEntity>() new LambdaQueryWrapper<WaylineFileEntity>()
@ -103,6 +119,9 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
.and(ObjectUtil.isNotEmpty(param.getDeviceSn()), wrapper -> { .and(ObjectUtil.isNotEmpty(param.getDeviceSn()), wrapper -> {
wrapper.eq(WaylineFileEntity::getDeviceSn, param.getDeviceSn()).or(); wrapper.eq(WaylineFileEntity::getDeviceSn, param.getDeviceSn()).or();
}) })
.and(ObjectUtil.isAllNotEmpty(proIds), wrapper -> {
wrapper.in(WaylineFileEntity::getProId, finalProIds);
})
.like(Objects.nonNull(param.getKey()), WaylineFileEntity::getName, param.getKey()) .like(Objects.nonNull(param.getKey()), WaylineFileEntity::getName, param.getKey())
// There is a risk of SQL injection // There is a risk of SQL injection
.last(Objects.nonNull(param.getOrderBy()), " order by " + param.getOrderBy().toString())); .last(Objects.nonNull(param.getOrderBy()), " order by " + param.getOrderBy().toString()));
@ -115,6 +134,24 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
return new PaginationData<>(records, new Pagination(page.getCurrent(), page.getSize(), page.getTotal())); return new PaginationData<>(records, new Pagination(page.getCurrent(), page.getSize(), page.getTotal()));
} }
@Override
public List<GetWaylineListResponse> getWaylinesByParamList(String workspaceId,Integer proId) {
List<WaylineFileEntity> waylineFileEntities = mapper.selectList(
new LambdaQueryWrapper<WaylineFileEntity>()
.eq(WaylineFileEntity::getWorkspaceId, workspaceId)
.eq(WaylineFileEntity::getProId, proId)
// There is a risk of SQL injection
.orderByDesc(WaylineFileEntity::getCreateTime));
// Wrap the results of a paging query into a custom paging object.
List<GetWaylineListResponse> records = waylineFileEntities
.stream()
.map(this::entityConvertToDTO)
.collect(Collectors.toList());
return records;
}
@Override @Override
public Optional<GetWaylineListResponse> getWaylineByWaylineId(String workspaceId, String waylineId) { public Optional<GetWaylineListResponse> getWaylineByWaylineId(String workspaceId, String waylineId) {
return Optional.ofNullable( return Optional.ofNullable(
@ -203,7 +240,10 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
} }
@Override @Override
public void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn) { public void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn,Integer proId) {
if(ObjectUtil.isNull(proId)){
proId = deviceRedisService.getDeviceOnline(deviceSn).get().getProId();
}
Optional<WaylineFileDTO> waylineFileOpt = validKmzFile(file); Optional<WaylineFileDTO> waylineFileOpt = validKmzFile(file);
if (waylineFileOpt.isEmpty()) { if (waylineFileOpt.isEmpty()) {
throw new RuntimeException("文件格式不正确。"); throw new RuntimeException("文件格式不正确。");
@ -230,6 +270,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
}else { }else {
waylineFile.setFileNo(1); waylineFile.setFileNo(1);
} }
waylineFile.setProId(proId);
this.saveWaylineFile(workspaceId, waylineFile); this.saveWaylineFile(workspaceId, waylineFile);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
@ -244,6 +285,13 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
return waylineId; return waylineId;
} }
@Override
public WaylineFileEntity getWaylineFileByWaylineId(Integer waylineId) {
return mapper.selectOne(
new LambdaQueryWrapper<WaylineFileEntity>()
.eq(WaylineFileEntity::getId, waylineId));
}
@Override @Override
public PaginationData<GetWaylineListResponse> getWaylinesByParamNew(String workspaceId, GetWaylineListRequest param) { public PaginationData<GetWaylineListResponse> getWaylinesByParamNew(String workspaceId, GetWaylineListRequest param) {
Page<WaylineFileEntity> waylineFileEntityPage = new Page<>(param.getPage(), param.getPageSize()); Page<WaylineFileEntity> waylineFileEntityPage = new Page<>(param.getPage(), param.getPageSize());
@ -466,6 +514,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
.favorited(file.getFavorited()) .favorited(file.getFavorited())
.sign(file.getSign()) .sign(file.getSign())
.deviceSn(file.getDeviceSns().get(0)) .deviceSn(file.getDeviceSns().get(0))
.proId(file.getProId())
.build(); .build();
} }

37
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java

@ -1,10 +1,12 @@
package org.dromara.sample.wayline.service.impl; package org.dromara.sample.wayline.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.redis.config.RedisConst; import org.dromara.common.redis.config.RedisConst;
import org.dromara.common.redis.utils.RedisOpsUtils; import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum; import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum; import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.OsdDock; import org.dromara.common.sdk.cloudapi.device.OsdDock;
@ -12,8 +14,10 @@ import org.dromara.common.sdk.cloudapi.device.OsdDockDrone;
import org.dromara.common.sdk.cloudapi.wayline.*; import org.dromara.common.sdk.cloudapi.wayline.*;
import org.dromara.common.sdk.common.Pagination; import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.common.sdk.exception.CloudSDKException;
import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.IDeviceService;
import org.dromara.sample.media.model.MediaFileCountDTO; import org.dromara.sample.media.model.MediaFileCountDTO;
@ -29,12 +33,14 @@ import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.sample.wayline.service.IWaylineRedisService; import org.dromara.sample.wayline.service.IWaylineRedisService;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.sql.SQLException;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
@ -72,6 +78,9 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
@Autowired @Autowired
private IWaylineRedisService waylineRedisService; private IWaylineRedisService waylineRedisService;
@Autowired
private IDeviceProService deviceProService;
private Optional<WaylineJobDTO> insertWaylineJob(WaylineJobEntity jobEntity) { private Optional<WaylineJobDTO> insertWaylineJob(WaylineJobEntity jobEntity) {
int id = mapper.insert(jobEntity); int id = mapper.insert(jobEntity);
if (id <= 0) { if (id <= 0) {
@ -81,7 +90,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
} }
@Override @Override
public Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime) { public Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime,Integer proId) {
if (Objects.isNull(param)) { if (Objects.isNull(param)) {
return Optional.empty(); return Optional.empty();
} }
@ -104,6 +113,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
.mediaCount(0) .mediaCount(0)
.breakPoint(param.getBreakPoint()) .breakPoint(param.getBreakPoint())
.jobType(param.getJobType().getType()) .jobType(param.getJobType().getType())
.proId(proId)
.build(); .build();
return insertWaylineJob(jobEntity); return insertWaylineJob(jobEntity);
@ -163,13 +173,26 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
} }
@Override @Override
public PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize) { public PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List<Integer> proIds,String name) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(ObjectUtil.isAllEmpty(proIds)){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
LambdaQueryWrapper<WaylineJobEntity> waylineJobEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
waylineJobEntityLambdaQueryWrapper.eq(WaylineJobEntity::getWorkspaceId, workspaceId);
if(ObjectUtil.isNotEmpty(fileId)) {
waylineJobEntityLambdaQueryWrapper.eq(WaylineJobEntity::getFileId, fileId);
}
waylineJobEntityLambdaQueryWrapper.in(ObjectUtil.isAllNotEmpty(proIds),WaylineJobEntity::getProId,proIds);
if(ObjectUtil.isNotEmpty(name)){
waylineJobEntityLambdaQueryWrapper.and(wrapper ->{
wrapper.like(WaylineJobEntity::getName, name).or().like(WaylineJobEntity::getWaylineName, name);
});
};
waylineJobEntityLambdaQueryWrapper.orderByDesc(WaylineJobEntity::getId);
Page<WaylineJobEntity> pageData = mapper.selectPage( Page<WaylineJobEntity> pageData = mapper.selectPage(
new Page<WaylineJobEntity>(page, pageSize), new Page<WaylineJobEntity>(page, pageSize),waylineJobEntityLambdaQueryWrapper);
new LambdaQueryWrapper<WaylineJobEntity>() List<WaylineJobDTO> records = pageData.getRecords()
.eq(WaylineJobEntity::getWorkspaceId, workspaceId)
.orderByDesc(WaylineJobEntity::getId));
List<WaylineJobDTO> records = pageData.getRecords()
.stream() .stream()
.map(this::entity2Dto) .map(this::entity2Dto)
.collect(Collectors.toList()); .collect(Collectors.toList());

6
dk-modules/sample/src/main/resources/mapper/DeviceQrtzMapper.xml

@ -43,6 +43,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id} #{id}
</foreach> </foreach>
</if> </if>
<if test="condition.proIds.size > 0">
AND wd.pro_id in
<foreach item="proId" collection="condition.proIds" open="(" separator="," close=")">
#{proId}
</foreach>
</if>
order by wdq.status asc, wdq.create_time desc order by wdq.status asc, wdq.create_time desc
</select> </select>
<select id="calendarList" resultType="java.util.Map"></select> <select id="calendarList" resultType="java.util.Map"></select>

54
dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.sample.manage.mapper.IDeviceProMapper"> <mapper namespace="org.dromara.sample.manage.mapper.IDeviceProMapper">
<resultMap id="listDeviceProEntityMap" type="org.dromara.sample.manage.model.entity.DeviceProEntity"> <resultMap id="listDeviceProEntityMap" type="org.dromara.sample.manage.model.entity.DeviceProEntity">
<result column="pro_id" property="id"/> <result column="pro_id" property="id"/>
@ -10,24 +10,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result column="bind_type" property="bindType"/> <result column="bind_type" property="bindType"/>
<result column="nick_name" property="nickName"/> <result column="nick_name" property="nickName"/>
<result column="create_time" property="createTime"/> <result column="create_time" property="createTime"/>
<collection property="deviceProUserEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceProUserEntity">
<result column="pro_user_id" property="id"/>
<result column="device_pro_id" property="deviceProId"/>
<result column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
</collection>
<collection property="deviceEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceEntity">
<result column="device_id" property="id"/>
<result column="device_sn" property="deviceSn"/>
<result column="device_name" property="deviceName"/>
<result column="device_type" property="deviceType"/>
<result column="sub_type" property="subType"/>
<result column="domain" property="domain"/>
<result column="child_sn" property="childSn"/>
<result column="workspace_id" property="workspaceId"/>
<result column="device_pro_number" property="proId"/>
<result column="device_nick_name" property="nickname"/>
</collection>
</resultMap> </resultMap>
<select id="listDeviceProEntityMap" resultMap="listDeviceProEntityMap"> <select id="listDeviceProEntityMap" resultMap="listDeviceProEntityMap">
SELECT SELECT
@ -36,32 +18,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dp.bind_code, dp.bind_code,
dp.bind_type, dp.bind_type,
dp.nick_name, dp.nick_name,
dp.create_time, dp.create_time
dpu.id pro_user_id,
dpu.device_pro_id,
dpu.user_id,
dpu.user_name,
d.id device_id,
d.device_sn,
d.device_name,
d.device_type,
d.sub_type,
d.domain,
d.child_sn,
d.workspace_id,
d.pro_id device_pro_number,
d.nickname device_nick_name
FROM FROM
manage_device_pro dp manage_device_pro dp
LEFT JOIN manage_device d ON dp.id = d.pro_id
LEFT JOIN manage_device_pro_user dpu ON dp.id = dpu.device_pro_id
<where> <where>
<if test="condition.bind_code != null and condition.bind_code != ''"> <if test="condition.bind_code != null and condition.bind_code != ''">
and dp.bind_code like concat(concat('%',#{condition.bind_code}),'%') and dp.bind_code like concat(concat('%',#{condition.bind_code}),'%')
</if> </if>
<if test="condition.pro_name != null and condition.pro_name != ''"> <if test="condition.pro_name != null and condition.pro_name != ''">
and dp.pro_name like concat(concat('%',#{condition.pro_name}),'%') and dp.pro_name like concat(concat('%',#{condition.pro_name}),'%')
</if> </if>
</where> </where>
</select> </select>
</mapper> </mapper>

25
dk-modules/system/src/main/java/org/dromara/system/config/ProjectTablePrefixConfig.java

@ -0,0 +1,25 @@
package org.dromara.system.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* 系统-表名配置
* 多个profile环境中会查询不同表需要处理拼接表名 ,比如 dk_business变成 w_dk_business
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "projecttableprefix")
public class ProjectTablePrefixConfig {
@Value("${projectTablePrefix.tableBusiness:dk_business")
private String tableBusiness;
@Value("${projectTablePrefix.tableCloud:dk_cloud")
private String tableCloud;
@Value("${projectTablePrefix.tableWorkflow:dk_workflow")
private String tableWorkflow;
}

17
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java

@ -1,5 +1,6 @@
package org.dromara.system.dubbo; package org.dromara.system.dubbo;
import cn.hutool.core.convert.Convert;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.DubboService;
@ -9,9 +10,14 @@ import org.dromara.resource.api.RemoteMessageService;
import org.dromara.system.api.RemoteNoticeService; import org.dromara.system.api.RemoteNoticeService;
import org.dromara.system.api.domain.bo.RemoteNoticeBo; import org.dromara.system.api.domain.bo.RemoteNoticeBo;
import org.dromara.system.domain.SysNotice; import org.dromara.system.domain.SysNotice;
import org.dromara.system.domain.vo.SysDictDataVo;
import org.dromara.system.mapper.SysNoticeMapper; import org.dromara.system.mapper.SysNoticeMapper;
import org.dromara.system.service.ISysDictTypeService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/** /**
@ -27,12 +33,21 @@ public class RemoteNoticeServiceImpl implements RemoteNoticeService {
private final SysNoticeMapper sysNoticeMapper; private final SysNoticeMapper sysNoticeMapper;
@DubboReference @DubboReference
private final RemoteMessageService remoteMessageService; private final RemoteMessageService remoteMessageService;
private final ISysDictTypeService dictTypeService;
private final ScheduledExecutorService scheduledExecutorService;
@Override @Override
public int saveNotice(RemoteNoticeBo bo) { public int saveNotice(RemoteNoticeBo bo) {
SysNotice notice = MapstructUtils.convert(bo, SysNotice.class); SysNotice notice = MapstructUtils.convert(bo, SysNotice.class);
/*String type = dictService.getDictLabel("sys_notice_type", notice.getNoticeType());*/ /*String type = dictService.getDictLabel("sys_notice_type", notice.getNoticeType());*/
remoteMessageService.publishAll(bo.getParam()); List<SysDictDataVo> data = dictTypeService.selectDictDataByType("ai_push");
List<Long> list = data.stream().map(SysDictDataVo::getDictValue).distinct().toList().stream().map(Long::parseLong).toList();
//获取字典值
scheduledExecutorService.schedule(() -> {
remoteMessageService.publishMessage(list, bo.getParam());
}, 3, TimeUnit.SECONDS);
return sysNoticeMapper.insert(notice); return sysNoticeMapper.insert(notice);
} }
} }

3
dk-modules/system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java

@ -8,6 +8,7 @@ import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.helper.DataBaseHelper; import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.system.config.ProjectTablePrefixConfig;
import org.dromara.system.domain.SysDept; import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysDeptVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -72,5 +73,5 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
List<Map<String,Object>> getNamePathList(); List<Map<String,Object>> getNamePathList();
List<SysDeptVo> listTreeDept(@Param("deptId") Long deptId); List<SysDeptVo> listTreeDept(@Param("deptId") Long deptId, @Param("tbPrefix") ProjectTablePrefixConfig tbPrefix);
} }

8
dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java

@ -8,6 +8,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.constant.SystemConstants;
@ -21,6 +22,7 @@ import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.common.redis.utils.CacheUtils; import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.domain.vo.RemoteDeptVo; import org.dromara.system.api.domain.vo.RemoteDeptVo;
import org.dromara.system.config.ProjectTablePrefixConfig;
import org.dromara.system.domain.SysDept; import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysRole; import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
@ -30,6 +32,7 @@ import org.dromara.system.mapper.SysDeptMapper;
import org.dromara.system.mapper.SysRoleMapper; import org.dromara.system.mapper.SysRoleMapper;
import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.service.ISysDeptService; import org.dromara.system.service.ISysDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -52,6 +55,9 @@ public class SysDeptServiceImpl implements ISysDeptService {
private final SysRoleMapper roleMapper; private final SysRoleMapper roleMapper;
private final SysUserMapper userMapper; private final SysUserMapper userMapper;
@Autowired
private ProjectTablePrefixConfig ptPrefix;
/** /**
* 查询部门管理数据 * 查询部门管理数据
* *
@ -383,7 +389,7 @@ public class SysDeptServiceImpl implements ISysDeptService {
@Override @Override
public List<SysDeptVo> listTreeDept(Long deptId) { public List<SysDeptVo> listTreeDept(Long deptId) {
return baseMapper.listTreeDept(deptId); return baseMapper.listTreeDept(deptId, ptPrefix); //.getTableCloud()
} }
} }

5
dk-modules/system/src/main/resources/mapper/system/SysDeptMapper.xml

@ -84,19 +84,20 @@
deptId deptId
</select> </select>
<!-- w_dk_cloud-->
<select id="listTreeDept" resultType="org.dromara.system.domain.vo.SysDeptVo"> <select id="listTreeDept" resultType="org.dromara.system.domain.vo.SysDeptVo">
WITH RECURSIVE warning_summary AS ( WITH RECURSIVE warning_summary AS (
SELECT SELECT
sd1.* sd1.*
FROM FROM
dk_cloud.sys_dept sd1 ${tbPrefix.tableCloud}.sys_dept sd1
WHERE WHERE
dept_id = #{deptId} dept_id = #{deptId}
UNION ALL UNION ALL
SELECT SELECT
d.* d.*
FROM FROM
dk_cloud.sys_dept d ${tbPrefix.tableCloud}.sys_dept d
JOIN warning_summary dt ON d.parent_id = dt.dept_id JOIN warning_summary dt ON d.parent_id = dt.dept_id
WHERE WHERE
d.del_flag = '0' d.del_flag = '0'

Loading…
Cancel
Save