暫無描述

TemplateController.php 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. <?php
  2. /**
  3. * Created by Sublime.
  4. * User: Williamslife Wang
  5. * Date: 17/10/18
  6. * Time: 上午11:20
  7. */
  8. namespace App\Http\Controllers\Admin;
  9. use App\Http\Controllers\Controller;
  10. use App\Admin;
  11. use Illuminate\Http\Request;
  12. use App\Templates;
  13. use App\TemplatesSalers;
  14. use App\AdminRole;
  15. use App\TemplatesLog;
  16. use App\CustDetail;
  17. use App\Services\OssServices as oss;
  18. use Illuminate\Support\Facades\DB;
  19. class TemplateController extends Controller
  20. {
  21. /**
  22. * @return \Illuminate\View\View
  23. */
  24. public function index(Request $request)
  25. {
  26. $page = (int)$request->input('page');
  27. $pageSize = 20;
  28. if($page<=0){
  29. $page = 1;
  30. }
  31. $offset = ($page-1) * $pageSize;
  32. $count = Templates::where('is_del',0)->count();
  33. if ($count > 1) {
  34. // 总页数
  35. $pages = ceil($count/$pageSize);
  36. }else{
  37. // 总页数
  38. $pages = 1;
  39. }
  40. $result = Templates::where('is_del',0)->orderBy('id', 'desc')->offset($offset)->limit($pageSize)->get();
  41. $result = json_decode(json_encode($result),true);
  42. foreach($result as $k=>&$v){
  43. # 获取销售
  44. $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();
  45. $v['salers'] = $salers;
  46. $v['salers_k'] = count($salers);
  47. }
  48. return view('template/index', ['result' =>$result,
  49. 'page' =>$page,
  50. 'count' =>$count,
  51. 'pages' =>$pages,
  52. ]);
  53. }
  54. /**
  55. * @return \Illuminate\View\View
  56. */
  57. public function create()
  58. {
  59. return view('template/create');
  60. }
  61. /**
  62. * @param Request $request
  63. * @return \Illuminate\Http\RedirectResponse
  64. */
  65. public function store(Request $request)
  66. {
  67. $this->validate($request, [
  68. 'url' => 'required|unique:templates',
  69. ], [
  70. 'url.required' => '模板链接不能为空',
  71. 'url.unique' => '该模板链接已存在',
  72. ]);
  73. $template = new Templates();
  74. $template->url = trim($request->input('url'));
  75. $template->note = trim($request->input('note'));
  76. //图片上传 阿里云oss
  77. if ($request->hasFile('img') && $request->file('img')->isValid()) {
  78. $file = $request->file('img');
  79. $ossClient=new oss();
  80. // 上传阿里云
  81. $file = $ossClient->upload($file->getClientOriginalExtension(), $file->getRealPath(), 'upload/seafoodPic'.date("Y-m-d",time()).'/'.date('His'));
  82. $img=$file['oss-request-url'];
  83. $template->img=str_replace("kx-youhuiquan.oss-cn-beijing.aliyuncs.com","imgs.726p.com",$img);
  84. }
  85. $template->save();
  86. return redirect('/admin/template/index')->with('info', '添加模板成功');
  87. }
  88. /**
  89. * @param $id
  90. * @return \Illuminate\View\View
  91. */
  92. public function edit($id)
  93. {
  94. $template = Templates::findOrFail($id);
  95. return view('template/edit', ['template' => $template, 'id'=>$id]);
  96. }
  97. /**
  98. * @param Request $request
  99. * @return \Illuminate\Http\RedirectResponse
  100. */
  101. public function update(Request $request)
  102. {
  103. $id = (int)$request->input('id');
  104. $this->validate($request, [
  105. 'url' => 'required|unique:templates,url,'.$id.',id',
  106. ], [
  107. 'url.required' => '模板链接不能为空',
  108. 'url.unique' => '该模板链接已存在',
  109. ]);
  110. $template = Templates::findOrFail($id);
  111. $template->url = trim($request->input('url'));
  112. $template->note = trim($request->input('note'));
  113. //图片上传 阿里云oss
  114. if ($request->hasFile('img') && $request->file('img')->isValid()) {
  115. $file = $request->file('img');
  116. $ossClient=new oss();
  117. // 上传阿里云
  118. $file = $ossClient->upload($file->getClientOriginalExtension(), $file->getRealPath(), 'upload/seafoodPic'.date("Y-m-d",time()).'/'.date('His'));
  119. $img=$file['oss-request-url'];
  120. $template->img=str_replace("kx-youhuiquan.oss-cn-beijing.aliyuncs.com","imgs.726p.com",$img);
  121. }
  122. $template->save();
  123. return redirect('/admin/template/index')->with('info', '修改模板成功');
  124. }
  125. /**
  126. * @param $id
  127. * @return \Illuminate\Http\RedirectResponse
  128. */
  129. public function assignSalers(Request $request)
  130. {
  131. $t_id = (int)$request->input('id');
  132. $salers = $request->input('salers');
  133. $assign_type = (int)$request->input('assign_type');
  134. if( empty($salers) ){
  135. exit('<script>parent.layer.msg("分配失败,未选择销售!",{icon:2,time:2000}); var index=parent.layer.getFrameIndex(window.name); parent.layer.close(index);</script>');
  136. }
  137. if($assign_type == 1){
  138. //平均分配
  139. $count = count($salers);
  140. $weight_avg = round(1000 / $count) / 10;
  141. }else{
  142. $weights = array();
  143. $total = 0;
  144. foreach( $salers as $k=>$id ){
  145. $weight_id = 'weight'.$id;
  146. $weights[$k] = trim( $request->input($weight_id) );
  147. if(!$weights[$k]){
  148. $weights[$k] = 0;
  149. }
  150. $total += $weights[$k];
  151. }
  152. if($total>100){
  153. exit('<script>parent.layer.msg("分配权重之和不能超过100!",{icon:2,time:2000}); var index=parent.layer.getFrameIndex(window.name); parent.layer.close(index);</script>');
  154. }
  155. }
  156. //如果已经有 ,删除未选中
  157. TemplatesSalers::where('t_id', $t_id)->whereNotIn('admin_id',$salers)->update(['is_del'=>1]);
  158. foreach( $salers as $k=>$admin_id ){
  159. if($assign_type == 1){
  160. $weight = $weight_avg;
  161. }else{
  162. $weight = $weights[$k];
  163. }
  164. TemplatesSalers::updateOrCreate( ['t_id'=>$t_id, 'admin_id'=>$admin_id], ['is_del'=>0, 'weight'=>$weight] );
  165. }
  166. exit('<script>parent.layer.msg("操作成功!",{icon:1,time:1000}); var index=parent.layer.getFrameIndex(window.name); parent.location.href="/admin/template/index";parent.layer.close(index);</script>');
  167. }
  168. /**
  169. * 获取分配销售
  170. * @return \Illuminate\View\View
  171. */
  172. public function getAssigns(Request $request){
  173. $id = $request->input('id');
  174. #销售筛选
  175. //$saler_ids = DB::table('admin_role')->where('role_name', '销售')->lists('user_id');
  176. $adminList = Admin::select('id', 'realname', 'username', 'team_id')->where('id','>', 1)->where(function ($query) {
  177. $query->whereNotNull('qrcode')->where('qrcode', '<>', '');
  178. })->get();
  179. $adminList = json_decode(json_encode($adminList), true);
  180. $assign_admin = TemplatesSalers::where('t_id', $id)->where('is_del', 0)->lists('weight', 'admin_id');
  181. $team_info = DB::table('teams')->lists('name', 'id');
  182. foreach($adminList as &$admin){
  183. if( isset($assign_admin[$admin['id']]) ){
  184. $admin['weight'] = $assign_admin[$admin['id']];
  185. }else{
  186. $admin['weight'] = '';
  187. }
  188. if(isset($team_info[$admin['team_id']])){
  189. $admin['team_name'] = $team_info[$admin['team_id']];
  190. }else{
  191. $admin['team_name'] = '';
  192. }
  193. }
  194. return view('template/assign', [
  195. 'adminlist' =>$adminList,
  196. 'id' =>$id
  197. ]);
  198. }
  199. /**
  200. * @return \Illuminate\View\View
  201. */
  202. public function logindex(Request $request)
  203. {
  204. $page = (int)$request->input('page');
  205. $pageSize = 20;
  206. if($page<=0){
  207. $page = 1;
  208. }
  209. $offset = ($page-1) * $pageSize;
  210. $count = TemplatesLog::count();
  211. if ($count > 1) {
  212. // 总页数
  213. $pages = ceil($count/$pageSize);
  214. }else{
  215. // 总页数
  216. $pages = 1;
  217. }
  218. $result = TemplatesLog::orderBy('id', 'desc')->offset($offset)->limit($pageSize)->get();
  219. $result = json_decode(json_encode($result),true);
  220. foreach($result as $k=>&$v){
  221. # 获取销售名字
  222. $v['admin_name'] = Admin::where('id', $v['admin_id'])->pluck('realname');
  223. }
  224. return view('template/logindex', ['result' =>$result,
  225. 'page' =>$page,
  226. 'count' =>$count,
  227. 'pages' =>$pages,
  228. ]);
  229. }
  230. /**
  231. * 销售引流模板分配日志报表
  232. */
  233. public function templateLogReport(Request $request){
  234. $admin_id = (int)$request->input('admin_id');
  235. $team_id = (int)$request->input('team_id');
  236. $stime = $request->input('stime');
  237. $etime = $request->input('etime');
  238. //假如有团队筛选,检索销售队员
  239. $sale_ids = null;
  240. if($team_id>0){
  241. $sale_ids = DB::table('admin')->where('team_id', $team_id)->lists('id');
  242. }
  243. $page = (int)$request->input('page');
  244. $pageSize = 20;
  245. if($page<=0){
  246. $page = 1;
  247. }
  248. $offset = ($page-1) * $pageSize;
  249. $count = TemplatesLog::select(DB::raw('left(create_time,10) as day,admin_id'))->where(function($query) use($admin_id, $stime, $etime, $sale_ids){
  250. if($admin_id>0) $query->where('admin_id', $admin_id);
  251. if($stime) $query->where('create_time', '>=', $stime);
  252. if($etime) $query->where('create_time', '<=', $etime. ' 23:59:59');
  253. if($sale_ids !== null) $query->whereIn('admin_id', $sale_ids);
  254. })->groupBy('day')->groupBy('admin_id')->get();
  255. $count = count($count);
  256. if ($count > 1) {
  257. // 总页数
  258. $pages = ceil($count/$pageSize);
  259. }else{
  260. // 总页数
  261. $pages = 1;
  262. }
  263. $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){
  264. if($admin_id>0) $query->where('admin_id', $admin_id);
  265. if($stime) $query->where('create_time', '>=', $stime);
  266. if($etime) $query->where('create_time', '<=', $etime. ' 23:59:59');
  267. if($sale_ids !== null) $query->whereIn('admin_id', $sale_ids);
  268. })->groupBy('day')->groupBy('admin_id')->orderBy('day', 'desc')->offset($offset)->limit($pageSize)->get();
  269. $result = json_decode(json_encode($result), true);
  270. foreach($result as $k=>&$v){
  271. //获取销售当天加粉情况
  272. $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();
  273. if(!empty($custDetail)){
  274. $v['fan_add'] = $custDetail->fan_add;
  275. $v['new_reply'] = $custDetail->new_reply;
  276. $v['old_consult'] = $custDetail->old_consult;
  277. $v['new_consult'] = $custDetail->new_consult;
  278. $v['admin_name'] = $custDetail->admin_name;
  279. }else{
  280. $v['fan_add'] = '';
  281. $v['new_reply'] = '';
  282. $v['old_consult'] = '';
  283. $v['new_consult'] = '';
  284. $v['admin_name'] = DB::table('admin')->where('id', $v['admin_id'])->pluck('realname');
  285. }
  286. $v['long_count'] = $v['tcount'] - $v['pv_count'];
  287. }
  288. $teamList = DB::table('teams')->select('id', 'name')->get();
  289. $teamList = json_decode(json_encode($teamList), true);
  290. $adminList = DB::table('admin')->select('id', 'realname', 'username')->where('id','>', 1)->get();
  291. $adminList = json_decode(json_encode($adminList), true);
  292. return view('template/templateLogReport', ['result'=>$result,
  293. 'page' =>$page,
  294. 'count' =>$count,
  295. 'pages' =>$pages,
  296. 'teamlist' =>$teamList,
  297. 'adminlist' =>$adminList,
  298. 'team_id' =>$team_id,
  299. 'admin_id' =>$admin_id,
  300. 'stime' =>$stime,
  301. 'etime' =>$etime,
  302. ]);
  303. }
  304. }