绿洲ERP电商系统


仓库自动生成规则

<h3><strong>仓库自动生成规则</strong></h3> <hr /> <h4><strong>1. 仓库编码(<code>erp_warehouse.code</code>)</strong></h4> <ul> <li><strong>规则</strong>:<code>WH-{租户简码}-{3位序号}</code> </li> <li><strong>示例</strong>:<code>WH-T001-001</code>(租户 <code>T001</code> 的第一个仓库) </li> <li><strong>生成逻辑</strong>: <ol> <li><strong>租户简码</strong>:取 <code>tenant</code> 表的 <code>code</code> 字段(如 <code>T001</code>)。 </li> <li><strong>序号</strong>:按租户维度递增,每个租户独立计数。 <ul> <li>查询当前租户下最大仓库序号:<code>SELECT MAX(SUBSTRING(code, 8, 3)) FROM erp_warehouse WHERE tenant_id = ?</code> </li> <li>新序号 = 最大序号 + 1(若为空则从 <code>001</code> 开始) </li> </ul></li> <li><strong>组合</strong>:<code>WH-</code> + 租户简码 + <code>-</code> + 3位序号。 </li> </ol></li> </ul> <hr /> <h4><strong>2. 库房编码(<code>erp_warehouse_room.room_code</code>)</strong></h4> <ul> <li><strong>规则</strong>:<code>RM-{仓库编码}-{2位序号}</code> </li> <li><strong>示例</strong>:<code>RM-WH-T001-001-01</code>(仓库 <code>WH-T001-001</code> 的第一个库房) </li> <li><strong>生成逻辑</strong>: <ol> <li><strong>仓库编码</strong>:继承所属仓库的编码(如 <code>WH-T001-001</code>)。 </li> <li><strong>序号</strong>:按仓库维度递增。 <ul> <li>查询当前仓库下最大库房序号:<code>SELECT MAX(SUBSTRING(room_code, -2)) FROM erp_warehouse_room WHERE warehouse_id = ?</code> </li> <li>新序号 = 最大序号 + 1(若为空则从 <code>01</code> 开始) </li> </ul></li> <li><strong>组合</strong>:<code>RM-</code> + 仓库编码 + <code>-</code> + 2位序号。 </li> </ol></li> </ul> <hr /> <h4><strong>3. 库区编码(<code>erp_warehouse_area.area_code</code>)</strong></h4> <ul> <li><strong>规则</strong>:<code>AR-{库房编码}-{2位序号}</code> </li> <li><strong>示例</strong>:<code>AR-RM-WH-T001-001-01-01</code>(库房 <code>RM-WH-T001-001-01</code> 的第一个库区) </li> <li><strong>生成逻辑</strong>: <ol> <li><strong>库房编码</strong>:继承所属库房的编码(如 <code>RM-WH-T001-001-01</code>)。 </li> <li><strong>序号</strong>:按库房维度递增。 <ul> <li>查询当前库房下最大库区序号:<code>SELECT MAX(SUBSTRING(area_code, -2)) FROM erp_warehouse_area WHERE room_id = ?</code> </li> <li>新序号 = 最大序号 + 1(若为空则从 <code>01</code> 开始) </li> </ul></li> <li><strong>组合</strong>:<code>AR-</code> + 库房编码 + <code>-</code> + 2位序号。 </li> </ol></li> </ul> <hr /> <h4><strong>4. 货架编码(<code>erp_warehouse_shelf.shelf_code</code>)</strong></h4> <ul> <li><strong>规则</strong>:<code>SH-{库区编码}-{3位序号}</code> </li> <li><strong>示例</strong>:<code>SH-AR-RM-WH-T001-001-01-01-001</code>(库区 <code>AR-RM-WH-T001-001-01-01</code> 的第一个货架) </li> <li><strong>生成逻辑</strong>: <ol> <li><strong>库区编码</strong>:继承所属库区的编码(如 <code>AR-RM-WH-T001-001-01-01</code>)。 </li> <li><strong>序号</strong>:按库区维度递增。 <ul> <li>查询当前库区下最大货架序号:<code>SELECT MAX(SUBSTRING(shelf_code, -3)) FROM erp_warehouse_shelf WHERE area_id = ?</code> </li> <li>新序号 = 最大序号 + 1(若为空则从 <code>001</code> 开始) </li> </ul></li> <li><strong>组合</strong>:<code>SH-</code> + 库区编码 + <code>-</code> + 3位序号。 </li> </ol></li> </ul> <hr /> <h3><strong>技术实现要点</strong></h3> <ol> <li> <p><strong>并发控制</strong> </p> <ul> <li><strong>Redis 原子操作</strong>:使用 <code>INCR</code> 命令维护序号(键名格式:<code>erp:code:tenant:{tenantId}:warehouse</code>)。 </li> <li><strong>数据库事务</strong>:通过 <code>SELECT ... FOR UPDATE</code> 锁定当前最大序号记录,避免重复。 </li> </ul> </li> <li> <p><strong>字段长度</strong> </p> <ul> <li>所有编码均控制在 <code>varchar(50)</code> 内(示例最长编码为 <code>SH-AR-RM-WH-T001-001-01-01-001</code>,长度 32)。 </li> </ul> </li> <li> <p><strong>唯一性保证</strong> </p> <ul> <li>数据库表已通过 <code>UNIQUE KEY</code> 确保编码唯一(如 <code>uk_ew_warehouse_code</code>)。 </li> </ul> </li> <li> <p><strong>生成示例代码(Java)</strong> </p> <pre><code class="language-java">// 生成仓库编码 public String generateWarehouseCode(String tenantCode) { String key = &amp;quot;erp:code:tenant:&amp;quot; + tenantCode + &amp;quot;:warehouse&amp;quot;; Long seq = redisTemplate.opsForValue().increment(key, 1); return String.format(&amp;quot;WH-%s-%03d&amp;quot;, tenantCode, seq); } // 生成库房编码 public String generateRoomCode(String warehouseCode) { String key = &amp;quot;erp:code:warehouse:&amp;quot; + warehouseCode + &amp;quot;:room&amp;quot;; Long seq = redisTemplate.opsForValue().increment(key, 1); return String.format(&amp;quot;RM-%s-%02d&amp;quot;, warehouseCode, seq); }</code></pre> </li> </ol> <hr /> <h3><strong>状态流转示例</strong></h3> <ul> <li><strong>仓库创建</strong>:<br /> 租户 <code>T001</code> 创建第一个仓库 → 编码 <code>WH-T001-001</code>。 </li> <li><strong>库房创建</strong>:<br /> 在仓库 <code>WH-T001-001</code> 下创建第一个库房 → 编码 <code>RM-WH-T001-001-01</code>。 </li> <li><strong>库区创建</strong>:<br /> 在库房 <code>RM-WH-T001-001-01</code> 下创建第一个库区 → 编码 <code>AR-RM-WH-T001-001-01-01</code>。 </li> <li><strong>货架创建</strong>:<br /> 在库区 <code>AR-RM-WH-T001-001-01-01</code> 下创建第一个货架 → 编码 <code>SH-AR-RM-WH-T001-001-01-01-001</code>。 </li> </ul> <hr /> <h3><strong>总结</strong></h3> <p>通过层级化的编码规则,确保每个 <code>code</code> 字段唯一且直观反映归属关系,同时通过 Redis 或数据库事务保证高并发下的准确性。</p>

页面列表

ITEM_HTML