123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845 |
- <?php
- namespace app\api\controller;
- use app\model\CustomerClue;
- use app\model\DailyWechatArticleCopy;
- use app\model\Employee;
- use app\model\Footprints;
- use app\model\Org;
- use app\model\ShareLog;
- class CustomerReach extends Base
- {
- public function index(){
- $token = $this->request->token;
- $type = input('type', '', 'trim');
- $accrued = input('accrued');
- if (!in_array($type, ['All', 'MaterialCase', 'Video', 'Article', 'CompanyStrength', 'MaterialEvidence', 'Building', 'ToolAll', 'CustomerJsAll', 'weiwang', 'card'])){
- return json(['code'=> self::success, 'data'=> [], 'msg'=> '获取成功']);
- }
- $start_time_get = input('start_time', time(), 'strtotime');
- $end_time_get = input('end_time', time(), 'strtotime');
- $start_time = date('Y-m-d 00:00:00', $start_time_get);
- $end_time = date('Y-m-d 23:59:59', $end_time_get);
- // 所选部门
- $org_id = input('org_id', $token['org_id'], 'intval');
- // 数据总览
- // 部门信息
- $data['org_name'] = Org::where('id', '=', $org_id)->value('name');
- //员工数量
- $sub_org = orgSubIds($org_id);
- $sub_employee_ids = Employee::where([['org_id', 'in', $sub_org], ['state', '=', '在职'], ['uid', '>', 0]])->column('id');
- $data['employee_count'] = count($sub_employee_ids);
- switch ($type){
- case 'All':
- $clue_type = ['materialCase', 'video', 'article', 'CompanyStrength', 'companyStrength', 'materialEvidence', 'building', 'buildingVr', 'toolAll', 'companyVr', 'lottery', 'styleTest', 'likeTest', 'priceCalculation', 'spellgroup', 'agents', 'weiwang', 'card'];
- $share_type = ['MaterialCase', 'Video', 'Article', 'CompanyStrength', 'MaterialEvidence', 'Building', 'ToolAll', 'CustomerJsAll', 'weiwang', 'card', 'MaterialCase_vr', 'Building_vr', 'EmployeeCard_vr', 'Company_vr'];
- break;
- case 'MaterialCase':
- $clue_type = ['materialCase'];
- $share_type = ['MaterialCase', 'MaterialCase_vr'];
- break;
- case 'Video':
- $clue_type = ['video'];
- $share_type = ['Video'];
- break;
- case 'Article':
- $clue_type = ['article'];
- $share_type = ['Article'];
- break;
- case 'CompanyStrength':
- $clue_type = ['CompanyStrength', 'companyStrength'];
- $share_type = ['CompanyStrength'];
- break;
- case 'MaterialEvidence':
- $clue_type = ['materialEvidence'];
- $share_type = ['MaterialEvidence'];
- break;
- case 'Building':
- $clue_type = ['building', 'buildingVr'];
- $share_type = ['Building', 'Building_vr'];
- break;
- case 'ToolAll':
- $clue_type = ['toolAll', 'companyVr'];
- $share_type = ['ToolAll', 'Company_vr'];
- break;
- case 'CustomerJsAll':
- $clue_type = ['lottery', 'styleTest', 'likeTest', 'priceCalculation', 'spellgroup', 'agents'];
- $share_type = ['CustomerJsAll'];
- break;
- case 'weiwang':
- $clue_type = ['weiwang'];
- $share_type = ['weiwang'];
- break;
- case 'card':
- $clue_type = ['card'];
- $share_type = ['card', 'EmployeeCard_vr'];
- break;
- default:
- $clue_type = [];
- $share_type = [];
- break;
- }
- //转发人数(筛选为全部时需统计每日发圈转发次数和人数)
- if(!$accrued){
- $t_where[] = ['share_time', 'between', [$start_time, $end_time]];
- }
- $t_where[] = ['type', 'in', $share_type];
- $t_where[] = ['employee_id', 'in', $sub_employee_ids];
- $shared_employee = ShareLog::where($t_where)->group('employee_id')->column('employee_id');
-
- if($type == 'All'){
- //查询每日发圈转发人数
- $wechat_where = [
- ['employee_id', 'in', $sub_employee_ids]
- ];
- if(!$accrued){
- $wechat_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $whchat_data = DailyWechatArticleCopy::where($wechat_where)->group('employee_id')->column('employee_id');
- $new_data = array_merge($shared_employee, $whchat_data);
- $shared_employee = array_unique($new_data);
- }
- $data['share_employee_count'] = count($shared_employee);
- // 转发次数
- $share_all = ShareLog::where($t_where)->select();
- $data['share_count'] = $share_all->count();
- if($type == 'All'){
- //查询每日发圈转发次数
- $data['share_count'] += DailyWechatArticleCopy::where($wechat_where)->count();
- }
- // 获得线索
- $clue_where[] = ['employee_id', 'in', $sub_employee_ids];
- if($type != 'All') {
- $clue_where[] = ['pipe_type', 'in', $clue_type];
- }
- if(!$accrued){
- $clue_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $clue_count = CustomerClue::where($clue_where)->count();
- $data['clue_count'] = $clue_count;
- // 浏览次数
- $foot_where[] = ['employee_id', 'in', $sub_employee_ids];
- if($type != 'All') {
- $foot_where[] = ['pipe_type', 'in', $clue_type];
- }
- if(!$accrued){
- $foot_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $foot_count = Footprints::where($foot_where)->count();
- $data['footprints_count'] = $foot_count;
- // 浏览时长
- $visit_long = Footprints::where($foot_where)->sum('visit_due_time');
- $data['visit_long'] = round($visit_long/60, 1);
- // 未转发人数
- $un_share_employee = array_diff($sub_employee_ids, $shared_employee);
- $data['un_share_employee_count'] = count($un_share_employee);
- // 是否有子部门
- $have_sub_org = Org::where('pid', '=', $org_id)->count();
- if ($have_sub_org > 0){
- $data['have_sub_org'] = true;
- } else {
- $data['have_sub_org'] = false;
- }
- /** -----乐尚企业演示,数量进行调整,正式使用系统时删除此代码 ------*/
- if(request()->token['root_org'] == 1793) {
- $data['employee_count'] = 512;
- $data['share_employee_count'] = 358;
- $data['share_count'] = 5179;
- $data['clue_count'] = 2681;
- $data['footprints_count'] = 12850;
- $data['visit_long'] = 2478.6;
- $data['un_share_employee_count'] = 154;
- }
- /*------------------------------------------------------------------------*/
- return json(['code'=> self::success, 'data'=> $data, 'msg'=> '请求成功']);
- }
- /**
- * 部门数据
- */
- public function org(){
- $token = $this->request->token;
- $type = input('type', '', 'trim');
- $accrued = input('accrued');
- if (!in_array($type, ['All', 'MaterialCase', 'Video', 'Article', 'CompanyStrength', 'MaterialEvidence', 'Building', 'ToolAll', 'CustomerJsAll', 'weiwang', 'card'])){
- return json(['code'=> self::success, 'data'=> [], 'msg'=> '获取成功']);
- }
- $start_time_get = input('start_time', time(), 'strtotime');
- $end_time_get = input('end_time', time(), 'strtotime');
- $start_time = date('Y-m-d 00:00:00', $start_time_get);
- $end_time = date('Y-m-d 23:59:59', $end_time_get);
- // 所选部门
- $org_id = input('org_id', $token['org_id'], 'intval');
- $sub_org = Org::where([['pid', '=', $org_id], ['status', '=', 1]])->field('id,name,pid')->select()->toArray();
- switch ($type){
- case 'All':
- $clue_type = ['materialCase', 'video', 'article', 'CompanyStrength', 'companyStrength', 'materialEvidence', 'building', 'buildingVr', 'toolAll', 'companyVr', 'lottery', 'styleTest', 'likeTest', 'priceCalculation', 'spellgroup', 'agents', 'weiwang', 'card'];
- $share_type = ['MaterialCase', 'Video', 'Article', 'CompanyStrength', 'MaterialEvidence', 'Building', 'ToolAll', 'CustomerJsAll', 'weiwang', 'card', 'MaterialCase_vr', 'Building_vr', 'EmployeeCard_vr', 'Company_vr'];
- break;
- case 'MaterialCase':
- $clue_type = ['materialCase'];
- $share_type = ['MaterialCase', 'MaterialCase_vr'];
- break;
- case 'Video':
- $clue_type = ['video'];
- $share_type = ['Video'];
- break;
- case 'Article':
- $clue_type = ['article'];
- $share_type = ['Article'];
- break;
- case 'CompanyStrength':
- $clue_type = ['CompanyStrength', 'companyStrength'];
- $share_type = ['CompanyStrength'];
- break;
- case 'MaterialEvidence':
- $clue_type = ['materialEvidence'];
- $share_type = ['MaterialEvidence'];
- break;
- case 'Building':
- $clue_type = ['building', 'buildingVr'];
- $share_type = ['Building', 'Building_vr'];
- break;
- case 'ToolAll':
- $clue_type = ['toolAll', 'companyVr'];
- $share_type = ['ToolAll', 'Company_vr'];
- break;
- case 'CustomerJsAll':
- $clue_type = ['lottery', 'styleTest', 'likeTest', 'priceCalculation', 'spellgroup', 'agents'];
- $share_type = ['CustomerJsAll'];
- break;
- case 'weiwang':
- $clue_type = ['weiwang'];
- $share_type = ['weiwang'];
- break;
- case 'card':
- $clue_type = ['card'];
- $share_type = ['card', 'EmployeeCard_vr'];
- break;
- default:
- $clue_type = [];
- $share_type = [];
- break;
- }
- foreach ($sub_org as $k => $v){
- // 是否有子部门
- $have_sub_org = Org::where('pid', '=', $v['id'])->count();
- if ($have_sub_org > 0){
- $sub_org[$k]['have_sub_org'] = true;
- } else {
- $sub_org[$k]['have_sub_org'] = false;
- }
- $v_sub_org = orgSubIds($v['id']);
- $org_employee_ids = Employee::where([['org_id', 'in', $v_sub_org], ['state', '=', '在职'], ['uid', '<>', 0]])->column('id');
- $sub_org[$k]['employee_count'] = count($org_employee_ids);
- unset($share_where);
- if(!$accrued){
- $share_where[] = ['share_time', 'between', [$start_time, $end_time]];
- }
- $share_where[] = ['type', 'in', $share_type];
- $share_where[] = ['employee_id', 'in', $org_employee_ids];
- // 已转发员工(筛选为全部时需统计每日发圈转发次数和人数)
- $shared_employee = ShareLog::where($share_where)->group('employee_id')->column('employee_id');
- if($type == 'All'){
- //查询每日发圈转发人数
- $wechat_where = [
- ['employee_id', 'in', $org_employee_ids]
- ];
- if(!$accrued){
- $wechat_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $whchat_data = DailyWechatArticleCopy::where($wechat_where)->group('employee_id')->column('employee_id');
- $new_data = array_merge($shared_employee, $whchat_data);
- $shared_employee = array_unique($new_data);
- }
- $sub_org[$k]['share_employee_count'] = count($shared_employee);
- // 未转发员工
- $un_share_employee = array_diff($org_employee_ids, $shared_employee);
- $sub_org[$k]['un_share_employee_count'] = count($un_share_employee);
- // 转发次数
- $share_count = ShareLog::where($share_where)->count();
- if($type == 'All'){
- //查询每日发圈转发次数
- $share_count += DailyWechatArticleCopy::where($wechat_where)->count();
- }
- $sub_org[$k]['share_count'] = $share_count;
- // 线索
- unset($clue_where);
- $clue_where[] = ['employee_id', 'in', $org_employee_ids];
- if($type != 'All'){
- $clue_where[] = ['pipe_type', 'in', $clue_type];
- }
- if(!$accrued){
- $clue_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $clue_count = CustomerClue::where($clue_where)->count();
- $sub_org[$k]['clue_count'] = $clue_count;
- // 浏览次数
- unset($foot_where);
- $foot_where[] = ['employee_id', 'in', $org_employee_ids];
- if($type != 'All'){
- $foot_where[] = ['pipe_type', 'in', $clue_type];
- }
- if(!$accrued){
- $foot_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $foot_count = Footprints::where($foot_where)->count();
- $sub_org[$k]['footprints_count'] = $foot_count;
- $visit_long = Footprints::where($foot_where)->sum('visit_due_time');
- $sub_org[$k]['visit_long'] = round($visit_long/60, 1);
- /** -----乐尚企业演示,数量进行调整,正式使用系统时删除此代码 ------*/
- if($token['root_org'] == 1793) {
- $sub_org[$k]['employee_count'] = 188;
- $sub_org[$k]['share_employee_count'] = 120;
- $sub_org[$k]['un_share_employee_count'] = 68;
- $sub_org[$k]['share_count'] = $v['id'];
- $sub_org[$k]['clue_count'] = floor($v['id']/2);
- $sub_org[$k]['footprints_count'] = $v['id']*2;
- $sub_org[$k]['visit_long'] = floor($v['id']/3);
- }
- /*------------------------------------------------------------------------*/
- }
- $order = input('order', '', 'trim');
- if ($order) {
- $order_arr = explode(' ', $order);
- $sort_field = $order_arr[0] ?? 'share';
- $sort_order = $order_arr[1] ?? 'desc';
- switch ($sort_field){
- case 'share':
- $field = 'share_count';
- break;
- case 'clue':
- $field = 'clue_count';
- break;
- case 'visit':
- $field = 'footprints_count';
- break;
- case 'long':
- $field = 'visit_long';
- break;
- default:
- $field = 'notFound';
- break;
- }
- if ($sort_order == 'asc'){
- $sort = SORT_ASC;
- } else {
- $sort = SORT_DESC;
- }
- $arr = [];
- foreach ($sub_org as $v){
- if (!isset($v[$field])){
- break;
- }
- $arr[] = $v[$field];
- }
- if (!empty($arr)){
- array_multisort($arr, $sort, $sub_org);
- }
- }
- return json(['code'=> self::success, 'data'=> $sub_org, 'msg'=> '请求成功']);
- }
- /**
- * 员工数据
- */
- public function employee(){
- $token = $this->request->token;
- $type = input('type', '', 'trim');
- $accrued = input('accrued');
- if (!in_array($type, ['All', 'MaterialCase', 'Video', 'Article', 'CompanyStrength', 'MaterialEvidence', 'Building', 'ToolAll', 'CustomerJsAll', 'weiwang', 'card'])){
- return json(['code'=> self::success, 'data'=> [], 'msg'=> '获取成功']);
- }
- $start_time_get = input('start_time', time(), 'strtotime');
- $end_time_get = input('end_time', time(), 'strtotime');
- $start_time = date('Y-m-d 00:00:00', $start_time_get);
- $end_time = date('Y-m-d 23:59:59', $end_time_get);
- // 所选部门
- $org_id = input('org_id', $token['org_id'], 'intval');
- // 所选部门员工统计数据
- $e_where[] = ['org_id', '=', $org_id];
- $e_where[] = ['state', '=', '在职'];
- $e_where[] = ['uid', '<>', 0];
- $employee_list = Employee::with(['user'=> function($query){
- $query->field('id,headimgurl');
- }])->where($e_where)->field('id,name,org_id,root_id,uid')->select()->toArray();
- switch ($type){
- case 'All':
- $clue_type = ['materialCase', 'video', 'article', 'CompanyStrength', 'companyStrength', 'materialEvidence', 'building', 'buildingVr', 'toolAll', 'companyVr', 'lottery', 'styleTest', 'likeTest', 'priceCalculation', 'spellgroup', 'agents', 'weiwang', 'card'];
- $share_type = ['MaterialCase', 'Video', 'Article', 'CompanyStrength', 'MaterialEvidence', 'Building', 'ToolAll', 'CustomerJsAll', 'weiwang', 'card', 'MaterialCase_vr', 'Building_vr', 'EmployeeCard_vr', 'Company_vr'];
- break;
- case 'MaterialCase':
- $clue_type = ['materialCase'];
- $share_type = ['MaterialCase', 'MaterialCase_vr'];
- break;
- case 'Video':
- $clue_type = ['video'];
- $share_type = ['Video'];
- break;
- case 'Article':
- $clue_type = ['article'];
- $share_type = ['Article'];
- break;
- case 'CompanyStrength':
- $clue_type = ['CompanyStrength', 'companyStrength'];
- $share_type = ['CompanyStrength'];
- break;
- case 'MaterialEvidence':
- $clue_type = ['materialEvidence'];
- $share_type = ['MaterialEvidence'];
- break;
- case 'Building':
- $clue_type = ['building'];
- $share_type = ['Building', 'Building_vr'];
- break;
- case 'ToolAll':
- $clue_type = ['toolAll', 'companyVr'];
- $share_type = ['ToolAll', 'Company_vr'];
- break;
- case 'CustomerJsAll':
- $clue_type = ['lottery', 'styleTest', 'likeTest', 'priceCalculation', 'spellgroup', 'agents'];
- $share_type = ['CustomerJsAll'];
- break;
- case 'weiwang':
- $clue_type = ['weiwang'];
- $share_type = ['weiwang'];
- break;
- case 'card':
- $clue_type = ['card'];
- $share_type = ['card', 'EmployeeCard_vr'];
- break;
- default:
- $clue_type = [];
- $share_type = [];
- break;
- }
- foreach ($employee_list as $k => $v){
- unset($share_where);
- if(!$accrued){
- $share_where[] = ['share_time', 'between', [$start_time, $end_time]];
- }
- $share_where[] = ['type', 'in', $share_type];
- $share_where[] = ['employee_id', '=', $v['id']];
- // 转发次数(筛选为全部时需统计每日发圈转发次数和人数)
- $share_count = ShareLog::where($share_where)->count();
- if($type == 'All'){
- //查询每日发圈转发次数
- $wechat_where = [
- ['employee_id', '=', $v['id']]
- ];
- if(!$accrued){
- $wechat_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $share_count += DailyWechatArticleCopy::where($wechat_where)->count();
- }
- $employee_list[$k]['share_count'] = $share_count;
- // 线索
- unset($clue_where);
- $clue_where[] = ['employee_id', '=', $v['id']];
- if ($type != 'All'){
- $clue_where[] = ['pipe_type', 'in', $clue_type];
- }
- if(!$accrued){
- $clue_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $clue_count = CustomerClue::where($clue_where)->count();
- $employee_list[$k]['clue_count'] = $clue_count;
- // 浏览次数
- unset($foot_where);
- $foot_where[] = ['employee_id', '=', $v['id']];
- if ($type != 'All') {
- $foot_where[] = ['pipe_type', 'in', $clue_type];
- }
- if(!$accrued){
- $foot_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $foot_count = Footprints::where($foot_where)->count();
- $employee_list[$k]['footprints_count'] = $foot_count;
- $visit_long = Footprints::where($foot_where)->sum('visit_due_time');
- $employee_list[$k]['visit_long'] = round($visit_long/60, 1);
- /** -----乐尚企业演示,数量进行调整,正式使用系统时删除此代码 ------*/
- if(request()->token['root_org'] == 1793) {
- $employee_list[$k]['share_count'] = floor($v['id']/12);
- $employee_list[$k]['clue_count'] = floor($v['id']/20);
- $employee_list[$k]['footprints_count'] = floor($v['id']/10);
- $employee_list[$k]['visit_long'] = floor($v['id']/50);
- }
- /*------------------------------------------------------------------------*/
-
- }
- $order = input('order', '', 'trim');
- if ($order) {
- $order_arr = explode(' ', $order);
- $sort_field = $order_arr[0] ?? 'share';
- $sort_order = $order_arr[1] ?? 'desc';
- switch ($sort_field){
- case 'share':
- $field = 'share_count';
- break;
- case 'clue':
- $field = 'clue_count';
- break;
- case 'visit':
- $field = 'footprints_count';
- break;
- case 'long':
- $field = 'visit_long';
- break;
- default:
- $field = 'notFound';
- break;
- }
- if ($sort_order == 'asc'){
- $sort = SORT_ASC;
- } else {
- $sort = SORT_DESC;
- }
- $arr = [];
- foreach ($employee_list as $v){
- if (!isset($v[$field])){
- break;
- }
- $arr[] = $v[$field];
- }
- if (!empty($arr)){
- array_multisort($arr, $sort, $employee_list);
- }
- }
- $page = input('page', 1, 'intval');
- $limit = input('limit', 10, 'intval');
- $list = array_slice($employee_list, ($page-1)*$limit, $page*$limit-1);
- return json(['code'=> self::success, 'data'=> $list, 'msg'=> '请求成功']);
- }
- /**
- * 未分享人
- */
- public function un_share(){
- $token = $this->request->token;
- $type = input('type', '', 'trim');
- $accrued = input('accrued');
- if (!in_array($type, ['All', 'MaterialCase', 'Video', 'Article', 'CompanyStrength', 'MaterialEvidence', 'Building', 'ToolAll', 'CustomerJsAll', 'weiwang', 'card'])){
- return json(['code'=> self::success, 'data'=> [], 'msg'=> '获取成功']);
- }
- $start_time_get = input('start_time', time(), 'strtotime');
- $end_time_get = input('end_time', time(), 'strtotime');
- $start_time = date('Y-m-d 00:00:00', $start_time_get);
- $end_time = date('Y-m-d 23:59:59', $end_time_get);
- // 所选部门
- $org_id = input('org_id', $token['org_id'], 'intval');
- // 数据总览
- //员工数量
- $sub_org = orgSubIds($org_id);
- $sub_employee_ids = Employee::where([['org_id', 'in', $sub_org], ['state', '=', '在职'], ['uid', '<>', 0]])->column('id');
- switch ($type){
- case 'All':
- $share_type = ['MaterialCase', 'Video', 'Article', 'CompanyStrength', 'MaterialEvidence', 'Building', 'toolAll', 'companyVr', 'lottery', 'styleTest', 'likeTest', 'priceCalculation', 'spellgroup', 'agents', 'weiwang', 'card', 'MaterialCase_vr', 'Building_vr', 'EmployeeCard_vr', 'Company_vr'];
- break;
- case 'MaterialCase':
- $share_type = ['MaterialCase', 'MaterialCase_vr'];
- break;
- case 'Video':
- $share_type = ['Video'];
- break;
- case 'Article':
- $share_type = ['Article'];
- break;
- case 'CompanyStrength':
- $share_type = ['CompanyStrength'];
- break;
- case 'MaterialEvidence':
- $share_type = ['MaterialEvidence'];
- break;
- case 'Building':
- $share_type = ['Building', 'Building_vr'];
- break;
- case 'ToolAll':
- $share_type = ['ToolAll', 'Company_vr'];
- break;
- case 'CustomerJsAll':
- $share_type = ['CustomerJsAll'];
- break;
- case 'weiwang':
- $share_type = ['weiwang'];
- break;
- case 'card':
- $share_type = ['card', 'EmployeeCard_vr'];
- break;
- default:
- $share_type = [];
- break;
- }
- //转发人数
- if(!$accrued){
- $t_where[] = ['share_time', 'between', [$start_time, $end_time]];
- }
- $t_where[] = ['type', 'in', $share_type];
- $t_where[] = ['employee_id', 'in', $sub_employee_ids];
- $shared_employee = ShareLog::where($t_where)->group('employee_id')->column('employee_id');
- // 未转发人数
- $un_share_employee = array_diff($sub_employee_ids, $shared_employee);
- $page = input('page', 1, 'intval');
- $limit = input('limit', 10, 'intval');
- $list = Employee::with(['org'=> function($query){
- $query->field('id,name');
- }, 'user'=> function($query){
- $query->field('id,headimgurl');
- }])->where('id', 'in', $un_share_employee)->field('id,name,org_id,uid')->order('org_id asc')->page($page, $limit)->select()->toArray();
- return json(['code'=> self::success, 'msg'=> '获取成功', 'data'=> $list]);
- }
- /**
- * 每日发圈数据
- */
- public function daily_index(){
- $token = $this->request->token;
- $accrued = input('accrued');
- $start_time_get = input('start_time', time(), 'strtotime');
- $end_time_get = input('end_time', time(), 'strtotime');
- $start_time = date('Y-m-d 00:00:00', $start_time_get);
- $end_time = date('Y-m-d 23:59:59', $end_time_get);
- if(!$accrued){
- $where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- // 所选部门
- $org_id = input('org_id', $token['org_id'], 'intval');
- // 部门信息
- $data['org_name'] = Org::where('id', '=', $org_id)->value('name');
- //员工数量
- $sub_org = orgSubIds($org_id);
- $sub_employee_ids = Employee::where([['org_id', 'in', $sub_org], ['state', '=', '在职'], ['uid', '<>', 0]])->column('id');
- $data['employee_count'] = count($sub_employee_ids);
- //转发人数
- $where[] = ['employee_id', 'in', $sub_employee_ids];
- $shared_employee = DailyWechatArticleCopy::where($where)->group('employee_id')->column('employee_id');
- $data['share_employee_count'] = count($shared_employee);
- // 转发次数
- $share_count = DailyWechatArticleCopy::where($where)->count();
- $data['share_count'] = $share_count;
- // 未转发人数
- $un_share_employee = array_diff($sub_employee_ids, $shared_employee);
- $data['un_share_employee_count'] = count($un_share_employee);
- // 是否有子部门
- $have_sub_org = Org::where('pid', '=', $org_id)->count();
- if ($have_sub_org > 0){
- $data['have_sub_org'] = true;
- } else {
- $data['have_sub_org'] = false;
- }
- return json(['code'=> self::success, 'data'=> $data, 'msg'=> '请求成功']);
- }
- /**
- * 每日发圈部门数据
- */
- public function daily_org(){
- $token = $this->request->token;
- $accrued = input('accrued');
- $start_time_get = input('start_time', time(), 'strtotime');
- $end_time_get = input('end_time', time(), 'strtotime');
- $start_time = date('Y-m-d 00:00:00', $start_time_get);
- $end_time = date('Y-m-d 23:59:59', $end_time_get);
- // 所选部门
- $org_id = input('org_id', $token['org_id'], 'intval');
- $sub_org = Org::where([['pid', '=', $org_id], ['status', '=', 1]])->field('id,name,pid')->select()->toArray();
- foreach ($sub_org as $k => $v){
- // 是否有子部门
- $have_sub_org = Org::where('pid', '=', $v['id'])->count();
- if ($have_sub_org > 0){
- $sub_org[$k]['have_sub_org'] = true;
- } else {
- $sub_org[$k]['have_sub_org'] = false;
- }
- $v_sub_org = orgSubIds($v['id']);
- $org_employee_ids = Employee::where([['org_id', 'in', $v_sub_org], ['state', '=', '在职'], ['uid', '<>', 0]])->column('id');
- $sub_org[$k]['employee_count'] = count($org_employee_ids);
- unset($share_where);
- if(!$accrued){
- $share_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $share_where[] = ['employee_id', 'in', $org_employee_ids];
- // 已转发员工
- $shared_employee = DailyWechatArticleCopy::where($share_where)->group('employee_id')->column('employee_id');
- $sub_org[$k]['share_employee_count'] = count($shared_employee);
- // 未转发员工
- $un_share_employee = array_diff($org_employee_ids, $shared_employee);
- $sub_org[$k]['un_share_employee_count'] = count($un_share_employee);
- // 转发次数
- $share_count = DailyWechatArticleCopy::where($share_where)->count();
- $sub_org[$k]['share_count'] = $share_count;
- }
- $order = input('order', 'desc', 'trim');
- if ($order == 'asc'){
- $sort = SORT_ASC;
- } else {
- $sort = SORT_DESC;
- }
- $arr = [];
- foreach ($sub_org as $v){
- $arr[] = $v['share_count'];
- }
- array_multisort($arr, $sort, $sub_org);
- return json(['code'=> self::success, 'data'=> $sub_org, 'msg'=> '请求成功']);
- }
- /**
- * 每日发圈员工数据
- */
- public function daily_employee(){
- $token = $this->request->token;
- $accrued = input('accrued');
- $start_time_get = input('start_time', time(), 'strtotime');
- $end_time_get = input('end_time', time(), 'strtotime');
- $start_time = date('Y-m-d 00:00:00', $start_time_get);
- $end_time = date('Y-m-d 23:59:59', $end_time_get);
- // 所选部门
- $org_id = input('org_id', $token['org_id'], 'intval');
- // 所选部门员工统计数据
- $e_where[] = ['org_id', '=', $org_id];
- $e_where[] = ['state', '=', '在职'];
- $e_where[] = ['uid', '<>', '0'];
- $employee_list = Employee::with(['user'=> function($query){
- $query->field('id,headimgurl');
- }])->where($e_where)->field('id,name,org_id,root_id,uid')->select()->toArray();
- foreach ($employee_list as $k => $v){
- unset($share_where);
- if(!$accrued){
- $share_where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- $share_where[] = ['employee_id', '=', $v['id']];
- // 转发次数
- $share_count = DailyWechatArticleCopy::where($share_where)->count();
- $employee_list[$k]['share_count'] = $share_count;
- }
- $order = input('order', 'desc', 'trim');
- if ($order == 'asc'){
- $sort = SORT_ASC;
- } else {
- $sort = SORT_DESC;
- }
- $arr = [];
- foreach ($employee_list as $v){
- $arr[] = $v['share_count'];
- }
- array_multisort($arr, $sort, $employee_list);
- $page = input('page', 1, 'intval');
- $limit = input('limit', 10, 'intval');
- $list = array_slice($employee_list, ($page-1)*$limit, $page*$limit-1);
- return json(['code'=> self::success, 'data'=> $list, 'msg'=> '请求成功']);
- }
- /**
- * 每日发圈未分享
- */
- public function daily_un_share() {
- $token = $this->request->token;
- $accrued = input('accrued');
- $start_time_get = input('start_time', time(), 'strtotime');
- $end_time_get = input('end_time', time(), 'strtotime');
- $start_time = date('Y-m-d 00:00:00', $start_time_get);
- $end_time = date('Y-m-d 23:59:59', $end_time_get);
- if(!$accrued){
- $where[] = ['addtime', 'between', [$start_time, $end_time]];
- }
- // 所选部门
- $org_id = input('org_id', $token['org_id'], 'intval');
- //员工数量
- $sub_org = orgSubIds($org_id);
- $sub_employee_ids = Employee::where([['org_id', 'in', $sub_org], ['state', '=', '在职'], ['uid', '<>', 0]])->column('id');
- //转发人数
- $where[] = ['employee_id', 'in', $sub_employee_ids];
- $shared_employee = DailyWechatArticleCopy::where($where)->group('employee_id')->column('employee_id');
- $page = input('page', 1, 'intval');
- $limit = input('limit', 10, 'intval');
- // 未转发人数
- $un_share_employee = array_diff($sub_employee_ids, $shared_employee);
- $list = Employee::with(['org'=> function($query){
- $query->field('id,name');
- }, 'user'=> function($query){
- $query->field('id,headimgurl');
- }])->where('id', 'in', $un_share_employee)->order('org_id asc')->page($page, $limit)->field('id,name,org_id,uid')->select()->toArray();
- return json(['code'=> self::success, 'msg'=> '获取成功', 'data'=> $list]);
- }
- }
|