Log.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace App\Module\Fund\Logic;
  3. use App\Module\Fund\Models\FundLogModel;
  4. use UCore\Helper\Logger;
  5. class Log
  6. {
  7. public function statistical($where)
  8. {
  9. // 查询金额大于0的记录
  10. $query = FundLogModel::query()->where('amount', '>', 0);
  11. // 应用过滤条件
  12. if (isset($where['user_id'])) {
  13. $query->where('user_id', $where['user_id']);
  14. }
  15. if (isset($where['fund_id'])) {
  16. $query->where('fund_id', $where['fund_id']);
  17. }
  18. if (isset($where['type'])) {
  19. $query->where('operate_type', $where['type']);
  20. }
  21. // 获取统计数据
  22. $add = [
  23. 'sumamount' => $query->sum('amount'),
  24. 'count' => $query->count()
  25. ];
  26. // 查询金额小于0的记录
  27. $query = FundLogModel::query()->where('amount', '<', 0);
  28. // 应用过滤条件
  29. if (isset($where['user_id'])) {
  30. $query->where('user_id', $where['user_id']);
  31. }
  32. if (isset($where['fund_id'])) {
  33. $query->where('fund_id', $where['fund_id']);
  34. }
  35. if (isset($where['type'])) {
  36. $query->where('operate_type', $where['type']);
  37. }
  38. // 获取统计数据
  39. $reduce = [
  40. 'sumamount' => $query->sum('amount'),
  41. 'count' => $query->count()
  42. ];
  43. return ['add' => $add, 'reduce' => $reduce];
  44. }
  45. /**
  46. * 列表
  47. *
  48. * @param $where
  49. * @param $page
  50. * @param $rows
  51. * @return \Dcore\ModelCore[]|FundLog[]|\Illuminate\Pagination\LengthAwarePaginator|\LaravelIdea\Helper\Dcore\_IH_ModelCore_C|\LaravelIdea\Helper\Fund\ModelLaravel\_IH_FundLog_C
  52. */
  53. public function lists($where = [], $page = 1, $rows = 10)
  54. {
  55. $query = FundLogModel::query()->orderBy('id', 'desc');
  56. // 应用过滤条件
  57. if (isset($where['user_id'])) {
  58. $query->where('user_id', $where['user_id']);
  59. }
  60. if (isset($where['fund_id'])) {
  61. $query->where('fund_id', $where['fund_id']);
  62. }
  63. if (isset($where['operate_type'])) {
  64. $query->where('operate_type', $where['operate_type']);
  65. }
  66. if (isset($where['type'])) {
  67. if ($where['type'] == 3) {
  68. $query->whereIn('remark', ['游戏消耗', '游戏奖励']);
  69. } else if ($where['type'] == '1') {
  70. $query->where('amount', '<', 0);
  71. } else if ($where['type'] == '2') {
  72. $query->where('amount', '>', 0);
  73. }
  74. }
  75. return $query->paginate($rows, ['*'], 'page', $page);
  76. }
  77. /**
  78. * 获取资金日志的详细信息
  79. *
  80. * @param FundLogModel $log 资金日志模型
  81. * @return FundLogModel 添加了额外信息的资金日志模型
  82. */
  83. private function enrichLogInfo(FundLogModel $log)
  84. {
  85. // 资金类型名称映射
  86. $fundNameList = [
  87. '1' => '余额账户',
  88. '2' => '需求资金托管',
  89. '3' => '待结算佣金',
  90. '4' => '系统佣金抽成',
  91. '5' => '提现冻结资金',
  92. '6' => '未设置'
  93. ];
  94. // 操作类型名称映射
  95. $operateTypeNameList = [
  96. 'recharge' => '资金转账',
  97. 'admin' => '管理员操作',
  98. 'transfer' => 'transfer',
  99. 'order' => 'Order系统',
  100. 'measure' => '需求相关',
  101. 'circulatio' => '账户资金流转'
  102. ];
  103. // 设置资金类型名称
  104. $log->fund_id_name = $fundNameList[$log->fund_id] ?? '未知账户';
  105. // 设置操作类型名称
  106. $log->operate_type_name = $operateTypeNameList[$log->operate_type] ?? '未知操作';
  107. return $log;
  108. }
  109. /**
  110. * 记录日志
  111. */
  112. /**
  113. * 创建日志
  114. * @param int $user_id
  115. * @param $fund_id
  116. * @param int $amount
  117. * @param string $remark
  118. * @param $later_balance
  119. * @param $before_balance
  120. * @param $operate_id
  121. * @param $operate_type
  122. * @param FundLogModel $pre_log
  123. * @return bool
  124. */
  125. public static function create_log(int $user_id, $fund_id, $amount, string $remark, $later_balance, $before_balance, $operate_id, $operate_type, $pre_log): bool
  126. {
  127. Logger::debug(" createlog $amount ,$later_balance , $before_balance ");
  128. $log = new FundLogModel();
  129. $log->user_id = $user_id;
  130. $log->fund_id = $fund_id;
  131. $log->amount = $amount;
  132. $log->operate_id = $operate_id;
  133. $log->operate_type = $operate_type;
  134. $log->remark = $remark;
  135. $log->create_time = time();
  136. $log->create_ip = request()->ip();
  137. $log->later_balance = $later_balance;
  138. $log->before_balance = $before_balance;
  139. $log->date_key = date('Ym');
  140. $log->hash = $log->generateHash();
  141. if($pre_log){
  142. $log->prev_hash = $pre_log->hash;
  143. }else{
  144. $log->prev_hash = '-';
  145. }
  146. return $log->save();
  147. }
  148. }