PlatformIncomeDetail.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. namespace app\controller\merchant\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', 'subjection_team_uid', 'deal_type', 'search', 'keyword', 'select_type']);
  18. //商户ID
  19. $mer_id = $this->request->merId();
  20. $query = Db::name('enterprise_platform_income_detail')
  21. ->alias('income_detail')
  22. ->leftJoin('user u', 'u.uid=income_detail.uid')
  23. ->where('income_detail.mer_id', $mer_id)
  24. ->when(isset($params['pm']) && $params['pm'] != '', function ($query) use ($params) {
  25. $query->where('pm', $params['pm']);
  26. })
  27. ->when(isset($params['deal_type']) && $params['deal_type'] > 0, function ($query) use ($params) {
  28. $query->where('deal_type', $params['deal_type']);
  29. })
  30. // ->when(isset($params['select_type']) && !empty($params['select_type']), function ($query) use ($params, $mer_id) {
  31. // if ($params['select_type'] == 'platform_income_detail') {
  32. // $query->whereIn('deal_type', [1, 2, 3, 5]);
  33. // } elseif ($params['select_type'] == 'platform_income_detail_yj') {
  34. // $income_detail_ids = Db::name('enterprise_platform_income_detail')
  35. // ->alias('income_detail')
  36. // ->leftJoin('user u', 'u.uid=income_detail.uid')
  37. // ->leftJoin('store_order o', 'o.order_id=income_detail.order_id')
  38. // ->where('income_detail.mer_id', $mer_id)->where('income_detail.deal_type', 4)->where('pay_type!=5')->column('income_detail.id');
  39. // $query->whereIn('income_detail.id', $income_detail_ids);
  40. // }
  41. // })
  42. ->when(isset($params['search']) && $params['search'], function ($query) use ($params) {
  43. $select_uid = Db::name('user')
  44. ->where('nickname', 'like', "%{$params['search']}%")
  45. ->whereOr('phone', 'like', "%{$params['search']}%")
  46. ->column('uid');
  47. $query->whereIn('income_detail.uid', $select_uid);
  48. })
  49. ->when(isset($params['keyword']) && $params['keyword'], function ($query) use ($params) {
  50. $select_uid = Db::name('user')
  51. ->where('nickname', 'like', "%{$params['keyword']}%")
  52. ->whereOr('phone', 'like', "%{$params['keyword']}%")
  53. ->column('uid');
  54. if ($select_uid) {
  55. $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']}%')");
  56. } else {
  57. $query->where(" (income_detail.deal_order_sn like '%{$params['keyword']}%' or income_detail.order_sn like '%{$params['keyword']}%')");
  58. }
  59. })
  60. ->when(isset($params['subjection_team_uid']) && $params['subjection_team_uid'], function ($query) use ($params, $mer_id) {
  61. unset($where);
  62. $node_uid = $params['subjection_team_uid'];
  63. $where['node_uid'] = $node_uid;
  64. $where['mer_id'] = $mer_id;
  65. $tema_id = $this->jisuantuandui($where, [$node_uid]);
  66. if ($params['select_type'] != 'platform_income_detail')
  67. $tema_id = array_diff($tema_id, [$node_uid]);
  68. $query->whereIn('income_detail.uid', $tema_id);
  69. })
  70. // ->where('u.test_user', '<', '1')
  71. ->page($page, $limit)
  72. ->field('income_detail.*,u.nickname,u.phone')
  73. ->order('income_detail.deal_time', 'desc');
  74. $list = $this->date_where($query, $where['date'], 'income_detail.deal_time')->select();
  75. if (!$list) {
  76. return app('json')->success([]);
  77. }
  78. $count = $query->count('income_detail.id');
  79. $list->each(function ($item) use ($mer_id) {
  80. $enterprise_user = Db::name('enterprise_user')
  81. ->where('uid', $item['uid'])
  82. ->find();
  83. $item['subjection_team_phone'] = $item['pay_type'] = '';
  84. if ($enterprise_user) {
  85. if ($enterprise_user['node_uid'] == 11714) {
  86. $node_uid = $item['uid'];
  87. } else {
  88. $node_uid = $this->getParentNode($enterprise_user['node_uid']);
  89. }
  90. $item['subjection_team_phone'] = Db::name('user')
  91. ->where('uid', $node_uid)
  92. ->value('phone');
  93. }
  94. $item['pay_type'] = Db::name('store_order')
  95. ->where('order_id', $item['order_id'])
  96. ->value('pay_type');
  97. $item['extract_type'] = Db::name('user_extract')
  98. ->where('extract_id', $item['user_extra_id'])
  99. ->value('extract_type');
  100. return $item;
  101. });
  102. $query1 = clone $query;
  103. $query2 = clone $query;
  104. $query3 = clone $query;
  105. $query4 = clone $query;
  106. $query5 = clone $query;
  107. $query6 = clone $query;
  108. //总入账
  109. // 佣金提现
  110. $yongjin_out_all = $query5
  111. ->where('deal_type', 2)
  112. ->where('pm', 1)
  113. ->sum('income_detail.money');
  114. // 订单入账总额
  115. $order_in_money = $query6
  116. ->where('deal_type', 1)
  117. ->where('pm', 1)
  118. ->sum('income_detail.money');
  119. $order_in_vr = $query6
  120. ->where('deal_type', 1)
  121. ->where('pm', 1)
  122. ->sum('income_detail.vr');
  123. $order_in_fg = $query6
  124. ->where('deal_type', 1)
  125. ->where('pm', 1)
  126. ->sum('income_detail.fg');
  127. $platform_enter_all = $yongjin_out_all+$order_in_money+$order_in_vr+$order_in_fg;
  128. $return_data = compact( 'platform_enter_all', 'yongjin_out_all', 'list', 'count', 'order_in_money', 'order_in_vr', 'order_in_fg');
  129. return app('json')->success($return_data);
  130. } catch (\Exception $e) {
  131. Db::name('log')->insert(['data' => '获取平台收支明细错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  132. return app('json')->fail('获取平台收支明细失败' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage());
  133. }
  134. }
  135. /**
  136. * @param $id
  137. * @return mixed
  138. * @author Qinii
  139. * @day 2020-06-11
  140. */
  141. public function detail($id)
  142. {
  143. $mer_id = $this->request->merId();
  144. $financeRepository = app()->make(FinanceRepository::class);
  145. $data = $financeRepository->income_detail($id,$mer_id);
  146. return app('json')->success($data);
  147. }
  148. /**
  149. * 列表中的时间条件
  150. */
  151. public function date_where($Db, $where, $prefix = '', $field = '-')
  152. {
  153. if (!isset($where)) return $Db;
  154. switch ($where) {
  155. case strlen($where) == 10 && strstr($where, $field) !== false:
  156. // 2024-03-08
  157. $Db->whereBetweenTime($prefix, date('Y-m-d H:i:s', strtotime($where)), date('Y-m-d H:i:s', strtotime($where . ' +1day -1second')));
  158. case strlen($where) == 7 && strstr($where, $field) !== false:
  159. // 2024-03
  160. $Db->whereBetweenTime($prefix, date('Y-m-d H:i:s', strtotime($where)), date('Y-m-d H:i:s', strtotime($where . ' +1month -1second')));
  161. break;
  162. case 'today':
  163. $Db->whereBetween($prefix, [date('Y-m-d H:i:s', strtotime('today')), date('Y-m-d H:i:s', strtotime('tomorrow -1second'))]);
  164. break;
  165. case 'week':
  166. $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'))]);
  167. break;
  168. case 'month':
  169. $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'))]);
  170. break;
  171. case 'year':
  172. $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'))]);
  173. break;
  174. case 'yesterday':
  175. $Db->whereBetween($prefix, [date('Y-m-d H:i:s', strtotime('yesterday')), date('Y-m-d H:i:s', strtotime('today -1second'))]);
  176. break;
  177. case 'quarter':
  178. list($startTime, $endTime) = getMonth();
  179. $Db = $Db->where($prefix, '>', $startTime);
  180. $Db = $Db->where($prefix, '<', $endTime);
  181. break;
  182. case 'lately7':
  183. $Db = $Db->where($prefix, 'between', [date('Y-m-d', strtotime("-7 day")), date('Y-m-d H:i:s')]);
  184. break;
  185. case 'lately30':
  186. $Db = $Db->where($prefix, 'between', [date('Y-m-d', strtotime("-30 day")), date('Y-m-d H:i:s')]);
  187. break;
  188. default:
  189. if (strstr($where, $field) !== false) {
  190. list($startTime, $endTime) = explode($field, $where);
  191. if (strlen($startTime) == 4) {
  192. $Db->whereBetweenTime($prefix, date('Y-m-d H:i:s', strtotime($startTime)), date('Y-m-d H:i:s', strtotime($startTime . ' +1day -1second')));
  193. } else {
  194. if ($startTime == $endTime) {
  195. $Db = $Db->whereDay($prefix, $startTime);
  196. } else {
  197. $Db = $Db->where($prefix, '>', date('Y-m-d H:i:s', strtotime($startTime)));
  198. $Db = $Db->where($prefix, '<', date('Y-m-d H:i:s', strtotime($endTime)));
  199. }
  200. }
  201. }
  202. break;
  203. }
  204. return $Db;
  205. }
  206. }