123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730 |
- <?php
- namespace app\api\controller;
- use app\model\Setting;
- use think\facade\Request;
- use app\model\Activity as ActivityModel;
- use app\model\UserCollect;
- use app\model\Footprints;
- use app\model\Customer;
- use app\model\CustomersSubscribe;
- use app\model\CustomerVisitLog;
- use app\model\Org;
- use app\model\Employee;
- use app\model\User;
- use app\model\CustomerTop;
- use app\model\ActivitySign;
- use wx\offiaccount\client\TmpMsg;
- use app\model\WechatActivityIntegral;
- class Activity extends Base
- {
- /*
- * 活动列表
- */
- public function list()
- {
- $token = request()->token;
- $param = Request::only(['page', 'in' => false, 'cate' => '', 'name'=> '']); //cate ''全部,0内场,1外场
- $condition = [['del', '=', 0], ['show', '=', 1], ['root_id', '=', $token['root_org']]];
- if ($param['cate'] !== '') $condition[] = ['cate', '=', $param['cate']];
- if ($param['in']) $condition[] = ['end_date', '>=', date('Y-m-d')];
- if ($param['name']) $condition[] = ['title', 'like', '%'.$param['name'].'%'];
- $employee_id = $token['employee_id'];
- $model = ActivityModel::where($condition)->where(function ($query) use ($employee_id){
- $query->whereRaw("FIND_IN_SET(" . $employee_id . " , assign_employee)")
- ->whereOr('assign_employee', '=', NULL)
- ->whereOr('assign_employee', '=', '');
- });
- $data = $model->field('id , cover , title , start_date , end_date, cate, address,poster')->append(['timestate'])
- ->order(['id' => 'desc'])
- ->select()->toArray();
- $arr[0] = $arr[1] = $arr[2] = [];
- foreach ($data as $k => $v) {
- $arr[$v['timestate']][] = $v;
- }
- $data = array_merge($arr[1], $arr[0], $arr[2]);
- $data = array_slice($data, ($param['page'] - 1) * 6, 6);
- $collectedIds = UserCollect::where(['user_id' => $token['uid'], 'content_type' => 'activity'])->column('content_id');
- foreach ($data as &$item) {
- //是否收藏
- if (in_array($item['id'], $collectedIds)) {
- $item['collected'] = true;
- } else {
- $item['collected'] = false;
- }
- $ali_oss_bindurl = 'https://' . config('app.ali_oss_bindurl') . '/';
- $item['cover'] = str_replace($ali_oss_bindurl, '', $item['cover']);
- }
- return json(['code' => 0, 'data' => $data, 'msg' => '获取成功']);
- }
- public function details($id)
- {
- $token = request()->token;
- $data = ActivityModel::where(['id' => $id, 'del' => 0, 'root_id' => $token['root_org']])->field('id,cover,title,content,type,start_date,end_date,end_date as timestate,view,money,cate,address,poster')->find();
- if (!empty($data['assign_employee'])){
- $assign_employee = explode(',', $data['assign_employee']);
- if (!in_array($token['employee_id'], $assign_employee)){
- return json(['code' => 1, 'data' => [], 'msg' => '获取失败']);
- }
- }
- //是否收藏
- $collectedIds = UserCollect::where(['user_id' => $token['uid'], 'content_type' => 'activity', 'content_id' => $id])->count();
- $data['collected'] = $collectedIds > 0 ? true : false;
- ActivityModel::where('id', $id)->inc('view')->update();
- return json(['code' => 0, 'data' => $data, 'msg' => '获取成功']);
- }
- /*
- * 收藏
- */
- public function collection($id)
- {
- $rs = UserCollect::where(['content_id' => $id, 'user_id' => $this->request->token['uid'], 'content_type' => 'activity'])->count();
- if ($rs > 0) return json(['code' => 1, 'msg' => '您已收藏']);
- UserCollect::insert(['content_id' => $id, 'user_id' => $this->request->token['uid'], 'content_type' => 'activity']);
- return json(['code' => 0, 'msg' => '收藏成功']);
- }
- /**
- * 取消收藏
- */
- public function collectCancel($id)
- {
- $collect = UserCollect::where(['content_id' => $id, 'user_id' => $this->request->token['uid'], 'content_type' => 'activity'])->find();
- if (!$collect) return json(['code' => 1, 'msg' => '取消失败']);
- $collect->delete();
- return json(['code' => 0, 'msg' => '取消收藏']);
- }
- /**
- * 活动邀约邀约客户
- */
- public function invite()
- {
- $token = request()->token;
- $param = $this->request->only(['uid', 'aid', 'date']);
- //重复邀约
- $cw[] = ['pipe_type', '=', 'artivityInvite'];
- $cw[] = ['uid', '=', $param['uid']];
- $check = Footprints::where($cw)->whereRaw('reg_info->"$.aid" = ' . $param['aid'])->order('id desc')->find();
- if ($check) return json(['code' => 0, 'msg' => '重复邀约']);
- $save['uid'] = $param['uid'];
- $save['employee_id'] = $token['employee_id'];
- $save['pipe_type'] = 'artivityInvite';
- $json['aid'] = (int)$param['aid'];
- $json['state'] = '已邀约';
- $json['date'] = $param['date'];
- $save['reg_info'] = json_encode($json);
- Footprints::insert($save);
- return json(['code' => 0, 'msg' => '邀约成功']);
- }
- /*
- * crm客户跟进页面预约活动列表
- */
- public function activity_list()
- {
- $param = $this->request->only(['p', 'pagesize', 'cate' => '']);
- $token = request()->token;
- if ($param['cate'] !== '') $w[] = ['cate', '=', $param['cate']];
- $w[] = ['root_id', '=', $token['root_org']];
- $w[] = ['end_date', '>=', date('Y-m-d')];
- $w[] = ['show', '=', 1];
- $w[] = ['del', '=', 0];
- $employee_id = $token['employee_id'];
- $model = ActivityModel::where($w)->where(function ($query) use ($employee_id){
- $query->whereRaw("FIND_IN_SET(" . $employee_id . " , assign_employee)")
- ->whereOr('assign_employee', '=', NULL)
- ->whereOr('assign_employee', '=', '');
- });
- $res = $model->field('id,title,start_date,end_date')->select()->toArray();
- return json(['code' => 0, 'data' => $res, 'msg' => '获取成功']);
- }
- /**
- * 已预约活动客户列表
- */
- public function invite_list()
- {
- $param = $this->request->only(['type' => '预约活动', 'p' => 1, 'pagesize' => 10, 'aid']);
- $token = request()->token;
- // 检测活动是否是该公司的
- $is = ActivityModel::where(['root_id' => $token['root_org'], 'id' => $param['aid']])->count();
- if (!$is) return json(['code' => 0, 'data' => [], 'count' => 0, 'msg' => '获取成功']);
- //只查询我的客户,过滤曾经邀约过当前无效的客户
- $all_customer_id = CustomersSubscribe::where([['aid', '=', $param['aid']], ['employee_id|designer_id', '=', $token['employee_id']]])->column('customer_id');
- $customer_id = Customer::where([['employee_id|designer_id', '=', $token['employee_id']], ['id', 'in', $all_customer_id]])->column('id');
- $condition = [['aid', '=', $param['aid']], ['type', '=', 2], ['employee_id|designer_id', '=', $token['employee_id']]];
- $condition[] = ['customer_id', 'in', $customer_id];
- if ($param['type'] == '已到场') $condition[] = ['state', '=', 1];
- $depositStates = CustomerVisitLog::changeState('已交定', 'chaos');
- $signStates = CustomerVisitLog::changeState('已签单', 'chaos');
- if ($param['type'] == '已交定' || $param['type'] == '已签单') {
- $states = $param['type'] == '已交定' ? $depositStates : $signStates;
- $idlist = CustomersSubscribe::where($condition)->column('customer_id');
- $idlist = CustomerVisitLog::where([
- ['customer_id', 'in', $idlist],
- ['state', 'in', $states]
- ])->group('customer_id')->column("customer_id");
- $condition[] = ['customer_id', 'in', $idlist];
- }
- $count = CustomersSubscribe::where($condition)->group('customer_id')->count();
- //置顶数据
- $top_ids = CustomersSubscribe::where($condition)->column('customer_id');
- $top = CustomerTop::where([['customer_id', 'in', $top_ids]])->column('customer_id');
- $field = "*,IF(customer_id in ('" . implode('\',\'', $top) . "'),1,0) as orders";
- $res = CustomersSubscribe::where($condition)->field($field)->order('orders desc,id asc')->group('customer_id')->page($param['p'], $param['pagesize'])->select()->toArray();
- $customerIdList = array_column($res, 'customer_id');
- $customers = Customer::where([['id', 'in', $customerIdList], ['died', '<>', 2]])->column('uid,state,name,sex,community_name,level,last_contact_date', 'id');
- $users = User::where([['id', 'in', array_column($customers, 'uid')]])->column('headimgurl', 'id');
- $logs = CustomerVisitLog::where([
- ['customer_id', 'in', $customerIdList],
- ['state', 'in', array_merge($depositStates, $signStates)]
- ])->group('customer_id')->column("
- count(if(state in ('" . implode('\',\'', $signStates) . "'),'1',null)) as sign_num,
- count(if(state in ('" . implode('\',\'', $depositStates) . "'),'1',null)) as deposit_num
- ", "customer_id");
- //统计
- $customersStateList = CustomerVisitLog::where([['customer_id', 'in', $customerIdList]])->group('state,customer_id')->field('count(state) as num, state, customer_id')->select()->toArray();
- $customersState = [];
- foreach ($customersStateList as $s) {
- if (!isset($customersState[$s['customer_id']]))
- $customersState[$s['customer_id']] = ['count' => 0, 'shop' => 0, 'measure' => 0, 'activity' => 0, 'deposit' => 0, 'signed' => 0];
- $customersState[$s['customer_id']]['count'] += $s['num'];
- // 到店,量房,活动,定金,签单
- if ($s['state'] == '已到店') $customersState[$s['customer_id']]['shop'] += $s['num'];
- elseif ($s['state'] == '已量房') $customersState[$s['customer_id']]['measure'] += $s['num'];
- elseif ($s['state'] == '已到场') $customersState[$s['customer_id']]['activity'] += $s['num'];
- elseif ($s['state'] == '已交定') $customersState[$s['customer_id']]['deposit'] += $s['num'];
- elseif ($s['state'] == '已签单') $customersState[$s['customer_id']]['signed'] += $s['num'];
- }
- $data = [];
- foreach ($res as $item) {
- $data[] = [
- 'id' => $item['customer_id'],
- 'state' => Customer::changeState($customers[$item['customer_id']]['state']),
- 'revisit_time' => $item['subscribe_date'],
- 'name' => $customers[$item['customer_id']]['name'],
- 'User' => [
- 'headimgurl' => empty($users[$customers[$item['customer_id']]['uid']]) ? '' : $users[$customers[$item['customer_id']]['uid']]
- ],
- 'sex' => $customers[$item['customer_id']]['sex'],
- 'community_name' => $customers[$item['customer_id']]['community_name'],
- 'level' => $customers[$item['customer_id']]['level'],
- 'sign_num' => isset($logs[$item['customer_id']]['sign_num']) ? $logs[$item['customer_id']]['sign_num'] : 0,
- 'deposit_num' => isset($logs[$item['customer_id']]['sign_num']) ? $logs[$item['customer_id']]['sign_num'] : 0,
- 'stateNum' => isset($customersState[$item['customer_id']]) ? $customersState[$item['customer_id']] : ['count' => 0, 'shop' => 0, 'measure' => 0, 'activity' => 0, 'deposit' => 0, 'signed' => 0],
- 'last_contact_date' => $customers[$item['customer_id']]['last_contact_date'],
- 'addtoptime' => $item['orders']
- ];
- }
- return json(['code' => 0, 'data' => $data, 'count' => $count, 'msg' => '获取成功']);
- }
- /*
- * 公司/团队 排行榜
- * auth kjl
- * date 2022/01/11
- * type 从活动客户状态分为:邀约、到场、收定、签单
- */
- public function ranking_list()
- {
- $token = request()->token;
- $param = $this->request->only(['id' => 0, 'type' => '预约活动', 'is_org' => 0, 'page' => 1, 'limit' => 10]);
- // 检测活动是否是该公司的
- $is = ActivityModel::where(['root_id' => $token['root_org'], 'id' => $param['id']])->count();
- if (!$is) return json(['code' => 0, 'data' => [], 'count' => 0, 'msg' => '获取成功']);
- $param['type'] = $param['type'] == '预约' ? '预约活动' : $param['type'];
- $stateCondition = CustomerVisitLog::changeState($param['type'], 'chaos');
- if ($param['is_org']) {
- $orgIdList = orgSubIds($token['org_id']);
- } else {
- $orgIdList = orgSubIds($token['root_org']);
- }
- $my = [
- 'ranking' => 0,
- 'count' => 0
- ];
- $customerIdFromlog = CustomerVisitLog::where([['aid', '=', $param['id']], ['state', 'in', $stateCondition]])->column('customer_id');
- $customerIdFromlog = array_unique($customerIdFromlog);
- $res = Customer::field('count(id) as count, employee_id')->where([['employee_id', '>', 0], ['id', 'in', $customerIdFromlog], ['org_id', 'in', $orgIdList]])->order('count desc,employee_id asc')->group('employee_id')->page($param['page'], $param['limit'])->select()->toArray();
- $my['count'] = Customer::where([['id', 'in', $customerIdFromlog], ['org_id', 'in', $orgIdList], ['employee_id', '=', $token['employee_id']]])->count();
- // 重复手机号客户
- $customers = Customer::where('id', 'in', $customerIdFromlog)->select()->toArray();
- $phones = [];
- $employee_j = []; // 每个员工要减去的手机号重复客户数量
- foreach ($customers as $k => $v) {
- if (isset($phones[$v['phone']])) {
- if ($v['addtime'] > $phones[$v['phone']]['addtime']) {
- // 建客晚
- if (isset($employee_j[$v['employee_id']])) {
- $employee_j[$v['employee_id']]++;
- } else {
- $employee_j[$v['employee_id']] = 1;
- }
- } else {
- if (isset($employee_j[$phones[$v['phone']]['employee_id']])) {
- $employee_j[$phones[$v['phone']]['employee_id']]++;
- } else {
- $employee_j[$phones[$v['phone']]['employee_id']] = 1;
- }
- $phones[$v['phone']] = ['employee_id' => $v['employee_id'], 'addtime' => $v['addtime']];
- }
- } else {
- $phones[$v['phone']] = ['employee_id' => $v['employee_id'], 'addtime' => $v['addtime']];
- }
- }
- foreach ($res as $k => $v) {
- if (isset($employee_j[$v['employee_id']])) {
- $res[$k]['count'] = ($v['count'] - $employee_j[$v['employee_id']]) > 0 ? $v['count'] - $employee_j[$v['employee_id']] : 0;
- }
- }
- array_multisort(array_column($res, 'count'), SORT_DESC, $res);
- if (isset($employee_j[$token['employee_id']])) {
- $my['count'] = ($my['count'] - $employee_j[$token['employee_id']]) > 0 ? $my['count'] - $employee_j[$token['employee_id']] : 0;
- }
- if ($my['count'] > 0) {
- /*$my['ranking'] = Customer::where([['id', 'in', $customerIdFromlog], ['org_id', 'in', $orgIdList]])
- ->group('employee_id')
- ->having('count(id)>' . $my['count'] . ' or (count(id)=' . $my['count'] . ' and employee_id<=' . $token['employee_id'] . ')')
- ->count();*/
- foreach ($res as $k => $v) {
- if ($v['employee_id'] == $token['employee_id']) {
- $my['ranking'] = $k + 1;
- }
- }
- }
- $count = Customer::where([['id', 'in', $customerIdFromlog]])->group('employee_id')->count();
- $employee = Employee::with(['user'])->where([['id', 'in', array_column($res, 'employee_id')]])->select();
- $employee = $employee->visible(['id', 'name', 'phone', 'state', 'org_id', 'user.headimgurl'])->toArray();
- $employee = array_combine(array_column($employee, 'id'), $employee);
- foreach ($res as $k => &$v) {
- $v['ranking'] = $k + 1;
- $v['name'] = $employee[$v['employee_id']]['name'];
- $v['phone'] = $employee[$v['employee_id']]['phone'];
- $v['state'] = $employee[$v['employee_id']]['state'];
- $v['org_id'] = $employee[$v['employee_id']]['org_id'];
- $v['headimgurl'] = $employee[$v['employee_id']]['user']['headimgurl'];
- }
- $result['data'] = $res;
- $result['my'] = $my;
- return json(['code' => 0, 'data' => $result, 'count' => $count, 'msg' => '获取成功']);
- }
- /*
- * 团队排行榜
- * auth kjl
- * date 2022/01/11
- * id活动id,type邀约,到访,收订,签单,eid,p,pagesize,org_id
- */
- public function org_ranking_list()
- {
- $token = request()->token;
- $param = $this->request->only(['id', 'type' => '预约活动', 'page' => 1, 'limit' => 10]);
- // 检测活动是否是该公司的
- $is = ActivityModel::where(['root_id' => $token['root_org'], 'id' => $param['id']])->count();
- if (!$is) return json(['code' => 0, 'data' => [], 'count' => 0, 'msg' => '获取成功']);
- $param['type'] = $param['type'] == '预约' ? '预约活动' : $param['type'];
- $stateCondition = CustomerVisitLog::changeState($param['type'], 'chaos');
- $orgIdList = orgSubIds($token['root_org']);
- $customerIdFromlog = CustomerVisitLog::where([['aid', '=', $param['id']], ['state', 'in', $stateCondition]])->column('customer_id');
- $customerIdFromlog = array_unique($customerIdFromlog);
- $res = Customer::field('count(id) as count, org_id')->where([['id', 'in', $customerIdFromlog], ['org_id', 'in', $orgIdList]])->order('count desc,org_id asc')->group('org_id')->page($param['page'], $param['limit'])->select()->toArray();
- $my = [
- 'count' => 0,
- 'ranking' => 0
- ];
- $my['count'] = Customer::where([['id', 'in', $customerIdFromlog], ['org_id', '=', $token['org_id']]])->count();
- if ($my['count'] > 0) {
- $my['ranking'] = Customer::where([['id', 'in', $customerIdFromlog], ['org_id', 'in', $orgIdList]])
- ->group('org_id')
- ->having('count(id)>' . $my['count'] . ' or (count(id)=' . $my['count'] . ' and org_id<=' . $token['org_id'] . ')')
- ->count();
- }
- $count = Customer::where([['id', 'in', $customerIdFromlog]])->group('org_id')->count();
- $org = Org::where([['id', 'in', $orgIdList]])->column('name', 'id');
- $my['org_name'] = $org[$token['org_id']];
- foreach ($res as $k => &$v) {
- $v['ranking'] = $k + 1;
- $v['org_name'] = $org[$v['org_id']];
- }
- $result['data'] = $res;
- $result['my'] = $my;
- return json(['code' => 0, 'data' => $result, 'count' => $count, 'msg' => '获取成功']);
- }
- /*
- * 数据统计
- * auth kjl
- * date 2022/04/06
- */
- public function statistics()
- {
- $token = request()->token;
- $id = input('aid', 'a');
- // 检测活动是否是该公司的
- $is = ActivityModel::where(['root_id' => $token['root_org'], 'id' => $id])->count();
- if (!$is) return json(['code' => 0, 'data' => [], 'count' => 0, 'msg' => '获取成功']);
- $data['yy'] = $data['dc'] = $data['jd'] = $data['qd'] = [];
- //只查询我的客户,过滤曾经邀约过当前无效的客户
- $param['aid'] = $id;
- $all_customer_id = CustomersSubscribe::where([['aid', '=', $param['aid']], ['employee_id|designer_id', '=', $token['employee_id']]])->column('customer_id');
- $customer_id = Customer::where([['employee_id|designer_id', '=', $token['employee_id']], ['id', 'in', $all_customer_id]])->column('id');
- $customerIds = CustomersSubscribe::where([['aid', '=', $id], ['employee_id|designer_id', '=', $token['employee_id']], ['type', '=', 2], ['customer_id', 'in', $customer_id]])->group('customer_id')->column('customer_id');
- $dc = CustomersSubscribe::where([['aid', '=', $id], ['employee_id|designer_id', '=', $token['employee_id']], ['state', '=', 1], ['type', '=', 2], ['customer_id', 'in', $customer_id]])->field('customer_id')->group('customer_id')->count();
- $depositStates = CustomerVisitLog::changeState('已交定', 'chaos');
- $signStates = CustomerVisitLog::changeState('已签单', 'chaos');
- $jd = CustomerVisitLog::where([['customer_id', 'in', $customerIds], ['state', 'in', $depositStates]])->field('customer_id')->group('customer_id')->count();
- $qd = CustomerVisitLog::where([['customer_id', 'in', $customerIds], ['state', 'in', $signStates]])->field('customer_id')->group('customer_id')->count();
- $data['yy'] = count($customerIds);
- $data['dc'] = $dc;
- $data['jd'] = $jd;
- $data['qd'] = $qd;
- return json(['code' => 0, 'data' => $data, 'msg' => '获取成功']);
- }
- /*
- * 活动报名二维码列表
- * auth kjl
- * date 2022/10/03
- */
- public function getQrcodeList()
- {
- $token = request()->token;
- $param = Request()->only(['page' => 1, 'limit' => 10, 'date' => '', 'org_id' => 0, 'keyword' => '', 'aid' => 0, 'type' => '']);
- $where[] = ['root_id', '=', $token['root_org']];
- //查询扫码人员
- $w[] = ['show', '=', 1];
- $w[] = ['del', '=', 0];
- //$w[] = ['qrcode_employee_id', '=', $token['employee_id']];
- $w[] = ['qrcode_employee_id', 'find in set', $token['employee_id']];
- $aids = ActivityModel::where($w)->column('id');
- if (empty($aids)) return json(['code' => 0, 'data' => [], 'count' => 0, 'msg' => '获取成功']);
- $where[] = ['aid', 'in', $aids];
- if ($param['type'] !== '') $where[] = $query_org[] = ['qrcode_status', '=', $param['type']];
- if ($param['date']) {
- $date = explode(' - ', $param['date']);
- $where[] = $query_org[] = ['qrcode_time', 'between', [$date[0] . ' 00:00:00', $date[1] . ' 23:59:59']];
- }
- if ($param['aid']) $where[] = ['aid', '=', $param['aid']];
- if ($param['org_id']) {
- $uids = Employee::where('org_id', $param['org_id'])->group('uid')->column('uid');
- $where[] = $query_org[] = ['share_uid', 'in', $uids];
- }
- if ($param['keyword']) {
- $query[] = ['phone|nickname', 'like', '%' . $param['keyword'] . '%'];
- $query[] = ['root_id', '=', $token['root_org']];
- $uids = User::where($query)->column('id');
- $where[] = ['uid', 'in', $uids];
- }
- $list = ActivitySign::with(['user' => function ($query) {
- $query->field('id,nickname,phone,headimgurl')->bind(['nickname', 'phone', 'headimgurl']);
- }, 'activity' => function ($query) {
- $query->field('title,id,cate')->bind(['title', 'cate']);
- }, 'employee' => function ($query) {
- $query->field('id,name,org_id')->bind(['name', 'org_id']);
- }])->where($where)->field('uid,qrcode,qrcode_time,aid,addtime,share_employee_id,qrcode_status')->page($param['page'], $param['limit'])->select()->toArray();
- $org_name = Org::where([['id', 'in', array_column($list, 'org_id')]])->column('name', 'id');
- $name = Customer::where([['org_id', 'in', array_keys($org_name)], ['uid', 'in', array_column($list, 'uid')]])->column('name', 'uid');
- foreach ($list as $k => $v) {
- $list[$k]['org_name'] = isset($org_name[$v['org_id']]) ? $org_name[$v['org_id']] : '';
- $list[$k]['nickname'] = isset($name[$v['uid']]) ? $name[$v['uid']] : $v['nickname'];
- }
- $count = ActivitySign::where($where)->count();
- ////统计
- $query = [['root_id', '=', $token['root_org']], ['aid', 'in', $aids]];
- if ($param['aid']) $query[] = ['aid', '=', $param['aid']];
- if (isset($query_org)) $query = array_merge($query, $query_org);
- $top_data['count'] = ActivitySign::where($query)->count();
- $query1[] = ['qrcode_status', '=', 1];
- $top_data['scone_count'] = ActivitySign::where(array_merge($query, $query1))->count();
- $query2[] = ['qrcode_status', '=', 0];
- $top_data['no_scone_count'] = ActivitySign::where(array_merge($query, $query2))->count();
- return json(['code' => 0, 'data' => $list, 'count' => $count, 'top_data' => $top_data, 'msg' => '获取成功']);
- }
- /*
- * 获取有数据的部门列表
- * auth kjl
- * date 2022/10/03
- * 所有的部门属性结构
- */
- public function getOrgList()
- {
- $param = $this->request->only(['keyword' => '']);
- $token = request()->token;
- $where[] = ['path', 'like', $token['root_org'] . '-%'];
- if ($param['keyword']) {
- $where[] = ['name', 'like', '%' . $param['keyword'] . '%'];
- }
- $orgs = Org::where($where)->column('id,pid,name');
- if ($param['keyword']) {
- return json(['code' => 0, 'data' => $orgs, 'msg' => '获取成功']);
- }
- $orgs = tree($orgs, 0, []);
- return json(['code' => 0, 'data' => $orgs, 'msg' => '获取成功']);
- }
- /*
- * crm客户跟进页面预约活动列表
- */
- public function activitySignList()
- {
- $param = $this->request->only(['page' => 1, 'limit' => 10]);
- $token = request()->token;
- //$aids = ActivityModel::where('qrcode_employee_id', $token['employee_id'])->column('id');
- $aids = ActivityModel::where([['qrcode_employee_id', 'like', '%' . $token['employee_id'] . ',%']])->column('id');
- $w[] = ['id', 'in', $aids];
- $w[] = ['root_id', '=', $token['root_org']];
- $w[] = ['show', '=', 1];
- $w[] = ['del', '=', 0];
- $res = ActivityModel::where($w)->field('id,title')->select()->toArray();
- array_unshift($res, ['id' => 0, 'title' => '请选择活动']);
- return json(['code' => 0, 'data' => $res, 'msg' => '获取成功']);
- }
- /*
- * 扫码确认
- */
- public function scanQrcode()
- {
- $param = $this->request->only(['aid' => 0, 'uid' => 0, 'cid' => 0, 'number_of_visitors' => 0]);
- $token = request()->token;
- //是否是自己的客户
- $is_cid = Customer::where([['id', '=', $param['cid']], ['employee_id', '=', $token['employee_id']]])->findOrEmpty();
- // 内场检测客户跟进设置中到店确认方式中是否有扫码确认
- $activity = ActivityModel::where('id', $param['aid'])->findOrEmpty();
- if ($activity->isEmpty()) return json(['code' => 1, 'data' => '活动不存在', 'msg' => '活动不存在']);
- $cate = $activity->cate;
- if (in_array($cate,[0,1])) {
- if($cate==0) $name = 'visitShopConfirm';
- if($cate==1) $name = 'visitSiteConfirm';
- $content = Setting::where(['root_id' => $token['root_org'], 'name' => $name, 'state' => 1])->value('content');
- if ($content == null) {
- $content = [];
- } else {
- $content = json_decode($content, true);
- }
- if (!empty($content) && !in_array('scan_the_code', $content)) {
- return json(['code' => 1, 'data' => '无权扫码确认', 'msg' => '无权扫码确认']);
- }
- }
- //2023-03-14 修改为只判断是否是该活动的扫码人员,
- // if ($is_cid->isEmpty()) {
- //不是自己的客户增加判断是否可以确认扫码本次活动
- $query[] = ['qrcode_employee_id', 'find in set', $token['employee_id']];
- $query[] = ['root_id', '=', $token['root_org']];
- $query[] = ['id', '=', $param['aid']];
- $actdata = ActivityModel::where($query)->count();
- if (empty($actdata)) return json(['code' => 1, 'data' => '无权扫码确认', 'msg' => '无权扫码确认']);
- // }
- $where[] = ['aid', '=', $param['aid']];
- $where[] = ['uid', '=', $param['uid']];
- $where[] = ['root_id', '=', $token['root_org']];
- $find = ActivitySign::where($where)->findOrEmpty();
- if ($find->isEmpty()) return json(['code' => 1, 'data' => '暂未报名活动', 'msg' => '暂未报名活动']);
- if ($find->qrcode_status == 1) return json(['code' => 1, 'data' => '活动已确认到场', 'msg' => '活动已确认到场']);
- ActivitySign::where($where)->update(['qrcode_status' => 1]);
- // 客户跟进保护规则
- $orgs = orgSubIds($token['root_org']);
- $customer = Customer::where('id', '=', $param['cid'])->findOrEmpty();
- $phones = [$customer['phone']];
- if ($customer['phone1']) {
- $phones[] = $customer['phone1'];
- }
- if ($customer['phone2']) {
- $phones[] = $customer['phone2'];
- }
- $c_where[] = ['phone|phone1|phone2', 'in', $phones];
- $c_where[] = ['org_id', 'in', $orgs];
- $c_where[] = ['employee_id', 'not in', ['null', $token['employee_id']]];
- $have_customer = Customer::where($c_where)->select()->toArray();
- $customer_ids = array_column($have_customer, 'id');
- if (!empty($customer_ids)) {
- $lf_state = CustomerVisitLog::changeState('已量房', 'chaos');
- $dc_state = CustomerVisitLog::changeState('已到场', 'chaos');
- $dd_state = CustomerVisitLog::changeState('已到店', 'chaos');
- $sub_setting = Setting::where([['root_id', '=', $token['root_org']], ['name', '=', 'subscribe_protected']])->findOrEmpty();
- if (!$sub_setting->isEmpty()) {
- $setting_content = json_decode($sub_setting['content'], true);
- foreach ($setting_content as $k_s => $v_s) {
- if (!empty($v_s['state']) && !empty($v_s['day']) && $v_s['state'] == 1) {
- $continue = false;
- $errmsg = '该客户在保护期内,无法提交';
- $check_where = [];
- $check_where[] = ['customer_id', 'in', $customer_ids];
- $check_where[] = ['addtime', '>', date('Y-m-d H:i:s', time() - 24 * 3600 * $v_s['day'])];
- $check_where[] = ['employee_id', 'in', array_column($have_customer, 'employee_id')];
- switch ($k_s) {
- case 'liangfang':
- $check_where[] = ['state', 'in', $lf_state];
- break;
- case 'daodian':
- $check_where[] = ['state', 'in', $dd_state];
- break;
- case 'daochang':
- $check_where[] = ['state', 'in', $dc_state];
- break;
- default:
- $continue = true;
- break;
- }
- if ($continue) continue;
- $log_list = CustomerVisitLog::where($check_where)->select()->toArray();
- if (!empty($log_list)) {
- return json(['code' => 1, 'msg' => $errmsg]);
- }
- }
- }
- }
- }
- //生成跟进记录 ,, 业务员可以确认不是自己的客户
- //活动内场是到店,外场是到场
- // $cate = ActivityModel::where('id', $param['aid'])->value('cate');
- $type = $cate == 0 ? '到店' : '到场';
- $state = $cate == 0 ? 7 : 9;
- $c_state = $cate == 0 ? 2 : 3;
- $str = $cate == 0 ? $param['number_of_visitors'] . '人' : ''; //内场活动才有到店人数
- $name = Employee::where('id', $token['employee_id'])->value('name');
- if ($is_cid->isEmpty()) {
- $is_cid = Customer::where('id', '=', $param['cid'])->findOrEmpty();
- if ($is_cid->isEmpty()) {
- $c_name = '';
- } else {
- $c_name = $is_cid['name'];
- }
- } else {
- $c_name = $is_cid->name;
- }
- $time = date('Y-m-d H:i:s');
- $save = [
- 'customer_id' => $param['cid'],
- 'aid' => $activity->id,
- 'type' => '',
- 'next_contact_date' => date('Y-m-d'),
- 'remark' => '业务员“' . $name . '”通过《'.$activity->title.'》活动扫码确认客户“' . $c_name . '”' . $type . $str . ',时间:' . $time,
- 'addtime' => $time,
- 'employee_id' => $token['employee_id'],
- 'user_id' => $token['uid'],
- 'state' => $state,
- 'org_id' => $token['org_id'],
- 'customer_employee_id' => $is_cid->employee_id,
- 'customer_org_id' => $is_cid->org_id,
- 'number_of_visitors' => $param['number_of_visitors']
- ];
- CustomerVisitLog::insertGetId($save);
- // 微爆活动
- $activity_data['customer_id'] = $is_cid['id'];
- $activity_data['employee_id'] = $is_cid['employee_id'];
- $activity_data['org_id'] = $is_cid['org_id'];
- $activity_data['type'] = 0;
- if($state == 7) $activity_data['type'] = 2;
- if($state == 9) $activity_data['type'] = 7;
- WechatActivityIntegral::addIntegral($activity_data, $token['root_org']);
- //修改客户状态
- $is_cid->fresh = 0;
- $is_cid->state = $c_state;
- $is_cid->last_contact_date = date('Y-m-d');
- $is_cid->updatetime = date('Y-m-d H:i:s');
- $is_cid->save();
- //修改预约记录的确认到场记录为确认
- $condition = [['aid', '=', $activity->id], ['type', '=', 2]];
- $condition[] = ['customer_id', '=', $is_cid->id];
- CustomersSubscribe::where($condition)->update(['state'=>1]);
- if ($state == 7) {
- // 发送管理层模板消息
- $msg = ['first'=>'行为通知', 'keyword1'=>'客户确认到店', 'keyword2'=>"客户".$c_name."(".$is_cid['phone'].")确认到店", 'keyword3'=>date('Y/m/d'), 'remark'=>'请悉知'];
- TmpMsg::sendMsgToLeader($msg, $token['org_id']);
- }
- if ($state == 9) {
- // 发送管理层模板消息
- $msg = ['first'=>'行为通知', 'keyword1'=>'客户签单', 'keyword2'=>"客户".$c_name."(".$is_cid['phone'].")签单", 'keyword3'=>date('Y/m/d'), 'remark'=>'请悉知'];
- TmpMsg::sendMsgToLeader($msg, $token['org_id']);
- }
- return json(['code' => 0, 'data' => '确认成功', 'msg' => '确认成功']);
- }
- //判断是否显示活动扫码
- public function is_show_qrcode()
- {
- $token = request()->token;
- //有已经报名的自己的客户 或者 活动中设置了扫码人员
- $w[] = ['root_id', '=', $token['root_org']];
- $w[] = ['show', '=', 1];
- $w[] = ['del', '=', 0];
- $w[] = ['qrcode_employee_id', 'find in set', $token['employee_id']];
- $aids = ActivityModel::where($w)->count();
- // if (!$aids) {
- // $uids = Customer::where([['employee_id|designer_id','=',$token['employee_id']]])->column('uid');
- // $query[] = ['uid','in',$uids];
- // $query[] = ['qrcode_status','=',0];
- // $aids = ActivitySign::where($query)->count();
- // }
- $status = $aids ? 0 : 1;
- return json(['code' => 0, 'data' => $status, 'msg' => '获取成功']);
- }
- }
|