|
|
@@ -63,7 +63,7 @@ class RDService extends Service
|
|
|
DB::beginTransaction();
|
|
|
|
|
|
$model = new RD();
|
|
|
- $model->order_number = $this->generateOrderNumber($data['type']);
|
|
|
+ $model->order_number = $this->generateOrderNumber($data['type'],$data['item_id']);
|
|
|
$model->type = $data['type'] ?? 0;
|
|
|
$model->item_id = $data['item_id'] ?? 0;
|
|
|
$model->order_time = $data['order_time'] ?? 0;
|
|
|
@@ -324,18 +324,25 @@ class RDService extends Service
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
- public function generateOrderNumber($type)
|
|
|
+ public function generateOrderNumber($type, $itemId = 0)
|
|
|
{
|
|
|
- if($type == 1){
|
|
|
- $dayPrefix = date('Ymd', time()); // 例如 20251216
|
|
|
- // 随机后缀 + uniqid 保证唯一
|
|
|
- $orderNumber = 'RD' . $dayPrefix . mt_rand(1000, 9999) . substr(uniqid(), -3);
|
|
|
- }else{
|
|
|
- // --- 修改订单号生成逻辑,增加设备ID前缀和更长的随机串 ---
|
|
|
- $orderNumber = 'RD' . time() . 'D' . rand(1,5) . 'S' . uniqid();
|
|
|
+ $dateStr = date('Ymd');
|
|
|
+
|
|
|
+ if ($type == 1) {
|
|
|
+ // --- 方案:日期 + (项目ID或默认值) + 微秒哈希 ---
|
|
|
+ // substr(uniqid(), 7, 5) 提取的是微秒级变化的随机串,比 md5 更短且在单机并发下极难重复
|
|
|
+ $orderNumber = sprintf("RD%s%d%s",
|
|
|
+ $dateStr,
|
|
|
+ $itemId ?: 0,
|
|
|
+ substr(uniqid(), 8, 5)
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // --- 方案:日期 + 随机序列 ---
|
|
|
+ // 使用 dechex(mt_rand()) 将随机数转为 16 进制,进一步缩短长度
|
|
|
+ $orderNumber = 'RD' . $dateStr . dechex(mt_rand(100000, 999999)) . substr(uniqid(), -4);
|
|
|
}
|
|
|
|
|
|
- return $orderNumber;
|
|
|
+ return strtoupper($orderNumber); // 统一转大写,看起来更专业
|
|
|
|
|
|
$yyyymm = date('Ym');
|
|
|
|