123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- <?php
- /**
- * Created by PhpStorm.
- * User: hp
- * Date: 2018/1/29
- * Time: 19:45
- */
- namespace App\Http\Controllers\Manage\Activity;
- use App\Http\Controllers\Controller;
- use App\Http\Controllers\Manage\Activity\Transformers\ActivityChargeInfoTransformer;
- use App\Http\Controllers\Manage\Activity\Transformers\ActivityTransformer;
- use App\Modules\Activity\Services\ActivityService;
- use App\Modules\Trade\Services\OrderService;
- use Illuminate\Http\Request;
- use OSS\Core\OssException;
- use OSS\OssClient;
- use App\Modules\Product\Services\ProductService;
- use Redis;
- use DB;
- use Storage;
- /**
- * 活动
- * Class ActivityController
- * @package App\Http\Controllers\Manage\Activity
- */
- class ActivityController extends Controller
- {
- /**
- * @apiDefine Activity 活动模块
- */
- /**
- * @apiVersion 1.0.0
- * @api {GET} activity/getActivities 获取活动信息
- * @apiGroup Activity
- * @apiName getActivities
- * @apiParam {Number} [activity_id] 活动ID
- * @apiParam {Number} [distribution_channel_id] 渠道ID
- * @apiParam {String} [start_time] 开始时间
- * @apiParam {String} [end_time] 结束时间
- * @apiSuccess {Number} id 活动ID.
- * @apiSuccess {String} name 活动名称
- * @apiSuccess {String} activity_page 活动页面地址
- * @apiSuccess {String} created_at 创建时间
- * @apiSuccess {String} start_time 开始时间
- * @apiSuccess {String} end_time 结束时间
- * @apiSuccess {Number} price 活动单价
- * @apiSuccess {Number} totalOrderCount 总订单数
- * @apiSuccess {Number} successOrderCount 成功订单数
- * @apiSuccess {Number} totalChargeAmount 活动的总充值额
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data": [
- * {
- * "id": 2,
- * "name": "活动1222",
- * "activity_page": "http://www.baidu.com",
- * "created_at": "2017-12-01 10:20:04",
- * "start_time": "2017-12-01 10:20:04",
- * "end_time": "2017-12-01 10:20:04",
- * "price": 30,
- * "totalChargeAmount": 1000,
- * "totalOrderCount": 50,
- * "successOrderCount": 50
- * }
- * ]
- * }
- */
- function getActivities(Request $request)
- {
- $params = [];
- $request->has('end_time') && $request->input('end_time') && $params['end_time'] = trim($request->input('end_time'));
- $request->has('start_time') && $request->input('start_time') && $params['begin_time'] = $request->input('start_time');
- $request->has('activity_id') && $request->input('activity_id') && $params['activity_id'] = $request->input('activity_id');
- $params['distribution_channel_id'] = [0];
- $activities = ActivityService::search($params);
- $distribution_channel_id = 0;
- foreach ($activities as $item) {
- $activity_id = $item->id;
- if ($distribution_channel_id) {
- $item->totalChargeAmount = OrderService::getAmount(['activity_id' => $activity_id, 'distribution_channel_id' => $distribution_channel_id]);
- $item->totalOrderCount = OrderService::getActivityOrderNum(['activity_id' => $activity_id, 'distribution_channel_id' => $distribution_channel_id]);
- $item->successOrderCount = OrderService::getActivityOrderNum(['activity_id' => $activity_id, 'status' => 'PAID', 'distribution_channel_id' => $distribution_channel_id]);
- } else {
- $item->totalChargeAmount = OrderService::getAmount(['activity_id' => $activity_id,'begin_time'=>$item->start_time,'end_time'=>$item->end_time]);
- $item->totalOrderCount = OrderService::getActivityOrderNum(['activity_id' => $activity_id,'begin_time'=>$item->start_time,'end_time'=>$item->end_time]);
- $item->successOrderCount = OrderService::getActivityOrderNum(['activity_id' => $activity_id, 'status' => 'PAID','begin_time'=>$item->start_time,'end_time'=>$item->end_time]);
- }
- }
- return response()->pagination(new ActivityTransformer(), $activities);
- }
- /**
- * @apiVersion 1.0.0
- * @api {GET} activity/delActivity 删除活动
- * @apiGroup Activity
- * @apiName delActivity
- * @apiParam {Number} activity_id 活动ID
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data": [
- * ]
- * }
- */
- function delActivity(Request $request){
- $activity_id = $request->has('activity_id') ? $request->input('activity_id') : '';
- if (empty($activity_id)) {
- return response()->error("PARAM_EMPTY");
- }
- //$activity = ActivityService::getById($activity_id);
- //if($activity)
- DB::table('activity')->where('id',$activity_id)->update(['distribution_channel_id'=>14,'updated_at'=>date('Y-m-d H:i:s')]);
- return response()->success();
- }
- /**
- * @apiVersion 1.0.0
- * @api {GET} activity/getActivityRechargeInfo 获取活动的充值明细
- * @apiGroup Activity
- * @apiName getActivityRechargeInfo
- * @apiParam {Number} [activity_id] 活动ID
- * @apiSuccess {Number} uid 用户id.
- * @apiSuccess {Number} price 充值金额.
- * @apiSuccess {String} trade_no 平台交易ID.
- * @apiSuccess {String} pay_end_at 支付完成时间.
- * @apiSuccess {String} activity_id 活动ID
- * @apiSuccess {Number} send_order_id 派单id
- * @apiSuccess {String} send_order_name 派单名称
- * @apiSuccess {String} created_at 创建时间
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data": [
- * {
- * "uid": 1,
- * "price": "1.00",
- * "trade_no": "201711301125401585459852216605",
- * "pay_end_at": "2017-12-01 10:20:04",
- * "activity_id": 1,
- * "send_order_id": 0,
- * "send_order_name": "",
- * "created_at": 1512094804,
- * }
- * ]
- * }
- */
- function getActivityRechargeInfo(Request $request)
- {
- $activity_id = $request->has('activity_id') ? $request->input('activity_id') : '';
- if (empty($activity_id)) {
- return response()->error("PARAM_EMPTY");
- }
- if (!is_numeric($activity_id)) {
- return response()->error("PARAM_ERROR");
- }
- $activitiesRechargeInfo = ActivityService::getActivityRechargeInfo(['activity_id' => $activity_id, 'status' => 'PAID']);
- return response()->pagination(new ActivityChargeInfoTransformer(), $activitiesRechargeInfo);
- }
- /**
- * @apiVersion 1.0.0
- * @api {GET} activity/ChannelActivityStats 获取明细
- * @apiGroup Activity
- * @apiName ChannelActivityStats
- * @apiParam {Number} activity_id 活动ID
- * @apiSuccess {Number} sum 充值金额.
- * @apiSuccess {Number} site_id site_id.
- * @apiSuccess {String} nickname 商户名称.
- * @apiSuccess {String} allorder 订单比数.
- * @apiSuccess {String} success 成功顶顶单数
- * @apiSuccess {Number} rate 成功订单率
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data": [
- * {
- * "uid": 1,
- * "price": "1.00",
- * "trade_no": "201711301125401585459852216605",
- * "pay_end_at": "2017-12-01 10:20:04",
- * "activity_id": 1,
- * "send_order_id": 0,
- * "send_order_name": "",
- * "created_at": 1512094804,
- * }
- * ]
- * }
- */
- function ChannelActivityStats(Request $request){
- $activity_id = $request->has('activity_id') ? $request->input('activity_id') : '';
- if (empty($activity_id)) {
- return response()->error("PARAM_EMPTY");
- }
- $activity = ActivityService::getById($activity_id);
- $sql_fromat = "SELECT a.*,distribution_channels.nickname from(
- SELECT a.sum,a.success,b.allorder,b.distribution_channel_id
- from (
- SELECT distribution_channel_id,SUM(price) as sum, COUNT(*) as success
- FROM orders WHERE created_at BETWEEN '%s' and '%s' and activity_id = %s and `status` = 'PAID' GROUP BY distribution_channel_id
- ) a
- RIGHT join (
- SELECT distribution_channel_id, COUNT(*) as allorder
- FROM orders WHERE created_at BETWEEN '%s' and '%s' and activity_id = %s GROUP BY distribution_channel_id
- ) b on a.distribution_channel_id =b.distribution_channel_id
- ) a join distribution_channels on a.distribution_channel_id=distribution_channels.id";
- $sql = sprintf($sql_fromat,$activity->start_time,$activity->end_time,$activity->id,$activity->start_time,$activity->end_time,$activity->id);
- $res = DB::select($sql);
- foreach ($res as &$v){
- $v->rate = '-';
- if(isset($v->success) && !empty($v->success) && isset($v->allorder) && !empty($v->allorder)){
- $v->rate = sprintf("%.2f", ($v->success/$v->allorder)*100).'%';
- }
- }
- return response()->success($res);
- }
- /**
- * @apiVersion 1.0.0
- * @api {POST} activity/createdActivity 创捷活动
- * @apiGroup Activity
- * @apiName createdActivity
- * @apiParam {String} name 活动名称
- * @apiParam {String} start_time 开始时间
- * @apiParam {String} end_time 结束时间
- * @apiParam {String} price 单价
- * @apiParam {String} page_bd_img 活动页面背景
- * @apiParam {String} page_btn_pre_img 活动未开始按钮
- * @apiParam {String} page_btn_doing_img 活动开始按钮
- * @apiParam {String} page_btn_end_img 活动结束按钮
- * @apiParam {String} template_name 模板名称
- * @apiParam {String} template_content 模板内容
- * @apiParam {String} common_template_id 模板id
- * @apiParam {String} customer_img 客服消息图片
- * @apiParam {String} customer_title 客服消息标题
- * @apiParam {String} wap_bottom_img 章节阅读页底部图片
- * @apiParam {String} sign_call_back_text 签到回调推广标题
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data": {}
- * }
- */
- public function createdActivity(Request $request)
- {
- $token = str_random(32);
- $param = [];
- $param['name'] = $request->input('name');
- $param['start_time'] = $request->input('start_time');
- $param['end_time'] = $request->input('end_time');
- $param['price'] = $request->input('price');
- $param['page_bd_img'] = $request->input('page_bd_img');
- $param['page_btn_pre_img'] = $request->input('page_btn_pre_img');
- $param['page_btn_doing_img'] = $request->input('page_btn_doing_img');
- $param['page_btn_end_img'] = $request->input('page_btn_end_img');
- $check = checkParam($param, ['name', 'start_time', 'end_time', 'price', 'page_bd_img', 'page_btn_pre_img', 'page_btn_doing_img', 'page_btn_end_img']);
- if ($check) {
- return response()->error("PARAM_EMPTY", ['lack' => $check]);
- }
- $reward = $request->input('reward');
- if ($reward) {
- $reward *= 100;
- }
- $product = ProductService::addProduct([
- 'price' => (int)$param['price'],
- 'type' => 'TICKET_RECHARGE',
- 'given' => $reward,
- 'is_default' => 0,
- 'is_enabled' => 0,
- ]);
- $activity_settng_key = 'activity:setting';
- $template_name = $request->input('template_name');
- $template_content = $request->has('template_content') ? $request->input('template_content') : '';
- $common_template_id = $request->has('common_template_id') ? $request->input('common_template_id') : '';
- $customer_img = $request->input('customer_img');
- $customer_title = $request->input('customer_title');
- $wap_bottom_img = $request->input('wap_bottom_img');
- $sign_call_back_text = $request->input('sign_call_back_text');
- Redis::del($activity_settng_key);
- $customer_msg = json_encode([
- 'pic' => $customer_img,
- 'title' => $customer_title
- ]);
- $page_img['page_bd_img'] = $param['page_bd_img'];
- $page_img['page_btn_pre_img'] = $param['page_btn_pre_img'];
- $page_img['page_btn_doing_img'] = $param['page_btn_doing_img'];
- $page_img['page_btn_end_img'] = $param['page_btn_end_img'];
- $activity = ActivityService::createActivity([
- 'name' => $param['name'],
- 'start_time' => $param['start_time'],
- 'end_time' => $param['end_time'],
- 'activity_page' => '/sale?token=' . $token,
- 'product_id' => $product->id,
- 'token' => $token,
- 'customer_msg' => $customer_msg,
- 'setting' => json_encode($page_img)
- ]);
- if ($template_content && $common_template_id) {
- $wechat_public_templates = DB::table('wechat_public_templates')->select('id')->where('common_template_id',$common_template_id)->first();
- if($wechat_public_templates){
- $id = DB::table('default_template_themes')->insertGetId([
- 'title' => $template_name,
- 'activity_id' => $activity->id,
- 'template_id' => $wechat_public_templates->id,
- 'template_content' => '['.$template_content.']',
- 'created_at' => date('Y-m-d H:i:s'),
- 'updated_at' => date('Y-m-d H:i:s'),
- ]);
- DB::table('activity')->where('id',$activity->id)->update([
- 'default_template_id' => $id
- ]);
- }
- }
- $setting = ['activity_id' => $activity->id, 'wap_bottom_img' => $wap_bottom_img, 'sign_call_back_text' => $sign_call_back_text,'activity_title'=>''];
- Redis::set($activity_settng_key, json_encode($setting));
- return response()->success();
- }
- public function uploadImg(Request $request)
- {
- if (!$request->hasFile('photo')) {
- return response()->error('PARAM_EMPTY');
- }
- $file = $request->file('photo');
- $extension = $file->extension();
- $file_name = date('YmdHis') . '.' . $extension;
- $upload_res = $this->ossObject()->uploadFile(env('OSS_BUCKET','zhuishuyun'), 'book/cover/' . $file_name, $file->path());
- $data = ['cover' => $upload_res['oss-request-url']];
- return response()->success($data);
- }
- private function ossObject()
- {
- $accessKeyId = env('OSS_ACCESS_ID');
- $accessKeySecret = env('OSS_ACCESS_KEY');
- $endpoint = env('OSS_END_POINT');
- $ossClient = null;
- try {
- $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
- } catch (OssException $e) {
- return null;
- }
- return $ossClient;
- }
- /**
- * 活动导出
- * @param Request $request
- * @return $this|\Symfony\Component\HttpFoundation\BinaryFileResponse
- */
- public function exportActivity(Request $request){
- set_time_limit(0);
- $id = $request->input('activity_id');
- if (!$id) {
- return response()->error("PARAM_EMPTY");
- }
- $info = ActivityService::ActivityStatsI($id);
- $filename = 'Activit'.date('YmdHis').'.csv';
- Storage::append($filename,mb_convert_encoding("日期,site id,活动页面访问uv,按钮uv,生成订单数,成功支付订单数,首充用户数,点击阅读页面文字链uv,阅读页面文字链订单数,阅读页面文字链成功订单数,阅读页面文字链首充用户数,签到回调文字链uv,签到回调文字链生成订单数,签到回调文字链成功成功订单数,签到回调文字链首充用户数",'gbk'));
- $str = '';
- foreach ($info as $val){
- $str .= "{$val['day']},{$val['siteid']},{$val['uv']},{$val['button_uv']},{$val['order_num']},{$val['success_order_num']},{$val['first_charge_num']},{$val['reader_uv']},{$val['reader_order']},{$val['reader_success_order']},{$val['reader_first_charge']},{$val['signcallback_uv']},{$val['signcallback_order']},{$val['signcallback_success_order']},{$val['signcallback_first_charge']}\r\n";
- }
- Storage::append($filename,mb_convert_encoding($str,'gbk'));
- return response()->download(storage_path('app/'.$filename))->deleteFileAfterSend(true);
- }
- /**
- * 包年活动导出
- * @param Request $request
- * @return $this|\Symfony\Component\HttpFoundation\BinaryFileResponse
- */
- public function yearActivityExport(Request $request){
- set_time_limit(0);
- $id = $request->input('activity_id');
- if (!$id) {
- return response()->error("PARAM_EMPTY");
- }
- $info = ActivityService::yearActivityStats($id);
- $filename = 'Activit'.date('YmdHis').'.csv';
- Storage::append($filename,mb_convert_encoding("site id,日期,充值档位,订单数,成功订单数,UV,首充人数,充值总额",'gbk'));
- $str = '';
- foreach ($info as $val){
- $str .= "{$val['siteid']},{$val['day']},{$val['price']},{$val['order_num']},{$val['success']},{$val['uv']},{$val['first_charge']},{$val['sums']}\r\n";
- }
- Storage::append($filename,mb_convert_encoding($str,'gbk'));
- return response()->download(storage_path('app/'.$filename))->deleteFileAfterSend(true);
- }
- }
|