1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351 |
- <?php
- /**
- * Created by PhpStorm.
- * User: hp
- * Date: 2017/11/22
- * Time: 11:36
- */
- namespace App\Http\Controllers\Channel\SendOrder;
- use App\Http\Controllers\Channel\BaseController;
- use App\Http\Controllers\Channel\SendOrder\Transformers\SendOrderTransformer;
- use App\Modules\Book\Services\BookConfigService;
- use App\Modules\Book\Services\ChapterService;
- use App\Modules\Channel\Services\ChannelService;
- use App\Modules\OfficialAccount\Services\ForceSubscribeService;
- use App\Modules\Promotion\Services\PromotionService;
- use App\Modules\SendOrder\Services\SendOrderService;
- use App\Modules\Statistic\Services\WapVisitStatService;
- use App\Modules\Trade\Services\OrderService;
- use App\Modules\User\Services\UserService;
- use DB;
- use Hashids;
- use Illuminate\Http\Request;
- class SendOrderController extends BaseController
- {
- /**
- * @apiDefine sendOrder 派单
- */
- /**
- * @apiVersion 1.0.0
- * @api {GET} sendOrder/getSendOrders 获取派单列表
- * @apiGroup sendOrder
- * @apiName getSendOrders
- * @apiParam{Number} [sendOrder_id] 派单id(可不传)
- * @apiParam{Number} [book_id] 书本id(可不传)
- * @apiParam{String} [name] 派单名称(可不传)
- * @apiParam{String} [book_name] 书名(可不传)
- * @apiParam{String} [start_time] 开始时间(可不传)
- * @apiParam{String} [end_time] 结束时间(可不传)
- * @apiParam{String} [pre_send_date_start] 预计发布时间开始(可不传)
- * @apiParam{String} [pre_send_date_end] 预计发布时间结束(可不传)
- * @apiParam{String} [promotion_point] 派单源 微信(默认)or浏览器(微信:1,浏览器:2)
- * @apiSuccess {Number} id 派单id.
- * @apiSuccess {String} distribution_channel_id 渠道id
- * @apiSuccess {String} entrance 入口
- * @apiSuccess {String} name 渠道名称
- * @apiSuccess {Number} book_id 书本id
- * @apiSuccess {String} channel_type 渠道类型
- * @apiSuccess {Number} document_cover_id 文案封面id
- * @apiSuccess {Number} headline_id 标题id
- * @apiSuccess {Number} body_template_id ID. 内容模板id
- * @apiSuccess {Number} original_guide_id 原文引导id
- * @apiSuccess {Number} qr_code_id 二维码
- * @apiSuccess {Number} subscribe_chapter_id 关注章节ID
- * @apiSuccess {Number} document_end_chapter_seq 结束章节序号
- * @apiSuccess {String} book_name 图书名称
- * @apiSuccess {String} chapter_name 章节名称
- * @apiSuccess {String} updated_at 更新时间
- * @apiSuccess {String} created_at 创建时间
- * @apiSuccess {String} pre_send_date 预计发布时间
- * @apiSuccess {String} sex_preference 性别偏好
- * @apiSuccess {String} subscribe_chapter_name 关注章节名称
- * @apiSuccess {String} subscribe_chapter_seq 关注章节序号
- * @apiSuccess {Number} remark 备注
- * @apiSuccess {Number} star_num 星星数
- * @apiSuccess {Number} cost 成本
- * @apiSuccess {Number} totalChargeAmount 充值总额数
- * @apiSuccess {Number} registerNum 注册数
- * @apiSuccess {Number} payUserNum 付费用户数
- * @apiSuccess {Number} clickNum 点击数数
- * @apiSuccess {Number} browserClickNum 浏览器端pv
- * @apiSuccess {Number} browserClickNumUV 浏览器端uv
- * @apiSuccess {Number} fansNum 粉丝数
- * @apiSuccess {Number} promotion_page_id 推广页面id
- * @apiSuccess {String} redirect_url 重定向url
- * @apiSuccess {String} qrcode 二维码
- * @apiSuccess {String} domain 域名
- * @apiSuccess {String} consumeTotalFee 派单下的消费的币的总和
- * @apiSuccess {String} consumeChargeFee 派单下的消费的充值币
- * @apiSuccess {String} consumeRewardFee 派单下的消费的奖励币
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- *
- * "data": [
- * {
- * "id": 5,
- * "distribution_channel_id": null,
- * "entrance": "书架",
- * "name": "acai",
- * "book_id": null,
- * "channel_type": "AUTHENTICATED",
- * "chapter_id": null,
- * "document_cover_id": null,
- * "headline_id": null,
- * "body_template_id": null,
- * "original_guide_id": null,
- * "subscribe_chapter_id": null,
- * "book_name": null,
- * "document_end_chapter_seq"=12.
- * "sex_preference": "男频",
- * "chapter_name": null,
- * "updated_at": "2017-11-22 14:40:46",
- * "created_at": "2017-11-22 14:40:46",
- * "pre_send_date": "2018/11/12"
- * "subscribe_chapter_name": null,
- * "subscribe_chapter_seq": null,
- * "remark": "0",
- * "star_num": 0,
- * "fansNum": 0,
- * "cost":1111
- * "totalChargeAmount": 0,
- * "registerNum": 0,
- * "payUserNum": 0,
- * "clickNum": 0,
- * "promotion_page_id": 1111,
- * "redirect_url": ""
- * "qrcode": ""
- * "domain":"leque"
- * "toatlOrderCount":12,
- * "vipOrderCount":12,
- * "normalOrderCount":12,
- * },
- * {
- * "id": 11,
- * "distribution_channel_id": 123,
- * "entrance": null,
- * "name": "acai",
- * "book_id": 111,
- * "cost":1111
- * "channel_type": "AUTHENTICATED",
- * "chapter_id": 1111,
- * "document_cover_id": 899,
- * "headline_id": 12334,
- * "body_template_id": 3455,
- * "document_end_chapter_seq"=12.
- * "original_guide_id": 344,
- * "subscribe_chapter_id": 11111,
- * "book_name": "dpcq",
- * "sex_preference": "男频",
- * "chapter_name": "ssss",
- * "domain":"leque"
- * "updated_at": "2017-11-22 14:40:46",
- * "created_at": "2017-11-22 14:40:46",
- * "subscribe_chapter_name": null,
- * "subscribe_chapter_seq": null,
- * "remark": "0",
- * "star_num": 0,
- * "fansNum": 0,
- * "totalChargeAmount": 0,
- * "addUserNum": 0,
- * "payUserNum": 0,
- * "clickNum": 0,
- * "toatlOrderCount":12,
- * "vipOrderCount":12,
- * "normalOrderCount":12,
- * "promotion_page_id": null,
- * "redirect_url": ""
- * "qrcode": ""
- * }
- * ],
- * "meta": {
- * "total": 1,
- * "per_page": 15,
- * "current_page": 1,
- * "last_page": 1,
- * "next_page_url": "",
- * "prev_page_url": ""
- * }
- * }
- */
- function getSendOrders(Request $request)
- {
- $distribution_channel_id = $this->getChannelId();
- $name = $request->has('name') ? $request->input('name') : '';
- $book_id = $request->has('book_id') ? $request->input('book_id') : '';
- $book_name = $request->has('book_name') ? $request->input('book_name') : '';
- $id = $sendOrderId = $request->has('sendOrder_id') ? $request->input('sendOrder_id') : '';
- $promotion_type = $request->has('promotion_type') ? $request->input('promotion_type') : '';
- $import_company_name = $request->has('company_name') ? $request->input('company_name') : '';
- $pre_send_date_end = $request->has('pre_send_date_end') ? $request->input('pre_send_date_end') : '';
- $pre_send_date_start = $request->has('pre_send_date_start') ? $request->input('pre_send_date_start') : '';
- $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? $request->input('start_time') : '';
- $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) : '';
- $promotion_point = $request->has('promotion_point') ? $request->input('promotion_point') : 1;
- //$data = SendOrderService::getSendOrders($bookId, $distribution_channel_id, $name, $bookName, $sendOrderId, $start_time, $end_time, false);
- $data = SendOrderService::search(compact(
- 'book_id',
- 'distribution_channel_id',
- 'name',
- 'pre_send_date_end',
- 'import_company_name',
- 'pre_send_date_start',
- 'promotion_type',
- 'pre_send_date',
- 'book_name',
- 'start_time',
- 'end_time',
- 'id',
- 'promotion_point'
- ));
- $send_order_export_special_channel = env('SEND_ORDER_EXPORT_SPECIAL_CHANNEL');
- $isExistSpecialChannel = in_array($distribution_channel_id, explode(',', $send_order_export_special_channel));
- foreach ($data as $item) {
- $itemName = $item->name;
- if ($isExistSpecialChannel) {
- if (strpos($itemName, "-")) {
- $strs = explode('-', $itemName);
- if (count($strs) == 4) {
- $date = $this->getFormatDate($strs[2], $item->created_at);
- $strs[2] = date('Y/m/d', strtotime($date));
- $itemName = implode('-', $strs);
- if (!$item->pre_send_date) {
- $item->pre_send_date = $date;
- }
- } elseif (count($strs) == 6) {
- $date = $this->getFullDate($strs[2], $strs[3], $strs[4], $item->created_at);
- if (!$item->pre_send_date) {
- $item->pre_send_date = $date;
- }
- $itemName = $strs[0] . '-' . $strs[1] . '-' . $date . '-' . $strs[5];
- }
- }
- }
- $sendOrderId = $item->id;
- $item->name = $itemName;
- $browser_visit_info = SendOrderService::getBrowserUvAndPv($sendOrderId);
- $item->browserClickNum = $browser_visit_info['pv'];
- $item->browserClickNumUV = $browser_visit_info['uv'];
- $item->clickNum = SendOrderService::getPv($sendOrderId);
- $item->clickNumUV = SendOrderService::getUv($sendOrderId);//uv
- $item->payUserNum = OrderService::getPayUserNum($sendOrderId);
- $item->registerNum = UserService::getPromotionTotal($sendOrderId);
- $item->fansNum = ForceSubscribeService::getNewFansNum($sendOrderId);
- $item->continue_read_uv = SendOrderService::getContinueTotalReadUv($item->id);
- if ($promotion_point == 2) {
- $item->promotion_url = 'https://bsite' . encodeDistributionChannelId($distribution_channel_id) . '.leyuee.com/yun/' . $item->id;
- } else {
- $item->promotion_url = 'https://site' . encodeDistributionChannelId($distribution_channel_id) . '.' . $this->getDomainByBid($item->book_id) . '/yun/' . $item->id;
- }
- $item->totalChargeAmount = (float)OrderService::getAmount(['send_order_id' => $sendOrderId]);
- // $item->totalChargeAmount = OrderService::getPromotionRegUserRechargeAmount(['send_order_id' => $item->id]);
- $item->qrcode = "";//"data:image/png;base64," . base64_encode(QrCode::format('png')->size(200)->generate($promotion_url));
- // $bookOrderInfo = BookOrderService::getSendorderTotal($sendOrderId, $start_time, $end_time);
- // $chapterOrderInfo = ChapterOrderService::getSendorderTotal($sendOrderId, $start_time, $end_time);
- $item->consumeChargeFee = 0;//$bookOrderInfo['charge_balance'] + $chapterOrderInfo['charge_balance'];
- $item->consumeRewardFee = 0;//$bookOrderInfo['reward_balance'] + $chapterOrderInfo['reward_balance'];;
- $item->consumeTotalFee = 0;//$item->consumeChargeFee + $item->consumeRewardFee;
- }
- return response()->pagination(new SendOrderTransformer, $data);
- }
- function getFullDate($year, $month, $day, $created_at = '')
- {
- if (strlen($year) != 4) {
- if ($created_at) {
- $year = date('Y', strtotime($created_at));
- } else {
- $year = date('Y');
- }
- }
- if (strlen($month) == 1) {
- $month = '0' . $month;
- }
- if (strlen($day) == 1) {
- $day = '0' . $day;
- }
- $date = $year . $month . $day;
- $date = date('Y/m/d', strtotime($date));
- return $date;
- }
- function getFormatDate($date, $created_at = '')
- {
- $count = strlen($date);
- if ($created_at) {
- $year = date('Y', strtotime($created_at));
- } else {
- $year = date('Y');
- }
- if (2 == $count) {
- $date = $year . '0' . $date[0] . '0' . $date[1];
- } elseif (3 == $count) {
- if (0 === strpos($date, '0')) {
- $date = $year . substr($date, 0, 2) . '0' . $date[2];
- } else {
- $date = $year . '0' . $date;
- }
- } elseif (4 == $count) {
- $date = $year . $date;
- }
- return $date;
- }
- /**
- * 根据图书id获取域名
- * @param $bid
- */
- function getDomainByBid($bid = '')
- {
- $domain = 'leyuee.com';
- //如果图书id为空,则返回默认的域名
- if (!empty($bid)) {
- $bookConfig = BookConfigService::getBookById($bid);
- if ($bookConfig) {
- $domain = $bookConfig->promotion_domain;
- }
- }
- return $domain;
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 派单列表导出
- * @api {GET} sendOrder/exportSendOrders 派单列表导出
- * @apiGroup sendOrder
- * @apiName exportSendOrders
- * @apiParam{Number} [sendOrder_id] 派单id(可不传)
- * @apiParam{Number} [book_id] 书本id(可不传)
- * @apiParam{String} [book_name] 书名(可不传)
- * @apiParam{String} [name] 派单名称(可不传)
- * @apiParam{String} [pre_send_date_start] 预计发布时间开始(可不传)
- * @apiParam{String} [pre_send_date_end] 预计发布时间结束(可不传)
- * @apiParam{String} [start_time] 开始时间(可不传)
- * @apiParam{String} [end_time] 结束时间(可不传)
- * @apiParam{String} [promotion_point] 派单源 微信(默认)or浏览器(微信:1,浏览器:2)
- * @apiSuccess {Number} id 派单id.
- * @apiSuccess {String} distribution_channel_id 渠道id
- * @apiSuccess {String} entrance 入口
- * @apiSuccess {String} name 渠道名称
- * @apiSuccess {Number} book_id 书本id
- * @apiSuccess {String} channel_type 渠道类型
- * @apiSuccess {Number} document_cover_id 文案封面id
- * @apiSuccess {Number} headline_id 标题id
- * @apiSuccess {Number} body_template_id ID. 内容模板id
- * @apiSuccess {Number} original_guide_id 原文引导id
- * @apiSuccess {Number} subscribe_chapter_id 关注章节ID
- * @apiSuccess {String} book_name 图书名称
- * @apiSuccess {String} chapter_name 章节名称
- * @apiSuccess {Number} cost 成本
- * @apiSuccess {String} updated_at 更新时间
- * @apiSuccess {String} created_at 创建时间
- * @apiSuccess {String} subscribe_chapter_name 关注章节名称
- * @apiSuccess {String} subscribe_chapter_seq 关注章节序号
- * @apiSuccess {Number} remark 备注
- * @apiSuccess {Number} star_num 星星数
- * @apiSuccess {Number} totalChargeAmount 充值总额数
- * @apiSuccess {Number} registerNum 注册数
- * @apiSuccess {Number} payUserNum 付费用户数
- * @apiSuccess {Number} clickNum 点击数数
- * @apiSuccess {Number} fansNum 粉丝数
- * @apiSuccess {Number} promotion_page_id 推广页面id
- * @apiSuccess {String} redirect_url 重定向url
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- *
- * "data": [
- * {
- * "id": 5,
- * "distribution_channel_id": null,
- * "entrance": "书架",
- * "name": "acai",
- * "book_id": null,
- * "channel_type": "AUTHENTICATED",
- * "chapter_id": null,
- * "document_cover_id": null,
- * "headline_id": null,
- * "body_template_id": null,
- * "original_guide_id": null,
- * "subscribe_chapter_id": null,
- * "book_name": null,
- * "chapter_name": null,
- * "updated_at": "2017-11-22 14:40:46",
- * "created_at": "2017-11-22 14:40:46",
- * "subscribe_chapter_name": null,
- * "subscribe_chapter_seq": null,
- * "remark": "0",
- * "star_num": 0,
- * "fansNum": 0,
- * "cost":111,
- * "totalChargeAmount": 0,
- * "registerNum": 0,
- * "payUserNum": 0,
- * "clickNum": 0,
- * "promotion_page_id": 1111,
- * "redirect_url": ""
- * },
- * {
- * "id": 11,
- * "distribution_channel_id": 123,
- * "entrance": null,
- * "name": "acai",
- * "book_id": 111,
- * "channel_type": "AUTHENTICATED",
- * "chapter_id": 1111,
- * "document_cover_id": 899,
- * "headline_id": 12334,
- * "body_template_id": 3455,
- * "original_guide_id": 344,
- * "subscribe_chapter_id": 11111,
- * "book_name": "dpcq",
- * "cost":1111
- * "chapter_name": "ssss",
- * "updated_at": "2017-11-22 14:40:46",
- * "created_at": "2017-11-22 14:40:46",
- * "subscribe_chapter_name": null,
- * "subscribe_chapter_seq": null,
- * "remark": "0",
- * "star_num": 0,
- * "fansNum": 0,
- * "totalChargeAmount": 0,
- * "addUserNum": 0,
- * "payUserNum": 0,
- * "clickNum": 0,
- * "promotion_page_id": null,
- * "redirect_url": ""
- * }
- * ],
- * "meta": {
- * "total": 1,
- * "per_page": 15,
- * "current_page": 1,
- * "last_page": 1,
- * "next_page_url": "",
- * "prev_page_url": ""
- * }
- * }
- */
- function exportSendOrders(Request $request)
- {
- set_time_limit(0);
- $distribution_channel_id = $this->getChannelId();
- $name = $request->has('name') ? $request->input('name') : '';
- $book_id = $request->has('book_id') ? $request->input('book_id') : '';
- $book_name = $request->has('book_name') ? $request->input('book_name') : '';
- $id = $request->has('sendOrder_id') ? $request->input('sendOrder_id') : '';
- $promotion_type = $request->has('promotion_type') ? $request->input('promotion_type') : '';
- $pre_send_date_end = $request->has('pre_send_date_end') ? $request->input('pre_send_date_end') : '';
- $import_company_name = $request->has('company_name') ? $request->input('company_name') : '';
- $pre_send_date_start = $request->has('pre_send_date_start') ? $request->input('pre_send_date_start') : '';
- $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? $request->input('start_time') : '';
- $promotion_point = $request->has('promotion_point') ? $request->input('promotion_point') : 1;
- $send_order_export_special_channel = env('SEND_ORDER_EXPORT_SPECIAL_CHANNEL');
- $isExistSpecialChannel = in_array($distribution_channel_id, explode(',', $send_order_export_special_channel));
- $end_time = $request->has('end_time') && !empty($request->input('end_time')) ? date('Y-m-d H:i:s', strtotime(trim($request->input('end_time'))) + 86400 - 1) : '';
- //$data = SendOrderService::getSendOrders($bookId, $distribution_channel_id, $name, $bookName, $sendOrderId, $start_time, $end_time, true);
- $data = SendOrderService::search(compact('book_id', 'distribution_channel_id', 'name', 'import_company_name', 'pre_send_date_end', 'pre_send_date_start', 'promotion_type', 'book_name', 'start_time', 'end_time', 'id', 'promotion_point'), true);
- header("Content-type:application/vnd.ms-excel");
- header("Content-Disposition:attachment;filename=" . "派单列表" . date("YmdHis") . ".csv");
- $specialChannelIdStats = env('SPECIAL_CHANNEL_STATS', 211);
- if ($isExistSpecialChannel) {
- if (in_array($distribution_channel_id, explode(',', $specialChannelIdStats))) {
- echo mb_convert_encoding("\"推广名称\",\"预计发送时间\",\"推广员\",\"书名\",\"点击数\",\"新增用户\",\"注册用户数\",\"新增关注\",\"新增关注率\",\"新关成本\",\"付费用户\",\"首充用户数\",\"成本\",\"累计充值\",\"累计充值成本率\",\"72小时累计充值总额\",\"72小时累计充值回本率\",\"7日充值总额\",\"公司名称\",\"总粉丝数\",\"累计UV大于20的时间\",\"推广位置\",\"小说来源\",\"推广链接\",\"章节名称\",\"充值总额\",\"充值成本率\",\"30日充值总额\",\"30日回本率\",\"24小时充值总额\",\"24小时回本率\",\"72小时充值总额\",\"72小时回本率\",\"30日累计充值总额\",\"30日累计充值回本率\",\"60日累计充值总额\",\"创建时间\",\"首日累计订阅人数\",\"首日累计订阅总额\",\"三日累计订阅人数\",\"三日累计订阅总额\",\"累计订阅人数\",\"累计订阅总额\"\r\n", 'GBK', 'UTF-8');
- } else {
- echo mb_convert_encoding("\"推广名称\",\"预计发送时间\",\"推广员\",\"书名\",\"点击数\",\"新增用户\",\"注册用户数\",\"新增关注\",\"新增关注率\",\"新关成本\",\"付费用户\",\"首充用户数\",\"成本\",\"累计充值\",\"累计充值成本率\",\"72小时累计充值总额\",\"72小时累计充值回本率\",\"7日充值总额\",\"公司名称\",\"总粉丝数\",\"累计UV大于20的时间\",\"推广位置\",\"小说来源\",\"推广链接\",\"章节名称\",\"充值总额\",\"充值成本率\",\"30日充值总额\",\"30日回本率\",\"24小时充值总额\",\"24小时回本率\",\"72小时充值总额\",\"72小时回本率\",\"30日累计充值总额\",\"30日累计充值回本率\",\"60日累计充值总额\",\"创建时间\"\r\n", 'GBK', 'UTF-8');
- }
- } else {
- echo mb_convert_encoding("\"推广名称\",\"推广链接\",\"书名\",\"章节名称\",\"点击数\",\"新增用户\",\"注册用户数\",\"新增关注\",\"新增关注率\",\"付费用户\",\"首充用户数\",\"充值总额\",\"成本\",\"充值成本率\",\"24小时充值总额\",\"24小时回本率\",\"72小时充值总额\",\"72小时回本率\",\"30日累计充值总额\",\"60日累计充值总额\",\"创建时间\"\r\n", 'GBK', 'UTF-8');
- }
- if ($data) {
- foreach ($data as $item) {
- $item->clickNum = SendOrderService::getPv($item->id);
- $item->clickNumUV = SendOrderService::getUv($item->id);//uv
- $item->payUserNum = OrderService::getPayUserNum($item->id);
- $item->fansNum = ForceSubscribeService::getNewFansNum($item->id);
- $item->registerNum = UserService::getPromotionTotal($item->id);
- $item->totalChargeAmount = (float)OrderService::getAmount(['send_order_id' => $item->id]);
- // $item->totalChargeAmount = OrderService::getPromotionRegUserRechargeAmount(['send_order_id' => $item->id]);
- $itemName = $item->name;
- $promotionUrl = "https://site" . $distribution_channel_id . "." . ($this->getDomainByBid($item->book_id ? $item->book_id : '')) . "/yun/" . $item->id;
- /*$stats_obj = SendOrderStat::where('send_order_id',$item->id)->first();
- $item->one_day_recharge = $stats_obj->recharge_amount_in_one_day;
- $item->three_days_recharge = $stats_obj->recharge_amount_in_three_days;*/
- //计算123 渠道号的 24小时 、72小时、7天,30日充值成本和回本
- $oneDayChargeAmount = 'NAV';
- $threeDayChargeAmount = 'NAV';
- $sevenDayChargeAmount = 'NAV';
- $thirtyDayChargeAmount = 'NAV';
- $promotionRegUserRecharge = 0; //累计充值
- $promotionRegUserRechargeAmountInOneMonth = 0; //30天累计充值
- $promotionRegUserRechargeAmountInTwoMonth = 0; //60天累计充值
- $promotionRegUserRechargeAmountInThreeDays = 0; //72小时累计充值
- $firstChargeUserNum = SendOrderService::getFirstChargeUserNum($item->id);
- $uv20Time = $item->send_time;//SendOrderService::getUv20Time($item->id);
- if ($uv20Time) {
- $send_time_24h_later = strtotime($uv20Time) + 86400;
- $send_time_72h_later = strtotime($uv20Time) + 3 * 86400;
- $send_time_7d_later = strtotime($uv20Time) + 7 * 86400;
- $send_time_30d_later = strtotime($uv20Time) + 30 * 86400;
- $promotionRegUserRecharge = OrderService::getPromotionRegUserRechargeAmount(['send_order_id' => $item->id]);
- $promotionRegUserRechargeAmountInOneMonth = OrderService::getPromotionRegUserRechargeAmount(['send_order_id' => $item->id, 'end_time' => date("Y-m-d H:i:s", strtotime($uv20Time) + 30 * 86400)]);
- $promotionRegUserRechargeAmountInThreeDays = OrderService::getPromotionRegUserRechargeAmount(['send_order_id' => $item->id, 'end_time' => date("Y-m-d H:i:s", strtotime($uv20Time) + 3 * 86400)]);
- $promotionRegUserRechargeAmountInTwoMonth = OrderService::getPromotionRegUserRechargeAmount(['send_order_id' => $item->id, 'end_time' => date("Y-m-d H:i:s", strtotime($uv20Time) + 60 * 86400)]);
- //计算24小时内的充值
- if ($send_time_24h_later < time()) {
- $selctEndTime = date('Y-m-d H:i:s', $send_time_24h_later);
- $oneDayChargeAmount = OrderService::getAmount(['send_order_id' => $item->id, 'begin_time' => $uv20Time, 'end_time' => $selctEndTime]);
- }
- //计算72小时内的充值
- if ($send_time_72h_later < time()) {
- $selctEndTime = date('Y-m-d H:i:s', $send_time_72h_later);
- $threeDayChargeAmount = OrderService::getAmount(['send_order_id' => $item->id, 'begin_time' => $uv20Time, 'end_time' => $selctEndTime]);
- }
- //计算7日内的充值
- if ($send_time_7d_later < time()) {
- $selctEndTime = date('Y-m-d H:i:s', $send_time_7d_later);
- $sevenDayChargeAmount = OrderService::getAmount(['send_order_id' => $item->id, 'begin_time' => $uv20Time, 'end_time' => $selctEndTime]);
- }
- //计算30日内的充值
- if ($send_time_30d_later < time()) {
- $selctEndTime = date('Y-m-d H:i:s', $send_time_30d_later);
- $thirtyDayChargeAmount = OrderService::getAmount(['send_order_id' => $item->id, 'begin_time' => $uv20Time, 'end_time' => $selctEndTime]);
- }
- }
- if ($isExistSpecialChannel) {
- $promotionSource = '-';
- if (strpos($itemName, "-")) {
- $strs = explode('-', $itemName);
- if (count($strs) == 4) {
- $date = $this->getFormatDate($strs[2], $item->created_at);
- $date = date('Y/m/d', strtotime($date));
- $promotionSource = $strs[1];
- echo("\"" . mb_convert_encoding($strs[0], "GBK", "UTF-8") . "\",");
- echo("\"" . $date . "\",");
- echo("\"" . mb_convert_encoding($strs[3], "GBK", "UTF-8") . "\",");
- } elseif (count($strs) == 6) {
- $promotionSource = $strs[1];
- $date = $this->getFullDate($strs[2], $strs[3], $strs[4], $item->created_at);
- echo("\"" . mb_convert_encoding($strs[0], "GBK", "UTF-8") . "\",");
- echo("\"" . $date . "\",");
- echo("\"" . mb_convert_encoding($strs[5], "GBK", "UTF-8") . "\",");
- } else {
- echo("\"" . mb_convert_encoding($itemName, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding('-', "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding('-', "GBK", "UTF-8") . "\",");
- }
- } else {
- echo("\"" . mb_convert_encoding($itemName, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding('-', "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding('-', "GBK", "UTF-8") . "\",");
- }
- echo("\"" . mb_convert_encoding($item->book_name ? $item->book_name : '书名为空', "GBK", "UTF-8") . "\",");
- echo("\"" . $item->clickNum . "\",");
- echo("\"" . $item->clickNumUV . "\",");
- echo("\"" . $item->registerNum . "\",");
- echo("\"" . $item->fansNum . "\",");
- echo("\"" . ($this->getPersentAmount($item->fansNum, $item->registerNum)) . "\",");
- echo("\"" . ((int)$item->fansNum != 0 ? round($item->cost / $item->fansNum, 2) : 0) . "\",");
- echo("\"" . $item->payUserNum . "\",");
- echo("\"" . $firstChargeUserNum . "\",");
- echo("\"" . $item->cost . "\",");
- echo("\"" . $promotionRegUserRecharge . "\",");
- echo("\"" . ($this->getPersentAmount($promotionRegUserRecharge, $item->cost)) . "\",");
- echo("\"" . mb_convert_encoding($promotionRegUserRechargeAmountInThreeDays, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($this->getPersentAmount($promotionRegUserRechargeAmountInThreeDays, $item->cost), "GBK", "UTF-8") . "\",");
- echo("\"" . $sevenDayChargeAmount . "\",");
- echo("\"" . mb_convert_encoding($item->import_company_name ? $item->import_company_name : '未填', "GBK", "UTF-8") . "\",");
- echo("\"" . $item->fansNum . "\",");
- echo("\"" . mb_convert_encoding($uv20Time ? $uv20Time : '未到20', "GBK", "UTF-8") . "\",");
- echo("\"" . $promotionSource . "\",");
- $cpSource = '未知';
- if ($item->book_id) {
- $bookConfig = BookConfigService::getBookById($item->book_id);
- if ($bookConfig) {
- $cpSource = $bookConfig->cp_source;
- }
- }
- echo("\"" . mb_convert_encoding($cpSource, "GBK", "UTF-8") . "\",");
- echo("\"" . $promotionUrl . "\",");
- echo("\"" . mb_convert_encoding($item->chapter_name ? $item->chapter_name : '章节名称为空', "GBK", "UTF-8") . "\",");
- echo("\"" . $item->totalChargeAmount . "\",");
- echo("\"" . ($this->getPersentAmount($item->totalChargeAmount, $item->cost)) . "\",");
- echo("\"" . mb_convert_encoding($thirtyDayChargeAmount, "GBK", "UTF-8") . "\",");
- echo("\"" . ($this->getPersentAmount($thirtyDayChargeAmount, $item->cost)) . "\",");
- echo("\"" . mb_convert_encoding($oneDayChargeAmount, "GBK", "UTF-8") . "\",");
- echo("\"" . ($this->getPersentAmount($oneDayChargeAmount, $item->cost)) . "\",");
- echo("\"" . mb_convert_encoding($threeDayChargeAmount, "GBK", "UTF-8") . "\",");
- echo("\"" . ($this->getPersentAmount($threeDayChargeAmount, $item->cost)) . "\",");
- echo("\"" . $promotionRegUserRechargeAmountInOneMonth . "\",");
- //30日累计充值回本率
- echo("\"" . mb_convert_encoding($this->getPersentAmount($promotionRegUserRechargeAmountInOneMonth, $item->cost), "GBK", "UTF-8") . "\",");
- echo("\"" . $promotionRegUserRechargeAmountInTwoMonth . "\",");
- //echo("\"" . $item->created_at->toDateTimeString() . "\"\r\n");
- if (in_array($distribution_channel_id, explode(',', $specialChannelIdStats))) {
- echo("\"" . $item->created_at->toDateTimeString() . "\",");
- if ($item->send_time) {
- $special_stats_date = date('Y-m-d', strtotime($item->send_time));
- } else {
- $special_stats_date = '';
- }
- $special_stats = WapVisitStatService::getSpecialChannelIdStats($item->id, $special_stats_date);
- echo("\"" . $special_stats['first_day_subscribe_num'] . "\",");
- echo("\"" . $special_stats['first_day_subscribe_amount'] . "\",");
- echo("\"" . $special_stats['three_day_subscribe_num'] . "\",");
- echo("\"" . $special_stats['three_day_subscribe_amount'] . "\",");
- echo("\"" . $special_stats['total_subscribe_num'] . "\",");
- echo("\"" . $special_stats['total_subscribe_amount'] . "\"\r\n");
- } else {
- echo("\"" . $item->created_at->toDateTimeString() . "\"\r\n");
- }
- } else {
- echo("\"" . mb_convert_encoding($itemName, "GBK", "UTF-8") . "\",");
- echo("\"" . $promotionUrl . "\",");
- echo("\"" . mb_convert_encoding($item->book_name ? $item->book_name : '书名为空', "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($item->chapter_name ? $item->chapter_name : '章节名称为空', "GBK", "UTF-8") . "\",");
- echo("\"" . $item->clickNum . "\",");
- echo("\"" . $item->clickNumUV . "\",");
- echo("\"" . $item->registerNum . "\",");
- echo("\"" . $item->fansNum . "\",");
- echo("\"" . ($this->getPersentAmount($item->fansNum, $item->registerNum)) . "\",");
- echo("\"" . $item->payUserNum . "\",");
- echo("\"" . $firstChargeUserNum . "\",");
- echo("\"" . $item->totalChargeAmount . "\",");
- echo("\"" . $item->cost . "\",");
- echo("\"" . ($this->getPersentAmount($item->totalChargeAmount, $item->cost)) . "\",");
- echo("\"" . mb_convert_encoding($oneDayChargeAmount, "GBK", "UTF-8") . "\",");
- echo("\"" . ($this->getPersentAmount($oneDayChargeAmount, $item->cost)) . "\",");
- echo("\"" . mb_convert_encoding($threeDayChargeAmount, "GBK", "UTF-8") . "\",");
- echo("\"" . ($this->getPersentAmount($threeDayChargeAmount, $item->cost)) . "\",");
- echo("\"" . $promotionRegUserRechargeAmountInOneMonth . "\",");
- echo("\"" . $promotionRegUserRechargeAmountInTwoMonth . "\",");
- echo("\"" . $item->created_at->toDateTimeString() . "\"\r\n");
- }
- }
- }
- exit();
- }
- /**
- * 计算成本率
- * @param $amount 充值金额
- * @param $cost 成本
- * @return int|string
- */
- function getPersentAmount($amount, $cost)
- {
- if (is_numeric($amount)) {
- if (abs($cost) < 0.01) {
- $persentResult = '100%';
- } else {
- $persentResult = round(($amount / $cost) * 100, 2) . '%';
- }
- } else {
- $persentResult = '0%';
- }
- return $persentResult;
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 更新派单星级数和备注
- * @api {POST} sendOrder/updateStarNumAndRemark 更新派单星级数和备注
- * @apiGroup sendOrder
- * @apiName updateStarNumAndRemark
- * @apiParam{Number} id 派单id.
- * @apiParam{Number} distribution_channel_id 渠道id.
- * @apiParam{Number} star_num 派单星级数
- * @apiParam{String} remark 派单备注
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data":[]
- * }
- */
- function updateStarNumAndRemark(Request $request)
- {
- $distribution_channel_id = $this->getChannelId();
- $id = $request->has('id') ? $request->input('id') : '';
- $remark = $request->has('remark') ? $request->input('remark') : '';
- $starNum = $request->has('star_num') ? $request->input('star_num') : '';
- if (empty($id) || empty($distribution_channel_id) || empty($starNum)) {
- return response()->error("PARAM_EMPTY");
- }
- if (!is_numeric($starNum)) {
- return response()->error("PARAM_ERROR");
- }
- $data = SendOrderService::updateStarNumAndRemark($id, $distribution_channel_id, $starNum, $remark);
- if ($data) {
- return response()->success();
- }
- return response()->error("HANDLE_FAILED");
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 生成一个章节内容的派单
- * @api {POST} sendOrder/createFromChapter 生成一个章节内容的派单
- * @apiGroup sendOrder
- * @apiName createFromChapter
- * @apiParam {String} name 派单渠道名称.
- * @apiParam{Number} cost 成本.
- * @apiParam {String} distribution_channel_id 渠道id
- * @apiParam {String} channel_type 派单渠道类型.(允许值: AUTHENTICATED, UNAUTHENTICATED)
- * @apiParam {String} book_id 书本id
- * @apiParam {String} promotion_type 推广类型[INTERVAL、EXTERVAL]. 内部、外部
- * @apiParam {String} book_name 书本名称
- * @apiParam {String} chapter_id 章节id
- * @apiParam {String} qr_code_id 二维码id.
- * @apiParam {String} chapter_name 章节名称
- * @apiParam {String} headline_id 推广标题id
- * @apiParam {String} body_template_id 内容模板id
- * @apiParam {String} document_cover_id 文案封面id
- * @apiParam {String} original_guide_id 原文引导ID.
- * @apiParam {String} subscribe_chapter_id 强制订阅章节id
- * @apiParam {String} subscribe_chapter_name 强制订阅章节名称
- * @apiParam {String} subscribe_chapter_seq 强制订阅章节序号
- * @apiParam {String} document_end_chapter_seq 最后章节序号
- * @apiParam {String} sex_preference 性别偏向
- * @apiParam{String} [promotion_point] 派单源 微信(默认)or浏览器(微信:1,浏览器:2)
- * @apiSuccess {Number} id 派单id
- * @apiSuccess {String} promotion_url 推广链接
- * @apiSuccess {String} name 派单名称
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data":{"id":5,"promotion_url":"http:\/\/www . xs . com\/promotion\/index\/123456","name":"派单名称"}
- * }
- */
- function createFromChapter(Request $request)
- {
- $distribution_channel_id = $this->getChannelId();
- $name = $request->has('name') ? $request->input('name') : '';
- $promotion_type = $request->has('promotion_type') ? $request->input('promotion_type') : '';
- $cost = $request->has('cost') ? $request->input('cost') : 0;
- $book_id = $request->has('book_id') ? $request->input('book_id') : '';
- $book_name = $request->has('book_name') ? $request->input('book_name') : '';
- $chapter_id = $request->has('chapter_id') ? $request->input('chapter_id') : '';
- $qr_code_id = $request->has('qr_code_id') ? $request->input('qr_code_id') : '';
- $headline_id = $request->has('headline_id') ? $request->input('headline_id') : '';
- $chapter_name = $request->has('chapter_name') ? $request->input('chapter_name') : '';
- $channel_type = $request->has('channel_type') ? $request->input('channel_type') : '';
- $sex_preference = $request->has('sex_preference') ? $request->input('sex_preference') : '';
- $body_template_id = $request->has('body_template_id') ? $request->input('body_template_id') : '';
- $document_cover_id = $request->has('document_cover_id') ? $request->input('document_cover_id') : '';
- $original_guide_id = $request->has('original_guide_id') ? $request->input('original_guide_id') : '';
- $subscribe_chapter_id = $request->has('subscribe_chapter_id') ? $request->input('subscribe_chapter_id') : '';
- $subscribe_chapter_seq = $request->has('subscribe_chapter_seq') ? $request->input('subscribe_chapter_seq') : '';
- $subscribe_chapter_name = $request->has('subscribe_chapter_name') ? $request->input('subscribe_chapter_name') : '';
- $document_end_chapter_seq = $request->has('document_end_chapter_seq') ? $request->input('document_end_chapter_seq') : '';
- if (!$name || !$channel_type || !$promotion_type || !$book_id || !$book_name || !$sex_preference || !$document_end_chapter_seq || !$chapter_id || !$chapter_name || !$original_guide_id || !$headline_id || !$body_template_id || !$document_cover_id || !$document_cover_id || !$subscribe_chapter_id || !$subscribe_chapter_name || !$subscribe_chapter_seq) return response()->error('PARAM_EMPTY');
- if (empty($qr_code_id)) {
- $qr_code_id = 0;
- }
- $promotion_point = $request->has('promotion_point') ? $request->input('promotion_point') : 1;
- if (!in_array($promotion_point, [1, 2])) {
- $promotion_point = 1;
- }
- $redirect_url = "/reader?bid={$book_id}&cid={$chapter_id}";
- $book_id = Hashids::decode($book_id)[0];
- if ($book_id == 2423 && time() >= strtotime('2018-10-10 00:00:00') && time() <= strtotime('2018-10-15 00:00:00')) {
- return response()->error('CONTENT_MAINTAIN');
- }
- if ($promotion_point == 2) {
- $domain = 'leyuee.com';
- } else {
- $domain = $this->getDomainByBid($book_id);
- }
- $charge_type = $this->getBookChargeTypeByBid($book_id);
- $sendOrder = SendOrderService::createFromChapter(compact('name', 'channel_type', 'promotion_type', 'charge_type', 'cost', 'qr_code_id', 'domain', 'sex_preference', 'book_id', 'book_name', 'chapter_id', 'chapter_name', 'document_end_chapter_seq', 'original_guide_id', 'headline_id', 'body_template_id', 'document_cover_id', 'subscribe_chapter_id', 'subscribe_chapter_name', 'subscribe_chapter_seq', 'distribution_channel_id', 'redirect_url', 'promotion_point'));
- if ($promotion_point == 2) {
- $promotion_url = 'https://bsite' . encodeDistributionChannelId($distribution_channel_id) . '.leyuee.com/yun/' . $sendOrder->id;
- } else {
- $promotion_url = 'https://site' . encodeDistributionChannelId($distribution_channel_id) . '.' . $this->getDomainByBid($book_id) . '/yun/' . $sendOrder->id;
- }
- return response()->success(['id' => $sendOrder->id, 'promotion_url' => $promotion_url, 'name' => $name]);
- }
- /**
- * 通过推广模板图片生成
- * @param Request $request
- * @return mixed
- */
- function createFromPromotionImageTemplate(Request $request)
- {
- $distribution_channel_id = $this->getChannelId();
- $book_id = $request->has('book_id') ? $request->input('book_id') : '';
- $cost = $request->has('cost') ? $request->input('cost') : '';
- $name = $request->has('name') ? $request->input('name') : '';
- $book_name = $request->has('book_name') ? $request->input('book_name') : '';
- $promotion_point = $request->has('promotion_point') ? $request->input('promotion_point') : '';
- $promotion_type = $request->has('promotion_type') ? $request->input('promotion_type') : '';
- $channel_type = $request->has('channel_type') ? $request->input('channel_type') : '';
- $chapter_name = $request->has('chapter_name') ? $request->input('chapter_name') : '';
- $chapter_id = $request->has('chapter_id') ? $request->input('chapter_id') : '';
- $headline_id = $request->has('headline_id') ? $request->input('headline_id') : ''; //标题
- $image_id = $request->has('template_image_id') ? $request->input('template_image_id') : ''; //模板图片id
- $original_guide_id = $request->has('original_guide_id') ? $request->input('original_guide_id') : ''; //原文引导
- $subscribe_chapter_seq = $request->has('subscribe_chapter_seq') ? $request->input('subscribe_chapter_seq') : '';
- $subscribe_chapter_name = $request->has('subscribe_chapter_name') ? $request->input('subscribe_chapter_name') : '';
- $subscribe_chapter_id = $request->has('subscribe_chapter_id') ? $request->input('subscribe_chapter_id') : '';
- // 文案标题,推广图模板,原文引导,推广图模式
- $redirect_url = "/reader?bid={$book_id}&cid={$chapter_id}";
- $book_id = Hashids::decode($book_id)[0];
- $domain = $this->getDomainByBid($book_id);
- $charge_type = $this->getBookChargeTypeByBid($book_id);
- if ($book_id == 2423 && time() >= strtotime('2018-10-10 00:00:00') && time() <= strtotime('2018-10-15 00:00:00')) {
- return response()->error('CONTENT_MAINTAIN');
- }
- if (!$headline_id || !$original_guide_id || !$image_id || !$chapter_name || !$book_id || !$subscribe_chapter_id || !$subscribe_chapter_name || !$subscribe_chapter_seq || !$chapter_id || !$channel_type || !$promotion_type || !$name || !$promotion_point || !$book_name) {
- return response()->error('PARAM_EMPTY');
- } else {
- $sendOrder = SendOrderService::createFromChapter(compact('book_id', 'book_name', 'subscribe_chapter_seq', 'subscribe_chapter_name', 'subscribe_chapter_id', 'chapter_name', 'promotion_type', 'promotion_point', 'name', 'cost', 'channel_type', 'headline_id', 'original_guide_id', 'chapter_id', 'charge_type', 'domain', 'distribution_channel_id', 'redirect_url'));
- $promotion_url = 'https://site' . encodeDistributionChannelId($distribution_channel_id) . '.' . $this->getDomainByBid($book_id) . '/yun/' . $sendOrder->id;
- return response()->success(['id' => $sendOrder->id, 'promotion_url' => $promotion_url]);
- }
- }
- /**
- * 根据图书id获取图书的收费类型
- * @param string $bid
- */
- function getBookChargeTypeByBid($bid = '')
- {
- $charge_type = '';
- $bookConfig = BookConfigService::getBookById($bid);
- if ($bookConfig) {
- $charge_type = $bookConfig->charge_type;
- }
- return $charge_type;
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 生成目录中的章节的派单
- * @api {POST} sendOrder/createFromDirectory 生成一个目录的派单
- * @apiGroup sendOrder
- * @apiName createFromDirectory
- * @apiParam {String} name 派单渠道名称.
- * @apiParam{Number} cost 成本.
- * @apiParam {String} channel_type 派单渠道类型.(允许值: AUTHENTICATED, UNAUTHENTICATED)
- * @apiParam {String} book_id 书本id
- * @apiParam {String} promotion_type 推广类型[INTERVAL、EXTERVAL]. 内部、外部
- * @apiParam {String} qr_code_id 二维码id.
- * @apiParam {String} book_name 书本名称
- * @apiParam {String} chapter_id 章节id
- * @apiParam {String} chapter_name 章节名称
- * @apiParam {String} subscribe_chapter_id 强制订阅章节id
- * @apiParam {String} subscribe_chapter_name 强制订阅章节名称
- * @apiParam {String} subscribe_chapter_seq 强制订阅章节序号
- * @apiParam{String} [promotion_point] 派单源 微信(默认)or浏览器(微信:1,浏览器:2)
- * @apiSuccess {Number} id 派单id
- * @apiSuccess {String} promotion_url 推广链接
- * @apiSuccess {String} name 派单名称
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data":{"id":5,"promotion_url":"http:\/\/www . xs . com\/promotion\/index\/123456","name":"派单名称"}
- * }
- */
- function createFromDirectory(Request $request)
- {
- $distribution_channel_id = $this->getChannelId();
- $name = $request->has('name') ? $request->input('name') : '';
- $cost = $request->has('cost') ? $request->input('cost') : 0;
- $book_id = $request->has('book_id') ? $request->input('book_id') : '';
- $book_name = $request->has('book_name') ? $request->input('book_name') : '';
- $chapter_id = $request->has('chapter_id') ? $request->input('chapter_id') : '';
- $qr_code_id = $request->has('qr_code_id') ? $request->input('qr_code_id') : '';
- $chapter_name = $request->has('chapter_name') ? $request->input('chapter_name') : '';
- $channel_type = $request->has('channel_type') ? $request->input('channel_type') : '';
- $promotion_type = $request->has('promotion_type') ? $request->input('promotion_type') : '';
- $subscribe_chapter_id = $request->has('subscribe_chapter_id') ? $request->input('subscribe_chapter_id') : '';
- $subscribe_chapter_seq = $request->has('subscribe_chapter_seq') ? $request->input('subscribe_chapter_seq') : '';
- $subscribe_chapter_name = $request->has('subscribe_chapter_name') ? $request->input('subscribe_chapter_name') : '';
- $promotion_point = $request->has('promotion_point') ? $request->input('promotion_point') : 1;
- if (!in_array($promotion_point, [1, 2])) {
- $promotion_point = 1;
- }
- if (!$name || !$channel_type || !$promotion_type || !$book_id || !$book_name || !$chapter_id || !$chapter_name || !$subscribe_chapter_id || !$subscribe_chapter_seq || !$subscribe_chapter_name) return response()->error('PARAM_EMPTY');
- if (empty($qr_code_id)) {
- $qr_code_id = 0;
- }
- $redirect_url = "/reader?bid={$book_id}&cid={$chapter_id}";
- $book_id = Hashids::decode($book_id)[0];
- if ($book_id == 2423 && time() >= strtotime('2018-10-10 00:00:00') && time() <= strtotime('2018-10-15 00:00:00')) {
- return response()->error('CONTENT_MAINTAIN');
- }
- if ($promotion_point == 2) {
- $domain = 'leyuee.com';
- } else {
- $domain = $this->getDomainByBid($book_id);
- }
- $charge_type = $this->getBookChargeTypeByBid($book_id);
- $sendOrder = SendOrderService::createFromDirectory(compact(
- 'name',
- 'channel_type',
- 'promotion_type',
- 'charge_type',
- 'cost',
- 'domain',
- 'book_id',
- 'qr_code_id',
- 'book_name',
- 'chapter_id',
- 'subscribe_chapter_id',
- 'subscribe_chapter_name',
- 'subscribe_chapter_seq',
- 'chapter_name',
- 'distribution_channel_id',
- 'redirect_url',
- 'promotion_point'
- ));
- // $promotion_url = '/yun/' . $sendOrder->id;
- if ($promotion_point == 2) {
- $promotion_url = 'https://bsite' . encodeDistributionChannelId($distribution_channel_id) . '.leyuee.com/yun/' . $sendOrder->id;
- } else {
- $promotion_url = 'https://site' . encodeDistributionChannelId($distribution_channel_id) . '.' . $this->getDomainByBid($book_id) . '/yun/' . $sendOrder->id;
- }
- return response()->success(['id' => $sendOrder->id, 'promotion_url' => $promotion_url, 'name' => $name]);
- }
- function uploadSendOrders(Request $request)
- {
- if (!$request->hasFile('sendOrderFile')) {
- return response()->error('PARAM_EMPTY');
- }
- $qr_code_id = 0;
- $channel_type = 'AUTHENTICATED';
- $distribution_channel_id = $this->getChannelId();
- $file_name = date('YmdHis') . '.csv';
- $file = $request->file('sendOrderFile');
- if (null != $file) {
- $path = $request->sendOrderFile->storeAs('sendorder', $file_name);
- $path = storage_path('app/' . $path);
- header("Content-type:application/vnd.ms-excel");
- header("Content-Disposition:attachment;filename=" . "派单信息" . date("YmdHis") . ".csv");
- echo mb_convert_encoding("\"派单id\",\"渠道名称\",\"成本\",\"预计发送时间\",\"粉丝数\",\"图书名称\",\"图书id\",\"原文链接章节\",\"内外部\",\"公司名称\",\"代理商名称\",\"代理商介绍\",\"原文链接\"\r\n", 'GBK', 'UTF-8');
- $file = fopen($path, "r");
- //遍历读取每一行数据
- $currentIndex = 0;
- while ($data = fgetcsv($file)) {
- \Log::info($data);
- if (!$data[6]) continue;
- if ($currentIndex > 0) {
- $date = $this->getFormatDate($data[2]);
- $date = date('Y-m-d', strtotime($date));
- $data[2] = $date;
- $name = mb_convert_encoding(trim($data[0]), "UTF-8", "GBK") . '-' . +trim($data[1]) . '-' . trim($data[2]) . '-' . mb_convert_encoding(trim($data[3]), "UTF-8", "GBK");
- $cost = $data[4];
- $fan_num = (int)(trim($data[5]) * 10000);
- \Log::info($fan_num);
- $book_name = mb_convert_encoding(trim($data[6]), "UTF-8", "GBK");
- $book_id = trim($data[7]);
- $chapter_sqp = trim($data[8]);
- $reciver_promotion_type = mb_convert_encoding(trim($data[9]), "UTF-8", "GBK");
- $import_company_name = mb_convert_encoding(trim($data[10]), "UTF-8", "GBK");
- $agent_name = mb_convert_encoding(trim($data[11]), "UTF-8", "GBK");
- $agent_intro = mb_convert_encoding(trim($data[12]), "UTF-8", "GBK");
- $chapter = ChapterService::getChapterInfoByBidAndSeq($book_id, $chapter_sqp);
- $chapter_id = $chapter->id;
- $chapter_name = $chapter->name;
- $promotion_type = ($reciver_promotion_type == '内部') ? 'INTERNAL' : 'EXTERNAL';
- $domain = $this->getDomainByBid($book_id);
- $charge_type = $this->getBookChargeTypeByBid($book_id);
- $book_id = Hashids::encode($book_id);
- $redirect_url = "/reader?bid=$book_id&cid=$chapter_id";
- $book_id = Hashids::decode($book_id)[0];
- if (!$name || !$channel_type || !$promotion_type || !$book_id || !$book_name || !$chapter_id || !$chapter_name || !$import_company_name || !$fan_num) {
- return response()->error('PARAM_EMPTY');
- }
- $pre_send_date = $date;
- $sendOrder = SendOrderService::createFromDirectory(compact('name', 'channel_type', 'promotion_type', 'pre_send_date', 'import_company_name', 'fan_num', 'charge_type', 'cost', 'domain', 'book_id', 'qr_code_id', 'book_name', 'chapter_id', 'chapter_name', 'distribution_channel_id', 'redirect_url'));
- $promotion_url = 'https://site' . encodeDistributionChannelId($distribution_channel_id) . '.' . $this->getDomainByBid($book_id) . '/yun/' . $sendOrder->id;
- $send_order_id = $sendOrder->id;
- if ($agent_name && $agent_intro) {
- $created_at = date("Y-m-d H:i:s");
- $updated_at = date("Y-m-d H:i:s");
- $params = compact('send_order_id', 'agent_name', 'agent_intro', 'created_at', 'updated_at');
- DB::table('agent_info')->insert($params);
- }
- echo("\"" . $sendOrder->id . "\",");
- echo("\"" . mb_convert_encoding($name, "GBK", "UTF-8") . "\",");
- echo("\"" . $cost . "\",");
- echo("\"" . date('Y/m/d', strtotime($date)) . "\",");
- echo("\"" . $fan_num . "\",");
- echo("\"" . mb_convert_encoding($book_name, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($book_id, "GBK", "UTF-8") . "\",");
- echo("\"" . $chapter_id . "\",");
- echo("\"" . mb_convert_encoding($reciver_promotion_type, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($import_company_name, "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($agent_name ? $agent_name : "未知", "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($agent_intro ? $agent_intro : "未知", "GBK", "UTF-8") . "\",");
- echo("\"" . $promotion_url . "\"\r\n");
- }
- $currentIndex++;
- }
- }
- exit();
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 生成一个页面推广的派单
- * @api {POST} sendOrder/createFromPage 生成一个页面推广的派单
- * @apiGroup sendOrder
- * @apiName createFromPage
- * @apiParam{Number} cost 成本.
- * @apiParam{String} name 派单渠道名称.
- * @apiParam{String} promotion_type 推广类型[INTERVAL、EXTERVAL]. 内部、外部
- * @apiParam{String} qr_code_id 二维码id.
- * @apiParam{String} channel_type 派单渠道类型.(允许值: AUTHENTICATED, UNAUTHENTICATED)
- * @apiParam{String} page_id 页面ID
- * @apiParam{String} [promotion_point] 派单源 微信(默认)or浏览器(微信:1,浏览器:2)
- * @apiSuccess {Number} id 派单id
- * @apiSuccess {String} promotion_url 推广链接
- * @apiSuccess {String} name 派单名称
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data":{"id":5,"promotion_url":"http:\/\/www . xs . com\/promotion\/index\/123456","name":"派单名称"}
- * }
- */
- function createFromPage(Request $request)
- {
- $name = $request->has('name') ? $request->input('name') : '';
- $cost = $request->has('cost') ? $request->input('cost') : 0;
- $promotion_type = $request->has('promotion_type') ? $request->input('promotion_type') : '';
- $page_id = $request->has('page_id') ? $request->input('page_id') : '';
- $qr_code_id = $request->has('qr_code_id') ? $request->input('qr_code_id') : '';
- $channel_type = $request->has('channel_type') ? $request->input('channel_type') : '';
- $page = PromotionService::getById($page_id);
- if (!$name || !$channel_type || !$page_id || !$page) return response()->error('PARAM_EMPTY');
- if (empty($qr_code_id)) {
- $qr_code_id = 0;
- }
- $promotion_point = $request->has('promotion_point') ? $request->input('promotion_point') : 1;
- if (in_array($promotion_point, [1, 2])) {
- $promotion_point = 1;
- }
- $entrance = $page->title;
- $redirect_url = $page->link;
- $distribution_channel_id = $this->getChannelId();
- $domain = $this->getDomainByBid();
- $sendOrder = SendOrderService::createFromPage(compact('name', 'channel_type', 'promotion_type', 'cost', 'qr_code_id', 'domain', 'page_id', 'entrance', 'distribution_channel_id', 'redirect_url', 'promotion_point'));
- // $promotion_url = '/yun/' . $sendOrder->id;
- if ($promotion_point == 2) {
- $promotion_url = 'https://bsite' . encodeDistributionChannelId($distribution_channel_id) . '.leyuee.com/yun/' . $sendOrder->id;
- } else {
- $promotion_url = 'https://site' . encodeDistributionChannelId($distribution_channel_id) . '.leyuee.com/yun/' . $sendOrder->id;
- }
- //$promotion_url = 'https://'.$site . encodeDistributionChannelId($distribution_channel_id) . '.' . $this->getDomainByBid('') . '/yun/' . $sendOrder->id;
- return response()->success(['id' => $sendOrder->id, 'promotion_url' => $promotion_url, 'name' => $name]);
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 更新派单
- * @api {POST} sendOrder/updateSendOrderInfo 更新派单
- * @apiGroup sendOrder
- * @apiName updateSendOrderInfo
- * @apiParam {Number} id 派单id.
- * @apiParam {String} name 派单名称
- * @apiParam {Number} cost 派单成本
- * @apiParam {String} channel_type 派单渠道类型.(允许值: AUTHENTICATED, UNAUTHENTICATED)
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data":[]
- * }
- */
- function updateSendOrderInfo(Request $request)
- {
- $distribution_channel_id = $this->getChannelId();
- $id = $request->has('id') ? $request->input('id') : '';
- $name = $request->has('name') ? $request->input('name') : '';
- $cost = $request->has('cost') ? $request->input('cost') : '';
- $channel_type = $request->has('channel_type') ? $request->input('channel_type') : '';
- $promotion_type = $request->has('promotion_type') ? $request->input('promotion_type') : '';
- $subscribe_chapter_seq = $request->input('subscribe_chapter_seq', '');
- if (empty($name) && empty($channel_type) && empty($cost) && empty($promotion_type)) {
- return response()->error("PARAM_EMPTY");
- }
- $subscribe_chapter = [];
- if ($subscribe_chapter_seq) {
- $send_orders = SendOrderService::getById($id);
- $bid = $send_orders->book_id;
- $chapter_info = ChapterService::getChapterInfoByBidAndSeq($bid, $subscribe_chapter_seq);
- if (!$chapter_info) {
- return response()->error('PARAM_ERROR');
- }
- $subscribe_chapter_id = $chapter_info->id;
- $subscribe_chapter['subscribe_chapter_id'] = $subscribe_chapter_id;
- $subscribe_chapter['subscribe_chapter_seq'] = $subscribe_chapter_seq;
- $subscribe_chapter['subscribe_chapter_name'] = $chapter_info->name;
- }
- $pre_send_date = null;
- $send_order_export_special_channel = env('SEND_ORDER_EXPORT_SPECIAL_CHANNEL');
- $isExistSpecialChannel = in_array($distribution_channel_id, explode(',', $send_order_export_special_channel));
- if ($isExistSpecialChannel && $name && strpos($name, "-")) {
- $strs = explode('-', $name);
- if (count($strs) == 4) {
- $date = $this->getFormatDate($strs[2]);
- $date = date('Y-m-d', strtotime($date));
- $pre_send_date = $date;
- }
- }
- $data = SendOrderService::updateSendOrderInfo($id, $distribution_channel_id, $name, $pre_send_date, $channel_type, $cost, $promotion_type, $subscribe_chapter);
- if ($data) {
- return response()->success();
- } else {
- return response()->error("HANDLE_FAILED");
- }
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 删除派单
- * @api {POST} sendOrder/removeSendOrder 删除派单
- * @apiGroup sendOrder
- * @apiName removeSendOrder
- * @apiParam {Number} id 派单id.
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data":[]
- * }
- */
- function removeSendOrder(Request $request)
- {
- $distribution_channel_id = $this->getChannelId();
- $id = $request->has('id') ? $request->input('id') : '';
- $data = SendOrderService::removeSendOrder($id, $distribution_channel_id);
- if ($data) {
- return response()->success();
- } else {
- return response()->error("HANDLE_FAILED");
- }
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 设置成本
- * @api {POST} sendOrder/setCost 设置成本
- * @apiGroup sendOrder
- * @apiName setCost
- * @apiParam{Number}id 派单id.
- * @apiParam{Number}cost 成本.
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data":[]
- * }
- */
- function setCost(Request $request)
- {
- $distribution_channel_id = $this->getChannelId();
- $id = $request->has('id') ? $request->input('id') : '';
- $cost = $request->has('cost') ? $request->input('cost') : '';
- if (empty($id) || empty($cost)) {
- return response()->error("PARAM_EMPTY");
- }
- if (!is_numeric($cost)) {
- return response()->error("PARAM_ERROR");
- }
- $data = SendOrderService::setSendOrderCost($id, $distribution_channel_id, $cost);
- if ($data) {
- return response()->success(compact('cost'));
- } else {
- return response()->error("HANDLE_FAILED");
- }
- }
- /**
- * 匹配原文链接
- * @param Request $request
- */
- static function checkOriginUrl(Request $request)
- {
- if (!$request->hasFile('orginUrlFile')) {
- return response()->error('PARAM_EMPTY');
- }
- $file_name = date('YmdHis') . '.csv';
- $file = $request->file('orginUrlFile');
- if (null != $file) {
- $path = $request->orginUrlFile->storeAs('orginUrl', $file_name);
- $path = storage_path('app/' . $path);
- header("Content-type:application/vnd.ms-excel");
- header("Content-Disposition:attachment;filename=" . "原文链接" . date("YmdHis") . ".csv");
- echo mb_convert_encoding("\"公众号\",\"正确原文链接\",\"预览图文链接\",\"链接中解析到的url\",\"是否匹配\"\r\n", 'GBK', 'UTF-8');
- $file = fopen($path, "r");
- //遍历读取每一行数据
- $currentIndex = 0;
- while ($data = fgetcsv($file)) {
- \Log::info('data---1:' . json_encode($data));
- if (!$data[0] || !$data[1] || !$data[2]) continue;
- if ($currentIndex > 0) {
- \Log::info('data---2:' . $data[2]);
- $data[2] = str_replace('https', 'http', $data[2]);
- $data[2] = str_replace('http', 'https', $data[2]);
- $content = ChannelService::getContentByUrl($data[2]);
- \Log::info($content);
- $searchUrl = '';
- $findStrEnd = ';';
- $findStrBegin = 'msg_source_url =';
- //解析页面中的msg_source_url的内容
- $startIndex = strpos($content, $findStrBegin);
- if ($startIndex > 0) {
- \Log::info('开始进入了');
- $endIndex = strpos($content, $findStrEnd, $startIndex);
- if ($endIndex > $startIndex) {
- $startIndex = $startIndex + strlen($findStrBegin) + 2;
- $searchUrl = substr($content, $startIndex, $endIndex - $startIndex - 1);
- }
- //判断解析到的msg_source_url是否加密
- \Log::info($searchUrl);
- $url_items = parse_url($searchUrl);
- \Log::info($url_items);
- $distribution_channel_id = str_replace('site', '', explode('.', $url_items['host'])[0]);
- if (!is_numeric($distribution_channel_id)) {
- $deal_distribution_channel_id = decodeDistributionChannelId($distribution_channel_id);
- //需要解密
- $searchUrl = str_replace('site' . $distribution_channel_id, 'site' . $deal_distribution_channel_id, $searchUrl);
- }
- }
- //判断上传的url是否加密
- $deal_url = $data[1];
- $url_items = parse_url($deal_url);
- $distribution_channel_id = str_replace('site', '', explode('.', $url_items['host'])[0]);
- //需要解密
- if (!is_numeric($distribution_channel_id)) {
- $deal_distribution_channel_id = decodeDistributionChannelId($distribution_channel_id);
- $deal_url = str_replace('site' . $distribution_channel_id, 'site' . $deal_distribution_channel_id, $deal_url);
- }
- $isMatch = ($searchUrl == $deal_url) ? '匹配' : '不匹配';
- $data[0] = mb_convert_encoding(trim($data[0]), "UTF-8", "GBK");
- echo("\"" . mb_convert_encoding($data[0], "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($data[1], "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($data[2], "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($searchUrl ? $searchUrl : '未找到', "GBK", "UTF-8") . "\",");
- echo("\"" . mb_convert_encoding($isMatch, "GBK", "UTF-8") . "\"\r\n");
- }
- $currentIndex++;
- }
- }
- exit();
- }
- /**
- * 加密、解密原文链接
- * @param Request $request
- */
- function decryptOrEncrptOriginUrl(Request $request)
- {
- $originUrl = $request->has('origin_url') ? $request->input('origin_url') : '';
- if (empty($originUrl)) {
- return response()->error("PARAM_EMPTY");
- }
- $url_items = parse_url($originUrl);
- $distribution_channel_id = str_replace('site', '', explode('.', $url_items['host'])[0]);
- //需要加密
- if (is_numeric($distribution_channel_id)) {
- $deal_distribution_channel_id = encodeDistributionChannelId($distribution_channel_id);
- //需要解密
- } else {
- $deal_distribution_channel_id = decodeDistributionChannelId($distribution_channel_id);
- }
- $originUrl = str_replace('site' . $distribution_channel_id, 'site' . $deal_distribution_channel_id, $originUrl);
- return response()->success(['originUrl' => $originUrl]);
- }
- }
|