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' => '获取成功']); } }