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. + * + * + * + * @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. + * + * + * + * @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 -- ----------------------------