From 3623c5564fe265d517b725b208a2be360e5d07a7 Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Wed, 21 May 2025 16:31:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(sip):=20=E5=AE=9E=E7=8E=B0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 CodeGenTable 实体类,用于存储代码生成规则 - 添加 CodeGenTableMapper 接口和 XML 文件,实现代码生成规则的持久化 - 实现 CodeGenTableServiceImpl 服务类,提供代码生成逻辑 - 在 OrderDeliveryServiceImpl 中集成代码生成功能,用于生成发货记录代码- 在生产配置中添加 demoEnabled 属性,控制是否启用演示模式 --- .../src/main/resources/application-prod.yml | 1 + .../com/ruoyi/sip/domain/CodeGenTable.java | 95 +++++++ .../ruoyi/sip/mapper/CodeGenTableMapper.java | 52 ++++ .../sip/service/ICodeGenTableService.java | 49 ++++ .../service/impl/CodeGenTableServiceImpl.java | 114 ++++++++ .../impl/OrderDeliveryServiceImpl.java | 9 +- .../CodeGenTable/CodeGenTableMapper.xml | 245 ++++++++++++++++++ 7 files changed, 562 insertions(+), 3 deletions(-) create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/CodeGenTable.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/CodeGenTableMapper.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/ICodeGenTableService.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CodeGenTableServiceImpl.java create mode 100644 ruoyi-sip/src/main/resources/mapper/CodeGenTable/CodeGenTableMapper.xml diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 3e2ad313..97c2b144 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -1,4 +1,5 @@ ruoyi: + demoEnabled: false excelTemplate: /home/application/excelTemplate server: # 服务器的HTTP端口,默认为80 diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/CodeGenTable.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/CodeGenTable.java new file mode 100644 index 00000000..0636fb62 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/CodeGenTable.java @@ -0,0 +1,95 @@ +package com.ruoyi.sip.domain; + +import java.util.Date; + + +import lombok.Data; +import lombok.Getter; + + +/** + * 代码生成业务表(CodeGenTable)实体类 + * + * @author ch + * @since 2025-05-21 14:39:07 + */ +@Data +public class CodeGenTable { + /** + * 编号 + */ + + private Long id; + /** + * 表名称 + */ + + private String tableName; + /** + * 表描述 + */ + + private String tableComment; + /** + * code前缀 + */ + + private String prefix; + /** + * 流水号 + */ + + private Integer number; + /** + * code生成日期 + */ + + private Date genDate; + private String dateFormat; + /** + * 流水号长度 + */ + + private Integer numberLength; + /** + * 创建者 + */ + + private String createBy; + /** + * 创建时间 + */ + + private Date createTime; + /** + * 更新者 + */ + + private String updateBy; + /** + * 更新时间 + */ + + private Date updateTime; + /** + * 备注 + */ + + private String remark; + private Long version; + + @Getter + public enum TableNameEnum{ + ORDER_DELIVERY("order_delivery", "发货记录"), + ; + private final String name; + private final String desc; + TableNameEnum(String type, String desc) { + this.name = type; + this.desc = desc; + } + } +} + + + diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/CodeGenTableMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/CodeGenTableMapper.java new file mode 100644 index 00000000..89c6ea56 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/CodeGenTableMapper.java @@ -0,0 +1,52 @@ +package com.ruoyi.sip.mapper; + +import com.ruoyi.sip.domain.CodeGenTable; + +import java.util.List; + +/** + * @Author ch + * @Desc 代码生成业务表(CodeGenTable)表数据库访问层 + * @Date 2025-05-21 14:39:07 + */ +public interface CodeGenTableMapper { + + /** + * 通过实体作为筛选条件查询 + * + * @param codeGenTable 实例对象 + * @return 对象列表 + */ + List queryAll(CodeGenTable codeGenTable); + + /** + * 根据ID查详情 + */ + CodeGenTable queryById(Long id); + + + /** + * 新增数据 + */ + int insert(CodeGenTable codeGenTable); + + + /** + * 修改数据 + */ + int update(CodeGenTable codeGenTable); + + /** + * 通过主键删除数据 + */ + int deleteById(Long id); + + /** + * 通过id批量删除代码生成业务表 + */ + int batchRemove(Long[] ids); + + CodeGenTable selectByTableName(String tableName); + + int updateNumber(CodeGenTable codeGeneratorConfig); +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/ICodeGenTableService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/ICodeGenTableService.java new file mode 100644 index 00000000..0dc1d49b --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/ICodeGenTableService.java @@ -0,0 +1,49 @@ +package com.ruoyi.sip.service; + +import com.ruoyi.sip.domain.CodeGenTable; + +import java.util.List; + +/** + * @Author ch + * @Desc 代码生成业务表(CodeGenTable)表服务接口 + * @Date 2025-05-21 14:39:07 + */ +public interface ICodeGenTableService { + + /** + * 通过实体作为筛选条件查询 + */ + List queryAll(CodeGenTable codeGenTable); + + + /** + * 根据ID查详情 + */ + CodeGenTable queryById(Long id); + + /** + * 新增数据 + */ + int insert(CodeGenTable codeGenTable); + + /** + * 修改数据 + */ + int update(CodeGenTable codeGenTable); + + /** + * 通过主键删除数据 + */ + int deleteById(Long id); + + /** + * 通过id批量删除代码生成业务表 + */ + int batchRemove(Long[] ids); + + String generateCode(String tableName); +} + + + diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CodeGenTableServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CodeGenTableServiceImpl.java new file mode 100644 index 00000000..824d3fea --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/CodeGenTableServiceImpl.java @@ -0,0 +1,114 @@ +package com.ruoyi.sip.service.impl; + +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.sip.domain.CodeGenTable; +import com.ruoyi.sip.mapper.CodeGenTableMapper; +import com.ruoyi.sip.service.ICodeGenTableService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author ch + * @Desc 代码生成业务表(CodeGenTable)表服务实现类 + * @Date 2025-05-21 14:39:08 + */ + +@Service +public class CodeGenTableServiceImpl implements ICodeGenTableService { + + @Resource + private CodeGenTableMapper codeGenTableMapper; + public static final String DELIMIT = "-"; + + /** + * 查询列表数据 + * + * @param codeGenTable 实例对象 + * @return 对象列表 + */ + @Override + public List queryAll(CodeGenTable codeGenTable) { + List dataList = codeGenTableMapper.queryAll(codeGenTable); + return dataList; + } + + @Override + public CodeGenTable queryById(Long id) { + return codeGenTableMapper.queryById(id); + } + + + @Override + public int insert(CodeGenTable codeGenTable) { + return codeGenTableMapper.insert(codeGenTable); + } + + + @Override + public int update(CodeGenTable codeGenTable) { + return codeGenTableMapper.update(codeGenTable); + } + + + @Override + public int deleteById(Long id) { + return codeGenTableMapper.deleteById(id); + } + + /** + * 通过id批量删除代码生成业务表 + */ + @Override + public int batchRemove(Long[] ids) { + return codeGenTableMapper.batchRemove(ids); + } + + @Override + public String generateCode(String tableName) { + CodeGenTable codeGeneratorConfig = codeGenTableMapper.selectByTableName(tableName); + + if (codeGeneratorConfig == null) { + throw new ServiceException(StringUtils.format("未找到[{}]对应编码生成规则", tableName)); + } + + // 根据表字段动态获取生成规则 + String prefix = codeGeneratorConfig.getPrefix(); + int numberLength = codeGeneratorConfig.getNumberLength(); + + + CodeGenTable updateDto = new CodeGenTable(); + updateDto.setTableName(tableName); + updateDto.setVersion(codeGeneratorConfig.getVersion()); + + if (!DateUtils.isSameDay(codeGeneratorConfig.getGenDate(), DateUtils.getNowDate())) { + updateDto.setNumber(0); + updateDto.setGenDate(DateUtils.getNowDate()); + } else { + updateDto.setNumber(codeGeneratorConfig.getNumber()); + } + String datePart = DateUtils.parseDateToStr(codeGeneratorConfig.getDateFormat(), DateUtils.getNowDate()); + // 使用乐观锁机制更新 number + int currentSequence = updateDto.getNumber(); + String sequenceStr = String.format("%0" + numberLength + "d", currentSequence); + + // 构造唯一 code + String generatedCode = prefix + DELIMIT + datePart + DELIMIT + sequenceStr; + + // 更新数据库中的 number 字段,确保并发安全性 + int updatedRows = codeGenTableMapper.updateNumber(updateDto); + if (updatedRows == 0) { + throw new ServiceException("系统繁忙,请重试"); + } + + return generatedCode; + } + +} + + + diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderDeliveryServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderDeliveryServiceImpl.java index 83218d41..9f1acc3e 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderDeliveryServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderDeliveryServiceImpl.java @@ -3,6 +3,8 @@ package com.ruoyi.sip.service.impl; import java.util.List; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.sip.domain.CodeGenTable; +import com.ruoyi.sip.service.ICodeGenTableService; import com.ruoyi.sip.utils.CodeGeneratorUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,6 +25,8 @@ public class OrderDeliveryServiceImpl implements IOrderDeliveryService @Autowired private OrderDeliveryMapper orderDeliveryMapper; + @Autowired + private ICodeGenTableService codeGenTableService; /** * 查询发货记录 * @@ -56,9 +60,8 @@ public class OrderDeliveryServiceImpl implements IOrderDeliveryService @Override public int insertOrderDelivery(OrderDelivery orderDelivery) { - OrderDelivery queryCountParam = new OrderDelivery(); - queryCountParam.setCreatedAt(DateUtils.getNowDate()); - String deliveryCode = CodeGeneratorUtil.generateUniqueCode("OD", () -> orderDeliveryMapper.count(queryCountParam)); + + String deliveryCode =codeGenTableService.generateCode(CodeGenTable.TableNameEnum.ORDER_DELIVERY.getName()); orderDelivery.setDeliveryCode(deliveryCode); return orderDeliveryMapper.insertOrderDelivery(orderDelivery); } diff --git a/ruoyi-sip/src/main/resources/mapper/CodeGenTable/CodeGenTableMapper.xml b/ruoyi-sip/src/main/resources/mapper/CodeGenTable/CodeGenTableMapper.xml new file mode 100644 index 00000000..b8d1e135 --- /dev/null +++ b/ruoyi-sip/src/main/resources/mapper/CodeGenTable/CodeGenTableMapper.xml @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + id, table_name, table_comment, prefix, number, gen_date, number_length, create_by, create_time, update_by, update_time, remark,version,date_format + + + + + + + + + + + + + + INSERT INTO code_gen_table + + + table_name, + + + table_comment, + + + prefix, + + + number, + + + gen_date, + + + number_length, + + + create_by, + + + create_time, + + + update_by, + + + update_time, + + + remark, + + + + + #{tableName}, + + + #{tableComment}, + + + #{prefix}, + + + #{number}, + + + #{genDate}, + + + #{numberLength}, + + + #{createBy}, + + + #{createTime}, + + + #{updateBy}, + + + #{updateTime}, + + + #{remark}, + + + + + + + UPDATE code_gen_table + + version=version+1 + + table_name = #{tableName}, + + + table_comment = #{tableComment}, + + + prefix = #{prefix}, + + + number = #{number}, + + + gen_date = #{genDate}, + + + number_length = #{numberLength}, + + + create_by = #{createBy}, + + + create_time = #{createTime}, + + + update_by = #{updateBy}, + + + update_time = #{updateTime}, + + + remark = #{remark}, + + + WHERE id = #{id} and version=#{version} + + + update code_gen_table + set number=#{number} + 1, + version=version + 1 + + ,gen_date = #{genDate} + + where table_name = #{tableName} + and version = #{version} + + + + + DELETE + FROM code_gen_table + WHERE id = #{id} + + + + + delete from code_gen_table where id in + + #{id} + + + + + + +