diff --git a/pom.xml b/pom.xml
index 3a563068..e7e8d74f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -222,6 +222,13 @@
${ruoyi.version}
+
+
+ com.ruoyi
+ ruoyi-common-services
+ ${ruoyi.version}
+
+
com.ruoyi
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 15984823..b38fd680 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -17,6 +17,7 @@
ruoyi-common-security
ruoyi-common-datascope
ruoyi-common-datasource
+ ruoyi-common-services
ruoyi-common
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/IEnum.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/IEnum.java
new file mode 100644
index 00000000..4ff349f6
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/IEnum.java
@@ -0,0 +1,39 @@
+package com.ruoyi.common.core.constant;
+
+import java.util.NoSuchElementException;
+
+/**
+ * @author Alan Scipio
+ * created on 2024/2/18
+ */
+public interface IEnum {
+
+ int getCode();
+
+ String getName();
+
+ static IEnum getByCode(IEnum[] enums, int code) {
+ if (enums == null || enums.length == 0) {
+ throw new IllegalArgumentException("enums is empty");
+ }
+ for (IEnum value : enums) {
+ if (value.getCode() == code) {
+ return value;
+ }
+ }
+ throw new NoSuchElementException("No such enum with code: [" + code + "], enum type: [" + enums[0].getClass().getName() + "]");
+ }
+
+ static IEnum getByName(IEnum[] enums, String name) {
+ if (enums == null || enums.length == 0) {
+ throw new IllegalArgumentException("enums is empty");
+ }
+ for (IEnum value : enums) {
+ if (value.getName().equals(name)) {
+ return value;
+ }
+ }
+ throw new NoSuchElementException("No such enum with name: [" + name + "], enum type: [" + enums[0].getClass().getName() + "]");
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/CaptchaException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/CaptchaException.java
index 3e018510..c764ca08 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/CaptchaException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/CaptchaException.java
@@ -1,16 +1,17 @@
package com.ruoyi.common.core.exception;
+import java.io.Serial;
+
/**
* 验证码错误异常类
- *
+ *
* @author ruoyi
*/
-public class CaptchaException extends RuntimeException
-{
+public class CaptchaException extends RuntimeException {
+ @Serial
private static final long serialVersionUID = 1L;
- public CaptchaException(String msg)
- {
+ public CaptchaException(String msg) {
super(msg);
}
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/CheckedException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/CheckedException.java
index 862eefa5..ea5e0245 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/CheckedException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/CheckedException.java
@@ -1,31 +1,29 @@
package com.ruoyi.common.core.exception;
+import java.io.Serial;
+
/**
* 检查异常
- *
+ *
* @author ruoyi
*/
-public class CheckedException extends RuntimeException
-{
+public class CheckedException extends RuntimeException {
+ @Serial
private static final long serialVersionUID = 1L;
- public CheckedException(String message)
- {
+ public CheckedException(String message) {
super(message);
}
- public CheckedException(Throwable cause)
- {
+ public CheckedException(Throwable cause) {
super(cause);
}
- public CheckedException(String message, Throwable cause)
- {
+ public CheckedException(String message, Throwable cause) {
super(message, cause);
}
- public CheckedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
- {
+ public CheckedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/DemoModeException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/DemoModeException.java
index ac2a19e9..f6e6a7fa 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/DemoModeException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/DemoModeException.java
@@ -1,15 +1,16 @@
package com.ruoyi.common.core.exception;
+import java.io.Serial;
+
/**
* 演示模式异常
- *
+ *
* @author ruoyi
*/
-public class DemoModeException extends RuntimeException
-{
+public class DemoModeException extends RuntimeException {
+ @Serial
private static final long serialVersionUID = 1L;
- public DemoModeException()
- {
+ public DemoModeException() {
}
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java
index b55c7cd2..4a96f6a9 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java
@@ -1,12 +1,14 @@
package com.ruoyi.common.core.exception;
+import java.io.Serial;
+
/**
* 全局异常
- *
+ *
* @author ruoyi
*/
-public class GlobalException extends RuntimeException
-{
+public class GlobalException extends RuntimeException {
+ @Serial
private static final long serialVersionUID = 1L;
/**
@@ -16,42 +18,34 @@ public class GlobalException extends RuntimeException
/**
* 错误明细,内部调试错误
- *
- * 和 {@link CommonResult#getDetailMessage()} 一致的设计
*/
private String detailMessage;
/**
* 空构造方法,避免反序列化问题
*/
- public GlobalException()
- {
+ public GlobalException() {
}
- public GlobalException(String message)
- {
+ public GlobalException(String message) {
this.message = message;
}
- public String getDetailMessage()
- {
+ public String getDetailMessage() {
return detailMessage;
}
- public GlobalException setDetailMessage(String detailMessage)
- {
+ public GlobalException setDetailMessage(String detailMessage) {
this.detailMessage = detailMessage;
return this;
}
@Override
- public String getMessage()
- {
+ public String getMessage() {
return message;
}
- public GlobalException setMessage(String message)
- {
+ public GlobalException setMessage(String message) {
this.message = message;
return this;
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/InnerAuthException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/InnerAuthException.java
index 8a7abe9f..95fc7c3b 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/InnerAuthException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/InnerAuthException.java
@@ -1,16 +1,17 @@
package com.ruoyi.common.core.exception;
+import java.io.Serial;
+
/**
* 内部认证异常
- *
+ *
* @author ruoyi
*/
-public class InnerAuthException extends RuntimeException
-{
+public class InnerAuthException extends RuntimeException {
+ @Serial
private static final long serialVersionUID = 1L;
- public InnerAuthException(String message)
- {
+ public InnerAuthException(String message) {
super(message);
}
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/NoSuchDataException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/NoSuchDataException.java
new file mode 100644
index 00000000..89cd7b91
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/NoSuchDataException.java
@@ -0,0 +1,34 @@
+package com.ruoyi.common.core.exception;
+
+import com.ruoyi.common.core.exception.base.BaseException;
+
+import java.io.Serial;
+
+/**
+ * @author Alan Scipio
+ * created on 2024/2/19
+ */
+public class NoSuchDataException extends BaseException {
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ public NoSuchDataException(String module, String code, Object[] args, String defaultMessage) {
+ super(module, code, args, defaultMessage);
+ }
+
+ public NoSuchDataException(String module, String code, Object[] args) {
+ super(module, code, args);
+ }
+
+ public NoSuchDataException(String module, String defaultMessage) {
+ super(module, defaultMessage);
+ }
+
+ public NoSuchDataException(String code, Object[] args) {
+ super(code, args);
+ }
+
+ public NoSuchDataException(String defaultMessage) {
+ super(defaultMessage);
+ }
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/PreAuthorizeException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/PreAuthorizeException.java
index 3d420c41..ea00fe32 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/PreAuthorizeException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/PreAuthorizeException.java
@@ -1,15 +1,16 @@
package com.ruoyi.common.core.exception;
+import java.io.Serial;
+
/**
* 权限异常
- *
+ *
* @author ruoyi
*/
-public class PreAuthorizeException extends RuntimeException
-{
+public class PreAuthorizeException extends RuntimeException {
+ @Serial
private static final long serialVersionUID = 1L;
- public PreAuthorizeException()
- {
+ public PreAuthorizeException() {
}
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/ServiceException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/ServiceException.java
index 4983866d..df307859 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/ServiceException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/ServiceException.java
@@ -1,12 +1,14 @@
package com.ruoyi.common.core.exception;
+import java.io.Serial;
+
/**
* 业务异常
- *
+ *
* @author ruoyi
*/
-public final class ServiceException extends RuntimeException
-{
+public final class ServiceException extends RuntimeException {
+ @Serial
private static final long serialVersionUID = 1L;
/**
@@ -21,53 +23,43 @@ public final class ServiceException extends RuntimeException
/**
* 错误明细,内部调试错误
- *
- * 和 {@link CommonResult#getDetailMessage()} 一致的设计
*/
private String detailMessage;
/**
* 空构造方法,避免反序列化问题
*/
- public ServiceException()
- {
+ public ServiceException() {
}
- public ServiceException(String message)
- {
+ public ServiceException(String message) {
this.message = message;
}
- public ServiceException(String message, Integer code)
- {
+ public ServiceException(String message, Integer code) {
this.message = message;
this.code = code;
}
- public String getDetailMessage()
- {
+ public String getDetailMessage() {
return detailMessage;
}
@Override
- public String getMessage()
- {
+ public String getMessage() {
return message;
}
- public Integer getCode()
- {
+ public Integer getCode() {
return code;
}
- public ServiceException setMessage(String message)
- {
+ public ServiceException setMessage(String message) {
this.message = message;
return this;
}
- public ServiceException setDetailMessage(String detailMessage)
- {
+ public ServiceException setDetailMessage(String detailMessage) {
this.detailMessage = detailMessage;
return this;
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/UtilException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/UtilException.java
index a1c16b53..028cac72 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/UtilException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/UtilException.java
@@ -1,26 +1,25 @@
package com.ruoyi.common.core.exception;
+import java.io.Serial;
+
/**
* 工具类异常
- *
+ *
* @author ruoyi
*/
-public class UtilException extends RuntimeException
-{
+public class UtilException extends RuntimeException {
+ @Serial
private static final long serialVersionUID = 8247610319171014183L;
- public UtilException(Throwable e)
- {
+ public UtilException(Throwable e) {
super(e.getMessage(), e);
}
- public UtilException(String message)
- {
+ public UtilException(String message) {
super(message);
}
- public UtilException(String message, Throwable throwable)
- {
+ public UtilException(String message, Throwable throwable) {
super(message, throwable);
}
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/base/BaseException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/base/BaseException.java
index a73dda62..1378b715 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/base/BaseException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/base/BaseException.java
@@ -14,22 +14,22 @@ public class BaseException extends RuntimeException {
/**
* 所属模块
*/
- private final String module;
+ protected final String module;
/**
* 错误码
*/
- private final String code;
+ protected final String code;
/**
* 错误码对应的参数
*/
- private final Object[] args;
+ protected final Object[] args;
/**
* 错误消息
*/
- private final String defaultMessage;
+ protected final String defaultMessage;
public BaseException(String module, String code, Object[] args, String defaultMessage) {
this.module = module;
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/job/TaskException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/job/TaskException.java
index c98397c1..2375de25 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/job/TaskException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/job/TaskException.java
@@ -1,34 +1,37 @@
package com.ruoyi.common.core.exception.job;
+import java.io.Serial;
+
/**
* 计划策略异常
- *
+ *
* @author ruoyi
*/
-public class TaskException extends Exception
-{
+public class TaskException extends Exception {
+ @Serial
private static final long serialVersionUID = 1L;
- private Code code;
+ private final Code code;
- public TaskException(String msg, Code code)
- {
+ public TaskException(String msg, Code code) {
this(msg, code, null);
}
- public TaskException(String msg, Code code, Exception nestedEx)
- {
+ public TaskException(String msg, Code code, Exception nestedEx) {
super(msg, nestedEx);
this.code = code;
}
- public Code getCode()
- {
+ public Code getCode() {
return code;
}
- public enum Code
- {
- TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE
+ public enum Code {
+ TASK_EXISTS,
+ NO_TASK_EXISTS,
+ TASK_ALREADY_STARTED,
+ UNKNOWN,
+ CONFIG_ERROR,
+ TASK_NODE_NOT_AVAILABLE
}
}
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/snowflake/SnowFlakeIdGenerator.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/snowflake/SnowFlakeIdGenerator.java
index 3c7a7273..89b2ea8b 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/snowflake/SnowFlakeIdGenerator.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/snowflake/SnowFlakeIdGenerator.java
@@ -23,7 +23,7 @@ public class SnowFlakeIdGenerator {
*/
private static SequenceBuilder defaultBuilder() {
return SequenceBuilder.builder()
- .setTwepoch(1657864986440L) //起始时间戳
+ .setTwepoch(1657864986451L) //起始时间戳
.setTimestampBits(40L) //时间戳的bit位数
.setDatacenterIdBits(1L) //数据中心的bit位数
.setWorkerIdBits(2L) //机器id的bit位数
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
index 2d3ec8e3..79c80c63 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
@@ -1,15 +1,13 @@
package com.ruoyi.common.security.utils;
-import jakarta.servlet.http.HttpServletRequest;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.TokenConstants;
import com.ruoyi.common.core.context.SecurityContextHolder;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.api.model.LoginUser;
-
-import java.util.Objects;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* 权限获取工具类
@@ -54,13 +52,16 @@ public class SecurityUtils {
* 获取请求token
*/
public static String getToken() {
- return getToken(Objects.requireNonNull(ServletUtils.getRequest()));
+ return getToken(ServletUtils.getRequest());
}
/**
* 根据request获取请求token
*/
public static String getToken(HttpServletRequest request) {
+ if (request == null) {
+ return null;
+ }
// 从header获取token标识
String token = request.getHeader(TokenConstants.AUTHENTICATION);
return replaceTokenPrefix(token);
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtilsExt.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtilsExt.java
index 001dddf6..fb8aa411 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtilsExt.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtilsExt.java
@@ -2,7 +2,6 @@ package com.ruoyi.common.security.utils;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.context.SecurityContextHolder;
-import com.ruoyi.common.core.exception.auth.LoginExpiredException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.system.api.model.LoginUser;
@@ -18,10 +17,7 @@ public class SecurityUtilsExt {
*/
public static Long getUserIdFromRedis() {
LoginUser loginUser = getLoginUserFromRedis();
- if (loginUser == null) {
- throw new LoginExpiredException("用户登录已过期,请重新登录");
- }
- return loginUser.getUserid();
+ return loginUser == null ? null : loginUser.getUserid();
}
public static String getUserIdStr() {
@@ -34,8 +30,7 @@ public class SecurityUtilsExt {
*/
public static String getUsernameFromRedis() {
LoginUser loginUser = getLoginUserFromRedis();
- assert loginUser != null;
- return loginUser.getUsername();
+ return loginUser == null ? "UNKNOWN" : loginUser.getUsername();
}
/**
diff --git a/ruoyi-common/ruoyi-common-services/pom.xml b/ruoyi-common/ruoyi-common-services/pom.xml
new file mode 100644
index 00000000..3f84f315
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+ com.ruoyi
+ ruoyi-common
+ 3.6.3
+
+
+ ruoyi-common-services
+
+
+ ruoyi-common-services共通业务
+
+
+
+
+
+ com.ruoyi
+ ruoyi-common-log
+
+
+ org.springframework
+ spring-webmvc
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/ISysSequenceService.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/ISysSequenceService.java
new file mode 100644
index 00000000..a3da4bea
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/ISysSequenceService.java
@@ -0,0 +1,34 @@
+package com.ruoyi.common.services;
+
+import com.ruoyi.common.services.constants.SeqType;
+
+/**
+ * 序列号生成的业务接口
+ *
+ * @author Alan Scipio
+ * created on 2024/2/18
+ */
+public interface ISysSequenceService {
+
+ /**
+ * 获取下一个序列号
+ *
+ * @param seqDistCd 序列号识别码
+ * @param update 是否更新序列号到DB(不更新就相当于预览)
+ * @return 下一个序列号
+ */
+ String getNextSequence(String seqDistCd, boolean update);
+
+ default String getNextSequence(String seqDistCd) {
+ return getNextSequence(seqDistCd, true);
+ }
+
+ default String getNextSequence(SeqType seqType, boolean update) {
+ return getNextSequence(seqType.getSeqDistCd(), update);
+ }
+
+ default String getNextSequence(SeqType seqType) {
+ return getNextSequence(seqType, true);
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/SysSequenceServiceImpl.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/SysSequenceServiceImpl.java
new file mode 100644
index 00000000..64a25055
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/SysSequenceServiceImpl.java
@@ -0,0 +1,68 @@
+package com.ruoyi.common.services;
+
+import com.ruoyi.common.core.exception.NoSuchDataException;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.uuid.snowflake.SnowFlakeIdGenerator;
+import com.ruoyi.common.services.domain.SysSeqResult;
+import com.ruoyi.common.services.domain.vo.SeqGenResult;
+import com.ruoyi.common.services.domain.vo.SeqVo;
+import com.ruoyi.common.services.mapper.SysSeqResultMapper;
+import com.ruoyi.common.services.mapper.SysSequenceExtMapper;
+import com.ruoyi.common.services.sequence.ISequenceGenerator;
+import com.ruoyi.common.services.sequence.SequenceConfig;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+/**
+ * 序列号生成的业务接口
+ *
+ * @author Alan Scipio
+ * created on 2024/2/18
+ */
+@Service
+public class SysSequenceServiceImpl implements ISysSequenceService {
+
+ @Resource
+ private SequenceConfig sequenceConfig;
+ @Resource
+ private SysSequenceExtMapper extMapper;
+ @Resource
+ private SysSeqResultMapper resultMapper;
+
+ @Override
+ public String getNextSequence(String seqDistCd, boolean update) {
+ if (StringUtils.isBlank(seqDistCd)) {
+ throw new IllegalArgumentException("seqDistCd can not be blank");
+ }
+ //查询规则和实绩(第一次生成的话实绩为空)
+ SeqVo seqVo = extMapper.selectMaxSeq(seqDistCd);
+ if (seqVo == null) {
+ throw new NoSuchDataException("seqGen", "No sequence rule found by seqDistCd: [" + seqDistCd + "]");
+ }
+ //检查规则是否启用
+ if (!seqVo.isEnable()) {
+ return null;
+ }
+ //获取生成器
+ ISequenceGenerator generator;
+ if (StringUtils.isNotBlank(seqVo.getGeneratorName())) {
+ generator = sequenceConfig.getOrCreateGenerator(seqVo.getGeneratorName());
+ } else {
+ generator = sequenceConfig.getDefaultGenerator();
+ }
+ //生成序列号
+ SeqGenResult result = generator.nextSequenceGen(seqVo, null);
+ //更新记录
+ if (update) {
+ SysSeqResult updateRecord = result.getUpdateRecord();
+ if (result.getSeqId() == null) {
+ updateRecord.setSeqId(SnowFlakeIdGenerator.nextIdLong());
+ resultMapper.insertSelective(updateRecord);
+ } else {
+ resultMapper.updateByPrimaryKeySelective(updateRecord);
+ }
+ }
+ return result.getSequenceResult();
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/config/ServicesConfig.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/config/ServicesConfig.java
new file mode 100644
index 00000000..f3ad0f06
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/config/ServicesConfig.java
@@ -0,0 +1,18 @@
+package com.ruoyi.common.services.config;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 本模块全局配置
+ *
+ * @author Alan Scipio
+ * created on 2024/2/19
+ */
+@ComponentScan("com.ruoyi.common.services")
+@Configuration
+public class ServicesConfig {
+
+
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/constants/SeqType.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/constants/SeqType.java
new file mode 100644
index 00000000..a472ec9b
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/constants/SeqType.java
@@ -0,0 +1,33 @@
+package com.ruoyi.common.services.constants;
+
+import com.ruoyi.common.core.constant.IEnum;
+import lombok.Getter;
+
+/**
+ * @author Alan Scipio
+ * created on 2024/2/18
+ */
+@Getter
+public enum SeqType implements IEnum {
+
+ UNIT_CD(1, "UNIT", "单位代码"),
+
+ GOODE_TYPE_CD(2, "GT", "商品类型代码"),
+
+ WHS_CD(3, "WHS", "仓库代码"),
+
+ ;
+
+ private final int code;
+
+ private final String seqDistCd;
+
+ private final String name;
+
+ SeqType(int code, String seqDistCd, String name) {
+ this.code = code;
+ this.seqDistCd = seqDistCd;
+ this.name = name;
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqResult.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqResult.java
new file mode 100644
index 00000000..a5ceb2aa
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqResult.java
@@ -0,0 +1,201 @@
+package com.ruoyi.common.services.domain;
+
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * This class was generated by MyBatis Generator.
+ *
+ *
+ * - Table: sys_seq_result
+ * - Remarks: 序列号生成记录表
+ *
+ *
+ * @author ryas
+ * created on 2024-02-19
+ */
+public class SysSeqResult extends BaseEntity implements Serializable {
+ /**
+ * 序列号ID
+ */
+ private Long seqId;
+
+ /**
+ * 序列号识别码
+ */
+ private String seqDistCd;
+
+ /**
+ * 前缀
+ */
+ private String prefix;
+
+ /**
+ * 分隔符1
+ */
+ private String separator1;
+
+ /**
+ * 日期值
+ */
+ private String dateVal;
+
+ /**
+ * 分隔符2
+ */
+ private String separator2;
+
+ /**
+ * 当前序列号
+ */
+ private Integer seqNo;
+
+ /**
+ * 备注1
+ */
+ private String remark1;
+
+ /**
+ * 备注2
+ */
+ private String remark2;
+
+ /**
+ * 备注3
+ */
+ private String remark3;
+
+ /**
+ * 备注4
+ */
+ private String remark4;
+
+ /**
+ * 备注5
+ */
+ private String remark5;
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ public Long getSeqId() {
+ return seqId;
+ }
+
+ public void setSeqId(Long seqId) {
+ this.seqId = seqId;
+ }
+
+ public String getSeqDistCd() {
+ return seqDistCd;
+ }
+
+ public void setSeqDistCd(String seqDistCd) {
+ this.seqDistCd = seqDistCd == null ? null : seqDistCd.trim();
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public void setPrefix(String prefix) {
+ this.prefix = prefix == null ? null : prefix.trim();
+ }
+
+ public String getSeparator1() {
+ return separator1;
+ }
+
+ public void setSeparator1(String separator1) {
+ this.separator1 = separator1 == null ? null : separator1.trim();
+ }
+
+ public String getDateVal() {
+ return dateVal;
+ }
+
+ public void setDateVal(String dateVal) {
+ this.dateVal = dateVal == null ? null : dateVal.trim();
+ }
+
+ public String getSeparator2() {
+ return separator2;
+ }
+
+ public void setSeparator2(String separator2) {
+ this.separator2 = separator2 == null ? null : separator2.trim();
+ }
+
+ public Integer getSeqNo() {
+ return seqNo;
+ }
+
+ public void setSeqNo(Integer seqNo) {
+ this.seqNo = seqNo;
+ }
+
+ public String getRemark1() {
+ return remark1;
+ }
+
+ public void setRemark1(String remark1) {
+ this.remark1 = remark1 == null ? null : remark1.trim();
+ }
+
+ public String getRemark2() {
+ return remark2;
+ }
+
+ public void setRemark2(String remark2) {
+ this.remark2 = remark2 == null ? null : remark2.trim();
+ }
+
+ public String getRemark3() {
+ return remark3;
+ }
+
+ public void setRemark3(String remark3) {
+ this.remark3 = remark3 == null ? null : remark3.trim();
+ }
+
+ public String getRemark4() {
+ return remark4;
+ }
+
+ public void setRemark4(String remark4) {
+ this.remark4 = remark4 == null ? null : remark4.trim();
+ }
+
+ public String getRemark5() {
+ return remark5;
+ }
+
+ public void setRemark5(String remark5) {
+ this.remark5 = remark5 == null ? null : remark5.trim();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName());
+ sb.append(" [");
+ sb.append("Hash = ").append(hashCode());
+ sb.append(", seqId=").append(seqId);
+ sb.append(", seqDistCd=").append(seqDistCd);
+ sb.append(", prefix=").append(prefix);
+ sb.append(", separator1=").append(separator1);
+ sb.append(", dateVal=").append(dateVal);
+ sb.append(", separator2=").append(separator2);
+ sb.append(", seqNo=").append(seqNo);
+ sb.append(", remark1=").append(remark1);
+ sb.append(", remark2=").append(remark2);
+ sb.append(", remark3=").append(remark3);
+ sb.append(", remark4=").append(remark4);
+ sb.append(", remark5=").append(remark5);
+ sb.append(", serialVersionUID=").append(serialVersionUID);
+ sb.append("]");
+ return sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqRule.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqRule.java
new file mode 100644
index 00000000..2e5b7e7c
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqRule.java
@@ -0,0 +1,243 @@
+package com.ruoyi.common.services.domain;
+
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * This class was generated by MyBatis Generator.
+ *
+ *
+ * - Table: sys_seq_rule
+ * - Remarks: 序列号生成规则表
+ *
+ *
+ * @author ryas
+ * created on 2024-02-19
+ */
+public class SysSeqRule extends BaseEntity implements Serializable {
+ /**
+ * 规则ID
+ */
+ private Long ruleId;
+
+ /**
+ * 序列号识别码
+ */
+ private String seqDistCd;
+
+ /**
+ * 规则名称
+ */
+ private String ruleName;
+
+ /**
+ * 前缀
+ */
+ private String prefix;
+
+ /**
+ * 分隔符1
+ */
+ private String separator1;
+
+ /**
+ * 日期格式
+ */
+ private String dateFormat;
+
+ /**
+ * 序列号数字部分的最小位数,不足补0
+ */
+ private Integer minDigits;
+
+ /**
+ * 分隔符2
+ */
+ private String separator2;
+
+ /**
+ * 生成器名称(或类全名),自定义的生成器可忽略前面的规则自行生成
+ */
+ private String generatorName;
+
+ /**
+ * 是否启用
+ */
+ private Integer enableFlag;
+
+ /**
+ * 备注1
+ */
+ private String remark1;
+
+ /**
+ * 备注2
+ */
+ private String remark2;
+
+ /**
+ * 备注3
+ */
+ private String remark3;
+
+ /**
+ * 备注4
+ */
+ private String remark4;
+
+ /**
+ * 备注5
+ */
+ private String remark5;
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ public Long getRuleId() {
+ return ruleId;
+ }
+
+ public void setRuleId(Long ruleId) {
+ this.ruleId = ruleId;
+ }
+
+ public String getSeqDistCd() {
+ return seqDistCd;
+ }
+
+ public void setSeqDistCd(String seqDistCd) {
+ this.seqDistCd = seqDistCd == null ? null : seqDistCd.trim();
+ }
+
+ public String getRuleName() {
+ return ruleName;
+ }
+
+ public void setRuleName(String ruleName) {
+ this.ruleName = ruleName == null ? null : ruleName.trim();
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public void setPrefix(String prefix) {
+ this.prefix = prefix == null ? null : prefix.trim();
+ }
+
+ public String getSeparator1() {
+ return separator1;
+ }
+
+ public void setSeparator1(String separator1) {
+ this.separator1 = separator1 == null ? null : separator1.trim();
+ }
+
+ public String getDateFormat() {
+ return dateFormat;
+ }
+
+ public void setDateFormat(String dateFormat) {
+ this.dateFormat = dateFormat == null ? null : dateFormat.trim();
+ }
+
+ public Integer getMinDigits() {
+ return minDigits;
+ }
+
+ public void setMinDigits(Integer minDigits) {
+ this.minDigits = minDigits;
+ }
+
+ public String getSeparator2() {
+ return separator2;
+ }
+
+ public void setSeparator2(String separator2) {
+ this.separator2 = separator2 == null ? null : separator2.trim();
+ }
+
+ public String getGeneratorName() {
+ return generatorName;
+ }
+
+ public void setGeneratorName(String generatorName) {
+ this.generatorName = generatorName == null ? null : generatorName.trim();
+ }
+
+ public Integer getEnableFlag() {
+ return enableFlag;
+ }
+
+ public void setEnableFlag(Integer enableFlag) {
+ this.enableFlag = enableFlag;
+ }
+
+ public String getRemark1() {
+ return remark1;
+ }
+
+ public void setRemark1(String remark1) {
+ this.remark1 = remark1 == null ? null : remark1.trim();
+ }
+
+ public String getRemark2() {
+ return remark2;
+ }
+
+ public void setRemark2(String remark2) {
+ this.remark2 = remark2 == null ? null : remark2.trim();
+ }
+
+ public String getRemark3() {
+ return remark3;
+ }
+
+ public void setRemark3(String remark3) {
+ this.remark3 = remark3 == null ? null : remark3.trim();
+ }
+
+ public String getRemark4() {
+ return remark4;
+ }
+
+ public void setRemark4(String remark4) {
+ this.remark4 = remark4 == null ? null : remark4.trim();
+ }
+
+ public String getRemark5() {
+ return remark5;
+ }
+
+ public void setRemark5(String remark5) {
+ this.remark5 = remark5 == null ? null : remark5.trim();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName());
+ sb.append(" [");
+ sb.append("Hash = ").append(hashCode());
+ sb.append(", ruleId=").append(ruleId);
+ sb.append(", seqDistCd=").append(seqDistCd);
+ sb.append(", ruleName=").append(ruleName);
+ sb.append(", prefix=").append(prefix);
+ sb.append(", separator1=").append(separator1);
+ sb.append(", dateFormat=").append(dateFormat);
+ sb.append(", minDigits=").append(minDigits);
+ sb.append(", separator2=").append(separator2);
+ sb.append(", generatorName=").append(generatorName);
+ sb.append(", enableFlag=").append(enableFlag);
+ sb.append(", remark1=").append(remark1);
+ sb.append(", remark2=").append(remark2);
+ sb.append(", remark3=").append(remark3);
+ sb.append(", remark4=").append(remark4);
+ sb.append(", remark5=").append(remark5);
+ sb.append(", serialVersionUID=").append(serialVersionUID);
+ sb.append("]");
+ return sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/vo/SeqGenResult.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/vo/SeqGenResult.java
new file mode 100644
index 00000000..bdf52305
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/vo/SeqGenResult.java
@@ -0,0 +1,65 @@
+package com.ruoyi.common.services.domain.vo;
+
+import com.ruoyi.common.services.domain.SysSeqResult;
+import lombok.Data;
+
+/**
+ * @author Alan Scipio
+ * created on 2024/2/19
+ */
+@Data
+public class SeqGenResult {
+
+ /**
+ * 序列号实绩ID
+ */
+ private Long seqId;
+
+ /**
+ * 序列号识别码
+ */
+ private String seqDistCd;
+
+ /**
+ * 前缀
+ */
+ private String prefix;
+
+ /**
+ * 分隔符1
+ */
+ private String separator1;
+
+ /**
+ * 日期值
+ */
+ private String dateVal;
+
+ /**
+ * 分隔符2
+ */
+ private String separator2;
+
+ /**
+ * 当前序列号
+ */
+ private Integer seqNo;
+
+ /**
+ * 完整生成的序列号结果
+ */
+ private String sequenceResult;
+
+ public SysSeqResult getUpdateRecord() {
+ SysSeqResult result = new SysSeqResult();
+ result.setSeqId(seqId);
+ result.setSeqDistCd(seqDistCd);
+ result.setPrefix(prefix);
+ result.setSeparator1(separator1);
+ result.setDateVal(dateVal);
+ result.setSeparator2(separator2);
+ result.setSeqNo(seqNo);
+ return result;
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/vo/SeqVo.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/vo/SeqVo.java
new file mode 100644
index 00000000..3df8bb03
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/vo/SeqVo.java
@@ -0,0 +1,81 @@
+package com.ruoyi.common.services.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @author Alan Scipio
+ * created on 2024/2/19
+ */
+@Data
+public class SeqVo {
+
+ /**
+ * 规则ID
+ */
+ private Long ruleId;
+
+ /**
+ * 序列号实绩ID
+ */
+ private Long seqId;
+
+ /**
+ * 序列号识别码
+ */
+ private String seqDistCd;
+
+ /**
+ * 规则名称
+ */
+ private String ruleName;
+
+ /**
+ * 前缀
+ */
+ private String prefix;
+
+ /**
+ * 分隔符1
+ */
+ private String separator1;
+
+ /**
+ * 日期格式
+ */
+ private String dateFormat;
+
+ /**
+ * 序列号数字部分的最小位数,不足补0
+ */
+ private Integer minDigits;
+
+ /**
+ * 分隔符2
+ */
+ private String separator2;
+
+ /**
+ * 生成器名称(或类全名),自定义的生成器可忽略前面的规则自行生成
+ */
+ private String generatorName;
+
+ /**
+ * 是否启用
+ */
+ private Integer enableFlag;
+
+ /**
+ * 日期值
+ */
+ private String dateVal;
+
+ /**
+ * 当前序列号
+ */
+ private Integer seqNo;
+
+ public boolean isEnable() {
+ return enableFlag != null && enableFlag == 1;
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqResultDynamicSqlSupport.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqResultDynamicSqlSupport.java
new file mode 100644
index 00000000..bec57087
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqResultDynamicSqlSupport.java
@@ -0,0 +1,135 @@
+package com.ruoyi.common.services.mapper;
+
+import java.sql.JDBCType;
+import java.util.Date;
+import org.mybatis.dynamic.sql.AliasableSqlTable;
+import org.mybatis.dynamic.sql.SqlColumn;
+
+public final class SysSeqResultDynamicSqlSupport {
+ public static final SysSeqResult sysSeqResult = new SysSeqResult();
+
+ /**
+ * 序列号ID
+ */
+ public static final SqlColumn seqId = sysSeqResult.seqId;
+
+ /**
+ * 序列号识别码
+ */
+ public static final SqlColumn seqDistCd = sysSeqResult.seqDistCd;
+
+ /**
+ * 前缀
+ */
+ public static final SqlColumn prefix = sysSeqResult.prefix;
+
+ /**
+ * 分隔符1
+ */
+ public static final SqlColumn separator1 = sysSeqResult.separator1;
+
+ /**
+ * 日期值
+ */
+ public static final SqlColumn dateVal = sysSeqResult.dateVal;
+
+ /**
+ * 分隔符2
+ */
+ public static final SqlColumn separator2 = sysSeqResult.separator2;
+
+ /**
+ * 当前序列号
+ */
+ public static final SqlColumn seqNo = sysSeqResult.seqNo;
+
+ /**
+ * 备注1
+ */
+ public static final SqlColumn remark1 = sysSeqResult.remark1;
+
+ /**
+ * 备注2
+ */
+ public static final SqlColumn remark2 = sysSeqResult.remark2;
+
+ /**
+ * 备注3
+ */
+ public static final SqlColumn remark3 = sysSeqResult.remark3;
+
+ /**
+ * 备注4
+ */
+ public static final SqlColumn remark4 = sysSeqResult.remark4;
+
+ /**
+ * 备注5
+ */
+ public static final SqlColumn remark5 = sysSeqResult.remark5;
+
+ /**
+ * 创建者
+ */
+ public static final SqlColumn createBy = sysSeqResult.createBy;
+
+ /**
+ * 创建时间
+ */
+ public static final SqlColumn createTime = sysSeqResult.createTime;
+
+ /**
+ * 更新者
+ */
+ public static final SqlColumn updateBy = sysSeqResult.updateBy;
+
+ /**
+ * 更新时间
+ */
+ public static final SqlColumn updateTime = sysSeqResult.updateTime;
+
+ /**
+ * 备注
+ */
+ public static final SqlColumn remark = sysSeqResult.remark;
+
+ public static final class SysSeqResult extends AliasableSqlTable {
+ public final SqlColumn seqId = column("seq_id", JDBCType.BIGINT);
+
+ public final SqlColumn seqDistCd = column("seq_dist_cd", JDBCType.VARCHAR);
+
+ public final SqlColumn prefix = column("prefix", JDBCType.VARCHAR);
+
+ public final SqlColumn separator1 = column("separator1", JDBCType.VARCHAR);
+
+ public final SqlColumn dateVal = column("date_val", JDBCType.VARCHAR);
+
+ public final SqlColumn separator2 = column("separator2", JDBCType.VARCHAR);
+
+ public final SqlColumn seqNo = column("seq_no", JDBCType.INTEGER);
+
+ public final SqlColumn remark1 = column("remark_1", JDBCType.VARCHAR);
+
+ public final SqlColumn remark2 = column("remark_2", JDBCType.VARCHAR);
+
+ public final SqlColumn remark3 = column("remark_3", JDBCType.VARCHAR);
+
+ public final SqlColumn remark4 = column("remark_4", JDBCType.VARCHAR);
+
+ public final SqlColumn remark5 = column("remark_5", JDBCType.VARCHAR);
+
+ public final SqlColumn createBy = column("create_by", JDBCType.VARCHAR);
+
+ public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP);
+
+ public final SqlColumn updateBy = column("update_by", JDBCType.VARCHAR);
+
+ public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP);
+
+ public final SqlColumn remark = column("remark", JDBCType.VARCHAR);
+
+ public SysSeqResult() {
+ super("sys_seq_result", SysSeqResult::new);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqResultMapper.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqResultMapper.java
new file mode 100644
index 00000000..ed52f9b1
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqResultMapper.java
@@ -0,0 +1,247 @@
+package com.ruoyi.common.services.mapper;
+
+import com.ruoyi.common.security.utils.SecurityUtilsExt;
+import com.ruoyi.common.services.domain.SysSeqResult;
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.type.JdbcType;
+import org.mybatis.dynamic.sql.BasicColumn;
+import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter;
+import org.mybatis.dynamic.sql.select.CountDSLCompleter;
+import org.mybatis.dynamic.sql.select.SelectDSLCompleter;
+import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
+import org.mybatis.dynamic.sql.update.UpdateDSL;
+import org.mybatis.dynamic.sql.update.UpdateDSLCompleter;
+import org.mybatis.dynamic.sql.update.UpdateModel;
+import org.mybatis.dynamic.sql.util.SqlProviderAdapter;
+import org.mybatis.dynamic.sql.util.mybatis3.*;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+
+import static com.ruoyi.common.services.mapper.SysSeqResultDynamicSqlSupport.*;
+import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;
+
+@Mapper
+public interface SysSeqResultMapper extends CommonCountMapper, CommonDeleteMapper, CommonInsertMapper, CommonUpdateMapper {
+ BasicColumn[] selectList = BasicColumn.columnList(seqId, seqDistCd, prefix, separator1, dateVal, separator2, seqNo, remark1, remark2, remark3, remark4, remark5, createBy, createTime, updateBy, updateTime, remark);
+
+ @SelectProvider(type=SqlProviderAdapter.class, method="select")
+ @Results(id="SysSeqResultResult", value = {
+ @Result(column="seq_id", property="seqId", jdbcType=JdbcType.BIGINT, id=true),
+ @Result(column="seq_dist_cd", property="seqDistCd", jdbcType=JdbcType.VARCHAR),
+ @Result(column="prefix", property="prefix", jdbcType=JdbcType.VARCHAR),
+ @Result(column="separator1", property="separator1", jdbcType=JdbcType.VARCHAR),
+ @Result(column="date_val", property="dateVal", jdbcType=JdbcType.VARCHAR),
+ @Result(column="separator2", property="separator2", jdbcType=JdbcType.VARCHAR),
+ @Result(column="seq_no", property="seqNo", jdbcType=JdbcType.INTEGER),
+ @Result(column="remark_1", property="remark1", jdbcType=JdbcType.VARCHAR),
+ @Result(column="remark_2", property="remark2", jdbcType=JdbcType.VARCHAR),
+ @Result(column="remark_3", property="remark3", jdbcType=JdbcType.VARCHAR),
+ @Result(column="remark_4", property="remark4", jdbcType=JdbcType.VARCHAR),
+ @Result(column="remark_5", property="remark5", jdbcType=JdbcType.VARCHAR),
+ @Result(column="create_by", property="createBy", jdbcType=JdbcType.VARCHAR),
+ @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
+ @Result(column="update_by", property="updateBy", jdbcType=JdbcType.VARCHAR),
+ @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
+ @Result(column="remark", property="remark", jdbcType=JdbcType.VARCHAR)
+ })
+ List selectMany(SelectStatementProvider selectStatement);
+
+ @SelectProvider(type=SqlProviderAdapter.class, method="select")
+ @ResultMap("SysSeqResultResult")
+ Optional selectOne(SelectStatementProvider selectStatement);
+
+ default long count(CountDSLCompleter completer) {
+ return MyBatis3Utils.countFrom(this::count, sysSeqResult, completer);
+ }
+
+ default int delete(DeleteDSLCompleter completer) {
+ return MyBatis3Utils.deleteFrom(this::delete, sysSeqResult, completer);
+ }
+
+ default int deleteByPrimaryKey(Long seqId_) {
+ return delete(c ->
+ c.where(seqId, isEqualTo(seqId_))
+ );
+ }
+
+ default int insert(SysSeqResult row) {
+ row.setCommonForInsert(SecurityUtilsExt.getUserIdStr());
+ return MyBatis3Utils.insert(this::insert, row, sysSeqResult, c ->
+ c.map(seqId).toProperty("seqId")
+ .map(seqDistCd).toProperty("seqDistCd")
+ .map(prefix).toProperty("prefix")
+ .map(separator1).toProperty("separator1")
+ .map(dateVal).toProperty("dateVal")
+ .map(separator2).toProperty("separator2")
+ .map(seqNo).toProperty("seqNo")
+ .map(remark1).toProperty("remark1")
+ .map(remark2).toProperty("remark2")
+ .map(remark3).toProperty("remark3")
+ .map(remark4).toProperty("remark4")
+ .map(remark5).toProperty("remark5")
+ .map(createBy).toProperty("createBy")
+ .map(createTime).toProperty("createTime")
+ .map(updateBy).toProperty("updateBy")
+ .map(updateTime).toProperty("updateTime")
+ .map(remark).toProperty("remark")
+ );
+ }
+
+ default int insertMultiple(Collection records) {
+ for (SysSeqResult row : records) {
+ row.setCommonForInsert(SecurityUtilsExt.getUserIdStr());
+ }
+ return MyBatis3Utils.insertMultiple(this::insertMultiple, records, sysSeqResult, c ->
+ c.map(seqId).toProperty("seqId")
+ .map(seqDistCd).toProperty("seqDistCd")
+ .map(prefix).toProperty("prefix")
+ .map(separator1).toProperty("separator1")
+ .map(dateVal).toProperty("dateVal")
+ .map(separator2).toProperty("separator2")
+ .map(seqNo).toProperty("seqNo")
+ .map(remark1).toProperty("remark1")
+ .map(remark2).toProperty("remark2")
+ .map(remark3).toProperty("remark3")
+ .map(remark4).toProperty("remark4")
+ .map(remark5).toProperty("remark5")
+ .map(createBy).toProperty("createBy")
+ .map(createTime).toProperty("createTime")
+ .map(updateBy).toProperty("updateBy")
+ .map(updateTime).toProperty("updateTime")
+ .map(remark).toProperty("remark")
+ );
+ }
+
+ default int insertSelective(SysSeqResult row) {
+ row.setCommonForInsert(SecurityUtilsExt.getUserIdStr());
+ return MyBatis3Utils.insert(this::insert, row, sysSeqResult, c ->
+ c.map(seqId).toPropertyWhenPresent("seqId", row::getSeqId)
+ .map(seqDistCd).toPropertyWhenPresent("seqDistCd", row::getSeqDistCd)
+ .map(prefix).toPropertyWhenPresent("prefix", row::getPrefix)
+ .map(separator1).toPropertyWhenPresent("separator1", row::getSeparator1)
+ .map(dateVal).toPropertyWhenPresent("dateVal", row::getDateVal)
+ .map(separator2).toPropertyWhenPresent("separator2", row::getSeparator2)
+ .map(seqNo).toPropertyWhenPresent("seqNo", row::getSeqNo)
+ .map(remark1).toPropertyWhenPresent("remark1", row::getRemark1)
+ .map(remark2).toPropertyWhenPresent("remark2", row::getRemark2)
+ .map(remark3).toPropertyWhenPresent("remark3", row::getRemark3)
+ .map(remark4).toPropertyWhenPresent("remark4", row::getRemark4)
+ .map(remark5).toPropertyWhenPresent("remark5", row::getRemark5)
+ .map(createBy).toPropertyWhenPresent("createBy", row::getCreateBy)
+ .map(createTime).toPropertyWhenPresent("createTime", row::getCreateTime)
+ .map(updateBy).toPropertyWhenPresent("updateBy", row::getUpdateBy)
+ .map(updateTime).toPropertyWhenPresent("updateTime", row::getUpdateTime)
+ .map(remark).toPropertyWhenPresent("remark", row::getRemark)
+ );
+ }
+
+ default Optional selectOne(SelectDSLCompleter completer) {
+ return MyBatis3Utils.selectOne(this::selectOne, selectList, sysSeqResult, completer);
+ }
+
+ default List select(SelectDSLCompleter completer) {
+ return MyBatis3Utils.selectList(this::selectMany, selectList, sysSeqResult, completer);
+ }
+
+ default List selectDistinct(SelectDSLCompleter completer) {
+ return MyBatis3Utils.selectDistinct(this::selectMany, selectList, sysSeqResult, completer);
+ }
+
+ default Optional selectByPrimaryKey(Long seqId_) {
+ return selectOne(c ->
+ c.where(seqId, isEqualTo(seqId_))
+ );
+ }
+
+ default int update(UpdateDSLCompleter completer) {
+ return MyBatis3Utils.update(this::update, sysSeqResult, completer);
+ }
+
+ static UpdateDSL updateAllColumns(SysSeqResult row, UpdateDSL dsl) {
+ return dsl.set(seqId).equalTo(row::getSeqId)
+ .set(seqDistCd).equalTo(row::getSeqDistCd)
+ .set(prefix).equalTo(row::getPrefix)
+ .set(separator1).equalTo(row::getSeparator1)
+ .set(dateVal).equalTo(row::getDateVal)
+ .set(separator2).equalTo(row::getSeparator2)
+ .set(seqNo).equalTo(row::getSeqNo)
+ .set(remark1).equalTo(row::getRemark1)
+ .set(remark2).equalTo(row::getRemark2)
+ .set(remark3).equalTo(row::getRemark3)
+ .set(remark4).equalTo(row::getRemark4)
+ .set(remark5).equalTo(row::getRemark5)
+ .set(createBy).equalTo(row::getCreateBy)
+ .set(createTime).equalTo(row::getCreateTime)
+ .set(updateBy).equalTo(row::getUpdateBy)
+ .set(updateTime).equalTo(row::getUpdateTime)
+ .set(remark).equalTo(row::getRemark);
+ }
+
+ static UpdateDSL updateSelectiveColumns(SysSeqResult row, UpdateDSL dsl) {
+ row.setCommonForUpdate(SecurityUtilsExt.getUserIdStr());
+ return dsl.set(seqId).equalToWhenPresent(row::getSeqId)
+ .set(seqDistCd).equalToWhenPresent(row::getSeqDistCd)
+ .set(prefix).equalToWhenPresent(row::getPrefix)
+ .set(separator1).equalToWhenPresent(row::getSeparator1)
+ .set(dateVal).equalToWhenPresent(row::getDateVal)
+ .set(separator2).equalToWhenPresent(row::getSeparator2)
+ .set(seqNo).equalToWhenPresent(row::getSeqNo)
+ .set(remark1).equalToWhenPresent(row::getRemark1)
+ .set(remark2).equalToWhenPresent(row::getRemark2)
+ .set(remark3).equalToWhenPresent(row::getRemark3)
+ .set(remark4).equalToWhenPresent(row::getRemark4)
+ .set(remark5).equalToWhenPresent(row::getRemark5)
+ .set(createBy).equalToWhenPresent(row::getCreateBy)
+ .set(createTime).equalToWhenPresent(row::getCreateTime)
+ .set(updateBy).equalToWhenPresent(row::getUpdateBy)
+ .set(updateTime).equalToWhenPresent(row::getUpdateTime)
+ .set(remark).equalToWhenPresent(row::getRemark);
+ }
+
+ default int updateByPrimaryKey(SysSeqResult row) {
+ return update(c ->
+ c.set(seqDistCd).equalTo(row::getSeqDistCd)
+ .set(prefix).equalTo(row::getPrefix)
+ .set(separator1).equalTo(row::getSeparator1)
+ .set(dateVal).equalTo(row::getDateVal)
+ .set(separator2).equalTo(row::getSeparator2)
+ .set(seqNo).equalTo(row::getSeqNo)
+ .set(remark1).equalTo(row::getRemark1)
+ .set(remark2).equalTo(row::getRemark2)
+ .set(remark3).equalTo(row::getRemark3)
+ .set(remark4).equalTo(row::getRemark4)
+ .set(remark5).equalTo(row::getRemark5)
+ .set(createBy).equalTo(row::getCreateBy)
+ .set(createTime).equalTo(row::getCreateTime)
+ .set(updateBy).equalTo(row::getUpdateBy)
+ .set(updateTime).equalTo(row::getUpdateTime)
+ .set(remark).equalTo(row::getRemark)
+ .where(seqId, isEqualTo(row::getSeqId))
+ );
+ }
+
+ default int updateByPrimaryKeySelective(SysSeqResult row) {
+ row.setCommonForUpdate(SecurityUtilsExt.getUserIdStr());
+ return update(c ->
+ c.set(seqDistCd).equalToWhenPresent(row::getSeqDistCd)
+ .set(prefix).equalToWhenPresent(row::getPrefix)
+ .set(separator1).equalToWhenPresent(row::getSeparator1)
+ .set(dateVal).equalToWhenPresent(row::getDateVal)
+ .set(separator2).equalToWhenPresent(row::getSeparator2)
+ .set(seqNo).equalToWhenPresent(row::getSeqNo)
+ .set(remark1).equalToWhenPresent(row::getRemark1)
+ .set(remark2).equalToWhenPresent(row::getRemark2)
+ .set(remark3).equalToWhenPresent(row::getRemark3)
+ .set(remark4).equalToWhenPresent(row::getRemark4)
+ .set(remark5).equalToWhenPresent(row::getRemark5)
+ .set(createBy).equalToWhenPresent(row::getCreateBy)
+ .set(createTime).equalToWhenPresent(row::getCreateTime)
+ .set(updateBy).equalToWhenPresent(row::getUpdateBy)
+ .set(updateTime).equalToWhenPresent(row::getUpdateTime)
+ .set(remark).equalToWhenPresent(row::getRemark)
+ .where(seqId, isEqualTo(row::getSeqId))
+ );
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqRuleDynamicSqlSupport.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqRuleDynamicSqlSupport.java
new file mode 100644
index 00000000..576795af
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqRuleDynamicSqlSupport.java
@@ -0,0 +1,156 @@
+package com.ruoyi.common.services.mapper;
+
+import java.sql.JDBCType;
+import java.util.Date;
+import org.mybatis.dynamic.sql.AliasableSqlTable;
+import org.mybatis.dynamic.sql.SqlColumn;
+
+public final class SysSeqRuleDynamicSqlSupport {
+ public static final SysSeqRule sysSeqRule = new SysSeqRule();
+
+ /**
+ * 规则ID
+ */
+ public static final SqlColumn ruleId = sysSeqRule.ruleId;
+
+ /**
+ * 序列号识别码
+ */
+ public static final SqlColumn seqDistCd = sysSeqRule.seqDistCd;
+
+ /**
+ * 规则名称
+ */
+ public static final SqlColumn ruleName = sysSeqRule.ruleName;
+
+ /**
+ * 前缀
+ */
+ public static final SqlColumn prefix = sysSeqRule.prefix;
+
+ /**
+ * 分隔符1
+ */
+ public static final SqlColumn separator1 = sysSeqRule.separator1;
+
+ /**
+ * 日期格式
+ */
+ public static final SqlColumn dateFormat = sysSeqRule.dateFormat;
+
+ /**
+ * 序列号数字部分的最小位数,不足补0
+ */
+ public static final SqlColumn minDigits = sysSeqRule.minDigits;
+
+ /**
+ * 分隔符2
+ */
+ public static final SqlColumn separator2 = sysSeqRule.separator2;
+
+ /**
+ * 生成器名称(或类全名),自定义的生成器可忽略前面的规则自行生成
+ */
+ public static final SqlColumn generatorName = sysSeqRule.generatorName;
+
+ /**
+ * 是否启用
+ */
+ public static final SqlColumn enableFlag = sysSeqRule.enableFlag;
+
+ /**
+ * 备注1
+ */
+ public static final SqlColumn remark1 = sysSeqRule.remark1;
+
+ /**
+ * 备注2
+ */
+ public static final SqlColumn remark2 = sysSeqRule.remark2;
+
+ /**
+ * 备注3
+ */
+ public static final SqlColumn remark3 = sysSeqRule.remark3;
+
+ /**
+ * 备注4
+ */
+ public static final SqlColumn remark4 = sysSeqRule.remark4;
+
+ /**
+ * 备注5
+ */
+ public static final SqlColumn remark5 = sysSeqRule.remark5;
+
+ /**
+ * 创建者
+ */
+ public static final SqlColumn createBy = sysSeqRule.createBy;
+
+ /**
+ * 创建时间
+ */
+ public static final SqlColumn createTime = sysSeqRule.createTime;
+
+ /**
+ * 更新者
+ */
+ public static final SqlColumn updateBy = sysSeqRule.updateBy;
+
+ /**
+ * 更新时间
+ */
+ public static final SqlColumn updateTime = sysSeqRule.updateTime;
+
+ /**
+ * 备注
+ */
+ public static final SqlColumn remark = sysSeqRule.remark;
+
+ public static final class SysSeqRule extends AliasableSqlTable {
+ public final SqlColumn ruleId = column("rule_id", JDBCType.BIGINT);
+
+ public final SqlColumn seqDistCd = column("seq_dist_cd", JDBCType.VARCHAR);
+
+ public final SqlColumn ruleName = column("rule_name", JDBCType.VARCHAR);
+
+ public final SqlColumn prefix = column("prefix", JDBCType.VARCHAR);
+
+ public final SqlColumn separator1 = column("separator1", JDBCType.VARCHAR);
+
+ public final SqlColumn dateFormat = column("date_format", JDBCType.VARCHAR);
+
+ public final SqlColumn minDigits = column("min_digits", JDBCType.INTEGER);
+
+ public final SqlColumn separator2 = column("separator2", JDBCType.VARCHAR);
+
+ public final SqlColumn generatorName = column("generator_name", JDBCType.VARCHAR);
+
+ public final SqlColumn enableFlag = column("enable_flag", JDBCType.INTEGER);
+
+ public final SqlColumn remark1 = column("remark_1", JDBCType.VARCHAR);
+
+ public final SqlColumn remark2 = column("remark_2", JDBCType.VARCHAR);
+
+ public final SqlColumn remark3 = column("remark_3", JDBCType.VARCHAR);
+
+ public final SqlColumn remark4 = column("remark_4", JDBCType.VARCHAR);
+
+ public final SqlColumn remark5 = column("remark_5", JDBCType.VARCHAR);
+
+ public final SqlColumn createBy = column("create_by", JDBCType.VARCHAR);
+
+ public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP);
+
+ public final SqlColumn updateBy = column("update_by", JDBCType.VARCHAR);
+
+ public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP);
+
+ public final SqlColumn remark = column("remark", JDBCType.VARCHAR);
+
+ public SysSeqRule() {
+ super("sys_seq_rule", SysSeqRule::new);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqRuleMapper.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqRuleMapper.java
new file mode 100644
index 00000000..0a58e62b
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSeqRuleMapper.java
@@ -0,0 +1,271 @@
+package com.ruoyi.common.services.mapper;
+
+import com.ruoyi.common.security.utils.SecurityUtilsExt;
+import com.ruoyi.common.services.domain.SysSeqRule;
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.type.JdbcType;
+import org.mybatis.dynamic.sql.BasicColumn;
+import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter;
+import org.mybatis.dynamic.sql.select.CountDSLCompleter;
+import org.mybatis.dynamic.sql.select.SelectDSLCompleter;
+import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
+import org.mybatis.dynamic.sql.update.UpdateDSL;
+import org.mybatis.dynamic.sql.update.UpdateDSLCompleter;
+import org.mybatis.dynamic.sql.update.UpdateModel;
+import org.mybatis.dynamic.sql.util.SqlProviderAdapter;
+import org.mybatis.dynamic.sql.util.mybatis3.*;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+
+import static com.ruoyi.common.services.mapper.SysSeqRuleDynamicSqlSupport.*;
+import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;
+
+@Mapper
+public interface SysSeqRuleMapper extends CommonCountMapper, CommonDeleteMapper, CommonInsertMapper, CommonUpdateMapper {
+ BasicColumn[] selectList = BasicColumn.columnList(ruleId, seqDistCd, ruleName, prefix, separator1, dateFormat, minDigits, separator2, generatorName, enableFlag, remark1, remark2, remark3, remark4, remark5, createBy, createTime, updateBy, updateTime, remark);
+
+ @SelectProvider(type=SqlProviderAdapter.class, method="select")
+ @Results(id="SysSeqRuleResult", value = {
+ @Result(column="rule_id", property="ruleId", jdbcType=JdbcType.BIGINT, id=true),
+ @Result(column="seq_dist_cd", property="seqDistCd", jdbcType=JdbcType.VARCHAR),
+ @Result(column="rule_name", property="ruleName", jdbcType=JdbcType.VARCHAR),
+ @Result(column="prefix", property="prefix", jdbcType=JdbcType.VARCHAR),
+ @Result(column="separator1", property="separator1", jdbcType=JdbcType.VARCHAR),
+ @Result(column="date_format", property="dateFormat", jdbcType=JdbcType.VARCHAR),
+ @Result(column="min_digits", property="minDigits", jdbcType=JdbcType.INTEGER),
+ @Result(column="separator2", property="separator2", jdbcType=JdbcType.VARCHAR),
+ @Result(column="generator_name", property="generatorName", jdbcType=JdbcType.VARCHAR),
+ @Result(column="enable_flag", property="enableFlag", jdbcType=JdbcType.INTEGER),
+ @Result(column="remark_1", property="remark1", jdbcType=JdbcType.VARCHAR),
+ @Result(column="remark_2", property="remark2", jdbcType=JdbcType.VARCHAR),
+ @Result(column="remark_3", property="remark3", jdbcType=JdbcType.VARCHAR),
+ @Result(column="remark_4", property="remark4", jdbcType=JdbcType.VARCHAR),
+ @Result(column="remark_5", property="remark5", jdbcType=JdbcType.VARCHAR),
+ @Result(column="create_by", property="createBy", jdbcType=JdbcType.VARCHAR),
+ @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
+ @Result(column="update_by", property="updateBy", jdbcType=JdbcType.VARCHAR),
+ @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
+ @Result(column="remark", property="remark", jdbcType=JdbcType.VARCHAR)
+ })
+ List selectMany(SelectStatementProvider selectStatement);
+
+ @SelectProvider(type=SqlProviderAdapter.class, method="select")
+ @ResultMap("SysSeqRuleResult")
+ Optional selectOne(SelectStatementProvider selectStatement);
+
+ default long count(CountDSLCompleter completer) {
+ return MyBatis3Utils.countFrom(this::count, sysSeqRule, completer);
+ }
+
+ default int delete(DeleteDSLCompleter completer) {
+ return MyBatis3Utils.deleteFrom(this::delete, sysSeqRule, completer);
+ }
+
+ default int deleteByPrimaryKey(Long ruleId_) {
+ return delete(c ->
+ c.where(ruleId, isEqualTo(ruleId_))
+ );
+ }
+
+ default int insert(SysSeqRule row) {
+ row.setCommonForInsert(SecurityUtilsExt.getUserIdStr());
+ return MyBatis3Utils.insert(this::insert, row, sysSeqRule, c ->
+ c.map(ruleId).toProperty("ruleId")
+ .map(seqDistCd).toProperty("seqDistCd")
+ .map(ruleName).toProperty("ruleName")
+ .map(prefix).toProperty("prefix")
+ .map(separator1).toProperty("separator1")
+ .map(dateFormat).toProperty("dateFormat")
+ .map(minDigits).toProperty("minDigits")
+ .map(separator2).toProperty("separator2")
+ .map(generatorName).toProperty("generatorName")
+ .map(enableFlag).toProperty("enableFlag")
+ .map(remark1).toProperty("remark1")
+ .map(remark2).toProperty("remark2")
+ .map(remark3).toProperty("remark3")
+ .map(remark4).toProperty("remark4")
+ .map(remark5).toProperty("remark5")
+ .map(createBy).toProperty("createBy")
+ .map(createTime).toProperty("createTime")
+ .map(updateBy).toProperty("updateBy")
+ .map(updateTime).toProperty("updateTime")
+ .map(remark).toProperty("remark")
+ );
+ }
+
+ default int insertMultiple(Collection records) {
+ for (SysSeqRule row : records) {
+ row.setCommonForInsert(SecurityUtilsExt.getUserIdStr());
+ }
+ return MyBatis3Utils.insertMultiple(this::insertMultiple, records, sysSeqRule, c ->
+ c.map(ruleId).toProperty("ruleId")
+ .map(seqDistCd).toProperty("seqDistCd")
+ .map(ruleName).toProperty("ruleName")
+ .map(prefix).toProperty("prefix")
+ .map(separator1).toProperty("separator1")
+ .map(dateFormat).toProperty("dateFormat")
+ .map(minDigits).toProperty("minDigits")
+ .map(separator2).toProperty("separator2")
+ .map(generatorName).toProperty("generatorName")
+ .map(enableFlag).toProperty("enableFlag")
+ .map(remark1).toProperty("remark1")
+ .map(remark2).toProperty("remark2")
+ .map(remark3).toProperty("remark3")
+ .map(remark4).toProperty("remark4")
+ .map(remark5).toProperty("remark5")
+ .map(createBy).toProperty("createBy")
+ .map(createTime).toProperty("createTime")
+ .map(updateBy).toProperty("updateBy")
+ .map(updateTime).toProperty("updateTime")
+ .map(remark).toProperty("remark")
+ );
+ }
+
+ default int insertSelective(SysSeqRule row) {
+ row.setCommonForInsert(SecurityUtilsExt.getUserIdStr());
+ return MyBatis3Utils.insert(this::insert, row, sysSeqRule, c ->
+ c.map(ruleId).toPropertyWhenPresent("ruleId", row::getRuleId)
+ .map(seqDistCd).toPropertyWhenPresent("seqDistCd", row::getSeqDistCd)
+ .map(ruleName).toPropertyWhenPresent("ruleName", row::getRuleName)
+ .map(prefix).toPropertyWhenPresent("prefix", row::getPrefix)
+ .map(separator1).toPropertyWhenPresent("separator1", row::getSeparator1)
+ .map(dateFormat).toPropertyWhenPresent("dateFormat", row::getDateFormat)
+ .map(minDigits).toPropertyWhenPresent("minDigits", row::getMinDigits)
+ .map(separator2).toPropertyWhenPresent("separator2", row::getSeparator2)
+ .map(generatorName).toPropertyWhenPresent("generatorName", row::getGeneratorName)
+ .map(enableFlag).toPropertyWhenPresent("enableFlag", row::getEnableFlag)
+ .map(remark1).toPropertyWhenPresent("remark1", row::getRemark1)
+ .map(remark2).toPropertyWhenPresent("remark2", row::getRemark2)
+ .map(remark3).toPropertyWhenPresent("remark3", row::getRemark3)
+ .map(remark4).toPropertyWhenPresent("remark4", row::getRemark4)
+ .map(remark5).toPropertyWhenPresent("remark5", row::getRemark5)
+ .map(createBy).toPropertyWhenPresent("createBy", row::getCreateBy)
+ .map(createTime).toPropertyWhenPresent("createTime", row::getCreateTime)
+ .map(updateBy).toPropertyWhenPresent("updateBy", row::getUpdateBy)
+ .map(updateTime).toPropertyWhenPresent("updateTime", row::getUpdateTime)
+ .map(remark).toPropertyWhenPresent("remark", row::getRemark)
+ );
+ }
+
+ default Optional selectOne(SelectDSLCompleter completer) {
+ return MyBatis3Utils.selectOne(this::selectOne, selectList, sysSeqRule, completer);
+ }
+
+ default List select(SelectDSLCompleter completer) {
+ return MyBatis3Utils.selectList(this::selectMany, selectList, sysSeqRule, completer);
+ }
+
+ default List selectDistinct(SelectDSLCompleter completer) {
+ return MyBatis3Utils.selectDistinct(this::selectMany, selectList, sysSeqRule, completer);
+ }
+
+ default Optional selectByPrimaryKey(Long ruleId_) {
+ return selectOne(c ->
+ c.where(ruleId, isEqualTo(ruleId_))
+ );
+ }
+
+ default int update(UpdateDSLCompleter completer) {
+ return MyBatis3Utils.update(this::update, sysSeqRule, completer);
+ }
+
+ static UpdateDSL updateAllColumns(SysSeqRule row, UpdateDSL dsl) {
+ return dsl.set(ruleId).equalTo(row::getRuleId)
+ .set(seqDistCd).equalTo(row::getSeqDistCd)
+ .set(ruleName).equalTo(row::getRuleName)
+ .set(prefix).equalTo(row::getPrefix)
+ .set(separator1).equalTo(row::getSeparator1)
+ .set(dateFormat).equalTo(row::getDateFormat)
+ .set(minDigits).equalTo(row::getMinDigits)
+ .set(separator2).equalTo(row::getSeparator2)
+ .set(generatorName).equalTo(row::getGeneratorName)
+ .set(enableFlag).equalTo(row::getEnableFlag)
+ .set(remark1).equalTo(row::getRemark1)
+ .set(remark2).equalTo(row::getRemark2)
+ .set(remark3).equalTo(row::getRemark3)
+ .set(remark4).equalTo(row::getRemark4)
+ .set(remark5).equalTo(row::getRemark5)
+ .set(createBy).equalTo(row::getCreateBy)
+ .set(createTime).equalTo(row::getCreateTime)
+ .set(updateBy).equalTo(row::getUpdateBy)
+ .set(updateTime).equalTo(row::getUpdateTime)
+ .set(remark).equalTo(row::getRemark);
+ }
+
+ static UpdateDSL updateSelectiveColumns(SysSeqRule row, UpdateDSL dsl) {
+ row.setCommonForUpdate(SecurityUtilsExt.getUserIdStr());
+ return dsl.set(ruleId).equalToWhenPresent(row::getRuleId)
+ .set(seqDistCd).equalToWhenPresent(row::getSeqDistCd)
+ .set(ruleName).equalToWhenPresent(row::getRuleName)
+ .set(prefix).equalToWhenPresent(row::getPrefix)
+ .set(separator1).equalToWhenPresent(row::getSeparator1)
+ .set(dateFormat).equalToWhenPresent(row::getDateFormat)
+ .set(minDigits).equalToWhenPresent(row::getMinDigits)
+ .set(separator2).equalToWhenPresent(row::getSeparator2)
+ .set(generatorName).equalToWhenPresent(row::getGeneratorName)
+ .set(enableFlag).equalToWhenPresent(row::getEnableFlag)
+ .set(remark1).equalToWhenPresent(row::getRemark1)
+ .set(remark2).equalToWhenPresent(row::getRemark2)
+ .set(remark3).equalToWhenPresent(row::getRemark3)
+ .set(remark4).equalToWhenPresent(row::getRemark4)
+ .set(remark5).equalToWhenPresent(row::getRemark5)
+ .set(createBy).equalToWhenPresent(row::getCreateBy)
+ .set(createTime).equalToWhenPresent(row::getCreateTime)
+ .set(updateBy).equalToWhenPresent(row::getUpdateBy)
+ .set(updateTime).equalToWhenPresent(row::getUpdateTime)
+ .set(remark).equalToWhenPresent(row::getRemark);
+ }
+
+ default int updateByPrimaryKey(SysSeqRule row) {
+ return update(c ->
+ c.set(seqDistCd).equalTo(row::getSeqDistCd)
+ .set(ruleName).equalTo(row::getRuleName)
+ .set(prefix).equalTo(row::getPrefix)
+ .set(separator1).equalTo(row::getSeparator1)
+ .set(dateFormat).equalTo(row::getDateFormat)
+ .set(minDigits).equalTo(row::getMinDigits)
+ .set(separator2).equalTo(row::getSeparator2)
+ .set(generatorName).equalTo(row::getGeneratorName)
+ .set(enableFlag).equalTo(row::getEnableFlag)
+ .set(remark1).equalTo(row::getRemark1)
+ .set(remark2).equalTo(row::getRemark2)
+ .set(remark3).equalTo(row::getRemark3)
+ .set(remark4).equalTo(row::getRemark4)
+ .set(remark5).equalTo(row::getRemark5)
+ .set(createBy).equalTo(row::getCreateBy)
+ .set(createTime).equalTo(row::getCreateTime)
+ .set(updateBy).equalTo(row::getUpdateBy)
+ .set(updateTime).equalTo(row::getUpdateTime)
+ .set(remark).equalTo(row::getRemark)
+ .where(ruleId, isEqualTo(row::getRuleId))
+ );
+ }
+
+ default int updateByPrimaryKeySelective(SysSeqRule row) {
+ row.setCommonForUpdate(SecurityUtilsExt.getUserIdStr());
+ return update(c ->
+ c.set(seqDistCd).equalToWhenPresent(row::getSeqDistCd)
+ .set(ruleName).equalToWhenPresent(row::getRuleName)
+ .set(prefix).equalToWhenPresent(row::getPrefix)
+ .set(separator1).equalToWhenPresent(row::getSeparator1)
+ .set(dateFormat).equalToWhenPresent(row::getDateFormat)
+ .set(minDigits).equalToWhenPresent(row::getMinDigits)
+ .set(separator2).equalToWhenPresent(row::getSeparator2)
+ .set(generatorName).equalToWhenPresent(row::getGeneratorName)
+ .set(enableFlag).equalToWhenPresent(row::getEnableFlag)
+ .set(remark1).equalToWhenPresent(row::getRemark1)
+ .set(remark2).equalToWhenPresent(row::getRemark2)
+ .set(remark3).equalToWhenPresent(row::getRemark3)
+ .set(remark4).equalToWhenPresent(row::getRemark4)
+ .set(remark5).equalToWhenPresent(row::getRemark5)
+ .set(createBy).equalToWhenPresent(row::getCreateBy)
+ .set(createTime).equalToWhenPresent(row::getCreateTime)
+ .set(updateBy).equalToWhenPresent(row::getUpdateBy)
+ .set(updateTime).equalToWhenPresent(row::getUpdateTime)
+ .set(remark).equalToWhenPresent(row::getRemark)
+ .where(ruleId, isEqualTo(row::getRuleId))
+ );
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSequenceExtMapper.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSequenceExtMapper.java
new file mode 100644
index 00000000..ef53e214
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysSequenceExtMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.common.services.mapper;
+
+import com.ruoyi.common.services.domain.vo.SeqVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author Alan Scipio
+ * created on 2024/2/18
+ */
+public interface SysSequenceExtMapper {
+
+ SeqVo selectMaxSeq(@Param("seqDistCd") String seqDistCd);
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/sequence/DefaultSequenceGenerator.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/sequence/DefaultSequenceGenerator.java
new file mode 100644
index 00000000..97a6cbb1
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/sequence/DefaultSequenceGenerator.java
@@ -0,0 +1,68 @@
+package com.ruoyi.common.services.sequence;
+
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.services.domain.vo.SeqGenResult;
+import com.ruoyi.common.services.domain.vo.SeqVo;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+
+import java.util.Date;
+
+/**
+ * 默认的序列号生成器
+ *
+ * @author Alan Scipio
+ * created on 2024/2/19
+ */
+public class DefaultSequenceGenerator implements ISequenceGenerator{
+
+ @Override
+ public SeqGenResult nextSequenceGen(@Nonnull SeqVo param, @Nullable Date date) {
+ SeqGenResult result = new SeqGenResult();
+ StringBuilder seq = new StringBuilder();
+ result.setSeqDistCd(param.getSeqDistCd());
+
+ //前缀
+ seq.append(param.getPrefix());
+ result.setPrefix(param.getPrefix());
+ //分隔符1
+ if (param.getSeparator1() != null) {
+ seq.append(param.getSeparator1());
+ result.setSeparator1(param.getSeparator1());
+ }
+ //日期
+ if (StringUtils.isNotBlank(param.getDateFormat())) {
+ if (date == null) {
+ date = new Date();
+ }
+ String dateVal = DateUtils.parseDateToStr(param.getDateFormat(), date);
+ seq.append(dateVal);
+ result.setDateVal(dateVal);
+ //日期值相同,update。否则insert
+ if (dateVal.equals(param.getDateVal())) {
+ result.setSeqId(param.getSeqId());
+ }
+ } else {
+ //没有日期值,直接根据查询出的seqId判断是insert还是update
+ result.setSeqId(param.getSeqId());
+ }
+ //分隔符2
+ if (param.getSeparator2() != null) {
+ seq.append(param.getSeparator2());
+ result.setSeparator2(param.getSeparator2());
+ }
+ //数字序号
+ int nextSeqNo = (param.getSeqNo() == null ? 0 : param.getSeqNo()) + 1;
+ if (param.getMinDigits() != null && param.getMinDigits() > 0) {
+ seq.append(String.format("%0" + param.getMinDigits() + "d", nextSeqNo));
+ } else {
+ seq.append(nextSeqNo);
+ }
+ result.setSeqNo(nextSeqNo);
+ result.setSequenceResult(seq.toString());
+
+ return result;
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/sequence/ISequenceGenerator.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/sequence/ISequenceGenerator.java
new file mode 100644
index 00000000..a3c3fb19
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/sequence/ISequenceGenerator.java
@@ -0,0 +1,26 @@
+package com.ruoyi.common.services.sequence;
+
+import com.ruoyi.common.services.domain.vo.SeqGenResult;
+import com.ruoyi.common.services.domain.vo.SeqVo;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+
+import java.util.Date;
+
+/**
+ * 序列号生成的实现接口
+ *
+ * @author Alan Scipio
+ * created on 2024/2/18
+ */
+public interface ISequenceGenerator {
+
+ /**
+ * 获取下一个序列号
+ *
+ * @param param 规则参数
+ * @param date 给定的日期(为空则使用当前日期)
+ */
+ SeqGenResult nextSequenceGen(@Nonnull SeqVo param, @Nullable Date date);
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/sequence/SequenceConfig.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/sequence/SequenceConfig.java
new file mode 100644
index 00000000..601e8c29
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/sequence/SequenceConfig.java
@@ -0,0 +1,56 @@
+package com.ruoyi.common.services.sequence;
+
+import com.ruoyi.common.core.utils.StringUtils;
+import lombok.Getter;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 序列号生成器配置
+ *
+ * @author Alan Scipio
+ * created on 2024/2/19
+ */
+@Getter
+@Component
+public class SequenceConfig {
+
+ private final Map generatorMap = new HashMap<>();
+
+ public SequenceConfig() {
+ registerGenerator(new DefaultSequenceGenerator());
+ }
+
+ public void registerGenerator(ISequenceGenerator generator) {
+ if (generator == null) {
+ throw new IllegalArgumentException("generator can not be null");
+ }
+ generatorMap.put(generator.getClass().getName(), generator);
+ }
+
+ public ISequenceGenerator getGenerator(String generatorName) {
+ return generatorMap.get(generatorName);
+ }
+
+ public ISequenceGenerator getOrCreateGenerator(String generatorName) {
+ if (StringUtils.isBlank(generatorName)) {
+ throw new IllegalArgumentException("generatorName can not be blank");
+ }
+ return generatorMap.computeIfAbsent(generatorName, name -> {
+ try {
+ ISequenceGenerator generator = (ISequenceGenerator) Class.forName(name).getDeclaredConstructor().newInstance();
+ registerGenerator(generator);
+ return generator;
+ } catch (Exception e) {
+ throw new IllegalArgumentException("generatorName: [" + name + "] can not be instantiated", e);
+ }
+ });
+ }
+
+ public ISequenceGenerator getDefaultGenerator() {
+ return generatorMap.get(DefaultSequenceGenerator.class.getName());
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-services/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-services/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 00000000..0b27523d
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+com.ruoyi.common.services.config.ServicesConfig
diff --git a/ruoyi-common/ruoyi-common-services/src/main/resources/com/ruoyi/common/services/mapper/SysSequenceExtMapper.xml b/ruoyi-common/ruoyi-common-services/src/main/resources/com/ruoyi/common/services/mapper/SysSequenceExtMapper.xml
new file mode 100644
index 00000000..a5d924a0
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-services/src/main/resources/com/ruoyi/common/services/mapper/SysSequenceExtMapper.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl-dynamic.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl-dynamic.java.vm
index 9dd58a30..afcd1e78 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl-dynamic.java.vm
+++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl-dynamic.java.vm
@@ -9,6 +9,7 @@ import com.ruoyi.common.core.utils.DateUtils;
#end
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.mybatis.dynamic.sql.where.condition.IsEqualTo;
import org.mybatis.dynamic.sql.where.condition.IsIn;
import org.mybatis.dynamic.sql.SqlBuilder;
@@ -18,7 +19,6 @@ import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
#if($table.sub)
import java.util.ArrayList;
import com.ruoyi.common.core.utils.StringUtils;
-import org.springframework.transaction.annotation.Transactional;
import ${packageName}.domain.${subClassName};
#end
import com.ruoyi.common.core.web.domain.ExtBaseEntity;
@@ -108,9 +108,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service
* @param ${className} ${functionName}
* @return 结果
*/
-#if($table.sub)
@Transactional
-#end
@Override
public int insert${ClassName}(${ClassName} ${className})
{
@@ -134,9 +132,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service
* @param ${className} ${functionName}
* @return 结果
*/
-#if($table.sub)
@Transactional
-#end
@Override
public int update${ClassName}(${ClassName} ${className})
{
@@ -158,9 +154,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service
* @param ${pkColumn.javaField}s 需要删除的${functionName}主键
* @return 结果
*/
-#if($table.sub)
@Transactional
-#end
@Override
public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s)
{
@@ -185,9 +179,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service
* @param ${pkColumn.javaField} ${functionName}主键
* @return 结果
*/
-#if($table.sub)
@Transactional
-#end
@Override
public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField})
{
diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml
index 889f8752..a0fe74e8 100644
--- a/ruoyi-modules/ruoyi-system/pom.xml
+++ b/ruoyi-modules/ruoyi-system/pom.xml
@@ -82,6 +82,12 @@
ruoyi-common-log
+
+
+ com.ruoyi
+ ruoyi-common-services
+
+
com.ruoyi
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
index 532aaa8d..6b28d314 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
@@ -1,125 +1,125 @@
package com.ruoyi.system.mapper;
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
import com.ruoyi.system.domain.SysMenu;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
* 菜单表 数据层
- *
+ *
* @author ruoyi
*/
-public interface SysMenuMapper
-{
+public interface SysMenuMapper {
/**
* 查询系统菜单列表
- *
+ *
* @param menu 菜单信息
* @return 菜单列表
*/
- public List selectMenuList(SysMenu menu);
+ List selectMenuList(SysMenu menu);
/**
* 根据用户所有权限
- *
+ *
* @return 权限列表
*/
- public List selectMenuPerms();
+ List selectMenuPerms();
/**
* 根据用户查询系统菜单列表
- *
+ *
* @param menu 菜单信息
* @return 菜单列表
*/
- public List selectMenuListByUserId(SysMenu menu);
+ List selectMenuListByUserId(SysMenu menu);
/**
* 根据角色ID查询权限
- *
+ *
* @param roleId 角色ID
* @return 权限列表
*/
- public List selectMenuPermsByRoleId(Long roleId);
+ List selectMenuPermsByRoleId(Long roleId);
/**
* 根据用户ID查询权限
- *
+ *
* @param userId 用户ID
* @return 权限列表
*/
- public List selectMenuPermsByUserId(Long userId);
+ List selectMenuPermsByUserId(Long userId);
/**
* 根据用户ID查询菜单
- *
+ *
* @return 菜单列表
*/
- public List selectMenuTreeAll();
+ List selectMenuTreeAll();
/**
* 根据用户ID查询菜单
- *
+ *
* @param userId 用户ID
* @return 菜单列表
*/
- public List selectMenuTreeByUserId(Long userId);
+ List selectMenuTreeByUserId(Long userId);
/**
* 根据角色ID查询菜单树信息
- *
- * @param roleId 角色ID
+ *
+ * @param roleId 角色ID
* @param menuCheckStrictly 菜单树选择项是否关联显示
* @return 选中菜单列表
*/
- public List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
+ List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
/**
* 根据菜单ID查询信息
- *
+ *
* @param menuId 菜单ID
* @return 菜单信息
*/
- public SysMenu selectMenuById(Long menuId);
+ SysMenu selectMenuById(Long menuId);
/**
* 是否存在菜单子节点
- *
+ *
* @param menuId 菜单ID
* @return 结果
*/
- public int hasChildByMenuId(Long menuId);
+ int hasChildByMenuId(Long menuId);
/**
* 新增菜单信息
- *
+ *
* @param menu 菜单信息
* @return 结果
*/
- public int insertMenu(SysMenu menu);
+ int insertMenu(SysMenu menu);
/**
* 修改菜单信息
- *
+ *
* @param menu 菜单信息
* @return 结果
*/
- public int updateMenu(SysMenu menu);
+ int updateMenu(SysMenu menu);
/**
* 删除菜单管理信息
- *
+ *
* @param menuId 菜单ID
* @return 结果
*/
- public int deleteMenuById(Long menuId);
+ int deleteMenuById(Long menuId);
/**
* 校验菜单名称是否唯一
- *
+ *
* @param menuName 菜单名称
* @param parentId 父菜单ID
* @return 结果
*/
- public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
+ SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
index ec8700d6..0008e286 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
@@ -1,60 +1,60 @@
package com.ruoyi.system.mapper;
-import java.util.List;
import com.ruoyi.system.domain.SysNotice;
+import java.util.List;
+
/**
* 通知公告表 数据层
- *
+ *
* @author ruoyi
*/
-public interface SysNoticeMapper
-{
+public interface SysNoticeMapper {
/**
* 查询公告信息
- *
+ *
* @param noticeId 公告ID
* @return 公告信息
*/
- public SysNotice selectNoticeById(Long noticeId);
+ SysNotice selectNoticeById(Long noticeId);
/**
* 查询公告列表
- *
+ *
* @param notice 公告信息
* @return 公告集合
*/
- public List selectNoticeList(SysNotice notice);
+ List selectNoticeList(SysNotice notice);
/**
* 新增公告
- *
+ *
* @param notice 公告信息
* @return 结果
*/
- public int insertNotice(SysNotice notice);
+ int insertNotice(SysNotice notice);
/**
* 修改公告
- *
+ *
* @param notice 公告信息
* @return 结果
*/
- public int updateNotice(SysNotice notice);
+ int updateNotice(SysNotice notice);
/**
* 批量删除公告
- *
+ *
* @param noticeId 公告ID
* @return 结果
*/
- public int deleteNoticeById(Long noticeId);
+ int deleteNoticeById(Long noticeId);
/**
* 批量删除公告信息
- *
+ *
* @param noticeIds 需要删除的公告ID
* @return 结果
*/
- public int deleteNoticeByIds(Long[] noticeIds);
+ int deleteNoticeByIds(Long[] noticeIds);
}
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
index 4e9b8cb6..8e40865f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
@@ -1,48 +1,48 @@
package com.ruoyi.system.mapper;
-import java.util.List;
import com.ruoyi.system.api.domain.SysOperLog;
+import java.util.List;
+
/**
* 操作日志 数据层
- *
+ *
* @author ruoyi
*/
-public interface SysOperLogMapper
-{
+public interface SysOperLogMapper {
/**
* 新增操作日志
- *
+ *
* @param operLog 操作日志对象
*/
- public int insertOperlog(SysOperLog operLog);
+ int insertOperlog(SysOperLog operLog);
/**
* 查询系统操作日志集合
- *
+ *
* @param operLog 操作日志对象
* @return 操作日志集合
*/
- public List selectOperLogList(SysOperLog operLog);
+ List selectOperLogList(SysOperLog operLog);
/**
* 批量删除系统操作日志
- *
+ *
* @param operIds 需要删除的操作日志ID
* @return 结果
*/
- public int deleteOperLogByIds(Long[] operIds);
+ int deleteOperLogByIds(Long[] operIds);
/**
* 查询操作日志详细
- *
+ *
* @param operId 操作ID
* @return 操作日志对象
*/
- public SysOperLog selectOperLogById(Long operId);
+ SysOperLog selectOperLogById(Long operId);
/**
* 清空操作日志
*/
- public void cleanOperLog();
+ void cleanOperLog();
}
diff --git a/ruoyi-modules/ruoyi-wms/pom.xml b/ruoyi-modules/ruoyi-wms/pom.xml
index 8bf3db04..5fbe9bc3 100644
--- a/ruoyi-modules/ruoyi-wms/pom.xml
+++ b/ruoyi-modules/ruoyi-wms/pom.xml
@@ -76,6 +76,12 @@
ruoyi-common-log
+
+
+ com.ruoyi
+ ruoyi-common-services
+
+
org.mybatis.generator
diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/GoodsTypeServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/GoodsTypeServiceImpl.java
index 02338249..49c503c2 100644
--- a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/GoodsTypeServiceImpl.java
+++ b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/GoodsTypeServiceImpl.java
@@ -2,19 +2,21 @@ package com.ruoyi.wms.service.impl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.utils.uuid.snowflake.SnowFlakeIdGenerator;
import com.ruoyi.common.core.web.domain.ExtBaseEntity;
import com.ruoyi.common.security.utils.SecurityUtilsExt;
+import com.ruoyi.common.services.ISysSequenceService;
+import com.ruoyi.common.services.constants.SeqType;
import com.ruoyi.wms.domain.GoodsType;
import com.ruoyi.wms.mapper.GoodsTypeDynamicSqlSupport;
import com.ruoyi.wms.mapper.GoodsTypeMapper;
import com.ruoyi.wms.service.IGoodsTypeService;
+import jakarta.annotation.Resource;
import org.mybatis.dynamic.sql.SqlBuilder;
import org.mybatis.dynamic.sql.render.RenderingStrategies;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
@@ -27,8 +29,11 @@ import java.util.Optional;
*/
@Service
public class GoodsTypeServiceImpl implements IGoodsTypeService {
- @Autowired
+
+ @Resource
private GoodsTypeMapper goodsTypeMapper;
+ @Resource
+ private ISysSequenceService sequenceService;
/**
* 查询物品类型管理
@@ -67,10 +72,12 @@ public class GoodsTypeServiceImpl implements IGoodsTypeService {
* @param goodsType 物品类型管理
* @return 结果
*/
+ @Transactional
@Override
public int insertGoodsType(GoodsType goodsType) {
if (StringUtils.isBlank(goodsType.getGoodsTypeCd())) {
- goodsType.setGoodsTypeCd(SnowFlakeIdGenerator.nextId());
+ String goodsTypeCd = sequenceService.getNextSequence(SeqType.GOODE_TYPE_CD);
+ goodsType.setGoodsTypeCd(goodsTypeCd);
}
return goodsTypeMapper.insertSelective(goodsType);
}
@@ -81,6 +88,7 @@ public class GoodsTypeServiceImpl implements IGoodsTypeService {
* @param goodsType 物品类型管理
* @return 结果
*/
+ @Transactional
@Override
public int updateGoodsType(GoodsType goodsType) {
return goodsTypeMapper.updateByPrimaryKeySelective(goodsType);
@@ -92,6 +100,7 @@ public class GoodsTypeServiceImpl implements IGoodsTypeService {
* @param goodsTypeCds 需要删除的物品类型管理主键
* @return 结果
*/
+ @Transactional
@Override
public int deleteGoodsTypeByGoodsTypeCds(String[] goodsTypeCds) {
String userId = SecurityUtilsExt.getUserIdStr();
@@ -111,6 +120,7 @@ public class GoodsTypeServiceImpl implements IGoodsTypeService {
* @param goodsTypeCd 物品类型管理主键
* @return 结果
*/
+ @Transactional
@Override
public int deleteGoodsTypeByGoodsTypeCd(String goodsTypeCd) {
GoodsType record = new GoodsType();
diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/UnitInfoServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/UnitInfoServiceImpl.java
index d71b0afe..e992a5fb 100644
--- a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/UnitInfoServiceImpl.java
+++ b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/UnitInfoServiceImpl.java
@@ -2,18 +2,19 @@ package com.ruoyi.wms.service.impl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.utils.uuid.snowflake.SnowFlakeIdGenerator;
import com.ruoyi.common.core.web.domain.ExtBaseEntity;
import com.ruoyi.common.security.utils.SecurityUtilsExt;
+import com.ruoyi.common.services.ISysSequenceService;
+import com.ruoyi.common.services.constants.SeqType;
import com.ruoyi.wms.domain.UnitInfo;
import com.ruoyi.wms.mapper.UnitInfoDynamicSqlSupport;
import com.ruoyi.wms.mapper.UnitInfoMapper;
import com.ruoyi.wms.service.IUnitInfoService;
+import jakarta.annotation.Resource;
import org.mybatis.dynamic.sql.SqlBuilder;
import org.mybatis.dynamic.sql.render.RenderingStrategies;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -27,8 +28,11 @@ import java.util.Optional;
*/
@Service
public class UnitInfoServiceImpl implements IUnitInfoService {
- @Autowired
+
+ @Resource
private UnitInfoMapper unitInfoMapper;
+ @Resource
+ private ISysSequenceService sequenceService;
/**
* 查询单位信息管理
@@ -69,7 +73,8 @@ public class UnitInfoServiceImpl implements IUnitInfoService {
@Override
public int insertUnitInfo(UnitInfo unitInfo) {
if (StringUtils.isBlank(unitInfo.getUnitCode())) {
- unitInfo.setUnitCode(SnowFlakeIdGenerator.nextId());
+ String unitCode = sequenceService.getNextSequence(SeqType.UNIT_CD);
+ unitInfo.setUnitCode(unitCode);
}
return unitInfoMapper.insertSelective(unitInfo);
}
diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/WarehouseInfoServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/WarehouseInfoServiceImpl.java
index 565df981..285ff2c0 100644
--- a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/WarehouseInfoServiceImpl.java
+++ b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/WarehouseInfoServiceImpl.java
@@ -2,18 +2,19 @@ package com.ruoyi.wms.service.impl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.utils.uuid.snowflake.SnowFlakeIdGenerator;
import com.ruoyi.common.core.web.domain.ExtBaseEntity;
import com.ruoyi.common.security.utils.SecurityUtilsExt;
+import com.ruoyi.common.services.ISysSequenceService;
+import com.ruoyi.common.services.constants.SeqType;
import com.ruoyi.wms.domain.WarehouseInfo;
import com.ruoyi.wms.mapper.WarehouseInfoDynamicSqlSupport;
import com.ruoyi.wms.mapper.WarehouseInfoMapper;
import com.ruoyi.wms.service.IWarehouseInfoService;
+import jakarta.annotation.Resource;
import org.mybatis.dynamic.sql.SqlBuilder;
import org.mybatis.dynamic.sql.render.RenderingStrategies;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -27,8 +28,11 @@ import java.util.Optional;
*/
@Service
public class WarehouseInfoServiceImpl implements IWarehouseInfoService {
- @Autowired
+
+ @Resource
private WarehouseInfoMapper warehouseInfoMapper;
+ @Resource
+ private ISysSequenceService sequenceService;
/**
* 查询仓库基础信息
@@ -69,7 +73,8 @@ public class WarehouseInfoServiceImpl implements IWarehouseInfoService {
@Override
public int insertWarehouseInfo(WarehouseInfo warehouseInfo) {
if (StringUtils.isBlank(warehouseInfo.getWhsCd())) {
- warehouseInfo.setWhsCd(SnowFlakeIdGenerator.nextId());
+ String whsCd = sequenceService.getNextSequence(SeqType.WHS_CD);
+ warehouseInfo.setWhsCd(whsCd);
}
return warehouseInfoMapper.insertSelective(warehouseInfo);
}
diff --git a/sql/ry-cloud-ryas.sql b/sql/ry-cloud-ryas.sql
index 07c9fc0a..e25cdd77 100644
--- a/sql/ry-cloud-ryas.sql
+++ b/sql/ry-cloud-ryas.sql
@@ -11,7 +11,7 @@
Target Server Version : 80200 (8.2.0)
File Encoding : 65001
- Date: 18/02/2024 16:52:33
+ Date: 19/02/2024 13:45:49
*/
SET NAMES utf8mb4;
@@ -43,8 +43,8 @@ CREATE TABLE `WMS_M_GOODS_TYPE_INFO` (
-- ----------------------------
-- Records of WMS_M_GOODS_TYPE_INFO
-- ----------------------------
-INSERT INTO `WMS_M_GOODS_TYPE_INFO` VALUES (100, '6448700363265', '重金属原材料', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-18 16:37:38', '1', '2024-02-18 16:37:38', NULL);
-INSERT INTO `WMS_M_GOODS_TYPE_INFO` VALUES (100, '6448704094721', '金属成品', 'qwe', NULL, NULL, NULL, NULL, 3, 0, '1', '2024-02-18 16:38:07', '1', '2024-02-18 16:38:19', NULL);
+INSERT INTO `WMS_M_GOODS_TYPE_INFO` VALUES (100, 'GT00001', '原材料', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:41:24', '1', '2024-02-19 13:41:24', NULL);
+INSERT INTO `WMS_M_GOODS_TYPE_INFO` VALUES (100, 'GT00002', '产品', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:41:39', '1', '2024-02-19 13:41:39', NULL);
-- ----------------------------
-- Table structure for WMS_M_UNIT_INFO
@@ -72,8 +72,15 @@ CREATE TABLE `WMS_M_UNIT_INFO` (
-- ----------------------------
-- Records of WMS_M_UNIT_INFO
-- ----------------------------
-INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, '6314680921729', '个', 'qwe', NULL, NULL, NULL, NULL, 2, 0, '1', '2024-02-06 13:47:11', '1', '2024-02-18 15:05:16', NULL);
-INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, '6314687617154', '把', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-06 13:48:03', '1', '2024-02-06 14:05:37', NULL);
+INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, 'UNIT00001', '个', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:37:19', '1', '2024-02-19 13:37:19', NULL);
+INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, 'UNIT00002', '包', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:37:27', '1', '2024-02-19 13:37:27', NULL);
+INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, 'UNIT00003', '托', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:37:33', '1', '2024-02-19 13:37:33', NULL);
+INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, 'UNIT00004', '台', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:37:37', '1', '2024-02-19 13:37:37', NULL);
+INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, 'UNIT00005', '辆', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:37:43', '1', '2024-02-19 13:37:43', NULL);
+INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, 'UNIT00006', 'PCS', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:37:48', '1', '2024-02-19 13:37:48', NULL);
+INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, 'UNIT00007', '把', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:38:11', '1', '2024-02-19 13:38:11', NULL);
+INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, 'UNIT00008', '根', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:38:30', '1', '2024-02-19 13:38:30', NULL);
+INSERT INTO `WMS_M_UNIT_INFO` VALUES (100, 'UNIT00009', '颗', NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:38:45', '1', '2024-02-19 13:38:45', NULL);
-- ----------------------------
-- Table structure for WMS_M_WAREHOUSE_INFO
@@ -114,7 +121,7 @@ CREATE TABLE `WMS_M_WAREHOUSE_INFO` (
-- ----------------------------
-- Records of WMS_M_WAREHOUSE_INFO
-- ----------------------------
-INSERT INTO `WMS_M_WAREHOUSE_INFO` VALUES (100, '6448763241089', '仓库1', 'NORMAL', 'WH1', 'Flat 25, 12/F apartment and floor no. Acacia Building', '', NULL, '08524785441', '200001', '', NULL, '张三', 'Singapore', 17500.000000, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-18 16:45:49', '1', '2024-02-18 16:45:49', NULL);
+INSERT INTO `WMS_M_WAREHOUSE_INFO` VALUES (100, 'WH001', '仓库1', 'OWN', 'WH1', 'Flat 25, 12/F apartment and floor no. Acacia Building', '', NULL, '08524785441', '200001', '', NULL, '张三', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, '1', '2024-02-19 13:42:34', '1', '2024-02-19 13:42:34', NULL);
-- ----------------------------
-- Table structure for gen_table
@@ -479,7 +486,7 @@ CREATE TABLE `sys_logininfor` (
PRIMARY KEY (`info_id`) USING BTREE,
INDEX `idx_sys_logininfor_s`(`status` ASC) USING BTREE,
INDEX `idx_sys_logininfor_lt`(`access_time` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 133 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统访问记录' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 134 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统访问记录' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_logininfor
@@ -668,7 +675,7 @@ CREATE TABLE `sys_oper_log` (
INDEX `idx_sys_oper_log_bt`(`business_type` ASC) USING BTREE,
INDEX `idx_sys_oper_log_s`(`status` ASC) USING BTREE,
INDEX `idx_sys_oper_log_ot`(`oper_time` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 201 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '操作日志记录' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 215 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '操作日志记录' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_oper_log
@@ -842,6 +849,73 @@ INSERT INTO `sys_role_menu` VALUES (2, 1058);
INSERT INTO `sys_role_menu` VALUES (2, 1059);
INSERT INTO `sys_role_menu` VALUES (2, 1060);
+-- ----------------------------
+-- Table structure for sys_seq_result
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_seq_result`;
+CREATE TABLE `sys_seq_result` (
+ `seq_id` bigint(20) UNSIGNED ZEROFILL NOT NULL DEFAULT 100 COMMENT '序列号ID',
+ `seq_dist_cd` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '序列号识别码',
+ `prefix` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '前缀',
+ `separator1` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分隔符1',
+ `date_val` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '日期值',
+ `separator2` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分隔符2',
+ `seq_no` int NOT NULL COMMENT '当前序列号',
+ `remark_1` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注1',
+ `remark_2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注2',
+ `remark_3` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注3',
+ `remark_4` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注4',
+ `remark_5` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注5',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`seq_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '序列号生成记录表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_seq_result
+-- ----------------------------
+INSERT INTO `sys_seq_result` VALUES (00000006458374766593, 'UNIT', 'UNIT', NULL, NULL, NULL, 9, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 13:37:19', '1', '2024-02-19 13:38:44', NULL);
+INSERT INTO `sys_seq_result` VALUES (00000006458406061570, 'GT', 'GT', NULL, NULL, NULL, 2, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 13:41:24', '1', '2024-02-19 13:41:39', NULL);
+INSERT INTO `sys_seq_result` VALUES (00000006458414990338, 'WHS', 'WH', NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 13:42:34', '1', '2024-02-19 13:42:34', NULL);
+
+-- ----------------------------
+-- Table structure for sys_seq_rule
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_seq_rule`;
+CREATE TABLE `sys_seq_rule` (
+ `rule_id` bigint NOT NULL DEFAULT 100 COMMENT '规则ID',
+ `seq_dist_cd` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '序列号识别码',
+ `rule_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '规则名称',
+ `prefix` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '前缀',
+ `separator1` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分隔符1',
+ `date_format` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '日期格式',
+ `min_digits` int NOT NULL COMMENT '序列号数字部分的最小位数,不足补0',
+ `separator2` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分隔符2',
+ `generator_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '生成器名称(或类全名),自定义的生成器可忽略前面的规则自行生成',
+ `enable_flag` int NOT NULL DEFAULT 1 COMMENT '是否启用',
+ `remark_1` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注1',
+ `remark_2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注2',
+ `remark_3` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注3',
+ `remark_4` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注4',
+ `remark_5` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注5',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`rule_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '序列号生成规则表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_seq_rule
+-- ----------------------------
+INSERT INTO `sys_seq_rule` VALUES (1, 'UNIT', '单位代码生成规则', 'UNIT', NULL, NULL, 5, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 11:38:35', '1', '2024-02-19 11:38:37', NULL);
+INSERT INTO `sys_seq_rule` VALUES (2, 'GT', '物品类型代码生成规则', 'GT', NULL, NULL, 5, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 13:33:21', '1', '2024-02-19 13:33:24', NULL);
+INSERT INTO `sys_seq_rule` VALUES (3, 'WHS', '仓库代码生成规则', 'WH', NULL, NULL, 3, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 13:34:28', '1', '2024-02-19 13:34:30', NULL);
+
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------