PlatformIncomeDetail.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace app\controller\admin\finance;
  3. use app\common\repositories\finance\FinanceRepository;
  4. use app\common\repositories\merchant\order\OrderMerchantRepository;
  5. use app\controller\api\entropybarter\User;
  6. use crmeb\basic\BaseController;
  7. use crmeb\services\AliYunSmsService;
  8. use think\facade\Cache;
  9. use think\facade\Db;
  10. class PlatformIncomeDetail extends BaseController
  11. {
  12. public function lst()
  13. {
  14. try {
  15. [$page, $limit] = $this->getPage();
  16. $where = $this->request->params(['date']);
  17. $params = $this->request->params(['pm', 'deal_type', 'search', 'keyword','select_type']);
  18. $query = Db::name('enterprise_platform_income_detail')
  19. ->alias('income_detail')
  20. ->leftJoin('user u', 'u.uid=income_detail.uid')
  21. // ->where('income_detail.mer_id', '!=', 0)
  22. ->whereNotIn('deal_type', [3])
  23. ->when(isset($params['pm']) && $params['pm'] != '', function ($query) use ($params) {
  24. $query->where('pm', $params['pm']);
  25. })
  26. ->when(isset($params['deal_type']) && $params['deal_type'] > 0, function ($query) use ($params) {
  27. $query->where('deal_type', $params['deal_type']);
  28. })
  29. ->when(isset($params['select_type']) && !empty($params['select_type']) , function ($query) use ($params) {
  30. if($params['select_type']=='platform_income_detail'){
  31. // $query->whereIn('deal_type', [1,2,3,5]);
  32. }elseif($params['select_type']=='platform_income_detail_yj'){
  33. // $income_detail_ids=Db::name('enterprise_platform_income_detail')
  34. // ->alias('income_detail')
  35. // ->leftJoin('user u', 'u.uid=income_detail.uid')
  36. // ->leftJoin('store_order o', 'o.order_id=income_detail.order_id')
  37. // ->where('income_detail.mer_id', 0)
  38. //// ->where('income_detail.deal_type',4)
  39. // ->where('pay_type!=5')->column('income_detail.id');
  40. // $query->whereIn('income_detail.id', $income_detail_ids);
  41. }
  42. })
  43. ->when(isset($params['search']) && $params['search'], function ($query) use ($params) {
  44. $select_uid = Db::name('user')
  45. ->where('nickname', 'like', "%{$params['search']}%")
  46. ->whereOr('phone', 'like', "%{$params['search']}%")
  47. ->column('uid');
  48. $query->whereIn('income_detail.uid', $select_uid);
  49. })
  50. ->when(isset($params['keyword']) && $params['keyword'], function ($query) use ($params) {
  51. $select_uid = Db::name('user')
  52. ->where('nickname', 'like', "%{$params['keyword']}%")
  53. ->whereOr('phone', 'like', "%{$params['keyword']}%")
  54. ->column('uid');
  55. if ($select_uid) {
  56. $query->where(" (income_detail.uid in (" . join(',', $select_uid) . ") or income_detail.deal_order_sn like '%{$params['keyword']}%' or income_detail.order_sn like '%{$params['keyword']}%')");
  57. } else {
  58. $query->where(" (income_detail.deal_order_sn like '%{$params['keyword']}%' or income_detail.order_sn like '%{$params['keyword']}%')");
  59. }
  60. })
  61. // ->where('u.test_user', '<', '1')
  62. ->page($page, $limit)
  63. ->field('income_detail.*,u.nickname,u.phone')
  64. ->order('income_detail.deal_time', 'desc');
  65. $list = $this->date_where($query, $where['date'], 'income_detail.deal_time')->select();
  66. if (!$list) {
  67. return app('json')->success([]);
  68. }
  69. $count = $query->count('income_detail.id');
  70. $list->each(function ($item) {
  71. $item['pay_type'] = Db::name('store_order')
  72. ->where('order_id', $item['order_id'])
  73. ->value('pay_type');
  74. $item['extract_type'] = Db::name('user_extract')
  75. ->where('extract_id', $item['user_extra_id'])
  76. ->value('extract_type');
  77. return $item;
  78. });
  79. $query1 = clone $query;
  80. $query2 = clone $query;
  81. $query5 = clone $query;
  82. $query6 = clone $query;
  83. //总入账
  84. $platform_enter_all = $query1
  85. ->whereIn('deal_type', [6,7])
  86. ->where('pm', 1)
  87. ->sum('money');
  88. //总支出
  89. $platform_out_all = $query2
  90. ->whereIn('deal_type', [4,5])
  91. ->where('pm', 0)
  92. ->sum('money');
  93. $yongjin_out_all = $query5
  94. ->where('deal_type', 2)
  95. ->where('pm', 1)
  96. ->sum('money');
  97. $order_in_money = $query6
  98. ->where('deal_type', 1)
  99. ->where('pm', 1)
  100. ->sum('money');
  101. $return_data = compact('platform_out_all', 'yongjin_out_all', 'platform_enter_all', 'list', 'count');
  102. return app('json')->success($return_data);
  103. } catch (\Exception $e) {
  104. Db::name('log')->insert(['data' => '获取平台收支明细错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  105. return app('json')->fail('获取平台收支明细失败' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage());
  106. }
  107. }
  108. /**
  109. * @param $id
  110. * @return mixed
  111. * @author Qinii
  112. * @day 2020-06-11
  113. */
  114. public function detail($id)
  115. {
  116. $financeRepository = app()->make(FinanceRepository::class);
  117. $data = $financeRepository->income_detail($id);
  118. return app('json')->success($data);
  119. }
  120. /**
  121. * 列表中的时间条件
  122. */
  123. public function date_where($Db, $where, $prefix = '', $field = '-')
  124. {
  125. if (!isset($where)) return $Db;
  126. switch ($where) {
  127. case strlen($where) == 10 && strstr($where, $field) !== false:
  128. // 2024-03-08
  129. $Db->whereBetweenTime($prefix, date('Y-m-d H:i:s', strtotime($where)), date('Y-m-d H:i:s', strtotime($where . ' +1day -1second')));
  130. case strlen($where) == 7 && strstr($where, $field) !== false:
  131. // 2024-03
  132. $Db->whereBetweenTime($prefix, date('Y-m-d H:i:s', strtotime($where)), date('Y-m-d H:i:s', strtotime($where . ' +1month -1second')));
  133. break;
  134. case 'today':
  135. $Db->whereBetween($prefix, [date('Y-m-d H:i:s', strtotime('today')), date('Y-m-d H:i:s', strtotime('tomorrow -1second'))]);
  136. break;
  137. case 'week':
  138. $Db->whereBetween($prefix, [date('Y-m-d H:i:s', strtotime('this week 00:00:00')), date('Y-m-d H:i:s', strtotime('next week 00:00:00 -1second'))]);
  139. break;
  140. case 'month':
  141. $Db->whereBetween($prefix, [date('Y-m-d H:i:s', strtotime('first Day of this month 00:00:00')), date('Y-m-d H:i:s', strtotime('first Day of next month 00:00:00 -1second'))]);
  142. break;
  143. case 'year':
  144. $Db->whereBetween($prefix, [date('Y-m-d H:i:s', strtotime('this year 1/1')), date('Y-m-d H:i:s', strtotime('next year 1/1 -1second'))]);
  145. break;
  146. case 'yesterday':
  147. $Db->whereBetween($prefix, [date('Y-m-d H:i:s', strtotime('yesterday')), date('Y-m-d H:i:s', strtotime('today -1second'))]);
  148. break;
  149. case 'quarter':
  150. list($startTime, $endTime) = getMonth();
  151. $Db = $Db->where($prefix, '>', $startTime);
  152. $Db = $Db->where($prefix, '<', $endTime);
  153. break;
  154. case 'lately7':
  155. $Db = $Db->where($prefix, 'between', [date('Y-m-d', strtotime("-7 day")), date('Y-m-d H:i:s')]);
  156. break;
  157. case 'lately30':
  158. $Db = $Db->where($prefix, 'between', [date('Y-m-d', strtotime("-30 day")), date('Y-m-d H:i:s')]);
  159. break;
  160. default:
  161. if (strstr($where, $field) !== false) {
  162. list($startTime, $endTime) = explode($field, $where);
  163. if (strlen($startTime) == 4) {
  164. $Db->whereBetweenTime($prefix, date('Y-m-d H:i:s', strtotime($startTime)), date('Y-m-d H:i:s', strtotime($startTime . ' +1day -1second')));
  165. } else {
  166. if ($startTime == $endTime) {
  167. $Db = $Db->whereDay($prefix, $startTime);
  168. } else {
  169. $Db = $Db->where($prefix, '>', date('Y-m-d H:i:s', strtotime($startTime)));
  170. $Db = $Db->where($prefix, '<', date('Y-m-d H:i:s', strtotime($endTime)));
  171. }
  172. }
  173. }
  174. break;
  175. }
  176. return $Db;
  177. }
  178. }