No Description

TemplateController.php 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  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.layer.close(index); parent.location.href="/admin/template/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')->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. foreach($adminList as &$admin){
  182. if( isset($assign_admin[$admin['id']]) ){
  183. $admin['weight'] = $assign_admin[$admin['id']];
  184. }else{
  185. $admin['weight'] = '';
  186. }
  187. }
  188. return view('template/assign', [
  189. 'adminlist' =>$adminList,
  190. 'id' =>$id
  191. ]);
  192. }
  193. /**
  194. * @return \Illuminate\View\View
  195. */
  196. public function logindex(Request $request)
  197. {
  198. $page = (int)$request->input('page');
  199. $pageSize = 20;
  200. if($page<=0){
  201. $page = 1;
  202. }
  203. $offset = ($page-1) * $pageSize;
  204. $count = TemplatesLog::count();
  205. if ($count > 1) {
  206. // 总页数
  207. $pages = ceil($count/$pageSize);
  208. }else{
  209. // 总页数
  210. $pages = 1;
  211. }
  212. $result = TemplatesLog::orderBy('id', 'desc')->offset($offset)->limit($pageSize)->get();
  213. $result = json_decode(json_encode($result),true);
  214. foreach($result as $k=>&$v){
  215. # 获取销售名字
  216. $v['admin_name'] = Admin::where('id', $v['admin_id'])->pluck('realname');
  217. }
  218. return view('template/logindex', ['result' =>$result,
  219. 'page' =>$page,
  220. 'count' =>$count,
  221. 'pages' =>$pages,
  222. ]);
  223. }
  224. /**
  225. * 销售引流模板分配日志报表
  226. */
  227. public function templateLogReport(Request $request){
  228. $admin_id = (int)$request->input('admin_id');
  229. $team_id = (int)$request->input('team_id');
  230. $stime = $request->input('stime');
  231. $etime = $request->input('etime');
  232. //假如有团队筛选,检索销售队员
  233. $sale_ids = null;
  234. if($team_id>0){
  235. $sale_ids = DB::table('admin')->where('team_id', $team_id)->lists('id');
  236. }
  237. $page = (int)$request->input('page');
  238. $pageSize = 20;
  239. if($page<=0){
  240. $page = 1;
  241. }
  242. $offset = ($page-1) * $pageSize;
  243. $count = TemplatesLog::select(DB::raw('left(create_time,10) as day,admin_id'))->where(function($query) use($admin_id, $stime, $etime, $sale_ids){
  244. if($admin_id>0) $query->where('admin_id', $admin_id);
  245. if($stime) $query->where('create_time', '>=', $stime);
  246. if($etime) $query->where('create_time', '<=', $etime. ' 23:59:59');
  247. if($sale_ids !== null) $query->whereIn('admin_id', $sale_ids);
  248. })->groupBy('day')->groupBy('admin_id')->get();
  249. $count = count($count);
  250. if ($count > 1) {
  251. // 总页数
  252. $pages = ceil($count/$pageSize);
  253. }else{
  254. // 总页数
  255. $pages = 1;
  256. }
  257. $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){
  258. if($admin_id>0) $query->where('admin_id', $admin_id);
  259. if($stime) $query->where('create_time', '>=', $stime);
  260. if($etime) $query->where('create_time', '<=', $etime. ' 23:59:59');
  261. if($sale_ids !== null) $query->whereIn('admin_id', $sale_ids);
  262. })->groupBy('day')->groupBy('admin_id')->orderBy('day', 'desc')->offset($offset)->limit($pageSize)->get();
  263. $result = json_decode(json_encode($result), true);
  264. foreach($result as $k=>&$v){
  265. //获取销售当天加粉情况
  266. $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();
  267. if(!empty($custDetail)){
  268. $v['fan_add'] = $custDetail->fan_add;
  269. $v['new_reply'] = $custDetail->new_reply;
  270. $v['old_consult'] = $custDetail->old_consult;
  271. $v['new_consult'] = $custDetail->new_consult;
  272. $v['admin_name'] = $custDetail->admin_name;
  273. }else{
  274. $v['fan_add'] = '';
  275. $v['new_reply'] = '';
  276. $v['old_consult'] = '';
  277. $v['new_consult'] = '';
  278. $v['admin_name'] = DB::table('admin')->where('id', $v['admin_id'])->pluck('realname');
  279. }
  280. $v['long_count'] = $v['tcount'] - $v['pv_count'];
  281. }
  282. $teamList = DB::table('teams')->select('id', 'name')->get();
  283. $teamList = json_decode(json_encode($teamList), true);
  284. $adminList = DB::table('admin')->select('id', 'realname', 'username')->where('id','>', 1)->get();
  285. $adminList = json_decode(json_encode($adminList), true);
  286. return view('template/templateLogReport', ['result'=>$result,
  287. 'page' =>$page,
  288. 'count' =>$count,
  289. 'pages' =>$pages,
  290. 'teamlist' =>$teamList,
  291. 'adminlist' =>$adminList,
  292. 'team_id' =>$team_id,
  293. 'admin_id' =>$admin_id,
  294. 'stime' =>$stime,
  295. 'etime' =>$etime,
  296. ]);
  297. }
  298. }