mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-03-22 13:28:59 +08:00
update 优化 使用 record 简化实体类编码
This commit is contained in:
@@ -33,7 +33,6 @@ import org.dromara.system.domain.vo.SysClientVo;
|
|||||||
import org.dromara.system.service.ISysClientService;
|
import org.dromara.system.service.ISysClientService;
|
||||||
import org.dromara.system.service.ISysConfigService;
|
import org.dromara.system.service.ISysConfigService;
|
||||||
import org.dromara.system.service.ISysSocialService;
|
import org.dromara.system.service.ISysSocialService;
|
||||||
import org.dromara.web.domain.vo.LoginTenantVo;
|
|
||||||
import org.dromara.web.domain.vo.LoginVo;
|
import org.dromara.web.domain.vo.LoginVo;
|
||||||
import org.dromara.web.service.IAuthStrategy;
|
import org.dromara.web.service.IAuthStrategy;
|
||||||
import org.dromara.web.service.SysLoginService;
|
import org.dromara.web.service.SysLoginService;
|
||||||
@@ -94,9 +93,10 @@ public class AuthController {
|
|||||||
|
|
||||||
Long userId = LoginHelper.getUserId();
|
Long userId = LoginHelper.getUserId();
|
||||||
scheduledExecutorService.schedule(() -> {
|
scheduledExecutorService.schedule(() -> {
|
||||||
SseMessageDTO dto = new SseMessageDTO();
|
SseMessageDTO dto = new SseMessageDTO(
|
||||||
dto.setMessage(DateUtils.getTodayHour(new Date()) + "好,欢迎登录 RuoYi-Vue-Plus 后台管理系统");
|
List.of(userId),
|
||||||
dto.setUserIds(List.of(userId));
|
DateUtils.getTodayHour(new Date()) + "好,欢迎登录 RuoYi-Vue-Plus 后台管理系统"
|
||||||
|
);
|
||||||
SseMessageUtils.publishMessage(dto);
|
SseMessageUtils.publishMessage(dto);
|
||||||
}, 5, TimeUnit.SECONDS);
|
}, 5, TimeUnit.SECONDS);
|
||||||
return R.ok(loginVo);
|
return R.ok(loginVo);
|
||||||
@@ -194,9 +194,14 @@ public class AuthController {
|
|||||||
@GetMapping("/tenant/list")
|
@GetMapping("/tenant/list")
|
||||||
public R<LoginTenantVo> tenantList(HttpServletRequest request) throws Exception {
|
public R<LoginTenantVo> tenantList(HttpServletRequest request) throws Exception {
|
||||||
// 暂时预留给前端使用 后续删除
|
// 暂时预留给前端使用 后续删除
|
||||||
LoginTenantVo result = new LoginTenantVo();
|
return R.ok(new LoginTenantVo(false));
|
||||||
result.setTenantEnabled(false);
|
|
||||||
return R.ok(result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录租户列表响应对象。
|
||||||
|
*
|
||||||
|
* @param tenantEnabled 是否启用租户
|
||||||
|
*/
|
||||||
|
public record LoginTenantVo(Boolean tenantEnabled) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import org.dromara.common.web.config.properties.CaptchaProperties;
|
|||||||
import org.dromara.sms4j.api.SmsBlend;
|
import org.dromara.sms4j.api.SmsBlend;
|
||||||
import org.dromara.sms4j.api.entity.SmsResponse;
|
import org.dromara.sms4j.api.entity.SmsResponse;
|
||||||
import org.dromara.sms4j.core.factory.SmsFactory;
|
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||||
import org.dromara.web.domain.vo.CaptchaVo;
|
|
||||||
import org.springframework.expression.Expression;
|
import org.springframework.expression.Expression;
|
||||||
import org.springframework.expression.ExpressionParser;
|
import org.springframework.expression.ExpressionParser;
|
||||||
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||||
@@ -119,9 +118,7 @@ public class CaptchaController {
|
|||||||
public R<CaptchaVo> getCode() {
|
public R<CaptchaVo> getCode() {
|
||||||
boolean captchaEnabled = captchaProperties.getEnable();
|
boolean captchaEnabled = captchaProperties.getEnable();
|
||||||
if (!captchaEnabled) {
|
if (!captchaEnabled) {
|
||||||
CaptchaVo captchaVo = new CaptchaVo();
|
return R.ok(new CaptchaVo(false, null, null));
|
||||||
captchaVo.setCaptchaEnabled(false);
|
|
||||||
return R.ok(captchaVo);
|
|
||||||
}
|
}
|
||||||
return R.ok(SpringUtils.getAopProxy(this).getCodeImpl());
|
return R.ok(SpringUtils.getAopProxy(this).getCodeImpl());
|
||||||
}
|
}
|
||||||
@@ -157,10 +154,17 @@ public class CaptchaController {
|
|||||||
code = exp.getValue(String.class);
|
code = exp.getValue(String.class);
|
||||||
}
|
}
|
||||||
RedisUtils.setCacheObject(verifyKey, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
|
RedisUtils.setCacheObject(verifyKey, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
|
||||||
CaptchaVo captchaVo = new CaptchaVo();
|
return new CaptchaVo(true, uuid, captcha.getImageBase64());
|
||||||
captchaVo.setUuid(uuid);
|
}
|
||||||
captchaVo.setImg(captcha.getImageBase64());
|
|
||||||
return captchaVo;
|
/**
|
||||||
|
* 图片验证码响应对象。
|
||||||
|
*
|
||||||
|
* @param captchaEnabled 是否启用验证码
|
||||||
|
* @param uuid 验证码标识
|
||||||
|
* @param img Base64 图片数据
|
||||||
|
*/
|
||||||
|
public record CaptchaVo(Boolean captchaEnabled, String uuid, String img) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
package org.dromara.web.domain.vo;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证码信息
|
|
||||||
*
|
|
||||||
* @author Michelle.Chung
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public class CaptchaVo {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否开启验证码
|
|
||||||
*/
|
|
||||||
private Boolean captchaEnabled = true;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证码唯一标识。
|
|
||||||
*/
|
|
||||||
private String uuid;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证码图片
|
|
||||||
*/
|
|
||||||
private String img;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
package org.dromara.web.domain.vo;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 登录页租户信息返回对象。
|
|
||||||
*
|
|
||||||
* @author Michelle.Chung
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public class LoginTenantVo {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 租户开关
|
|
||||||
*/
|
|
||||||
private Boolean tenantEnabled;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,30 +1,14 @@
|
|||||||
package org.dromara.common.core.domain.dto;
|
package org.dromara.common.core.domain.dto;
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 抄送
|
* 抄送
|
||||||
*
|
*
|
||||||
|
* @param userId 抄送用户 ID
|
||||||
|
* @param nickName 抄送用户昵称
|
||||||
* @author may
|
* @author may
|
||||||
*/
|
*/
|
||||||
@Data
|
public record FlowCopyDTO(
|
||||||
public class FlowCopyDTO implements Serializable {
|
Long userId,
|
||||||
|
String nickName
|
||||||
@Serial
|
) {
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 用户id
|
|
||||||
*/
|
|
||||||
private Long userId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 用户昵称
|
|
||||||
*/
|
|
||||||
private String nickName;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,30 +1,14 @@
|
|||||||
package org.dromara.common.core.domain.dto;
|
package org.dromara.common.core.domain.dto;
|
||||||
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启动流程后的返回结果对象。
|
* 启动流程后的返回结果对象。
|
||||||
*
|
*
|
||||||
|
* @param processInstanceId 流程实例 ID
|
||||||
|
* @param taskId 首个任务 ID
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
@Data
|
public record StartProcessReturnDTO(
|
||||||
public class StartProcessReturnDTO implements Serializable {
|
Long processInstanceId,
|
||||||
|
Long taskId
|
||||||
@Serial
|
) {
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 流程实例id
|
|
||||||
*/
|
|
||||||
private Long processInstanceId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务id
|
|
||||||
*/
|
|
||||||
private Long taskId;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ public class OssClient {
|
|||||||
String eTag = uploadResult.response().eTag();
|
String eTag = uploadResult.response().eTag();
|
||||||
|
|
||||||
// 提取上传结果中的 ETag,并构建一个自定义的 UploadResult 对象
|
// 提取上传结果中的 ETag,并构建一个自定义的 UploadResult 对象
|
||||||
return UploadResult.builder().url(getUrl() + StringUtils.SLASH + key).filename(key).eTag(eTag).build();
|
return new UploadResult(getUrl() + StringUtils.SLASH + key, key, eTag);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 捕获异常并抛出自定义异常
|
// 捕获异常并抛出自定义异常
|
||||||
throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");
|
throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");
|
||||||
@@ -220,7 +220,7 @@ public class OssClient {
|
|||||||
String eTag = uploadResult.response().eTag();
|
String eTag = uploadResult.response().eTag();
|
||||||
|
|
||||||
// 提取上传结果中的 ETag,并构建一个自定义的 UploadResult 对象
|
// 提取上传结果中的 ETag,并构建一个自定义的 UploadResult 对象
|
||||||
return UploadResult.builder().url(getUrl() + StringUtils.SLASH + key).filename(key).eTag(eTag).build();
|
return new UploadResult(getUrl() + StringUtils.SLASH + key, key, eTag);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");
|
throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,30 +1,16 @@
|
|||||||
package org.dromara.common.oss.entity;
|
package org.dromara.common.oss.entity;
|
||||||
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传返回体
|
* 上传返回体
|
||||||
*
|
*
|
||||||
|
* @param url 文件访问地址
|
||||||
|
* @param filename 文件名
|
||||||
|
* @param eTag 存储服务返回的 ETag
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
@Data
|
public record UploadResult(
|
||||||
@Builder
|
String url,
|
||||||
public class UploadResult {
|
String filename,
|
||||||
|
String eTag
|
||||||
/**
|
) {
|
||||||
* 文件路径
|
|
||||||
*/
|
|
||||||
private String url;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件名
|
|
||||||
*/
|
|
||||||
private String filename;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 已上传对象的实体标记(用来校验文件)
|
|
||||||
*/
|
|
||||||
private String eTag;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -205,12 +205,10 @@ public class SseEmitterManager {
|
|||||||
* @param sseMessageDTO 要发布的SSE消息对象
|
* @param sseMessageDTO 要发布的SSE消息对象
|
||||||
*/
|
*/
|
||||||
public void publishMessage(SseMessageDTO sseMessageDTO) {
|
public void publishMessage(SseMessageDTO sseMessageDTO) {
|
||||||
SseMessageDTO broadcastMessage = new SseMessageDTO();
|
SseMessageDTO broadcastMessage = new SseMessageDTO(sseMessageDTO.userIds(), sseMessageDTO.message());
|
||||||
broadcastMessage.setMessage(sseMessageDTO.getMessage());
|
|
||||||
broadcastMessage.setUserIds(sseMessageDTO.getUserIds());
|
|
||||||
RedisUtils.publish(SSE_TOPIC, broadcastMessage, consumer -> {
|
RedisUtils.publish(SSE_TOPIC, broadcastMessage, consumer -> {
|
||||||
log.info("SSE发送主题订阅消息topic:{} session keys:{} message:{}",
|
log.info("SSE发送主题订阅消息topic:{} session keys:{} message:{}",
|
||||||
SSE_TOPIC, sseMessageDTO.getUserIds(), sseMessageDTO.getMessage());
|
SSE_TOPIC, sseMessageDTO.userIds(), sseMessageDTO.message());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,8 +218,7 @@ public class SseEmitterManager {
|
|||||||
* @param message 要发布的消息内容
|
* @param message 要发布的消息内容
|
||||||
*/
|
*/
|
||||||
public void publishAll(String message) {
|
public void publishAll(String message) {
|
||||||
SseMessageDTO broadcastMessage = new SseMessageDTO();
|
SseMessageDTO broadcastMessage = new SseMessageDTO(null, message);
|
||||||
broadcastMessage.setMessage(message);
|
|
||||||
RedisUtils.publish(SSE_TOPIC, broadcastMessage, consumer -> {
|
RedisUtils.publish(SSE_TOPIC, broadcastMessage, consumer -> {
|
||||||
log.info("SSE发送主题订阅消息topic:{} message:{}", SSE_TOPIC, message);
|
log.info("SSE发送主题订阅消息topic:{} message:{}", SSE_TOPIC, message);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,29 +1,16 @@
|
|||||||
package org.dromara.common.sse.dto;
|
package org.dromara.common.sse.dto;
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息的DTO
|
* 消息的DTO
|
||||||
*
|
*
|
||||||
|
* @param userIds 接收消息的用户 ID 列表
|
||||||
|
* @param message 推送消息内容
|
||||||
* @author zendwang
|
* @author zendwang
|
||||||
*/
|
*/
|
||||||
@Data
|
public record SseMessageDTO(
|
||||||
public class SseMessageDTO implements Serializable {
|
List<Long> userIds,
|
||||||
|
String message
|
||||||
@Serial
|
) {
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 需要推送到的session key 列表
|
|
||||||
*/
|
|
||||||
private List<Long> userIds;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 需要发送的消息
|
|
||||||
*/
|
|
||||||
private String message;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,14 +28,14 @@ public class SseTopicListener implements ApplicationRunner, Ordered {
|
|||||||
@Override
|
@Override
|
||||||
public void run(ApplicationArguments args) throws Exception {
|
public void run(ApplicationArguments args) throws Exception {
|
||||||
sseEmitterManager.subscribeMessage((message) -> {
|
sseEmitterManager.subscribeMessage((message) -> {
|
||||||
log.info("SSE主题订阅收到消息session keys={} message={}", message.getUserIds(), message.getMessage());
|
log.info("SSE主题订阅收到消息session keys={} message={}", message.userIds(), message.message());
|
||||||
// 如果key不为空就按照key发消息 如果为空就群发
|
// 如果key不为空就按照key发消息 如果为空就群发
|
||||||
if (CollUtil.isNotEmpty(message.getUserIds())) {
|
if (CollUtil.isNotEmpty(message.userIds())) {
|
||||||
message.getUserIds().forEach(key -> {
|
message.userIds().forEach(key -> {
|
||||||
sseEmitterManager.sendMessage(key, message.getMessage());
|
sseEmitterManager.sendMessage(key, message.message());
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
sseEmitterManager.sendMessage(message.getMessage());
|
sseEmitterManager.sendMessage(message.message());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
log.info("初始化SSE主题订阅监听器成功");
|
log.info("初始化SSE主题订阅监听器成功");
|
||||||
|
|||||||
@@ -1,29 +1,16 @@
|
|||||||
package org.dromara.common.websocket.dto;
|
package org.dromara.common.websocket.dto;
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息的DTO
|
* 消息的DTO
|
||||||
*
|
*
|
||||||
|
* @param sessionKeys WebSocket 会话标识列表
|
||||||
|
* @param message 推送消息内容
|
||||||
* @author zendwang
|
* @author zendwang
|
||||||
*/
|
*/
|
||||||
@Data
|
public record WebSocketMessageDTO(
|
||||||
public class WebSocketMessageDTO implements Serializable {
|
List<Long> sessionKeys,
|
||||||
|
String message
|
||||||
@Serial
|
) {
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 需要推送到的session key 列表
|
|
||||||
*/
|
|
||||||
private List<Long> sessionKeys;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 需要发送的消息
|
|
||||||
*/
|
|
||||||
private String message;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,9 +51,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
|
|||||||
LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
|
LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
|
||||||
|
|
||||||
// 创建WebSocket消息DTO对象
|
// 创建WebSocket消息DTO对象
|
||||||
WebSocketMessageDTO messageDTO = new WebSocketMessageDTO();
|
WebSocketMessageDTO messageDTO = new WebSocketMessageDTO(List.of(loginUser.getUserId()), message.getPayload());
|
||||||
messageDTO.setSessionKeys(List.of(loginUser.getUserId()));
|
|
||||||
messageDTO.setMessage(message.getPayload());
|
|
||||||
WebSocketUtils.publishMessage(messageDTO);
|
WebSocketUtils.publishMessage(messageDTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,17 +26,17 @@ public class WebSocketTopicListener implements ApplicationRunner, Ordered {
|
|||||||
public void run(ApplicationArguments args) throws Exception {
|
public void run(ApplicationArguments args) throws Exception {
|
||||||
// 订阅WebSocket消息
|
// 订阅WebSocket消息
|
||||||
WebSocketUtils.subscribeMessage((message) -> {
|
WebSocketUtils.subscribeMessage((message) -> {
|
||||||
log.info("WebSocket主题订阅收到消息session keys={} message={}", message.getSessionKeys(), message.getMessage());
|
log.info("WebSocket主题订阅收到消息session keys={} message={}", message.sessionKeys(), message.message());
|
||||||
// 如果key不为空就按照key发消息 如果为空就群发
|
// 如果key不为空就按照key发消息 如果为空就群发
|
||||||
if (CollUtil.isNotEmpty(message.getSessionKeys())) {
|
if (CollUtil.isNotEmpty(message.sessionKeys())) {
|
||||||
message.getSessionKeys().forEach(key -> {
|
message.sessionKeys().forEach(key -> {
|
||||||
if (WebSocketSessionHolder.existSession(key)) {
|
if (WebSocketSessionHolder.existSession(key)) {
|
||||||
WebSocketUtils.sendMessage(key, message.getMessage());
|
WebSocketUtils.sendMessage(key, message.message());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
WebSocketSessionHolder.getSessionsAll().forEach(key -> {
|
WebSocketSessionHolder.getSessionsAll().forEach(key -> {
|
||||||
WebSocketUtils.sendMessage(key, message.getMessage());
|
WebSocketUtils.sendMessage(key, message.message());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -56,21 +56,19 @@ public class WebSocketUtils {
|
|||||||
public static void publishMessage(WebSocketMessageDTO webSocketMessage) {
|
public static void publishMessage(WebSocketMessageDTO webSocketMessage) {
|
||||||
List<Long> unsentSessionKeys = new ArrayList<>();
|
List<Long> unsentSessionKeys = new ArrayList<>();
|
||||||
// 当前服务内session,直接发送消息
|
// 当前服务内session,直接发送消息
|
||||||
for (Long sessionKey : webSocketMessage.getSessionKeys()) {
|
for (Long sessionKey : webSocketMessage.sessionKeys()) {
|
||||||
if (WebSocketSessionHolder.existSession(sessionKey)) {
|
if (WebSocketSessionHolder.existSession(sessionKey)) {
|
||||||
WebSocketUtils.sendMessage(sessionKey, webSocketMessage.getMessage());
|
WebSocketUtils.sendMessage(sessionKey, webSocketMessage.message());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
unsentSessionKeys.add(sessionKey);
|
unsentSessionKeys.add(sessionKey);
|
||||||
}
|
}
|
||||||
// 不在当前服务内session,发布订阅消息
|
// 不在当前服务内session,发布订阅消息
|
||||||
if (CollUtil.isNotEmpty(unsentSessionKeys)) {
|
if (CollUtil.isNotEmpty(unsentSessionKeys)) {
|
||||||
WebSocketMessageDTO broadcastMessage = new WebSocketMessageDTO();
|
WebSocketMessageDTO broadcastMessage = new WebSocketMessageDTO(unsentSessionKeys, webSocketMessage.message());
|
||||||
broadcastMessage.setMessage(webSocketMessage.getMessage());
|
|
||||||
broadcastMessage.setSessionKeys(unsentSessionKeys);
|
|
||||||
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
|
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
|
||||||
log.info(" WebSocket发送主题订阅消息topic:{} session keys:{} message:{}",
|
log.info(" WebSocket发送主题订阅消息topic:{} session keys:{} message:{}",
|
||||||
WEB_SOCKET_TOPIC, unsentSessionKeys, webSocketMessage.getMessage());
|
WEB_SOCKET_TOPIC, unsentSessionKeys, webSocketMessage.message());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,8 +79,7 @@ public class WebSocketUtils {
|
|||||||
* @param message 要发布的消息内容
|
* @param message 要发布的消息内容
|
||||||
*/
|
*/
|
||||||
public static void publishAll(String message) {
|
public static void publishAll(String message) {
|
||||||
WebSocketMessageDTO broadcastMessage = new WebSocketMessageDTO();
|
WebSocketMessageDTO broadcastMessage = new WebSocketMessageDTO(null, message);
|
||||||
broadcastMessage.setMessage(message);
|
|
||||||
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
|
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
|
||||||
log.info("WebSocket发送主题订阅消息topic:{} message:{}", WEB_SOCKET_TOPIC, message);
|
log.info("WebSocket发送主题订阅消息topic:{} message:{}", WEB_SOCKET_TOPIC, message);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,30 +1,19 @@
|
|||||||
package org.dromara.job.entity;
|
package org.dromara.job.entity;
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@Data
|
/**
|
||||||
public class BillDTO {
|
* 账单数据传输对象。
|
||||||
|
*
|
||||||
/**
|
* @param billId 账单 ID
|
||||||
* 账单ID
|
* @param billChannel 账单渠道
|
||||||
*/
|
* @param billDate 账单日期
|
||||||
private Long billId;
|
* @param billAmount 账单金额
|
||||||
|
*/
|
||||||
/**
|
public record BillDTO(
|
||||||
* 账单渠道
|
Long billId,
|
||||||
*/
|
String billChannel,
|
||||||
private String billChannel;
|
String billDate,
|
||||||
|
BigDecimal billAmount
|
||||||
/**
|
) {
|
||||||
* 账单日期
|
|
||||||
*/
|
|
||||||
private String billDate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 账单金额
|
|
||||||
*/
|
|
||||||
private BigDecimal billAmount;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,16 +23,12 @@ import java.math.BigDecimal;
|
|||||||
public class AlipayBillTask {
|
public class AlipayBillTask {
|
||||||
|
|
||||||
public ExecuteResult jobExecute(JobArgs jobArgs) throws InterruptedException {
|
public ExecuteResult jobExecute(JobArgs jobArgs) throws InterruptedException {
|
||||||
BillDTO billDTO = new BillDTO();
|
|
||||||
billDTO.setBillId(23456789L);
|
|
||||||
billDTO.setBillChannel("alipay");
|
|
||||||
// 设置清算日期
|
// 设置清算日期
|
||||||
String settlementDate = (String) jobArgs.getWfContext().get("settlementDate");
|
String settlementDate = (String) jobArgs.getWfContext().get("settlementDate");
|
||||||
if (StrUtil.equals(settlementDate, "sysdate")) {
|
if (StrUtil.equals(settlementDate, "sysdate")) {
|
||||||
settlementDate = DateUtil.today();
|
settlementDate = DateUtil.today();
|
||||||
}
|
}
|
||||||
billDTO.setBillDate(settlementDate);
|
BillDTO billDTO = new BillDTO(23456789L, "alipay", settlementDate, new BigDecimal("2345.67"));
|
||||||
billDTO.setBillAmount(new BigDecimal("2345.67"));
|
|
||||||
// 把billDTO对象放入上下文进行传递
|
// 把billDTO对象放入上下文进行传递
|
||||||
jobArgs.appendContext("alipay", JsonUtils.toJsonString(billDTO));
|
jobArgs.appendContext("alipay", JsonUtils.toJsonString(billDTO));
|
||||||
SnailJobLog.REMOTE.info("上下文: {}", jobArgs.getWfContext());
|
SnailJobLog.REMOTE.info("上下文: {}", jobArgs.getWfContext());
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ public class SummaryBillTask {
|
|||||||
String wechat = (String) jobArgs.getWfContext("wechat");
|
String wechat = (String) jobArgs.getWfContext("wechat");
|
||||||
if (StrUtil.isNotBlank(wechat)) {
|
if (StrUtil.isNotBlank(wechat)) {
|
||||||
BillDTO wechatBillDTO = JsonUtils.parseObject(wechat, BillDTO.class);
|
BillDTO wechatBillDTO = JsonUtils.parseObject(wechat, BillDTO.class);
|
||||||
wechatAmount = wechatBillDTO.getBillAmount();
|
wechatAmount = wechatBillDTO.billAmount();
|
||||||
}
|
}
|
||||||
// 获得支付宝账单
|
// 获得支付宝账单
|
||||||
BigDecimal alipayAmount = BigDecimal.valueOf(0);
|
BigDecimal alipayAmount = BigDecimal.valueOf(0);
|
||||||
String alipay = (String) jobArgs.getWfContext("alipay");
|
String alipay = (String) jobArgs.getWfContext("alipay");
|
||||||
if (StrUtil.isNotBlank(alipay)) {
|
if (StrUtil.isNotBlank(alipay)) {
|
||||||
BillDTO alipayBillDTO = JsonUtils.parseObject(alipay, BillDTO.class);
|
BillDTO alipayBillDTO = JsonUtils.parseObject(alipay, BillDTO.class);
|
||||||
alipayAmount = alipayBillDTO.getBillAmount();
|
alipayAmount = alipayBillDTO.billAmount();
|
||||||
}
|
}
|
||||||
// 汇总账单
|
// 汇总账单
|
||||||
BigDecimal totalAmount = wechatAmount.add(alipayAmount);
|
BigDecimal totalAmount = wechatAmount.add(alipayAmount);
|
||||||
|
|||||||
@@ -23,17 +23,13 @@ import java.math.BigDecimal;
|
|||||||
public class WechatBillTask {
|
public class WechatBillTask {
|
||||||
|
|
||||||
public ExecuteResult jobExecute(JobArgs jobArgs) throws InterruptedException {
|
public ExecuteResult jobExecute(JobArgs jobArgs) throws InterruptedException {
|
||||||
BillDTO billDTO = new BillDTO();
|
|
||||||
billDTO.setBillId(123456789L);
|
|
||||||
billDTO.setBillChannel("wechat");
|
|
||||||
// 从上下文中获得清算日期并设置,如果上下文中清算日期
|
// 从上下文中获得清算日期并设置,如果上下文中清算日期
|
||||||
// 是sysdate设置为当前日期;否则取管理页面设置的值
|
// 是sysdate设置为当前日期;否则取管理页面设置的值
|
||||||
String settlementDate = (String) jobArgs.getWfContext().get("settlementDate");
|
String settlementDate = (String) jobArgs.getWfContext().get("settlementDate");
|
||||||
if (StrUtil.equals(settlementDate, "sysdate")) {
|
if (StrUtil.equals(settlementDate, "sysdate")) {
|
||||||
settlementDate = DateUtil.today();
|
settlementDate = DateUtil.today();
|
||||||
}
|
}
|
||||||
billDTO.setBillDate(settlementDate);
|
BillDTO billDTO = new BillDTO(123456789L, "wechat", settlementDate, new BigDecimal("1234.56"));
|
||||||
billDTO.setBillAmount(new BigDecimal("1234.56"));
|
|
||||||
// 把billDTO对象放入上下文进行传递
|
// 把billDTO对象放入上下文进行传递
|
||||||
jobArgs.appendContext("wechat", JsonUtils.toJsonString(billDTO));
|
jobArgs.appendContext("wechat", JsonUtils.toJsonString(billDTO));
|
||||||
SnailJobLog.REMOTE.info("上下文: {}", jobArgs.getWfContext());
|
SnailJobLog.REMOTE.info("上下文: {}", jobArgs.getWfContext());
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|||||||
import org.dromara.common.core.domain.PageResult;
|
import org.dromara.common.core.domain.PageResult;
|
||||||
import org.dromara.common.web.core.BaseController;
|
import org.dromara.common.web.core.BaseController;
|
||||||
import org.dromara.system.domain.bo.SysOssBo;
|
import org.dromara.system.domain.bo.SysOssBo;
|
||||||
import org.dromara.system.domain.vo.SysOssUploadVo;
|
|
||||||
import org.dromara.system.domain.vo.SysOssVo;
|
import org.dromara.system.domain.vo.SysOssVo;
|
||||||
import org.dromara.system.service.ISysOssService;
|
import org.dromara.system.service.ISysOssService;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
@@ -76,10 +75,7 @@ public class SysOssController extends BaseController {
|
|||||||
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||||
public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) {
|
public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) {
|
||||||
SysOssVo oss = ossService.upload(file);
|
SysOssVo oss = ossService.upload(file);
|
||||||
SysOssUploadVo uploadVo = new SysOssUploadVo();
|
SysOssUploadVo uploadVo = new SysOssUploadVo(oss.getUrl(), oss.getOriginalName(), oss.getOssId().toString());
|
||||||
uploadVo.setUrl(oss.getUrl());
|
|
||||||
uploadVo.setFileName(oss.getOriginalName());
|
|
||||||
uploadVo.setOssId(oss.getOssId().toString());
|
|
||||||
return R.ok(uploadVo);
|
return R.ok(uploadVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,4 +106,13 @@ public class SysOssController extends BaseController {
|
|||||||
return toAjax(ossService.deleteWithValidByIds(List.of(ossIds), true));
|
return toAjax(ossService.deleteWithValidByIds(List.of(ossIds), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OSS 上传响应对象。
|
||||||
|
*
|
||||||
|
* @param url 文件访问地址
|
||||||
|
* @param fileName 原始文件名
|
||||||
|
* @param ossId OSS 对象 ID
|
||||||
|
*/
|
||||||
|
public record SysOssUploadVo(String url, String fileName, String ossId) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
package org.dromara.system.domain.vo;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 上传对象信息
|
|
||||||
*
|
|
||||||
* @author Michelle.Chung
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public class SysOssUploadVo {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* URL地址
|
|
||||||
*/
|
|
||||||
private String url;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件名
|
|
||||||
*/
|
|
||||||
private String fileName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 对象存储主键
|
|
||||||
*/
|
|
||||||
private String ossId;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -258,9 +258,9 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult, SysOssExt ext1) {
|
private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult, SysOssExt ext1) {
|
||||||
SysOss oss = new SysOss();
|
SysOss oss = new SysOss();
|
||||||
oss.setUrl(uploadResult.getUrl());
|
oss.setUrl(uploadResult.url());
|
||||||
oss.setFileSuffix(suffix);
|
oss.setFileSuffix(suffix);
|
||||||
oss.setFileName(uploadResult.getFilename());
|
oss.setFileName(uploadResult.filename());
|
||||||
oss.setOriginalName(originalfileName);
|
oss.setOriginalName(originalfileName);
|
||||||
oss.setService(configKey);
|
oss.setService(configKey);
|
||||||
oss.setExt1(JsonUtils.toJsonString(ext1));
|
oss.setExt1(JsonUtils.toJsonString(ext1));
|
||||||
|
|||||||
@@ -1,31 +1,18 @@
|
|||||||
package org.dromara.workflow.domain.bo;
|
package org.dromara.workflow.domain.bo;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import lombok.Data;
|
|
||||||
import org.dromara.common.core.validate.AddGroup;
|
import org.dromara.common.core.validate.AddGroup;
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 撤销流程请求对象。
|
* 撤销流程请求对象。
|
||||||
*
|
*
|
||||||
|
* @param businessId 业务 ID
|
||||||
|
* @param message 撤销说明
|
||||||
* @author may
|
* @author may
|
||||||
*/
|
*/
|
||||||
@Data
|
public record FlowCancelBo(
|
||||||
public class FlowCancelBo implements Serializable {
|
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务ID
|
|
||||||
*/
|
|
||||||
@NotBlank(message = "业务ID不能为空", groups = AddGroup.class)
|
@NotBlank(message = "业务ID不能为空", groups = AddGroup.class)
|
||||||
private String businessId;
|
String businessId,
|
||||||
|
String message
|
||||||
/**
|
) {
|
||||||
* 办理意见
|
|
||||||
*/
|
|
||||||
private String message;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,18 @@
|
|||||||
package org.dromara.workflow.domain.bo;
|
package org.dromara.workflow.domain.bo;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
|
||||||
import org.dromara.common.core.validate.AddGroup;
|
import org.dromara.common.core.validate.AddGroup;
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 作废流程请求对象。
|
* 作废流程请求对象。
|
||||||
*
|
*
|
||||||
|
* @param id 流程实例 ID
|
||||||
|
* @param comment 作废意见
|
||||||
* @author may
|
* @author may
|
||||||
*/
|
*/
|
||||||
@Data
|
public record FlowInvalidBo(
|
||||||
public class FlowInvalidBo implements Serializable {
|
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 流程实例id
|
|
||||||
*/
|
|
||||||
@NotNull(message = "流程实例id为空", groups = AddGroup.class)
|
@NotNull(message = "流程实例id为空", groups = AddGroup.class)
|
||||||
private Long id;
|
Long id,
|
||||||
|
String comment
|
||||||
/**
|
) {
|
||||||
* 审批意见
|
|
||||||
*/
|
|
||||||
private String comment;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,18 @@
|
|||||||
package org.dromara.workflow.domain.bo;
|
package org.dromara.workflow.domain.bo;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
|
||||||
import org.dromara.common.core.validate.AddGroup;
|
import org.dromara.common.core.validate.AddGroup;
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 终止任务请求对象
|
* 终止任务请求对象
|
||||||
*
|
*
|
||||||
|
* @param taskId 任务 ID
|
||||||
|
* @param comment 终止意见
|
||||||
* @author may
|
* @author may
|
||||||
*/
|
*/
|
||||||
@Data
|
public record FlowTerminationBo(
|
||||||
public class FlowTerminationBo implements Serializable {
|
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务id
|
|
||||||
*/
|
|
||||||
@NotNull(message = "任务id为空", groups = AddGroup.class)
|
@NotNull(message = "任务id为空", groups = AddGroup.class)
|
||||||
private Long taskId;
|
Long taskId,
|
||||||
|
String comment
|
||||||
/**
|
) {
|
||||||
* 审批意见
|
|
||||||
*/
|
|
||||||
private String comment;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,22 @@
|
|||||||
package org.dromara.workflow.domain.bo;
|
package org.dromara.workflow.domain.bo;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
|
||||||
import org.dromara.common.core.validate.AddGroup;
|
import org.dromara.common.core.validate.AddGroup;
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程变量参数
|
* 流程变量参数
|
||||||
*
|
*
|
||||||
|
* @param instanceId 流程实例 ID
|
||||||
|
* @param key 变量键
|
||||||
|
* @param value 变量值
|
||||||
* @author may
|
* @author may
|
||||||
*/
|
*/
|
||||||
@Data
|
public record FlowVariableBo(
|
||||||
public class FlowVariableBo implements Serializable {
|
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 流程实例id
|
|
||||||
*/
|
|
||||||
@NotNull(message = "流程实例id为空", groups = AddGroup.class)
|
@NotNull(message = "流程实例id为空", groups = AddGroup.class)
|
||||||
private Long instanceId;
|
Long instanceId,
|
||||||
|
|
||||||
/**
|
|
||||||
* 流程变量key
|
|
||||||
*/
|
|
||||||
@NotNull(message = "流程变量key为空", groups = AddGroup.class)
|
@NotNull(message = "流程变量key为空", groups = AddGroup.class)
|
||||||
private String key;
|
String key,
|
||||||
|
|
||||||
/**
|
|
||||||
* 流程变量value
|
|
||||||
*/
|
|
||||||
@NotNull(message = "流程变量value为空", groups = AddGroup.class)
|
@NotNull(message = "流程变量value为空", groups = AddGroup.class)
|
||||||
private String value;
|
String value
|
||||||
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,9 +92,7 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
|
|||||||
try {
|
try {
|
||||||
switch (messageTypeEnum) {
|
switch (messageTypeEnum) {
|
||||||
case SYSTEM_MESSAGE -> {
|
case SYSTEM_MESSAGE -> {
|
||||||
SseMessageDTO dto = new SseMessageDTO();
|
SseMessageDTO dto = new SseMessageDTO(userIds, message);
|
||||||
dto.setUserIds(userIds);
|
|
||||||
dto.setMessage(message);
|
|
||||||
SseMessageUtils.publishMessage(dto);
|
SseMessageUtils.publishMessage(dto);
|
||||||
}
|
}
|
||||||
case EMAIL_MESSAGE -> MailUtils.sendText(emails, subject, message);
|
case EMAIL_MESSAGE -> MailUtils.sendText(emails, subject, message);
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean cancelProcessApply(FlowCancelBo bo) {
|
public boolean cancelProcessApply(FlowCancelBo bo) {
|
||||||
Instance instance = selectInstByBusinessId(bo.getBusinessId());
|
Instance instance = selectInstByBusinessId(bo.businessId());
|
||||||
if (instance == null) {
|
if (instance == null) {
|
||||||
throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
|
throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
|
||||||
}
|
}
|
||||||
@@ -319,7 +319,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
if (definition == null) {
|
if (definition == null) {
|
||||||
throw new ServiceException(ExceptionCons.NOT_FOUNT_DEF);
|
throw new ServiceException(ExceptionCons.NOT_FOUNT_DEF);
|
||||||
}
|
}
|
||||||
String message = bo.getMessage();
|
String message = bo.message();
|
||||||
String userIdStr = LoginHelper.getUserIdStr();
|
String userIdStr = LoginHelper.getUserIdStr();
|
||||||
BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
|
BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
|
||||||
FlowParams flowParams = FlowParams.build()
|
FlowParams flowParams = FlowParams.build()
|
||||||
@@ -445,16 +445,16 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean updateVariable(FlowVariableBo bo) {
|
public boolean updateVariable(FlowVariableBo bo) {
|
||||||
FlowInstance flowInstance = flowInstanceMapper.selectById(bo.getInstanceId());
|
FlowInstance flowInstance = flowInstanceMapper.selectById(bo.instanceId());
|
||||||
if (flowInstance == null) {
|
if (flowInstance == null) {
|
||||||
throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
|
throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
|
||||||
}
|
}
|
||||||
Map<String, Object> variableMap = new HashMap<>(Optional.ofNullable(flowInstance.getVariableMap()).orElse(Collections.emptyMap()));
|
Map<String, Object> variableMap = new HashMap<>(Optional.ofNullable(flowInstance.getVariableMap()).orElse(Collections.emptyMap()));
|
||||||
if (!variableMap.containsKey(bo.getKey())) {
|
if (!variableMap.containsKey(bo.key())) {
|
||||||
log.error("变量不存在: {}", bo.getKey());
|
log.error("变量不存在: {}", bo.key());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
variableMap.put(bo.getKey(), bo.getValue());
|
variableMap.put(bo.key(), bo.value());
|
||||||
flowInstance.setVariable(FlowEngine.jsonConvert.objToStr(variableMap));
|
flowInstance.setVariable(FlowEngine.jsonConvert.objToStr(variableMap));
|
||||||
return flowInstanceMapper.updateById(flowInstance) > 0;
|
return flowInstanceMapper.updateById(flowInstance) > 0;
|
||||||
}
|
}
|
||||||
@@ -503,16 +503,16 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean processInvalid(FlowInvalidBo bo) {
|
public boolean processInvalid(FlowInvalidBo bo) {
|
||||||
Instance instance = insService.getById(bo.getId());
|
Instance instance = insService.getById(bo.id());
|
||||||
if (instance != null) {
|
if (instance != null) {
|
||||||
BusinessStatusEnum.checkInvalidStatus(instance.getFlowStatus());
|
BusinessStatusEnum.checkInvalidStatus(instance.getFlowStatus());
|
||||||
}
|
}
|
||||||
FlowParams flowParams = FlowParams.build()
|
FlowParams flowParams = FlowParams.build()
|
||||||
.message(bo.getComment())
|
.message(bo.comment())
|
||||||
.flowStatus(BusinessStatusEnum.INVALID.getStatus())
|
.flowStatus(BusinessStatusEnum.INVALID.getStatus())
|
||||||
.hisStatus(TaskStatusEnum.INVALID.getStatus())
|
.hisStatus(TaskStatusEnum.INVALID.getStatus())
|
||||||
.ignore(true);
|
.ignore(true);
|
||||||
taskService.terminationByInsId(bo.getId(), flowParams);
|
taskService.terminationByInsId(bo.id(), flowParams);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,9 +133,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
}
|
}
|
||||||
taskService.mergeVariable(flowInstance, variables);
|
taskService.mergeVariable(flowInstance, variables);
|
||||||
insService.updateById(flowInstance);
|
insService.updateById(flowInstance);
|
||||||
StartProcessReturnDTO dto = new StartProcessReturnDTO();
|
StartProcessReturnDTO dto = new StartProcessReturnDTO(taskList.get(0).getInstanceId(), taskList.get(0).getId());
|
||||||
dto.setProcessInstanceId(taskList.get(0).getInstanceId());
|
|
||||||
dto.setTaskId(taskList.get(0).getId());
|
|
||||||
// 保存流程实例业务信息
|
// 保存流程实例业务信息
|
||||||
this.buildFlowInstanceBizExt(flowInstance, bizExt);
|
this.buildFlowInstanceBizExt(flowInstance, bizExt);
|
||||||
return dto;
|
return dto;
|
||||||
@@ -166,10 +164,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
if (taskList.size() > 1) {
|
if (taskList.size() > 1) {
|
||||||
throw new ServiceException("请检查流程第一个环节是否为申请人!");
|
throw new ServiceException("请检查流程第一个环节是否为申请人!");
|
||||||
}
|
}
|
||||||
StartProcessReturnDTO dto = new StartProcessReturnDTO();
|
return new StartProcessReturnDTO(instance.getId(), taskList.get(0).getId());
|
||||||
dto.setProcessInstanceId(instance.getId());
|
|
||||||
dto.setTaskId(taskList.get(0).getId());
|
|
||||||
return dto;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -570,7 +565,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean terminationTask(FlowTerminationBo bo) {
|
public boolean terminationTask(FlowTerminationBo bo) {
|
||||||
Long taskId = bo.getTaskId();
|
Long taskId = bo.taskId();
|
||||||
Task task = taskService.getById(taskId);
|
Task task = taskService.getById(taskId);
|
||||||
if (task == null) {
|
if (task == null) {
|
||||||
throw new ServiceException("任务不存在!");
|
throw new ServiceException("任务不存在!");
|
||||||
@@ -580,7 +575,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
BusinessStatusEnum.checkInvalidStatus(instance.getFlowStatus());
|
BusinessStatusEnum.checkInvalidStatus(instance.getFlowStatus());
|
||||||
}
|
}
|
||||||
FlowParams flowParams = FlowParams.build()
|
FlowParams flowParams = FlowParams.build()
|
||||||
.message(bo.getComment())
|
.message(bo.comment())
|
||||||
.flowStatus(BusinessStatusEnum.TERMINATION.getStatus())
|
.flowStatus(BusinessStatusEnum.TERMINATION.getStatus())
|
||||||
.hisStatus(TaskStatusEnum.TERMINATION.getStatus());
|
.hisStatus(TaskStatusEnum.TERMINATION.getStatus());
|
||||||
taskService.termination(taskId, flowParams);
|
taskService.termination(taskId, flowParams);
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|||||||
|
|
||||||
StartProcessReturnDTO result = flwTaskService.startWorkFlow(processBo);
|
StartProcessReturnDTO result = flwTaskService.startWorkFlow(processBo);
|
||||||
CompleteTaskBo taskBo = new CompleteTaskBo();
|
CompleteTaskBo taskBo = new CompleteTaskBo();
|
||||||
taskBo.setTaskId(result.getTaskId());
|
taskBo.setTaskId(result.taskId());
|
||||||
taskBo.setMessageType(Collections.singletonList(MessageTypeEnum.SYSTEM_MESSAGE.getCode()));
|
taskBo.setMessageType(Collections.singletonList(MessageTypeEnum.SYSTEM_MESSAGE.getCode()));
|
||||||
taskBo.setVariables(startProcess.getVariables());
|
taskBo.setVariables(startProcess.getVariables());
|
||||||
taskBo.setHandler(startProcess.getHandler());
|
taskBo.setHandler(startProcess.getHandler());
|
||||||
|
|||||||
Reference in New Issue
Block a user