OrdersController.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: hp
  5. * Date: 2017/11/30
  6. * Time: 17:24
  7. */
  8. namespace App\Http\Controllers\Manage\Trade;
  9. use App\Http\Controllers\Controller;
  10. use App\Http\Controllers\Manage\Trade\Transformers\OrderTodayStatTransformer;
  11. use App\Http\Controllers\Manage\Trade\Transformers\OrderTransformer;
  12. use App\Modules\Channel\Services\ChannelService;
  13. use App\Modules\SendOrder\Services\SendOrderService;
  14. use App\Modules\Trade\Services\OrderService;
  15. use App\Modules\OfficialAccount\Services\ForceSubscribeService;
  16. use App\Modules\User\Models\User;
  17. use DB;
  18. use Illuminate\Http\Request;
  19. class OrdersController extends Controller
  20. {
  21. /**
  22. * @apiDefine Trade 交易订单
  23. */
  24. /**
  25. * @apiVersion 1.0.0
  26. * @api {GET} trade/orders 获取订单列表
  27. * @apiGroup Trade
  28. * @apiName getOrders
  29. * @apiParam {Number} [send_order_id] 派单ID
  30. * @apiParam {String} [begin_time] 开始时间
  31. * @apiParam {String} [end_time] 结束时间
  32. * @apiParam {Number} [distribution_channel_id] 分销渠道ID
  33. * @apiParam {Number} [transaction_id] 三方平台台交易ID.
  34. * @apiParam {Number} [trade_no] 订单号
  35. * @apiParam {Number} [uid] 用户ID
  36. * @apiParam {Number} [status] 订单状态(0:成功, 1:失败, 2:全部)
  37. * @apiSuccess {Number} id 订单ID.
  38. * @apiSuccess {Number} distribution_channel_id 渠道id.
  39. * @apiSuccess {Number} uid 用户id.
  40. * @apiSuccess {Number} product_id 产品id.
  41. * @apiSuccess {String} price 价格.
  42. * @apiSuccess {String} status '状态 PAID:已支付 UNPAID未支付'.
  43. * @apiSuccess {String} pay_type '支付类型 1:公众号支付'.
  44. * @apiSuccess {String} trade_no 平台交易ID.
  45. * @apiSuccess {String} servicer 支付服务商OFFICIAL.
  46. * @apiSuccess {String} transaction_id 三方平台交易ID.
  47. * @apiSuccess {String} pay_end_at 支付完成时间.
  48. * @apiSuccess {String} create_ip 订单创建IP地址
  49. * @apiSuccess {Number} send_order_id 派单id
  50. * @apiSuccess {String} send_order_name 派单名称
  51. * @apiSuccess {String} created_at 创建时间
  52. * @apiSuccess {String} offical_account_nick_name 服务号名称
  53. * @apiSuccess {String} updated_at 更新时间
  54. * @apiSuccessExample {json} Success-Response:
  55. *
  56. * {
  57. * "code": 0,
  58. * "msg": "",
  59. * "data": [
  60. * {
  61. * "id": 2,
  62. * "distribution_channel_id": 2,
  63. * "uid": 1,
  64. * "product_id": 1,
  65. * "price": "1.00",
  66. * "status": "PAID",
  67. * "pay_type": "WECHAT",
  68. * "trade_no": "201711301125401585459852216605",
  69. * "servicer": "AllinPay",
  70. * "transaction_id": "4200000013201711307989945956",
  71. * "pay_end_at": "2017-12-01 10:20:04",
  72. * "create_ip": "::1",
  73. * "send_order_id": 0,
  74. * "send_order_name": "",
  75. * "offical_account_nick_name": "追书云",
  76. * "created_at": 1512094804,
  77. * "updated_at": 1512094804
  78. * }
  79. * ]
  80. * }
  81. */
  82. function getOrders(Request $request)
  83. {
  84. $params = [];
  85. $request->has('uid') && $request->input('uid') && $params['uid'] = (int)$request->input('uid');
  86. $request->has('trade_no') && $request->input('trade_no') && $params['trade_no'] = trim($request->input('trade_no'));
  87. $request->has('end_time') && $request->input('end_time') && $params['end_time'] = trim($request->input('end_time'));
  88. $request->has('start_time') && $request->input('start_time') && $params['begin_time'] = trim($request->input('start_time'));
  89. $request->has('send_order_id') && $request->input('send_order_id') && $params['send_order_id'] = (int)$request->input('send_order_id');
  90. $request->has('transaction_id') && $request->input('transaction_id') && $params['transaction_id'] = trim($request->input('transaction_id'));
  91. $request->has('distribution_channel_id') && $request->input('distribution_channel_id') && $params['distribution_channel_id'] = (int)$request->input('distribution_channel_id');
  92. $status = $request->has('status') ? $request->input('status'):0;
  93. if (0==$status){
  94. $params['status'] = 'PAID';
  95. }elseif (1==$status){
  96. $params['status'] = 'UNPAID';
  97. }
  98. if(array_key_exists('transaction_id',$params) && $params['transaction_id'])
  99. {
  100. $trade_no = $params['transaction_id'];
  101. $params=array(
  102. 'transaction_id'=>$trade_no,
  103. );
  104. $created_at = substr($trade_no,10,8);
  105. $year = substr($created_at,0,4);
  106. $month = substr($created_at,4,2);
  107. $day = substr($created_at,6,2);
  108. $created_at = $year.'-'.$month.'-'.$day;
  109. /*$params['begin_time'] = $created_at.' 00:00:00';
  110. $params['end_time'] = $created_at;*/
  111. $params['created_at'] = $created_at;
  112. \Log::info('filter_param:'.json_encode($params));
  113. }
  114. if(array_key_exists('trade_no',$params) && $params['trade_no']){
  115. unset($params['begin_time']);
  116. unset($params['end_time']);
  117. }
  118. \Log::info('orders_search_start:'.time());
  119. $orders = OrderService::search($params);
  120. \Log::info('orders_search_start1:'.time());
  121. foreach ($orders as $item) {
  122. $item->channel_name = ChannelService::getChannelNicknameById($item->distribution_channel_id);
  123. $nickName = ForceSubscribeService::getOfficalAccountNickName($item->uid);
  124. $item->offical_account_nick_name = $nickName ? $nickName->nickname : '';
  125. }
  126. return response()->pagination(new OrderTransformer(), $orders);
  127. }
  128. /**
  129. * @apiVersion 1.0.0
  130. * @api {GET} trade/exportOrders 导出订单列表
  131. * @apiGroup Trade
  132. * @apiName exportOrders
  133. * @apiParam {Number} [send_order_id] 派单ID
  134. * @apiParam {String} [begin_time] 开始时间
  135. * @apiParam {String} [end_time] 结束时间
  136. * @apiParam {Number} [status] 订单状态(0:成功, 1:失败, 2:全部)
  137. * @apiParam {Number} [distribution_channel_id] 分销渠道ID
  138. * @apiParam {Number} [transaction_id] 三方平台台交易ID.
  139. * @apiParam {Number} [trade_no] 订单号
  140. * @apiParam {Number} [uid] 用户ID
  141. * @apiSuccess {Number} id 订单ID.
  142. * @apiSuccess {Number} distribution_channel_id 渠道id.
  143. * @apiSuccess {Number} uid 用户id.
  144. * @apiSuccess {Number} product_id 产品id.
  145. * @apiSuccess {String} price 价格.
  146. * @apiSuccess {String} status '状态 PAID:已支付 UNPAID未支付'.
  147. * @apiSuccess {String} pay_type '支付类型 1:公众号支付'.
  148. * @apiSuccess {String} trade_no 平台交易ID.
  149. * @apiSuccess {String} servicer 支付服务商OFFICIAL.
  150. * @apiSuccess {String} transaction_id 三方平台交易ID.
  151. * @apiSuccess {String} pay_end_at 支付完成时间.
  152. * @apiSuccess {String} create_ip 订单创建IP地址
  153. * @apiSuccess {Number} send_order_id 派单id
  154. * @apiSuccess {String} send_order_name 派单名称
  155. * @apiSuccess {String} created_at 创建时间
  156. * @apiSuccess {String} updated_at 更新时间
  157. * @apiSuccessExample {json} Success-Response:
  158. *
  159. * {
  160. * "code": 0,
  161. * "msg": "",
  162. * "data": [
  163. * {
  164. * "id": 2,
  165. * "distribution_channel_id": 2,
  166. * "uid": 1,
  167. * "product_id": 1,
  168. * "price": "1.00",
  169. * "status": "PAID",
  170. * "pay_type": "WECHAT",
  171. * "trade_no": "201711301125401585459852216605",
  172. * "servicer": "AllinPay",
  173. * "transaction_id": "4200000013201711307989945956",
  174. * "pay_end_at": "2017-12-01 10:20:04",
  175. * "create_ip": "::1",
  176. * "send_order_id": 0,
  177. * "send_order_name": "",
  178. * "created_at": 1512094804,
  179. * "updated_at": 1512094804
  180. * }
  181. * ]
  182. * }
  183. */
  184. function exportOrders(Request $request)
  185. {
  186. $params = [];
  187. $request->has('uid') && $request->input('uid') && $params['uid'] = (int)$request->input('uid');
  188. $request->has('trade_no') && $request->input('trade_no') && $params['trade_no'] = trim($request->input('trade_no'));
  189. $request->has('end_time') && $request->input('end_time') && $params['end_time'] = trim($request->input('end_time'));
  190. $request->has('start_time') && $request->input('start_time') && $params['begin_time'] = trim($request->input('start_time'));
  191. $request->has('send_order_id') && $request->input('send_order_id') && $params['send_order_id'] = (int)$request->input('send_order_id');
  192. $request->has('transaction_id') && $request->input('transaction_id') && $params['transaction_id'] = trim($request->input('transaction_id'));
  193. $request->has('distribution_channel_id') && $request->input('distribution_channel_id') && $params['distribution_channel_id'] = (int)$request->input('distribution_channel_id');
  194. $status = $request->has('status') ? $request->input('status'):0;
  195. if (0==$status){
  196. $params['status'] = 'PAID';
  197. }elseif (1==$status){
  198. $params['status'] = 'UNPAID';
  199. }
  200. $obj = OrderService::searchObj($params);
  201. header("Content-type:application/vnd.ms-excel");
  202. header("Content-Disposition:attachment;filename=" . "充值记录" . date("YmdHis") . ".csv");
  203. echo("\"" . mb_convert_encoding("\"支付单号\",\"三方平台交易单号\",\"用户ID\",\"充值金额\",\"支付方式\",\"创建时间\",\"支付时间\",\"渠道id\",\"渠道名称\",\"派单名称\",\"派单id\"\r\n", "GBK", "UTF-8") . "\",");
  204. $obj->chunk(2000, function ($orders){
  205. foreach ($orders as $item) {
  206. echo("\"" . mb_convert_encoding('`' . $item->trade_no, "GBK", "UTF-8") . "\",");
  207. echo("\"" . mb_convert_encoding('`' . $item->transaction_id, "GBK", "UTF-8") . "\",");
  208. echo("\"" . $item->uid . "\",");
  209. echo("\"" . $item->price . "\",");
  210. echo("\"" . $item->pay_type . "\",");
  211. echo("\"" . mb_convert_encoding(date('Y-m-d H:i:s', strtotime($item->created_at)), "GBK", "UTF-8") . "\",");
  212. echo("\"" . mb_convert_encoding(date('Y-m-d H:i:s', strtotime($item->pay_end_at)), "GBK", "UTF-8") . "\",");
  213. echo("\"" . $item->distribution_channel_id . "\",");
  214. $channel_name = ChannelService::getChannelNicknameById($item->distribution_channel_id);
  215. echo("\"" . mb_convert_encoding($channel_name ? $channel_name : '未知', "GBK", "UTF-8") . "\",");
  216. echo("\"" . mb_convert_encoding($item->send_order_name, "GBK", "UTF-8") . "\",");
  217. echo("\"" . $item->send_order_id . "\"\r\n");
  218. }
  219. });
  220. exit();
  221. }
  222. /*
  223. * 渠道当日数据
  224. */
  225. function today(Request $request)
  226. {
  227. $distribution_channel_id = $request->has('distribution_channel_id') ? (int)$request->input('distribution_channel_id') : null;
  228. $begin_time = date('Y-m-d');
  229. $end_time = date('Y-m-d H:i:s', strtotime($begin_time) + 86400 - 1);
  230. $data_obj = DB::table('orders')->select(DB::raw("count(*) paid_num,sum(price) amount,count(distinct uid) pay_user_num"))
  231. ->where('created_at', '>=', $begin_time)
  232. ->where('created_at', '<=', $end_time)
  233. ->where('status', 'PAID');
  234. //支付订单数据
  235. if ($distribution_channel_id) $data_obj->where('distribution_channel_id', $distribution_channel_id);
  236. $data = $data_obj->first();
  237. //总订单数
  238. $total_order_num_obj = DB::table('orders')->where('created_at', '>=', $begin_time)
  239. ->where('created_at', '<=', $end_time);
  240. if ($distribution_channel_id) $total_order_num_obj->where('distribution_channel_id', $distribution_channel_id);
  241. $total_order_num = $total_order_num_obj->count();
  242. if ($distribution_channel_id) {
  243. $first_data = DB::select("select count(distinct uid) count,sum(price) amount from orders a where created_at>'{$begin_time}' and created_at<'{$end_time}' and status ='PAID' and distribution_channel_id='{$distribution_channel_id}' and not exists (select uid from orders where a.uid = uid and created_at < '{$begin_time}' and status= 'PAID' limit 1)");
  244. $total_pay_user_num = DB::select("select count(distinct uid) count from orders where created_at>'{$begin_time}' and distribution_channel_id='{$distribution_channel_id}' and created_at<'{$end_time}' and status ='PAID'");
  245. $uv_pv = SendOrderService::getChannelPromotionTotalUvPv($distribution_channel_id, $begin_time);
  246. } else {
  247. $first_data = DB::select("select count(distinct uid) count,sum(price) amount from orders a where created_at>'{$begin_time}' and created_at<'{$end_time}' and status ='PAID' and not exists (select uid from orders where a.uid = uid and created_at < '{$begin_time}' and status= 'PAID' limit 1)");
  248. $total_pay_user_num = DB::select("select count(distinct uid) count from orders where created_at>'{$begin_time}' and created_at<'{$end_time}' and status ='PAID'");
  249. //$uv_pv = SendOrderService::getChannelPromotionTotalUvPv(null, $begin_time);
  250. $uv_pv = ['uv'=>0,'pv'=>0];//SendOrderService::getChannelPromotionTotalUvPv(null, $begin_time);
  251. }
  252. //查当日关注人数
  253. $force_user_num = ForceSubscribeService::forceSubscribeUserCountByChannelIdAndDate($distribution_channel_id, $begin_time, $end_time);
  254. $data = [
  255. 'send_order_num' => SendOrderService::getPromotionCount(compact('begin_time', 'end_time', 'distribution_channel_id')),
  256. 'real_send_order_num' => SendOrderService::getRealPromotionCount(compact('begin_time', 'end_time', 'distribution_channel_id')),
  257. 'new_user_num' => $uv_pv['uv'],
  258. 'click_num' => $uv_pv['pv'],
  259. 'register_user_num' => User::getTotalCount(compact('begin_time', 'end_time')),
  260. 'pay_user_num' => (int)$total_pay_user_num[0]->count,
  261. 'first_pay_user_num' => (int)$first_data[0]->count,
  262. 'not_first_pay_user_num' => $total_pay_user_num[0]->count - $first_data[0]->count,
  263. 'recharge_amount' => (float)$data->amount,
  264. 'first_pay_amount' => (float)$first_data[0]->amount,
  265. 'not_first_pay_amount' => round($data->amount - $first_data[0]->amount, 2),
  266. 'pay_success_rate' => $total_order_num ? round(100 * $data->paid_num / $total_order_num, 2) . '%' : '0%',
  267. 'force_user_num' => (int)$force_user_num
  268. ];
  269. return response()->success($data);
  270. }
  271. /**
  272. * 渠道当日数据列表
  273. */
  274. function todayChannelList(Request $request)
  275. {
  276. $begin_time = date('Y-m-d');
  277. $end_time = date('Y-m-d') . " 23:59:59";
  278. $distribution_channel_id = $request->has('distribution_channel_id') ? (int)$request->input('distribution_channel_id') : null;
  279. $fields = [
  280. 'distribution_channel_id' => "",
  281. 'channel_name' => "",
  282. 'channel_nickname' => "",
  283. 'paid_success_num' => 0,
  284. 'amount' => 0,
  285. 'pay_user_success_num' => 0,
  286. 'paid_num' => 0,
  287. 'register_user_num' => 0,
  288. 'force_user_num' => 0,
  289. 'send_order_create_num' => 0,
  290. 'send_order_today_num' => 0,
  291. ];
  292. $result = [];
  293. //SQL0 渠道列表
  294. /*
  295. [{
  296. "distribution_channel_id": 1,
  297. "channel_name": "赵娃",
  298. "channel_nickname": "哥哥不可以1"
  299. }]
  300. */
  301. $dataChannelObj1 = DB::table('distribution_channels') ->join('channel_users','channel_users.id','=','distribution_channels.channel_user_id')
  302. ->join('companies','companies.id','=','channel_users.company_id')
  303. ->select('distribution_channels.id as distribution_channel_id', 'distribution_channels.name as channel_name', 'companies.name as channel_nickname','companies.fans_gender');
  304. if ($distribution_channel_id) $dataChannelObj1->where('distribution_channels.id', $distribution_channel_id);
  305. $dataChannel1 = $dataChannelObj1->get();
  306. foreach ($dataChannel1 as $data) {
  307. $data = json_decode(json_encode($data), true);
  308. switch ($data['fans_gender']){
  309. case 1:$data['fans_gender'] = '男';break;
  310. case 2:$data['fans_gender'] = '女';break;
  311. case 3:$data['fans_gender'] = '混合粉';break;
  312. default:$data['fans_gender'] = '';
  313. }
  314. $result[$data['distribution_channel_id']] = array_merge($fields, $data);
  315. }
  316. //SQL1 成功充值总额 成功充值订单数 成功付费人数
  317. /*
  318. [{
  319. "distribution_channel_id": 1,
  320. "paid_success_num": 2,//成功充值订单数
  321. "amount": "0.02",//成功充值总额
  322. "pay_user_success_num": 1,//成功付费人数
  323. }]
  324. */
  325. $dataOrderObj1 = DB::table('orders')->select('distribution_channel_id', DB::raw("count(*) paid_success_num, sum(price) amount, count(distinct uid) pay_user_success_num"))
  326. ->where('created_at', '>=', $begin_time)
  327. ->where('created_at', '<=', $end_time)
  328. ->where('status', 'PAID')
  329. ->groupby('distribution_channel_id');
  330. if ($distribution_channel_id) $dataOrderObj1->where('distribution_channel_id', $distribution_channel_id);
  331. $dataOrder1 = $dataOrderObj1->get();
  332. if ($dataOrder1 && sizeof($dataOrder1) > 0) {
  333. foreach ($dataOrder1 as $data) {
  334. $data = json_decode(json_encode($data), true);
  335. if (isset($result[$data['distribution_channel_id']])) {
  336. $result[$data['distribution_channel_id']] = array_merge($result[$data['distribution_channel_id']], $data);
  337. } else {
  338. $result[$data['distribution_channel_id']] = array_merge($fields, $data);
  339. }
  340. }
  341. }
  342. //SQL2 总订单数
  343. /*
  344. [{
  345. "distribution_channel_id": 1,
  346. "paid_num": 2,//总订单数
  347. }]
  348. */
  349. $dataOrderObj2 = DB::table('orders')->select('distribution_channel_id', DB::raw("count(*) paid_num"))
  350. ->where('created_at', '>=', $begin_time)
  351. ->where('created_at', '<=', $end_time)
  352. ->groupby('distribution_channel_id');
  353. if ($distribution_channel_id) $dataOrderObj2->where('distribution_channel_id', $distribution_channel_id);
  354. $dataOrder2 = $dataOrderObj2->get();
  355. if ($dataOrder2 && sizeof($dataOrder2) > 0) {
  356. foreach ($dataOrder2 as $data) {
  357. $data = json_decode(json_encode($data), true);
  358. if (isset($result[$data['distribution_channel_id']])) {
  359. $result[$data['distribution_channel_id']] = array_merge($result[$data['distribution_channel_id']], $data);
  360. } else {
  361. $result[$data['distribution_channel_id']] = array_merge($fields, $data);
  362. }
  363. }
  364. }
  365. //SQL3 注册用户数
  366. /*
  367. [{
  368. "distribution_channel_id": 1,
  369. "register_user_num": 2,//注册用户数
  370. }]
  371. */
  372. $dataRegisterUserObj = DB::table('users')->select('distribution_channel_id', DB::raw("count(*) register_user_num"))
  373. ->where('created_at', '>=', $begin_time)
  374. ->where('created_at', '<=', $end_time)
  375. ->groupby('distribution_channel_id');
  376. if ($distribution_channel_id) $dataRegisterUserObj->where('distribution_channel_id', $distribution_channel_id);
  377. $dataRegisterUser = $dataRegisterUserObj->get();
  378. if ($dataRegisterUser && sizeof($dataRegisterUser) > 0) {
  379. foreach ($dataRegisterUser as $data) {
  380. $data = json_decode(json_encode($data), true);
  381. if (isset($result[$data['distribution_channel_id']])) {
  382. $result[$data['distribution_channel_id']] = array_merge($result[$data['distribution_channel_id']], $data);
  383. } else {
  384. $result[$data['distribution_channel_id']] = array_merge($fields, $data);
  385. }
  386. }
  387. }
  388. //SQL4 新增关注用户数
  389. /*
  390. [{
  391. "distribution_channel_id": 1,
  392. "force_user_num": 2,//新增关注用户数
  393. }]
  394. */
  395. $dataForceUserObj = DB::table('force_subscribe_users')->select('distribution_channel_id', DB::raw("count(*) force_user_num"))
  396. //->where('is_subscribed', '=', 1)
  397. ->where('created_at', '>=', $begin_time)
  398. ->where('created_at', '<=', $end_time)
  399. ->groupby('distribution_channel_id');
  400. if ($distribution_channel_id) $dataForceUserObj->where('distribution_channel_id', $distribution_channel_id);
  401. $dataForceUser = $dataForceUserObj->get();
  402. if ($dataForceUser && sizeof($dataForceUser) > 0) {
  403. foreach ($dataForceUser as $data) {
  404. $data = json_decode(json_encode($data), true);
  405. if (isset($result[$data['distribution_channel_id']])) {
  406. $result[$data['distribution_channel_id']] = array_merge($result[$data['distribution_channel_id']], $data);
  407. } else {
  408. $result[$data['distribution_channel_id']] = array_merge($fields, $data);
  409. }
  410. }
  411. }
  412. //SQL4 派单创建数
  413. /*
  414. [{
  415. "distribution_channel_id": 1,
  416. "send_order_create_num": 2,//派单创建数
  417. }]
  418. */
  419. $dataSendOrderObj1 = DB::table('send_orders')->select('distribution_channel_id', DB::raw("count(*) send_order_create_num"))
  420. ->where('created_at', '>=', $begin_time)
  421. ->where('created_at', '<=', $end_time)
  422. ->groupby('distribution_channel_id');
  423. if ($distribution_channel_id) $dataSendOrderObj1->where('distribution_channel_id', $distribution_channel_id);
  424. $dataSendOrder1 = $dataSendOrderObj1->get();
  425. if ($dataSendOrder1 && sizeof($dataSendOrder1) > 0) {
  426. foreach ($dataSendOrder1 as $data) {
  427. $data = json_decode(json_encode($data), true);
  428. if (isset($result[$data['distribution_channel_id']])) {
  429. $result[$data['distribution_channel_id']] = array_merge($result[$data['distribution_channel_id']], $data);
  430. } else {
  431. $result[$data['distribution_channel_id']] = array_merge($fields, $data);
  432. }
  433. }
  434. }
  435. //SQL5 今日派单数
  436. /*
  437. [{
  438. "distribution_channel_id": 1,
  439. "send_order_today_num": 2,//今日派单数
  440. }]
  441. */
  442. $dataSendOrderObj2 = DB::table('send_orders')->select('distribution_channel_id', DB::raw("count(*) send_order_today_num"))
  443. ->where('send_time', '>=', $begin_time)
  444. ->where('send_time', '<=', $end_time)
  445. ->groupby('distribution_channel_id');
  446. if ($distribution_channel_id) $dataSendOrderObj2->where('distribution_channel_id', $distribution_channel_id);
  447. $dataSendOrder2 = $dataSendOrderObj2->get();
  448. if ($dataSendOrder2 && sizeof($dataSendOrder2) > 0) {
  449. foreach ($dataSendOrder2 as $data) {
  450. $data = json_decode(json_encode($data), true);
  451. if (isset($result[$data['distribution_channel_id']])) {
  452. $result[$data['distribution_channel_id']] = array_merge($result[$data['distribution_channel_id']], $data);
  453. } else {
  454. $result[$data['distribution_channel_id']] = array_merge($fields, $data);
  455. }
  456. }
  457. }
  458. if ($result && sizeof($result) > 0) {
  459. $result = array_values($result);
  460. }
  461. return response()->collection(new OrderTodayStatTransformer(), $result);
  462. }
  463. /**
  464. * 开给内部协同系统的接口
  465. */
  466. function internalSearch(Request $request)
  467. {
  468. $begin_time = $request->has('begin_time') ? $request->input('begin_time') : date("Y-m-d",strtotime('-7 days'));
  469. $end_time = $request->has('end_time') ? $request->input('end_time') : date("Y-m-d")." 23:59:59";
  470. $send_order_id = $request->has('send_order_id') ? $request->input('send_order_id') : '';
  471. if(!$send_order_id) return response()->error('PARAM_ERROR');
  472. $amount = OrderService::getAmount(compact('send_order_id','begin_time','end_time'));
  473. return response()->success(compact('amount'));
  474. }
  475. }