Finance.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <?php
  2. namespace app\controller\merchant\finance;
  3. use app\common\repositories\finance\FinanceRepository;
  4. use app\controller\api\entropybarter\User;
  5. use crmeb\basic\BaseController;
  6. use think\facade\Db;
  7. class Finance extends BaseController
  8. {
  9. /**
  10. * 收益统计
  11. * @return mixed
  12. */
  13. public function earnings_list()
  14. {
  15. try {
  16. [$page, $limit] = $this->getPage();
  17. $where = $this->request->params(['date']);
  18. $params = $this->request->params(['commission_type']);
  19. $mer_id = $this->request->merId();
  20. $uid = Db::name('merchant')->where('mer_id', $mer_id)->value('uid');
  21. $date = [];
  22. //商户ID
  23. $query = Db::name('user_bill')
  24. ->field('bill_id,create_time,number,commission_type,title,status')
  25. ->where('uid', $uid)
  26. ->whereIn('commission_type', [7, 17, 19])
  27. ->when(isset($params['commission_type']) && $params['commission_type'] != '', function ($query) use ($params) {
  28. $query->where('commission_type', $params['commission_type']);
  29. });
  30. $query1 = clone $query;
  31. $query2 = clone $query;
  32. $date['list'] = $this->date_where($query, $where['date'], 'create_time')->page($page, $limit)->order('create_time', 'desc')->select();
  33. $date['count'] = $query->count();
  34. $date['stride_shop_money'] = $this->date_where($query1, $where['date'], 'create_time')->where('commission_type', 7)->sum('number');
  35. $date['real_subsidy_money'] = $this->date_where($query2, $where['date'], 'create_time')->where('commission_type', 19)->sum('number');
  36. $date['shouyi'] = sprintf("%.2f", $date['real_subsidy_money'] + $date['stride_shop_money']);
  37. return app('json')->success($date);
  38. } catch (\Exception $e) {
  39. Db::name('log')->insert(['data' => '获取佣金对账错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  40. return app('json')->fail('获取佣金信息失败');
  41. }
  42. }
  43. public function earnings_detail()
  44. {
  45. try {
  46. [$page, $limit] = $this->getPage();
  47. $where = $this->request->params(['date']);
  48. $mer_id = $this->request->merId();
  49. $search = $this->request->param('search', '');
  50. $type = $this->request->param('type', '');
  51. $id = $this->request->param('id', '');
  52. if (!empty($id)) {
  53. $user_bill = Db::name('user_bill')->where('bill_id', $id)->find();
  54. $start_date = date("Y/m/01", strtotime($user_bill['create_time']));
  55. $end_date = date("Y/m/31", strtotime($user_bill['create_time']));
  56. $where['date'] = "$start_date-$end_date";
  57. }
  58. $date = [];
  59. //商户ID
  60. $query = Db::name('store_order')
  61. ->alias('o')
  62. ->leftJoin('store_order_extend oe', 'oe.order_id=o.order_id')
  63. ->where('o.is_settlement',1)
  64. ->when($search, function ($query) use ($search) {
  65. $query->where("o.order_sn like '%{$search}%' or o.user_phone like '%{$search}%' or o.real_name like '%{$search}%'");
  66. })
  67. ->when($type == 1, function ($query) use ($mer_id) {
  68. $query->where('oe.shop_money', '>', 0)
  69. ->where('o.mer_id', $mer_id);
  70. }, function ($query) use ($mer_id) {
  71. $query->where('oe.stride_shop_money', '>', 0)
  72. ->where('oe.stride_shop_mer_id', $mer_id);
  73. });
  74. $query1 = clone $query;
  75. $date['list'] = $this->date_where($query, $where['date'], 'o.create_time')
  76. ->field('o.order_id,o.real_name,o.user_phone,o.create_time,o.total_price,o.mer_id,o.uid,o.order_sn,oe.*')
  77. ->page($page, $limit)
  78. ->order('o.create_time desc')
  79. ->select()
  80. ->each(function ($item) {
  81. $user_info = Db::name('user')->where('uid', $item['uid'])->find();
  82. $item['real_name'] = $user_info['nickname'];
  83. $item['user_phone'] = $user_info['account'];
  84. $item['from_mer_name'] = Db::name('merchant')->where('mer_id', $item['mer_id'])->value('mer_name');
  85. unset($item['stride_shop_mer_id']);
  86. return $item;
  87. });
  88. $date['count'] = $this->date_where($query, $where['date'], 'o.create_time')->count();
  89. $date['statistics'] = $this->date_where($query, $where['date'], 'o.create_time')->field('sum(oe.shop_money) shop_money,sum(oe.real_subsidy_money) real_subsidy_money,sum(oe.big_vip_money) big_vip_money,sum(oe.shop_partner_money) shop_partner_money,sum(oe.stride_shop_money) stride_shop_money,sum(oe.shop_let_money) shop_let_money')->select();
  90. return app('json')->success($date);
  91. } catch (\Exception $e) {
  92. Db::name('log')->insert(['data' => '获取佣金对账错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  93. return app('json')->fail('获取佣金信息失败');
  94. }
  95. }
  96. /**
  97. * 创客合伙人
  98. * @return mixed
  99. */
  100. public function shop_partne_list()
  101. {
  102. try {
  103. [$page, $limit] = $this->getPage();
  104. $where = $this->request->params(['date']);
  105. $mer_id = $this->request->merId();
  106. $search = $this->request->param('search', '');
  107. $date = [];
  108. //商户ID
  109. $query = Db::name('user')
  110. ->alias('u')
  111. ->leftJoin('user_bill ub','ub.uid=u.uid')
  112. ->where('u.mer_id', $mer_id)
  113. ->where('u.is_shop_partner', 1)
  114. ->where('ub.commission_type',17)
  115. ->when($search, function ($query) use ($search) {
  116. $query->where("u.phone like %{$search}% or u.nickname like %{$search}%");
  117. });
  118. $query1 = clone $query;
  119. $date['list'] = $this->date_where($query, $where['date'], 'ub.create_time')
  120. ->field('u.uid,u.nickname,u.phone,sum(ub.number) money')
  121. ->group('u.uid')
  122. ->page($page, $limit)
  123. ->select()
  124. ->each(function ($item) {
  125. return $item;
  126. });
  127. $date['count'] = $query->count();
  128. $date['statistics'] = $query1->field('sum(ub.number) money')->select();
  129. return app('json')->success($date);
  130. } catch (\Exception $e) {
  131. Db::name('log')->insert(['data' => '获取创客合伙人错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  132. var_dump($e);
  133. return app('json')->fail('获取创客合伙人失败');
  134. }
  135. }
  136. /**
  137. * 用户账单
  138. * @return mixed
  139. */
  140. public function user_bill()
  141. {
  142. try {
  143. $mer_id = $this->request->merId();
  144. $financeRepository = app()->make(FinanceRepository::class);
  145. $date = $financeRepository->user_bill($mer_id);
  146. return app('json')->success($date);
  147. } catch (\Exception $e) {
  148. Db::name('log')->insert(['data' => '获取创客合伙人错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  149. return app('json')->fail('获取创客合伙人失败');
  150. }
  151. }
  152. /**
  153. * 创客账单
  154. * @return mixed
  155. */
  156. public function maker_bill()
  157. {
  158. try {
  159. $mer_id = $this->request->merId();
  160. $financeRepository = app()->make(FinanceRepository::class);
  161. $date = $financeRepository->user_bill_maker($mer_id);
  162. return app('json')->success($date);
  163. } catch (\Exception $e) {
  164. Db::name('log')->insert(['data' => '获取创客合伙人错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  165. return app('json')->fail('获取创客合伙人失败');
  166. }
  167. }
  168. /**
  169. * 创客详情列表
  170. * @return mixed
  171. */
  172. public function maker_bill_lst($uid)
  173. {
  174. try {
  175. $mer_id = $this->request->merId();
  176. $financeRepository = app()->make(FinanceRepository::class);
  177. $date = $financeRepository->user_bill_maker($mer_id, $uid);
  178. return app('json')->success($date);
  179. } catch (\Exception $e) {
  180. Db::name('log')->insert(['data' => '获取创客合伙人错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  181. return app('json')->fail('获取创客合伙人失败');
  182. }
  183. }
  184. /**
  185. * 详情列表
  186. * @return mixed
  187. */
  188. public function user_bill_lst($uid)
  189. {
  190. try {
  191. $mer_id = $this->request->merId();
  192. $financeRepository = app()->make(FinanceRepository::class);
  193. $date = $financeRepository->user_bill_ck($mer_id, $uid);
  194. return app('json')->success($date);
  195. } catch (\Exception $e) {
  196. Db::name('log')->insert(['data' => '获取创客合伙人错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  197. return app('json')->fail('获取创客合伙人失败');
  198. }
  199. }
  200. /**
  201. * 列表中的时间条件
  202. */
  203. public function date_where($Db, $where, $prefix = 'so.create_time', $field = '-')
  204. {
  205. if (!isset($where)) return $Db;
  206. switch ($where) {
  207. case 'today':
  208. $Db->whereBetween($prefix, [date('Y-m-d H:i:s', strtotime('today')), date('Y-m-d H:i:s', strtotime('tomorrow -1second'))]);
  209. break;
  210. case 'week':
  211. $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'))]);
  212. break;
  213. case 'month':
  214. $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'))]);
  215. break;
  216. case 'year':
  217. $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'))]);
  218. break;
  219. case 'yesterday':
  220. $Db->whereBetween($prefix, [date('Y-m-d H:i:s', strtotime('yesterday')), date('Y-m-d H:i:s', strtotime('today -1second'))]);
  221. break;
  222. case 'quarter':
  223. list($startTime, $endTime) = getMonth();
  224. $Db = $Db->where($prefix, '>', $startTime);
  225. $Db = $Db->where($prefix, '<', $endTime);
  226. break;
  227. case 'lately7':
  228. $Db = $Db->where($prefix, 'between', [date('Y-m-d', strtotime("-7 day")), date('Y-m-d H:i:s')]);
  229. break;
  230. case 'lately30':
  231. $Db = $Db->where($prefix, 'between', [date('Y-m-d', strtotime("-30 day")), date('Y-m-d H:i:s')]);
  232. break;
  233. default:
  234. if (strstr($where, $field) !== false) {
  235. list($startTime, $endTime) = explode($field, $where);
  236. if (strlen($startTime) == 4) {
  237. $Db->whereBetweenTime($prefix, date('Y-m-d H:i:s', strtotime($startTime)), date('Y-m-d H:i:s', strtotime($startTime . ' +1day -1second')));
  238. } else {
  239. if ($startTime == $endTime) {
  240. $Db = $Db->whereDay($prefix, $startTime);
  241. } else {
  242. $Db = $Db->where($prefix, '>', date('Y-m-d H:i:s', strtotime($startTime)));
  243. $Db = $Db->where($prefix, '<', date('Y-m-d H:i:s', strtotime($endTime)));
  244. }
  245. }
  246. }
  247. break;
  248. }
  249. return $Db;
  250. }
  251. /**
  252. * 积分统计
  253. * @return mixed
  254. */
  255. public function integral_list(){
  256. try {
  257. $financeRepository = app()->make(FinanceRepository::class);
  258. $date = $financeRepository->integral_list();
  259. return app('json')->success($date);
  260. } catch (\Exception $e) {
  261. Db::name('log')->insert(['data' => '佣金统计错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  262. return app('json')->fail('佣金统计失败');
  263. }
  264. }
  265. /**
  266. * 京豆统计
  267. * @return mixed
  268. */
  269. public function jingdou_list(){
  270. try {
  271. $mer_id = $this->request->merId();
  272. $financeRepository = app()->make(FinanceRepository::class);
  273. $date = $financeRepository->jingdou_list($mer_id);
  274. return app('json')->success($date);
  275. } catch (\Exception $e) {
  276. Db::name('log')->insert(['data' => '京豆统计错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  277. return app('json')->fail('京豆统计失败');
  278. }
  279. }
  280. /**
  281. * 分润统计
  282. * @return mixed
  283. */
  284. public function fenrun_list(){
  285. try {
  286. $mer_id = $this->request->merId();
  287. $financeRepository = app()->make(FinanceRepository::class);
  288. $date = $financeRepository->fenrun_list($mer_id);
  289. return app('json')->success($date);
  290. } catch (\Exception $e) {
  291. Db::name('log')->insert(['data' => '分润统计错误:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
  292. return app('json')->fail('分润统计失败');
  293. }
  294. }
  295. }