PointsTransformer.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Transformer\Points;
  3. class PointsTransformer
  4. {
  5. const TYPE_LABELS = [
  6. 'video' => '视频生成',
  7. 'video_refund' => '视频生成退款',
  8. 'image' => '图片生成',
  9. 'image_refund' => '图片生成退款',
  10. 'chat' => 'AI对话',
  11. 'chat_refund' => 'AI对话退款',
  12. 'system' => '平台发放',
  13. 'company' => '组织发放',
  14. ];
  15. /**
  16. * 积分流水列表
  17. *
  18. * @param $data
  19. * @return array
  20. */
  21. public function newBuildPointsRecords($data): array
  22. {
  23. return [
  24. 'meta' => getMeta($data),
  25. 'list' => $this->newEachPointsRecord($data),
  26. ];
  27. }
  28. /**
  29. * 单条积分流水
  30. *
  31. * @param $list
  32. * @return array
  33. */
  34. public function newEachPointsRecord($list): array
  35. {
  36. $result = [];
  37. if (empty($list)) return $result;
  38. foreach ($list as $item) {
  39. $chargeInfo = getProp($item, 'charge_info');
  40. if (is_string($chargeInfo)) {
  41. $chargeInfo = json_decode($chargeInfo, true);
  42. }
  43. $chargeInfo = is_array($chargeInfo) ? $chargeInfo : [];
  44. $type = getProp($item, 'type', '');
  45. $pointsConsumed = (float)getProp($item, 'points_consumed', 0);
  46. if ($pointsConsumed > 0) {
  47. // 消耗:带负号
  48. $pointsChange = '-' . $pointsConsumed;
  49. } elseif ($pointsConsumed < 0) {
  50. // 赠送/入账:带正号
  51. $pointsChange = '+' . abs($pointsConsumed);
  52. } else {
  53. $pointsChange = '0';
  54. }
  55. $result[] = [
  56. 'id' => (int)getProp($item, 'id'),
  57. 'type' => $type,
  58. 'type_label' => self::TYPE_LABELS[$type] ?? $type,
  59. 'account' => (string)getProp($item, 'account', ''),
  60. 'api_type' => getProp($item, 'api_type'),
  61. 'task_id' => (int)getProp($item, 'task_id'),
  62. 'charge_info' => $chargeInfo,
  63. 'points_consumed' => $pointsConsumed,
  64. 'points_change' => $pointsChange,
  65. 'points_before' => (float)getProp($item, 'points_before', 0),
  66. 'points_after' => (float)getProp($item, 'points_after', 0),
  67. 'tokens_consumed' => (int)getProp($item, 'tokens_consumed', 0),
  68. 'remark' => getProp($item, 'remark'),
  69. 'created_at' => transDate(getProp($item, 'created_at')),
  70. ];
  71. }
  72. return $result;
  73. }
  74. }