吴远 4 months ago
parent
commit
ff1740a3d4
  1. 6
      dk-api/api-bom/pom.xml
  2. 26
      dk-api/api-business/pom.xml
  3. 19
      dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java
  4. 7
      dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java
  5. 2
      dk-api/api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
  6. 5
      dk-api/api-workflow/pom.xml
  7. 21
      dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java
  8. 19
      dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/enums/WorkflowCodeEnum.java
  9. 1
      dk-api/pom.xml
  10. 4
      dk-auth/src/main/java/org/dromara/auth/controller/CaptchaController.java
  11. 10
      dk-auth/src/main/java/org/dromara/auth/controller/TokenController.java
  12. 18
      dk-common/common-core/src/main/java/org/dromara/common/core/enums/BusinessStatusEnum.java
  13. 2
      dk-common/common-sse/src/main/java/org/dromara/common/sse/config/SseAutoConfiguration.java
  14. 10
      dk-common/common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java
  15. 1
      dk-common/common-sse/src/main/java/org/dromara/common/sse/listener/SseTopicListener.java
  16. 53
      dk-modules/business/pom.xml
  17. 61
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java
  18. 63
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java
  19. 89
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessDepartBoundaryController.java
  20. 99
      dk-modules/business/src/main/java/org/dromara/business/controller/WaylineAlertController.java
  21. 232
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  22. 75
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessDepartBoundary.java
  23. 151
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessGeospatialVectors.java
  24. 76
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessPatrolAreas.java
  25. 47
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessVectorDict.java
  26. 47
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessVectorDictItem.java
  27. 47
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java
  28. 44
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessPatrolAreasBo.java
  29. 11
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessPlatformInfoBo.java
  30. 226
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/WaylineAlertBo.java
  31. 31
      dk-modules/business/src/main/java/org/dromara/business/domain/enums/AlertTypeEnum.java
  32. 86
      dk-modules/business/src/main/java/org/dromara/business/domain/model/StatObj.java
  33. 28
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java
  34. 29
      dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java
  35. 51
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  36. 30
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessDepartBoundaryMapper.java
  37. 22
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessPatrolAreasMapper.java
  38. 8
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessVectorDictItemMapper.java
  39. 10
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessVectorDictMapper.java
  40. 18
      dk-modules/business/src/main/java/org/dromara/business/mapper/WaylineAlertMapper.java
  41. 17
      dk-modules/business/src/main/java/org/dromara/business/service/BusinessAlertStatisticsService.java
  42. 66
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  43. 30
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessDepartBoundaryService.java
  44. 29
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessPatrolAreasService.java
  45. 12
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessVectorDictItemService.java
  46. 17
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessVectorDictService.java
  47. 78
      dk-modules/business/src/main/java/org/dromara/business/service/IWaylineAlertService.java
  48. 214
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  49. 98
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  50. 235
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessDepartBoundaryServiceImpl.java
  51. 197
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessPatrolAreasServiceImpl.java
  52. 28
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessVectorDictItemServiceImpl.java
  53. 37
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessVectorDictServiceImpl.java
  54. 141
      dk-modules/business/src/main/java/org/dromara/business/service/impl/WaylineAlertServiceImpl.java
  55. 39
      dk-modules/business/src/main/java/org/dromara/business/utils/BatchProcessorUtil.java
  56. 368
      dk-modules/business/src/main/java/org/dromara/business/utils/ShpAnalysisUtil.java
  57. 205
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  58. 147
      dk-modules/business/src/main/resources/mapper/business/BusinessDepartBoundaryMapper.xml
  59. 55
      dk-modules/business/src/main/resources/mapper/business/BusinessPatrolAreasMapper.xml
  60. 7
      dk-modules/business/src/main/resources/mapper/business/BusinessVectorDictItemMapper.xml
  61. 28
      dk-modules/business/src/main/resources/mapper/business/BusinessVectorDictMapper.xml
  62. 51
      dk-modules/business/src/main/resources/mapper/business/WaylineAlertMapper.xml
  63. 4
      dk-modules/resource/src/main/java/org/dromara/resource/controller/SysEmailController.java
  64. 9
      dk-modules/resource/src/main/java/org/dromara/resource/controller/SysOssConfigController.java
  65. 8
      dk-modules/resource/src/main/java/org/dromara/resource/controller/SysOssController.java
  66. 4
      dk-modules/resource/src/main/java/org/dromara/resource/controller/SysSmsController.java
  67. 4
      dk-modules/system/src/main/java/org/dromara/system/controller/monitor/CacheController.java
  68. 8
      dk-modules/system/src/main/java/org/dromara/system/controller/monitor/SysLogininforController.java
  69. 7
      dk-modules/system/src/main/java/org/dromara/system/controller/monitor/SysOperlogController.java
  70. 11
      dk-modules/system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java
  71. 6
      dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java
  72. 6
      dk-modules/system/src/main/java/org/dromara/system/domain/SysDept.java
  73. 5
      dk-modules/system/src/main/java/org/dromara/system/domain/SysMenu.java
  74. 5
      dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java
  75. 6
      dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysMenuBo.java
  76. 5
      dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java
  77. 5
      dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysMenuVo.java
  78. 21
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java
  79. 6
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java
  80. 3
      dk-modules/system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java
  81. 5
      dk-modules/system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java
  82. 3
      dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
  83. 14
      dk-modules/system/src/main/java/org/dromara/system/service/ISysDeptService.java
  84. 2
      dk-modules/system/src/main/java/org/dromara/system/service/ISysMenuService.java
  85. 1
      dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java
  86. 16
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java
  87. 6
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java
  88. 9
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
  89. 40
      dk-modules/system/src/main/resources/mapper/system/SysDeptMapper.xml
  90. 6
      dk-modules/system/src/main/resources/mapper/system/SysMenuMapper.xml
  91. 13
      dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml
  92. 11
      dk-modules/workflow/pom.xml
  93. 34
      dk-modules/workflow/src/main/java/org/dromara/workflow/common/handler/FlwCommonHandler.java
  94. 20
      dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwCategoryController.java
  95. 24
      dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java
  96. 15
      dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwInstanceController.java
  97. 27
      dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java
  98. 5
      dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/FlowTaskBo.java
  99. 4
      dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java
  100. 18
      dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java

6
dk-api/api-bom/pom.xml

@ -41,6 +41,12 @@
<version>${revision}</version>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-business</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>

26
dk-api/api-business/pom.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>dk-api</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>api-business</artifactId>
<description>api-business业务接口模块
</description>
<dependencies>
<!-- RuoYi Common Core-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-core</artifactId>
</dependency>
</dependencies>
</project>

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

@ -0,0 +1,19 @@
package org.dromara.business.api;
/**
* 预警服务
*
* @author Lion Li
*/
public interface RemoteBusinessAlertService {
/**
* 更新此条预警审批时候的状态
* @param businessId 业务id(预警工单)
* @param flowStatus 流程状态
*/
void updateAlertStatus(String businessId, String flowStatus);
}

7
dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java

@ -3,6 +3,7 @@ package org.dromara.system.api;
import org.dromara.system.api.domain.vo.RemoteDeptVo;
import java.util.List;
import java.util.Map;
/**
* 部门服务
@ -20,4 +21,10 @@ public interface RemoteDeptService {
String selectDeptNameByIds(String deptIds);
List<RemoteDeptVo> selectDeptsByList();
RemoteDeptVo selectDeptById(Long deptId);
List<Map<String,Object>> getNamePathList();
List<RemoteDeptVo> selectListByParentId(String deptId);
}

2
dk-api/api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@ -155,4 +155,6 @@ public interface RemoteUserService {
* @return 用户
*/
List<RemoteUserVo> selectUsersByPostIds(List<Long> postIds);
List<RemoteUserVo> selectUserByUserIds(List<Long> userIds);
}

5
dk-api/api-workflow/pom.xml

@ -27,6 +27,11 @@
<artifactId>common-bus</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-system</artifactId>
</dependency>
</dependencies>
</project>

21
dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java

@ -1,5 +1,6 @@
package org.dromara.workflow.api;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
@ -77,12 +78,26 @@ public interface RemoteWorkflowService {
*/
RemoteStartProcessReturn startWorkFlow(RemoteStartProcess startProcess);
// /**
// * 办理任务
// *
// * @param completeTask 参数
// * @return 结果
// */
// boolean completeTask(RemoteCompleteTask completeTask);
/**
* 办理任务
* 获取当前任务的所有办理人
*
* @param completeTask 参数
* @param taskId 任务id
* @return 结果
*/
boolean completeTask(RemoteCompleteTask completeTask);
Map<Long, List<RemoteUserVo>> currentTaskAllUser(List<Long> taskId);
/**
* 审批前获取当前办理人办理时会校验的该权限集合
* 返回当前用户权限集合
*/
List<String> getPermissions();
}

19
dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/enums/WorkflowCodeEnum.java

@ -0,0 +1,19 @@
package org.dromara.workflow.api.domain.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 流程类型,后续有的话可以根据具体业务加,要保证流程定义里面的标识key和这边code保持一致
*/
@Getter
@AllArgsConstructor
public enum WorkflowCodeEnum {
ALERT("alert","预警流程");
final String code;
final String description;
}

1
dk-api/pom.xml

@ -13,6 +13,7 @@
<module>api-system</module>
<module>api-resource</module>
<module>api-workflow</module>
<module>api-business</module>
</modules>
<artifactId>dk-api</artifactId>

4
dk-auth/src/main/java/org/dromara/auth/controller/CaptchaController.java

