'视频生成', 'video_refund' => '视频生成退款', 'image' => '图片生成', 'image_refund' => '图片生成退款', 'chat' => 'AI对话', 'chat_refund' => 'AI对话退款', 'system' => '平台发放', 'company' => '组织发放', ]; /** * 积分流水列表 * * @param $data * @return array */ public function newBuildPointsRecords($data): array { return [ 'meta' => getMeta($data), 'list' => $this->newEachPointsRecord($data), ]; } /** * 单条积分流水 * * @param $list * @return array */ public function newEachPointsRecord($list): array { $result = []; if (empty($list)) return $result; foreach ($list as $item) { $chargeInfo = getProp($item, 'charge_info'); if (is_string($chargeInfo)) { $chargeInfo = json_decode($chargeInfo, true); } $chargeInfo = is_array($chargeInfo) ? $chargeInfo : []; $type = getProp($item, 'type', ''); $pointsConsumed = (float)getProp($item, 'points_consumed', 0); if ($pointsConsumed > 0) { // 消耗:带负号 $pointsChange = '-' . $pointsConsumed; } elseif ($pointsConsumed < 0) { // 赠送/入账:带正号 $pointsChange = '+' . abs($pointsConsumed); } else { $pointsChange = '0'; } $result[] = [ 'id' => (int)getProp($item, 'id'), 'type' => $type, 'type_label' => self::TYPE_LABELS[$type] ?? $type, 'account' => (string)getProp($item, 'account', ''), 'api_type' => getProp($item, 'api_type'), 'task_id' => (int)getProp($item, 'task_id'), 'charge_info' => $chargeInfo, 'points_consumed' => $pointsConsumed, 'points_change' => $pointsChange, 'points_before' => (float)getProp($item, 'points_before', 0), 'points_after' => (float)getProp($item, 'points_after', 0), 'tokens_consumed' => (int)getProp($item, 'tokens_consumed', 0), 'remark' => getProp($item, 'remark'), 'created_at' => transDate(getProp($item, 'created_at')), ]; } return $result; } }