123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777 |
- <?php
- namespace app\sys\controller;
- use think\facade\View;
- use think\facade\Request;
- use app\logics\Activity as Logic;
- use app\model\Activity as ModelActivity;
- use app\model\ActivityCustomerExportLog;
- use app\model\Footprints;
- use think\facade\Db;
- use app\model\Employee;
- use app\model\Customer;
- use app\model\Org;
- use app\model\Permission;
- use app\model\Grant;
- use app\model\CustomerVisitLog;
- class Activity
- {
- /**
- * 列表
- */
- public function list()
- {
- if (!Request::isAjax()) {
- $eid = ModelActivity::where([['del', '=', 0], ['root_id', '=', request()->employee->root_id], ['employee_id', '>', 0]])->group('employee_id')->column('employee_id');
- $where = [
- ['id', 'in', $eid],
- ['grant_id', '>', 0],
- ['root_id', '=', request()->employee->root_id]
- ];
- // 运营人员列表
- $employee = Employee::where($where)->field(['id', 'opt_name as name'])->select()->toArray();
- View::assign('employee', $employee);
- return View::fetch();
- }
- $param = Request::only(['page', 'limit', 'keyword', 'date', 'employee_id']);
- $where = [
- ['del', '=', 0],
- ['root_id', '=', request()->employee->root_id]
- ];
- if (!empty($param['date'])) {
- $dates = explode(' - ', $param['date']);
- $where[] = ['start_date', '>=', "$dates[0]"];
- $where[] = ['end_date', '<=', "$dates[1]"];
- }
- if (!empty($param['keyword'])) {
- $where[] = ['title', 'like', '%' . $param['keyword'] . '%'];
- }
- if (!empty($param['employee_id'])) {
- $where[] = ['employee_id', '=', $param['employee_id']];
- }
- $list = ModelActivity::with(['employee'])->where($where)->page($param['page'], $param['limit'])->field('*,end_date timestate')->order('addtime desc')->select()->toArray();
- $aids = [];
- foreach ($list as &$val) {
- $val['arr_qrcode_employee_id'] = [];
- if (!empty($val['qrcode_employee_id'])) {
- $allid = explode(',', $val['qrcode_employee_id']);
- $val['arr_qrcode_employee_id'] = $allid;
- foreach ($allid as $k => $v) {
- $aids[] = $v;
- }
- }
- }
- $qrcode = Employee::where([['id', 'in', array_unique($aids)]])->column('name', 'id');
- //$qrcode = Employee::where([['id', 'in', array_column($list, 'qrcode_employee_id')]])->column('name', 'id');
- foreach ($list as $k => $v) {
- $qrcode_name = '';
- foreach ($qrcode as $r => $e) {
- if (in_array($r, $v['arr_qrcode_employee_id'])) {
- $qrcode_name .= $e . ',';
- }
- }
- $list[$k]['qrcode_name'] = isset($qrcode_name) ? trim($qrcode_name, ',') : '';
- }
- $count = ModelActivity::where($where)->count();
- //邀约客户
- if ($list) {
- $aids = array_column($list, 'id');
- $v_where[] = ['state', 'in', CustomerVisitLog::changeState('预约活动', 'chaos')];
- $v_where[] = ['aid', 'in', $aids];
- $footprints = CustomerVisitLog::withJoin('customer')->where([
- ['customer_visit_log.state', 'in', CustomerVisitLog::changeState('预约活动', 'chaos')],
- ['customer_visit_log.aid', 'in', $aids]
- ])->group('customer_visit_log.aid,customer_visit_log.customer_id')->column('customer_visit_log.aid as aid,customer_visit_log.customer_id as customer_id');
- $arr = [];
- foreach ($footprints as $k => $v) {
- $arr[$v['aid']] = isset($arr[$v['aid']]) ? $arr[$v['aid']] += 1 : 1;
- }
- foreach ($list as $k => $v) {
- $list[$k]['user_count'] = isset($arr[$v['id']]) ? $arr[$v['id']] : 0;
- }
- }
- return json(['code' => 0, 'data' => $list, 'count' => $count, 'msg' => '获取成功']);
- }
- /**
- * 添加视图
- */
- public function add()
- {
- if (request()->isAjax()) return $this->addActivity();
- $root_id = request()->employee->root_id;
- //扫码人员
- $employee = Employee::where([['uid', '>', 0], ['state', '=', '在职'], ['root_id', '=', $root_id]])->column('id,name');
- View::assign('employee', $employee);
- return View::fetch();
- }
- /**
- * 添加活动
- */
- public function addActivity()
- {
- $data = Request::only(['title', 'content', 'type', 'cover', 'money', 'start_date', 'end_date', 'wxmch', 'cate', 'poster', 'address', 'qrcode_employee_id']);
- $data['root_id'] = request()->employee->root_id;
- $data['employee_id'] = request()->employee->id;
- if ($data['start_date'] > $data['end_date']) return json(['code' => 1, 'msg' => '开始日期需在结束日期之前']);
- $data['qrcode_employee_id'] .= ',';
- ModelActivity::insert($data);
- return json(['code' => 0, 'msg' => '添加成功']);
- }
- /**
- * 修改视图
- */
- public function edit($id)
- {
- $edit = (new ModelActivity())->where([
- 'id' => $id, 'root_id' => request()->employee->root_id
- ])->find();
- $edit->coverc = $edit->getData('cover');
- $edit->posterc = $edit->getData('poster');
- View::assign('data', $edit);
- $root_id = request()->employee->root_id;
- //扫码人员
- $employee = Employee::where([['uid', '>', 0], ['state', '=', '在职'], ['root_id', '=', $root_id]])->column('id,name');
- View::assign('employee', $employee);
- return View::fetch();
- }
- //获取扫码人员
- public function get_qrcode_employee()
- {
- $data = Request::only(['id']);
- if (!empty($data['id'])) {
- $actdata = ModelActivity::where([
- 'id' => $data['id'], 'root_id' => request()->employee->root_id
- ])->find();
- } else {
- $actdata = ModelActivity::where([
- ['root_id', '=', request()->employee->root_id], ['qrcode_employee_id', '<>', 0], ['qrcode_employee_id', '<>', '']
- ])->order('id desc')->find();
- }
- $arr_qrcode_emp = [];
- if (!empty($actdata['qrcode_employee_id'])) {
- $arr_qrcode_emp = explode(',', $actdata['qrcode_employee_id']);
- }
- $employee = Employee::where([['uid', '>', 0], ['state', '=', '在职'], ['root_id', '=', request()->employee->root_id]])->field('id,name')->select()->toArray();
- foreach ($employee as &$val) {
- $val['isshow'] = 0;
- if (in_array($val['id'], $arr_qrcode_emp)) {
- $val['isshow'] = 1;
- }
- }
- return json(['code' => 0, 'msg' => '获取成功', 'data' => $employee]);
- }
- /**
- * 添加活动
- */
- public function editActivity()
- {
- $data = Request::only(['id', 'title', 'content', 'type', 'cover', 'money', 'start_date', 'end_date', 'wxmch', 'ycover', 'yposter', 'poster', 'address', 'cate', 'qrcode_employee_id']);
- // if ($data['type'] == 1) $data['money'] = 0;
- if ($data['start_date'] > $data['end_date']) return json(['code' => 1, 'msg' => '开始日期需在结束日期之前']);
- $data['qrcode_employee_id'] .= ',';
- // if (!isset($data['cover']) && ) {unset($data['cover']);}
- // if (!$data['poster'] && isset($data['poster'])) {unset($data['poster']);}
- $obj = (new ModelActivity())->where(['id' => $data['id'], 'root_id' => request()->employee->root_id])->find();
- if (empty($obj)) return json(['code' => 1, 'msg' => '数据不存在']);
- $obj->save($data);
- return json(['code' => 0, 'msg' => '修改成功']);
- }
- /**
- * 是否展示
- */
- public function show($id)
- {
- $obj = (new ModelActivity())->where(['id' => $id, 'root_id' => request()->employee->root_id])->find();
- if (empty($obj)) return json(['code' => 1, 'msg' => '数据不存在']);
- $obj->show = $obj->show == 1 ? 0 : 1;
- $obj->save();
- return json(['code' => 0, 'msg' => '修改成功']);
- }
- /**
- * 删除
- */
- public function del($id)
- {
- (new ModelActivity())->where(['id' => $id, 'root_id' => request()->employee->root_id])->update(['del' => 1]);
- return json(['code' => 0, 'msg' => '删除成功']);
- }
- /*
- * 富文本图片
- */
- public function imgUpload()
- {
- $bindUrl = config('app.ali_oss_bindurl');
- $data = [
- 'src' => 'http://' . $bindUrl . '/' . Request::param('file'),
- 'title' => ''
- ];
- return json(['code' => 0, 'msg' => '', 'data' => $data]);
- }
- /**
- * 活动客户
- */
- public function customer()
- {
- $id = input('id', 0);
- if (!Request::isAjax()) {
- $org = Org::where([['path', 'like', request()->employee->root_id . '-%']])->field('id,name')->select()->toArray();
- View::assign('org', $org);
- View::assign('id', $id);
- //数据统计
- // 活动统计:从员工、基层管理、高层管理的维度统计。
- // 从客户的角度统计:邀约客户、到场客户、领礼品客户、收定、签单等
- $data = [
- 'dd' => CustomerVisitLog::changeState('已到店', 'chaos'),
- 'qd' => CustomerVisitLog::changeState('已签单', 'chaos'),
- 'jd' => CustomerVisitLog::changeState('已交定', 'chaos'),
- 'dc' => CustomerVisitLog::changeState('已到场', 'chaos'),
- 'yy' => CustomerVisitLog::changeState('预约活动', 'chaos'),
- ];
- foreach ($data as $k => $value) {
- $rs = CustomerVisitLog::withJoin('customer')->where([
- ['customer_visit_log.aid', '=', $id],
- ['customer.org_id', 'in', array_column($org, 'id')],
- ['customer_visit_log.state', 'in', $value]
- ])->group('customer_visit_log.customer_id')->field('customer_visit_log.customer_id')->column('customer_visit_log.customer_id');
- $data[$k] = count($rs);
- }
- view::assign('data', $data);
- View::assign('id', $id);
- View::assign('cate', input('cate') ?? 0);
- return View::fetch();
- }
- $param = request()->param(['type'=>0, 'org'=>'', 'page'=>1, 'limit'=>30]);
- // 数据导出
- $w[] = ['aid', '=', $id];
- $type = ['预约活动', '已到店', '确认到场', '交定', '签单'];
- $w[] = CustomerVisitLog::changeState(['state', '=', $type[$param['type']]]);
- $cidList = CustomerVisitLog::where($w)->group('customer_id')->column('max(addtime)', 'customer_id');
- $aw[] = ['id', 'in', array_keys($cidList)];
- if (isset($param['org']) && !empty($param['org'])) {
- $ew[] = ['root_id', '=', request()->employee->root_id];
- $ew[] = ['org_id', '=', $param['org']];
- $eids = Employee::where($ew)->column('id');
- $aw[] = ['employee_id|designer_id', 'in', $eids];
- }
- $count = Customer::where($aw)->count();
- $res = Customer::with(['User', 'employee', 'org'])->where($aw)->order('revisit_time desc,id desc')->visible(['id', 'state', 'revisit_time', 'name', 'User.headimgurl', 'sex', 'community_name', 'level', 'employee.name', 'employee_id', 'org_name'])->order('id desc')->page($param['page'], $param['limit'])->select()->toArray();
- foreach($res as &$v){
- $v['invis_time'] = $cidList[$v['id']];
- $v['e_name'] = isset($v['employee']) ? $v['employee']['name'] : '';
- }
- return json(['code' => 0, 'data' => $res, 'count' => $count, 'msg' => '获取成功']);
- }
- //排行榜
- public function ranking()
- {
- $id = input('id', 0);
- view::assign('id', $id);
- $org = Org::where([['path', 'like', request()->employee->root_id . '-%']])->field('id,name,level')->order('path asc')->select()->toArray();
- view::assign('org', $org);
- // 活动统计:从员工、基层管理、高层管理的维度统计。
- // 从客户的角度统计:邀约客户、到场客户、领礼品客户、收定、签单等
- $token = request()->employee;
- // $tw[] = ['aid','=',$id];
- // if ($token->is_manager==1) {//查看全公司数据
- $org = Org::where([['path', 'like', $token->root_id . '-%']])->column('id');
- $tw[] = ['org_id', 'in', $org];
- $eids = Employee::where($tw)->column('id');
- $w[] = ['employee_id', 'in', $eids];
- // }elseif ($token->is_manager) {//管理员查看部门数据
- // }else{//员工查看个人数据
- // $w[] = ['employee_id','=',$token->id];
- // }
- $w[] = ['aid', '=', $id];
- $data['yy'] = $data['dc'] = $data['jd'] = $data['qd'] = 0;
- $res = CustomerVisitLog::where($w)->field('state')->select()->toArray();
- foreach ($res as $k => $v) {
- if ($v['state'] == '预约活动') {
- $data['yy'] += 1;
- } elseif ($v['state'] == '已到场') {
- $data['dc'] += 1;
- } elseif ($v['state'] == '已交定') {
- $data['jd'] += 1;
- } elseif ($v['state'] == '已签单') {
- $data['qd'] += 1;
- }
- }
- view::assign('data', $data);
- return View::fetch();
- }
- //排行榜数据
- public function ranking_list()
- {
- $param = input('');
- if ($param['cate'] == 2) {
- $data = $this->ranking_org($param);
- } else {
- $data = $this->ranking_person($param);
- }
- return $data;
- }
- /*
- * 公司/团队 排行榜
- * auth kjl
- * date 2022/01/11
- * type 从活动客户状态分为:邀约、到场、收定、签单
- * cate 0公司排行,2部门排行
- */
- public function ranking_person($data)
- {
- $token = request()->employee;
- $param = $data;
- //0邀约,1到场,2交定,3签单
- if ($param['type'] == 1) {
- $cw[] = CustomerVisitLog::changeState(['state', '=', '确认到场']);
- } elseif ($param['type'] == 2) {
- $cw[] = CustomerVisitLog::changeState(['state', '=', '交定']);
- } elseif ($param['type'] == 3) {
- $cw[] = CustomerVisitLog::changeState(['state', '=', '签单']);
- } else {
- $cw[] = CustomerVisitLog::changeState(['state', '=', '预约活动']);
- }
- $w[] = ['root_id', '=', $token->root_id];
- if ($param['cate'] == 2) {
- $w[] = ['org_id', '=', $token->org_id];
- } elseif ($param['cate'] == 0 && $param['org']) {
- $w[] = ['org_id', '=', $param['org']];
- }
- $w[] = ['state', '=', '在职'];
- $w[] = ['uid', '>', 0];
- $eid = Employee::with(['org'])->where($w)->visible(['org_id', 'name', 'id', 'org.name'])->select()->toArray();
- $cw[] = ['employee_id', 'in', array_column($eid, 'id')];
- $cw[] = ['aid', '=', $param['id']];
- $list = CustomerVisitLog::where($cw)->group('employee_id,customer_id')->field('employee_id,customer_id')->select()->toArray();
- $res = [];
- foreach ($list as $k => $v) {
- $res[$v['employee_id']] = isset($res[$v['employee_id']]) ? $res[$v['employee_id']] += 1 : 1;
- }
- foreach ($eid as $k2 => $v2) {
- $eid[$k2]['count'] = isset($res[$v2['id']]) ? $res[$v2['id']] : 0;
- }
- array_multisort(array_column($eid, 'count'), SORT_DESC, $eid);
- $count = count($eid);
- $eid = array_slice($eid, ($param['page'] - 1) * $param['limit'], $param['limit']);
- foreach ($eid as $k3 => $v3) {
- $eid[$k3]['ranking'] = ($param['page'] - 1) * $param['limit'] + 1 + $k3;
- $eid[$k3]['org'] = $v3['org'] ? $v3['org']['name'] : '';
- }
- return json(['code' => 0, 'data' => $eid, 'count' => $count, 'msg' => '获取成功']);
- }
- /*
- * 团队排行榜
- * auth kjl
- * date 2022/01/11
- * id活动id,type邀约,到访,收订,签单,eid,p,pagesize,org_id
- */
- public function ranking_org($data)
- {
- $token = request()->employee;
- $param = $data;
- //0邀约,1到场,2交定,3签单
- if ($param['type'] == 1) {
- $cw[] = CustomerVisitLog::changeState(['state', '=', '已到场']);
- } elseif ($param['type'] == 2) {
- $cw[] = CustomerVisitLog::changeState(['state', '=', '已交定']);
- } elseif ($param['type'] == 3) {
- $cw[] = CustomerVisitLog::changeState(['state', '=', '已签单']);
- } else {
- $cw[] = CustomerVisitLog::changeState(['state', '=', '预约活动']);
- }
- $org = Org::where([['path', 'like', $token->root_id . '-%']])->field('name,id')->select()->toArray();
- $eids = Employee::where([['root_id', '=', $token['root_id']], ['state', '=', '在职'], ['uid', '>', 0]])->column('org_id', 'id');
- $cw[] = ['employee_id', 'in', array_keys($eids)];
- $cw[] = ['aid', '=', $param['id']];
- $list = CustomerVisitLog::with(['employee'])->where($cw)->group('employee_id,customer_id')->visible(['org_id', 'customer_id', 'employee.org_id'])->select()->toArray();
- $res = [];
- foreach ($list as $k => $v) {
- $res[$v['employee']['org_id']] = isset($res[$v['employee']['org_id']]) ? $res[$v['employee']['org_id']] += 1 : 1;
- }
- foreach ($org as $k2 => $v2) {
- $org[$k2]['count'] = isset($res[$v2['id']]) ? $res[$v2['id']] : 0;
- }
- array_multisort(array_column($org, 'count'), SORT_DESC, $org);
- $count = count($res);
- $org = array_slice($org, ($param['page'] - 1) * $param['limit'], $param['limit']);
- foreach ($org as $k3 => $v3) {
- $org[$k3]['org'] = $v3['name'];
- $org[$k3]['ranking'] = ($param['page'] - 1) * $param['limit'] + 1 + $k3;
- }
- return json(['code' => 0, 'data' => $org, 'count' => $count, 'msg' => '获取成功']);
- }
- /*
- * 手动结束
- * auth kjl
- * date 2022/04/07
- * id活动id
- */
- public function end($id)
- {
- $info = ModelActivity::where('id', $id)->find()->toArray();
- $date = $info['end_date'] > date('Y-m-d', strtotime('-1 day')) ? date('Y-m-d', strtotime('-1 day')) : $info['end_date'];
- ModelActivity::where('id', $id)->update(['end_date' => $date]);
- return json(['code' => 0, 'data' => '', 'msg' => '修改成功']);
- }
- /**
- * 部门人员树
- * @param $data
- * @param int $pid
- * @param $persons
- * @return array
- */
- public function tree($data, $pid = 0, $persons)
- {
- $new_arr = [];
- foreach ($data as $k => $v) {
- if ($v['pid'] == $pid) {
- $persions = isset($persons[$v['id']]) ? $persons[$v['id']] : [];
- $children = $this->tree($data, $v['id'], $persons);
- $v['children'] = array_merge_recursive($children, $persions);
- if (empty($v['children'])) $v['disabled'] = true;
- $new_arr[] = $v;
- }
- }
- return $new_arr;
- }
- /**
- * 指派人员
- * @param $id
- */
- public function get_person($id)
- {
- $ids = input('id', '');
- $root_id = request()->employee->root_id;
- $keyword = input('keyword', '');
- //所有员工
- $w1[] = ['root_id', '=', $root_id];
- $w1[] = ['state', '=', '在职'];
- $w1[] = ['org_id', '>', 0];
- $w1[] = ['uid', '>', 0];
- if ($keyword) {
- $w1[] = ['name', 'like', '%' . $keyword . '%'];
- }
- $employee = Employee::where($w1)->field('id,name title,org_id,is_manager')->order('is_manager desc,id desc')->select()->toArray();
- if ($ids) {
- $ids = explode(',', $ids);
- foreach ($employee as $k => &$v) {
- $v['selected'] = in_array($v['id'], $ids);
- $v['children'] = [];
- $v['title'] = $v['is_manager'] ? $v['title'] . '(负责人)' : $v['title'];
- $v['org_class'] = 'org_' . $v['org_id'];
- $v['per_class'] = 'per_' . $v['id'];
- $v['type'] = 'per';
- }
- } else {
- foreach ($employee as $k => &$v) {
- $v['selected'] = false;
- $v['children'] = [];
- $v['all_count'] = 0;
- $v['title'] = $v['is_manager'] ? $v['title'] . '(负责人)' : $v['title'];
- $v['org_class'] = 'org_' . $v['org_id'];
- $v['per_class'] = 'per_' . $v['id'];
- $v['type'] = 'per';
- }
- }
- $persons = [];
- foreach ($employee as $k => $v1) {
- $persons[$v1['org_id']][] = $v1;
- }
- $where = [
- ['path', 'like', $root_id . '-%'],
- ['status', '=', 1]
- ];
- $count = Employee::where([['root_id', '=', $root_id], ['state', '=', '在职'], ['uid', '>', 0]])->group('org_id')->column('count(*) count', 'org_id');
- $allnodes = Org::where($where)->field('id,pid,name title,level,org_type,info,path')->order('level asc, id asc')->select()->toarray();
- foreach ($allnodes as $k => $v) {
- $allnodes[$k]['count'] = isset($count[$v['id']]) ? $count[$v['id']] : 0; //本部门人数
- $allnodes[$k]['all_count'] = 0; //包含子部门总数
- $allnodes[$k]['org_class'] = 'org_' . $v['id'];
- $allnodes[$k]['per_class'] = 'per_org_' . $v['id'];
- $allnodes[$k]['type'] = 'org';
- foreach ($allnodes as $k2 => $v2) {
- if (strpos($v2['path'], $v['path']) !== false) {
- $allnodes[$k]['all_count'] = isset($count[$v2['id']]) ? $count[$v2['id']] + $allnodes[$k]['all_count'] : $allnodes[$k]['all_count'];
- }
- }
- $allnodes[$k]['title'] = $allnodes[$k]['title'] . ' (' . $allnodes[$k]['all_count'] . ')';
- }
- $tree = $this->tree($allnodes, 0, $persons);
- $info = ModelActivity::where(['root_id' => request()->employee->root_id, 'id' => $id])->value('assign_employee');
- return json(['code' => 0, 'data' => $tree, 'checkOrg' => $info]);
- }
- /**
- * 活动指派
- */
- public function activity_assign()
- {
- if (!request()->isAjax()) {
- $id = input('id', '', 'intval');
- View::assign('id', $id);
- $assign_employee = ModelActivity::where(['root_id' => request()->employee->root_id, 'id' => $id])->value('assign_employee');
- $count = $assign_employee ? count(explode(',', $assign_employee)) : 0;
- view::assign('count', $count);
- return View::fetch();
- }
- $id = input('id', '', 'intval');
- $pid = input('pid', '', 'trim'); //多选框选中id
- $type = input('type', '', 'trim'); //选中类型,人/部门
- $res = input('res', '', 'trim'); //选择结果 1选中,0取消
- $data = [];
- $assign_employee = ModelActivity::where(['root_id' => request()->employee->root_id, 'id' => $id])->value('assign_employee');
- $a = 0;
- if ($type == 'per' && $pid) {
- $data[] = 'per_' . $pid;
- $pid = [$pid];
- $a = 1;
- } elseif ($type == 'org' && $pid) {
- $data[] = 'org_' . $pid;
- $org = Org::where([['id', '=', $pid]])->value('path');
- $orgs = Org::where([['path', 'like', $org . '%']])->column('id');
- $pid = Employee::where([['root_id', '=', request()->employee->root_id], ['org_id', 'in', $orgs], ['state', '=', '在职'], ['uid', '>', 0]])->order('is_manager desc,id desc')->column('id');
- $a = 1;
- foreach ($pid as $v) {
- $data[] = 'per_' . $v;
- }
- foreach ($orgs as $v2) {
- $data[] = 'org_' . $v2;
- }
- }
- $assign_employee = explode(',', $assign_employee);
- if ($a) {
- $arr = array_filter(array_diff($assign_employee, $pid));
- $arr = $res ? array_merge($pid, $arr) : $arr;
- $arr = array_unique($arr);
- //过滤运营人员,旧bug导致选择根部门时,运营人员也会在内
- $arr = Employee::where([['id', 'in', $arr], ['uid', '>', 0], ['state', '=', '在职']])->column('id');
- //查询指派人的组织
- $employee_org = Employee::where('id', 'in', $arr)->group('org_id')->column('org_id');
- $employee_org = implode(',', $employee_org);
- ModelActivity::where(['root_id' => request()->employee->root_id, 'id' => $id])->update(['assign_org_id' => $employee_org, 'assign_employee' => implode(',', $arr)]);
- }
- return json(['code' => 0, 'data' => $data]);
- }
- /*
- * 指派展示列表
- */
- public function activity_assign_list()
- {
- $id = input('id', '', 'intval');
- $page = input('page', 1, 'intval');
- $limit = input('limit', 10, 'intval');
- $keyword = input('keyword', '', 'trim');
- if ($keyword) {
- $w[] = ['name', 'like', '%' . $keyword . '%'];
- }
- $arr = ModelActivity::where(['root_id' => request()->employee->root_id, 'id' => $id])->value('assign_employee');
- $arr = $arr ? explode(',', $arr) : [];
- $w[] = ['id', 'in', $arr];
- $w[] = ['state', '=', '在职'];
- $w[] = ['uid', '>', 0];
- $data = Employee::with('orgName')->where($w)->visible(['name', 'org_name', 'id', 'is_manager'])->select()->toArray();
- $count = count($data);
- $arr = array_flip($arr);
- foreach ($data as $k => $v) {
- $data[$k]['order'] = $arr[$v['id']];
- }
- array_multisort($data, SORT_ASC, array_column($data, 'order'));
- foreach ($data as $k => $v) {
- $data[$k]['xh'] = $k + 1;
- }
- $data = array_slice($data, ($page - 1) * $limit, $limit);
- return json(['code' => 0, 'data' => $data, 'count' => $count]);
- }
- /**
- * 删除指派
- * @return \think\response\Json
- */
- public function del_assign()
- {
- $id = input('id', '', 'intval');
- $eid = input('eid', '', 'intval');
- if ($id && $eid) {
- if ($eid == -1) {
- ModelActivity::where(['root_id' => request()->employee->root_id, 'id' => $id])->update(['assign_employee' => '', 'assign_org_id' => '']);
- } else {
- $arr = ModelActivity::where(['root_id' => request()->employee->root_id, 'id' => $id])->value('assign_employee');
- $arr = array_filter(array_diff(explode(',', $arr), [$eid]));
- $data = [];
- if (empty($arr)) {
- $data['assign_employee'] = '';
- $data['assign_org_id'] = '';
- } else {
- $data['assign_employee'] = implode(',', $arr);
- $assign_org_id = Employee::where('id', 'in', $arr)->group('org_id')->column('org_id');
- $data['assign_org_id'] = implode(',', $assign_org_id);
- }
- ModelActivity::where(['root_id' => request()->employee->root_id, 'id' => $id])->update($data);
- }
- }
- return json(['code' => 0, 'data' => '取消成功', 'msg' => '取消成功']);
- }
- /**
- * 导出操作
- */
- public function export()
- {
- $param = request()->param(['org', 'type', 'id']);
- $op = request()->employee;
- // 数据导出
- $w[] = ['aid', '=', $param['id']];
- $type = ['预约活动', '已到店', '确认到场', '交定', '签单'];
- $w[] = CustomerVisitLog::changeState(['state', '=', $type[$param['type']]]);
- $cidList = CustomerVisitLog::where($w)->group('customer_id')->column('max(addtime)', 'customer_id');
- $aw[] = ['id', 'in', array_keys($cidList)];
- if ($param['org']) {
- $ew[] = ['root_id', '=', request()->employee->root_id];
- $ew[] = ['org_id', '=', $param['org']];
- $eids = Employee::where($ew)->column('id');
- $aw[] = ['employee_id|designer_id', 'in', $eids];
- }
- $count = Customer::where($aw)->count();
- if ($count == 0) return json(['code' => 1, 'msg' => '没有可导出的数据']);
- $filename = uniqid();
- // 创建导出记录
- $log = [
- 'type' => $param['type'],
- 'org_id' => $param['org'],
- 'root_id' => $op->root_id,
- 'op_employee' => $op->id,
- 'file' => $filename,
- 'activity_id' => $param['id']
- ];
- $log = ActivityCustomerExportLog::create($log);
- json(['code' => 0, 'msg' => '导出中'], 200, ['Content-Type' => 'application/json'])->send();
- $log->state = 1;
- $log->save();
- $res = Customer::with(['User', 'employee', 'org'])->where($aw)->order('revisit_time desc,id desc')->visible(['id', 'state', 'revisit_time', 'name', 'User.headimgurl', 'sex', 'community_name', 'level', 'employee.name', 'employee_id', 'org_name'])->order('id desc')->select()->toArray();
- $title = ['客户姓名', '客户等级', '客户状态', '跟踪人员', '所属部门', '邀约时间'];
- $fp = fopen('../download/' . $filename . '.csv', 'w');
- fputcsv($fp, $title);
- foreach ($res as $v) {
- $row = [
- $v['name'],
- $v['level'],
- $v['state'] ?: '待确认',
- isset($v['employee']['name']) ? $v['employee']['name'] : '',
- $v['org_name'],
- $cidList[$v['id']]
- ];
- fputcsv($fp, $row);
- }
- fclose($fp);
- // 上传oss
- $rs = ossUpload('activityExport/' . $filename . '.csv', '../download/' . $filename . '.csv');
- if (!$rs) {
- trace('文件上传失败', 'error');
- $log->state = -1;
- $log->save();
- } else {
- unlink('../download/' . $filename . '.csv');
- $log->state = 2;
- $log->save();
- }
- }
- /**
- * 导出记录
- */
- public function exportlog($id)
- {
- if (!request()->isAjax()) {
- view::assign('id', $id);
- return View::fetch();
- }
- $op = request()->employee;
- $page = input('page', 1);
- $logs = ActivityCustomerExportLog::with(['employee', 'org'])->where(['root_id' => $op->root_id, 'activity_id' => $id])->order('addtime desc')->page($page, 20)->select();
- $data = [];
- foreach ($logs as $item) {
- $data[] = [
- 'addtime' => $item->addtime,
- 'op' => $item->employee->opt_name ?? '',
- 's' => ($item->org ? $item->org->name . ',' : '') . $item->type,
- 'file' => $item->file,
- 'state' => $item->state
- ];
- }
- $count = ActivityCustomerExportLog::where(['root_id' => $op->root_id, 'activity_id' => $id])->count();
- return json(['code' => 0, 'data' => $data, 'pages' => ceil($count / 20)]);
- }
- }
|