@ -3,6 +3,8 @@ package org.dromara.auth.controller;
import cn.hutool.captcha.AbstractCaptcha;
import cn.hutool.captcha.generator.CodeGenerator;
import cn.hutool.core.util.IdUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.auth.domain.vo.CaptchaVo;
@ -31,6 +33,7 @@ import java.time.Duration;
*
* @author Lion Li
*/
@Tag(name = "验证码相关操作")
@Slf4j
@Validated
@RequiredArgsConstructor
@ -42,6 +45,7 @@ public class CaptchaController {
/**
* 生成验证码
*/
@Operation(summary = "生成验证码",description = "生成验证码")
@RateLimiter(time = 60, count = 10, limitType = LimitType.IP)
@GetMapping("/code")
public R<CaptchaVo> getCode() {

10
dk-auth/src/main/java/org/dromara/auth/controller/TokenController.java

@ -4,6 +4,8 @@ import cn.dev33.satoken.exception.NotLoginException;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -52,6 +54,7 @@ import java.util.concurrent.TimeUnit;
*
* @author Lion Li
*/
@Tag(name = "token相关服务")
@Slf4j
@RequiredArgsConstructor
@RestController
@ -78,6 +81,7 @@ public class TokenController {
* @param body 登录信息
* @return 结果
*/
@Operation(summary = "登录",description = "登录")
@ApiEncrypt
@PostMapping("/login")
public R<LoginVo> login(@RequestBody String body) {
@ -113,6 +117,7 @@ public class TokenController {
* @param source 登录来源
* @return 结果
*/
@Operation(summary = "第三方登录请求",description = "第三方登录请求")
@GetMapping("/binding/{source}")
public R<String> authBinding(@PathVariable("source") String source,
@RequestParam String tenantId, @RequestParam String domain) {
@ -135,6 +140,7 @@ public class TokenController {
* @param loginBody 请求体
* @return 结果
*/
@Operation(summary = "第三方登录回调业务处理",description = "第三方登录回调业务处理")
@PostMapping("/social/callback")
public R<Void> socialCallback(@RequestBody SocialLoginBody loginBody) {
// 获取第三方登录信息
@ -156,6 +162,7 @@ public class TokenController {
*
* @param socialId socialId
*/
@Operation(summary = "取消授权",description = "取消授权")
@DeleteMapping(value = "/unlock/{socialId}")
public R<Void> unlockSocial(@PathVariable Long socialId) {
Boolean rows = remoteSocialService.deleteWithValidById(socialId);
@ -165,6 +172,7 @@ public class TokenController {
/**
* 登出方法
*/
@Operation(summary = "登出方法",description = "登出方法")
@PostMapping("logout")
public R<Void> logout() {
sysLoginService.logout();
@ -174,6 +182,7 @@ public class TokenController {
/**
* 用户注册
*/
@Operation(summary = "用户注册",description = "用户注册")
@ApiEncrypt
@PostMapping("register")
public R<Void> register(@RequestBody RegisterBody registerBody) {
@ -190,6 +199,7 @@ public class TokenController {
*
* @return 租户列表
*/
@Operation(summary = "登录页面租户下拉框",description = "登录页面租户下拉框")
@GetMapping("/tenant/list")
public R<LoginTenantVo> tenantList(HttpServletRequest request) throws Exception {
// 返回对象

18
dk-common/common-core/src/main/java/org/dromara/common/core/enums/BusinessStatusEnum.java

@ -8,6 +8,7 @@ import org.dromara.common.core.utils.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
/**
* 业务状态枚举
@ -17,6 +18,12 @@ import java.util.List;
@Getter
@AllArgsConstructor
public enum BusinessStatusEnum {
/**
* 验证
*/
VERIFY("verify", "验证"),
/**
* 已撤销
*/
@ -72,6 +79,17 @@ public enum BusinessStatusEnum {
.orElse(StrUtil.EMPTY);
}
/**
* 根据status获取枚举
* @param status
* @return
*/
public static BusinessStatusEnum getByStatus(String status){
Optional<BusinessStatusEnum> optional = Arrays.stream(values()).filter(p -> StrUtil.equals(p.getStatus(),status)).findFirst();
return optional.orElse(null);
}
/**
* 启动流程校验
*

2
dk-common/common-sse/src/main/java/org/dromara/common/sse/config/SseAutoConfiguration.java

@ -14,7 +14,7 @@ import org.springframework.context.annotation.Bean;
* @author Lion Li
*/
@AutoConfiguration
@ConditionalOnProperty(value = "sse.enabled", havingValue = "true")
//@ConditionalOnProperty(value = "sse.enabled", havingValue = "true")
@EnableConfigurationProperties(SseProperties.class)
public class SseAutoConfiguration {

10
dk-common/common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java

@ -21,7 +21,7 @@ import java.util.List;
* @author Lion Li
*/
@RestController
@ConditionalOnProperty(value = "sse.enabled", havingValue = "true")
//@ConditionalOnProperty(value = "sse.enabled", havingValue = "true")
@RequiredArgsConstructor
public class SseController implements DisposableBean {
@ -30,7 +30,7 @@ public class SseController implements DisposableBean {
/**
* 建立 SSE 连接
*/
@GetMapping(value = "${sse.path}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@GetMapping(value = "/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter connect() {
String tokenValue = StpUtil.getTokenValue();
Long userId = LoginHelper.getUserId();
@ -40,7 +40,7 @@ public class SseController implements DisposableBean {
/**
* 关闭 SSE 连接
*/
@GetMapping(value = "${sse.path}/close")
@GetMapping(value = "/sse/close")
public R<Void> close() {
String tokenValue = StpUtil.getTokenValue();
Long userId = LoginHelper.getUserId();
@ -54,7 +54,7 @@ public class SseController implements DisposableBean {
* @param userId 目标用户的 ID
* @param msg 要发送的消息内容
*/
@GetMapping(value = "${sse.path}/send")
@GetMapping(value = "/sse/send")
public R<Void> send(Long userId, String msg) {
SseMessageDto dto = new SseMessageDto();
dto.setUserIds(List.of(userId));
@ -68,7 +68,7 @@ public class SseController implements DisposableBean {
*
* @param msg 要发送的消息内容
*/
@GetMapping(value = "${sse.path}/sendAll")
@GetMapping(value = "/sse/sendAll")
public R<Void> send(String msg) {
sseEmitterManager.publishAll(msg);
return R.ok();

1
dk-common/common-sse/src/main/java/org/dromara/common/sse/listener/SseTopicListener.java

@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
/**
* SSE 主题订阅监听器

53
dk-modules/business/pom.xml

@ -91,6 +91,56 @@
<artifactId>common-encrypt</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-business</artifactId>
</dependency>
<!-- AutoPoi Excel工具类-->
<dependency>
<groupId>org.jeecgframework</groupId>
<artifactId>autopoi-web</artifactId>
<version>1.4.4</version>
<exclusions>
<exclusion>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-workflow</artifactId>
</dependency>
<!-- 矢量依赖-->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geometry</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-jts-wrapper</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>29.5</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
@ -109,6 +159,7 @@
</plugin>
</plugins>
</build>
<repositories>
</repositories>
</project>

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

@ -0,0 +1,61 @@
package org.dromara.business.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.service.IBusinessAlertService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 预警服务
*
* @author LionLi
* @date 2025-02-27
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping
@Tag(name = "预警服务")
public class BusinessAlertController extends BaseController {
private final IBusinessAlertService businessAlertService;
/**
* 查询全部预警
*/
@Operation(summary ="查询全部预警",description = "查询全部预警")
@GetMapping("/alert/page/all")
public TableDataInfo<BusinessAlert> pageBusinessAlert(BusinessAlertBo bo, PageQuery pageQuery) {
return businessAlertService.pageBusinessAlert(bo, pageQuery);
}
/**
* 查询审批的预警
*/
@Operation(summary ="查询待办的预警",description = "查询待办的预警")
@GetMapping("/alert/page/todo")
public TableDataInfo<BusinessAlert> pageBusinessAlertTodo(BusinessAlertBo bo, PageQuery pageQuery) {
return businessAlertService.pageBusinessAlertTodo(bo, pageQuery);
}
/**
* 查询审批完成的预警
* @param bo
* @param pageQuery
* @return
*/
@Operation(summary ="查询审批完成的预警",description = "查询审批完成的预警")
@GetMapping("/alert/page/finish")
public TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery) {
return businessAlertService.pageBusinessAlertFinish(bo, pageQuery);
}
}

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

@ -0,0 +1,63 @@
package org.dromara.business.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.domain.model.StatObj;
import org.dromara.business.service.BusinessAlertStatisticsService;
import org.dromara.common.core.domain.R;
import org.dromara.common.web.core.BaseController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 预警统计相关服务
*/
@Tag(name = "预警统计相关服务")
@RequiredArgsConstructor
@RestController
@RequestMapping("/alert/statistics")
public class BusinessAlertStatisticsController extends BaseController {
private final BusinessAlertStatisticsService statisticsService;
//饼图显示每个月根据部门
@Operation(summary="根据月份显示预警个数", description="根据月份显示预警个数")
@GetMapping(value = "/month/count")
public R<List<StatObj>> countMonthAlert(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countMonthAlert(businessAlertBo));
}
//饼图部门分类预警个数占比
@Operation(summary="根据部门显示预警个数", description="根据部门显示预警个数")
@GetMapping(value = "/depart/count")
public R<List<StatObj>> countDepartAlert(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countDepartAlert(businessAlertBo));
}
//折线图处理状态各个月展示个数部门
@Operation(summary="根据月份,状态统计显示预警个数", description="根据月份,状态统计显示预警个数")
@GetMapping(value = "/month/status/count")
public R<List<StatObj>> countMonthAlertStatus(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countMonthAlertStatus(businessAlertBo));
}
//折线图处理状态预警个数分布部门
@Operation(summary="根据部门,状态统计显示预警个数", description="根据部门,状态统计显示预警个数")
@GetMapping(value = "/depart/status/count")
public R<List<StatObj>> countDepartAlertStatus(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countDepartAlertStatus(businessAlertBo));
}
//预警对比统计
//1、处理状态柱状图,x轴为选中的部门
//2、预警类型柱状图,x轴为选中的部门
}

89
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessDepartBoundaryController.java

@ -0,0 +1,89 @@
package org.dromara.business.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.business.domain.BusinessDepartBoundary;
import org.dromara.business.service.IBusinessDepartBoundaryService;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
* 部门区域
*/
@Tag(name = "部门区域")
@RestController
@RequestMapping("/depart/boundary")
@Slf4j
@RequiredArgsConstructor
public class BusinessDepartBoundaryController extends BaseController {
private final IBusinessDepartBoundaryService departBoundaryService;
/**
* 查询部门的地理位置
* @param departBoundary
* @return
*/
@Operation(summary ="查询部门的地理位置",description = "查询部门的地理位置")
@GetMapping(value = "/listJson")
public R<String> listJson(BusinessDepartBoundary departBoundary) {
String listJson = departBoundaryService.listJson(departBoundary);
return R.ok("查询成功!",listJson);
}
/**
* 分页查询部门区域列表
* @return
*/
@Operation(summary ="查询部门区域列表",description = "查询部门区域列表")
@RequestMapping(value = "/page", method = RequestMethod.GET)
public TableDataInfo<BusinessDepartBoundary> queryPageList(BusinessDepartBoundary departBoundary, PageQuery pageQuery) {
return departBoundaryService.listSysDepartBoundary(pageQuery, departBoundary);
}
/**
* 解析shp文件
* @return
*/
@Operation(summary ="批量新增部门区域",description = "批量新增部门区域")
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public R<Void> uploadShpFile(@RequestParam("file") MultipartFile file,
@RequestParam(value = "deptId" ,required = false)String deptId) {
return toAjax(departBoundaryService.uploadShpFile(file,deptId));
}
/**
* 编辑
*
* @param
* @return
*/
@Operation(summary ="编辑部门区域",description = "编辑部门区域")
@RequestMapping(value = "/update", method = RequestMethod.POST)
public R<Void> updateDepartBoundary(@RequestBody BusinessDepartBoundary departBoundary) {
return toAjax(departBoundaryService.updateDepartBoundary(departBoundary));
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Operation(summary ="删除部门区域",description = "删除部门区域")
@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
public R<Void> deleteDepartBoundary(@RequestParam(name = "id") String id) {
return toAjax(departBoundaryService.deleteDepartBoundary(id));
}
}

99
dk-modules/business/src/main/java/org/dromara/business/controller/WaylineAlertController.java

@ -1,99 +0,0 @@
package org.dromara.business.controller;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.business.domain.bo.WaylineAlertBo;
import org.dromara.business.domain.vo.WaylineAlertVo;
import org.dromara.business.service.IWaylineAlertService;
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.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 预警任务
*
* @author LionLi
* @date 2025-02-27
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/alert/task")
public class WaylineAlertController extends BaseController {
private final IWaylineAlertService waylineAlertService;
/**
* 查询预警任务列表
*/
@GetMapping("/page")
public TableDataInfo<WaylineAlertVo> pageWaylineAlert(WaylineAlertBo bo, PageQuery pageQuery) {
return waylineAlertService.pageWaylineAlert(bo, pageQuery);
}
/**
* 获取预警任务详细信息
*
* @param alertId 主键
*/
@GetMapping("/{alertId}")
public R<WaylineAlertVo> getWaylineAlert(@NotNull(message = "主键不能为空")
@PathVariable String alertId) {
return R.ok(waylineAlertService.getWaylineAlert(alertId));
}
/**
* 新增预警任务
*/
@Log(title = "预警任务", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/add")
public R<Void> addWaylineAlert(@Validated(AddGroup.class) @RequestBody WaylineAlertBo param) {
return toAjax(waylineAlertService.addWaylineAlert(param));
}
/**
* 修改预警任务
*/
@Log(title = "预警任务", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/update")
public R<Void> updateWaylineAlert(@Validated(EditGroup.class) @RequestBody WaylineAlertBo bo) {
return toAjax(waylineAlertService.updateWaylineAlert(bo));
}
/**
* 删除预警任务
*
* @param alertIdList 主键串
*/
@Log(title = "预警任务", businessType = BusinessType.DELETE)
@DeleteMapping("/delete")
public R<Void> deleteWaylineAlert(@NotEmpty(message = "主键不能为空")
@RequestParam List<String> alertIdList) {
return toAjax(waylineAlertService.deleteWaylineAlert(alertIdList, true));
}
/**
* 导出预警任务列表
*/
@Log(title = "预警任务", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void exportWaylineAlert(WaylineAlertBo bo, HttpServletResponse response) {
List<WaylineAlertVo> list = waylineAlertService.listWaylineAlert(bo);
ExcelUtil.exportExcel(list, "预警任务", WaylineAlertVo.class, response);
}
}

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

@ -0,0 +1,232 @@
package org.dromara.business.domain;
import org.dromara.business.domain.enums.AlertTypeEnum;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import java.util.Date;
import java.io.Serial;
/**
* 预警任务对象 business_alert
*
* @author LionLi
* @date 2025-02-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("business_alert")
public class BusinessAlert extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 租户编号
*/
private String tenantId;
/**
* 任务轮id
*/
private String wheelId;
/**
* 媒体id
*/
private String taskId;
/**
* 图片id
*/
private String taskImageId;
/**
* 处理原因
*/
private String reason;
/**
* 图片文件
*/
private String images;
/**
* 预警类型
*/
private AlertTypeEnum alertType;
/**
* 纬度
*/
private Long lat;
/**
* 精度
*/
private Long lng;
/**
* 任务类型
*/
private String taskHandleType;
/**
* 任务内容
*/
private String taskContent;
/**
* 完成时间
*/
private Date completeDate;
/**
* 删除 0 正常 1已删除
*/
@TableLogic
private Long delFlag;
/**
* 模板图片
*/
private String mateSourceImgUrl;
/**
* 放大模板违建区域图片
*/
private String maxMateSourceImgUrl;
/**
* 放大违建区域图片
*/
private String maxImages;
/**
* 面积
*/
private Long area;
/**
* 面积
*/
private Long areaL;
/**
* 面积
*/
private Long areaW;
/**
* 流程处置状态(verify:验证,cancel:已撤销,draft:草稿,waiting:待审核,finish:已完成,invalid:已作废,back:已退回,termination:已终止)
*/
private BusinessStatusEnum handleType;
/**
* 是否违建 01
*/
private Long isIllegal;
/**
* 部门id
*/
private String deptId;
/**
* 部门名称
*/
private String deptName;
/**
* 预警名称
*/
private String jobName;
/**
* 处理时间
*/
private Date handleTime;
/**
* 其他内容
*/
private String taskHandle;
/**
* 平台类型
*/
private String platformType;
/**
* 像素坐标
*/
private String pixelCoordinate;
/**
* 当前位置预警数量
*/
private Long handleNum;
/**
* 国土所备注
*/
private String territoryRemark;
/**
* 地类信息数据
*/
private String landCategories;
/**
* 相关文件
*/
private String territoryUrl;
/**
* 图片
*/
private String territoryPath;
/**
* 忽略原因
*/
private String ignoringCause;
/**
* 来源0平台 1小程序
*/
private Long handleSource;
/**
* 审批者
*/
@TableField(exist = false)
private String approver;
/**
* 审批者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "approver")
@TableField(exist = false)
private String approveName;
@TableField(exist = false)
private Long flowTaskId;
}

75
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessDepartBoundary.java

@ -0,0 +1,75 @@
package org.dromara.business.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serial;
/**
* 部门区域边界表
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("business_depart_boundary")
public class BusinessDepartBoundary extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**ID*/
@TableId(type = IdType.AUTO)
private String id;
/**
* 租户Id
*/
private String tenantId;
/**机构ID*/
private String deptId;
/**机构/部门名称*/
@Excel(name="机构/部门名称",width=15)
private String deptName;
/**是否显示0显示,1不显示*/
private Integer type;
/**边界*/
private String communityName;
/**边界*/
private String boundary;
/**
* 周长
*/
private Double perimeter;
/**
* 面积平方公里
*/
private Double area;
/**
* 面积亩
*/
private Double areaMu;
/**
* 编号
*/
private String shpNo;
/**
* 0不为村级别1为村级别
*/
private Integer villageType;
/**删除状态(0,正常,1已删除)*/
private String delFlag;
}

151
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessGeospatialVectors.java

@ -0,0 +1,151 @@
package org.dromara.business.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
*存储解析的shp的矢量数据
*/
@Data
@TableName("business_geospatial_vectors")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class BusinessGeospatialVectors {
/**
* ID
*/
@TableId(type = IdType.AUTO)
private String id;
/**
* 租户Id
*/
private String tenantId;
// 1. 图形基础属性
private String landCategories; // 几何信息
private String lineColor; // 线颜色
private String areaColor; // 面颜色
private String lineTransparency; // 线透明度
private String lineWidth; // 线宽度
private String areaTransparency; // 面透明度
private String shapeLength; // 形状长度
private String shapeArea; // 形状面积
// 2. 图斑标识信息
private String featureCode; // 标识码
private String featureTypeCode; // 要素代码
private String temporaryFeatureId; // 图斑预编号
private String featureId; // 图斑编号
private String featureType; // 图斑类型
private String objectId; // 对象ID
// 3. 地类信息
private String landTypeCode; // 地类编码
private String landTypeName; // 地类名称
private String landUseType; // 土地利用类型
private String landActualUse; // 土地用途
// 4. 权属与行政区划信息
private String ownershipNature; // 权属性质
private String ownershipUnitCode; // 权属单位代码
private String ownershipUnitName; // 权属单位名称
private String landUnitCode; // 坐落单位代码
private String landUnitName; // 坐落单位名称
private String adminDivisionCode; // 行政区代码
private String adminDivisionName; // 行政区名称
// 5. 面积信息
private String featureArea; // 图斑面积
private String deductionArea; // 扣除面积
private String featureLandArea; // 图斑地类面积
private String linearFeatureWidth; // 线状地物宽度
// 6. 农用地相关信息
private String arableLandQuality; // 耕地等别
private String arableLandQualityCode; // 耕地等别代码
private String basicFarmlandType; // 基本农田类型
// 7. 规划信息
private String planningPurpose; // 规划用途
private String planningPurposeCode; // 规划用途代码
private String planningPeriod; // 规划期限
// 8. 变更与历史信息
private String originalFeatureCode; // 原始代码
private String originalLandTypeCode; // 原地类编码
private String changeRecordId; // 变更编号
private String changeDate; // 变更日期
// 9. 时间信息
private String updateDate; // 更新日期
private String completionDate; // 建设日期
private String dataYear; // 数据年份
// 10. 其他属性
private String notes; // 备注
private String approvalNumber; // 批准文号
private String urbanVillageCode; // 城镇村属性码
private String extendedInfo; // 扩展信息
private String belongingArea; // 所属区域
private String geographicLocation; // 地理位置
// 11. 拆转查相关信息
private String demolitionType; // 拆查类型
private String demolitionArea; // 拆查面积
private String demolitionName; // 拆查名称
private Integer batchNo; //批次号
private Date createTime; //创建时间
}

76
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessPatrolAreas.java

@ -0,0 +1,76 @@
package org.dromara.business.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.ArrayList;
import java.util.List;
/**
* @Description: 巡查区域
*/
@Data
@TableName("business_patrol_areas")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class BusinessPatrolAreas extends BaseEntity {
/**
* ID
*/
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**区域名称*/
@Excel(name = "区域名称", width = 15)
private String name;
/**区域编号*/
@Excel(name = "区域编号", width = 15)
private String number;
/**所属乡镇id*/
@Excel(name = "所属乡镇id", width = 15)
private String deptId;
/**地理数据*/
private String landCategories;
/**所属乡镇id*/
@Excel(name = "所属乡镇名称", width = 15)
@TableField(exist = false)
private String deptName;
@Excel(name = "所属乡镇ids", width = 15)
private String deptIds;
@Excel(name = "平台类型", width = 15)
private String platformType;
/**分管领导所属乡镇id**/
private String leaderDeptId;
/**用户id**/
private String userId;
/**用户姓名**/
private String userName;
/**是否禁用:0:禁用 1:启用**/
private Integer isDisable;
/**巡查区域平台类型集合**/
@TableField(exist = false)
private List<String> patrolAreasIdList = new ArrayList<>();
@TableField(exist = false)
private List<String> areasIdList = new ArrayList<>();
}

47
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessVectorDict.java

@ -0,0 +1,47 @@
package org.dromara.business.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.util.List;
/**
* 矢量数据字段映射主表
*/
@Data
@TableName("Business_vector_dict")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class BusinessVectorDict extends BaseEntity {
/**
*
*/
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 租户Id
*/
private String tenantId;
/**
* 字段名称
*/
private String dictCode;
/**
* 描述
*/
private String dictName;
@TableField(exist = false)
private List<BusinessVectorDictItem> fieldMappingsList;
}

47
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessVectorDictItem.java

@ -0,0 +1,47 @@
package org.dromara.business.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.mybatis.core.domain.BaseEntity;
/**
* 矢量数据字段映射关联表
*/
@Data
@TableName("Business_vector_dict_item")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class BusinessVectorDictItem extends BaseEntity {
/**
*
*/
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 租户Id
*/
private String tenantId;
/**
* 字段名称
*/
private String itemValue;
/**
* 关联id
*/
private String dictId;
/**
* 描述
*/
private String itemText;
}

47
dk-modules/business/src/main/java/org/dromara/business/domain/WaylineAlert.java → dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java

@ -1,34 +1,27 @@
package org.dromara.business.domain;
package org.dromara.business.domain.bo;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
import java.util.List;
/**
* 预警任务对象 wayline_alert
* 预警任务业务对象 business_alert
*
* @author LionLi
* @date 2025-02-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wayline_alert")
public class WaylineAlert extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private String id;
@AutoMapper(target = BusinessAlert.class, reverseConvertGenerate = false)
public class BusinessAlertBo extends BaseEntity {
/**
* 任务轮id
*/
@ -54,6 +47,11 @@ public class WaylineAlert extends BaseEntity {
*/
private String images;
/**
* 预警类型
*/
private String alertType;
/**
* 纬度
*/
@ -81,12 +79,6 @@ public class WaylineAlert extends BaseEntity {
private Date completeDate;
/**
* 删除 0 正常 1已删除
*/
@TableLogic
private Long delFlag;
/**
* 模板图片
*/
@ -117,10 +109,6 @@ public class WaylineAlert extends BaseEntity {
*/
private Long areaW;
/**
* 0:验证
*/
private Long handleInType;
/**
* 是否违建 01
@ -199,4 +187,7 @@ public class WaylineAlert extends BaseEntity {
private Long handleSource;
List<Long> deptIdList;
}

44
dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessPatrolAreasBo.java

@ -0,0 +1,44 @@
package org.dromara.business.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.util.ArrayList;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = BusinessAlert.class, reverseConvertGenerate = false)
public class BusinessPatrolAreasBo extends BaseEntity {
/**
* 所属乡镇id
*/
private String deptId;
/**
* 所属乡镇名称
*/
private String deptName;
/**
* 预警类型
*/
private String platformType;
/**
* 是否禁用0:禁用 1启用
*/
private Integer isDisable;
/**
* 下级所有部门id
*/
private List<String> deptIds = new ArrayList<>();
private String name;
}

11
dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessPlatformInfoBo.java

@ -0,0 +1,11 @@
package org.dromara.business.domain.bo;
import lombok.Data;
@Data
public class BusinessPlatformInfoBo {
/**查询条件**/
private String search;
}

226
dk-modules/business/src/main/java/org/dromara/business/domain/bo/WaylineAlertBo.java

@ -1,226 +0,0 @@
package org.dromara.business.domain.bo;
import org.dromara.business.domain.WaylineAlert;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
/**
* 预警任务业务对象 wayline_alert
*
* @author LionLi
* @date 2025-02-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = WaylineAlert.class, reverseConvertGenerate = false)
public class WaylineAlertBo extends BaseEntity {
/**
*
*/
@NotBlank(message = "不能为空", groups = { EditGroup.class })
private String id;
/**
* 任务轮id
*/
@NotBlank(message = "任务轮id不能为空", groups = { AddGroup.class, EditGroup.class })
private String wheelId;
/**
* 媒体id
*/
@NotBlank(message = "媒体id不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskId;
/**
* 图片id
*/
@NotBlank(message = "图片id不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskImageId;
/**
* 处理原因
*/
@NotBlank(message = "处理原因不能为空", groups = { AddGroup.class, EditGroup.class })
private String reason;
/**
* 图片文件
*/
@NotBlank(message = "图片文件不能为空", groups = { AddGroup.class, EditGroup.class })
private String images;
/**
* 纬度
*/
@NotNull(message = "纬度不能为空", groups = { AddGroup.class, EditGroup.class })
private Long lat;
/**
* 精度
*/
@NotNull(message = "精度不能为空", groups = { AddGroup.class, EditGroup.class })
private Long lng;
/**
* 任务类型
*/
@NotBlank(message = "任务类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskHandleType;
/**
* 任务内容
*/
@NotBlank(message = "任务内容不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskContent;
/**
* 完成时间
*/
@NotNull(message = "完成时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date completeDate;
/**
* 模板图片
*/
@NotBlank(message = "模板图片不能为空", groups = { AddGroup.class, EditGroup.class })
private String mateSourceImgUrl;
/**
* 放大模板违建区域图片
*/
@NotBlank(message = "放大模板违建区域图片不能为空", groups = { AddGroup.class, EditGroup.class })
private String maxMateSourceImgUrl;
/**
* 放大违建区域图片
*/
@NotBlank(message = "放大违建区域图片不能为空", groups = { AddGroup.class, EditGroup.class })
private String maxImages;
/**
* 面积
*/
@NotNull(message = "面积不能为空", groups = { AddGroup.class, EditGroup.class })
private Long area;
/**
* 面积
*/
@NotNull(message = "面积:长不能为空", groups = { AddGroup.class, EditGroup.class })
private Long areaL;
/**
* 面积
*/
@NotNull(message = "面积:宽不能为空", groups = { AddGroup.class, EditGroup.class })
private Long areaW;
/**
* 0:验证
*/
@NotNull(message = "0:验证", groups = { AddGroup.class, EditGroup.class })
private Long handleInType;
/**
* 是否违建 01
*/
@NotNull(message = "是否违建 0:否,1:是不能为空", groups = { AddGroup.class, EditGroup.class })
private Long isIllegal;
/**
* 部门id
*/
@NotBlank(message = "部门id不能为空", groups = { AddGroup.class, EditGroup.class })
private String deptId;
/**
* 部门名称
*/
@NotBlank(message = "部门名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String deptName;
/**
* 预警名称
*/
@NotBlank(message = "预警名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String jobName;
/**
* 处理时间
*/
@NotNull(message = "处理时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date handleTime;
/**
* 其他内容
*/
@NotBlank(message = "其他:内容不能为空", groups = { AddGroup.class, EditGroup.class })
private String taskHandle;
/**
* 平台类型
*/
@NotBlank(message = "平台类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String platformType;
/**
* 像素坐标
*/
@NotBlank(message = "像素坐标不能为空", groups = { AddGroup.class, EditGroup.class })
private String pixelCoordinate;
/**
* 当前位置预警数量
*/
@NotNull(message = "当前位置预警数量不能为空", groups = { AddGroup.class, EditGroup.class })
private Long handleNum;
/**
* 国土所备注
*/
@NotBlank(message = "国土所备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String territoryRemark;
/**
* 地类信息数据
*/
@NotBlank(message = "地类信息数据不能为空", groups = { AddGroup.class, EditGroup.class })
private String landCategories;
/**
* 相关文件
*/
@NotBlank(message = "相关文件不能为空", groups = { AddGroup.class, EditGroup.class })
private String territoryUrl;
/**
* 图片
*/
@NotBlank(message = "图片不能为空", groups = { AddGroup.class, EditGroup.class })
private String territoryPath;
/**
* 忽略原因
*/
@NotBlank(message = "忽略原因不能为空", groups = { AddGroup.class, EditGroup.class })
private String ignoringCause;
/**
* 来源0平台 1小程序
*/
@NotNull(message = "来源:0:平台 1:小程序不能为空", groups = { AddGroup.class, EditGroup.class })
private Long handleSource;
}

31
dk-modules/business/src/main/java/org/dromara/business/domain/enums/AlertTypeEnum.java

@ -0,0 +1,31 @@
package org.dromara.business.domain.enums;
import cn.hutool.core.util.StrUtil;
import lombok.Getter;
import java.util.Arrays;
/**
* 预警类型枚举类
*/
@Getter
public enum AlertTypeEnum {
;
private String code;
private String description;
public static AlertTypeEnum getTypeByCode(String code){
if(StrUtil.isNotEmpty(code)){
return Arrays.stream(values()).filter(p -> StrUtil.equals(p.name(),code.toUpperCase())).findAny().orElse(null);
}
return null;
}
}

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

@ -0,0 +1,86 @@
package org.dromara.business.domain.model;
import cn.hutool.json.JSONObject;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* 统计信息返回类
*/
@Data
public class StatObj implements Serializable {
/**
* 统计字段
*/
private String statKey;
/**
* 统计值
*/
private Object statVal;
private List<Object> statValues;
/**
* 子集信息
*/
List<StatObj> nextStatList;
/**
* 补充字段
*/
private JSONObject extra;
/**
* 跳转链接
*/
private String url;
public StatObj(){
}
public StatObj(String statKey, Object statVal){
this.statKey = statKey;
this.statVal = statVal;
}
public StatObj(String statKey, Long statVal, String extraKey, Object extraValue){
this.statKey = statKey;
this.statVal = statVal;
this.extra = new JSONObject().put(extraKey,extraValue);
}
public StatObj(String statKey, BigDecimal percentage){
this.statKey = statKey;
this.statVal = percentage;
}
public StatObj(String statKey, Long statVal, String url){
this.statKey = statKey;
this.statVal = statVal;
this.url = url;
}
public StatObj(String statKey, List<StatObj> nextStatList){
this.statKey = statKey;
this.nextStatList = nextStatList;
}
public StatObj(String statKey, List<StatObj> nextStatList,String extraKey, Object extraValue){
this.statKey = statKey;
this.nextStatList = nextStatList;
this.extra = new JSONObject().put(extraKey,extraValue);
}
public void addExtra(String key,Object value){
if(this.extra == null){
this.extra = new JSONObject();
}
this.extra.set(key,value);
}
}

28
dk-modules/business/src/main/java/org/dromara/business/domain/vo/WaylineAlertVo.java → dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java

@ -4,7 +4,11 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.business.domain.WaylineAlert;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.enums.AlertTypeEnum;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serial;
import java.io.Serializable;
@ -20,18 +24,12 @@ import java.util.Date;
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = WaylineAlert.class)
public class WaylineAlertVo implements Serializable {
@AutoMapper(target = BusinessAlert.class)
public class BusinessAlertVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private String id;
/**
* 任务轮id
*/
@ -62,6 +60,12 @@ public class WaylineAlertVo implements Serializable {
@ExcelProperty(value = "图片文件")
private String images;
/**
* 预警类型
*/
private String alertType;
/**
* 纬度
*/
@ -130,10 +134,9 @@ public class WaylineAlertVo implements Serializable {
private Long areaW;
/**
* 0:验证
* 流程处置状态(verify:验证,cancel:已撤销,draft:草稿,waiting:待审核,finish:已完成,invalid:已作废,back:已退回,termination:已终止)
*/
@ExcelProperty(value = "0:验证")
private Long handleInType;
private BusinessStatusEnum handleType;
/**
* 是否违建 01
@ -225,5 +228,4 @@ public class WaylineAlertVo implements Serializable {
@ExcelProperty(value = "来源:0:平台 1:小程序")
private Long handleSource;
}

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

@ -0,0 +1,29 @@
package org.dromara.business.dubbo;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.business.api.RemoteBusinessAlertService;
import org.dromara.business.service.IBusinessAlertService;
import org.springframework.stereotype.Service;
/**
* 预警相关服务开放
*/
@RequiredArgsConstructor
@Service
@DubboService
public class RemoteBusinessAlertServiceImpl implements RemoteBusinessAlertService {
private final IBusinessAlertService businessAlertService;
/**
* 更新此条预警审批时候的状态
* @param businessId 业务id(预警工单)
* @param flowStatus 流程状态
*/
@Override
public void updateAlertStatus(String businessId, String flowStatus) {
businessAlertService.updateAlertStatus(businessId,flowStatus);
}
}

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

@ -0,0 +1,51 @@
package org.dromara.business.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.domain.vo.BusinessAlertVo;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import java.util.List;
import java.util.Map;
/**
* 预警任务Mapper接口
*
* @author LionLi
* @date 2025-02-27
*/
public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, BusinessAlertVo> {
Page<BusinessAlert> pageBusinessAlert(Page<BusinessAlert> page, QueryWrapper<BusinessAlert> ew);
Page<BusinessAlert> pageAlertFinish(Page<BusinessAlert> page, QueryWrapper<BusinessAlert> ew);
Page<BusinessAlert> pageAlertTodo(Page<BusinessAlert> page, QueryWrapper<BusinessAlert> ew);
@DataPermission(
@DataColumn(key = "deptName", value = "ba.dept_id")
)
List<Map<String, Object>> listMonthAlert(@Param("param") BusinessAlertBo businessAlertBo);
@DataPermission(
@DataColumn(key = "deptName", value = "ba.dept_id")
)
List<Map<String, Object>> listDepartAlert(@Param("param") BusinessAlertBo businessAlertBo);
@DataPermission(
@DataColumn(key = "deptName", value = "ba.dept_id")
)
List<Map<String, Object>> listMonthAlertStatus(@Param("param")BusinessAlertBo businessAlertBo);
@DataPermission(
@DataColumn(key = "deptName", value = "ba.dept_id")
)
List<Map<String, Object>> listDepartAlertStatus(@Param("param") BusinessAlertBo businessAlertBo);
}

30
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessDepartBoundaryMapper.java

@ -0,0 +1,30 @@
package org.dromara.business.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.business.domain.BusinessDepartBoundary;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import java.util.List;
/**
* 部门 Mapper 接口
*/
public interface BusinessDepartBoundaryMapper extends BaseMapper<BusinessDepartBoundary> {
Page<BusinessDepartBoundary> listSysDepartBoundary(Page<BusinessDepartBoundary> page,@Param("condition") BusinessDepartBoundary sysDepartBoundary);
List<BusinessDepartBoundary> listSysDepartBoundaryGeomFromText(@Param("condition") BusinessDepartBoundary sysDepartBoundary);
/**
* 通过部门编码获取部门边界数据
* @param deptId 部门编码
* @return String
*/
List<BusinessDepartBoundary> queryByDeptId(@Param("deptId") String deptId);
void saveBatchBoundary(@Param("list") List<BusinessDepartBoundary> boundaryList);
String listJson(@Param("param") BusinessDepartBoundary departBoundary);
}

22
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessPatrolAreasMapper.java

@ -0,0 +1,22 @@
package org.dromara.business.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.business.domain.BusinessPatrolAreas;
import org.dromara.business.domain.bo.BusinessPatrolAreasBo;
import java.util.List;
/**
* @Description: 巡查区域
*/
public interface BusinessPatrolAreasMapper extends BaseMapper<BusinessPatrolAreas> {
IPage<BusinessPatrolAreas> listPatrolAreas(Page<BusinessPatrolAreas> page, @Param("condition") BusinessPatrolAreasBo patrolAreasBo, @Param("deptIds") List<String> deptIds);
List<BusinessPatrolAreas> listPatrolAreas(@Param("condition") BusinessPatrolAreasBo patrolAreasBo, @Param("deptIds") List<String> deptIds);
}

8
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessVectorDictItemMapper.java

@ -0,0 +1,8 @@
package org.dromara.business.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.dromara.business.domain.BusinessVectorDictItem;
public interface BusinessVectorDictItemMapper extends BaseMapper<BusinessVectorDictItem> {
}

10
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessVectorDictMapper.java

@ -0,0 +1,10 @@
package org.dromara.business.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.dromara.business.domain.BusinessVectorDict;
import java.util.List;
public interface BusinessVectorDictMapper extends BaseMapper<BusinessVectorDict> {
List<BusinessVectorDict> listVectorField();
}

18
dk-modules/business/src/main/java/org/dromara/business/mapper/WaylineAlertMapper.java

@ -1,18 +0,0 @@
package org.dromara.business.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.business.domain.WaylineAlert;
import org.dromara.business.domain.vo.WaylineAlertVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 预警任务Mapper接口
*
* @author LionLi
* @date 2025-02-27
*/
public interface WaylineAlertMapper extends BaseMapperPlus<WaylineAlert, WaylineAlertVo> {
Page<WaylineAlertVo> pageAlert(Page<WaylineAlertVo> page, LambdaQueryWrapper<WaylineAlert> lqw);
}

17
dk-modules/business/src/main/java/org/dromara/business/service/BusinessAlertStatisticsService.java

@ -0,0 +1,17 @@
package org.dromara.business.service;
import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.domain.model.StatObj;
import java.util.List;
public interface BusinessAlertStatisticsService {
List<StatObj> countMonthAlert(BusinessAlertBo businessAlertBo);
List<StatObj> countDepartAlert(BusinessAlertBo businessAlertBo);
List<StatObj> countMonthAlertStatus(BusinessAlertBo businessAlertBo);
List<StatObj> countDepartAlertStatus(BusinessAlertBo businessAlertBo);
}

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

@ -0,0 +1,66 @@
package org.dromara.business.service;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.List;
/**
* 预警任务Service接口
*
* @author LionLi
* @date 2025-02-27
*/
public interface IBusinessAlertService {
TableDataInfo<BusinessAlert> pageBusinessAlertTodo(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlert(BusinessAlertBo bo, PageQuery pageQuery);
/**
* 新增预警任务
*
* @param param 预警任务
* @return 是否新增成功
*/
Boolean addBusinessAlert(BusinessAlertBo param);
/**
* 批量新增预警任务
*
* @param alertList 预警任务
* @return 是否新增成功
*/
Boolean batchAddBusinessAlert(List<BusinessAlert> alertList);
/**
* 修改预警任务
*
* @param param 预警任务
* @return 是否修改成功
*/
Boolean editBusinessAlert(BusinessAlertBo param);
/**
* 校验并批量删除预警任务信息
*
* @param alertIdList 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteBusinessAlert(List<String> alertIdList, Boolean isValid);
/**
* 修改预警中处置状态
* @param businessId
* @param flowStatus
*/
void updateAlertStatus(String businessId, String flowStatus);
}

30
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessDepartBoundaryService.java

@ -0,0 +1,30 @@
package org.dromara.business.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.business.domain.BusinessDepartBoundary;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 部门区域 服务实现类
*/
public interface IBusinessDepartBoundaryService extends IService<BusinessDepartBoundary>{
TableDataInfo<BusinessDepartBoundary> listSysDepartBoundary(PageQuery page, BusinessDepartBoundary departBoundary);
List<BusinessDepartBoundary> listSysDepartBoundaryGeomFromText(BusinessDepartBoundary departBoundary);
List<BusinessDepartBoundary> queryByDeptId(String deptId);
boolean uploadShpFile(MultipartFile file,String deptId);
boolean deleteDepartBoundary(String id);
boolean updateDepartBoundary(BusinessDepartBoundary departBoundary);
boolean addDepartBoundary(BusinessDepartBoundary departBoundary);
String listJson(BusinessDepartBoundary departBoundary);
}

29
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessPatrolAreasService.java

@ -0,0 +1,29 @@
package org.dromara.business.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import org.dromara.business.domain.BusinessPatrolAreas;
import org.dromara.business.domain.bo.BusinessPatrolAreasBo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @Description: 巡查区域
*/
public interface IBusinessPatrolAreasService extends IService<BusinessPatrolAreas> {
TableDataInfo<BusinessPatrolAreas> pagePatrolAreas(PageQuery pageQuery, BusinessPatrolAreasBo patrolAreasBo);
List<BusinessPatrolAreas> listPatrolAreas(BusinessPatrolAreasBo patrolAreasBo);
void addPatrolAreas(MultipartFile file);
boolean updatePatrolAreas(BusinessPatrolAreas patrolAreas);
List<BusinessPatrolAreas> exportXls(BusinessPatrolAreas patrolAreas);
}

12
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessVectorDictItemService.java

@ -0,0 +1,12 @@
package org.dromara.business.service;
import org.dromara.business.domain.BusinessVectorDictItem;
import java.util.List;
public interface IBusinessVectorDictItemService {
List<BusinessVectorDictItem> findDictItemByDictId(String dictId);
}

17
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessVectorDictService.java

@ -0,0 +1,17 @@
package org.dromara.business.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.business.domain.BusinessVectorDict;
import java.util.List;
public interface IBusinessVectorDictService {
List<BusinessVectorDict> listVectorField();
BusinessVectorDict findVectorDictById(String dictId);
}

78
dk-modules/business/src/main/java/org/dromara/business/service/IWaylineAlertService.java

@ -1,78 +0,0 @@
package org.dromara.business.service;
import org.dromara.business.domain.WaylineAlert;
import org.dromara.business.domain.vo.WaylineAlertVo;
import org.dromara.business.domain.bo.WaylineAlertBo;
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 LionLi
* @date 2025-02-27
*/
public interface IWaylineAlertService {
/**
* 查询预警任务
*
* @param id 主键
* @return 预警任务
*/
WaylineAlertVo getWaylineAlert(String id);
/**
* 分页查询预警任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 预警任务分页列表
*/
TableDataInfo<WaylineAlertVo> pageWaylineAlert(WaylineAlertBo bo, PageQuery pageQuery);
/**
* 查询符合条件的预警任务列表
*
* @param param 查询条件
* @return 预警任务列表
*/
List<WaylineAlertVo> listWaylineAlert(WaylineAlertBo param);
/**
* 新增预警任务
*
* @param param 预警任务
* @return 是否新增成功
*/
Boolean addWaylineAlert(WaylineAlertBo param);
/**
* 批量新增预警任务
*
* @param alertList 预警任务
* @return 是否新增成功
*/
Boolean saveBatchAlert(List<WaylineAlert> alertList);
/**
* 修改预警任务
*
* @param param 预警任务
* @return 是否修改成功
*/
Boolean updateWaylineAlert(WaylineAlertBo param);
/**
* 校验并批量删除预警任务信息
*
* @param alertIdList 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWaylineAlert(List<String> alertIdList, Boolean isValid);
}

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

@ -0,0 +1,214 @@
package org.dromara.business.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.mapper.BusinessAlertMapper;
import org.dromara.business.service.IBusinessAlertService;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* 预警任务Service业务层处理
*
* @author LionLi
* @date 2025-02-27
*/
@RequiredArgsConstructor
@Service
public class BusinessAlertServiceImpl implements IBusinessAlertService {
private final BusinessAlertMapper baseMapper;
@DubboReference
RemoteWorkflowService remoteWorkflowService;
/**
* 新增预警任务
*
* @param param 预警任务
* @return 是否新增成功
*/
@Override
public Boolean addBusinessAlert(BusinessAlertBo param) {
BusinessAlert alert = MapstructUtils.convert(param, BusinessAlert.class);
validEntityBeforeSave(alert,false);
return this.baseMapper.insert(alert) > 0;
}
/**
* 批量添加
* @param alertList 预警任务
* @return
*/
@Override
public Boolean batchAddBusinessAlert(List<BusinessAlert> alertList) {
return this.baseMapper.insertBatch(alertList);
}
/**
* 修改预警任务
*
* @param param 预警任务
* @return 是否修改成功
*/
@Override
public Boolean editBusinessAlert(BusinessAlertBo param) {
BusinessAlert businessAlert = MapstructUtils.convert(param, BusinessAlert.class);
validEntityBeforeSave(businessAlert,true);
return baseMapper.updateById(businessAlert) > 0;
}
/**
* 校验并批量删除预警任务信息
*
* @param alertIdList 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteBusinessAlert(List<String> alertIdList, Boolean isValid) {
if(isValid){
if (ObjectUtil.isEmpty(alertIdList)){
throw new ServiceException("预警【Id】为空!");
}
}
return baseMapper.deleteByIds(alertIdList) > 0;
}
/**
* 修改预警中处置状态
* @param businessId
* @param flowStatus
*/
@Override
public void updateAlertStatus(String businessId, String flowStatus) {
LambdaUpdateWrapper<BusinessAlert> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(BusinessAlert::getHandleType, BusinessStatusEnum.getByStatus(flowStatus));
wrapper.eq(BusinessAlert::getId, businessId);
this.baseMapper.update(wrapper);
}
/**
* 查询全部预警
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<BusinessAlert> pageBusinessAlert(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlert(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
/**
* 查询当前用户已完成预警
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
buildCommonQueryWrapper(wrapper);
wrapper.in("a.approver", LoginHelper.getUserId());
Page<BusinessAlert> page = this.baseMapper.pageAlertFinish(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
/**
* 查询当前用户待办预警
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<BusinessAlert> pageBusinessAlertTodo(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
buildCommonQueryWrapper(wrapper);
wrapper.eq("uu.del_flag", 0);
wrapper.in("uu.type", 1,2,3);
wrapper.in("a.processed_by", remoteWorkflowService.getPermissions());
wrapper.in("a.flow_status", BusinessStatusEnum.WAITING.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageAlertTodo(pageQuery.build(), wrapper);
List<BusinessAlert> records = page.getRecords();
if (CollUtil.isNotEmpty(records)) {
List<Long> taskIds = StreamUtils.toList(records, BusinessAlert::getFlowTaskId);
Map<Long, List<RemoteUserVo>> listMap = remoteWorkflowService.currentTaskAllUser(taskIds);
records.forEach(t -> {
List<RemoteUserVo> userList = listMap.getOrDefault(t.getId(), Collections.emptyList());
if (CollUtil.isNotEmpty(userList)) {
t.setApprover(StreamUtils.join(userList, e -> String.valueOf(e.getUserId())));
t.setApproveName(StreamUtils.join(userList, RemoteUserVo::getNickName));
}
});
}
return TableDataInfo.build(page);
}
/**
* 构建wrapper
* @param bo
* @return
*/
private QueryWrapper<BusinessAlert> buildQueryWrapper(BusinessAlertBo bo) {
QueryWrapper<BusinessAlert> wrapper = new QueryWrapper<>();
wrapper.orderByAsc("ba.create_time");
return wrapper;
}
/**
* 构建通用流程wrapper
* @param wrapper
*/
private void buildCommonQueryWrapper(QueryWrapper<BusinessAlert> wrapper) {
wrapper.eq("a.del_flag",0);
wrapper.eq("b.del_flag",0);
wrapper.eq("c.del_flag",0);
wrapper.in("a.node_type",1,3,4);
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusinessAlert alert, Boolean validId){
if (ObjectUtil.isEmpty(alert.getId())){
throw new ServiceException("预警【Id】为空!");
}
}
}

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

@ -0,0 +1,98 @@
package org.dromara.business.service.impl;
import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.domain.model.StatObj;
import org.dromara.business.mapper.BusinessAlertMapper;
import org.dromara.business.service.BusinessAlertStatisticsService;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.system.api.RemoteDeptService;
import org.dromara.system.api.domain.vo.RemoteDeptVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
*预警统计Service业务层处理
*/
@RequiredArgsConstructor
@Service
public class BusinessAlertStatisticsServiceImpl implements BusinessAlertStatisticsService {
private final BusinessAlertMapper baseMapper;
@DubboReference
RemoteDeptService remoteDeptService;
/**
* 按照月份分类预警数量(包含权限)
* @param businessAlertBo
* @return
*/
@Override
public List<StatObj> countMonthAlert(BusinessAlertBo businessAlertBo) {
if (ObjectUtil.isEmpty(businessAlertBo.getDeptId())){
throw new ServiceException("部门【id】为空");
}
List<RemoteDeptVo> remoteDeptVoList = remoteDeptService.selectListByParentId(businessAlertBo.getDeptId());
List<Long> departIdList = remoteDeptVoList.stream().map(RemoteDeptVo::getDeptId).toList();
businessAlertBo.setDeptIdList(departIdList);
List<Map<String, Object>> mapList = baseMapper.listMonthAlert(businessAlertBo);
return mapList.stream().map(data -> new StatObj(data.get("dateMonth") + "", data.get("total"))).collect(Collectors.toList());
}
@Override
public List<StatObj>countDepartAlert(BusinessAlertBo businessAlertBo) {
List<Map<String, Object>> mapList = baseMapper.listDepartAlert(businessAlertBo);
return mapList.stream().map(data -> new StatObj(data.get("deptName") + "", Long.parseLong(data.get("total") + ""),"deptId",data.get("deptId"))).collect(Collectors.toList());
}
@Override
public List<StatObj> countMonthAlertStatus(BusinessAlertBo businessAlertBo) {
List<Map<String, Object>> mapList = baseMapper.listMonthAlertStatus(businessAlertBo);
return mapList.stream()
.map(map -> new StatObj(
Objects.toString(map.get("dateMonth")),
List.of(
new StatObj("total", map.get("total")),
new StatObj("todoCount", map.get("todoCount")),
new StatObj("finishCount", map.get("finishCount"))
)
))
.collect(Collectors.toList());
}
@Override
public List<StatObj> countDepartAlertStatus(BusinessAlertBo businessAlertBo) {
List<Map<String, Object>> mapList = baseMapper.listDepartAlertStatus(businessAlertBo);
return mapList.stream()
.map(map -> new StatObj(
Objects.toString(map.get("deptName")),
List.of(
new StatObj("total", map.get("total")),
new StatObj("todoCount", map.get("todoCount")),
new StatObj("finishCount", map.get("finishCount"))
),"deptId",map.get("deptId")
))
.collect(Collectors.toList());
}
}

235
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessDepartBoundaryServiceImpl.java

@ -0,0 +1,235 @@
package org.dromara.business.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.domain.BusinessDepartBoundary;
import org.dromara.business.domain.BusinessGeospatialVectors;
import org.dromara.business.domain.BusinessPatrolAreas;
import org.dromara.business.domain.BusinessVectorDict;
import org.dromara.business.mapper.BusinessDepartBoundaryMapper;
import org.dromara.business.service.IBusinessDepartBoundaryService;
import org.dromara.business.service.IBusinessVectorDictService;
import org.dromara.business.utils.BatchProcessorUtil;
import org.dromara.business.utils.ShpAnalysisUtil;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RemoteDeptService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.sql.DataSource;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 部门区域
*/
@Service
@RequiredArgsConstructor
public class BusinessDepartBoundaryServiceImpl extends ServiceImpl<BusinessDepartBoundaryMapper, BusinessDepartBoundary> implements IBusinessDepartBoundaryService {
private final IBusinessVectorDictService vectorDictService;
@DubboReference
RemoteDeptService remoteDeptService;
private final DataSource dataSource;
@Override
public TableDataInfo<BusinessDepartBoundary> listSysDepartBoundary(PageQuery pageQuery, BusinessDepartBoundary departBoundary) {
Page<BusinessDepartBoundary> page = baseMapper.listSysDepartBoundary(pageQuery.build(),departBoundary);
return TableDataInfo.build(page);
}
@Override
public List<BusinessDepartBoundary> listSysDepartBoundaryGeomFromText(BusinessDepartBoundary departBoundary) {
return baseMapper.listSysDepartBoundaryGeomFromText(departBoundary);
}
@Override
public List<BusinessDepartBoundary> queryByDeptId(String deptId) {
return baseMapper.queryByDeptId(deptId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean uploadShpFile(MultipartFile file,String deptId) {
List<BusinessGeospatialVectors> geospatialVectorsList = new ArrayList<>();
try {
//1、首先调用解析工具拿到解析的字段集合
InputStream inputStream = file.getInputStream();
List<Map<String, String>> mapList = ShpAnalysisUtil.analysisShpFile(inputStream);
// 3. 构建字典map
List<BusinessVectorDict> fieldsInfoList = vectorDictService.listVectorField();
Map<String, List<String>> dictMap = fieldsInfoList
.stream()
.collect(Collectors.toMap(
BusinessVectorDict::getDictCode,
v -> v.getFieldMappingsList().stream()
.map(mapping -> mapping.getItemValue().toLowerCase()) // 转小写
.collect(Collectors.toList())
));
// 4. 遍历 mapList,替换映射关系并只保留有效条目
List<Map<String, String>> resultList = mapList.stream()
.map(originalMap -> originalMap.entrySet().stream()
.filter(entry -> {
String keyLower = entry.getKey().toLowerCase(); // 将 mapList 中的 key 转换为小写
// 遍历 dictMap 的所有 List<String>,检查其中是否包含该 key
return dictMap.values().stream()
.anyMatch(list -> list.contains(keyLower)); // 判断 dictMap 中的 List<String> 是否包含该 key
})
.collect(Collectors.toMap(
entry -> {
// 根据匹配的 key 查找 dictMap 中对应的 key
return dictMap.entrySet().stream()
.filter(mapEntry -> mapEntry.getValue().contains(entry.getKey().toLowerCase()))
.map(Map.Entry::getKey)
.findFirst()
.orElse(""); // 如果没有匹配到,则返回空字符串
},
Map.Entry::getValue
))
)
.filter(transformedMap -> !transformedMap.isEmpty()) // 过滤空的 Map
.collect(Collectors.toList());
// 5. 通过反射设置 GeospatialVectors 对象的属性
for (Map<String, String> transformedMap : resultList) {
BusinessGeospatialVectors geoVector = new BusinessGeospatialVectors();
transformedMap.forEach((key, value) -> {
try {
// 尝试通过反射找到相应的Setter方法,并调用
Method setterMethod = BusinessGeospatialVectors.class.getMethod("set" + capitalizeFirstLetter(key), String.class);
setterMethod.invoke(geoVector, value);
} catch (Exception e) {
e.printStackTrace();
}
});
geoVector.setCreateTime(new Date());
geospatialVectorsList.add(geoVector);
}
//6、生成新的对象集合存储数据表中
List<BusinessDepartBoundary> boundaryList = buildBusinessDepartBoundary(geospatialVectorsList,deptId);
// 分批处理
int startIndex = 0; // 从第 0 条开始
int batchSize = 2000; // 每批处理 2000 条
boolean flag = BatchProcessorUtil.processBatches(boundaryList, batchSize, startIndex, batch -> {
//批量新增部门区域数据
// this.baseMapper.saveBatchBoundary(batch);
});
if (flag) {
System.out.println("所有数据处理完成!");
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@Override
public boolean updateDepartBoundary(BusinessDepartBoundary departBoundary) {
if (ObjectUtil.isEmpty(departBoundary.getId())) {
throw new ServiceException("【id】参数为空");
}
return this.updateById(departBoundary);
}
@Override
public boolean addDepartBoundary(BusinessDepartBoundary departBoundary) {
return this.saveOrUpdate(departBoundary);
}
@Override
public String listJson(BusinessDepartBoundary departBoundary) {
if(StringUtils.isBlank(departBoundary.getDeptId())){
throw new ServiceException("部门【id】不存在");
}
return this.baseMapper.listJson(departBoundary);
}
@Override
public boolean deleteDepartBoundary(String id) {
BusinessDepartBoundary departBoundary = this.baseMapper.selectById(id);
if (ObjectUtil.isEmpty(departBoundary)) {
throw new ServiceException("实体不存在!");
}
return this.baseMapper.deleteById(departBoundary.getId())>0;
}
/**
* 根据解析的shp文件数据构建部门区域
* @param geospatialVectorsList
* @return
*/
private List<BusinessDepartBoundary> buildBusinessDepartBoundary(List<BusinessGeospatialVectors> geospatialVectorsList,String deptId) {
List<BusinessDepartBoundary> resultList = new ArrayList<>();
List<Map<String,Object>> namePathList = remoteDeptService.getNamePathList();
Map<String, List<Map<String, Object>>> namePathMap = namePathList.stream()
.filter(item -> item.containsKey("shpNo"))
.collect(Collectors.groupingBy(item -> item.get("shpNo").toString()));
geospatialVectorsList.forEach(param->{
BusinessDepartBoundary businessDepartBoundary = new BusinessDepartBoundary();
businessDepartBoundary.setBoundary(param.getLandCategories());
businessDepartBoundary.setShpNo(param.getLandUnitCode());
if (ObjectUtil.isNotEmpty(namePathMap.get(param.getLandUnitCode()))){
businessDepartBoundary.setDeptName(namePathMap.get(param.getLandUnitCode()).get(0).get("deptName") + "");
businessDepartBoundary.setDeptId(namePathMap.get(param.getLandUnitCode()).get(0).get("deptId") + "");
businessDepartBoundary.setCommunityName(namePathMap.get(param.getLandUnitCode()).get(0).get("namePath") + "");
resultList.add(businessDepartBoundary);
}
});
return resultList;
}
private static String capitalizeFirstLetter(String str) {
if (str == null || str.isEmpty()) {
return str;
}
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
}

197
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessPatrolAreasServiceImpl.java

@ -0,0 +1,197 @@
package org.dromara.business.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.domain.*;
import org.dromara.business.domain.bo.BusinessPatrolAreasBo;
import org.dromara.business.mapper.BusinessPatrolAreasMapper;
import org.dromara.business.service.*;
import org.dromara.business.utils.ShpAnalysisUtil;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RemoteDeptService;
import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteDeptVo;
import org.dromara.system.api.model.LoginUser;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description: 巡查区域
*/
@RequiredArgsConstructor
@Service
public class BusinessPatrolAreasServiceImpl extends ServiceImpl<BusinessPatrolAreasMapper, BusinessPatrolAreas> implements IBusinessPatrolAreasService {
private final IBusinessVectorDictService vectorDictService;
@DubboReference
private RemoteUserService remoteUserService;
@DubboReference
private RemoteDeptService remoteDeptService;
@Override
public TableDataInfo<BusinessPatrolAreas> pagePatrolAreas(PageQuery pageQuery, BusinessPatrolAreasBo patrolAreasBo) {
LoginUser user = LoginHelper.getLoginUser();
List<String> deptIds = new ArrayList<>();
String departIds = null;
if(StringUtils.isBlank(patrolAreasBo.getDeptId())){
RemoteDeptVo remoteDeptVo = remoteDeptService.selectDeptById(user.getDeptId());
if(ObjectUtil.isEmpty(remoteDeptVo)){
throw new ServiceException("部门不存在");
}
departIds = user.getDeptId() + "";
}else {
departIds = patrolAreasBo.getDeptId();
}
deptIds.add(departIds);
return TableDataInfo.build(this.baseMapper.listPatrolAreas(pageQuery.build(), patrolAreasBo, deptIds));
}
@Override
public List<BusinessPatrolAreas> listPatrolAreas(BusinessPatrolAreasBo patrolAreasBo) {
return this.baseMapper.listPatrolAreas(patrolAreasBo, patrolAreasBo.getDeptIds());
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updatePatrolAreas(BusinessPatrolAreas patrolAreas) {
patrolAreas.setUserName(remoteUserService.selectUserNameById(Long.valueOf(patrolAreas.getUserId())));
return this.updateById(patrolAreas);
}
@Override
public List<BusinessPatrolAreas> exportXls(BusinessPatrolAreas patrolAreas) {
LambdaQueryWrapper<BusinessPatrolAreas> wrapper = buildWrapper(patrolAreas);
return this.list(wrapper);
}
@Override
public void addPatrolAreas(MultipartFile file) {
List<BusinessGeospatialVectors> geospatialVectorsList = new ArrayList<>();
try {
//1、首先调用解析工具拿到解析的字段集合
InputStream inputStream = file.getInputStream();
List<Map<String, String>> mapList = ShpAnalysisUtil.analysisShpFile(inputStream);
// 3. 构建字典map
List<BusinessVectorDict> fieldsInfoList = vectorDictService.listVectorField();
Map<String, List<String>> dictMap = fieldsInfoList
.stream()
.collect(Collectors.toMap(
BusinessVectorDict::getDictCode,
v -> v.getFieldMappingsList().stream()
.map(mapping -> mapping.getItemValue().toLowerCase()) // 转小写
.collect(Collectors.toList())
));
// 4. 遍历 mapList,替换映射关系并只保留有效条目
List<Map<String, String>> resultList = mapList.stream()
.map(originalMap -> originalMap.entrySet().stream()
.filter(entry -> {
String keyLower = entry.getKey().toLowerCase(); // 将 mapList 中的 key 转换为小写
// 遍历 dictMap 的所有 List<String>,检查其中是否包含该 key
return dictMap.values().stream()
.anyMatch(list -> list.contains(keyLower)); // 判断 dictMap 中的 List<String> 是否包含该 key
})
.collect(Collectors.toMap(
entry -> {
// 根据匹配的 key 查找 dictMap 中对应的 key
return dictMap.entrySet().stream()
.filter(mapEntry -> mapEntry.getValue().contains(entry.getKey().toLowerCase()))
.map(Map.Entry::getKey)
.findFirst()
.orElse(""); // 如果没有匹配到,则返回空字符串
},
Map.Entry::getValue
))
)
.filter(transformedMap -> !transformedMap.isEmpty()) // 过滤空的 Map
.collect(Collectors.toList());
// 5. 通过反射设置 GeospatialVectors 对象的属性
for (Map<String, String> transformedMap : resultList) {
BusinessGeospatialVectors geoVector = new BusinessGeospatialVectors();
transformedMap.forEach((key, value) -> {
try {
// 尝试通过反射找到相应的Setter方法,并调用
Method setterMethod = BusinessGeospatialVectors.class.getMethod("set" + capitalizeFirstLetter(key), String.class);
setterMethod.invoke(geoVector, value);
} catch (Exception e) {
e.printStackTrace();
}
});
geoVector.setCreateTime(new Date());
geospatialVectorsList.add(geoVector);
}
//6、生成新的对象集合存储数据表中
//todo 处理这个集合geospatialVectorsList
List<BusinessPatrolAreas> areasList = buildBusinessPatrolAreas(geospatialVectorsList);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 根据解析shp得到的内容封装到BusinessPatrolAreas这个类里面
* @param paramList
* @return
*/
private List<BusinessPatrolAreas> buildBusinessPatrolAreas(List<BusinessGeospatialVectors> paramList) {
List<BusinessPatrolAreas> resultList = new ArrayList<>();
return resultList;
}
private static String capitalizeFirstLetter(String str) {
if (str == null || str.isEmpty()) {
return str;
}
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
private LambdaQueryWrapper<BusinessPatrolAreas> buildWrapper(BusinessPatrolAreas patrolAreas) {
LambdaQueryWrapper<BusinessPatrolAreas> wrapper = new LambdaQueryWrapper<>();
if (ObjectUtil.isNotEmpty(patrolAreas.getName())){
wrapper.like(BusinessPatrolAreas::getName, patrolAreas.getName());
}
if (ObjectUtil.isNotEmpty(patrolAreas.getDeptId())){
wrapper.eq(BusinessPatrolAreas::getDeptId, patrolAreas.getDeptId());
}
if (ObjectUtil.isNotEmpty(patrolAreas.getAreasIdList())){
wrapper.in(BusinessPatrolAreas::getId, patrolAreas.getAreasIdList());
}
return wrapper;
}
}

28
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessVectorDictItemServiceImpl.java

@ -0,0 +1,28 @@
package org.dromara.business.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.business.domain.BusinessVectorDictItem;
import org.dromara.business.mapper.BusinessVectorDictItemMapper;
import org.dromara.business.service.IBusinessVectorDictItemService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 矢量数据字段映射关联服务类
*/
@Service
public class BusinessVectorDictItemServiceImpl extends ServiceImpl<BusinessVectorDictItemMapper, BusinessVectorDictItem> implements IBusinessVectorDictItemService {
@Override
public List<BusinessVectorDictItem> findDictItemByDictId(String dictId) {
LambdaQueryWrapper<BusinessVectorDictItem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BusinessVectorDictItem::getDictId, dictId);
return this.baseMapper.selectList(wrapper);
}
}

37
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessVectorDictServiceImpl.java

@ -0,0 +1,37 @@
package org.dromara.business.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.business.domain.BusinessVectorDict;
import org.dromara.business.mapper.BusinessVectorDictMapper;
import org.dromara.business.service.IBusinessVectorDictService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 矢量数据字段映射主表服务类
*/
@Service
public class BusinessVectorDictServiceImpl extends ServiceImpl<BusinessVectorDictMapper, BusinessVectorDict> implements IBusinessVectorDictService {
@Override
public List<BusinessVectorDict> listVectorField() {
return this.baseMapper.listVectorField();
}
@Override
public BusinessVectorDict findVectorDictById(String dictId) {
if (ObjectUtil.isEmpty(dictId)){
throw new RuntimeException("【dictId】为空,参数为空!");
}
LambdaQueryWrapper<BusinessVectorDict> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BusinessVectorDict::getId, dictId);
return this.baseMapper.selectOne(wrapper);
}
}

141
dk-modules/business/src/main/java/org/dromara/business/service/impl/WaylineAlertServiceImpl.java

@ -1,141 +0,0 @@
package org.dromara.business.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.business.domain.WaylineAlert;
import org.dromara.business.domain.bo.WaylineAlertBo;
import org.dromara.business.domain.vo.WaylineAlertVo;
import org.dromara.business.mapper.WaylineAlertMapper;
import org.dromara.business.service.IWaylineAlertService;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 预警任务Service业务层处理
*
* @author LionLi
* @date 2025-02-27
*/
@RequiredArgsConstructor
@Service
public class WaylineAlertServiceImpl implements IWaylineAlertService {
private final WaylineAlertMapper baseMapper;
/**
* 查询预警任务
*
* @param id 主键
* @return 预警任务
*/
@Override
public WaylineAlertVo getWaylineAlert(String id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询预警任务列表
*
* @param param 查询条件
* @param pageQuery 分页参数
* @return 预警任务分页列表
*/
@Override
public TableDataInfo<WaylineAlertVo> pageWaylineAlert(WaylineAlertBo param, PageQuery pageQuery) {
LambdaQueryWrapper<WaylineAlert> lqw = buildQueryWrapper(param);
Page<WaylineAlertVo> result = baseMapper.pageAlert(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的预警任务列表
*
* @param param 查询条件
* @return 预警任务列表
*/
@Override
public List<WaylineAlertVo> listWaylineAlert(WaylineAlertBo param) {
LambdaQueryWrapper<WaylineAlert> lqw = buildQueryWrapper(param);
return baseMapper.selectVoList(lqw);
}
/**
* 新增预警任务
*
* @param param 预警任务
* @return 是否新增成功
*/
@Override
public Boolean addWaylineAlert(WaylineAlertBo param) {
WaylineAlert alert = MapstructUtils.convert(param, WaylineAlert.class);
validEntityBeforeSave(alert,false);
return this.baseMapper.insert(alert) > 0;
}
/**
* 批量添加
* @param alertList 预警任务
* @return
*/
@Override
public Boolean saveBatchAlert(List<WaylineAlert> alertList) {
return this.baseMapper.insertBatch(alertList);
}
/**
* 修改预警任务
*
* @param param 预警任务
* @return 是否修改成功
*/
@Override
public Boolean updateWaylineAlert(WaylineAlertBo param) {
WaylineAlert alert = MapstructUtils.convert(param, WaylineAlert.class);
validEntityBeforeSave(alert,true);
return baseMapper.updateById(alert) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WaylineAlert alert,Boolean validId){
if (ObjectUtil.isEmpty(alert.getId())){
throw new ServiceException("预警【Id】为空!");
}
}
/**
* 校验并批量删除预警任务信息
*
* @param alertIdList 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWaylineAlert(List<String> alertIdList, Boolean isValid) {
if(isValid){
if (ObjectUtil.isEmpty(alertIdList)){
throw new ServiceException("预警Id为空!");
}
}
return baseMapper.deleteByIds(alertIdList) > 0;
}
private LambdaQueryWrapper<WaylineAlert> buildQueryWrapper(WaylineAlertBo bo) {
LambdaQueryWrapper<WaylineAlert> wrapper = Wrappers.lambdaQuery();
wrapper.orderByAsc(WaylineAlert::getCreateTime);
return wrapper;
}
}

39
dk-modules/business/src/main/java/org/dromara/business/utils/BatchProcessorUtil.java

@ -0,0 +1,39 @@
package org.dromara.business.utils;
import java.util.List;
import java.util.function.Consumer;
/**
* 分批处理工具类
*/
public class BatchProcessorUtil {
/**
* 分批处理数据
*
* @param dataList 数据集合
* @param batchSize 每批处理的数据量
* @param startIndex 起始位置
* @param batchHandler 每批数据的处理逻辑
* @return 下一次的起始位置
*/
public static <T> boolean processBatches(List<T> dataList, int batchSize, int startIndex, Consumer<List<T>> batchHandler) {
if (dataList == null || dataList.isEmpty()) {
return true; // 数据为空,直接返回当前起始位置
}
int totalSize = dataList.size();
while (startIndex < totalSize) {
int endIndex = Math.min(startIndex + batchSize, totalSize);
List<T> batch = dataList.subList(startIndex, endIndex);
// 处理当前批次的数据
batchHandler.accept(batch);
// 更新起始位置
startIndex = endIndex;
}
return startIndex >= totalSize; // 返回下一次的起始位置
}
}

368
dk-modules/business/src/main/java/org/dromara/business/utils/ShpAnalysisUtil.java

@ -0,0 +1,368 @@
package org.dromara.business.utils;
import cn.hutool.core.util.ObjectUtil;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.MultiPolygon;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.operation.union.UnaryUnionOp;
import org.opengis.feature.Property;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipInputStream;
/**
* shp文件读取工具类
* 支持不同类型的地理要素
*/
public class ShpAnalysisUtil {
private static final Logger log = LoggerFactory.getLogger(ShpAnalysisUtil.class);
private static final String CHECK_FIELD = "O_Com";
/**
* 读取shp文件返回要素集合
* @param shpPath shp文件路径
* @return 要素集合包含地理位置和属性信息
*/
public static List<Map<String, String>> analysisShpFile(String shpPath) {
List<Map<String, String>> resultList = new ArrayList<>();
try {
resultList=analysisShpFile(shpPath, "GBK");
} catch (Exception e) {
log.error("无法使用支持的字符编码读取shp文件: {}", e.getMessage());
}
return resultList;
}
/**
* 读取shp文件返回要素集合
* @param shpInputStream shp文件输入流
* @return 要素集合包含地理位置和属性信息
*/
public static List<Map<String, String>> analysisShpFile(InputStream shpInputStream) {
List<Map<String, String>> resultList = new ArrayList<>();
try {
resultList = analysisShpFile(shpInputStream, "GBK");
} catch (Exception e) {
log.error("无法使用支持的字符编码读取shp文件输入流: {}", e.getMessage());
}
return resultList;
}
/**
* 读取shp文件的主要方法仅支持ZIP输入流
*
* @param shpInputStream shp文件ZIP输入流
* @param charset 字符编码
* @return 要素集合包含地理位置和属性信息
* @throws IllegalArgumentException 如果输入流不是ZIP格式
*/
public static List<Map<String, String>> analysisShpFile(InputStream shpInputStream, String charset) {
// 存储解析出的要素集合
List<Map<String, String>> resultList = new ArrayList<>();
File tempDir = null;
try {
// 创建临时目录
tempDir = Files.createTempDirectory("plough_shp_").toFile();
tempDir.deleteOnExit(); // 额外保障
// 使用指定编码的ZipInputStream处理
Charset zipCharset = Charset.forName(charset);
try (ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(shpInputStream), zipCharset)) {
ZipEntry entry;
boolean shpFound = false;
while ((entry = zipInputStream.getNextEntry()) != null) {
// 处理文件名编码问题
log.info("文件名字:{}",entry.getName());
File outputFile = new File(tempDir, entry.getName());
// 创建父目录
if (entry.isDirectory()) {
outputFile.mkdirs();
} else {
// 确保父目录存在
outputFile.getParentFile().mkdirs();
// 写入文件
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
byte[] buffer = new byte[1024];
int len;
while ((len = zipInputStream.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
}
// 检查是否为SHP文件
if (entry.getName().toLowerCase().endsWith(".shp")) {
shpFound = true;
}
}
}
// 如果没有找到SHP文件,抛出异常
if (!shpFound) {
throw new FileNotFoundException("ZIP压缩包中未找到SHP文件");
}
} catch (ZipException e) {
// 非ZIP输入流,抛出异常
throw new IllegalArgumentException("输入流不是有效的ZIP格式", e);
}
// 查找第一个.shp文件
File shpFile = findFirstShpFile(tempDir);
if (shpFile == null) {
throw new FileNotFoundException("未找到SHP文件");
}
// 使用找到的SHP文件路径调用现有方法
resultList = analysisShpFile(shpFile.getAbsolutePath(), charset);
} catch (Exception e) {
log.error("处理SHP文件输入流失败: {}", e.getMessage(), e);
throw new RuntimeException("处理SHP文件失败", e);
} finally {
// 尝试删除临时目录及其内容
if (tempDir != null && tempDir.exists()) {
deleteDirectory(tempDir);
}
//关闭流文件
try {
shpInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultList;
}
/**
* 读取shp文件的主要方法
*
* @param shpPath shp文件路径
* @param charset 字符编码
* @return 要素集合包含地理位置和属性信息
*/
public static List<Map<String, String>> analysisShpFile(String shpPath, String charset) {
// 存储解析出的要素集合
List<Map<String, String>> resultList = new ArrayList<>();
try {
// 1、验证文件在路径中是否存在
File shpFile = new File(shpPath);
if (!shpFile.exists()) {
log.error("shp文件不存在:{} ", shpPath);
return resultList;
}
// 2、设置GeoTools坐标的字符编码
System.setProperty("org.geotools.referencing.charset", charset);
System.setProperty("org.geotools.shapefile.charset", charset);
// 3、获取数据存储实例
FileDataStore dataStore = FileDataStoreFinder.getDataStore(shpFile);
if (ObjectUtil.isEmpty(dataStore)) {
log.error("无法打开shape文件:{} ", shpPath);
return resultList;
}
// 4、设置shp文件的DBF文件编码
if (dataStore instanceof ShapefileDataStore) {
((ShapefileDataStore) dataStore).setCharset(Charset.forName(charset));
}
try {
// 5、获取要素源和要素集合
SimpleFeatureSource featureSource = dataStore.getFeatureSource();
SimpleFeatureCollection featureCollection = featureSource.getFeatures();
String typeName = dataStore.getTypeNames()[0];
CoordinateReferenceSystem sourceCRS = dataStore.getFeatureSource(typeName).getSchema().getCoordinateReferenceSystem();
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:4326");
MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true);
// 遍历处理每个要素
try (SimpleFeatureIterator iterator = featureCollection.features()) {
while (iterator.hasNext()) {
SimpleFeature feature = iterator.next();
Map<String, String> featureMap = new HashMap<>();
for (Property property : feature.getProperties()) {
String name = property.getName().toString();
Object value = property.getValue();
// 处理几何数据
try {
if (value instanceof Geometry) {
// 如果值本身就是Geometry类型,直接使用
value = analysisGeometry((Geometry) value, transform);
}
} catch (Exception e) {
log.warn("Error processing geometry for property {}: {}", name, e.getMessage());
}
// 处理特殊字段
if (name.startsWith(CHECK_FIELD)) {
Map<String, String> parsedValues = parseOComValue(value);
featureMap.putAll(parsedValues);
} else {
featureMap.put(name, value.toString());
}
}
resultList.add(featureMap);
}
}
} finally {
// 确保数据存储被正确关闭
dataStore.dispose();
}
} catch (Exception e) {
e.printStackTrace();
log.error("读取shape文件失败: {}", e.getMessage());
}
return resultList;
}
/**
* 解析O_Com字段值
*
* @param oComValue O_Com字段值
* @return 解析后的属性Map
*/
private static Map<String, String> parseOComValue(Object oComValue) {
// 初始化返回结果Map
Map<String, String> attributes = new HashMap<>();
if (ObjectUtil.isEmpty(oComValue)) return attributes;
// 预处理字符串,去除多余空格
String comStr = oComValue.toString().trim();
try {
// 按分号分割键值对
String[] pairs = comStr.split(";");
for (String pair : pairs) {
pair = pair.trim();
if (pair.isEmpty()) continue;
// 解析键值对
String[] keyValue = pair.split(":");
if (keyValue.length == 2) {
// 清理键值中的引号
String key = keyValue[0].trim().replace("\"", "");
String value = keyValue[1].trim().replace("\"", "");
// 直接存储字符串值,不进行类型转换
attributes.put(key, value);
}
}
} catch (Exception e) {
log.error("解析O_Com字段值失败: {}", e.getMessage());
}
return attributes;
}
private static String analysisGeometry(Geometry geometry, MathTransform transform) throws TransformException {
String resultStr = "";
// 对每个 Polygon 进行坐标转换
Geometry transformedGeometry = JTS.transform(geometry, transform);
MultiPolygon multiPolygon = (MultiPolygon) transformedGeometry;
Geometry unionGeometry = UnaryUnionOp.union(multiPolygon);
if (unionGeometry instanceof Polygon) {
Polygon polygon = (Polygon) unionGeometry;
resultStr = convertPolygonToWKT(polygon);
}
return resultStr;
}
private static String convertPolygonToWKT(Polygon polygon) {
StringBuffer polygonSb = new StringBuffer("GEOMETRYCOLLECTION(POLYGON((");
Coordinate[] coordinates = polygon.getCoordinates();
for (int i = 0; i < coordinates.length; i++) {
Coordinate coord = coordinates[i];
if (i > 0) polygonSb.append(",");
polygonSb.append(coord.y + " " + coord.x);
}
if(coordinates[0].x !=coordinates[coordinates.length-1].x){
polygonSb.append(","+coordinates[0].y + " " + coordinates[0].x);
}
polygonSb.append(")))");
return polygonSb.toString();
}
/**
* 递归删除目录
* @param directory 要删除的目录
*/
private static void deleteDirectory(File directory) {
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
deleteDirectory(file);
} else {
boolean deleted = file.delete();
if (!deleted) {
log.warn("删除文件 {} 失败", file.getAbsolutePath());
}
}
}
}
boolean dirDeleted = directory.delete();
if (!dirDeleted) {
log.warn("删除目录 {} 失败", directory.getAbsolutePath());
}
}
/**
* 在指定目录中查找第一个.shp文件
* @param directory 搜索目录
* @return 找到的第一个.shp文件未找到返回null
*/
private static File findFirstShpFile(File directory) {
File[] files = directory.listFiles((dir, name) -> name.toLowerCase().endsWith(".shp"));
return files != null && files.length > 0 ? files[0] : null;
}
}

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

@ -0,0 +1,205 @@
<?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.BusinessAlertMapper">
<select id="pageBusinessAlert" resultType="org.dromara.business.domain.BusinessAlert">
select
ba.*,
b.flow_status flowStatus,
b.business_id businessId,
from dk_business.business_alert ba
left join dk_workflow.flow_instance b on ba.id = b.business_id
${ew.getCustomSqlSegment}
</select>
<select id="pageAlertFinish" resultType="org.dromara.business.domain.BusinessAlert">
select
ba.*,
b.flow_status flowStatus,
b.business_id businessId,
a.approver,
a.id flowTaskId
from dk_business.business_alert ba
left join dk_workflow.flow_instance b on ba.id = b.business_id
left join dk_workflow.flow_his_task a on a.instance_id = b.id
left join dk_workflow.flow_definition c on a.definition_id = c.id
${ew.getCustomSqlSegment}
</select>
<select id="pageAlertTodo" resultType="org.dromara.business.domain.BusinessAlert">
select
ba.*,
b.flow_status,
b.business_id,
uu.processed_by approver,
a.id flowTaskId
from dk_business.business_alert ba
left join dk_workflow.flow_instance b on ba.id = b.business_id
left join dk_workflow.flow_task a on a.instance_id = b.id
left join dk_workflow.flow_user uu on uu.associated = a.id
left join dk_workflow.flow_definition c on a.definition_id = c.id
${ew.getCustomSqlSegment}
</select>
<select id="listMonthAlert" resultType="java.util.Map">
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 0 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')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 1 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 2 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 3 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 4 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 5 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 6 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 7 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 8 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 9 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 10 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
union all
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), 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 11 MONTH), '%Y-%m')
<if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
item
</foreach>
</if>
</select>
<select id="listDepartAlert" resultType="java.util.Map">
select ba.dept_name deptName, ba.dept_id deptId,count(1) total
from business_alert ba
where 1=1
<if test="param.createTime != null and param.createTime != ''">
and DATE_FORMAT(ba.create_time,'%Y-%m') = DATE_FORMAT(#{param.createTime},'%Y-%m')
</if>
GROUP BY ba.dept_name,ba.dept_id
</select>
<select id="listMonthAlertStatus" resultType="java.util.Map">
WITH RECURSIVE months AS (
SELECT MAKEDATE(YEAR(NOW()), 1) AS dateMonth
UNION ALL
SELECT DATE_ADD(dateMonth, INTERVAL 1 MONTH)
FROM months
WHERE <![CDATA[ dateMonth < LAST_DAY(MAKEDATE(YEAR(NOW()), 1) + INTERVAL 10 MONTH) ]]>
)
SELECT
DATE_FORMAT(m.dateMonth, '%Y-%m') AS dateMonth,
COALESCE(COUNT(ba.id), 0) AS total,
COALESCE(SUM(ba.handle_type = 'waiting'), 0) AS todoCount,
COALESCE(SUM(ba.handle_type = 'finish'), 0) AS finishCount
FROM months m
LEFT JOIN business_alert ba
ON DATE_FORMAT(ba.create_time, '%Y-%m') = DATE_FORMAT(m.dateMonth, '%Y-%m')
GROUP BY m.dateMonth
ORDER BY m.dateMonth
</select>
<select id="listDepartAlertStatus" resultType="java.util.Map">
SELECT
ba.dept_name deptName,
ba.dept_id deptId,
count( 1 ) total,
SUM( handle_type = 'waiting' ) AS todoCount,
SUM( handle_type = 'finish' ) AS finishCount
FROM
business_alert ba
where 1=1
<if test="param.createTime != null and param.createTime != ''">
and DATE_FORMAT(ba.create_time,'%Y-%m') = DATE_FORMAT(#{param.createTime},'%Y-%m')
</if>
GROUP BY
ba.dept_name,ba.dept_id
</select>
</mapper>

147
dk-modules/business/src/main/resources/mapper/business/BusinessDepartBoundaryMapper.xml

@ -0,0 +1,147 @@
<?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.BusinessDepartBoundaryMapper">
<select id="listSysDepartBoundary" resultType="org.dromara.business.domain.BusinessDepartBoundary">
SELECT
db.id,
db.dept_id,
db.dept_name,
db.type,
db.community_name,
CONCAT(
REPLACE ( REPLACE ( REPLACE ( REPLACE ( ST_AsText ( db.boundary ), 'GEOMETRYCOLLECTION(POLYGON((', '[[' ), ')))', ']]' ), ',', '],[' ), ' ', ',' )
) AS boundary,
db.create_by,
db.create_time
FROM
business_depart_boundary db
LEft JOIN dk_cloud.sys_dept d on db.dept_id = d.dept_id
<where>
<if test="condition.deptId != null and condition.deptId != ''">
and (db.dept_id = #{condition.deptId} or d.parent_id = #{condition.deptId})
</if>
<if test="condition.communityName != null and condition.communityName != ''">
and db.community_name like concat(concat('%',#{condition.communityName}),'%')
</if>
</where>
</select>
<select id="listSysDepartBoundaryGeomFromText" resultType="org.dromara.business.domain.BusinessDepartBoundary">
SELECT
db.id,
db.dept_id,
db.dept_name,
db.type,
db.community_name,
CONCAT(
REPLACE ( REPLACE ( REPLACE ( REPLACE ( ST_AsText ( db.boundary ), 'GEOMETRYCOLLECTION(POLYGON((', '[[' ), ')))', ']]' ), ',', '],[' ), ' ', ',' )
) AS boundary,
db.create_by,
db.create_time
FROM
business_depart_boundary db
LEft JOIN dk_cloud.sys_dept d on db.dept_id = d.dept_id
<where>
<if test="condition.deptId != null and condition.deptId != ''">
and (db.dept_id = #{condition.deptId} or d.parent_id = #{condition.deptId})
</if>
<if test="condition.communityName != null and condition.communityName != ''">
and db.community_name like concat(concat('%',#{condition.communityName}),'%')
</if>
<if test="condition.shpNo != null and condition.shpNo != ''">
and db.shp_so like #{condition.shpNo}
</if>
</where>
</select>
<select id="queryByDeptId" resultType="org.dromara.business.domain.BusinessDepartBoundary">
SELECT
db.id,
db.dept_id,
db.dept_name,
db.type,
db.community_name,
CONCAT(
REPLACE ( REPLACE ( REPLACE ( REPLACE ( ST_AsText ( db.boundary ), 'GEOMETRYCOLLECTION(POLYGON((', '[[' ), ')))', ']]' ), ',', '],[' ), ' ', ',' )
) AS boundary,
db.create_by,
db.create_time
FROM
business_depart_boundary db
LEft JOIN dk_cloud.sys_dept d on db.dept_id = d.dept_id
WHERE d.id = #{deptId}
</select>
<insert id="saveBatchBoundary">
INSERT INTO business_depart_boundary (
dept_id,
dept_name,
community_name,
boundary,
perimeter,
area,
area_mu,
shp_no,
village_type,
create_by,
create_time,
update_by,
update_time,
create_dept
)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.deptId},
#{item.deptName},
#{item.communityName},
ST_GeomFromText(#{item.boundary}),
#{item.perimeter},
#{item.area},
#{item.areaMu},
#{item.shpNo},
#{item.villageType},
#{item.createBy},
#{item.createTime},
#{item.updateBy},
#{item.updateTime},
#{item.createDept})
</foreach>
</insert>
<select id="listJson" resultType="java.lang.String">
SELECT
JSON_OBJECT(
'type',
'FeatureCollection',
'features',
COALESCE (
JSON_ARRAYAGG(
JSON_OBJECT(
'type',
'Feature',
'properties',
JSON_OBJECT(
'deptId', l.dept_id,
'deptName', l.dept_name,
'adcode', l.shp_no,
'name', l.community_name,
'community_name', l.community_name
),
'geometry',
ST_AsGeoJSON(l.boundary)
)
),
JSON_ARRAY()
)
) AS landCategoriesJson
FROM
business_depart_boundary l
LEFT JOIN dk_cloud.sys_dept d ON l.dept_id = d.dept_id
WHERE
d.dept_id = #{param.deptId}
</select>
</mapper>

55
dk-modules/business/src/main/resources/mapper/business/BusinessPatrolAreasMapper.xml

@ -0,0 +1,55 @@
<?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.BusinessPatrolAreasMapper">
<resultMap id="listPatrolAreasMap" type="org.dromara.business.domain.BusinessPatrolAreas">
<result column="id" property="id" jdbcType="VARCHAR"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="number" property="number" jdbcType="VARCHAR"/>
<result column="dept_id" property="deptId" jdbcType="VARCHAR"/>
<result column="dept_ids" property="deptIds" jdbcType="VARCHAR"/>
<result column="platform_type" property="platformType" jdbcType="VARCHAR"/>
<result column="dept_name" property="deptName" jdbcType="VARCHAR"/>
<result column="leader_dept_id" property="leaderDeptId" jdbcType="VARCHAR"/>
<result column="user_id" property="userId" jdbcType="VARCHAR"/>
<result column="user_name" property="userName" jdbcType="VARCHAR"/>
<result column="create_by" property="createBy" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<collection column="{areaId=id}"
property="patrolAreasUsers" ofType="org.dromara.business.domain.BusinessPatrolAreasUser"
javaType="java.util.ArrayList"
select="org.dromara.business.mapper.BusinessPatrolAreasUserMapper.listPatrolAreasUserByAreaId"/>
<collection column="{areaId=id}"
property="patrolAreasPoints" ofType="org.dromara.business.domain.BusinessPatrolAreasPoints"
javaType="java.util.ArrayList"
select="org.dromara.business.mapper.BusinessPatrolAreasPointsMapper.listPatrolAreasPointByAreaId"/>
</resultMap>
<select id="listPatrolAreas" resultMap="listPatrolAreasMap">
select pa.*,sd.dept_name as dept_name from business_patrol_areas pa
LEFT JOIN dk_cloud.sys_dept sd ON pa.dept_id = sd.dept_id
where
pa.del_flag = 0
<if test="deptIds.size > 0">
and pa.dept_id in
<foreach item="id" collection="deptIds" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="condition.name != null and condition.name != ''">
and pa.name LIKE concat(concat('%',#{condition.name}),'%')
</if>
<if test="condition.platformType != null and condition.platformType != ''">
AND pa.id IN (
SELECT api.patrol_areas_id
FROM business_patrol_areas_platform_info api
WHERE api.platform_type = 'plough'
)
</if>
<if test="condition.name != null and condition.name != ''">
and pa.name LIKE concat(concat('%',#{condition.name}),'%')
</if>
<if test="condition.isDisable != null and condition.isDisable != ''">
and pa.is_disable =#{condition.isDisable}
</if>
</select>
</mapper>

7
dk-modules/business/src/main/resources/mapper/business/BusinessVectorDictItemMapper.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.BusinessVectorDictItemMapper">
</mapper>

28
dk-modules/business/src/main/resources/mapper/business/BusinessVectorDictMapper.xml

@ -0,0 +1,28 @@
<?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.BusinessVectorDictMapper">
<resultMap id="fieldResultMap" type="org.dromara.business.domain.BusinessVectorDict">
<id property="id" column="id"/>
<result property="dictCode" column="dictCode"/>
<collection property="fieldMappingsList" ofType="org.dromara.business.domain.BusinessVectorDictItem">
<result property="id" column="dictItemId"/>
<result property="itemValue" column="mappingValue"/>
<result property="dictId" column="dictId"/>
</collection>
</resultMap>
<select id="listVectorField" resultMap="fieldResultMap">
SELECT
f.id AS id,
f.dict_code AS dictCode,
m.dict_id AS dictId,
m.id AS dictItemId,
m.item_value AS mappingValue
FROM
business_vector_dict f
LEFT JOIN
business_vector_dict_item m ON f.id = m.dict_id
</select>
</mapper>

51
dk-modules/business/src/main/resources/mapper/business/WaylineAlertMapper.xml

@ -1,51 +0,0 @@
<?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.WaylineAlertMapper">
<select id="pageAlert" resultType="org.dromara.business.domain.vo.WaylineAlertVo">
select
id,
wheel_id,
task_id,
task_image_id,
reason,
images,
lat,
lng,
task_handle_type,
task_content,
complete_date,
handle_type,
del_flag,
mate_source_img_url,
max_mate_source_img_url,
max_images,
area,
area_l,
area_w,
handle_in_type,
is_illegal,
dept_id,
dept_name,
job_name,
handle_time,
task_handle,
platform_type,
pixel_coordinate,
handle_num,
territory_remark,
land_categories,
territory_url,
territory_path,
ignoring_cause,
handle_source,
create_by,
create_time
from wayline_alert
${ew.customSqlSegment}
</select>
</mapper>

4
dk-modules/resource/src/main/java/org/dromara/resource/controller/SysEmailController.java

@ -2,6 +2,8 @@ package org.dromara.resource.controller;
import cn.hutool.core.util.RandomUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.Constants;
@ -30,6 +32,7 @@ import java.time.Duration;
@RequiredArgsConstructor
@RestController
@RequestMapping("/email")
@Tag(name = "邮件功能")
public class SysEmailController extends BaseController {
private final MailProperties mailProperties;
@ -39,6 +42,7 @@ public class SysEmailController extends BaseController {
*
* @param email 邮箱
*/
@Operation(summary = "邮箱验证码",description = "邮箱验证码")
@RateLimiter(key = "#email", time = 60, count = 1)
@GetMapping("/code")
public R<Void> emailCode(@NotBlank(message = "{user.email.not.blank}") String email) {

9
dk-modules/resource/src/main/java/org/dromara/resource/controller/SysOssConfigController.java

@ -1,6 +1,8 @@
package org.dromara.resource.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
@ -28,6 +30,7 @@ import java.util.Arrays;
* @author 孤舟烟雨
* @date 2021-08-13
*/
@Tag(name = "对象存储配置")
@Validated
@RequiredArgsConstructor
@RestController
@ -41,6 +44,7 @@ public class SysOssConfigController extends BaseController {
*/
@SaCheckPermission("system:ossConfig:list")
@GetMapping("/list")
@Operation(summary = "查询对象存储配置列表",description = "查询对象存储配置列表")
public TableDataInfo<SysOssConfigVo> list(@Validated(QueryGroup.class) SysOssConfigBo bo, PageQuery pageQuery) {
return iSysOssConfigService.queryPageList(bo, pageQuery);
}
@ -52,6 +56,7 @@ public class SysOssConfigController extends BaseController {
*/
@SaCheckPermission("system:ossConfig:list")
@GetMapping("/{ossConfigId}")
@Operation(summary = "获取对象存储配置详细信息",description = "获取对象存储配置详细信息")
public R<SysOssConfigVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable("ossConfigId") Long ossConfigId) {
return R.ok(iSysOssConfigService.queryById(ossConfigId));
}
@ -62,6 +67,7 @@ public class SysOssConfigController extends BaseController {
@SaCheckPermission("system:ossConfig:add")
@Log(title = "对象存储配置", businessType = BusinessType.INSERT)
@PostMapping()
@Operation(summary = "新增对象存储配置",description = "新增对象存储配置")
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysOssConfigBo bo) {
return toAjax(iSysOssConfigService.insertByBo(bo));
}
@ -72,6 +78,7 @@ public class SysOssConfigController extends BaseController {
@SaCheckPermission("system:ossConfig:edit")
@Log(title = "对象存储配置", businessType = BusinessType.UPDATE)
@PutMapping()
@Operation(summary = "对象存储配置",description = "对象存储配置")
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysOssConfigBo bo) {
return toAjax(iSysOssConfigService.updateByBo(bo));
}
@ -84,6 +91,7 @@ public class SysOssConfigController extends BaseController {
@SaCheckPermission("system:ossConfig:remove")
@Log(title = "对象存储配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ossConfigIds}")
@Operation(summary = "删除对象存储配置",description = "删除对象存储配置")
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ossConfigIds) {
return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true));
}
@ -94,6 +102,7 @@ public class SysOssConfigController extends BaseController {
@SaCheckPermission("system:ossConfig:edit")
@Log(title = "对象存储状态修改", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
@Operation(summary = "对象存储状态修改",description = "对象存储状态修改")
public R<Void> changeStatus(@RequestBody SysOssConfigBo bo) {
return toAjax(iSysOssConfigService.updateOssConfigStatus(bo));
}

8
dk-modules/resource/src/main/java/org/dromara/resource/controller/SysOssController.java

@ -3,6 +3,8 @@ package org.dromara.resource.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.ObjectUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.QueryGroup;
@ -35,6 +37,7 @@ import java.util.List;
@RequiredArgsConstructor
@RestController
@RequestMapping("/oss")
@Tag(name = "文件上传")
public class SysOssController extends BaseController {
private final ISysOssService iSysOssService;
@ -44,6 +47,7 @@ public class SysOssController extends BaseController {
*/
@SaCheckPermission("system:oss:list")
@GetMapping("/list")
@Operation(summary = "查询OSS对象存储列表",description = "查询OSS对象存储列表")
public TableDataInfo<SysOssVo> list(@Validated(QueryGroup.class) SysOssBo bo, PageQuery pageQuery) {
return iSysOssService.queryPageList(bo, pageQuery);
}
@ -55,6 +59,7 @@ public class SysOssController extends BaseController {
*/
@SaCheckPermission("system:oss:list")
@GetMapping("/listByIds/{ossIds}")
@Operation(summary = "查询OSS对象基于id串",description = "查询OSS对象基于id串")
public R<List<SysOssVo>> listByIds(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ossIds) {
List<SysOssVo> list = iSysOssService.listByIds(Arrays.asList(ossIds));
return R.ok(list);
@ -68,6 +73,7 @@ public class SysOssController extends BaseController {
@SaCheckPermission("system:oss:upload")
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Operation(summary = "上传OSS对象存储",description = "上传OSS对象存储")
public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) {
if (ObjectUtil.isNull(file)) {
return R.fail("上传文件不能为空");
@ -87,6 +93,7 @@ public class SysOssController extends BaseController {
*/
@SaCheckPermission("system:oss:download")
@GetMapping("/download/{ossId}")
@Operation(summary = "下载OSS对象存储",description = "下载OSS对象存储")
public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException {
iSysOssService.download(ossId, response);
}
@ -99,6 +106,7 @@ public class SysOssController extends BaseController {
@SaCheckPermission("system:oss:remove")
@Log(title = "OSS对象存储", businessType = BusinessType.DELETE)
@DeleteMapping("/{ossIds}")
@Operation(summary = "删除OSS对象存储",description = "删除OSS对象存储")
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ossIds) {
return toAjax(iSysOssService.deleteWithValidByIds(Arrays.asList(ossIds), true));
}

4
dk-modules/resource/src/main/java/org/dromara/resource/controller/SysSmsController.java

@ -2,6 +2,8 @@ package org.dromara.resource.controller;
import cn.hutool.core.util.RandomUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -32,6 +34,7 @@ import java.util.LinkedHashMap;
@RequiredArgsConstructor
@RestController
@RequestMapping("/sms")
@Tag(name = "短信功能")
public class SysSmsController extends BaseController {
/**
@ -41,6 +44,7 @@ public class SysSmsController extends BaseController {
*/
@RateLimiter(key = "#phonenumber", time = 60, count = 1)
@GetMapping("/code")
@Operation(summary = "短信验证码",description = "短信验证码")
public R<Void> smsCaptcha(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) {
String key = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber;
String code = RandomUtil.randomNumbers(4);

4
dk-modules/system/src/main/java/org/dromara/system/controller/monitor/CacheController.java

@ -1,6 +1,8 @@
package org.dromara.system.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils;
@ -21,6 +23,7 @@ import java.util.*;
@RequiredArgsConstructor
@RestController
@RequestMapping("/cache")
@Tag(name = "缓存监控")
public class CacheController {
private final RedissonConnectionFactory connectionFactory;
@ -30,6 +33,7 @@ public class CacheController {
*/
@SaCheckPermission("monitor:cache:list")
@GetMapping()
@Operation(summary = "获取缓存监控列表",description = "获取缓存监控列表")
public R<CacheListInfoVo> getInfo() throws Exception {
RedisConnection connection = connectionFactory.getConnection();
Properties commandStats = connection.commands().info("commandstats");

8
dk-modules/system/src/main/java/org/dromara/system/controller/monitor/SysLogininforController.java

@ -1,6 +1,8 @@
package org.dromara.system.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheConstants;
@ -25,6 +27,7 @@ import java.util.List;
*
* @author Lion Li
*/
@Tag(name = "系统访问记录")
@Validated
@RequiredArgsConstructor
@RestController
@ -36,6 +39,7 @@ public class SysLogininforController extends BaseController {
/**
* 获取系统访问记录列表
*/
@Operation(summary = "获取系统访问记录列表",description = "获取系统访问记录列表")
@SaCheckPermission("monitor:logininfor:list")
@GetMapping("/list")
public TableDataInfo<SysLogininforVo> list(SysLogininforBo logininfor, PageQuery pageQuery) {
@ -45,6 +49,7 @@ public class SysLogininforController extends BaseController {
/**
* 导出系统访问记录列表
*/
@Operation(summary = "登录日志",description = "登录日志")
@Log(title = "登录日志", businessType = BusinessType.EXPORT)
@SaCheckPermission("monitor:logininfor:export")
@PostMapping("/export")
@ -57,6 +62,7 @@ public class SysLogininforController extends BaseController {
* 批量删除登录日志
* @param infoIds 日志ids
*/
@Operation(summary = "登录日志",description = "登录日志")
@SaCheckPermission("monitor:logininfor:remove")
@Log(title = "登录日志", businessType = BusinessType.DELETE)
@DeleteMapping("/{infoIds}")
@ -67,6 +73,7 @@ public class SysLogininforController extends BaseController {
/**
* 清理系统访问记录
*/
@Operation(summary = "清理系统访问记录",description = "清理系统访问记录")
@SaCheckPermission("monitor:logininfor:remove")
@Log(title = "登录日志", businessType = BusinessType.CLEAN)
@DeleteMapping("/clean")
@ -75,6 +82,7 @@ public class SysLogininforController extends BaseController {
return R.ok();
}
@Operation(summary = "账户解锁",description = "账户解锁")
@SaCheckPermission("monitor:logininfor:unlock")
@Log(title = "账户解锁", businessType = BusinessType.OTHER)
@GetMapping("/unlock/{userName}")

7
dk-modules/system/src/main/java/org/dromara/system/controller/monitor/SysOperlogController.java

@ -1,6 +1,8 @@
package org.dromara.system.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.web.core.BaseController;
@ -23,6 +25,7 @@ import java.util.List;
*
* @author Lion Li
*/
@Tag(name = "操作日志记录")
@Validated
@RequiredArgsConstructor
@RestController
@ -34,6 +37,7 @@ public class SysOperlogController extends BaseController {
/**
* 获取操作日志记录列表
*/
@Operation(summary = "获取操作日志记录列表",description = "获取操作日志记录列表")
@SaCheckPermission("monitor:operlog:list")
@GetMapping("/list")
public TableDataInfo<SysOperLogVo> list(SysOperLogBo operLog, PageQuery pageQuery) {
@ -43,6 +47,7 @@ public class SysOperlogController extends BaseController {
/**
* 导出操作日志记录列表
*/
@Operation(summary = "导出操作日志记录列表",description = "导出操作日志记录列表")
@Log(title = "操作日志", businessType = BusinessType.EXPORT)
@SaCheckPermission("monitor:operlog:export")
@PostMapping("/export")
@ -55,6 +60,7 @@ public class SysOperlogController extends BaseController {
* 批量删除操作日志记录
* @param operIds 日志ids
*/
@Operation(summary = "批量删除操作日志记录",description = "批量删除操作日志记录")
@Log(title = "操作日志", businessType = BusinessType.DELETE)
@SaCheckPermission("monitor:operlog:remove")
@DeleteMapping("/{operIds}")
@ -65,6 +71,7 @@ public class SysOperlogController extends BaseController {
/**
* 清理操作日志记录
*/
@Operation(summary = "清理操作日志记录",description = "清理操作日志记录")
@SaCheckPermission("monitor:operlog:remove")
@Log(title = "操作日志", businessType = BusinessType.CLEAN)
@DeleteMapping("/clean")

11
dk-modules/system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java

@ -4,6 +4,8 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheConstants;
import org.dromara.common.core.domain.R;
@ -27,6 +29,7 @@ import java.util.stream.Collectors;
*
* @author Lion Li
*/
@Tag(name = "在线用户监控")
@RequiredArgsConstructor
@RestController
@RequestMapping("/online")
@ -38,6 +41,7 @@ public class SysUserOnlineController extends BaseController {
* @param ipaddr IP地址
* @param userName 用户名
*/
@Operation(summary = "获取在线用户监控列表",description = "获取在线用户监控列表")
@SaCheckPermission("monitor:online:list")
@GetMapping("/list")
public TableDataInfo<SysUserOnline> list(String ipaddr, String userName) {
@ -77,8 +81,9 @@ public class SysUserOnlineController extends BaseController {
*
* @param tokenId token值
*/
@Operation(summary = "强退用户",description = "强退用户")
@SaCheckPermission("monitor:online:forceLogout")
@Log(title = "在线用户", businessType = BusinessType.FORCE)
@Log(title = "强退用户", businessType = BusinessType.FORCE)
@DeleteMapping("/{tokenId}")
public R<Void> forceLogout(@PathVariable String tokenId) {
try {
@ -91,6 +96,7 @@ public class SysUserOnlineController extends BaseController {
/**
* 获取当前用户登录在线设备
*/
@Operation(summary = "获取当前用户登录在线设备",description = "获取当前用户登录在线设备")
@GetMapping()
public TableDataInfo<SysUserOnline> getInfo() {
// 获取指定账号 id 的 token 集合
@ -111,7 +117,8 @@ public class SysUserOnlineController extends BaseController {
*
* @param tokenId token值
*/
@Log(title = "在线设备", businessType = BusinessType.FORCE)
@Operation(summary = "强退当前在线设备",description = "强退当前在线设备")
@Log(title = "强退当前在线设备", businessType = BusinessType.FORCE)
@PostMapping("/{tokenId}")
public R<Void> remove(@PathVariable("tokenId") String tokenId) {
try {

6
dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java

@ -42,9 +42,9 @@ public class SysMenuController extends BaseController {
*
* @return 路由信息
*/
@GetMapping("/getRouters")
public R<List<RouterVo>> getRouters() {
List<SysMenu> menus = menuService.selectMenuTreeByUserId(LoginHelper.getUserId());
@GetMapping("/{platformType}/getRouters")
public R<List<RouterVo>> getRouters(@PathVariable String platformType) {
List<SysMenu> menus = menuService.selectMenuTreeByUserId(LoginHelper.getUserId(),platformType);
return R.ok(menuService.buildMenus(menus));
}

6
dk-modules/system/src/main/java/org/dromara/system/domain/SysDept.java

@ -1,5 +1,6 @@
package org.dromara.system.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
@ -81,4 +82,9 @@ public class SysDept extends TenantEntity {
*/
private String ancestors;
/**
* 边界编码
*/
private String shpNo;
}

5
dk-modules/system/src/main/java/org/dromara/system/domain/SysMenu.java

@ -45,6 +45,11 @@ public class SysMenu extends BaseEntity {
*/
private Integer orderNum;
/**
* 菜单类型 (backendpch5)
*/
private String platformType;
/**
* 路由地址
*/

5
dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java

@ -73,4 +73,9 @@ public class SysDeptBo extends BaseEntity {
*/
private String status;
/**
* 边界编码
*/
private String shpNo;
}

6
dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysMenuBo.java

@ -46,6 +46,12 @@ public class SysMenuBo extends BaseEntity {
@NotNull(message = "显示顺序不能为空")
private Integer orderNum;
/**
* 菜单类型 (backendpch5)
*/
@NotNull(message = "菜单类型不能为空")
private String platformType;
/**
* 路由地址
*/

5
dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java

@ -36,6 +36,11 @@ public class SysDeptVo implements Serializable {
*/
private Long parentId;
/**
* 边界编码
*/
private String shpNo;
/**
* 父部门名称
*/

5
dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysMenuVo.java

@ -43,6 +43,11 @@ public class SysMenuVo implements Serializable {
*/
private Integer orderNum;
/**
* 菜单类型 (backendpch5)
*/
private String platformType;
/**
* 路由地址
*/

21
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java

@ -10,6 +10,7 @@ import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* 部门服务
@ -38,5 +39,25 @@ public class RemoteDeptServiceImpl implements RemoteDeptService {
public List<RemoteDeptVo> selectDeptsByList() {
List<SysDeptVo> list = sysDeptService.selectDeptsSimple();
return BeanUtil.copyToList(list, RemoteDeptVo.class);
}
@Override
public RemoteDeptVo selectDeptById(Long deptId) {
SysDeptVo sysDeptVo = sysDeptService.selectDeptById(deptId);
return BeanUtil.copyProperties(sysDeptVo, RemoteDeptVo.class);
}
@Override
public List<Map<String,Object>> getNamePathList() {
return sysDeptService.getNamePathList();
}
@Override
public List<RemoteDeptVo> selectListByParentId(String deptId) {
List<SysDeptVo> deptVoList = sysDeptService.selectListByParentId(deptId);
return BeanUtil.copyToList(deptVoList, RemoteDeptVo.class);
}
}

6
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@ -386,4 +386,10 @@ public class RemoteUserServiceImpl implements RemoteUserService {
return selectListByIds(new ArrayList<>(userIds));
}
@Override
public List<RemoteUserVo> selectUserByUserIds(List<Long> userIds) {
List<SysUserVo> sysUserVos = userService.selectUserByUserIds(userIds);
return MapstructUtils.convert(sysUserVos, RemoteUserVo.class);
}
}

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

@ -13,6 +13,7 @@ import org.dromara.system.domain.vo.SysDeptVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 部门管理 数据层
@ -69,4 +70,6 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
})
Page<SysDeptVo> selectPageDeptList(@Param("page") Page<SysDeptVo> page, @Param(Constants.WRAPPER) Wrapper<SysDept> queryWrapper);
List<Map<String,Object>> getNamePathList();
}

5
dk-modules/system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java

@ -47,10 +47,11 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
*
* @return 菜单列表
*/
default List<SysMenu> selectMenuTreeAll() {
default List<SysMenu> selectMenuTreeAll(String platformType) {
LambdaQueryWrapper<SysMenu> lqw = new LambdaQueryWrapper<SysMenu>()
.in(SysMenu::getMenuType, UserConstants.TYPE_DIR, UserConstants.TYPE_MENU)
.eq(SysMenu::getStatus, UserConstants.MENU_NORMAL)
.eq(SysMenu::getPlatformType, platformType)
.orderByAsc(SysMenu::getParentId)
.orderByAsc(SysMenu::getOrderNum);
return this.selectList(lqw);
@ -62,7 +63,7 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
* @param userId 用户ID
* @return 菜单列表
*/
List<SysMenu> selectMenuTreeByUserId(Long userId);
List<SysMenu> selectMenuTreeByUserId(Long userId,String platformType);
/**
* 根据角色ID查询菜单树信息

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

@ -1,6 +1,7 @@
package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
@ -74,6 +75,8 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
})
long countUserById(Long userId);
List<SysUserVo> selectUserByUserIds(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
@Override
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),

14
dk-modules/system/src/main/java/org/dromara/system/service/ISysDeptService.java

@ -5,6 +5,7 @@ import org.dromara.system.domain.bo.SysDeptBo;
import org.dromara.system.domain.vo.SysDeptVo;
import java.util.List;
import java.util.Map;
/**
* 部门管理 服务层
@ -138,4 +139,17 @@ public interface ISysDeptService {
* @return 部门列表
*/
List<SysDeptVo> selectDeptsSimple();
/**
* 查询每个部门的所属的部门全路径
* @return
*/
List<Map<String,Object>> getNamePathList();
/**
* 根据父级找子级
* @param deptId
* @return
*/
List<SysDeptVo> selectListByParentId(String deptId);
}

2
dk-modules/system/src/main/java/org/dromara/system/service/ISysMenuService.java

@ -55,7 +55,7 @@ public interface ISysMenuService {
* @param userId 用户ID
* @return 菜单列表
*/
List<SysMenu> selectMenuTreeByUserId(Long userId);
List<SysMenu> selectMenuTreeByUserId(Long userId,String platformType);
/**
* 根据角色ID查询菜单树信息

1
dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java

@ -268,4 +268,5 @@ public interface ISysUserService {
*/
List<Long> selectUserIdsByRoleIds(List<Long> roleIds);
List<SysUserVo> selectUserByUserIds(List<Long> userIds);
}

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

@ -1,5 +1,6 @@
package org.dromara.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.tree.Tree;
@ -19,6 +20,7 @@ import org.dromara.common.core.utils.TreeBuildUtils;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.domain.vo.RemoteDeptVo;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysUser;
@ -35,6 +37,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 部门管理 服务实现
@ -354,4 +357,17 @@ public class SysDeptServiceImpl implements ISysDeptService {
.eq(SysDept::getStatus, SystemConstants.NORMAL));
}
@Override
public List<Map<String,Object>> getNamePathList() {
return baseMapper.getNamePathList();
}
@Override
public List<SysDeptVo> selectListByParentId(String deptId) {
List<SysDept> resultList = baseMapper.selectListByParentId(Long.parseLong(deptId));
return BeanUtil.copyToList(resultList, SysDeptVo.class);
}
}

6
dk-modules/system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java

@ -130,12 +130,12 @@ public class SysMenuServiceImpl implements ISysMenuService {
* @return 菜单列表
*/
@Override
public List<SysMenu> selectMenuTreeByUserId(Long userId) {
public List<SysMenu> selectMenuTreeByUserId(Long userId,String platformType) {
List<SysMenu> menus;
if (LoginHelper.isSuperAdmin(userId)) {
menus = baseMapper.selectMenuTreeAll();
menus = baseMapper.selectMenuTreeAll(platformType);
} else {
menus = baseMapper.selectMenuTreeByUserId(userId);
menus = baseMapper.selectMenuTreeByUserId(userId,platformType);
}
return getChildPerms(menus, 0);
}

9
dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@ -185,7 +185,7 @@ public class SysUserServiceImpl implements ISysUserService {
@Override
public List<SysUserVo> selectUserByIds(List<Long> userIds, Long deptId) {
return baseMapper.selectUserList(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber) .eq(SysUser::getStatus, UserConstants.USER_NORMAL)
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber).eq(SysUser::getStatus, UserConstants.USER_NORMAL)
.eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId)
.in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
}
@ -559,6 +559,13 @@ public class SysUserServiceImpl implements ISysUserService {
return StreamUtils.toList(userRoles, SysUserRole::getUserId);
}
@Override
public List<SysUserVo> selectUserByUserIds(List<Long> userIds) {
return baseMapper.selectUserByUserIds(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber).eq(SysUser::getStatus, UserConstants.USER_NORMAL)
.in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
}
/**
* 通过用户ID查询用户账户
*

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

@ -44,4 +44,44 @@
from sys_dept ${ew.getCustomSqlSegment}
</select>
<select id="getNamePathList" resultType="java.util.Map">
WITH RECURSIVE DeptPath AS (
-- 基础查询:选择根部门(没有父部门的部门)
SELECT
sd.dept_id deptId,
sd.dept_name deptName,
CAST(sd.dept_name AS CHAR(500)) AS namePath,
sd.shp_no shpNo,
sd.tenant_id
FROM
sys_dept sd
WHERE
sd.parent_id = 0
UNION ALL
-- 递归查询:选择子部门并构建路径
SELECT
d.dept_id deptId,
d.dept_name deptName,
CONCAT(dp.namePath, '', d.dept_name) AS namePath,
d.shp_no shpNo,
d.tenant_id
FROM
sys_dept d
INNER JOIN
DeptPath dp ON d.parent_id = dp.deptId
)
SELECT
deptId,
namePath,
shpNo,
deptName,
tenant_id
FROM
DeptPath
ORDER BY
deptId
</select>
</mapper>

6
dk-modules/system/src/main/resources/mapper/system/SysMenuMapper.xml

@ -9,7 +9,7 @@
<select id="selectMenuListByUserId" resultMap="SysMenuResult">
select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query_param, m.visible, m.status,
m.perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
m.perms, m.is_frame, m.is_cache, m.platform_type,m.menu_type, m.icon, m.order_num, m.create_time
from sys_menu m
left join sys_role_menu rm on m.menu_id = rm.menu_id
left join sys_role r on rm.role_id = r.role_id
@ -23,6 +23,7 @@
m.path,
m.component,
m.query_param,
m.platform_type,
m.visible,
m.status,
m.perms,
@ -36,6 +37,9 @@
left join sys_role_menu rm on m.menu_id = rm.menu_id and m.status = '0'
left join sys_role r on rm.role_id = r.role_id and r.status = '0'
where m.menu_type in ('M', 'C')
<if test="platformType != null and platformType != ''">
and m.platform_type = #{platformType}
</if>
and r.role_id in (select role_id from sys_user_role where user_id = #{userId})
order by m.parent_id, m.order_num
</select>

13
dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml

@ -70,4 +70,17 @@
</select>
<select id="selectUserByUserIds" resultMap="SysUserResult">
select
<if test="ew.getSqlSelect != null">
${ew.getSqlSelect}
</if>
<if test="ew.getSqlSelect == null">
u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark
</if>
from sys_user u
${ew.getCustomSqlSegment}
</select>
</mapper>

11
dk-modules/workflow/pom.xml

@ -97,6 +97,17 @@
<groupId>org.dromara</groupId>
<artifactId>api-workflow</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-resource</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-business</artifactId>
</dependency>
</dependencies>
<build>

34
dk-modules/workflow/src/main/java/org/dromara/workflow/common/handler/FlwCommonHandler.java

@ -0,0 +1,34 @@
package org.dromara.workflow.common.handler;
import org.dromara.workflow.api.event.ProcessCreateTaskEvent;
import org.dromara.workflow.api.event.ProcessDeleteEvent;
import org.dromara.workflow.api.event.ProcessEvent;
public interface FlwCommonHandler {
/**
* 总体流程监听(例如: 草稿撤销退回作废终止已完成单任务完成等)
*
* @param processEvent 参数
*/
public void processHandler(ProcessEvent processEvent);
/**
* 执行任务创建监听
* 在方法中判断流程节点key
* if ("xxx".equals(processCreateTaskEvent.getNodeCode())) {
* //执行业务逻辑
* }
*
* @param processCreateTaskEvent 参数
*/
public void processCreateTaskHandler(ProcessCreateTaskEvent processCreateTaskEvent);
/**
* 监听删除流程事件
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
*
* @param processDeleteEvent 参数
*/
public void processDeleteHandler(ProcessDeleteEvent processDeleteEvent);
}

20
dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwCategoryController.java

@ -2,6 +2,8 @@ package org.dromara.workflow.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.tree.Tree;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
@ -27,6 +29,7 @@ import java.util.List;
*
* @author may
*/
@Tag(name = "流程分类")
@ConditionalOnEnable
@Validated
@RequiredArgsConstructor
@ -39,7 +42,7 @@ public class FlwCategoryController extends BaseController {
/**
* 查询流程分类列表
*/
@SaCheckPermission("workflow:category:list")
@Operation(summary = "查询流程分类列表",description ="查询流程分类列表")
@GetMapping("/list")
public R<List<FlowCategoryVo>> list(FlowCategoryBo bo) {
List<FlowCategoryVo> list = flwCategoryService.queryList(bo);
@ -49,8 +52,7 @@ public class FlwCategoryController extends BaseController {
/**
* 导出流程分类列表
*/
@SaCheckPermission("workflow:category:export")
@Log(title = "流程分类", businessType = BusinessType.EXPORT)
@Operation(summary = "导出流程分类列表",description ="导出流程分类列表")
@PostMapping("/export")
public void export(FlowCategoryBo bo, HttpServletResponse response) {
List<FlowCategoryVo> list = flwCategoryService.queryList(bo);
@ -62,7 +64,7 @@ public class FlwCategoryController extends BaseController {
*
* @param categoryId 主键
*/
@SaCheckPermission("workflow:category:query")
@Operation(summary = "获取流程分类详细信息",description ="获取流程分类详细信息")
@GetMapping("/{categoryId}")
public R<FlowCategoryVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long categoryId) {
flwCategoryService.checkCategoryDataScope(categoryId);
@ -72,8 +74,7 @@ public class FlwCategoryController extends BaseController {
/**
* 新增流程分类
*/
@SaCheckPermission("workflow:category:add")
@Log(title = "流程分类", businessType = BusinessType.INSERT)
@Operation(summary = "新增流程分类",description ="新增流程分类")
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody FlowCategoryBo category) {
@ -86,8 +87,7 @@ public class FlwCategoryController extends BaseController {
/**
* 修改流程分类
*/
@SaCheckPermission("workflow:category:edit")
@Log(title = "流程分类", businessType = BusinessType.UPDATE)
@Operation(summary = "修改流程分类",description ="修改流程分类")
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody FlowCategoryBo category) {
@ -106,8 +106,7 @@ public class FlwCategoryController extends BaseController {
*
* @param categoryId 主键
*/
@SaCheckPermission("workflow:category:remove")
@Log(title = "流程分类", businessType = BusinessType.DELETE)
@Operation(summary = "删除流程分类",description ="删除流程分类")
@DeleteMapping("/{categoryId}")
public R<Void> remove(@PathVariable Long categoryId) {
if (flwCategoryService.hasChildByCategoryId(categoryId)) {
@ -124,6 +123,7 @@ public class FlwCategoryController extends BaseController {
*
* @param categoryBo 流程分类
*/
@Operation(summary = "获取流程分类树列表",description ="获取流程分类树列表")
@GetMapping("/categoryTree")
public R<List<Tree<String>>> categoryTree(FlowCategoryBo categoryBo) {
return R.ok(flwCategoryService.selectCategoryTreeList(categoryBo));

24
dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java

@ -1,5 +1,7 @@
package org.dromara.workflow.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
@ -28,6 +30,7 @@ import java.util.List;
*
* @author may
*/
@Tag(name = "流程定义管理")
@ConditionalOnEnable
@Validated
@RequiredArgsConstructor
@ -44,6 +47,7 @@ public class FlwDefinitionController extends BaseController {
* @param flowDefinition 参数
* @param pageQuery 分页
*/
@Operation(summary = "查询流程定义列表",description = "查询流程定义列表")
@GetMapping("/list")
public TableDataInfo<FlowDefinitionVo> list(FlowDefinition flowDefinition, PageQuery pageQuery) {
return flwDefinitionService.queryList(flowDefinition, pageQuery);
@ -55,6 +59,7 @@ public class FlwDefinitionController extends BaseController {
* @param flowDefinition 参数
* @param pageQuery 分页
*/
@Operation(summary = "查询未发布的流程定义列表",description = "查询未发布的流程定义列表")
@GetMapping("/unPublishList")
public TableDataInfo<FlowDefinitionVo> unPublishList(FlowDefinition flowDefinition, PageQuery pageQuery) {
return flwDefinitionService.unPublishList(flowDefinition, pageQuery);
@ -65,6 +70,7 @@ public class FlwDefinitionController extends BaseController {
*
* @param id 流程定义id
*/
@Operation(summary = "获取流程定义详细信息",description = "获取流程定义详细信息")
@GetMapping(value = "/{id}")
public R<Definition> getInfo(@PathVariable Long id) {
return R.ok(defService.getById(id));
@ -75,7 +81,7 @@ public class FlwDefinitionController extends BaseController {
*
* @param flowDefinition 参数
*/
@Log(title = "流程定义", businessType = BusinessType.INSERT)
@Operation(summary = "新增流程定义",description = "新增流程定义")
@PostMapping
@RepeatSubmit()
@Transactional(rollbackFor = Exception.class)
@ -88,7 +94,7 @@ public class FlwDefinitionController extends BaseController {
*
* @param flowDefinition 参数
*/
@Log(title = "流程定义", businessType = BusinessType.UPDATE)
@Operation(summary = "修改流程定义",description = "修改流程定义")
@PutMapping
@RepeatSubmit()
@Transactional(rollbackFor = Exception.class)
@ -101,7 +107,7 @@ public class FlwDefinitionController extends BaseController {
*
* @param id 流程定义id
*/
@Log(title = "流程定义", businessType = BusinessType.INSERT)
@Operation(summary = "发布流程定义",description = "发布流程定义")
@PutMapping("/publish/{id}")
@RepeatSubmit()
public R<Boolean> publish(@PathVariable Long id) {
@ -113,7 +119,7 @@ public class FlwDefinitionController extends BaseController {
*
* @param id 流程定义id
*/
@Log(title = "流程定义", businessType = BusinessType.INSERT)
@Operation(summary = "取消发布流程定义",description = "取消发布流程定义")
@PutMapping("/unPublish/{id}")
@RepeatSubmit()
@Transactional(rollbackFor = Exception.class)
@ -124,7 +130,7 @@ public class FlwDefinitionController extends BaseController {
/**
* 删除流程定义
*/
@Log(title = "流程定义", businessType = BusinessType.DELETE)
@Operation(summary = "删除流程定义",description = "删除流程定义")
@DeleteMapping("/{ids}")
public R<Void> remove(@PathVariable List<Long> ids) {
return toAjax(flwDefinitionService.removeDef(ids));
@ -135,7 +141,7 @@ public class FlwDefinitionController extends BaseController {
*
* @param id 流程定义id
*/
@Log(title = "流程定义", businessType = BusinessType.INSERT)
@Operation(summary = "复制流程定义",description = "复制流程定义")
@PostMapping("/copy/{id}")
@RepeatSubmit()
@Transactional(rollbackFor = Exception.class)
@ -149,7 +155,7 @@ public class FlwDefinitionController extends BaseController {
* @param file 文件
* @param category 分类
*/
@Log(title = "流程定义", businessType = BusinessType.IMPORT)
@Operation(summary = "导入流程定义",description = "导入流程定义")
@PostMapping("/importDef")
public R<Boolean> importDef(MultipartFile file, String category) {
return R.ok(flwDefinitionService.importJson(file, category));
@ -162,7 +168,7 @@ public class FlwDefinitionController extends BaseController {
* @param response 响应
* @throws IOException 异常
*/
@Log(title = "流程定义", businessType = BusinessType.EXPORT)
@Operation(summary = "导出流程定义",description = "导出流程定义")
@PostMapping("/exportDef/{id}")
public void exportDef(@PathVariable Long id, HttpServletResponse response) throws IOException {
flwDefinitionService.exportDef(id, response);
@ -173,6 +179,7 @@ public class FlwDefinitionController extends BaseController {
*
* @param id 流程定义id
*/
@Operation(summary = "获取流程定义JSON字符串",description = "获取流程定义JSON字符串")
@GetMapping("/xmlString/{id}")
public R<String> xmlString(@PathVariable Long id) {
return R.ok("操作成功", defService.exportJson(id));
@ -184,6 +191,7 @@ public class FlwDefinitionController extends BaseController {
* @param id 流程定义id
* @param active 激活/挂起
*/
@Operation(summary = "激活/挂起流程定义",description = "激活/挂起流程定义")
@RepeatSubmit()
@PutMapping("/active/{id}")
@Transactional(rollbackFor = Exception.class)

15
dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwInstanceController.java

@ -1,5 +1,7 @@
package org.dromara.workflow.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -26,6 +28,7 @@ import java.util.Map;
*
* @author may
*/
@Tag(name = "流程实例管理")
@ConditionalOnEnable
@Validated
@RequiredArgsConstructor
@ -42,6 +45,7 @@ public class FlwInstanceController extends BaseController {
* @param flowInstanceBo 流程实例
* @param pageQuery 分页
*/
@Operation(summary = "查询正在运行的流程实例列表",description = "查询正在运行的流程实例列表")
@GetMapping("/pageByRunning")
public TableDataInfo<FlowInstanceVo> selectRunningInstanceList(FlowInstanceBo flowInstanceBo, PageQuery pageQuery) {
return flwInstanceService.selectRunningInstanceList(flowInstanceBo, pageQuery);
@ -53,6 +57,7 @@ public class FlwInstanceController extends BaseController {
* @param flowInstanceBo 流程实例
* @param pageQuery 分页
*/
@Operation(summary = "查询已结束的流程实例列表",description = "查询已结束的流程实例列表")
@GetMapping("/pageByFinish")
public TableDataInfo<FlowInstanceVo> selectFinishInstanceList(FlowInstanceBo flowInstanceBo, PageQuery pageQuery) {
return flwInstanceService.selectFinishInstanceList(flowInstanceBo, pageQuery);
@ -63,6 +68,7 @@ public class FlwInstanceController extends BaseController {
*
* @param businessId 业务id
*/
@Operation(summary = "根据业务id查询流程实例详细信息",description = "根据业务id查询流程实例详细信息")
@GetMapping("/getInfo/{businessId}")
public R<FlowInstanceVo> getInfo(@PathVariable Long businessId) {
return R.ok(flwInstanceService.queryByBusinessId(businessId));
@ -73,6 +79,7 @@ public class FlwInstanceController extends BaseController {
*
* @param businessIds 业务id
*/
@Operation(summary = "按照业务id删除流程实例",description = "按照业务id删除流程实例")
@DeleteMapping("/deleteByBusinessIds/{businessIds}")
public R<Void> deleteByBusinessIds(@PathVariable List<Long> businessIds) {
return toAjax(flwInstanceService.deleteByBusinessIds(businessIds));
@ -83,6 +90,7 @@ public class FlwInstanceController extends BaseController {
*
* @param instanceIds 实例id
*/
@Operation(summary = "按照实例id删除流程实例",description = "按照实例id删除流程实例")
@DeleteMapping("/deleteByInstanceIds/{instanceIds}")
public R<Void> deleteByInstanceIds(@PathVariable List<Long> instanceIds) {
return toAjax(flwInstanceService.deleteByInstanceIds(instanceIds));
@ -93,6 +101,7 @@ public class FlwInstanceController extends BaseController {
*
* @param bo 参数
*/
@Operation(summary = "撤销流程",description = "撤销流程")
@RepeatSubmit()
@PutMapping("/cancelProcessApply")
public R<Void> cancelProcessApply(@RequestBody FlowCancelBo bo) {
@ -105,6 +114,7 @@ public class FlwInstanceController extends BaseController {
* @param id 流程实例id
* @param active 激活/挂起
*/
@Operation(summary = "激活/挂起流程实例",description = "激活/挂起流程实例")
@RepeatSubmit()
@PutMapping("/active/{id}")
public R<Boolean> active(@PathVariable Long id, @RequestParam boolean active) {
@ -117,6 +127,7 @@ public class FlwInstanceController extends BaseController {
* @param flowInstanceBo 参数
* @param pageQuery 分页
*/
@Operation(summary = "获取当前登陆人发起的流程实例",description = "获取当前登陆人发起的流程实例")
@GetMapping("/pageByCurrent")
public TableDataInfo<FlowInstanceVo> selectCurrentInstanceList(FlowInstanceBo flowInstanceBo, PageQuery pageQuery) {
return flwInstanceService.selectCurrentInstanceList(flowInstanceBo, pageQuery);
@ -127,6 +138,7 @@ public class FlwInstanceController extends BaseController {
*
* @param businessId 业务id
*/
@Operation(summary = "获取流程图,流程记录",description = "获取流程图,流程记录")
@GetMapping("/flowImage/{businessId}")
public R<Map<String, Object>> flowImage(@PathVariable String businessId) {
return R.ok(flwInstanceService.flowImage(businessId));
@ -137,6 +149,7 @@ public class FlwInstanceController extends BaseController {
*
* @param instanceId 流程实例id
*/
@Operation(summary = "获取流程变量",description = "获取流程变量")
@GetMapping("/instanceVariable/{instanceId}")
public R<Map<String, Object>> instanceVariable(@PathVariable Long instanceId) {
return R.ok(flwInstanceService.instanceVariable(instanceId));
@ -147,7 +160,7 @@ public class FlwInstanceController extends BaseController {
*
* @param bo 参数
*/
@Log(title = "流程实例管理", businessType = BusinessType.INSERT)
@Operation(summary = "作废流程",description = "作废流程")
@RepeatSubmit()
@PostMapping("/invalid")
public R<Boolean> invalid(@Validated @RequestBody FlowInvalidBo bo) {

27
dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java

@ -1,5 +1,8 @@
package org.dromara.workflow.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
@ -27,6 +30,7 @@ import java.util.List;
*
* @author may
*/
@Tag(name = "任务管理")
@ConditionalOnEnable
@Validated
@RequiredArgsConstructor
@ -41,7 +45,7 @@ public class FlwTaskController extends BaseController {
*
* @param startProcessBo 启动流程参数
*/
@Log(title = "任务管理", businessType = BusinessType.INSERT)
@Operation(summary = "启动任务",description = "启动任务")
@RepeatSubmit()
@PostMapping("/startWorkFlow")
public R<RemoteStartProcessReturn> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) {
@ -54,7 +58,7 @@ public class FlwTaskController extends BaseController {
*
* @param completeTaskBo 办理任务参数
*/
@Log(title = "任务管理", businessType = BusinessType.INSERT)
@Operation(summary = "办理任务",description = "办理任务")
@RepeatSubmit()
@PostMapping("/completeTask")
public R<Void> completeTask(@Validated(AddGroup.class) @RequestBody CompleteTaskBo completeTaskBo) {
@ -67,6 +71,7 @@ public class FlwTaskController extends BaseController {
* @param flowTaskBo 参数
* @param pageQuery 分页
*/
@Operation(summary = "查询当前用户的待办任务",description = "查询当前用户的待办任务")
@GetMapping("/pageByTaskWait")
public TableDataInfo<FlowTaskVo> pageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
return flwTaskService.pageByTaskWait(flowTaskBo, pageQuery);
@ -78,7 +83,7 @@ public class FlwTaskController extends BaseController {
* @param flowTaskBo 参数
* @param pageQuery 分页
*/
@Operation(summary = "查询当前用户的已办任务",description = "查询当前用户的已办任务")
@GetMapping("/pageByTaskFinish")
public TableDataInfo<FlowHisTaskVo> pageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
return flwTaskService.pageByTaskFinish(flowTaskBo, pageQuery);
@ -90,6 +95,7 @@ public class FlwTaskController extends BaseController {
* @param flowTaskBo 参数
* @param pageQuery 分页
*/
@Operation(summary = "查询待办任务",description = "查询待办任务")
@GetMapping("/pageByAllTaskWait")
public TableDataInfo<FlowTaskVo> pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
return flwTaskService.pageByAllTaskWait(flowTaskBo, pageQuery);
@ -101,6 +107,7 @@ public class FlwTaskController extends BaseController {
* @param flowTaskBo 参数
* @param pageQuery 分页
*/
@Operation(summary = "查询已办任务",description = "查询已办任务")
@GetMapping("/pageByAllTaskFinish")
public TableDataInfo<FlowHisTaskVo> pageByAllTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
return flwTaskService.pageByAllTaskFinish(flowTaskBo, pageQuery);
@ -112,6 +119,7 @@ public class FlwTaskController extends BaseController {
* @param flowTaskBo 参数
* @param pageQuery 分页
*/
@Operation(summary = "查询当前用户的抄送",description = "查询当前用户的抄送")
@GetMapping("/pageByTaskCopy")
public TableDataInfo<FlowTaskVo> pageByTaskCopy(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
return flwTaskService.pageByTaskCopy(flowTaskBo, pageQuery);
@ -122,6 +130,7 @@ public class FlwTaskController extends BaseController {
*
* @param taskId 任务id
*/
@Operation(summary = "根据taskId查询任务",description = "根据taskId查询任务")
@GetMapping("/getTask/{taskId}")
public R<FlowTaskVo> getTask(@PathVariable Long taskId) {
return R.ok(flwTaskService.selectById(taskId));
@ -132,7 +141,7 @@ public class FlwTaskController extends BaseController {
*
* @param bo 参数
*/
@Log(title = "任务管理", businessType = BusinessType.INSERT)
@Operation(summary = "终止任务",description = "终止任务")
@RepeatSubmit()
@PostMapping("/terminationTask")
public R<Boolean> terminationTask(@RequestBody FlowTerminationBo bo) {
@ -145,7 +154,9 @@ public class FlwTaskController extends BaseController {
* @param bo 参数
* @param taskOperation 操作类型委派 delegateTask转办 transferTask加签 addSignature减签 reductionSignature
*/
@Log(title = "任务管理", businessType = BusinessType.UPDATE)
@Operation(summary = "任务操作",description = "任务操作",parameters = {
@Parameter(name = "taskOperation", description = "操作类型,委派 delegateTask、转办 transferTask、加签 addSignature、减签 reductionSignature")
})
@RepeatSubmit
@PostMapping("/taskOperation/{taskOperation}")
public R<Void> taskOperation(@Validated @RequestBody TaskOperationBo bo, @PathVariable String taskOperation) {
@ -158,7 +169,7 @@ public class FlwTaskController extends BaseController {
* @param taskIdList 任务id
* @param userId 办理人id
*/
@Log(title = "任务管理", businessType = BusinessType.UPDATE)
@Operation(summary = "修改任务办理人",description = "修改任务办理人")
@RepeatSubmit()
@PutMapping("/updateAssignee/{userId}")
public R<Void> updateAssignee(@RequestBody List<Long> taskIdList, @PathVariable String userId) {
@ -170,7 +181,7 @@ public class FlwTaskController extends BaseController {
*
* @param bo 参数
*/
@Log(title = "任务管理", businessType = BusinessType.INSERT)
@Operation(summary = "驳回审批",description = "驳回审批")
@RepeatSubmit()
@PostMapping("/backProcess")
public R<Void> backProcess(@Validated({AddGroup.class}) @RequestBody BackProcessBo bo) {
@ -183,6 +194,7 @@ public class FlwTaskController extends BaseController {
* @param definitionId 流程定义id
* @param nowNodeCode 当前节点
*/
@Operation(summary = "获取可驳回的前置节点",description = "获取可驳回的前置节点")
@GetMapping("/getBackTaskNode/{definitionId}/{nowNodeCode}")
public R<List<Node>> getBackTaskNode(@PathVariable Long definitionId, @PathVariable String nowNodeCode) {
return R.ok(flwTaskService.getBackTaskNode(definitionId, nowNodeCode));
@ -193,6 +205,7 @@ public class FlwTaskController extends BaseController {
*
* @param taskId 任务id
*/
@Operation(summary = "获取当前任务的所有办理人",description = "获取当前任务的所有办理人")
@GetMapping("/currentTaskAllUser/{taskId}")
public R<List<RemoteUserVo>> currentTaskAllUser(@PathVariable Long taskId) {
return R.ok(flwTaskService.currentTaskAllUser(taskId));

5
dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/FlowTaskBo.java

@ -52,4 +52,9 @@ public class FlowTaskBo implements Serializable {
*/
private List<Long> createByIds;
/**
* 业务Id
*/
private String businessId;
}

4
dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java

@ -23,13 +23,13 @@ public class StartProcessBo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 业务唯一值id
* 业务唯一值id,根据具体业务来例如预警可以为预警Id
*/
@NotBlank(message = "业务ID不能为空", groups = {AddGroup.class})
private String businessId;
/**
* 流程定义编码
* 流程定义编码,不同的审批流程例如预警可以为alert
*/
@NotBlank(message = "流程定义编码不能为空", groups = {AddGroup.class})
private String flowCode;

18
dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java

@ -2,10 +2,12 @@ package org.dromara.workflow.dubbo;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.service.WorkflowService;
import org.springframework.stereotype.Service;
@ -25,6 +27,8 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService {
private final WorkflowService workflowService;
private final IFlwTaskService flwTaskService;
@Override
public boolean deleteInstance(List<Long> businessIds) {
return workflowService.deleteInstance(businessIds);
@ -66,8 +70,18 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService {
}
@Override
public boolean completeTask(RemoteCompleteTask completeTask) {
return workflowService.completeTask(completeTask);
public Map<Long, List<RemoteUserVo>> currentTaskAllUser(List<Long> taskIds) {
return flwTaskService.currentTaskAllUser(taskIds);
}
@Override
public List<String> getPermissions() {
return flwTaskService.getPermissions();
}
// @Override
// public boolean completeTask(RemoteCompleteTask completeTask) {
// return workflowService.completeTask(completeTask);
// }
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save