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)]); } }