123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994 |
- <?php
- namespace app\api\controller;
- use app\client\controller\Agent;
- use app\logics\AgentsLogic;
- use app\model\Customer;
- use app\model\CustomerVisitLog;
- use app\model\CustomerClue;
- use app\model\Employee;
- use app\model\Miniprogram;
- use app\model\User as ModelUser;
- use app\model\UserSignLog;
- use Firebase\JWT\JWT;
- use openssl\Aes;
- use think\facade\Console;
- use app\model\AgentUser;
- use app\model\AgentIntegralLog;
- use app\model\AgentCustomerLog;
- use wx\miniprogram\Qrcode;
- use app\model\AgentIntegral;
- use app\model\CreditsSetting;
- use app\model\CustomerTop;
- use app\model\AgentArticle;
- use app\model\AgentShareLog;
- use app\model\ShareLog;
- use app\model\AgentShareContent;
- use app\model\MaterialCase;
- use app\model\Article;
- use app\model\Video;
- use app\model\MaterialEvidence;
- use app\model\CompanyStrength;
- use app\model\Building;
- use app\model\AgentApplyIntegral;
- use app\model\AgentType;
- use app\model\AgentEmpInvitationQrcode;
- use app\model\AgentPrize;
- class AgentEmp extends Base
- {
- //员工审核经纪人
- public function emp_review_agt()
- {
- $token = $this->request->token;
- $data = $this->request->only(['agentid', 'status', 'type']);
- $where[] = ['agent_employee_id', '=', $token['employee_id']];
- $where[] = ['root_id', '=', $token['root_org']];
- $where[] = ['id', '=', $data['agentid']];
- $where[] = ['is_review', '=', 1];
- //$ms=AgentUser::where($where)->update(['is_review'=>$data['status'],'type'=>$data['type'],'review_time'=>time()]);
- $ms = AgentUser::where($where)->update(['is_review' => $data['status'], 'review_time' => time()]);
- if ($ms) {
- return json(['code' => 0, 'msg' => '审核成功.']);
- } else {
- return json(['code' => 1, 'msg' => '审核失败.']);
- }
- }
- //待审核经纪人列表
- public function review_agt_list()
- {
- $token = $this->request->token;
- $list = AgentUser::where([['is_review', '=', 1], ['agent_employee_id', '=', $token['employee_id']], ['root_id', '=', $token['root_org']]])->select();
- return json(['code' => 0, 'msg' => '获取成功', 'data' => $list]);
- }
- /**
- * 业务员下的经纪人列表
- */
- public function agent_list()
- {
- $token = $this->request->token;
- $data = $this->request->only(['agentid', 'page', 'limit', 'type', 'keyword', 'order', 'join_date', 'is_review']);
- if (!empty($data['type'])) {
- $where[] = ['type', '=', $data['type']];
- }
- //关键字
- if (!empty($data['keyword'])) {
- $where[] = ['agent_name|agent_phone', 'like', '%' . $data['keyword'] . '%'];
- }
- //加入时间
- if (!empty($data['join_date'])) {
- $where[] = ['addtime', 'like', $data['join_date'] . '%'];
- }
- //审核状态
- if (!empty($data['is_review'])) {
- $where[] = ['is_review', '=', $data['is_review']];
- }
- $where[] = ['agent_employee_id', '=', $token['employee_id']];
- $where[] = ['status', '=', 1];
- $list = AgentUser::with(['user' => function ($query) {
- $query->field('id,nickname,headimgurl');
- }, 'customer' => function ($query) {
- $query->field('id,agents_id');
- }, 'agenttype'])
- ->where($where)
- ->field('id,agent_name,type,is_review,addtime,uid,agent_phone,cards_num,wechat')
- //->page($data['page'], $data['limit'])
- ->order('is_review asc,id desc')
- ->select()->toArray();
- //排行筛选
- if (!empty($data['order']) && !empty($list)) {
- foreach ($list as $key => $val) {
- $ph = AgentCustomerLog::where([['status', '=', 1], ['type', '=', $data['order']], ['agent_id', '=', $val['id']]])->count();
- $list[$key]['ph'] = $ph;
- $parr[] = $ph;
- }
- array_multisort($parr, SORT_DESC, $list);
- }
- $review_num = 0;
- foreach ($list as $key => $val) {
- //客户数量
- $list[$key]['customer_num'] = count($val['customer']);
- //当前积分
- $integral = AgentIntegralLog::where([['agt_id', '=', $val['id']]])->order('id desc')->value('now_integral');
- //$integral=AgentIntegralLog::where([['agt_id','=',$val['id']],['type','=',1]])->sum('integral');
- $wait_integral = AgentIntegral::where([['agent_id', '=', $val['id']], ['status', '=', 1]])->sum('integral');
- $now_integral = $integral + $wait_integral;
- $list[$key]['now_integral'] = $now_integral ? $now_integral : 0;
- //已兑换
- $list[$key]['reduce_integral'] = AgentIntegralLog::where([['agt_id', '=', $val['id']], ['type', '=', 2]])->sum('integral');
- //分享数量
- $list[$key]['share_num'] = ShareLog::where('agent_id', $val['id'])->count();
- //线索数量
- $list[$key]['clue_num'] = CustomerClue::where(['agent_id' => $val['id']])->count();
- //建档数量
- $list[$key]['clue_crm_num'] = CustomerClue::where(['agent_id' => $val['id'], 'state' => 1])->count();
- if ($val['is_review'] == 1) $review_num++;
- $list[$key]['type_name'] = !empty($val['agenttype']['type_name']) ? $val['agenttype']['type_name'] : '';
- }
- return json(['code' => 0, 'msg' => '获取成功', 'data' => $list, 'review_num' => $review_num]);
- }
- //统计员工下属经济人总数
- public function agent_count()
- {
- $token = $this->request->token;
- $data = $this->request->only(['agentid', 'status', 'page', 'limit']);
- $where[] = ['agent_employee_id', '=', $token['employee_id']];
- $where[] = ['is_review', '=', 2];
- $where[] = ['status', '=', 1];
- $list = AgentUser::where($where)->column('id');
- $where1[] = ['agent_id', 'in', (implode(',', $list))];
- $list = AgentCustomerLog::where($where1)->fieldRaw('count(id) as alls')->group('type')->order('alls desc')->select()->toArray();
- //客户数量
- $customer = Customer::where(['agents_id', 'in', (implode(',', $list))])->count();
- }
- /**
- * 业务员端经纪人客户头部统计
- */
- public function ctm_count()
- {
- $token = $this->request->token;
- $data = $this->request->only(['agent_id']);
- if (empty($data['agent_id'])) {
- $where[] = ['agent_employee_id', '=', $token['employee_id']];
- } else {
- $where[] = ['id', '=', $data['agent_id']];
- }
- $where[] = ['is_review', '=', 2];
- $where[] = ['status', '=', 1];
- $list = AgentUser::where($where)->column('id');
- //查询出属于我的客户
- $customer_id = Customer::where([['employee_id', '=', $this->request->token['employee_id']], ['agents_id', 'in', $list]])->column('id');
- // 确认到店数量统计
- $visit = CustomerVisitLog::where(array_merge([CustomerVisitLog::changeState(['state', '=', '确认到店'])], [['customer_id', 'in', $customer_id]]))->count();
- // 交定数量统计
- $ding = CustomerVisitLog::where(array_merge([CustomerVisitLog::changeState(['state', '=', '交定'])], [['customer_id', 'in', $customer_id]]))->count();
- // 签单数量统计
- $sign = CustomerVisitLog::where(array_merge([CustomerVisitLog::changeState(['state', '=', '签单'])], [['customer_id', 'in', $customer_id]]))->count();
- return json(['code' => 0, 'data' => ['visit' => $visit, 'ding' => $ding, 'sign' => $sign, 'count' => $customer_id ? count($customer_id) : 0], 'msg' => '获取成功']);
- }
- //获取经纪人的类别
- public function agent_typelist()
- {
- $token = $this->request->token;
- $list = AgentType::where([['root_id', '=', $token['root_org']], ['status', '=', 1]])->field('id,type_name')->select()->toArray();
- return json(['code' => 0, 'data' => $list, 'msg' => '获取成功']);
- }
- //员工生成邀请经纪人二维码
- public function invitation_qrcode()
- {
- $token = $this->request->token;
- $param = $this->request->only(['type']);
- if (empty($param['type'])) return json(['code' => 1, 'msg' => '参数错误']);
- $class = Employee::where([['id', '=', $token['employee_id']], ['root_id', '=', $token['root_org']]])->field('id,name,invitation_qrcode')->find();
- if (empty($class)) return json(['code' => 1, 'msg' => '员工信息不存在']);
- $qrcodedata = AgentEmpInvitationQrcode::where([['root_id', '=', $token['root_org']], ['employee_id', '=', $token['employee_id']], ['type', '=', $param['type']]])->find();
- if (empty($qrcodedata['invitation_qrcode'])) {
- // 生成二维码
- $mini = Miniprogram::where([['root_id', '=', $token['root_org']]])->find();
- $qrObj = new Qrcode;
- $params = [
- 'scene' => 'cli=' . $mini['notify'] . '&id=' . $class['id'] . '&type=' . $param['type'], //该参数最长32位,如果无法生成二维码请排查是否超出长度
- 'page' => 'customer/pages/brokerindex/brokerindex',
- 'width' => '280px',
- ];
- $qr = $qrObj->getUnlimited($mini->accesstoken, $params);
- $rs = json_decode($qr, true);
- if (!is_null($rs)) {
- return json(['code' => 1, 'msg' => '二维码生成失败']);
- }
- $path = 'agentinvitationQrcode/' . uniqid() . '.jpeg';
- ossContentUpload($path, $qr);
- //$class->invitation_qrcode = $path;
- //$class->save();
- $add = [
- 'employee_id' => $token['employee_id'],
- 'root_id' => $token['root_org'],
- 'type' => $param['type'],
- 'invitation_qrcode' => $path
- ];
- AgentEmpInvitationQrcode::insertGetId($add);
- $qrcode = 'https://' . config('app.ali_oss_bindurl') . '/' . $path;
- } else {
- $qrcode = 'https://' . config('app.ali_oss_bindurl') . '/' . $qrcodedata['invitation_qrcode'];
- }
- return json(['code' => 0, 'msg' => '获取成功', 'data' => $qrcode]);
- }
- //员工下属经纪人客户列表
- public function agent_customer_list_two()
- {
- $token = $this->request->token;
- $data = $this->request->only(['page', 'limit', 'state', 'addtime', 'agent_source_type', 'agent_id', 'keyword']);
- if (!empty($data['state'])) {
- $where[] = ['state', 'in', Customer::changeState($data['state'], 'chaos')];
- }
- if (!empty($data['addtime'])) {
- $where[] = ['addtime', '>=', $data['addtime'] . ' 00:00:00'];
- $where[] = ['addtime', '<=', $data['addtime'] . ' 23:59:59'];
- }
- if (!empty($data['agent_source_type'])) {
- $where[] = ['agent_source_type', '=', $data['agent_source_type']];
- }
- if (!empty($data['keyword'])) {
- $where[] = ['agent_name|agent_phone', 'like', '%' . $data['keyword'] . '%'];
- }
- $all_agt = AgentUser::where([['agent_employee_id', '=', $token['employee_id']], ['is_review', '=', 2]])->column('id');
- if (!empty($data['agent_id'])) {
- if (in_array($data['agent_id'], $all_agt)) {
- $agt_id = array($data['agent_id']);
- } else {
- return json(['code' => 1, 'data' => null, 'msg' => '经纪人参数错误']);
- }
- } else {
- $agt_id = $all_agt;
- }
- $where[] = ['agents_id', 'in', (implode(',', $agt_id))];
- $list = Customer::with(['visitLog' => function ($query) {
- $query->field('customer_id,state')->group('state');
- }])
- ->where($where)
- ->field('id,name,state,square,phone,level,updatetime,community_name,addtime,sex,agent_source_type,agents_id')
- ->page($data['page'], $data['limit'])
- ->order('addtime desc')
- ->select()
- ->toArray();
- //var_dump($list);
- //exit;
- return json(['code' => 0, 'data' => $list, 'msg' => '请求成功.']);
- }
- //员工单独查看下属经纪人积分详情
- public function agent_integral_list()
- {
- $token = $this->request->token;
- $data = $this->request->only(['page', 'limit', 'agent_id']);
- $daoday = 0;
- (new AgentsLogic())->call_agt_integral($daoday, $data['agent_id'], $token['root_org']);
- $list = AgentIntegral::with(['customer' => function ($query) {
- $query->field('id,name,sex');
- }])
- ->where([['agent_id', '=', $data['agent_id']]])
- ->page($data['page'], $data['limit'])
- ->order('addtime desc')->select()->toArray();
- foreach ($list as $key => $val) {
- $list[$key]['addtime'] = date('Y-m-d H:i:s', $val['addtime']);
- $list[$key]['status'] = $val['status'] == 1 ? '待确认' : '到账';
- }
- return json(['code' => 0, 'data' => $list, 'msg' => '请求成功.']);
- }
- //员工单独查看下属经纪人积分核销详情
- public function agent_already_list()
- {
- $token = $this->request->token;
- $data = $this->request->only(['page', 'limit', 'agent_id']);
- $list = AgentIntegralLog::where([['agt_id', '=', $data['agent_id']], ['type', '=', 2]])
- ->field('integral,addtime')
- ->page($data['page'], $data['limit'])
- ->select()->toArray();
- foreach ($list as $key => $val) {
- $list[$key]['addtime'] = date('Y-m-d H:i:s', $val['addtime']);
- $list[$key]['status'] = '兑换成功';
- }
- return json(['code' => 0, 'data' => $list, 'msg' => '请求成功.']);
- }
- /**
- * 修改经纪人名称
- */
- public function upagent_name()
- {
- $token = $this->request->token;
- $param = $this->request->only(['name', 'id']);
- $agent = AgentUser::where([['root_id', '=', $token['root_org']], ['id', '=', $param['id']]])->find();
- $agent->agent_name = $param['name'];
- $ms = $agent->save();
- if ($ms) {
- return json(['code' => 0, 'msg' => '修改成功']);
- } else {
- return json(['code' => 1, 'msg' => '修改失败']);
- }
- }
- //经纪人核销申请列表
- public function agent_wipen_list()
- {
- $token = $this->request->token;
- $data = $this->request->only(['page' => 1, 'limit' => 10, 'id', 'status']);
- $where[] = ['empid', '=', $token['employee_id']];
- if (!empty($data['status'])) $where[] = ['status', '=', $data['status']];
- $list = AgentApplyIntegral::with(['agent' => function ($query) {
- $query->field('id,agent_name');
- }])->where($where)->page($data['page'], $data['limit'])->order('id desc')->select()->toArray();
- $rule_type = 'reduce_integral';
- $already_rule = CreditsSetting::where([['code', '=', $rule_type], ['root_id', '=', $token['root_org']]])->value('value');
- $already_rule = $already_rule ? json_decode($already_rule, true) : ['jifen' => 1, 'money' => 1];
- foreach ($list as $key => $val) {
- $list[$key]['money'] = bcdiv($val['integral'], $already_rule['jifen'], 1) * $already_rule['money'];
- $list[$key]['review_time'] = !empty($val['review_time']) ? date('Y-m-d H:i:s', $val['review_time']) : '';
- $list[$key]['good_name'] = !empty($val['good_id']) ? AgentPrize::where([['root_id', '=', $token['root_org']], ['id', '=', $val['good_id']]])->value('good_name') : '';
- }
- return json(['code' => 0, 'data' => $list, 'msg' => '请求成功.']);
- }
- //员工提报经纪人的核销申请
- public function present_agent_wipen()
- {
- $token = $this->request->token;
- $data = $this->request->only(['id']);
- $ms = AgentApplyIntegral::where('id', $data['id'])->update(['status' => 2]);
- return json(['code' => 0, 'msg' => '提报成功']);
- }
- //员工单独查看下属经纪人积分头部统计
- public function agent_intregral_total()
- {
- $token = $this->request->token;
- $data = $this->request->only(['agent_id']);
- $agtdata = AgentUser::where('id', $data['agent_id'])->find();
- if (empty($agtdata)) return json(['code' => 1, 'msg' => '经纪人信息错误']);
- //$rule_type=$agtdata['type']==1?'reduce_integral':'wang_reduce_integral';
- $rule_type = 'reduce_integral';
- $already_rule = CreditsSetting::where([['code', '=', $rule_type], ['root_id', '=', $agtdata['root_id']]])->value('value');
- $already_rule = $already_rule ? json_decode($already_rule, true) : ['jifen' => 1, 'money' => 1];
- $integral = AgentIntegralLog::where([['agt_id', '=', $agtdata['id']]])->fieldRaw('sum(integral) as at,type')->group('type')->select()->toArray();
- $all_integral = $all_already = 0;
- if (!empty($integral)) {
- foreach ($integral as $key => $val) {
- if ($val['type'] == 1) {
- $all_integral = $val['at'] ? $val['at'] : 0;
- }
- if ($val['type'] == 2) {
- $all_already = $val['at'] ? $val['at'] : 0;
- }
- }
- }
- $wait_integral = AgentIntegral::where([['agent_id', '=', $agtdata['id']], ['status', '=', 1]])->sum('integral');
- $all_integral = $all_integral + $wait_integral;
- $no_already = AgentIntegralLog::where('agt_id', '=', $agtdata['id'])->order('id desc')->value('now_integral');
- $no_already = $no_already ? $no_already : 0;
- $no_already_money = bcdiv($no_already, $already_rule['jifen'], 1) * $already_rule['money'];
- $data = array('all_intregral' => $all_integral, 'all_already' => $all_already, 'no_already' => $no_already, 'no_already_money' => $no_already_money);
- return json(['code' => 0, 'data' => $data, 'msg' => '请求成功.']);
- }
- /**
- * 客户列表
- * @param state integer 1全部, 2待确认, 3未到访 4已到访,5定金,6签单,7无效
- */
- public function agent_customer_list()
- {
- $token = $this->request->token;
- $param = $this->request->only([
- 'state' => '',
- 'page' => 1,
- 'limit' => 20,
- 'keyword' => '',
- 'date' => '',
- 'visit' => '',
- 'addtime' => '',
- 'following' => '',
- 'protected' => '',
- 'agent_id' => '',
- 'agent_source_type' => ''
- ]);
- $all_agt = AgentUser::where([['root_id', '=', $token['root_org']], ['agent_employee_id', '=', $token['employee_id']], ['is_review', '=', 2]])->column('id');
- if (!empty($param['agent_id'])) {
- if (in_array($param['agent_id'], $all_agt)) {
- $agt_id = array($param['agent_id']);
- } else {
- return json(['code' => 1, 'data' => null, 'msg' => '经纪人参数错误']);
- }
- } else {
- $agt_id = $all_agt;
- }
- // 1)查询条件
- $condition = [
- ['agents_id', 'in', $agt_id],
- //['employee_id', '=', $token['employee_id']],
- ['org_id', 'in', orgSubIds($token['root_org'])],
- //['state', 'not in', Customer::changeState('无效', 'chaos')],
- //['died', '<>', 2]
- ];
- empty($param['agent_source_type']) ?: $condition[] = ['agent_source_type', '=', $param['agent_source_type']];
- // 可回收列表
- if (!empty($param['protected'])) {
- $orgids = orgSubIds($this->request->token['org_id']);
- $condition[] = ['org_id', 'in', $orgids];
- }
- // 2)状态筛选
- // empty($param['state']) ? $logCondition[] = ['state', 'not in', CustomerVisitLog::changeState('无效', 'chaos')] : $condition[] = ['state', 'in', CustomerVisitLog::changeState($param['state'], 'chaos')];
- // 5)待回访
- empty($param['visit']) ?: $condition[] = empty($param['date']) ? ['revisit_time', '=', date('Y-m-d') . ' 00:00:00'] : ['revisit_time', '=', $param['date'] . ' 00:00:00'];
- // 6)录入时间筛选
- empty($param['addtime']) ?: $condition[] = ['addtime', 'like', date('Y-m-d', strtotime($param['addtime'])) . '%'];
- //增加按跟进时间排序
- $order = 'addtime desc';
- empty($param['following']) ?: $order = 'last_contact_date ' . $param['following'] . ',' . $order;
- //关键词搜索
- if (!empty($param['keyword'])) {
- $list = Customer::where($condition)->order($order)->field('id,name,community_name,phone')->select()->toArray();
- $customersIdList = [];
- foreach ($list as $k => $v) {
- $str = $v['name'] . $v['community_name'] . $v['phone'];
- if (strpos($str, trim($param['keyword'])) !== false) $customersIdList[] = $v['id'];
- }
- } else {
- $customersIdList = Customer::where($condition)->order($order)->column('id');
- }
- // 剔除掉未经历该状态的客户id
- if (!empty($param['state'])) {
- if (CustomerVisitLog::changeState($param['state']) == '回访' || $param['state'] == '有效') {
- // 查询经历过回访以外所有状态的客户id(有效)
- $expectCustomersIdList = CustomerVisitLog::where([['customer_id', 'in', $customersIdList], ['state', 'not in', CustomerVisitLog::changeState('回访', 'chaos')], ['employee_id', '=', $token['employee_id']]])->group('customer_id')->column('customer_id');
- if ($param['state'] == '有效') {
- $customersIdList = $expectCustomersIdList;
- } else {
- $customersIdList = array_diff($customersIdList, $expectCustomersIdList);
- }
- } else {
- $customersIdList = CustomerVisitLog::where([['customer_id', 'in', $customersIdList], ['state', 'in', CustomerVisitLog::changeState($param['state'], 'chaos')]])->group('customer_id')->column('customer_id');
- }
- }
- // 置顶数据获取
- $top = CustomerTop::where([['root_id', '=', $token['root_org']], ['employee_id', '=', $token['employee_id']]])->where([['customer_id', 'in', $customersIdList]])->order('addtoptime asc')->column('customer_id');
- // 新数据获取
- $new = Customer::where([['id', 'in', $customersIdList], ['fresh', '=', 1]])->order($order)->column('id');
- // 剔除不应该出现的客户
- $top = array_diff($top, array_diff($top, $customersIdList));
- // 剔除不应该出现的新客户
- $new = array_diff($new, array_diff($new, $customersIdList));
- // 剔除置顶的客户
- $notTop = array_diff($customersIdList, $top);
- // 剔除新客户
- $notNew = array_diff($notTop, $new);
- // 将置顶客户放置到前面
- $customersIdList = array_unique(array_merge($top, $new, $notNew));
- // 总数获取
- $count = Customer::where($condition)->count();
- //返回到特定位置
- $id = input('id', 0);
- if ($id) {
- $ids = array_chunk($customersIdList, $param['limit']);
- foreach ($ids as $k => $v) {
- $a = false;
- foreach ($v as $k2 => $v2) {
- if ($id == $v2) {
- $a = true;
- $param['page'] = $k + 1;
- break;
- }
- }
- if ($a) break;
- }
- }
- // 分页
- $pageIdList = array_slice($customersIdList, ($param['page'] - 1) * $param['limit'], $param['limit']);
- $condition[] = ['id', 'in', $pageIdList];
- $customers = Customer::with(['designer', 'designerOrg', 'agent' => function ($query) {
- $query->field('id,agent_name');
- }])->where($condition)->select();
- // 总数获取
- $count = $customers->count();
- $customers = $customers->visible(['id', 'employee_id', 'name', 'sex', 'level', 'community_name', 'state', 'addtime', 'revisit_time', 'designer.name', 'designerOrg.name', 'fresh', 'square', 'last_contact_date', 'updatetime'])->toArray();
- if (!empty($setting)) {
- $setting_content = json_decode($setting['content'], true);
- } else {
- $setting_content = [];
- }
- foreach ($customers as $k => $v) {
- $customers[$k]['un_protected'] = 0;
- $customers[$k]['protected_tips'] = '';
- if (!empty($v['protected_to']) && time() > strtotime($v['protected_to'])) {
- $state_n = Customer::changeState($v['state'], 'n');
- if (!empty($setting_content[$state_n]['state']) && $setting_content[$state_n]['state'] == 1) {
- $customers[$k]['un_protected'] = 1;
- $customers[$k]['protected_tips'] = '已过期';
- }
- }
- if (!empty($v['protected_to']) && time() < strtotime($v['protected_to'])) {
- $day = floor((strtotime($v['protected_to']) - time()) / (24 * 3600));
- $customers[$k]['protected_tips'] = $day ? '保护期' . $day . '天' : '即将过期';
- }
- }
- $customers = array_combine(array_column($customers, 'id'), $customers);
- // 状态统计获取
- $customersStateList = CustomerVisitLog::where([['customer_id', 'in', $pageIdList]])->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'];
- }
- // 排序(按每页id顺序取值)
- $listData = [];
- foreach ($pageIdList as $customerId) {
- $customers[$customerId]['top'] = 0;
- $customers[$customerId]['is_new'] = $customers[$customerId]['fresh'] == 1 ? 1 : 0;
- $customers[$customerId]['addtoptime'] = null;
- if (in_array($customerId, $top)) $customers[$customerId]['addtoptime'] = 1;
- $customers[$customerId]['stateNum'] = $customersState[$customerId] ?? ['count' => 0, 'shop' => 0, 'measure' => 0, 'activity' => 0, 'deposit' => 0, 'signed' => 0];
- $listData[] = $customers[$customerId];
- }
- $data = [
- 'list' => $listData,
- 'count' => $count
- ];
- return json(['code' => 0, 'data' => $data, 'page' => $param['page'], 'employee_id' => $token['employee_id']]);
- }
- /**
- * 业务员上传分享文章
- * type上传类型:1视频,2图片
- */
- public function upload_article()
- {
- $param = $this->request->only(['title', 'file_media_id', 'content', 'talkskill', 'type']);
- $token = $this->request->token;
- $param['root_id'] = $token['root_org'];
- $param['employee_id'] = $token['employee_id'];
- $param['addtime'] = time();
- //上传文件
- if (!empty($param['file_media_id'])) {
- $file_media_id = [];
- foreach ($param['file_media_id'] as $k => $v) {
- $file_media_id[$k] = [
- 'serverId' => !empty($v['serverId']) ? $v['serverId'] : '',
- 'img' => !empty($v['img']) ? str_replace('https://' . config('app.ali_oss_bindurl') . '/', '', $v['img']) : '',
- 'video' => !empty($v['video']) ? str_replace('https://' . config('app.ali_oss_bindurl') . '/', '', $v['video']) : ''
- ];
- }
- $param['down_status'] = 1;
- $param['file_media_id'] = json_encode($file_media_id);
- }
- $add = AgentArticle::create($param);
- AgentShareContent::create(['root_id' => $token['root_org'], 'employee_id' => $token['employee_id'], 'data_id' => $add->id, 'type' => 'AgentArticle']);
- Console::call('download', ['agent_article_file']);
- if ($add) {
- return json(['code' => 0, 'msg' => '保存成功']);
- } else {
- return json(['code' => 1, 'msg' => '保存失败']);
- }
- }
- /**
- * 分享内容展示列表
- */
- public function article_list()
- {
- $param = $this->request->only(['page' => 1, 'limit' => 10, 'date' => '', 'share_order' => '', 'clue_order' => '', 'keyword' => '']);
- $token = $this->request->token;
- $where = [
- ['root_id', '=', $token['root_org']],
- ['employee_id', '=', $token['employee_id']]
- ];
- if (!empty($param['date'])) {
- list($start, $end) = explode(' - ', $param['date']);
- $startdate = strtotime($start);
- $enddate = strtotime($end);
- $start_time = date('Y-m-d H:i:s', $startdate);
- $end_time = date('Y-m-d H:i:s', $enddate + 86400);
- $where[] = ['addtime', '>=', $start_time];
- $where[] = ['addtime', '<', $end_time];
- }
- $field = 'addtime';
- $order = 'desc';
- if (!empty($param['share_order'])) {
- $field = 'share_num';
- $order = $param['share_order'];
- }
- if (!empty($param['clue_order'])) {
- $field = 'clue_num';
- $order = $param['clue_order'];
- }
- $data = AgentShareContent::where($where)->order('addtime desc')->select()->toArray();
- foreach ($data as &$item) {
- //分享量
- $item['share_num'] = ShareLog::where([['type', '=', $item['type']], ['data_id', '=', $item['data_id']], ['agent_id', '<>', 'NULL']])->count();
- //线索
- $item['clue_num'] = CustomerClue::where([['pipe_type', '=', $item['type']], ['pipe_id', '=', $item['data_id']], ['agent_id', '<>', 0]])->count();
- switch ($item['type']) {
- case 'Article':
- $find = Article::where([
- ['root_id', '=', $token['root_org']],
- ['delete_time', '=', 0],
- ['publish', '=', 1],
- ['id', '=', $item['data_id']]
- ])->field('id,title,cover_img')->find();
- if (empty($find)) {
- $item['content_id'] = $item['data_id'];
- $item['title'] = '';
- $item['cover'] = '';
- break;
- }
- $item['content_id'] = $find['id'];
- $item['title'] = $find['title'];
- $item['cover'] = $find['cover_img'];
- break;
- case 'MaterialCase':
- $find = MaterialCase::where([
- ['root_id', '=', $token['root_org']],
- ['del', '=', 0],
- ['publish', '=', 1],
- ['id', '=', $item['data_id']]
- ])->field('id,title,cover_img')->find();
- if (empty($find)) {
- $item['content_id'] = $item['data_id'];
- $item['title'] = '';
- $item['cover'] = '';
- break;
- }
- $item['content_id'] = $find['id'];
- $item['title'] = $find['title'];
- $item['cover'] = $find['cover_img'];
- break;
- case 'Video':
- $find = Video::where([
- ['root_id', '=', $token['root_org']],
- ['delete_time', '=', 0],
- ['publish', '=', 1],
- ['id', '=', $item['data_id']]
- ])->field('id,title,video_url')->find();
- if (empty($find)) {
- $item['content_id'] = $item['data_id'];
- $item['title'] = '';
- $item['cover'] = '';
- break;
- }
- $item['content_id'] = $find['id'];
- $item['title'] = $find['title'];
- $item['cover'] = $find['video_url'];
- break;
- case 'CompanyStrength':
- $find = CompanyStrength::where([
- ['root_id', '=', $token['root_org']],
- ['del', '=', 0],
- ['publish', '=', 1],
- ['id', '=', $item['data_id']]
- ])->field('id,title,cover,difference')->find();
- if (empty($find)) {
- $item['content_id'] = $item['data_id'];
- $item['title'] = '';
- $item['cover'] = '';
- $item['difference'] = 2;
- break;
- }
- $item['content_id'] = $find['id'];
- $item['title'] = $find['title'];
- $item['cover'] = $find['cover'];
- $item['difference'] = $find['difference'];
- break;
- case 'MaterialEvidence':
- $find = MaterialEvidence::where([
- ['root_id', '=', $token['root_org']],
- ['del', '=', 0],
- ['publish', '=', 1],
- ['id', '=', $item['data_id']]
- ])->field('id,title,pics,difference')->find();
- if (empty($find)) {
- $item['content_id'] = $item['data_id'];
- $item['title'] = '';
- $item['cover'] = '';
- $item['difference'] = 2;
- break;
- }
- $item['content_id'] = $find['id'];
- $item['title'] = $find['title'];
- $item['cover'] = $find['pics'];
- $item['difference'] = $find['difference'];
- break;
- case 'Building':
- $find = Building::where([
- ['root_id', '=', $token['root_org']],
- ['del', '=', 0],
- ['id', '=', $item['data_id']]
- ])->field('id,community_id,name,cover')->find();
- if (empty($find)) {
- $item['content_id'] = $item['data_id'];
- $item['title'] = '';
- $item['cover'] = '';
- break;
- }
- $item['content_id'] = $find['id'];
- $item['title'] = $find['name'];
- $item['cover'] = $find['cover'];
- break;
- case 'AgentArticle':
- $find = AgentArticle::where([
- ['root_id', '=', $token['root_org']],
- ['id', '=', $item['data_id']]
- ])->field('id,title,file,type')->find();
- if (empty($find)) {
- $item['content_id'] = $item['data_id'];
- $item['title'] = '';
- $item['cover'] = '';
- $item['file_type'] = '';
- break;
- }
- $item['content_id'] = $find['id'];
- $item['title'] = $find['title'];
- $item['cover'] = $find['file'];
- $item['file_type'] = $find['type'];
- break;
- default:
- break;
- }
- }
- if (!empty($param['keyword'])) {
- foreach ($data as $key => $item) {
- if (stripos($item['title'], $param['keyword']) == false) {
- unset($data[$key]);
- }
- }
- }
- $sort = array_column($data, $field);
- $order == 'desc' ? array_multisort($sort, SORT_DESC, $data) : array_multisort($sort, SORT_ASC, $data);
- $data = array_slice($data, ($param['page'] - 1) * $param['limit'], $param['limit']);
- return json(['code' => 0, 'data' => $data]);
- }
- /**
- * 分享任务内容展示详情
- */
- public function article_details()
- {
- $id = $this->request->param('id');
- $token = $this->request->token;
- $where = [
- ['root_id', '=', $token['root_org']],
- ['employee_id', '=', $token['employee_id']],
- ['id', '=', $id]
- ];
- $data = AgentArticle::where($where)->field('id,title,file,content,talkskill,type')->find();
- return json(['code' => 0, 'data' => $data]);
- }
- /**
- * 审核分享记录列表
- * type:Article文章、Video视频、MaterialCase案例、CompanyStrength实力、MaterialEvidence客户好评、Building楼盘、AgentArticle业务员上传
- */
- public function share_list()
- {
- //内容id
- $article_id = $this->request->param('id');
- //类型来源
- $type = $this->request->param('type');
- $token = $this->request->token;
- $where = [
- ['root_id', '=', $token['root_org']],
- ['employee_id', '=', $token['employee_id']],
- ['article_id', '=', $article_id],
- ['status', '=', 0],
- ['type', '=', $type]
- ];
- $data = AgentShareLog::with(['user', 'agentUser'])->where($where)->field('id,employee_id,uid,img,addtime,remarks')->order('addtime desc')->select()->toArray();
- return json(['code' => 0, 'data' => $data]);
- }
- /**
- * 员工下面所有经纪人分享记录列表
- */
- public function allshare_list()
- {
- $param = $this->request->only(['page' => 1, 'limit' => 10]);
- $token = $this->request->token;
- $where = [
- ['root_id', '=', $token['root_org']],
- ['employee_id', '=', $token['employee_id']],
- ['status', '=', 0]
- ];
- $data = AgentShareLog::with(['user', 'agentUser'])->where($where)->field('id,employee_id,uid,img,addtime,remarks')->page($param['page'], $param['limit'])->order('addtime desc')->select()->toArray();
- foreach ($data as $key => $val) {
- $data[$key]['type_name'] = AgentType::where([['root_id', '=', $token['root_org']], ['id', '=', $val['type']]])->value('type_name');
- }
- return json(['code' => 0, 'data' => $data]);
- }
- /**
- * 审核分享记录
- */
- public function validate_share()
- {
- $share_id = $this->request->param('share_id');
- $status = $this->request->param('status');
- $token = $this->request->token;
- // $token['employee_id'] = 4165;
- // $token['root_org'] = 994;
- $where = [
- ['root_id', '=', $token['root_org']],
- ['employee_id', '=', $token['employee_id']],
- ['id', '=', $share_id],
- ['status', '=', 0]
- ];
- $log = AgentShareLog::where($where)->find();
- if (empty($log)) {
- return json(['code' => 1, 'msg' => '分享记录已被审核']);
- } else {
- //审核通过增加积分
- if ($status == 1) {
- $agent = AgentUser::where(['uid' => $log['uid'], 'root_id' => $token['root_org']])->field('id,type')->find();
- //$type = $agent['type'] == 1 ? 'ptagentshare_integral' : 'whagentshare_integral';
- $type = 'ptagentshare_integral';
- $rule = AgentType::where([['root_id', '=', $token['root_org']], ['id', '=', $agent['type']]])->find();
- $rule_list = !empty($rule['count']) ? json_decode($rule['count'], true) : '';
- $jifen = !empty($rule_list) ? $rule_list[$type] : 0;
- //$jifen = CreditsSetting::where(['code' => $type, 'root_id' => $token['root_org']])->value('value');
- if (!empty($jifen)) {
- // switch($log['type']){
- // case 'Article':
- // $new = new Article();
- // $field = 'title';
- // break;
- // case 'Video':
- // $new = new Video();
- // $field = 'title';
- // break;
- // case 'MaterialCase':
- // $new = new MaterialCase();
- // $field = 'title';
- // break;
- // case 'CompanyStrength':
- // $new = new CompanyStrength();
- // $field = 'title';
- // break;
- // case 'MaterialEvidence':
- // $new = new MaterialEvidence();
- // $field = 'title';
- // break;
- // case 'Building':
- // $new = new Building();
- // $field = 'name';
- // break;
- // case 'AgentArticle':
- // $new = new AgentArticle();
- // $field = 'title';
- // break;
- // default:
- // break;
- // }
- // $model = $new;
- // $title = $model->where('id', $log['article_id'])->find();
- $add = [
- 'agent_id' => $agent['id'],
- 'type' => 5,
- 'integral' => $jifen,
- 'addtime' => time(),
- //'state' => '审核《'.$title[$field].'》上传记录',
- 'state' => '审核上传记录',
- 'customer_id' => NULL
- ];
- AgentIntegral::insert($add);
- $log->score = $jifen;
- }
- }
- $log->status = $status == 1 ? 1 : 2;
- $log->verify_time = time();
- $log->save();
- return json(['code' => 0, 'msg' => '审核成功']);
- }
- }
- /**
- * 分享内容开关键
- */
- public function disable($id)
- {
- $token = $this->request->token;
- $where = [
- ['root_id', '=', $token['root_org']],
- ['employee_id', '=', $token['employee_id']],
- ['id', '=', $id]
- ];
- $data = AgentShareContent::where($where)->field('disable')->find();
- $data->disable = $data['disable'] == 1 ? 0 : 1;
- $data->save();
- return json(['code' => 0, 'msg' => '操作成功']);
- }
- /**
- * 业务员端获取线索列表来自经纪人分享
- * state:0、1、2
- * phone:has、hasno
- * getDate:Y-m-d
- */
- public function clue_list($page, $limit, $getDate = '', $state = '', $phone = '')
- {
- $token = $this->request->token;
- $count = [
- 'count_clue' => 0,
- 'creat_clue' => 0,
- 'day_clue' => 0
- ];
- //总线索
- $count['count_clue'] = CustomerClue::where([['employee_id', '=', $token['employee_id']], ['agent_id', '>', 0]])->count();
- //已建档
- $count['creat_clue'] = CustomerClue::where([['employee_id', '=', $token['employee_id']], ['agent_id', '>', 0], ['state', '=', 1]])->count();
- //今日线索
- $count['day_clue'] = CustomerClue::where([['employee_id', '=', $token['employee_id']], ['agent_id', '>', 0], ['addtime', 'between', [date('Y-m-d 00:00:00'), date('Y-m-d 23:59:59')]]])->count();
- $condition = [
- ['employee_id', '=', $token['employee_id']],
- ['agent_id', '>', 0],
- //['pipe_type', '=', 'agentArticle']
- ];
- if (isset($state)) $condition[] = ['state', '=', $state];
- if (!empty($getDate)) $condition[] = ['addtime', 'like', $getDate . '%'];
- if ($phone == 'has') $condition[] = ['phone', 'not null', ''];
- elseif ($phone == 'hasno') $condition[] = ['phone', 'null', ''];
- $data = CustomerClue::field('id,uid,phone,addtime,updatetime,state')->with(['user'])->withCount(['subscribe' => function ($query) use ($token) {
- $query->where('root_id', $token['root_org']);
- }, 'footprints'])->where($condition)->order('updatetime desc')->page($page, $limit)->select();
- foreach ($data as $k => $v) {
- $data[$k]['updatetime'] = $v['updatetime'] ? explode(' ', $v['updatetime']) : explode(' ', $v['addtime']);
- }
- return json(['code' => 0, 'msg' => '获取成功', 'data' => ['count' => $count, 'data' => $data]]);
- }
- /**
- * 员工设置内容为分享任务
- * type:Article文章、Video视频、MaterialCase案例、CompanyStrength实力、MaterialEvidence客户好评、Building楼盘
- */
- public function set_share_content($content_id, $type)
- {
- $token = $this->request->token;
- $data = AgentShareContent::where(['root_id' => $token['root_org'], 'employee_id' => $token['employee_id'], 'data_id' => $content_id, 'type' => $type])->find();
- if (!empty($data)) {
- $data->delete();
- return json(['code' => 0, 'msg' => '已取消任务']);
- } else {
- AgentShareContent::create(['root_id' => $token['root_org'], 'employee_id' => $token['employee_id'], 'data_id' => $content_id, 'type' => $type]);
- return json(['code' => 0, 'msg' => '设置成功']);
- }
- }
- }
|