gorden 3 месяцев назад
Родитель
Сommit
08b2251577

+ 13 - 5
app/admin/controller/coupon/CardIssueController.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller\coupon;
 
+use app\admin\service\coupon\CardService;
 use app\controller\Curd;
 use app\model\Card;
 use app\model\CardIssue;
@@ -174,12 +175,19 @@ class CardIssueController extends Curd
             }
 
             $cardIds = [];
+            $i = 0;
             // 创建卡号
-            for ($i = 0; $i < intval($params['card_issue_num']); $i++) {
-                $prefixLength = strlen($params['card_issue_serial_prefix']);
-                $suffixLength = strlen($params['card_issue_serial_suffix']);
-                $cardIds[] = $params['card_issue_serial_prefix'] . str_pad($params['card_issue_serial_begin'] + $i, $params['card_issue_serial_length'] - $prefixLength - $suffixLength, $params['card_issue_serial_fill'], STR_PAD_LEFT) . $params['card_issue_serial_suffix'];
+            while (count($cardIds) < intval($params['card_issue_num'])) {
+                // 防死循环
+                if ($i > 20000) {
+                    throw new BusinessException("生成规则异常");
+                }
 
+                $cardId = CardService::generateCardId($params, $i);
+                if ($cardId !== false) {
+                    $cardIds[] = $cardId;
+                }
+                $i++;
             }
 
             // 写入发行表
@@ -192,7 +200,7 @@ class CardIssueController extends Curd
                 'card_issue_serial_prefix' => $params['card_issue_serial_prefix'],
                 'card_issue_serial_suffix' => $params['card_issue_serial_suffix'],
                 'card_issue_serial_begin' => $params['card_issue_serial_begin'],
-                'card_issue_serial_end' => $params['card_issue_serial_end'],
+                'card_issue_serial_end' => $params['card_issue_serial_begin'] + $i - 1,
                 'card_issue_serial_fill' => $params['card_issue_serial_fill'],
                 'card_issue_begin_nbr' => $cardIds[0],
                 'card_issue_end_nbr' => $cardIds[count($cardIds) - 1],

+ 29 - 0
app/admin/service/coupon/CardService.php

@@ -2,8 +2,37 @@
 
 namespace app\admin\service\coupon;
 
+use support\exception\BusinessException;
+
 class CardService
 {
+    /**
+     * @Desc 生成卡ID
+     * @Author Gorden
+     * @Date 2024/11/25 13:46
+     *
+     * @param $params
+     * @param $i
+     * @return false|string
+     */
+    public static function generateCardId($params, $i)
+    {
+        $prefixLength = strlen($params['card_issue_serial_prefix']);
+        $suffixLength = strlen($params['card_issue_serial_suffix']);
+        $cardId = $params['card_issue_serial_prefix'] . str_pad($params['card_issue_serial_begin'] + $i, $params['card_issue_serial_length'] - $prefixLength - $suffixLength, $params['card_issue_serial_fill'], STR_PAD_LEFT) . $params['card_issue_serial_suffix'];
+        if (!empty($params['card_issue_not_contain'])) {
+            $notContains = explode(',', $params['card_issue_not_contain']);
+            foreach ($notContains as $notContain) {
+                if (strpos($cardId, $notContain) !== false) {
+                    return false;
+                }
+            }
+        }
+
+        return $cardId;
+    }
+
+
     public static $status = [
         'INIT' => '待分配',
         'WAITING' => '已分配,待售',