123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- namespace app\client\controller;
- use app\event\FootPrints;
- use app\model\DesignerReserve;
- use app\model\Footprints as FootprintsModel;
- use app\model\Employee;
- use app\model\Org;
- use app\model\User;
- use app\event\Msg;
- use app\model\Designer as DesignerModel;
- use think\facade\Request;
- use app\model\MaterialCase;
- class Designer extends Base
- {
- /**
- * 设计师预约
- */
- public function designer_make()
- {
- $token = request()->token;
- if ($token['isEmployee']) {
- return json(['code' => 1, 'data' => '员工无法预约', 'msg' => '员工无法预约']);
- }
- $param = Request::only(['designer_id' => '', 'designer_name' => '']);
- if (empty($param['designer_id'])) return json(['code' => 1, 'data' => '未选择设计师', 'msg' => '未选择设计师']);
- $w[] = ['uid', '=', $token['uid']];
- $w[] = ['pipe_type', '=', 'designer'];
- $had = FootprintsModel::where($w)->whereRaw('reg_info->"$.id" = ' . (int)$param['designer_id'])->whereRaw('reg_info->"$.share_pipe_type" != ""')->count();
- if ($had) {
- return json(['code' => 1, 'data' => '已经预约', 'msg' => '已经预约']);
- }
- // 设计师信息获取
- $w3[] = ['id', '=', $param['designer_id']];
- $w3[] = ['root_id', '=', $token['root_org']];
- $data = Employee::where($w3)->field('name title,id,show,root_id')->findOrEmpty();
- $data['share_pipe_type'] = 'designer';
- $data['share_data_id'] = $param['designer_id'];
- // 如果有分享人
- if (isset($token['share_employee'])) {
- // 添加足迹
- event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $data, 'designer'));
- // 获取当前人的昵称
- $w1[] = ['id', '=', $token['uid']];
- $w1[] = ['root_id', '=', $token['root_org']];
- $username = User::where($w1)->value('nickname');
- // 获取分享人id
- $w2[] = ['id', '=', $token['share_employee']];
- $w2[] = ['root_id', '=', $token['root_org']];
- $employeeId = Employee::where($w2)->value('id');
- //预约设计师获客线索提醒:*** 预约了 **** 设计师,请跟进沟通
- $new = $username . '预约了' . $param['designer_name'] . '设计师,请及时跟进';
- event(new Msg($employeeId, $new, 'designer'));
- }
- $designer_data['designer_id'] = $param['designer_id'];
- $designer_data['uid'] = $token['uid'];
- $designer_data['employee_id'] = $employeeId ?? 0;
- $designer_data['pipe_type'] = 'designer';
- $designer_data['data_id'] = $param['designer_id'];
- $designer_data['root_id'] = $token['root_org'];
- DesignerReserve::create($designer_data);
- return json(['code' => 0, 'data' => '预约成功', 'msg' => '预约成功']);
- }
- /**
- * 设计师详情
- */
- public function designer_read()
- {
- $token = request()->token;
- $id = Request::param('id');
- if (empty($id)) return json(['code' => 0, 'data' => []]);
- $w[] = ['id', '=', $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']);
- }])->where($w)->field('name title,id,show,id designer_id,root_id,image_photo')->findOrEmpty();
- if ($data->isEmpty()) return json(['code' => 0, 'data' => []]);
- $cw[] = ['designer_id', '=', $data->id];
- $cw[] = ['del', '=', 0];
- $cw[] = ['publish', '=', 1];
- $data->caseCount = MaterialCase::where($cw)->count();
- //是否预约
- $w1[] = ['uid', '=', $token['uid']];
- $w1[] = ['pipe_type', '=', 'designer'];
- $data->make = FootprintsModel::where($w1)->whereRaw('reg_info->"$.id" = ' . (int)$data->id)->whereRaw('reg_info->"$.share_pipe_type" != ""')->count() ? 1 : 0;
- if (!empty($token['uid']) && !$token['isEmployee']) {
- event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $data, 'designer'));
- }
- return json(['code' => 0, 'data' => $data]);
- }
- /**
- * 设计师案例列表
- */
- public function designer_case_list()
- {
- $token = request()->token;
- $param = Request::only(['id' => 0, 'page' => 1, 'limit' => 15]);
- $w[] = ['designer_id', '=', $param['id']];
- $w[] = ['root_id', '=', $token['root_org']];
- $w[] = ['del', '=', 0];
- $w[] = ['publish', '=', 1];
- $list = MaterialCase::where($w)->with(['community' => function ($query) {
- $query->bind(['community_name' => 'name']);
- }, 'designer' => function ($query) {
- $query->bind(['designer_name' => 'name']);
- }, 'decostyle' => function ($query) {
- $query->bind(['decostyle_name' => 'name']);
- }, 'housetype'])->field('id,title,id,cover_img,shared_times,desc,square,community_id,designer_id,style_id,housetype_id,housetype_type,vr_case')->order('addtime desc,view_times desc')->page($param['page'], $param['limit'])->select();
- $list = $list->append(['housetype.name'])->toArray();
- foreach($list as &$item){
- $item['housetype_name'] = $item['housetype']['name'];
- unset($item['housetype']);
- }
- $count = MaterialCase::where($w)->count();
- return json(['code' => 0, 'data' => $list, 'count' => $count]);
- }
- /**
- * 设计师部门列表
- */
- public function designer_org()
- {
- $token = request()->token;
- $where = [
- ['path', 'like', $token['root_org'] . '-%'],
- ['org_type','=',2],
- ['status','=',1]
- ];
- $data = Org::where($where)->column('id,name,pid');
- //查询部门设计师人数
- $employee = Employee::where([['uid', '<>', 0], ['root_id', '=', $token['root_org']], ['state', '=', '在职']])->group('org_id')->column('count(id)','org_id');
- foreach($data as &$val){
- $val['employee_count'] = isset($employee[$val['id']]) ? $employee[$val['id']] : 0 ;
- }
- $new_arr = [];
- $persons = [];
- foreach($data as &$v){
- $children = tree($data, $v['id'], $persons);
- $v['children'] = array_merge_recursive($children,$persons);
- if (empty($v['children'])) $v['disabled']=true;
- $new_arr[] =$v;
- }
- return json(['code' => 0, 'data' => $new_arr]);
- }
- /**
- * 设计师列表
- */
- public function index()
- {
- $token = request()->token;
- $param = Request::only(['page' => 1, 'limit' => 10, 'keyword' => '', 'at' => '', 'house' => '', 'org_id' => '']);
- if(!empty($param['org_id'])) {
- $orgs = [$param['org_id']];
- }else{
- $orgs = Org::where([['path', 'like', $token['root_org'] . '-%'], ['org_type', '=', 2]])->column('id');
- }
-
- if (!empty($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);
- }])->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']);
- //是否预约
- $list[$k]['make'] = 0;//FootprintsModel::where([['uid', '=', $token['uid']], ['pipe_type', '=', 'designer']])->whereRaw('reg_info->"$.id" = ' . (int)$v['id'])->whereRaw('reg_info->"$.share_pipe_type" != ""')->count() ? 1 : 0;
- }
- }
- return json(['code' => 0, 'data' => $list, 'count' => $count]);
- }
- }
|