From c09b01ea7b173823fb704431454d421becefd1a8 Mon Sep 17 00:00:00 2001 From: yangwei <867012372@qq.com> Date: Wed, 12 Mar 2025 18:03:31 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=201=E3=80=81=E8=81=94=E8=B0=83=E9=A2=84?= =?UTF-8?q?=E8=AD=A6=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=202=E3=80=81?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E6=B5=81=E7=A8=8B=E9=83=A8=E9=97=A8=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E8=AE=BE=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/domain/vo/RemoteAiLabelPostVo.java | 2 +- .../workflow/api/RemoteWorkflowService.java | 10 ++ .../workflow/api/domain/RemoteFlowNode.java | 12 ++ ...oller.java => BusinessHookController.java} | 32 ++++- .../business/domain/BusinessAlert.java | 29 +++- .../business/domain/bo/BusinessAlertBo.java | 20 ++- .../business/domain/bo/BusinessHookBo.java | 57 ++++++++ .../business/domain/vo/BusinessAlertVo.java | 16 ++- .../business/mapper/BusinessAlertMapper.java | 16 +-- .../impl/BusinessAlertServiceImpl.java | 42 +++++- .../mapper/business/BusinessAlertMapper.xml | 14 +- .../controller/FlwDefinitionController.java | 1 - .../controller/FlwDepartController.java | 46 +++++++ .../controller/FlwTaskController.java | 30 ++--- .../dromara/workflow/domain/FlowDepart.java | 48 +++++++ .../workflow/domain/bo/BackProcessBo.java | 11 ++ .../workflow/domain/bo/CompleteTaskBo.java | 15 +++ .../workflow/domain/bo/TaskOperationBo.java | 15 +++ .../dubbo/RemoteWorkflowServiceImpl.java | 5 + .../workflow/handler/ListTypeHandler.java | 51 +++++++ .../workflow/mapper/FlwDepartMapper.java | 7 + .../workflow/mapper/FlwTaskMapper.java | 3 + .../workflow/service/FlwDepartService.java | 9 ++ .../workflow/service/IFlwTaskService.java | 2 + .../workflow/service/WorkflowService.java | 3 + .../service/impl/FlwDepartServiceImpl.java | 37 +++++ .../service/impl/FlwTaskServiceImpl.java | 21 ++- .../service/impl/WorkflowServiceImpl.java | 6 + .../org/dromara/workflow/utils/JsonUtil.java | 126 ++++++++++++++++++ .../mapper/workflow/FlwDepartMapper.xml | 8 ++ pom.xml | 4 +- 31 files changed, 633 insertions(+), 65 deletions(-) create mode 100644 dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteFlowNode.java rename dk-modules/business/src/main/java/org/dromara/business/controller/{WebhookController.java => BusinessHookController.java} (50%) create mode 100644 dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessHookBo.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/utils/JsonUtil.java create mode 100644 dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteAiLabelPostVo.java b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteAiLabelPostVo.java index 9296275..e466b18 100644 --- a/dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteAiLabelPostVo.java +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteAiLabelPostVo.java @@ -4,7 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; -import org.dromara.system.domain.AiLabel; +//import org.dromara.system.domain.AiLabel; import java.io.Serial; import java.io.Serializable; diff --git a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java index 50a5924..955611b 100644 --- a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java +++ b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java @@ -5,6 +5,7 @@ import org.dromara.workflow.api.domain.RemoteCompleteTask; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcessReturn; +import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -108,4 +109,13 @@ public interface RemoteWorkflowService { * @return 结果 */ boolean processInvalid(Long instanceId); + + /** + * 获取当前任务的所有办理人 + * + * @param taskId 任务id + * @return 结果 + */ + List currentTaskAllUser(Long taskId); + } diff --git a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteFlowNode.java b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteFlowNode.java new file mode 100644 index 0000000..eaed983 --- /dev/null +++ b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/RemoteFlowNode.java @@ -0,0 +1,12 @@ +package org.dromara.workflow.api.domain; + +import lombok.Data; + +@Data +public class RemoteFlowNode { + + private Long definitionId; + + private String permission_flag; + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/WebhookController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessHookController.java similarity index 50% rename from dk-modules/business/src/main/java/org/dromara/business/controller/WebhookController.java rename to dk-modules/business/src/main/java/org/dromara/business/controller/BusinessHookController.java index e54b6b4..658fe6a 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/WebhookController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessHookController.java @@ -4,7 +4,7 @@ package org.dromara.business.controller; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.web.core.BaseController; +import org.dromara.business.domain.bo.BusinessHookBo; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -20,15 +20,15 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/index/hook") @Tag(name = "ZLMediaKit视频流事件回调") @Slf4j -public class WebhookController { +public class BusinessHookController { /** * 处理播放事件 */ @PostMapping("/on_play") - public String onPlay(@RequestBody String body) { - log.info("on_play event: {}", body); + public String onPlay(@RequestBody BusinessHookBo hookPlayBo) { + log.info("on_play event: {}", hookPlayBo); return "{\"code\": 0}"; } @@ -37,8 +37,28 @@ public class WebhookController { * 处理录制 MP4 文件事件 */ @PostMapping("/on_record_mp4") - public String onRecordMp4(@RequestBody String body) { - log.info("on_record_mp4 event: {}", body); + public String onRecordMp4(@RequestBody BusinessHookBo businessRecordBo) { + log.info("on_record_mp4 event: {}", businessRecordBo); + + return "{\"code\": 0}"; + } + + /** + * rtsp/rtmp/rtp 推流事件 + */ + @PostMapping("/on_publish") + public String onPublish(@RequestBody BusinessHookBo hookPublishBo) { + log.info("on_publish event: {}", hookPublishBo); + + return "{\"code\": 0}"; + } + + /** + * rtsp/rtmp 流注册或注销时触发此事件 + */ + @PostMapping("/on_stream_changed") + public String onStreamChanged(@RequestBody String body) { + log.info("on_stream_changed event: {}", body); return "{\"code\": 0}"; } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java index 80ac27e..43e1502 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java @@ -20,7 +20,7 @@ import java.util.List; */ @Data @EqualsAndHashCode(callSuper = true) -@TableName("business_alert") +@TableName(value = "business_alert",autoResultMap = true) public class BusinessAlert extends BaseEntity { @Serial @@ -63,11 +63,7 @@ public class BusinessAlert extends BaseEntity { */ private String images; - /** - * 识别类型 - */ - @TableField(value = "identify_type",typeHandler = JacksonTypeHandler.class) - private List identifyType; + /** * 纬度 @@ -79,6 +75,18 @@ public class BusinessAlert extends BaseEntity { */ private Long lng; + /** + * 标签名-英 + */ + + private String labelEn; + + /** + * 标签名-中 + */ + private String labelCn; + + /** * 预警类型 */ @@ -229,4 +237,13 @@ public class BusinessAlert extends BaseEntity { @TableField(exist = false) private Long flowTaskId; + @TableField(exist = false) + private Long instanceId; + + @TableField(exist = false) + private Boolean button; + + @TableField(exist = false) + private String permissions; + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java index b69c43b..fa1d2d5 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java @@ -1,5 +1,6 @@ package org.dromara.business.domain.bo; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import org.dromara.business.domain.BusinessAlert; import org.dromara.common.mybatis.core.domain.BaseEntity; @@ -46,10 +47,6 @@ public class BusinessAlertBo { */ private String images; - /** - * 识别类型 - */ - private List identifyType; /** * 纬度 @@ -194,9 +191,15 @@ public class BusinessAlertBo { List deptIdList; /** - * 识别类型集合 + * 标签名-英 */ - List alertTypeList; + private String labelEn; + + /** + * 标签名-中 + */ + private String labelCn; + /** * 年 @@ -216,5 +219,10 @@ public class BusinessAlertBo { private String createTime; + /** + * 岗位编码 + */ + private String postCode; + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessHookBo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessHookBo.java new file mode 100644 index 0000000..02e6f42 --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessHookBo.java @@ -0,0 +1,57 @@ +package org.dromara.business.domain.bo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(name = "流回调对象") +public class BusinessHookBo { + + @Schema(name = "流应用名") + private String app; + + @Schema(name = "TCP链接唯一ID") + private String id; + + @Schema(name = "播放器ip/推流器ip") + private String ip; + + @Schema(name = "播放url参数/推流url参数") + private String params; + + @Schema(name = "播放器端口号/推流器端口号") + private String port; + + @Schema(name = "播放的协议,可能是rtsp、rtmp、http") + private String schema; + + @Schema(name = "流ID") + private String stream; + + @Schema(name = "流虚拟主机") + private String vhost; + + @Schema(name = "服务器 id,通过配置文件设置") + private String mediaServerId; + + @Schema(name = "文件名") + private String file_name; + + @Schema(name = "文件绝对路径") + private String file_path; + + @Schema(name = "文件大小,单位字节") + private String file_size; + + @Schema(name = "文件所在目录路径") + private String folder; + + @Schema(name = "开始录制时间戳") + private Integer start_time; + + @Schema(name = "录制时长,单位秒") + private Float time_len; + + @Schema(name = "http/rtsp/rtmp点播相对url路径") + private String url; +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java index e228dd1..04ed32d 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java @@ -58,10 +58,6 @@ public class BusinessAlertVo implements Serializable { private String images; - /** - * 识别类型 - */ - private List identifyType; /** * 纬度 @@ -75,6 +71,18 @@ public class BusinessAlertVo implements Serializable { @ExcelProperty(value = "精度") private Long lng; + /** + * 标签名-英 + */ + private String labelEn; + + /** + * 标签名-中 + */ + @ExcelProperty(value = "标签名-中") + private String labelCn; + + /** * 预警类型 */ diff --git a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java index 2fcee06..d242c68 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java +++ b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java @@ -23,24 +23,16 @@ import java.util.Map; */ public interface BusinessAlertMapper extends BaseMapperPlus { - @DataPermission( - @DataColumn(key = "deptName", value = "ba.dept_id") - ) + Page pageBusinessAlert(Page page, QueryWrapper ew); - @DataPermission( - @DataColumn(key = "deptName", value = "ba.dept_id") - ) + Page pageAlertFinish(Page page, QueryWrapper ew); - @DataPermission( - @DataColumn(key = "deptName", value = "ba.dept_id") - ) + Page pageAlertTodo(Page page, QueryWrapper ew); - @DataPermission( - @DataColumn(key = "deptName", value = "ba.dept_id") - ) + Page pageBusinessAlertCancel(Page build, QueryWrapper ew); @DataPermission( diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index aeca005..31a12a1 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -18,6 +18,8 @@ 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.RemoteLablePostService; +import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo; import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.system.api.model.PostDTO; import org.dromara.workflow.api.RemoteWorkflowService; @@ -28,6 +30,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 预警任务Service业务层处理 @@ -44,6 +47,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { @DubboReference RemoteWorkflowService remoteWorkflowService; + @DubboReference + RemoteLablePostService remoteLablePostService; + /** * 新增预警任务 * @@ -128,6 +134,10 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { public TableDataInfo pageBusinessAlertAll(BusinessAlertBo bo, PageQuery pageQuery) { QueryWrapper wrapper = buildQueryWrapper(bo); +// if (ObjectUtil.isEmpty(wrapper)){ +// return new TableDataInfo<>(); +// } + Page page = this.baseMapper.pageBusinessAlert(pageQuery.build(), wrapper); return TableDataInfo.build(page); @@ -144,6 +154,12 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { bo.setHandleType(BusinessStatusEnum.INVALID.getStatus()); QueryWrapper wrapper = buildQueryWrapper(bo); +// if (ObjectUtil.isEmpty(wrapper)){ +// return new TableDataInfo<>(); +// } + + wrapper.in("b.flow_status", BusinessStatusEnum.INVALID.getStatus()); + Page page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper); return TableDataInfo.build(page); @@ -159,9 +175,15 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { @Override public TableDataInfo pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery) { QueryWrapper wrapper = buildQueryWrapper(bo); + +// if (ObjectUtil.isEmpty(wrapper)){ +// return new TableDataInfo<>(); +// } + buildCommonQueryWrapper(wrapper); wrapper.in("a.approver", LoginHelper.getUserId()); + wrapper.in("b.flow_status", BusinessStatusEnum.FINISH.getStatus()); Page page = this.baseMapper.pageAlertFinish(pageQuery.build(), wrapper); return TableDataInfo.build(page); @@ -177,15 +199,21 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { @Override public TableDataInfo pageBusinessAlertTodo(BusinessAlertBo bo, PageQuery pageQuery) { QueryWrapper wrapper = buildQueryWrapper(bo); + +// if (ObjectUtil.isEmpty(wrapper)){ +// return new TableDataInfo<>(); +// } + buildCommonQueryWrapper(wrapper); wrapper.eq("uu.del_flag", 0); wrapper.in("uu.type", 1,2,3); wrapper.in("uu.processed_by", remoteWorkflowService.getPermissions()); - wrapper.in("b.flow_status", BusinessStatusEnum.WAITING.getStatus()); + wrapper.eq("b.flow_status", BusinessStatusEnum.WAITING.getStatus()); Page page = this.baseMapper.pageAlertTodo(pageQuery.build(), wrapper); + List records = page.getRecords(); if (CollUtil.isNotEmpty(records)) { List taskIds = StreamUtils.toList(records, BusinessAlert::getFlowTaskId); @@ -211,14 +239,18 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { QueryWrapper wrapper = new QueryWrapper<>(); //根据当前用户职能获取识别类型 -// List posts = LoginHelper.getLoginUser().getPosts(); +// List postVoList = remoteLablePostService.selectLableByList(bo.getPostCode(), LoginHelper.getDeptId()); + +// if (ObjectUtil.isEmpty(postVoList)) { +// return null; +// } +// +// +// wrapper.in("ba.label_en",StreamUtils.toList(postVoList, RemoteAiLabelPostVo::getLabelEn)); //排除状态为验证状态预警 wrapper.ne("ba.handle_type", BusinessStatusEnum.VERIFY.getStatus()); - if (ObjectUtil.isNotEmpty(bo.getAlertTypeList())){ - wrapper.in("ba.alert_type", bo.getAlertTypeList()); - } if (ObjectUtil.isNotEmpty(bo.getHandleType())){ wrapper.eq("ba.handle_type", bo.getHandleType()); diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml index aca5e87..27b62d8 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml @@ -21,7 +21,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select ba.*, b.flow_status flowStatus, - b.business_id businessId + b.business_id businessId, + b.id instanceId from dk_business.business_alert ba left join dk_workflow.flow_instance b on ba.id = b.business_id ${ew.getCustomSqlSegment} @@ -31,7 +32,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select ba.*, b.flow_status flowStatus, - b.business_id businessId + b.business_id businessId, + b.id instanceId from dk_business.business_alert ba left join dk_workflow.flow_instance b on ba.id = b.business_id ${ew.getCustomSqlSegment} @@ -43,7 +45,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" b.flow_status flowStatus, b.business_id businessId, a.approver, - a.id flowTaskId + a.id flowTaskId, + b.id instanceId 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 @@ -58,12 +61,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" b.flow_status, b.business_id, uu.processed_by approver, - a.id flowTaskId + a.id flowTaskId, + b.id instanceId, + fn.permissions 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 + left join dk_workflow.flow_node fn on fn.node_code = b.node_code ${ew.getCustomSqlSegment} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java index 3db2857..c14c474 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java @@ -198,5 +198,4 @@ public class FlwDefinitionController extends BaseController { public R active(@PathVariable Long id, @RequestParam boolean active) { return R.ok(active ? defService.active(id) : defService.unActive(id)); } - } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java new file mode 100644 index 0000000..848ce37 --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java @@ -0,0 +1,46 @@ +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.core.validate.AddGroup; +import org.dromara.workflow.common.ConditionalOnEnable; +import org.dromara.workflow.domain.FlowDepart; +import org.dromara.workflow.service.FlwDepartService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "流程部门管理") +@ConditionalOnEnable +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/depart") +public class FlwDepartController { + + + private final FlwDepartService flwDepartService; + + /** + * 查询流程部门关系 + * flowCode + */ + @Operation(summary = "查询流程部门关系",description = "查询流程部门关系") + @GetMapping("/{flowCode}/getInfo") + public R getInfo(@PathVariable String flowCode) { + return R.ok(flwDepartService.getInfo(flowCode)); + } + + + /** + * 绑定流程部门关系 + * flowCode + */ + @Operation(summary = "绑定流程部门关系",description = "绑定流程部门关系") + @PostMapping("/bind/depart") + public R bindDepart(@Validated({AddGroup.class}) @RequestBody FlowDepart flowDepart) { + return R.ok(flwDepartService.bindDepart(flowDepart)); + } +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java index 2618ade..33aaf67 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java @@ -65,6 +65,21 @@ public class FlwTaskController extends BaseController { return toAjax(flwTaskService.completeTask(completeTaskBo)); } + /** + * 任务操作 + * + * @param bo 参数 + * @param taskOperation 操作类型,委派 delegateTask、转办 transferTask、加签 addSignature、减签 reductionSignature + */ + @Operation(summary = "任务操作",description = "任务操作",parameters = { + @Parameter(name = "taskOperation", description = "操作类型,委派 delegateTask、转办 transferTask、加签 addSignature、减签 reductionSignature") + }) + @RepeatSubmit + @PostMapping("/taskOperation/{taskOperation}") + public R taskOperation(@Validated @RequestBody TaskOperationBo bo, @PathVariable String taskOperation) { + return toAjax(flwTaskService.taskOperation(bo, taskOperation)); + } + /** * 查询当前用户的待办任务 * @@ -148,21 +163,6 @@ public class FlwTaskController extends BaseController { return R.ok(flwTaskService.terminationTask(bo)); } - /** - * 任务操作 - * - * @param bo 参数 - * @param taskOperation 操作类型,委派 delegateTask、转办 transferTask、加签 addSignature、减签 reductionSignature - */ - @Operation(summary = "任务操作",description = "任务操作",parameters = { - @Parameter(name = "taskOperation", description = "操作类型,委派 delegateTask、转办 transferTask、加签 addSignature、减签 reductionSignature") - }) - @RepeatSubmit - @PostMapping("/taskOperation/{taskOperation}") - public R taskOperation(@Validated @RequestBody TaskOperationBo bo, @PathVariable String taskOperation) { - return toAjax(flwTaskService.taskOperation(bo, taskOperation)); - } - /** * 修改任务办理人 * diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java new file mode 100644 index 0000000..a2e3fb1 --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java @@ -0,0 +1,48 @@ +package org.dromara.workflow.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 jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.workflow.handler.ListTypeHandler; + +import java.util.List; + +/** + * 部门流程关系表 + */ +@Data +@TableName(value = "flow_depart",autoResultMap = true) +public class FlowDepart { + + + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** + * 流程类型 + */ + @NotNull(message = "流程类型不能为空", groups = AddGroup.class) + private String flowType; + + /** + * 流程编码 + */ + @NotNull(message = "流程编码不能为空", groups = AddGroup.class) + private String flowCode; + + /** + * 租户编号 + */ + private String tenantId; + + /** + * 部门id集合 + */ + @NotNull(message = "部门id不能为空", groups = AddGroup.class) + @TableField(value = "dept_ids",typeHandler = ListTypeHandler.class) + List departIds; +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java index 3117a33..4c6a8ff 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java @@ -56,11 +56,22 @@ public class BackProcessBo implements Serializable { */ private String notice; + /** * 流程变量 */ private Map variables; + /** + * 预警类型 + */ + private String alertType; + + /** + * 是否违建 + */ + private Boolean isIllegal; + public Map getVariables() { if (variables == null) { return new HashMap<>(16); diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java index 9fdf484..53cbf24 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java @@ -64,6 +64,21 @@ public class CompleteTaskBo implements Serializable { */ private String ext; + /** + * 预警类型 + */ + private String alertType; + + /** + * 是否违建 + */ + private Boolean isIllegal; + + /** + * 选择其他的时候内容 + */ + private String alertTypeContent; + public Map getVariables() { if (variables == null) { return new HashMap<>(16); diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/TaskOperationBo.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/TaskOperationBo.java index 4348e31..936ded1 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/TaskOperationBo.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/TaskOperationBo.java @@ -45,4 +45,19 @@ public class TaskOperationBo implements Serializable { */ private String message; + /** + * 预警类型 + */ + private String alertType; + + /** + * 是否违建 + */ + private Boolean isIllegal; + + /** + * 选择其他的时候内容 + */ + private String alertTypeContent; + } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java index f9def49..137d1ab 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java @@ -84,6 +84,11 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService { return workflowService.processInvalid(instanceId); } + @Override + public List currentTaskAllUser(Long taskId) { + return workflowService.currentTaskAllUser(taskId); + } + @Override public boolean completeTask(RemoteCompleteTask completeTask) { return workflowService.completeTask(completeTask); diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java new file mode 100644 index 0000000..f63591d --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java @@ -0,0 +1,51 @@ +package org.dromara.workflow.handler; + +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.apache.ibatis.type.TypeHandler; +import org.dromara.workflow.utils.JsonUtil; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +@MappedJdbcTypes(JdbcType.VARCHAR) +@MappedTypes({List.class}) +public class ListTypeHandler implements TypeHandler> { + + @Override + public void setParameter(PreparedStatement ps, int i, List list, JdbcType jdbcType) throws SQLException { + ps.setString(i, JsonUtil.toJson(list)); + } + + @Override + public List getResult(ResultSet rs, String columnName) throws SQLException { + if (StringUtils.isBlank(rs.getString(columnName))) { + return new ArrayList<>(); + } + return JsonUtil.jsonToList(rs.getString(columnName), Long.class); + } + + @Override + public List getResult(ResultSet rs, int columnIndex) throws SQLException { + if (StringUtils.isBlank(rs.getString(columnIndex))) { + return new ArrayList<>(); + } + return JsonUtil.jsonToList(rs.getString(columnIndex), Long.class); + } + + @Override + public List getResult(CallableStatement cs, int columnIndex) throws SQLException { + String value = cs.getString(columnIndex); + + if (StringUtils.isBlank(value)) { + return new ArrayList<>(); + } + return JsonUtil.jsonToList(value, Long.class); + } +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java new file mode 100644 index 0000000..34d6364 --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java @@ -0,0 +1,7 @@ +package org.dromara.workflow.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.workflow.domain.FlowDepart; + +public interface FlwDepartMapper extends BaseMapperPlus { +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java index fd86c82..fa31d6c 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java @@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; +import org.dromara.warm.flow.orm.entity.FlowNode; import org.dromara.workflow.domain.bo.FlowTaskBo; import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo; +import java.util.LinkedList; import java.util.List; @@ -54,4 +56,5 @@ public interface FlwTaskMapper { * @return 结果 */ Page getTaskCopyByPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java new file mode 100644 index 0000000..e6b5937 --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java @@ -0,0 +1,9 @@ +package org.dromara.workflow.service; + +import org.dromara.workflow.domain.FlowDepart; + +public interface FlwDepartService { + FlowDepart getInfo(String flowCode); + + FlowDepart bindDepart(FlowDepart flowDepart); +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java index 4dda912..4524aea 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java @@ -8,6 +8,7 @@ import org.dromara.warm.flow.core.entity.Node; import org.dromara.warm.flow.core.entity.Task; import org.dromara.warm.flow.core.service.impl.TaskServiceImpl; import org.dromara.warm.flow.orm.entity.FlowHisTask; +import org.dromara.warm.flow.orm.entity.FlowNode; import org.dromara.warm.flow.orm.entity.FlowTask; import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.domain.bo.*; @@ -200,4 +201,5 @@ public interface IFlwTaskService { * 返回当前用户权限集合 */ List getPermissions(); + } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java index 8894d51..be12f87 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java @@ -1,5 +1,6 @@ package org.dromara.workflow.service; +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; @@ -90,4 +91,6 @@ public interface WorkflowService { * @return */ boolean processInvalid(Long instanceId); + + List currentTaskAllUser(Long taskId); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java new file mode 100644 index 0000000..01732ec --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java @@ -0,0 +1,37 @@ +package org.dromara.workflow.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.dromara.workflow.domain.FlowDepart; +import org.dromara.workflow.mapper.FlwDepartMapper; +import org.dromara.workflow.service.FlwDepartService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class FlwDepartServiceImpl extends ServiceImpl implements FlwDepartService { + + + @Override + public FlowDepart getInfo(String flowCode) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(FlowDepart::getFlowCode, flowCode); + + return this.baseMapper.selectOne(wrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public FlowDepart bindDepart(FlowDepart flowDepart) { + //首先清楚原来的 + LambdaQueryWrapper updateWrapper = new LambdaQueryWrapper<>(); + updateWrapper.eq(FlowDepart::getFlowCode, flowDepart.getFlowCode()); + this.baseMapper.delete(updateWrapper); + + this.baseMapper.insert(flowDepart); + + return flowDepart; + } +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index f047148..3210338 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; @@ -92,9 +93,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService { @DubboReference private RemoteUserService remoteUserService; - @DubboReference(stub = "true") - private final RemoteMessageService remoteMessageService; - @Autowired private ApplicationContext applicationContext; @@ -183,6 +181,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService { flowParams.message(completeTaskBo.getMessage()); flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.PASS.getStatus()); + // 构建 JSON 对象 + JSONObject extJson = new JSONObject(); + extJson.put("isIllegal", ObjectUtil.isNotEmpty(completeTaskBo.getIsIllegal())?completeTaskBo.getIsIllegal():false); + extJson.put("alertType", completeTaskBo.getAlertType()); + extJson.put("alertTypeContent", completeTaskBo.getAlertTypeContent()); + + flowParams.ext(extJson.toJSONString()); + flowParams.hisTaskExt(completeTaskBo.getFileId()); // 执行任务跳转,并根据返回的处理人设置下一步处理人 Instance instance = taskService.skip(taskId, flowParams); @@ -587,6 +593,15 @@ public class FlwTaskServiceImpl implements IFlwTaskService { @Transactional(rollbackFor = Exception.class) public boolean taskOperation(TaskOperationBo bo, String taskOperation) { FlowParams flowParams = new FlowParams(); + + // 构建 JSON 对象 + JSONObject extJson = new JSONObject(); + extJson.put("isIllegal", ObjectUtil.isNotEmpty(bo.getIsIllegal())?bo.getIsIllegal():false); + extJson.put("alertType", bo.getAlertType()); + extJson.put("alertTypeContent", bo.getAlertTypeContent()); + + flowParams.ext(extJson.toJSONString()); + flowParams.message(bo.getMessage()); if (LoginHelper.isSuperAdmin() || LoginHelper.isTenantAdmin()) { flowParams.ignore(true); diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java index 48864b8..2f98ecc 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import org.dromara.common.core.utils.StringUtils; +import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.warm.flow.orm.entity.FlowInstance; import org.dromara.workflow.api.domain.RemoteCompleteTask; import org.dromara.workflow.api.domain.RemoteStartProcess; @@ -142,4 +143,9 @@ public class WorkflowServiceImpl implements WorkflowService { flowInvalidBo.setId(instanceId); return flwInstanceService.processInvalid(flowInvalidBo); } + + @Override + public List currentTaskAllUser(Long taskId) { + return flwTaskService.currentTaskAllUser(taskId); + } } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/utils/JsonUtil.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/utils/JsonUtil.java new file mode 100644 index 0000000..e11692e --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/utils/JsonUtil.java @@ -0,0 +1,126 @@ +package org.dromara.workflow.utils; + +import cn.hutool.core.util.ObjectUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * 定义响应结构 + */ +public class JsonUtil { + + private static ObjectMapper MAPPER; + static{ + MAPPER=new ObjectMapper(); + } + + /** + * 将对象转换成json字符串。 + * @param data + * @return + */ + public static String toJson(Object data){ + String string = null; + try { + string = MAPPER.writeValueAsString(data); + if(StringUtils.isEmpty(string)){ + return null; + } + return string; + } catch (JsonProcessingException e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将json结果集转化为对象 + * + * @param jsonData json数据 + * @return + */ + public static T jsonToPojo(String jsonData, Class beanType) { + try { + T t = MAPPER.readValue(jsonData, beanType); + return t; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 将json数据转换成pojo对象list + *

