OrderController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: hp
  5. * Date: 2017/12/1
  6. * Time: 11:37
  7. */
  8. namespace App\Http\Controllers\Channel\Trade;
  9. use App\Http\Controllers\Channel\BaseController;
  10. use App\Http\Controllers\Channel\Trade\Transformers\OrderTransformer;
  11. use App\Modules\Trade\Services\OrderService;
  12. use App\Modules\SendOrder\Services\SendOrderService;
  13. use App\Modules\Channel\Services\ChannelService;
  14. use App\Modules\OfficialAccount\Services\ForceSubscribeService;
  15. use App\Modules\Activity\Services\ActivityService;
  16. use Illuminate\Http\Request;
  17. class OrderController extends BaseController
  18. {
  19. /**
  20. * @apiDefine Trade 订单
  21. */
  22. /**
  23. * @apiVersion 1.0.0
  24. * @api {GET} trade/orders 获取订单列表
  25. * @apiGroup Trade
  26. * @apiName getOrders
  27. * @apiParam {Number} [send_order_id] 派单ID
  28. * @apiParam {String} [begin_time] 开始时间
  29. * @apiParam {String} [end_time] 结束时间
  30. * @apiSuccess {Number} uid 用户id.
  31. * @apiSuccess {String} price 价格.
  32. * @apiSuccess {String} status '状态 PAID:已支付 UNPAID未支付'.
  33. * @apiSuccess {String} trade_no 平台交易ID.
  34. * @apiSuccess {String} pay_end_at 支付完成时间.
  35. * @apiSuccess {Number} send_order_id 派单id
  36. * @apiSuccess {String} send_order_name 派单名称
  37. * @apiSuccess {String} created_at 创建时间
  38. * @apiSuccessExample {json} Success-Response:
  39. *
  40. * {
  41. * "code": 0,
  42. * "msg": "",
  43. *
  44. * "data": [
  45. * {
  46. * "uid": 1,
  47. * "price": "1.00",
  48. * "status": "PAID",
  49. * "trade_no": "201711301125401585459852216605",
  50. * "pay_end_at": "2017-12-01 10:20:04",
  51. * "send_order_id": 0,
  52. * "send_order_name": "",
  53. * "created_at": 1512094804,
  54. * }
  55. * ]
  56. * }
  57. */
  58. function getOrders(Request $request)
  59. {
  60. $params = [];
  61. $request->has('start_time') && $request->input('start_time') && $params['begin_time'] = trim($request->input('start_time'));
  62. $request->has('end_time') && $request->input('end_time') && $params['end_time'] = date('Y-m-d H:i:s', strtotime(trim($request->input('end_time'))) + 86400 - 1);
  63. $request->has('send_order_id') && $request->input('send_order_id') && $params['send_order_id'] = (int)$request->input('send_order_id');
  64. $name = $request->has('activity_name') && trim($request->input('activity_name')) ? trim($request->input('activity_name')) : '';
  65. // 模板
  66. $from_custom_id = $request->has('from_custom_id') && trim($request->input('from_custom_id')) ? trim($request->input('from_custom_id')) : '';
  67. $params['inner_send_order_id'] = $from_custom_id;
  68. if(!$params['begin_time'] || !$params['end_time'] ){
  69. return response()->error('PARAM_ERROR');
  70. }
  71. if( strtotime($params['end_time']) - strtotime($params['begin_time']) >= 31*86400 ){
  72. return response()->error('PARAM_ERROR');
  73. }
  74. //活动
  75. if ($name) $params['activity_id'] = ActivityService::getActivityIds(compact('name'));
  76. if ($request->has('status') && $request->input('status') && in_array(strtoupper($request->input('status')), ['UNPAID', 'PAID'])) {
  77. $params['status'] = strtoupper($request->input('status'));
  78. }
  79. $params['distribution_channel_id'] = $this->getChannelId();
  80. $orders = OrderService::search($params);
  81. return response()->pagination(new OrderTransformer(), $orders);
  82. }
  83. /**
  84. * @apiVersion 1.0.0
  85. * @api {GET} trade/exportOrders 导出订单列表
  86. * @apiGroup Trade
  87. * @apiName exportOrders
  88. * @apiParam {Number} [send_order_id] 派单ID
  89. * @apiParam {String} [begin_time] 开始时间
  90. * @apiParam {String} [end_time] 结束时间
  91. * @apiSuccess {Number} uid 用户id.
  92. * @apiSuccess {String} price 价格.
  93. * @apiSuccess {String} status '状态 PAID:已支付 UNPAID未支付'.
  94. * @apiSuccess {String} trade_no 平台交易ID.
  95. * @apiSuccess {String} pay_end_at 支付完成时间.
  96. * @apiSuccess {Number} send_order_id 派单id
  97. * @apiSuccess {String} send_order_name 派单名称
  98. * @apiSuccess {String} created_at 创建时间
  99. */
  100. function exportOrders(Request $request)
  101. {
  102. $params = [];
  103. $request->has('start_time') && $request->input('start_time') && $params['begin_time'] = trim($request->input('start_time'));
  104. $request->has('end_time') && $request->input('end_time') && $params['end_time'] = date('Y-m-d H:i:s', strtotime(trim($request->input('end_time'))) + 86400 - 1);
  105. $request->has('send_order_id') && $request->input('send_order_id') && $params['send_order_id'] = (int)$request->input('send_order_id');
  106. if ($request->has('status') && $request->input('status') && in_array(strtoupper($request->input('status')), ['UNPAID', 'PAID'])) {
  107. $params['status'] = strtoupper($request->input('status'));
  108. }
  109. if(!$params['begin_time'] || !$params['end_time'] ){
  110. return response()->error('PARAM_ERROR');
  111. }
  112. if( strtotime($params['end_time']) - strtotime($params['begin_time']) >= 31*86400 ){
  113. return response()->error('PARAM_ERROR');
  114. }
  115. $name = $request->has('activity_name') && trim($request->input('activity_name')) ? trim($request->input('activity_name')) : '';
  116. //活动
  117. if ($name) $params['activity_id'] = ActivityService::getActivityIds(compact('name'));
  118. $params['distribution_channel_id'] = $this->getChannelId();
  119. $orders = OrderService::search($params, true);
  120. header("Content-type:application/vnd.ms-excel");
  121. header("Content-Disposition:attachment;filename=" . "订单列表" . date("YmdHis") . ".csv");
  122. echo iconv("UTF-8", "GBK", "\"商户订单号\",\"用户ID\",\"金额\",\"支付状态\",\"创建时间\",\"支付时间\",\"派单id\",\"派单名称\",\"活动名称\"\r\n");
  123. if ($orders) {
  124. foreach ($orders as $order) {
  125. echo("\"" . iconv("UTF-8", "GBK", $order->trade_no) . "\",");
  126. echo("\"" . iconv("UTF-8", "GBK", $order->uid) . "\",");
  127. echo("\"" . iconv("UTF-8", "GBK", $order->price) . "\",");
  128. echo("\"" . iconv("UTF-8", "GBK", $order->status == 'PAID' ? '已支付' : '未支付') . "\",");
  129. echo("\"" . $order->created_at . "\",");
  130. echo("\"" . $order->pay_end_at . "\",");
  131. echo("\"" . iconv("UTF-8", "GBK", $order->send_order_id) . "\",");
  132. echo("\"" . iconv("UTF-8", "GBK//IGNORE", (string)$order->send_order_name) . "\",");
  133. echo("\"" . iconv("UTF-8", "GBK", $order->name) . "\"\r\n");
  134. }
  135. }
  136. exit();
  137. }
  138. /**
  139. * @apiVersion 1.0.0
  140. * @api {GET} trade/getChannelToday 获取当日订单数据
  141. * @apiGroup Trade
  142. * @apiName getChannelToday
  143. * @apiSuccess {Number} paid_number 成功订单数
  144. * @apiSuccess {Number} success_amount 成功总额
  145. * @apiSuccess {Number} unpaid_number 未支付订单数
  146. * @apiSuccessExample {json} Success-Response:
  147. *
  148. * {
  149. * "code": 0,
  150. * "msg": "",
  151. * "data": [
  152. * {
  153. * "paid_number": 2,
  154. * "unpaid_number": 112,
  155. * "success_amount": 120212,
  156. * }
  157. * ]
  158. * }
  159. */
  160. function channelTodayStat()
  161. {
  162. $today_data = OrderService::getChannelToday($this->getChannelId());
  163. $data = [
  164. 'unpaid_number' => (float)$today_data['total_num'] - (float)$today_data['paid_number'],
  165. 'success_amount' => (float)$today_data['success_amount'],
  166. 'paid_number' => (int)$today_data['paid_number'],
  167. ];
  168. return response()->success($data);
  169. }
  170. /**
  171. * @apiVersion 1.0.0
  172. * @api {GET} trade/getChannelTodayData 获取当日订单数据
  173. * @apiGroup Trade
  174. * @apiName getChannelTodayData
  175. * @apiSuccess {Number} amount 总成功总额
  176. * @apiSuccess {Number} paid_num 总成功订单数
  177. * @apiSuccess {Number} total_order_num 总订单数
  178. * @apiSuccess {Number} recharge_unpaid_number 普通未支付订单数
  179. * @apiSuccess {Number} recharge_paid_number 普通已支付订单数
  180. * @apiSuccess {Number} recharge_success_amount 普通充值总额
  181. * @apiSuccess {Number} total_order_num 总订单数
  182. * @apiSuccess {Number} total_order_num 总订单数
  183. * @apiSuccessExample {json} Success-Response:
  184. *
  185. * {
  186. * "code": 0,
  187. * "msg": "",
  188. * "data": [
  189. * {
  190. * "paid_number": 2,
  191. * "unpaid_number": 112,
  192. * "success_amount": 120212,
  193. * }
  194. * ]
  195. * }
  196. */
  197. function channelTodayData()
  198. {
  199. $distribution_channel_id = $this->getChannelId();
  200. $data = self::getChannelTodayData($distribution_channel_id);
  201. return response()->success($data);
  202. }
  203. /**
  204. * 账号级别的今日数据
  205. */
  206. function accountChannelTodayData()
  207. {
  208. $channel_user_id = $this->getChannelUserId();
  209. $channels = ChannelService::getByChannelUserId($channel_user_id);
  210. $data = [
  211. 'amount' => 0,
  212. 'paid_num' => 0,
  213. 'total_order_num' => 0,
  214. 'recharge_unpaid_number' => 0,
  215. 'recharge_paid_number' => 0,
  216. 'recharge_success_amount' => 0,
  217. 'year_unpaid_number' => 0,
  218. 'year_paid_number' => 0,
  219. 'year_success_amount' => 0,
  220. 'new_user_num' => 0,
  221. 'new_subscribe_user_num' => 0
  222. ];
  223. foreach($channels as $channel){
  224. $distribution_channel_id = $channel->id;
  225. \Log::info('getChannelTodayData:'.$distribution_channel_id);
  226. $one_data = self::getChannelTodayData($distribution_channel_id);
  227. $data['amount'] += $one_data['amount'];
  228. $data['paid_num'] += $one_data['paid_num'];
  229. $data['total_order_num'] += $one_data['total_order_num'];
  230. $data['recharge_unpaid_number'] += $one_data['recharge_unpaid_number'];
  231. $data['recharge_paid_number'] += $one_data['recharge_paid_number'];
  232. $data['recharge_success_amount'] += $one_data['recharge_success_amount'];
  233. $data['year_unpaid_number'] += $one_data['year_unpaid_number'];
  234. $data['year_paid_number'] += $one_data['year_paid_number'];
  235. $data['year_success_amount'] += $one_data['year_success_amount'];
  236. $data['new_user_num'] += $one_data['new_user_num'];
  237. $data['new_subscribe_user_num'] += $one_data['new_subscribe_user_num'];
  238. }
  239. $data['amount'] = round($data['amount'],2);
  240. $data['recharge_success_amount'] = round($data['recharge_success_amount'],2);
  241. $data['year_success_amount'] = round($data['year_success_amount'],2);
  242. return response()->success($data);
  243. }
  244. public static function getChannelTodayData($distribution_channel_id){
  245. $date = date('Y-m-d');
  246. $today_data = OrderService::getChannelTodayData($distribution_channel_id);
  247. $uv_pv = SendOrderService::getChannelPromotionTotalUvPv($distribution_channel_id, $date);
  248. $force_user_num = ForceSubscribeService::forceSubscribeUserCountByChannelIdAndDate($distribution_channel_id, $date, '');
  249. $data = [
  250. 'amount' => $today_data['amount'],
  251. 'paid_num' => $today_data['paid_num'],
  252. 'total_order_num' => $today_data['total_order_num'],
  253. 'recharge_unpaid_number' => $today_data['recharge_unpaid_number'],
  254. 'recharge_paid_number' => $today_data['recharge_paid_number'],
  255. 'recharge_success_amount' => $today_data['recharge_success_amount'],
  256. 'year_unpaid_number' => $today_data['year_unpaid_number'],
  257. 'year_paid_number' => $today_data['year_paid_number'],
  258. 'year_success_amount' => $today_data['year_success_amount'],
  259. 'new_user_num' => $uv_pv['uv'],
  260. 'new_subscribe_user_num' => $force_user_num
  261. ];
  262. return $data;
  263. }
  264. }