绿洲ERP电商系统


ERP系统中生产单号及质检单号自动生成规则

<h3>ERP系统中生产单号及质检单号自动生成规则</h3> <h4>一、生产单号(Production Order Number)生成规则</h4> <p><strong>规则格式</strong>:<code>[类型代码][日期][流水号]</code></p> <ul> <li> <p><strong>类型代码</strong>(1位字母):</p> <ul> <li><strong>M</strong>:常规生产订单</li> <li><strong>R</strong>:返工生产订单</li> <li><strong>C</strong>:定制生产订单</li> </ul> </li> <li> <p><strong>日期</strong>(8位数字):</p> <ul> <li>格式:<code>YYYYMMDD</code>(例如20231023)</li> </ul> </li> <li><strong>流水号</strong>(3位数字): <ul> <li>每日从001开始递增,按订单创建时间顺序生成,当日末位重置。</li> </ul></li> </ul> <p><strong>示例</strong>:</p> <ul> <li><code>M20231023001</code>:2023年10月23日的第1个常规生产订单。</li> <li><code>R20231023005</code>:同日的第5个返工订单。</li> </ul> <p><strong>生成逻辑</strong>:</p> <ol> <li>系统每日零点自动重置流水号为001。</li> <li>创建生产订单时,根据类型选择代码,抓取当前日期。</li> <li>查询当日该类型订单的最大流水号,+1后生成新单号(确保原子操作避免重复)。</li> </ol> <hr /> <h4>二、质检单号(Quality Inspection Order Number)生成规则</h4> <p><strong>规则格式</strong>:<code>[质检代码]-[生产单号]-[质检流水号]</code></p> <ul> <li> <p><strong>质检代码</strong>(2位字母):</p> <ul> <li><strong>QI</strong>:常规质检</li> <li><strong>QS</strong>:抽样质检</li> <li><strong>QE</strong>:紧急质检</li> </ul> </li> <li><strong>生产单号</strong>:关联的生产订单号(如<code>M20231023001</code>)</li> <li><strong>质检流水号</strong>(2位数字): <ul> <li>从01开始,按同一生产单的质检顺序递增。</li> </ul></li> </ul> <p><strong>示例</strong>:</p> <ul> <li><code>QI-M20231023001-01</code>:生产单M20231023001的第1次常规质检。</li> <li><code>QE-R20231023005-02</code>:生产单R20231023005的第2次紧急质检。</li> </ul> <p><strong>生成逻辑</strong>:</p> <ol> <li>发起质检时,绑定对应生产单号。</li> <li>查询该生产单下已有质检单的最大流水号,+1生成新质检单号(如无记录则从01开始)。</li> </ol> <hr /> <h4>三、技术实现要点</h4> <ol> <li> <p><strong>流水号管理</strong>:</p> <ul> <li><strong>Redis计数器</strong>:使用Redis的<code>INCR</code>命令实现每日流水号的原子递增(Key格式:<code>prod:YYYYMMDD:类型</code>)。</li> <li><strong>数据库事务锁</strong>:若不用Redis,可通过数据库事务查询并更新当日最大流水号,避免并发冲突。</li> </ul> </li> <li> <p><strong>异常处理</strong>:</p> <ul> <li><strong>日期变更</strong>:服务器定时任务每日零点重置流水号计数器。</li> <li><strong>分布式系统</strong>:多节点环境下需使用分布式锁(如RedLock)或统一发号服务。</li> </ul> </li> <li><strong>单号存储优化</strong>: <ul> <li>数据库字段设置为<code>VARCHAR(20)</code>,并建立唯一索引防止重复。</li> </ul></li> </ol> <hr /> <h4>四、扩展性与灵活性</h4> <ol> <li> <p><strong>类型代码扩展</strong>:</p> <ul> <li>新增生产类型(如<strong>S</strong>:试产订单)时,直接扩展代码表,无需修改生成逻辑。</li> </ul> </li> <li> <p><strong>多工厂支持</strong>:</p> <ul> <li>在单号前添加工厂代码(如<code>F1-M20231023001</code>),适应多分支管理。</li> </ul> </li> <li><strong>时区适配</strong>: <ul> <li>根据业务需求,日期可按工厂本地时区生成(需配置时区参数)。</li> </ul></li> </ol> <hr /> <h3>示例SQL及代码逻辑(伪代码)</h3> <h4>生产单号生成(Redis方案)</h4> <pre><code class="language-python">def generate_prod_order(prod_type): date_str = datetime.now().strftime(&amp;quot;%Y%m%d&amp;quot;) redis_key = f&amp;quot;prod:{date_str}:{prod_type}&amp;quot; seq = redis.incr(redis_key) # 原子递增 return f&amp;quot;{prod_type}{date_str}{seq:03d}&amp;quot;</code></pre> <h4>质检单号生成(数据库方案)</h4> <pre><code class="language-java">public String generateInspectionNo(String prodOrderNo, String inspectType) { String maxInspectNo = dao.findMaxInspectNoByProdOrder(prodOrderNo); int nextSeq = (maxInspectNo == null) ? 1 : Integer.parseInt(maxInspectNo.split(&amp;quot;-&amp;quot;)[2]) + 1; return String.format(&amp;quot;%s-%s-%02d&amp;quot;, inspectType, prodOrderNo, nextSeq); }</code></pre> <hr /> <h3>总结</h3> <p>通过以上规则,ERP系统可实现高效、可读且唯一的生产与质检单号管理,兼顾业务需求与系统性能。</p>

页面列表

ITEM_HTML