Title: jsonToList

+ *

Description:

+ * @param jsonData + * @param beanType + * @return + */ + public static List jsonToList(String jsonData, Class beanType) { + JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); + try { + List list = MAPPER.readValue(jsonData, javaType); + return list; + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + /** + * 将Object对象里面的属性和值转化成Map对象 + * + * @param obj + * @return + * @throws IllegalAccessException + */ + public static Map objectToMap(Object obj){ + try { + Map map = new HashMap(); + Class clazz = obj.getClass(); + for (Field field : clazz.getDeclaredFields()) { + field.setAccessible(true); + String fieldName = field.getName(); + if(ObjectUtil.isNotEmpty(field.get(obj))){ + Object value = field.get(obj); + map.put(fieldName, value); + }else{ + map.put(fieldName, ""); + } + } + return map; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static Map jsonToMap(String json){ + try { + return MAPPER.readValue(json, new TypeReference>(){}); + } catch (JsonProcessingException e) { + e.printStackTrace(); + return null; + } + } + + public static LinkedHashMap jsonToStrMap(String json){ + try { + return MAPPER.readValue(json, new TypeReference>(){}); + } catch (JsonProcessingException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml new file mode 100644 index 0000000..782aa3b --- /dev/null +++ b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/pom.xml b/pom.xml index 63a9d40..23aa72a 100644 --- a/pom.xml +++ b/pom.xml @@ -86,12 +86,12 @@ dev - 127.0.0.1:8848 + 114.235.183.147:8848 DEFAULT_GROUP DEFAULT_GROUP nacos nacos - 127.0.0.1:4560 + 114.235.183.147:4560