request->token; $keyword = input('keyword', '', 'trim'); //搜索关键词时直接显示人员列表 $org_type = input('org_type', 2); // 0全部人员 ,1销售人员 ,2设计师 $from = input('from', '', 'trim'); // 团队客户查设计师部门,只查询子部门的设计师部门 if ($org_type == 2 && $from == 'team') { $sub_org = orgSubIds($token['org_id']); $query[] = ['id', 'in', $sub_org]; } else { $query[] = ['path', 'like', $token['root_org'] . '-%']; } if ($org_type) $query[] = ['org_type', '=', $org_type]; if ($keyword) { $orgs = Org::where($query)->column('id'); $where[] = ['org_id', 'in', $orgs]; $where[] = ['name', 'like', '%' . $keyword . '%']; $where[] = ['state', '=', '在职']; $where[] = ['uid', '>', 0]; $result = Employee::with(['user' => function ($query) { $query->field('id,headimgurl')->bind(['headimgurl' => 'headimgurl']); }])->where($where)->field('id,name,org_id,uid')->select()->toArray(); return json(['code' => 0, 'data' => $result]); } $orgs = Org::with(['employee' => function ($query) { $e_where[] = ['e.state', '=', '在职']; // if ($keyword){ // $e_where[] = ['e.name', 'like', '%' . $keyword . '%']; // } $query->field('e.id,e.name,user.headimgurl,e.org_id') ->alias('e') ->where($e_where) ->join('user', 'user.id=e.uid'); }])->where($query)->order(['level' => 'desc', 'id' => 'desc'])->field('id,name,pid,path,org_type')->select()->toArray(); foreach ($orgs as $k => $v){ foreach ($v['employee'] as $kk => $vv){ $orgs[$k]['employee'][$kk]['org_type'] = $v['org_type']; } } $orgsAll = Org::field('id,name,pid')->column('name,pid', 'id'); // 查询限定数量 $limitNum = (int)Setting::where(['root_id' => $token['root_org'], 'name' => 'designerNum'])->value('content'); // 查询员工已制定的人数 if ($limitNum != 0) { //获取当月时间跨度 $start_time = date('Y-m').'-01 00:00:00'; $end_time = date('Y-m-d',strtotime("$start_time +1 month -1 day")).' 23:59:59'; $where_d[] = ['addtime', 'between', [strtotime($start_time),strtotime($end_time)]]; $where_d[] = ['root_id', '=', $token['root_org']]; $empShareNum = CustomerSharing::where($where_d)->group('employee_id')->column('count(customer_id)', 'employee_id'); foreach ($orgs as &$o) { if ($o['org_type'] != 2) continue; if (empty($o['employee'])) continue; foreach ($o['employee'] as &$e) { $e['select_disable'] = 0; if (isset($empShareNum[$e['id']]) && $empShareNum[$e['id']] >= $limitNum) $e['select_disable'] = 1; } } } $data = []; while (!empty($orgs)) { $org = array_pop($orgs); $childOrg = [ 'id' => $org['id'], 'pid' => $org['pid'], 'name' => $org['name'], 'designer' => $org['employee'], 'designer_num' => count($org['employee']) ]; $pathList = explode('-', trim($org['path'], '-')); $w = &$data; foreach ($pathList as $p) { if (isset($w[$p])) { $w[$p]['designer_num'] += $childOrg['designer_num']; } else { $w[$p] = [ 'id' => (int)$p, 'name' => $orgsAll[$p]['name'], 'pid' => $orgsAll[$p]['pid'], 'designer' => [], 'designer_num' => $childOrg['designer_num'], 'child_org' => [], ]; } isset($w[$p]['child_org']) ?: $w[$p]['child_org'] = []; $w = &$w[$p]['child_org']; if ($org['pid'] == $p) { if (isset($w[$org['id']])) { $w[$org['id']]['designer'] = $childOrg['designer']; $w[$org['id']]['designer_num'] += $childOrg['designer_num']; } else { $w[$org['id']] = $childOrg; } break; } } // $data[$org['pid']]['designer_num'] = isset($data[$org['pid']]) ? $data[$org['pid']]['designer_num'] + count($org['employee']) : 0; // if (isset($data[$org['id']])) { // $childOrg['child_org'] = $data[$org['id']]['child_org']; // $childOrg['designer_num'] += $data[$org['id']]['designer_num']; // unset($data[$org['id']]); // } // $data[$org['pid']]['child_org'][] = $childOrg; // $data[$org['pid']]['designer_num'] = isset($data[$org['pid']]['designer_num']) ? $data[$org['pid']]['designer_num'] + $childOrg['designer_num'] : $childOrg['designer_num']; } $data = array_pop($data); $this->resetChildOrgKey($data); // 剔除掉没有人的部门 if (isset($data['child_org'])) { foreach ($data['child_org'] as $k => $c) { if ($c['designer_num'] == 0) { unset($data['child_org'][$k]); } } } $result = [ 'designer' => isset($data['designer']) ? $data['designer'] : [], 'child_org' => isset($data['child_org']) ? $data['child_org'] : [] ]; return json(['code' => 0, 'data' => $result]); } /** * 重置 */ private function resetChildOrgKey(&$item) { if (empty($item['child_org'])) return; $item['child_org'] = array_values($item['child_org']); foreach ($item['child_org'] as $a) { $this->resetChildOrgKey($a); } } /** * 设计师列表 */ public function index() { $token = $this->request->token; $param = Request::only(['page' => 1, 'limit' => 10, 'keyword' => '', 'at' => '', 'house' => '']); $w[] = ['path', 'like', $token['root_org'] . '-%']; $w[] = ['org_type', '=', 2]; $orgs = Org::where($w)->column('id'); if ($param['keyword']) { $w1[] = ['name', 'like', '%' . trim($param['keyword']) . '%']; $w1[] = ['root_id', '=', $token['root_id']]; $ids1 = DesignerModel::where($w1)->column('employee_id'); $w2[] = ['root_id', '=', $token['root_id']]; $ids2 = DesignerModel::where($w2)->where("name is null AND name = ''")->column('employee_id'); $w2[] = ['name', 'like', '%' . trim($param['keyword']) . '%']; $w2[] = ['id', 'not in', $ids2]; $ids3 = Employee::where($w2)->column('id'); $w3[] = ['id', 'in', array_merge($ids1, $ids3)]; } $w3[] = ['org_id', 'in', $orgs]; $w3[] = ['root_id', '=', $token['root_org']]; $w3[] = ['state', '=', '在职']; $w5 = []; if ($param['at']) { $w5[] = ['good_at', 'like', '%' . trim($param['at']) . '%']; } if ($param['house']) { $w5[] = ['good_house', 'like', '%' . trim($param['house']) . '%']; } if ($w5) { $ids = DesignerModel::where($w5)->column('employee_id'); $w3[] = ['id', 'in', $ids]; } $root_id = $token['root_org']; $w3[] = ['show', '=', 0]; $list = Employee::with(['designer' => function ($query) use ($root_id) { $query->where('root_id', $root_id); // ->bind(['desc','good_at','work_years','good_house','design_concept','vcr']); }])->withCount(['materialCase' => function ($query) { $query->where([['publish', '=', 1], ['del', '=', 0]]); }])->where($w3)->field('name title,id,show,id designer_id')->order('material_case_count desc')->page($param['page'], $param['limit'])->select()->toArray(); $count = Employee::where($w3)->count(); if ($list) { foreach ($list as $k => $v) { $list[$k]['name'] = $v['title']; $list[$k]['show'] = $v['show'] ? '不展示' : '展示'; $list[$k]['case_count'] = $v['material_case_count']; $list[$k]['position'] = isset($v['designer']) ? $v['designer']['position'] : ''; $list[$k]['headimgurl'] = isset($v['designer']) ? $v['designer']['headimgurl'] : ''; $list[$k]['desc'] = isset($v['designer']) ? $v['designer']['desc'] : ''; $list[$k]['good_at'] = isset($v['designer']) ? $v['designer']['good_at'] : ''; $list[$k]['work_years'] = isset($v['designer']) ? $v['designer']['work_years'] : ''; $list[$k]['good_house'] = isset($v['designer']) ? $v['designer']['good_house'] : ''; $list[$k]['design_concept'] = isset($v['designer']) ? $v['designer']['design_concept'] : ''; $list[$k]['vcr'] = isset($v['designer']) ? $v['designer']['vcr'] : ''; unset($list[$k]['designer']); unset($list[$k]['title']); } } return json(['code' => 0, 'data' => $list, 'count' => $count]); } /** * 设计师列表下拉 */ public function select() { $token = $this->request->token; // $token['root_org'] =23; $condition = [['root_id', '=', $token['root_org']]]; //风格获取 $decostyles = Decostyle::where($condition)->where([['type', '=', 0]])->field('id,name')->select()->toArray(); //户型获取 $housetype = Housetype::where($condition)->field('id,name')->select()->toArray(); $data['decostyles'] = $decostyles; $data['housetype'] = $housetype; return json(['code' => 0, 'data' => $data]); } /** * 设计师详情 */ public function read() { $token = $this->request->token; // $token['root_org'] = 23; $param = Request::only(['id' => '']); $w[] = ['id', '=', $param['id']]; $w[] = ['root_id', '=', $token['root_org']]; $root_id = $token['root_org']; $data = Employee::with(['designer' => function ($query) use ($root_id) { $query->where('root_id', $root_id)->visible(['headimgurl', 'employee_id', 'desc', 'good_at', 'position', 'work_years', 'addtime', 'good_house', 'design_concept', 'vcr', 'id designer_id'])->bind(['desc', 'good_at', 'position', 'work_years', 'addtime', 'good_house', 'design_concept', 'vcr', 'name', 'headimgurl', 'designer_id' => 'id']); }])->where($w)->field('name title,id,show')->findOrEmpty(); if (!$data->isEmpty()) { $data->name = $data->name ?: $data->title; $cw[] = ['designer_id', '=', $data->id]; $cw[] = ['del', '=', 0]; $cw[] = ['publish', '=', 1]; $data->caseCount = MaterialCase::where($cw)->count(); } return json(['code' => 0, 'data' => $data]); } /** * 设计师编辑 */ public function edit() { $token = $this->request->token; // $token['root_org'] = 23; $param = Request::only(['id' => 0, 'position' => '', 'name' => '', 'good_at' => '', 'desc' => '', 'work_years' => 0, 'good_house' => '', 'design_concept' => '', 'vcr' => '', 'headimgurl' => '']); if (!$param['headimgurl']) return json(['code' => 1, 'data' => '请选择形象照', 'msg' => '请选择形象照']); //if(!$param['vcr']) return json(['code' => 1, 'data' =>'请选择vcr','msg'=>'请选择vcr']); $w[] = ['root_id', '=', $token['root_org']]; $w[] = ['id', '=', $param['id']]; $row = Employee::where($w)->findOrEmpty(); if ($row->isEmpty()) return json(['code' => 1, 'data' => '数据不存在', 'msg' => '数据不存在']); $w1[] = ['root_id', '=', $token['root_org']]; $w1[] = ['employee_id', '=', $param['id']]; $row = DesignerModel::where($w1)->findOrEmpty(); $save['root_id'] = $token['root_org']; $save['name'] = $param['name']; $save['good_at'] = $param['good_at']; $save['desc'] = $param['desc']; $save['work_years'] = $param['work_years']; $save['good_house'] = $param['good_house']; $save['design_concept'] = $param['design_concept']; $save['vcr'] = $param['vcr']; $save['position'] = $param['position']; $save['headimgurl'] = $param['headimgurl']; if ($row->isEmpty()) { $save['employee_id'] = $param['id']; DesignerModel::insertGetId($save); } else { $row->save($save); } Employee::where('id', $param['id'])->update(['image_photo' => $param['headimgurl']]); return json(['code' => 0, 'data' => '操作成功', 'msg' => '操作成功']); } }