| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 |
- <?php
- namespace addons\qingdong\controller;
- use addons\qingdong\model\Contract as ContractModel;
- use addons\qingdong\model\Event;
- use addons\qingdong\model\ExamineRecord;
- use addons\qingdong\model\Feedback;
- use addons\qingdong\model\ReceivablesPlan;
- use addons\qingdong\model\Customer;
- use addons\qingdong\model\Contacts;
- use addons\qingdong\model\Contract;
- use addons\qingdong\model\Leads;
- use addons\qingdong\model\Receivables;
- use addons\qingdong\model\Staff;
- use addons\qingdong\model\Record;
- use addons\qingdong\model\Message;
- use addons\qingdong\model\Business;
- /**
- * * 操作文档:https://doc.fastadmin.net/qingdong
- * 软件介绍:https://www.fastadmin.net/store/qingdong.html
- * 售后微信:qingdong_crm
- * 首页接口
- */
- class Index extends StaffApi
- {
- protected $noNeedLogin = [];
- protected $noNeedRight = ['*'];
- public function index()
- {
- $this->error("当前插件暂无前台页面");
- }
- //搜索
- public function search()
- {
- $keywords = input('keywords');
- $type = input('type');
- if (empty($keywords)) {
- $this->error('筛选字段不能为空');
- }
- //客户
- $customer = Customer::where([
- 'name' => ['like', "%$keywords%"],
- 'owner_staff_id' => ['in', Staff::getMyStaffIds()],
- ])->with([
- 'ownerStaff',
- 'contacts'
- ])->field('id,name,next_time,owner_staff_id,level,follow')->select();
- //联系人
- $contacts = Contacts::where([
- 'name' => ['like', "%$keywords%"],
- 'owner_staff_id' => ['in', Staff::getMyStaffIds()],
- ])->with(['customer'])->field('id,name,mobile,customer_id')->select();
- //线索
- $leads = Leads::where([
- 'name' => ['like', "%$keywords%"],
- 'owner_staff_id' => ['in', Staff::getMyStaffIds()],
- ])->with(['ownerStaff'])->field('id,owner_staff_id,name,follow,level,next_time,mobile')->select();
- $this->success('请求成功', [
- 'customer' => $customer,
- 'contacts' => $contacts,
- 'leads' => $leads
- ]);
- }
- //反馈
- public function feedback()
- {
- $content = input('content', '', 'trim');
- $file = input('file', '', 'trim');
- if (empty($content)) {
- $this->error('请输入反馈内容!');
- }
- $model = new Feedback();
- $model->save([
- 'staff_id' => $this->auth->id,
- 'content' => $content,
- 'file_ids' => $file
- ]);
- $this->success('反馈成功');
- }
- //待办事项
- public function agent()
- {
- $where['create_staff_id'] = $this->auth->id;
- $where['next_time'] = array(array('egt', date('Y-m-d 00:00:00')), array('lt', date('Y-m-d 23:59:59')));
- $where['follow_type'] = ['neq', '其它'];
- $where['status'] = 0;
- // 待跟进客户
- $where1['relation_type'] = 1;
- $customerlist = Record::where($where)->where($where1)->column('id');
- $customerlist1 = 0;
- if ($customerlist) {
- $whereExit['id'] = array('in', $customerlist);
- $whereExit['next_time'] = array('gt', date('Y-m-d 23:59:59'));
- $customerlist1 = Record::where($whereExit)->count();
- }
- $customer = count($customerlist) - $customerlist1;
- //待跟进合同
- $where2['relation_type'] = 3;
- $contractlist = Record::where($where)->where($where2)->column('id');
- $contractlist1 = 0;
- if ($contractlist) {
- $whereExitC['id'] = array('in', $contractlist);
- $whereExitC['next_time'] = array('gt', date('Y-m-d 23:59:59'));
- $contractlist1 = Record::where($whereExitC)->count();
- }
- $contract = count($contractlist) - $contractlist1;
- //待跟进线索
- $where3['relation_type'] = 4;
- $leadlist = Record::where($where)->where($where3)->column('id');
- $leadlist1 = 0;
- if ($leadlist) {
- $whereExitL['id'] = array('in', $leadlist);
- $whereExitL['next_time'] = array('gt', date('Y-m-d 23:59:59'));
- $leadlist1 = Record::where($whereExitL)->count();
- }
- $lead = count($leadlist) - $leadlist1;
- //待跟进联系人
- $where4['relation_type'] = 2;
- $contactslist = Record::where($where)->where($where4)->column('id');
- $contactslist1 = 0;
- if ($contactslist1) {
- $whereExitCs['id'] = array('in', $contactslist);
- $whereExitCs['next_time'] = array('gt', date('Y-m-d 23:59:59'));
- $contactslist1 = Record::where($whereExitCs)->count();
- }
- $contacts = count($contactslist) - $contactslist1;
- //待跟进商机
- $where5['relation_type'] = 5;
- $businesslist = Record::where($where)->where($where5)->column('id');
- $businesslist1 = 0;
- if ($businesslist1) {
- $whereExitB['id'] = array('in', $businesslist);
- $whereExitB['next_time'] = array('gt', date('Y-m-d 23:59:59'));
- $businesslist1 = Record::where($whereExitB)->count();
- }
- $business = count($businesslist) - $businesslist1;
- //待审核合同
- $examine = ExamineRecord::where([
- 'relation_type' => ExamineRecord::CONTRACT_TYPE,
- 'status' => 0,
- 'check_staff_id' => $this->auth->id
- ])->count();
- //待审核回款
- $receivables = ExamineRecord::where([
- 'relation_type' => ExamineRecord::RECEIVABLES_TYPE,
- 'status' => 0,
- 'check_staff_id' => $this->auth->id
- ])->count();
- //待回款提醒
- $receivablesPlan = ReceivablesPlan::where([
- 'remind_date' => ['elt', date('Y-m-d')],
- 'status' => 0,
- 'owner_staff_id' => $this->auth->id
- ])->count();
- //待处理日程
- $eventOne = Event::where([
- 'type' => 1,
- 'status' => ['in', [0, 1]],
- 'start_time' => ['lt', date('Y-m-d', strtotime('+1 day'))],
- 'staff_id|owner_staff_id' => $this->auth->id,
- ])->count();
- $this->success('请求成功', [
- 'customer' => $customer,
- 'business' => $business,
- 'contract' => $contract,
- 'lead' => $lead,
- 'contacts' => $contacts,
- 'event_one' => $eventOne,
- 'examine' => $examine,
- 'receivables' => $receivables,
- 'receivables_plan' => $receivablesPlan
- ]);
- }
- //待处理日程
- public function event_one()
- {
- // 待处理日程
- $eventTask = Event::where([
- 'type' => 1,
- 'status' => ['in', [0, 1]],
- 'start_time' => ['lt', date('Y-m-d', strtotime('+1 day'))],
- 'staff_id|owner_staff_id' => $this->auth->id,
- ])->order('id desc')->select();
- //标记通知已读
- Message::where([
- 'relation_type' => Message::EVENT_TYPE,
- 'to_staff_id' => $this->auth->id,
- 'status' => 0
- ])->update(['read_time' => time(), 'status' => 1]);
- foreach ($eventTask as &$ves) {
- $ves['start_time'] = date('Y-m-d H:i', strtotime($ves['start_time']));
- $ves['end_time'] = date('Y-m-d H:i', strtotime($ves['end_time']));
- }
- $this->success('请求成功', $eventTask);
- }
- //跟进任务
- public function event_task()
- {
- // 待跟进任务
- $eventTask = Event::where([
- 'type' => 2,
- 'status' => ['in', [0, 1]],
- 'start_time' => ['lt', date('Y-m-d', strtotime('+1 day'))],
- 'staff_id' => $this->auth->id
- ])->select();
- foreach ($eventTask as &$ves) {
- $ves['start_time'] = date('Y-m-d H:i', strtotime($ves['start_time']));
- $ves['end_time'] = date('Y-m-d H:i', strtotime($ves['end_time']));
- }
- $this->success('请求成功', $eventTask);
- }
- //待审核合同
- public function examine_contract()
- {
- //待审核合同
- $ids = ExamineRecord::where([
- 'relation_type' => ExamineRecord::CONTRACT_TYPE,
- 'status' => 0,
- 'check_staff_id' => $this->auth->id
- ])->column('relation_id');
- $contracts = ContractModel::where(['id' => ['in', $ids]])->with([
- 'customer',
- 'contacts',
- 'ownerStaff',
- 'orderStaff',
- 'receivables'
- ])->order('id desc')->select();
- $contracts = collection($contracts)->toArray();
- foreach ($contracts as $k => $v) {
- if (empty($v['receivables'])) {
- $v['receivables'] = [
- 'repayment_money' => 0,
- 'be_money' => $v['money'],
- 'ratio' => 0
- ];
- } else {
- $be_money = $v['money'] - $v['receivables']['repayment_money'];
- $v['receivables'] = [
- 'repayment_money' => $v['receivables']['repayment_money'],
- 'be_money' => ($be_money > 0) ? $be_money : 0,
- 'ratio' => round($v['receivables']['repayment_money'] / $v['money'] * 100, 2)
- ];
- }
- $contracts[$k] = $v;
- }
- $this->success('请求成功', $contracts);
- }
- //待审核回款
- public function examine_receivables()
- {
- //待审核回款
- $ids = ExamineRecord::where([
- 'relation_type' => ExamineRecord::RECEIVABLES_TYPE,
- 'status' => 0,
- 'check_staff_id' => $this->auth->id,
- ])->column('relation_id');
- $receivables = Receivables::where(['id' => ['in', $ids]])->with([
- 'contract',
- 'createStaff'
- ])->order('id desc')->select();
- $this->success('请求成功', $receivables);
- }
- //待回款提醒
- public function examine_receivables_plan()
- {
- //待回款提醒
- $receivablesPlan = ReceivablesPlan::where([
- 'remind_date' => ['elt', date('Y-m-d')],
- 'status' => 0,
- 'owner_staff_id' => $this->auth->id,
- ])->order('id desc')->with(['contract', 'customer'])->select();
- $this->success('请求成功', $receivablesPlan);
- }
- //数据简报
- public function briefing()
- {
- $type = input('type', 0);//0 本人及下属 1 仅本人 2 仅下属
- $times = input('times', '');
- $times = explode(',', $times);
- if (empty($times)) {
- $this->error('参数不能为空');
- }
- $startDate=strtotime($times[0]);
- $endDate=strtotime($times[1])+86400-1;
- $where = [
- 'createtime' => ['between', [$startDate, $endDate]]
- ];
- $whereC = [
- 'order_date' => ['between', [date('Y-m-d 00:00:00',$startDate), date('Y-m-d 23:59:59',$endDate)]]
- ];
- $whereR = [
- 'return_time' => ['between', [date('Y-m-d 00:00:00',$startDate), date('Y-m-d 23:59:59',$endDate)]]
- ];
- if ($type == 1) {
- $where['owner_staff_id'] = $this->auth->id;
- $whereC['owner_staff_id'] = $this->auth->id;
- $whereR['owner_staff_id'] = $this->auth->id;
- } elseif ($type == 2) {
- $where['owner_staff_id'] = ['in', Staff::getLowerStaffId()];
- $whereC['owner_staff_id'] = ['in', Staff::getLowerStaffId()];
- $whereR['owner_staff_id'] = ['in', Staff::getLowerStaffId()];
- } else {
- $where['owner_staff_id'] = ['in', Staff::getMyStaffIds()];
- $whereC['owner_staff_id'] = ['in', Staff::getMyStaffIds()];
- $whereR['owner_staff_id'] = ['in', Staff::getMyStaffIds()];
- }
- //客户 线索 联系人 合同 回款 跟进次数 处理审批
- $leads = Leads::where($where)->count();
- $customer = Customer::where($where)->count();
- $contacts = Contacts::where($where)->count();
- $contract = Contract::where([])->where($whereC)->count();
- $contract_money = Contract::where(['check_status'=>2])->where($whereC)->sum('money');
- $receivables_money = Receivables::where(['check_status'=>2])->where($whereR)->sum('money');
- $record = Record::where([
- 'create_staff_id' => $where['owner_staff_id'],
- 'createtime' => $where['createtime']
- ])->where(['follow_type' => ['neq', '其它']])->count();
- $examine = ExamineRecord::where([
- 'check_staff_id' => $where['owner_staff_id'],
- 'createtime' => $where['createtime']
- ])->count();
- //商机总数
- $business = Business::where($where)->count();
- //客户成交量
- $customer_complate = Customer::where($where)->where(['contract_status' => 1])->count();
- //客户未成交量
- $customer_nocomplate = Customer::where($where)->where(['contract_status' => 0])->count();
- //商机成交总数
- $business_complate = Business::where($where)->where(['contract_status' => 1])->count();
- //商机未成交总数
- $business_nocomplate = Business::where($where)->where(['contract_status' => 0])->count();
- //商机成交金额
- $business_complate_money = Business::where($where)->where(['contract_status' => 1])->sum('money');
- //商机未成交金额
- $business_nocomplate_money = Business::where($where)->where(['contract_status' => 0])->sum('money');
- $this->success('请求成功', [
- 'leads' => $leads,
- 'customer' => $customer,
- 'contacts' => $contacts,
- 'contract' => $contract,
- 'contract_money' => $contract_money,
- 'receivables' => $receivables_money,
- 'record' => $record,
- 'business' => $business,
- 'examine' => $examine,
- 'customer_complate' => $customer_complate,
- 'customer_nocomplate' => $customer_nocomplate,
- 'business_complate' => $business_complate,
- 'business_nocomplate' => $business_nocomplate,
- 'business_complate_money' => $business_complate_money,
- 'business_nocomplate_money' => $business_nocomplate_money,
- ]);
- }
- /**
- *交易额排行
- */
- public function contractRanding()
- {
- $date = input('date', date('Y-m'));
- $type = input('type', 0);//0 本人及下属 1 仅本人 2 仅下属
- //月底
- $endDate = date('Y-m-d', strtotime('+1 month', strtotime(date($date . '-1'))) - 1);
- $where = [
- 'order_date' => ['between', [$date . '-1', $endDate]],
- 'check_status' => 2,
- ];
- $contracts = Contract::where($where)->group('owner_staff_id')->field('owner_staff_id,sum(money) as money')->order('money desc')->select();
- $list = [];
- foreach ($contracts as $v) {
- $list[$v['owner_staff_id']] = $v['money'];
- }
- $contracts = $list;
- $data = [];
- $staffs = Staff::getList();
- foreach ($staffs as $v) {
- if (isset($contracts[$v['id']])) {
- $data[$v['id']] = $contracts[$v['id']];
- } else {
- $data[$v['id']] = 0;
- }
- }
- arsort($data);
- $staffs = Staff::getKeyList();
- $result = [];
- $i = 1;
- $oneMoney = 0;
- if ($type == 1) {//本人
- $showStaffIds = [$this->auth->id];
- } elseif ($type == 2) {//下属
- $showStaffIds = Staff::getLowerStaffId();
- } else {//全部
- $showStaffIds = Staff::getMyStaffIds();
- }
- foreach ($data as $id => $money) {
- if ($i == 1) {
- $oneMoney = $money;
- }
- $val = $staffs[$id];
- $val['money'] = $money;
- $val['ratio'] = $oneMoney ? sprintf("%.2f", $money / $oneMoney * 100) : 0;
- $val['rank'] = $i;
- $i++;
- if (in_array($id, $showStaffIds)) {
- $result[] = $val;
- }
- }
- if (count($result) >= 10) {
- $top = array_slice($result, 0, 3);
- $bottom = array_slice($result, -3, 3);
- $middle = array_slice($result, 3, 4);
- $result = array_merge($top, $bottom, $middle);
- }
- $this->success('请求成功', $result);
- }
- //服务协议
- public function serviceContent()
- {
- $this->success('请求成功', [
- 'content' => "<h1>用户服务协议</h1>",
- 'name' => '青动时代',
- 'logo' => ''
- ]);
- }
- }
|