From 7d866b851385e28552c03e4ae24140d2f4dcdac3 Mon Sep 17 00:00:00 2001 From: hant Date: Mon, 30 Jun 2025 20:54:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A2=E5=8D=95=E7=BC=96?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Order.php | 10 +--------- application/admin/model/Order.php | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/application/admin/controller/Order.php b/application/admin/controller/Order.php index e8a1bde..a030bc7 100644 --- a/application/admin/controller/Order.php +++ b/application/admin/controller/Order.php @@ -471,15 +471,7 @@ class Order extends Backend function generateOrderNumber($prefix = '') { - // 获取当前时间戳(精确到毫秒) - $timestamp = microtime(true); - $date = date('YmdHis', (int)$timestamp); // 格式:YYYYMMDDHHMMSS -// $randomNum = strtoupper(substr(md5($timestamp), 0, 4)); // 从时间戳生成一个随机字符串,取前四个字符 - $code = str_pad(mt_rand(0, 999999), 6, '0', STR_PAD_LEFT); - // 组合生成的订单编号 - $orderNumber = $prefix . $date . $code; - // 取 MD5 前10位 - return substr(md5($orderNumber), 0, 10); + return \app\admin\model\Order::generateOrderNo(); } use AmapTrait; diff --git a/application/admin/model/Order.php b/application/admin/model/Order.php index 6218187..ec0076f 100644 --- a/application/admin/model/Order.php +++ b/application/admin/model/Order.php @@ -3,6 +3,7 @@ namespace app\admin\model; use app\admin\library\Auth; +use think\Cache; use think\Model; use traits\model\SoftDelete; @@ -279,4 +280,28 @@ class Order extends Model return $this->belongsTo(Worker::class,'worker_id',); } + /** + * 生成唯一订单号:8位纯数字(如25063001) + * 格式:yyMMdd + 当天自增序号 + */ + public static function generateOrderNo() + { + $date = date('ymd'); // 6 位日期 + $key = 'order_inc:' . date('Ymd'); + + $inc = Cache::store('redis')->inc($key); // 自增 + + // 设置 key 过期(防止 key 永久存在) + $handler = Cache::store('redis')->handler(); + $handler->expire($key, 86400); // 设置 1 天过期 + + if ($inc > 9999) { + throw new \Exception('订单号已满'); + } + + $suffix = str_pad($inc, 4, '0', STR_PAD_LEFT); // 可改为 4 位更安全 + return $date . $suffix; // 最终结果:如 2506300001 + } + + }