ryan hai 1 semana
pai
achega
63e54c546f

+ 1 - 1
backendApi/modules/v1/controllers/ShopController.php

@@ -1148,7 +1148,7 @@ class ShopController extends BaseController {
                 'start_time' => date('Y-m-01 00:00:00'),
                 'end_time' => date('Y-m-d H:i:s'),
                 'period_num' => (string)((new Period())->getNowPeriodNum()),
-                'operate_user' => 'admin_dba',
+                'operate_user' => '',
             ];
 
             $formModel = new OrderPeriodAdjustRangeForm();

+ 34 - 1
backendApi/modules/v1/views/shop/order-period-adjust-range.php

@@ -46,6 +46,28 @@ $renderErrorMap = static function (array $errorMap) use ($e): string {
     return $html;
 };
 
+$renderReasonMap = static function (array $reasonMap) use ($e): string {
+    if (!$reasonMap) {
+        return '<div class="muted">None</div>';
+    }
+
+    $html = '<div class="reason-map">';
+    foreach ($reasonMap as $orderSn => $info) {
+        $html .= '<div class="reason-item">';
+        $html .= '<div><strong>' . $e($orderSn) . '</strong></div>';
+        $html .= '<div class="muted">原因: ' . $e($info['reason'] ?? '') . '</div>';
+        if (isset($info['current_period'])) {
+            $html .= '<div class="muted">当前期数: ' . $e($info['current_period']) . '</div>';
+        }
+        if (isset($info['target_period'])) {
+            $html .= '<div class="muted">目标期数: ' . $e($info['target_period']) . '</div>';
+        }
+        $html .= '</div>';
+    }
+    $html .= '</div>';
+    return $html;
+};
+
 ?>
 <!doctype html>
 <html lang="zh-CN">
@@ -212,6 +234,13 @@ $renderErrorMap = static function (array $errorMap) use ($e): string {
             background: #fffafa;
             border-radius: 12px;
         }
+        .reason-map .reason-item {
+            margin-top: 10px;
+            padding: 10px 12px;
+            border: 1px solid #dbeafe;
+            background: #f8fbff;
+            border-radius: 12px;
+        }
         pre {
             margin: 0;
             padding: 14px;
@@ -325,8 +354,12 @@ $renderErrorMap = static function (array $errorMap) use ($e): string {
                     </div>
 
                     <div class="section">
-                        <div><strong>Skipped order numbers</strong><span class="badge"><?= $e($result['skipped_count'] ?? 0) ?></span></div>
+                        <div><strong>Not modified order numbers</strong><span class="badge"><?= $e($result['skipped_count'] ?? 0) ?></span></div>
                         <?= $renderList($result['skipped_order_sn_list'] ?? []) ?>
+                        <div style="margin-top: 12px;">
+                            <strong>Not modified reasons</strong>
+                            <?= $renderReasonMap($result['skipped_detail_map'] ?? []) ?>
+                        </div>
                     </div>
 
                     <div class="section">

+ 44 - 1
common/models/forms/OrderPeriodAdjustRangeForm.php

@@ -102,12 +102,19 @@ class OrderPeriodAdjustRangeForm extends Model
         $successOrderSnList = [];
         $failedOrderSnList = [];
         $skippedOrderSnList = [];
+        $skippedDetailMap = [];
         $failedDetailMap = [];
 
         foreach ($this->orders as $orderRow) {
             $orderSn = $orderRow['SN'];
-            if ((string)$orderRow['PERIOD_NUM'] === (string)$this->period_num) {
+            $skipReason = $this->getSkipReason($orderRow);
+            if ($skipReason !== null) {
                 $skippedOrderSnList[] = $orderSn;
+                $skippedDetailMap[$orderSn] = [
+                    'reason' => $skipReason,
+                    'current_period' => $orderRow['PERIOD_NUM'] ?? '',
+                    'target_period' => $this->period_num,
+                ];
                 continue;
             }
 
@@ -138,7 +145,43 @@ class OrderPeriodAdjustRangeForm extends Model
             'success_order_sn_list' => $successOrderSnList,
             'failed_order_sn_list' => $failedOrderSnList,
             'skipped_order_sn_list' => $skippedOrderSnList,
+            'skipped_detail_map' => $skippedDetailMap,
             'failed_detail_map' => $failedDetailMap,
         ];
     }
+
+    private function getSkipReason(array $orderRow): ?string
+    {
+        $currentPeriodNum = (string)($orderRow['PERIOD_NUM'] ?? '');
+        $targetPeriodNum = (string)$this->period_num;
+
+        if ($currentPeriodNum !== '' && $currentPeriodNum === $targetPeriodNum) {
+            return '订单期数与目标期数相同';
+        }
+
+        if ($currentPeriodNum === '') {
+            return '订单期数为空,无法判断是否可调整';
+        }
+
+        $currentPeriod = Period::getInfoByPeriodNum($currentPeriodNum);
+        if (!$currentPeriod) {
+            return Yii::t('ctx', 'invalidPcNo');
+        }
+
+        if ((int)$currentPeriod['IS_SENT'] === 1) {
+            return '已挂网,不可调整';
+        }
+
+        if ($currentPeriodNum === $targetPeriodNum) {
+            return '订单期数与目标期数相同';
+        }
+
+        $availablePeriodList = Period::getPeriodList(+(int)$currentPeriodNum - 1);
+        $availablePeriodNums = array_column($availablePeriodList, 'PERIOD_NUM');
+        if (!in_array($targetPeriodNum, $availablePeriodNums, false)) {
+            return '不在可调整期数范围内';
+        }
+
+        return null;
+    }
 }