SendOrderController.php 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: hp
  5. * Date: 2017/12/1
  6. * Time: 14:17
  7. */
  8. namespace App\Http\Controllers\Manage\SendOrder;
  9. use App\Http\Controllers\Controller;
  10. use App\Http\Controllers\Manage\SendOrder\Transformers\SendOrderStatTransformer;
  11. use App\Http\Controllers\Manage\SendOrder\Transformers\SendOrderTransformer;
  12. use App\Modules\Channel\Services\ChannelService;
  13. use App\Modules\OfficialAccount\Services\ForceSubscribeService;
  14. use App\Modules\SendOrder\Services\SendOrderService;
  15. use App\Modules\SendOrder\Services\SendOrderStatService;
  16. use App\Modules\Statistic\Services\SendStatistics;
  17. use App\Modules\Subscribe\Services\BookOrderService;
  18. use App\Modules\Subscribe\Services\ChapterOrderService;
  19. use App\Modules\Trade\Services\OrderService;
  20. use App\Modules\User\Services\UserService;
  21. use Illuminate\Http\Request;
  22. /**
  23. * Class SendOrderController 派单
  24. * @package App\Http\Controllers\Manage\SendOrder
  25. */
  26. class SendOrderController extends Controller
  27. {
  28. /**
  29. * @apiDefine sendOrder 派单
  30. */
  31. /**
  32. * @apiVersion 1.0.0
  33. * @api {GET} sendOrder/getSendOrders 获取派单列表
  34. * @apiGroup sendOrder
  35. * @apiName getSendOrders
  36. * @apiParam {Number} [sendOrder_id] 派单id(可不传)
  37. * @apiParam {Number} [channel_id] 渠道id(可不传)
  38. * @apiParam {String} [bookName] 书本名称(可不传)
  39. * @apiParam {Number} [order_status] 内外部派单(1: 内部派单, 2:外部派单)
  40. * @apiParam {String} [name] 派单名称(可不传)
  41. * @apiParam {Number} [book_id] 书本id(可不传)
  42. * @apiParam {Number} [orderBy] 排序(1:12小时,2:7天,3:充值总额) 可不传,默然为创建时间排序
  43. * @apiParam {Number} [orderByType] 排序类型(1:降序,2:升序) 可不传,默然为降序
  44. * @apiParam {String} [start_time] 开始时间(可不传)
  45. * @apiParam {String} [end_time] 结束时间(可不传)
  46. * @apiSuccess {Number} id 派单id.
  47. * @apiSuccess {String} distribution_channel_id 渠道id
  48. * @apiSuccess {String} entrance 入口
  49. * @apiSuccess {String} name 渠道名称
  50. * @apiSuccess {Number} book_id 书本id
  51. * @apiSuccess {String} channel_type 渠道类型
  52. * @apiSuccess {Number} document_cover_id 文案封面id
  53. * @apiSuccess {Number} headline_id 标题id
  54. * @apiSuccess {Number} body_template_id ID. 内容模板id
  55. * @apiSuccess {Number} original_guide_id 原文引导id
  56. * @apiSuccess {Number} subscribe_chapter_id 关注章节ID
  57. * @apiSuccess {String} book_name 图书名称
  58. * @apiSuccess {String} chapter_name 章节名称
  59. * @apiSuccess {String} updated_at 更新时间
  60. * @apiSuccess {String} created_at 创建时间
  61. * @apiSuccess {String} send_time 派单时间
  62. * @apiSuccess {String} subscribe_chapter_name 关注章节名称
  63. * @apiSuccess {String} subscribe_chapter_seq 关注章节序号
  64. * @apiSuccess {Number} document_end_chapter_seq 结束章节序号
  65. * @apiSuccess {String} sex_preference 性别偏好
  66. * @apiSuccess {Number} remark 备注
  67. * @apiSuccess {Number} continue_read_uv 继续阅读用户数
  68. * @apiSuccess {Number} cost 成本
  69. * @apiSuccess {Number} star_num 星星数
  70. * @apiSuccess {Number} totalChargeAmount 充值总额数
  71. * @apiSuccess {Number} registerNum 注册数
  72. * @apiSuccess {Number} payUserNum 付费用户数
  73. * @apiSuccess {Number} clickNum 点击数数
  74. * @apiSuccess {Number} fansNum 粉丝数
  75. * @apiSuccess {Number} toatlOrderCount 总订单数
  76. * @apiSuccess {Number} vipOrderCount Vip用户订单数
  77. * @apiSuccess {Number} normalOrderCount 普通用户订单数
  78. * @apiSuccess {Number} vipPayUserNum Vip用户数
  79. * @apiSuccess {Number} normalPayUserNum 普通用户数
  80. * @apiSuccess {Number} promotion_page_id 推广页面id
  81. * @apiSuccess {String} redirect_url 重定向url
  82. * @apiSuccess {Number} consumeTotalFee 派单下的消费的币的总和
  83. * @apiSuccess {Number} consumeChargeFee 派单下的消费的充值币
  84. * @apiSuccess {Number} consumeRewardFee 派单下的消费的奖励币
  85. * @apiSuccess {Number} firstChargeUserNum 首充用户数
  86. * @apiSuccess {Number} repetitiousChargeUserNum 非首充用户数
  87. * @apiSuccess {String} channel_name 渠道名称
  88. * @apiSuccess {String} charge_type 书本收费方式
  89. * @apiSuccess {Number} weekend_charge_amount 7天充值金额
  90. * @apiSuccess {Number} half_day_charge_amount 12小时充值金额
  91. * @apiSuccessExample {json} Success-Response:
  92. *
  93. * {
  94. * "code": 0,
  95. * "msg": "",
  96. * "data": [
  97. * {
  98. * "id": 5,
  99. * "distribution_channel_id": null,
  100. * "entrance": "书架",
  101. * "name": "acai",
  102. * "book_id": null,
  103. * "channel_type": "AUTHENTICATED",
  104. * "chapter_id": null,
  105. * "document_cover_id": null,
  106. * "headline_id": null,
  107. * "body_template_id": null,
  108. * "original_guide_id": null,
  109. * "subscribe_chapter_id": null,
  110. * "book_name": null,
  111. * "chapter_name": null,
  112. * "updated_at": "2017-11-22 14:40:46",
  113. * "created_at": "2017-11-22 14:40:46",
  114. * "send_time": "2017-11-22 14:40:46",
  115. * "subscribe_chapter_name": null,
  116. * "subscribe_chapter_seq": null,
  117. * "document_end_chapter_seq"=12.
  118. * "sex_preference": "男频",
  119. * "remark": "0",
  120. * "star_num": 0,
  121. * "consumeTotalFee": 0,
  122. * "consumeChargeFee": 0,
  123. * "consumeRewardFee": 0,
  124. * "fansNum": 0,
  125. * "cost":111,
  126. * "totalChargeAmount": 0,
  127. * "registerNum": 0,
  128. * "payUserNum": 0,
  129. * "clickNum": 0,
  130. * "vipPayUserNum":0,
  131. * "toatlOrderCount":12,
  132. * "vipOrderCount":12,
  133. * "continue_read_uv": 11,
  134. * "normalOrderCount":12,
  135. * "normalPayUserNum":0,
  136. * "firstChargeUserNum":0,
  137. * "repetitiousChargeUserNum":0,
  138. * "promotion_page_id": 1111,
  139. * "redirect_url": "",
  140. * "channel_name":"渠道名称1",
  141. * "charge_type":"Book",
  142. * "weekend_charge_amount": 71,
  143. * "half_day_charge_amount": 105
  144. * },
  145. * {
  146. * "id": 11,
  147. * "distribution_channel_id": 123,
  148. * "entrance": null,
  149. * "name": "acai",
  150. * "book_id": 111,
  151. * "channel_type": "AUTHENTICATED",
  152. * "chapter_id": 1111,
  153. * "document_cover_id": 899,
  154. * "headline_id": 12334,
  155. * "body_template_id": 3455,
  156. * "cost":111,
  157. * "continue_read_uv": 11,
  158. * "original_guide_id": 344,
  159. * "subscribe_chapter_id": 11111,
  160. * "book_name": "dpcq",
  161. * "chapter_name": "ssss",
  162. * "updated_at": "2017-11-22 14:40:46",
  163. * "created_at": "2017-11-22 14:40:46",
  164. * "send_time": "2017-11-22 14:40:46",
  165. * "subscribe_chapter_name": null,
  166. * "subscribe_chapter_seq": null,
  167. * "remark": "0",
  168. * "star_num": 0,
  169. * "fansNum": 0,
  170. * "vipPayUserNum":0,
  171. * "normalPayUserNum":0,
  172. * "totalChargeAmount": 0,
  173. * "registerNum": 0,
  174. * "payUserNum": 0,
  175. * "consumeTotalFee": 0,
  176. * "consumeChargeFee": 0,
  177. * "consumeRewardFee": 0,
  178. * "clickNum": 0,
  179. * "toatlOrderCount":12,
  180. * "vipOrderCount":12,
  181. * "normalOrderCount":12,
  182. * "firstChargeUserNum":0,
  183. * "repetitiousChargeUserNum":0,
  184. * "promotion_page_id": null,
  185. * "redirect_url": "",
  186. * "channel_name":"渠道名称1",
  187. * "charge_type":"Book",
  188. * "weekend_charge_amount": 71,
  189. * "half_day_charge_amount": 105
  190. * }
  191. * ],
  192. * "meta": {
  193. * total": 1,
  194. * per_page": 15,
  195. * current_page": 1,
  196. * last_page": 1,
  197. * next_page_url": "",
  198. * prev_page_url": ""
  199. * }
  200. * }
  201. */
  202. function getSendOrders(Request $request)
  203. {
  204. $name = $request->has('name') ? $request->input('name') : '';
  205. $bookId = $request->has('book_id') ? $request->input('book_id') : '';
  206. $orderBy = $request->has('orderBy') ? $request->input('orderBy') : '';
  207. $orderByType = $request->has('orderByType') ? $request->input('orderByType') : 1;
  208. $order_status = $request->has('order_status') ? $request->input('order_status') : 0;
  209. $orderByType = (0 == $orderByType) ? 1 : $orderByType;
  210. $bookName = $request->has('bookName') ? $request->input('bookName') : '';
  211. $channel_id = $request->has('channel_id') ? $request->input('channel_id') : '';
  212. $sendOrderId = $request->has('sendOrder_id') ? $request->input('sendOrder_id') : '';
  213. $end_time = $request->has('end_time') && !empty($request->input('end_time')) ? $request->input('end_time') : '';
  214. $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? $request->input('start_time') : '';
  215. $gender = $request->has('gender') && !empty($request->input('gender')) ? $request->input('gender') : '';
  216. $params = ['book_id' => $bookId, 'distribution_channel_id' => $channel_id, 'book_name' => $bookName, 'id' => $sendOrderId, 'orderBy' => $orderBy,
  217. 'order_status' => $order_status, 'orderByType' => $orderByType, 'name' => $name, 'start_time' => $start_time, 'end_time' => $end_time, 'gender' => $gender];
  218. $data = SendOrderService::getManageSendOrders($params, false);
  219. foreach ($data as $item) {
  220. $sendOrderId = $item->id;
  221. $item->totalChargeAmount = (float)OrderService::getAmount(['send_order_id' => $sendOrderId]);
  222. $item->registerNum = UserService::getPromotionTotal($sendOrderId);;
  223. $item->clickNum = SendOrderService::getPv($sendOrderId);
  224. $item->clickNumUV = SendOrderService::getUv($sendOrderId);
  225. $item->continue_read_uv = SendOrderService::getContinueTotalReadUv($sendOrderId);
  226. $item->channel_name = ChannelService::getChannelNicknameById($item->distribution_channel_id);
  227. $item->fansNum = ForceSubscribeService::getFansNum($sendOrderId);
  228. $item->payUserNum = OrderService::getPayUserNum($sendOrderId);
  229. $item->vipPayUserNum = OrderService::getVipPayUserNum($sendOrderId);
  230. $item->normalPayUserNum = OrderService::getNormaPayUserNum($sendOrderId);
  231. $bookOrderInfo = BookOrderService::getSendorderTotal($sendOrderId, $start_time, $end_time);
  232. $chapterOrderInfo = ChapterOrderService::getSendorderTotal($sendOrderId, $start_time, $end_time);
  233. $item->consumeChargeFee = $bookOrderInfo['charge_balance'] + $chapterOrderInfo['charge_balance'];
  234. $item->consumeRewardFee = $bookOrderInfo['reward_balance'] + $chapterOrderInfo['reward_balance'];;
  235. $item->consumeTotalFee = $item->consumeChargeFee + $item->consumeRewardFee;
  236. $item->toatlOrderCount = OrderService::getOrderCount($sendOrderId);
  237. $item->vipOrderCount = OrderService::getVipOrderCount($sendOrderId);
  238. $item->normalOrderCount = OrderService::getNormalOrderCount($sendOrderId);
  239. $item->firstChargeUserNum = SendOrderService::getFirstChargeUserNum($sendOrderId);
  240. $item->repetitiousChargeUserNum = SendOrderService::getRepetitiousChargeUserNum($sendOrderId);
  241. }
  242. return response()->pagination(new SendOrderTransformer(), $data);
  243. }
  244. /**
  245. * @apiVersion 1.0.0
  246. * @api {GET} sendOrder/exportSendOrders 导出派单列表
  247. * @apiGroup sendOrder
  248. * @apiName exportSendOrders
  249. * @apiParam {Number} [sendOrder_id] 派单id(可不传)
  250. * @apiParam {Number} [book_id] 书本id(可不传)
  251. * @apiParam {String} [name] 派单名称(可不传)
  252. * @apiParam {Number} [order_status] 内外部派单(1: 内部派单, 2:外部派单)
  253. * @apiParam {Number} [orderBy] 排序(1:12小时,2:7天) 可不传,默然为创建时间排序
  254. * @apiParam {String} [bookName] 书本名称(可不传)
  255. * @apiParam {Number} [channel_id] 渠道id(可不传)
  256. * @apiParam {String} [start_time] 开始时间(可不传)
  257. * @apiParam {String} [end_time] 结束时间(可不传)
  258. *
  259. * @apiSuccess {String} created_at 创建时间
  260. * @apiSuccess {Number} distribution_channel_id 渠道id
  261. * @apiSuccess {Number} id 派单id.
  262. * @apiSuccess {Number} cost 成本
  263. * @apiSuccess {Number} book_id 书本id
  264. * @apiSuccess {String} book_name 图书名称
  265. * @apiSuccess {Number} clickNum 点击数数
  266. * @apiSuccess {Number} registerNum 注册数
  267. * @apiSuccess {Number} fansNum 粉丝数
  268. * @apiSuccess {Number} document_end_chapter_seq 结束章节序号
  269. * @apiSuccess {String} sex_preference 性别偏好
  270. * @apiSuccess {Number} continue_read_uv 继续阅读用户数
  271. * @apiSuccess {Number} payUserNum 付费用户数
  272. * @apiSuccess {Number} vipPayUserNum VIP付费用户数
  273. * @apiSuccess {Number} normalPayUserNum 普通付费用户数
  274. * @apiSuccess {Number} totalChargeAmount 充值总额数
  275. * @apiSuccess {Number} clickNumUV 独立用户数
  276. * @apiSuccess {Number} toatlOrderCount 总订单数
  277. * @apiSuccess {Number} vipOrderCount Vip用户订单数
  278. * @apiSuccess {Number} normalOrderCount 普通用户订单数
  279. * @apiSuccess {String} consumeTotalFee 派单下的消费的币的总和
  280. * @apiSuccess {String} consumeChargeFee 派单下的消费的充值币
  281. * @apiSuccess {String} consumeRewardFee 派单下的消费的奖励币
  282. *
  283. * @apiSuccessExample {json} Success-Response:
  284. *
  285. * {
  286. * "code": 0,
  287. * "msg": "",
  288. * "data": [
  289. * {
  290. * "created_at": "2017-11-22 14:40:46",
  291. * "distribution_channel_id": 123,
  292. * "id": 11,
  293. * "book_id": 111,
  294. * "book_name": "dpcq",
  295. * "clickNum": 0,
  296. * "registerNum": 0,
  297. * "fansNum": 0,
  298. * "cost":111,
  299. * "continue_read_uv": 11,
  300. * "payUserNum": 0,
  301. * "vipPayUserNum":0,
  302. * "normalPayUserNum":0,
  303. * "totalChargeAmount": 0,
  304. * "consumeTotalFee": 0,
  305. * "consumeChargeFee": 0,
  306. * "consumeRewardFee": 0,
  307. * "clickNumUV":1.
  308. * "toatlOrderCount":12,
  309. * "vipOrderCount":12,
  310. * "normalOrderCount":12,
  311. * },
  312. * {
  313. * "created_at": "2017-11-22 14:40:46",
  314. * "distribution_channel_id": 123,
  315. * "id": 11,
  316. * "book_id": 111,
  317. * "book_name": "dpcq",
  318. * "clickNum": 0,
  319. * "registerNum": 0,
  320. * "cost":111,
  321. * "continue_read_uv": 11,
  322. * "fansNum": 0,
  323. * "consumeTotalFee": 0,
  324. * "consumeChargeFee": 0,
  325. * "consumeRewardFee": 0,
  326. * "payUserNum": 0,
  327. * "vipPayUserNum":0,
  328. * "normalPayUserNum":0,
  329. * "totalChargeAmount": 0,
  330. * "clickNumUV":1.
  331. * "toatlOrderCount":12,
  332. * "vipOrderCount":12,
  333. * "normalOrderCount":12,
  334. * }
  335. * ]
  336. * }
  337. */
  338. function exportSendOrders(Request $request)
  339. {
  340. $name = $request->has('name') ? $request->input('name') : '';
  341. $bookId = $request->has('book_id') ? $request->input('book_id') : '';
  342. $orderBy = $request->has('orderBy') ? $request->input('orderBy') : '';
  343. $orderByType = $request->has('orderByType') ? $request->input('orderByType') : 1;
  344. $order_status = $request->has('order_status') ? $request->input('order_status') : 0;
  345. $orderByType = (0 == $orderByType) ? 1 : $orderByType;
  346. $bookName = $request->has('bookName') ? $request->input('bookName') : '';
  347. $channel_id = $request->has('channel_id') ? $request->input('channel_id') : '';
  348. $sendOrderId = $request->has('sendOrder_id') ? $request->input('sendOrder_id') : '';
  349. $end_time = $request->has('end_time') && !empty($request->input('end_time')) ? $request->input('end_time') : '';
  350. $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? $request->input('start_time') : '';
  351. $gender = $request->has('gender') && !empty($request->input('gender')) ? $request->input('gender') : '';
  352. $params = ['book_id' => $bookId, 'distribution_channel_id' => $channel_id, 'book_name' => $bookName, 'id' => $sendOrderId, 'orderBy' => $orderBy,
  353. 'order_status' => $order_status, 'orderByType' => $orderByType, 'name' => $name, 'start_time' => $start_time, 'end_time' => $end_time, 'gender' => $gender];
  354. $data = SendOrderService::getManageSendOrders($params, true);
  355. header("Content-type:application/vnd.ms-excel");
  356. header("Content-Disposition:attachment;filename=" . "派单明细" . date("YmdHis") . ".csv");
  357. echo iconv("UTF-8", "GBK", "\"创建时间\",\"派单时间\",\"渠道ID\",\"派单ID\",\"推广书籍ID\",\"推广书籍名称\",\"书籍类型\",\"消费币的总和\",\"消费的充值币\",\"消费的奖励币\",\"点击人数\",\"继续阅读用户数\",\"注册用户数\",\"关注人数\",\"付费用户数\",\"VIP付费用户数\",\"普通付费用户数\",\"充值金额\",\"7天充值金额\",\"12小时充值金额\",\"UV\",\"累计UV大于20的时间\",\"总订单数\",\"成本\",\"VIP用户订单数\",\"普通用户订单数\"\r\n");
  358. if ($data) {
  359. foreach ($data as $item) {
  360. $sendOrderId = $item->id;
  361. $item->totalChargeAmount = (float)OrderService::getAmount(['send_order_id' => $sendOrderId]);
  362. $item->registerNum = UserService::getPromotionTotal($sendOrderId);;
  363. $item->clickNum = SendOrderService::getPv($sendOrderId);
  364. $item->clickNumUV = SendOrderService::getUv($sendOrderId);
  365. $item->payUserNum = OrderService::getPayUserNum($sendOrderId);
  366. $item->fansNum = ForceSubscribeService::getFansNum($sendOrderId);
  367. $item->vipPayUserNum = OrderService::getVipPayUserNum($sendOrderId);
  368. $item->normalPayUserNum = OrderService::getNormaPayUserNum($sendOrderId);
  369. $item->continue_read_uv = SendOrderService::getContinueTotalReadUv($sendOrderId);
  370. $bookOrderInfo = BookOrderService::getSendorderTotal($sendOrderId, $start_time, $end_time);
  371. $chapterOrderInfo = ChapterOrderService::getSendorderTotal($sendOrderId, $start_time, $end_time);
  372. $item->consumeChargeFee = $bookOrderInfo['charge_balance'] + $chapterOrderInfo['charge_balance'];
  373. $item->consumeRewardFee = $bookOrderInfo['reward_balance'] + $chapterOrderInfo['reward_balance'];;
  374. $item->consumeTotalFee = $item->consumeChargeFee + $item->consumeRewardFee;
  375. $item->toatlOrderCount = OrderService::getOrderCount($sendOrderId);
  376. $item->vipOrderCount = OrderService::getVipOrderCount($sendOrderId);
  377. $item->normalOrderCount = OrderService::getNormalOrderCount($sendOrderId);
  378. echo("\"" . $item->created_at->toDateTimeString() . "\",");
  379. echo("\"" . iconv("UTF-8", "GBK", ($item->send_time ? $item->$item->send_time : "未填")) . "\",");
  380. echo("\"" . ($item->distribution_channel_id ? $item->distribution_channel_id : "-1") . "\",");
  381. echo("\"" . ($item->id ? $item->id : "-1") . "\",");
  382. echo("\"" . ($item->book_id ? $item->book_id : "-1") . "\",");
  383. echo("\"" . iconv("UTF-8", "GBK", ($item->book_name ? $item->book_name : "未填")) . "\",");
  384. echo("\"" . iconv("UTF-8", "GBK", ($item->channel_name ? $item->channel_name : "未填")) . "\",");
  385. echo("\"" . $item->consumeTotalFee . "\",");
  386. echo("\"" . $item->consumeChargeFee . "\",");
  387. echo("\"" . $item->consumeRewardFee . "\",");
  388. echo("\"" . $item->clickNum . "\",");
  389. echo("\"" . $item->continue_read_uv . "\",");
  390. echo("\"" . $item->registerNum . "\",");
  391. echo("\"" . $item->fansNum . "\",");
  392. echo("\"" . $item->payUserNum . "\",");
  393. echo("\"" . $item->vipPayUserNum . "\",");
  394. echo("\"" . $item->normalPayUserNum . "\",");
  395. echo("\"" . $item->totalChargeAmount . "\",");
  396. echo("\"" . ($item->weekend_charge_amount ? $item->weekend_charge_amount : 0) . "\",");
  397. echo("\"" . ($item->half_day_charge_amount ? $item->half_day_charge_amount : 0) . "\",");
  398. echo("\"" . $item->clickNumUV . "\",");
  399. $uv20Time = SendOrderService::getUv20Time($sendOrderId);
  400. echo("\"" . iconv("UTF-8", "GBK", ($uv20Time ? $uv20Time : "未到20")) . "\",");
  401. echo("\"" . $item->toatlOrderCount . "\",");
  402. echo("\"" . $item->cost . "\",");
  403. echo("\"" . $item->vipOrderCount . "\",");
  404. echo("\"" . $item->normalOrderCount . "\"\r\n");
  405. }
  406. }
  407. exit();
  408. }
  409. /**
  410. * @apiVersion 1.0.0
  411. * @api {GET} sendOrder/getHistorySendOrders 获取历史派单列表
  412. * @apiGroup sendOrder
  413. * @apiName getHistorySendOrders
  414. * @apiParam {Number} [sendOrder_id] 派单id(可不传)
  415. * @apiParam {Number} [channel_id] 渠道id(可不传)
  416. * @apiParam {String} [bookName] 书本名称(可不传)
  417. * @apiParam {String} [name] 派单名称(可不传)
  418. * @apiParam {Number} [book_id] 书本id(可不传)
  419. * @apiParam {Number} [order_status] 内外部派单(1: 内部派单, 2:外部派单)
  420. * @apiParam {Number} [orderBy] 排序(1:12小时,2:7天, 3:充值总额, 4:首充总额) 可不传,默然为创建时间排序 orderByType
  421. * @apiParam {Number} [orderByType] 排序类型(1:降序,2:升序) 可不传,默然为降序
  422. * @apiParam {String} [start_time] 开始时间(可不传)
  423. * @apiParam {String} [end_time] 结束时间(可不传)
  424. *
  425. * @apiSuccess {Number} id 派单id.
  426. * @apiSuccess {String} name 派单名称
  427. * @apiSuccess {Number} distribution_channel_id 渠道id
  428. * @apiSuccess {String} book_name 图书名称
  429. * @apiSuccess {Number} book_id 书本id
  430. * @apiSuccess {Number} totalChargeAmount 充值总额
  431. * @apiSuccess {String} distribution_channel_name, 渠道名称
  432. * @apiSuccess {String} charge_type 书本收费方式
  433. * @apiSuccess {Number} cost 成本
  434. * @apiSuccess {String} send_time 派单时间
  435. * @apiSuccess {Number} half_day_charge_amount 12小时充值金额
  436. * @apiSuccess {Number} weekend_charge_amount 7天充值金额
  437. * @apiSuccess {Number} firstChargeUserNum 首充用户数
  438. * @apiSuccess {String} updated_at 更新时间
  439. * @apiSuccess {String} created_at 创建时间
  440. * @apiSuccess {Number} fansNum 粉丝数
  441. * @apiSuccess {Number} registerNum 注册数
  442. * @apiSuccess {Number} payUserNum 付费用户数
  443. * @apiSuccess {Number} paid_num 成功订单数
  444. * @apiSuccess {Number} unpaid_num 失败订单数
  445. * @apiSuccess {Number} first_recharge_amount 首充总额
  446. * @apiSuccess {Number} vipPayUserNum VIP付费用户数
  447. * @apiSuccess {Number} normalPayUserNum 普通付费用户数
  448. * @apiSuccess {Number} vipOrderCount vip用户订单数
  449. * @apiSuccess {Number} pv pv数
  450. * @apiSuccess {Number} uv uv数
  451. * @apiSuccess {Number} total_pv 总pv数
  452. * @apiSuccess {Number} total_uv 总uv数
  453. * @apiSuccess {Number} sum_fee 订阅总额
  454. * @apiSuccess {Number} sum_charge_balance 充值总额
  455. * @apiSuccess {Number} sum_reward_balance 奖励总额
  456. * @apiSuccess {Number} date 日期
  457. *
  458. *
  459. * @apiSuccessExample {json} Success-Response:
  460. *
  461. * {
  462. * "code": 0,
  463. * "msg": "",
  464. * "data": [
  465. * {
  466. * "id": 5,
  467. * "name": "acai",
  468. * "distribution_channel_id": "1234",
  469. * "book_name": 书名,
  470. * "book_id": 123,
  471. * "totalChargeAmount": 12,
  472. * "distribution_channel_name":"渠道名称1",
  473. * "charge_type":"Book",
  474. * "cost":111,
  475. * "send_time": "2017-11-22 14:40:46",
  476. * "weekend_charge_amount": 71,
  477. * "half_day_charge_amount": 105,
  478. * "firstChargeUserNum":0,
  479. * "updated_at": "2017-11-22 14:40:46",
  480. * "created_at": "2017-11-22 14:40:46",
  481. * "fansNum": 0,
  482. * "registerNum": 0,
  483. * "payUserNum": 0,
  484. * "paid_num": 123,
  485. * "unpaid_num": 123,
  486. * "first_recharge_amount": 123,
  487. * "vipPayUserNum": 123,
  488. * "normalPayUserNum": 123,
  489. * 'vipOrderCount': 123,
  490. * "pv": 0,
  491. * "uv":0,
  492. * "total_pv":12,
  493. * "total_uv":12,
  494. * "date":"2017-11-22 14:40:46"
  495. * },
  496. * {
  497. * "id": 5,
  498. * "name": "acai",
  499. * "distribution_channel_id": "1234",
  500. * "book_name": 书名,
  501. * "book_id": 123,
  502. * "totalChargeAmount": 12,
  503. * "distribution_channel_name":"渠道名称1",
  504. * "charge_type":"Book",
  505. * "cost":111,
  506. * "send_time": "2017-11-22 14:40:46",
  507. * "weekend_charge_amount": 71,
  508. * "half_day_charge_amount": 105,
  509. * "firstChargeUserNum":0,
  510. * "updated_at": "2017-11-22 14:40:46",
  511. * "created_at": "2017-11-22 14:40:46",
  512. * "fansNum": 0,
  513. * "registerNum": 0,
  514. * "payUserNum": 0,
  515. * "paid_num": 123,
  516. * "unpaid_num": 123,
  517. * "first_recharge_amount": 123,
  518. * "vipPayUserNum": 123,
  519. * "normalPayUserNum": 123,
  520. * 'vipOrderCount': 123,
  521. * "pv": 0,
  522. * "uv":0,
  523. * "total_pv":12,
  524. * "total_uv":12,
  525. * "date":"2017-11-22 14:40:46"
  526. * },
  527. * ],
  528. * "meta": {
  529. * "total": 1,
  530. * "per_page": 15,
  531. * "current_page": 1,
  532. * "last_page": 1,
  533. * "next_page_url": "",
  534. * "prev_page_url": ""
  535. * }
  536. * }
  537. */
  538. function getHistorySendOrders(Request $request)
  539. {
  540. $name = $request->has('name') ? $request->input('name') : '';
  541. $bid = $request->has('book_id') ? $request->input('book_id') : '';
  542. $order_field = $request->has('orderBy') ? $request->input('orderBy') : '';
  543. $order_type = $request->has('orderByType') && $request->input('orderByType') == 2 ? 'asc' : 'desc';//排序类型
  544. $order_status = $request->has('order_status') ? $request->input('order_status') : 0;//内外部派单 1内部 2外部
  545. $book_name = $request->has('bookName') ? $request->input('bookName') : '';
  546. $distribution_channel_id = $request->has('channel_id') ? $request->input('channel_id') : '';
  547. $send_order_id = $request->has('sendOrder_id') ? $request->input('sendOrder_id') : '';
  548. $end_time = $request->has('end_time') && !empty($request->input('end_time')) ? date('Y-m-d H:i:s', strtotime($request->input('end_time')) + 86400 - 1) : '';
  549. $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? $request->input('start_time') : '';
  550. $gender = $request->has('gender') && !empty($request->input('gender')) ? $request->input('gender') : '';
  551. $params = compact('name', 'bid', 'book_name', 'distribution_channel_id', 'send_order_id', 'start_time', 'end_time', 'order_status', 'order_type', 'order_field', 'gender');
  552. $data = SendOrderStatService::getList($params);
  553. //SendStatistics
  554. foreach ($data as &$v) {
  555. $v->beforevipuv = 0;
  556. $v->beforeforcesubuv = 0;
  557. $res = SendStatistics::getBeforeForceSubAndBeforeVipUv($v->bid, $v->send_order_id, date('Y-m-d', strtotime($v->create_time)), false);
  558. $v->beforevipuv = $res['before_vip'];
  559. $v->beforeforcesubuv = $res['before_forcesub'];
  560. }
  561. return response()->pagination(new SendOrderStatTransformer(), $data);
  562. }
  563. /**
  564. * @apiVersion 1.0.0
  565. * @api {GET} sendOrder/exportHistorySendOrders 导出历史派单列表
  566. * @apiGroup sendOrder
  567. * @apiName exportHistorySendOrders
  568. * @apiParam {Number} [sendOrder_id] 派单id(可不传)
  569. * @apiParam {Number} [book_id] 书本id(可不传)
  570. * @apiParam {String} [name] 派单名称(可不传)
  571. * @apiParam {Number} [orderByType] 排序类型(1:降序,2:升序) 可不传,默然为降序
  572. * @apiParam {Number} [order_status] 内外部派单(1: 内部派单, 2:外部派单)
  573. * @apiParam {Number} [orderBy] 排序(1:12小时,2:7天, 3:充值总额, 4:首充总额) 可不传,默然为创建时间排序 orderByType
  574. * @apiParam {String} [bookName] 书本名称(可不传)
  575. * @apiParam {Number} [channel_id] 渠道id(可不传)
  576. * @apiParam {String} [start_time] 开始时间(可不传)
  577. * @apiParam {String} [end_time] 结束时间(可不传)
  578. *
  579. * @apiSuccess {Number} id 派单id.
  580. * @apiSuccess {String} name 派单名称
  581. * @apiSuccess {Number} distribution_channel_id 渠道id
  582. * @apiSuccess {String} book_name 图书名称
  583. * @apiSuccess {Number} book_id 书本id
  584. * @apiSuccess {Number} totalChargeAmount 充值总额
  585. * @apiSuccess {String} distribution_channel_name, 渠道名称
  586. * @apiSuccess {String} charge_type 书本收费方式
  587. * @apiSuccess {Number} cost 成本
  588. * @apiSuccess {String} send_time 派单时间
  589. * @apiSuccess {Number} half_day_charge_amount 12小时充值金额
  590. * @apiSuccess {Number} weekend_charge_amount 7天充值金额
  591. * @apiSuccess {Number} firstChargeUserNum 首充用户数
  592. * @apiSuccess {String} updated_at 更新时间
  593. * @apiSuccess {String} created_at 创建时间
  594. * @apiSuccess {Number} fansNum 粉丝数
  595. * @apiSuccess {Number} registerNum 注册数
  596. * @apiSuccess {Number} payUserNum 付费用户数
  597. * @apiSuccess {Number} paid_num 成功订单数
  598. * @apiSuccess {Number} unpaid_num 失败订单数
  599. * @apiSuccess {Number} first_recharge_amount 首充总额
  600. * @apiSuccess {Number} vipPayUserNum VIP付费用户数数
  601. * @apiSuccess {Number} normalPayUserNum 普通付费用户数数
  602. * @apiSuccess {Number} pv pv数
  603. * @apiSuccess {Number} uv uv数
  604. * @apiSuccess {Number} total_pv 总pv数
  605. * @apiSuccess {Number} total_uv 总uv数
  606. * @apiSuccess {Number} date 日期
  607. *
  608. * @apiSuccessExample {json} Success-Response:
  609. *
  610. * {
  611. * "code": 0,
  612. * "msg": "",
  613. * "data": [
  614. * {
  615. * "id": 5,
  616. * "name": "acai",
  617. * "distribution_channel_id": "1234",
  618. * "book_name": "书名",
  619. * "book_id": 123,
  620. * "totalChargeAmount": 12,
  621. * "distribution_channel_name":"渠道名称1",
  622. * "charge_type":"Book",
  623. * "cost":111,
  624. * "send_time": "2017-11-22 14:40:46",
  625. * "weekend_charge_amount": 71,
  626. * "half_day_charge_amount": 105,
  627. * "firstChargeUserNum":0,
  628. * "updated_at": "2017-11-22 14:40:46",
  629. * "created_at": "2017-11-22 14:40:46",
  630. * "fansNum": 0,
  631. * "registerNum": 0,
  632. * "payUserNum": 0,
  633. * "paid_num": 123,
  634. * "unpaid_num": 123,
  635. * "first_recharge_amount": 123,
  636. * "vipPayUserNum": 123,
  637. * "normalPayUserNum": 123,
  638. * "pv": 0,
  639. * "uv":0,
  640. * "total_pv":12,
  641. * "total_uv":12,
  642. * "date":"2017-11-22 14:40:46"
  643. * },
  644. * {
  645. * "id": 5,
  646. * "name": "acai",
  647. * "distribution_channel_id": "1234",
  648. * "book_name": "书名",
  649. * "book_id": 123,
  650. * "totalChargeAmount": 12,
  651. * "distribution_channel_name":"渠道名称1",
  652. * "charge_type":"Book",
  653. * "cost":111,
  654. * "send_time": "2017-11-22 14:40:46",
  655. * "weekend_charge_amount": 71,
  656. * "half_day_charge_amount": 105,
  657. * "firstChargeUserNum":0,
  658. * "updated_at": "2017-11-22 14:40:46",
  659. * "created_at": "2017-11-22 14:40:46",
  660. * "fansNum": 0,
  661. * "registerNum": 0,
  662. * "payUserNum": 0,
  663. * "paid_num": 123,
  664. * "unpaid_num": 123,
  665. * "first_recharge_amount": 123,
  666. * "vipPayUserNum": 123,
  667. * "normalPayUserNum": 123,
  668. * "pv": 0,
  669. * "uv":0,
  670. * "total_pv":12,
  671. * "total_uv":12,
  672. * "date":"2017-11-22 14:40:46"
  673. * },
  674. * ],
  675. * }
  676. */
  677. function exportHistorySendOrders(Request $request)
  678. {
  679. \Log::info($request->all());
  680. $name = $request->has('name') ? $request->input('name') : '';
  681. $bid = $request->has('book_id') ? $request->input('book_id') : '';
  682. $order_field = $request->has('orderBy') ? $request->input('orderBy') : '';
  683. $order_type = $request->has('orderByType') && $request->input('orderByType') == 2 ? 'asc' : 'desc';//排序类型
  684. $order_status = $request->has('order_status') ? $request->input('order_status') : 0;//内外部派单 1内部 2外部
  685. $book_name = $request->has('bookName') ? $request->input('bookName') : '';
  686. $distribution_channel_id = $request->has('channel_id') ? $request->input('channel_id') : '';
  687. $send_order_id = $request->has('sendOrder_id') ? $request->input('sendOrder_id') : '';
  688. $end_time = $request->has('end_time') && !empty($request->input('end_time')) ? date('Y-m-d H:i:s', strtotime($request->input('end_time')) + 86400 - 1) : '';
  689. $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? $request->input('start_time') : '';
  690. $params = compact('name', 'bid', 'book_name', 'distribution_channel_id', 'send_order_id', 'start_time', 'end_time', 'order_status', 'order_type', 'order_field');
  691. \Log::info('params is:');
  692. \Log::info($request->all());
  693. header("Content-type:application/vnd.ms-excel");
  694. header("Content-Disposition:attachment;filename=" . "派单历史数据" . date("YmdHis") . ".csv");
  695. echo iconv("UTF-8", "GBK", "\"创建时间\",\"派单实际发送时间\",\"派单ID\",\"派单名称\",\"渠道ID\",\"推广书籍名称\",\"推广书籍ID\",\"收费方式\",\"充值金额\",\"渠道名称\",\"成本\",\"派单实际发送时间\",\"12小时充值金额\",\"7天充值金额\",\"24小时充值金额\",\"3天充值金额\",\"首充用户数\",\"数据更新时间\",\"粉丝数\",\"注册用户数\",\"付费用户数\",\"成功订单数\",\"失败订单数\",\"首充总数\",\"VIP付费用户数\",\"普通付费用户数\",\"pv\",\"uv\",\"24小时uv\",\"24小时pv\",\"vip前一章uv\",\"强关前一章uv\"\r\n");
  696. $obj = SendOrderStatService::getObj($params);
  697. $obj->chunk(2000, function ($send_orders) {
  698. foreach ($send_orders as $item) {
  699. $res = SendStatistics::getBeforeForceSubAndBeforeVipUv($item->bid, $item->send_order_id, date('Y-m-d', strtotime($item->create_time)), false);
  700. echo("\"" . $item->create_time . "\",");
  701. echo("\"" . $item->send_time . "\",");
  702. echo("\"" . $item->send_order_id . "\",");
  703. echo("\"" . mb_convert_encoding(($item->name ? $item->name : "未填"), "GBK") . "\",");
  704. echo("\"" . $item->distribution_channel_id . "\",");
  705. echo("\"" . mb_convert_encoding(($item->book_name ? $item->book_name : "未填"), "GBK") . "\",");
  706. echo("\"" . $item->bid . "\",");
  707. echo("\"" . $item->charge_type . "\",");
  708. echo("\"" . $item->recharge_amount . "\",");
  709. echo("\"" . mb_convert_encoding(($item->distribution_channel_name ? $item->distribution_channel_name : "未填"), "GBK") . "\",");
  710. echo("\"" . $item->cost . "\",");
  711. echo("\"" . $item->send_time . "\",");
  712. echo("\"" . $item->recharge_amount_in_half_day . "\",");
  713. echo("\"" . $item->recharge_amount_in_two_weeks . "\",");
  714. echo("\"" . $item->recharge_amount_in_one_day . "\",");
  715. echo("\"" . $item->recharge_amount_in_three_days . "\",");
  716. echo("\"" . $item->first_recharge_user_num . "\",");
  717. echo("\"" . date("Y-m-d H:i:s", strtotime($item->updated_at)) . "\",");
  718. echo("\"" . $item->force_user_num . "\",");
  719. echo("\"" . $item->register_user_num . "\",");
  720. echo("\"" . $item->pay_user_num . "\",");
  721. echo("\"" . $item->paid_num . "\",");
  722. echo("\"" . $item->unpaid_num . "\",");
  723. echo("\"" . $item->first_recharge_amount . "\",");
  724. echo("\"" . $item->year_recharge_user_num . "\",");
  725. echo("\"" . $item->ticket_recharge_user_num . "\",");
  726. echo("\"" . $item->pv . "\",");
  727. echo("\"" . $item->uv . "\",");
  728. //24小时pv、uv
  729. $extra_stat = SendOrderService::getExtraStat($item->send_order_id);
  730. $uv_one_day = $extra_stat ? $extra_stat->uv_one_day : 0;
  731. $pv_one_day = $extra_stat ? $extra_stat->pv_one_day : 0;
  732. echo("\"" . $uv_one_day . "\",");
  733. echo("\"" . $pv_one_day . "\",");
  734. echo("\"" . $res['before_vip'] . "\",");
  735. echo("\"" . $res['before_forcesub'] . "\"\r\n");
  736. }
  737. });
  738. exit();
  739. }
  740. /**
  741. * 加密站点id
  742. * @param Request $request
  743. */
  744. function encodeSiteId(Request $request)
  745. {
  746. $siteId = $request->has('siteId') ? $request->input('siteId') : '';
  747. if (empty($siteId)) {
  748. return response()->error("PARAM_EMPTY");
  749. }
  750. if (!is_numeric($siteId)) {
  751. return response()->error("PARAM_ERROR");
  752. }
  753. $siteId = encodeDistributionChannelId($siteId);
  754. $url = "https://site" . $siteId . ".leyuee.com";
  755. return response()->success(['url' => $url]);
  756. }
  757. }