123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- <?php
- namespace app\api\controller;
- use app\model\Customer;
- use app\model\CustomerSharing;
- use app\model\CustomerVisitLog;
- use app\model\Employee;
- use app\model\Org;
- use think\facade\Db;
- use think\facade\Request;
- use app\model\Designer as DesignerModel;
- use app\model\MaterialCase;
- use app\model\Housetype;
- use app\model\Decostyle;
- use app\model\Setting;
- class Designer extends Base
- {
- /**
- * 设计师列表
- */
- public function list()
- {
- $token = $this->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' => '操作成功']);
- }
- }
|