liuhairui il y a 2 semaines
Parent
commit
ff75fb907a
1 fichiers modifiés avec 82 ajouts et 36 suppressions
  1. 82 36
      application/admin/controller/Procuremen.php

+ 82 - 36
application/admin/controller/Procuremen.php

@@ -3016,6 +3016,32 @@ class Procuremen extends Backend
         return $this->formatProcuremenDetailTime($main['updatetime'] ?? null);
     }
 
+    /**
+     * 直接点「完结」时间:优先操作记录 mark_complete
+     */
+    protected function resolveProcuremenMarkCompleteTime(int $scydgyId): string
+    {
+        if (!$this->isValidScydgyRowId($scydgyId)) {
+            return '';
+        }
+        try {
+            $log = Db::table('purchase_order_oper_log')
+                ->where('scydgy_id', $scydgyId)
+                ->where('action', 'mark_complete')
+                ->order('id', 'desc')
+                ->find();
+            if (is_array($log)) {
+                $ct = (int)($log['createtime'] ?? 0);
+                if ($ct > 946684800) {
+                    return date('Y-m-d H:i:s', $ct);
+                }
+            }
+        } catch (\Throwable $e) {
+        }
+
+        return '';
+    }
+
     /**
      * 详情弹层:进度步骤 + 订单摘要 + 下发明细(已下发 / 已完结均可用)
      *
@@ -3096,9 +3122,17 @@ class Procuremen extends Backend
             }
         }
 
+        $directComplete = ($mainStatus === 1 && !$issued);
+        $scydgyId = (int)($main['scydgy_id'] ?? 0);
+
         $doneTime = '';
         if ($mainStatus === 1) {
-            $doneTime = $this->formatProcuremenDetailTime($main['updatetime'] ?? null);
+            if ($directComplete) {
+                $doneTime = $this->resolveProcuremenMarkCompleteTime($scydgyId);
+            }
+            if ($doneTime === '') {
+                $doneTime = $this->formatProcuremenDetailTime($main['updatetime'] ?? null);
+            }
             if ($doneTime === '') {
                 foreach ($details as $dr) {
                     if (!is_array($dr)) {
@@ -3115,41 +3149,51 @@ class Procuremen extends Backend
             }
         }
 
-        $step1Done = $issued;
-        $step2Done = $issued;
-        // wflow=1:初选已下发、待审批确认通知;wflow>=2 或旧数据(有明细且 wf=0)视为已通知
-        $step3Done = $wflowStatus >= 2 || ($wflowStatus === 0 && $issueCnt > 0);
-        $step4Done = $acceptCnt > 0;
-        $step5Done = false;
-        foreach ($details as $dr) {
-            if (is_array($dr) && (int)($dr['status'] ?? 0) === 1) {
-                $step5Done = true;
-                break;
+        if ($directComplete) {
+            // 未下发直接完结:仅「未发」「已完结」两步完成,中间环节保持未进行
+            $step1Done = $hasMain;
+            $step2Done = false;
+            $step3Done = false;
+            $step4Done = false;
+            $step5Done = false;
+            $step6Done = true;
+        } else {
+            $step1Done = $issued;
+            $step2Done = $issued;
+            // wflow=1:初选已下发、待审批确认通知;wflow>=2 或旧数据(有明细且 wf=0)视为已通知
+            $step3Done = $wflowStatus >= 2 || ($wflowStatus === 0 && $issueCnt > 0);
+            $step4Done = $acceptCnt > 0;
+            $step5Done = false;
+            foreach ($details as $dr) {
+                if (is_array($dr) && (int)($dr['status'] ?? 0) === 1) {
+                    $step5Done = true;
+                    break;
+                }
             }
-        }
-        $step6Done = $mainStatus === 1;
+            $step6Done = $mainStatus === 1;
 
-        // 主表已完结:中间环节按业务视为已全部完成(不显示灰色「未到达」)
-        if ($mainStatus === 1) {
-            $step3Done = true;
-            $step4Done = true;
-            $step5Done = true;
-            if ($supplierTime === '') {
-                $fillT = $doneTime !== '' ? $doneTime : $poTime;
-                if ($fillT !== '') {
-                    $supplierTime = $fillT;
+            // 已走下发流程并完结:中间环节按业务视为已全部完成(不显示灰色「未到达」)
+            if ($mainStatus === 1 && $issued) {
+                $step3Done = true;
+                $step4Done = true;
+                $step5Done = true;
+                if ($supplierTime === '') {
+                    $fillT = $doneTime !== '' ? $doneTime : $poTime;
+                    if ($fillT !== '') {
+                        $supplierTime = $fillT;
+                    }
                 }
-            }
-            if ($pickedTime === '') {
-                $fillT = $doneTime !== '' ? $doneTime : $poTime;
-                if ($fillT !== '') {
-                    $pickedTime = $fillT;
+                if ($pickedTime === '') {
+                    $fillT = $doneTime !== '' ? $doneTime : $poTime;
+                    if ($fillT !== '') {
+                        $pickedTime = $fillT;
+                    }
                 }
-            }
-            if ($auditNotifyTime === '') {
-                $fillT = $doneTime !== '' ? $doneTime : $poTime;
-                if ($fillT !== '') {
-                    $auditNotifyTime = $fillT;
+                if ($auditNotifyTime === '') {
+                    $fillT = $doneTime !== '' ? $doneTime : $poTime;
+                    if ($fillT !== '') {
+                        $auditNotifyTime = $fillT;
+                    }
                 }
             }
         }
@@ -3196,10 +3240,12 @@ class Procuremen extends Backend
         ];
 
         $currentIdx = count($steps) - 1;
-        foreach ($steps as $i => $s) {
-            if (!$s['done']) {
-                $currentIdx = $i;
-                break;
+        if (!$directComplete) {
+            foreach ($steps as $i => $s) {
+                if (!$s['done']) {
+                    $currentIdx = $i;
+                    break;
+                }
             }
         }
         $nSteps = count($steps);