123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549 |
- <?php
- /**
- * Created by Sublime.
- * User: Williamslife Wang
- * Date: 17/10/18
- * Time: 上午11:20
- */
- namespace App\Http\Controllers\Admin;
- use App\Http\Controllers\Controller;
- use App\Admin;
- use Illuminate\Http\Request;
- use App\Templates;
- use App\TemplatesSalers;
- use App\TemplatesSource;
- use App\TemplatesSourceSalers;
- use App\AdminRole;
- use App\TemplatesLog;
- use App\TemplatesBackimg;
- use App\CustDetail;
- use App\Order;
- use App\Services\OssServices as oss;
- use Illuminate\Support\Facades\DB;
- class TemplateController extends Controller
- {
- /**
- * @return \Illuminate\View\View
- */
- public function index(Request $request)
- {
- $page = (int)$request->input('page');
- $pageSize = 20;
- if($page<=0){
- $page = 1;
- }
- $offset = ($page-1) * $pageSize;
- $count = Templates::where('is_del',0)->count();
- if ($count > 1) {
- // 总页数
- $pages = ceil($count/$pageSize);
- }else{
- // 总页数
- $pages = 1;
- }
- $result = Templates::where('is_del',0)->orderBy('id', 'desc')->offset($offset)->limit($pageSize)->get();
- $result = json_decode(json_encode($result),true);
- foreach($result as $k=>&$v){
- # 获取销售
- $salers = TemplatesSalers::select('templates_salers.*', 'admin.realname as admin_name')->leftJoin('admin', 'admin.id', '=', 'templates_salers.admin_id')->where('templates_salers.t_id', $v['id'])->where('templates_salers.is_del', 0)->get();
- $v['salers'] = $salers;
- $v['salers_k'] = count($salers);
- }
- return view('template/index', ['result' =>$result,
- 'page' =>$page,
- 'count' =>$count,
- 'pages' =>$pages,
- ]);
- }
- /**
- * @return \Illuminate\View\View
- */
- public function create()
- {
- return view('template/create');
- }
- /**
- * @param Request $request
- * @return \Illuminate\Http\RedirectResponse
- */
- public function store(Request $request)
- {
- $this->validate($request, [
- 'url' => 'required|unique:templates',
- ], [
- 'url.required' => '模板链接不能为空',
- 'url.unique' => '该模板链接已存在',
-
- ]);
- $template = new Templates();
- $template->url = trim($request->input('url'));
- $template->note = trim($request->input('note'));
-
- //图片上传 阿里云oss
- if ($request->hasFile('img') && $request->file('img')->isValid()) {
- $file = $request->file('img');
- $ossClient=new oss();
- // 上传阿里云
- $file = $ossClient->upload($file->getClientOriginalExtension(), $file->getRealPath(), 'upload/seafoodPic'.date("Y-m-d",time()).'/'.date('His'));
- $img=$file['oss-request-url'];
- $template->img=str_replace("kx-youhuiquan.oss-cn-beijing.aliyuncs.com","imgs.726p.com",$img);
- }
- $template->save();
- return redirect('/admin/template/index')->with('info', '添加模板成功');
- }
- /**
- * @param $id
- * @return \Illuminate\View\View
- */
- public function edit($id)
- {
- $template = Templates::findOrFail($id);
- return view('template/edit', ['template' => $template, 'id'=>$id]);
- }
- /**
- * @param Request $request
- * @return \Illuminate\Http\RedirectResponse
- */
- public function update(Request $request)
- {
- $id = (int)$request->input('id');
- $this->validate($request, [
- 'url' => 'required|unique:templates,url,'.$id.',id',
- ], [
- 'url.required' => '模板链接不能为空',
- 'url.unique' => '该模板链接已存在',
-
- ]);
- $template = Templates::findOrFail($id);
- $template->url = trim($request->input('url'));
- $template->note = trim($request->input('note'));
-
- //图片上传 阿里云oss
- if ($request->hasFile('img') && $request->file('img')->isValid()) {
- $file = $request->file('img');
- $ossClient=new oss();
- // 上传阿里云
- $file = $ossClient->upload($file->getClientOriginalExtension(), $file->getRealPath(), 'upload/seafoodPic'.date("Y-m-d",time()).'/'.date('His'));
- $img=$file['oss-request-url'];
- $template->img=str_replace("kx-youhuiquan.oss-cn-beijing.aliyuncs.com","imgs.726p.com",$img);
- }
- $template->save();
- return redirect('/admin/template/index')->with('info', '修改模板成功');
- }
- /**
- * @param $id
- * @return \Illuminate\Http\RedirectResponse
- */
- public function assignSalers(Request $request)
- {
- $s_id = (int)$request->input('id');
- $salers = $request->input('salers');
- $assign_type = (int)$request->input('assign_type');
- if( empty($salers) ){
- exit('<script>parent.layer.msg("分配失败,未选择销售!",{icon:2,time:2000}); var index=parent.layer.getFrameIndex(window.name); parent.layer.close(index);</script>');
- }
- if($assign_type == 1){
- //平均分配
- $count = count($salers);
- $weight_avg = round(1000 / $count) / 10;
- }else{
- $weights = array();
- $total = 0;
- foreach( $salers as $k=>$id ){
- $weight_id = 'weight'.$id;
- $weights[$k] = trim( $request->input($weight_id) );
- if(!$weights[$k]){
- $weights[$k] = 0;
- }
- $total += $weights[$k];
- }
- if($total>100){
- exit('<script>parent.layer.msg("分配权重之和不能超过100!",{icon:2,time:2000}); var index=parent.layer.getFrameIndex(window.name); parent.layer.close(index);</script>');
- }
- }
- //如果已经有 ,删除未选中
- TemplatesSourceSalers::where('s_id', $s_id)->whereNotIn('admin_id',$salers)->update(['is_del'=>1]);
- foreach( $salers as $k=>$admin_id ){
- if($assign_type == 1){
- $weight = $weight_avg;
- }else{
- $weight = $weights[$k];
- }
- TemplatesSourceSalers::updateOrCreate( ['s_id'=>$s_id, 'admin_id'=>$admin_id], ['is_del'=>0, 'weight'=>$weight] );
- }
- exit('<script>parent.layer.msg("操作成功!",{icon:1,time:1000}); var index=parent.layer.getFrameIndex(window.name); parent.location.href="/admin/template/sourceindex";parent.layer.close(index);</script>');
- }
- /**
- * 获取分配销售
- * @return \Illuminate\View\View
- */
- public function getAssigns(Request $request){
- $id = $request->input('id');
- #销售筛选
- //$saler_ids = DB::table('admin_role')->where('role_name', '销售')->lists('user_id');
- $adminList = Admin::select('id', 'realname', 'username', 'team_id')->where('id','>', 1)->where(function ($query) {
- $query->whereNotNull('qrcode')->where('qrcode', '<>', '');
- })->get();
- $adminList = json_decode(json_encode($adminList), true);
- $assign_admin = TemplatesSourceSalers::where('s_id', $id)->where('is_del', 0)->lists('weight', 'admin_id');
- $team_info = DB::table('teams')->lists('name', 'id');
- foreach($adminList as &$admin){
- if( isset($assign_admin[$admin['id']]) ){
- $admin['weight'] = $assign_admin[$admin['id']];
- }else{
- $admin['weight'] = '';
- }
- if(isset($team_info[$admin['team_id']])){
- $admin['team_name'] = $team_info[$admin['team_id']];
- }else{
- $admin['team_name'] = '';
- }
- }
- return view('template/assign', [
- 'adminlist' =>$adminList,
- 'id' =>$id
- ]);
- }
- /**
- * @return \Illuminate\View\View
- */
- public function logindex(Request $request)
- {
- $page = (int)$request->input('page');
- $pageSize = 20;
- if($page<=0){
- $page = 1;
- }
- $offset = ($page-1) * $pageSize;
- $count = TemplatesLog::count();
- if ($count > 1) {
- // 总页数
- $pages = ceil($count/$pageSize);
- }else{
- // 总页数
- $pages = 1;
- }
- $result = TemplatesLog::orderBy('id', 'desc')->offset($offset)->limit($pageSize)->get();
- $result = json_decode(json_encode($result),true);
- foreach($result as $k=>&$v){
- # 获取销售名字
- $v['admin_name'] = Admin::where('id', $v['admin_id'])->pluck('realname');
- }
- return view('template/logindex', ['result' =>$result,
- 'page' =>$page,
- 'count' =>$count,
- 'pages' =>$pages,
- ]);
- }
- /**
- * 销售引流模板分配日志报表
- */
- public function templateLogReport(Request $request){
- $admin_id = (int)$request->input('admin_id');
- $team_id = (int)$request->input('team_id');
- $stime = $request->input('stime');
- $etime = $request->input('etime');
- //假如有团队筛选,检索销售队员
- $sale_ids = null;
- if($team_id>0){
- $sale_ids = DB::table('admin')->where('team_id', $team_id)->lists('id');
- }
- $page = (int)$request->input('page');
- $pageSize = 20;
- if($page<=0){
- $page = 1;
- }
- $offset = ($page-1) * $pageSize;
- $count = TemplatesLog::select(DB::raw('left(create_time,10) as day,admin_id'))->where(function($query) use($admin_id, $stime, $etime, $sale_ids){
- if($admin_id>0) $query->where('admin_id', $admin_id);
- if($stime) $query->where('create_time', '>=', $stime);
- if($etime) $query->where('create_time', '<=', $etime. ' 23:59:59');
- if($sale_ids !== null) $query->whereIn('admin_id', $sale_ids);
- })->groupBy('day')->groupBy('admin_id')->get();
- $count = count($count);
- if ($count > 1) {
- // 总页数
- $pages = ceil($count/$pageSize);
- }else{
- // 总页数
- $pages = 1;
- }
- $result = TemplatesLog::select(DB::raw('left(create_time,10) as day,admin_id,count(1) as tcount, count(if(type=1,true,null)) as pv_count'))->where(function($query) use($admin_id, $stime, $etime, $sale_ids){
- if($admin_id>0) $query->where('admin_id', $admin_id);
- if($stime) $query->where('create_time', '>=', $stime);
- if($etime) $query->where('create_time', '<=', $etime. ' 23:59:59');
- if($sale_ids !== null) $query->whereIn('admin_id', $sale_ids);
- })->groupBy('day')->groupBy('admin_id')->orderBy('day', 'desc')->offset($offset)->limit($pageSize)->get();
- $result = json_decode(json_encode($result), true);
- foreach($result as $k=>&$v){
- //获取销售当天加粉情况
- $custDetail = CustDetail::select('fan_add', 'new_reply', 'new_consult', 'old_consult', 'admin_name')->where('dtime', $v['day'])->where('admin_id', $v['admin_id'])->where('is_del', 0)->first();
- if(!empty($custDetail)){
- $v['fan_add'] = $custDetail->fan_add;
- $v['new_reply'] = $custDetail->new_reply;
- $v['old_consult'] = $custDetail->old_consult;
- $v['new_consult'] = $custDetail->new_consult;
- $v['admin_name'] = $custDetail->admin_name;
- }else{
- $v['fan_add'] = '';
- $v['new_reply'] = '';
- $v['old_consult'] = '';
- $v['new_consult'] = '';
- $v['admin_name'] = DB::table('admin')->where('id', $v['admin_id'])->pluck('realname');
- }
- $v['long_count'] = $v['tcount'] - $v['pv_count'];
- //点击率
- $v['click_rate'] = $v['pv_count']>0 && $v['long_count']>0 ? round( $v['long_count'] / $v['pv_count'], 4 ) * 100 . '%' : '';
- $v['change_rate'] = $v['long_count']>0 && $v['fan_add']>0 ? round( $v['fan_add'] / $v['long_count'], 4 ) * 100 . '%' : '';
- }
- $teamList = DB::table('teams')->select('id', 'name')->get();
- $teamList = json_decode(json_encode($teamList), true);
- $adminList = DB::table('admin')->select('id', 'realname', 'username')->where('id','>', 1)->get();
- $adminList = json_decode(json_encode($adminList), true);
- return view('template/templateLogReport', ['result'=>$result,
- 'page' =>$page,
- 'count' =>$count,
- 'pages' =>$pages,
- 'teamlist' =>$teamList,
- 'adminlist' =>$adminList,
- 'team_id' =>$team_id,
- 'admin_id' =>$admin_id,
- 'stime' =>$stime,
- 'etime' =>$etime,
- ]);
- }
- /**
- * 销售引流模板分配日志报表
- */
- public function templateLogReport_export(Request $request){
- $admin_id = (int)$request->input('admin_id');
- $team_id = (int)$request->input('team_id');
- $stime = $request->input('stime');
- $etime = $request->input('etime');
- //假如有团队筛选,检索销售队员
- $sale_ids = null;
- if($team_id>0){
- $sale_ids = DB::table('admin')->where('team_id', $team_id)->lists('id');
- }
- $result = TemplatesLog::select(DB::raw('left(create_time,10) as day,admin_id,count(1) as tcount, count(if(type=1,true,null)) as pv_count'))->where(function($query) use($admin_id, $stime, $etime, $sale_ids){
- if($admin_id>0) $query->where('admin_id', $admin_id);
- if($stime) $query->where('create_time', '>=', $stime);
- if($etime) $query->where('create_time', '<=', $etime. ' 23:59:59');
- if($sale_ids !== null) $query->whereIn('admin_id', $sale_ids);
- })->groupBy('day')->groupBy('admin_id')->orderBy('day', 'desc')->get();
- $result = json_decode(json_encode($result), true);
- foreach($result as $k=>&$v){
- //获取销售当天加粉情况
- $custDetail = CustDetail::select('fan_add', 'new_reply', 'new_consult', 'old_consult', 'admin_name')->where('dtime', $v['day'])->where('admin_id', $v['admin_id'])->where('is_del', 0)->first();
- if(!empty($custDetail)){
- $v['fan_add'] = $custDetail->fan_add;
- $v['new_reply'] = $custDetail->new_reply;
- $v['old_consult'] = $custDetail->old_consult;
- $v['new_consult'] = $custDetail->new_consult;
- $v['admin_name'] = $custDetail->admin_name;
- }else{
- $v['fan_add'] = '';
- $v['new_reply'] = '';
- $v['old_consult'] = '';
- $v['new_consult'] = '';
- $v['admin_name'] = DB::table('admin')->where('id', $v['admin_id'])->pluck('realname');
- }
- $v['long_count'] = $v['tcount'] - $v['pv_count'];
- //点击率
- $v['click_rate'] = $v['pv_count']>0 && $v['long_count']>0 ? round( $v['long_count'] / $v['pv_count'], 4 ) * 100 . '%' : '';
- $v['change_rate'] = $v['long_count']>0 && $v['fan_add']>0 ? round( $v['fan_add'] / $v['long_count'], 4 ) * 100 . '%' : '';
- }
- $indexKey = ['day','admin_name','pv_count','long_count','fan_add','click_rate','change_rate','new_reply','new_consult','old_consult'];
- $title = ['日期', '销售名', 'PV量', '长按次数', '加粉数', '点击率', '转化率', '新粉回复数', '新粉询价数', '老粉询价数'];
- $filename = 'xiaoshoudaofen_'.date('Y-m-d_H').'.xlsx';
- return Order::export_excel($result, $filename, $indexKey, $title);
- }
- /*
- * @return \Illuminate\View\View
- */
- public function sourceindex(Request $request)
- {
- $page = (int)$request->input('page');
- $pageSize = 20;
- if($page<=0){
- $page = 1;
- }
- $offset = ($page-1) * $pageSize;
- $count = TemplatesSource::where('is_del',0)->count();
- if ($count > 1) {
- // 总页数
- $pages = ceil($count/$pageSize);
- }else{
- // 总页数
- $pages = 1;
- }
- $result = TemplatesSource::where('is_del',0)->orderBy('id', 'desc')->offset($offset)->limit($pageSize)->get();
- $result = json_decode(json_encode($result),true);
- foreach($result as $k=>&$v){
- # 获取销售
- $salers = TemplatesSourceSalers::select('templates_source_salers.*', 'admin.realname as admin_name')->leftJoin('admin', 'admin.id', '=', 'templates_source_salers.admin_id')->where('templates_source_salers.s_id', $v['id'])->where('templates_source_salers.is_del', 0)->get();
- $v['salers'] = $salers;
- $v['salers_k'] = count($salers);
- # 获取模板图
- $v['img'] = Templates::where('id', $v['t_id'])->pluck('img');
- }
- return view('template/sourceindex', ['result' =>$result,
- 'page' =>$page,
- 'count' =>$count,
- 'pages' =>$pages,
- ]);
- }
- /**
- * @return \Illuminate\View\View
- */
- public function sourcecreate()
- {
- $templates = Templates::where('is_del', 0)->whereNotNull('url')->get();
- $back_imgs = TemplatesBackimg::where('is_del', 0)->whereNotNull('back_img')->lists('back_img');
- return view('template/sourcecreate', ['templates'=>$templates, 'back_imgs'=>$back_imgs]);
- }
- /**
- * @param Request $request
- * @return \Illuminate\Http\RedirectResponse
- */
- public function sourcestore(Request $request)
- {
- $this->validate($request, [
- 't_id' => 'required',
- ], [
- 't_id.required' => '模板不能为空',
-
- ]);
- $template = new TemplatesSource();
- $template->t_id = intval($request->input('t_id'));
- $template->note = trim($request->input('note'));
-
- //图片上传 阿里云oss
- if ($request->hasFile('img') && $request->file('img')->isValid()) {
- $file = $request->file('img');
- $ossClient=new oss();
- // 上传阿里云
- $file = $ossClient->upload($file->getClientOriginalExtension(), $file->getRealPath(), 'upload/seafoodPic'.date("Y-m-d",time()).'/'.date('His'));
- $img=$file['oss-request-url'];
- $template->back_img=str_replace("kx-youhuiquan.oss-cn-beijing.aliyuncs.com","imgs.726p.com",$img);
- }
- if($template->save()){
- //生成连接
- $template->url = $this->createSourceUrl($template->t_id, $template->id);
- $template->save();
- }
- return redirect('/admin/template/sourceindex')->with('info', '添加模板成功');
- }
- /**
- * @param $id
- * @return \Illuminate\View\View
- */
- public function sourceedit($id)
- {
- $templates = Templates::where('is_del', 0)->whereNotNull('url')->get();
- $template = TemplatesSource::findOrFail($id);
- return view('template/sourceedit', ['template' => $template, 'id'=>$id, 'templates' => $templates]);
- }
- /**
- * @param Request $request
- * @return \Illuminate\Http\RedirectResponse
- */
- public function sourceupdate(Request $request)
- {
- $id = (int)$request->input('id');
- $this->validate($request, [
- 't_id' => 'required',
- ], [
- 't_id.required' => '模板不能为空',
-
- ]);
- $template = TemplatesSource::findOrFail($id);
- $t_id = (int)$request->input('t_id');
- if( $template->t_id != $t_id ){
- //模板更改,生成新连接
- $template->t_id = $t_id;
- $template->url = $this->createSourceUrl($t_id, $template->id);
- }
- $template->note = trim($request->input('note'));
-
- //图片上传 阿里云oss
- if ($request->hasFile('img') && $request->file('img')->isValid()) {
- $file = $request->file('img');
- $ossClient=new oss();
- // 上传阿里云
- $file = $ossClient->upload($file->getClientOriginalExtension(), $file->getRealPath(), 'upload/seafoodPic'.date("Y-m-d",time()).'/'.date('His'));
- $img=$file['oss-request-url'];
- $template->back_img=str_replace("kx-youhuiquan.oss-cn-beijing.aliyuncs.com","imgs.726p.com",$img);
- }
- $template->save();
- return redirect('/admin/template/sourceindex')->with('info', '修改成功');
- }
- public function createSourceUrl($t_id, $id){
- $url = Templates::where('id', $t_id)->pluck('url');
- if($url){
- return $url . '?id='.$id;
- }
- return false;
- }
- }
-
|