Log.php 5.0 KB

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