insert([ 'scydgy_id' => $scydgyId, 'purchase_order_id' => $purchaseOrderId, 'admin_id' => $adminId, 'admin_name' => $adminName, 'action' => self::cut($action, 64), 'content' => self::cut($content, 1000), 'createtime' => ProcuremenTime::nowDateTime(), ]); } catch (\Throwable $e) { Log::write('procuremen oper log: ' . $e->getMessage(), 'error'); } } /** * @param string|array $actions */ public static function resolveLatestTime(int $scydgyId, $actions): string { if (!ProcuremenGuard::isValidScydgyId($scydgyId)) { return ''; } $acts = is_array($actions) ? $actions : [$actions]; $acts = array_values(array_filter(array_map('strval', $acts))); if ($acts === []) { return ''; } try { $log = Db::table('purchase_order_oper_log') ->where('scydgy_id', $scydgyId) ->where('action', 'in', $acts) ->order('id', 'desc') ->find(); if (is_array($log)) { $text = ProcuremenTime::formatDisplayDateTime($log['createtime'] ?? null); if ($text !== '') { return $text; } } } catch (\Throwable $e) { } return ''; } public static function resolveMarkCompleteTime(int $scydgyId): string { return self::resolveLatestTime($scydgyId, 'mark_complete'); } /** * @param array> $logs * @return array> */ public static function formatLogRowsForDisplay(array $logs): array { foreach ($logs as &$lg) { if (!is_array($lg)) { continue; } $lg['createtime_text'] = ProcuremenTime::formatDisplayDateTime($lg['createtime'] ?? null); $lg['content'] = ProcuremenTime::formatOperLogContent( (string)($lg['content'] ?? ''), (string)($lg['action'] ?? '') ); } unset($lg); return $logs; } private static function cut(string $s, int $max): string { if (function_exists('mb_substr')) { return mb_substr($s, 0, $max, 'UTF-8'); } return strlen($s) <= $max ? $s : substr($s, 0, $max); } }