123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- <?php
- namespace app\admin\controller\qingdongams\customer;
- use addons\qingdongams\model\Field;
- use addons\qingdongams\model\File;
- use addons\qingdongams\model\Message;
- use addons\qingdongams\model\RecordRead;
- use addons\qingdongams\model\Remind;
- use addons\qingdongams\model\Staff;
- use addons\qingdongams\model\Customer;
- use app\admin\controller\qingdongams\Base;
- use addons\qingdongams\model\Contacts;
- use addons\qingdongams\model\Comment;
- use addons\qingdongams\model\Record as RecordModel;
- use think\DB;
- use think\Exception;
- /**
- * 客户跟进记录
- */
- class Record extends Base
- {
- public function _initialize()
- {
- parent::_initialize();
- $this->model = new RecordModel();
- // 获取跟进类型
- $record_type = Field::getField('跟进类型');
- $this->assignconfig('recordType', $record_type);
- }
- /**
- * 客户跟进记录
- */
- public function index()
- {
- $need = input('need', '', 'trim');
- $customer_id = input('customer_id', '', 'trim');
- $contacts_id = input('contacts_id', '', 'trim');
- $leads_id = input('leads_id', '', 'trim');
- $contract_id = input('contract_id', '', 'trim');
- $busniess_id = input('busniess_id', '', 'trim');
- //0:全部 1:我负责的 2:下属负责的 3:今日待跟进 4:今日已跟进
- $type = input('type', 0);
- $this->request->filter(['strip_tags']);
- if ($this->request->isAjax()) {
- list($where, $sort, $order, $offset, $limit) = $this->buildparams();
- switch ($type) {
- case 1:
- $staff = Staff::info();
- $wheres['create_staff_id'] = $staff->id;
- break;
- case 2:
- $wheres['create_staff_id'] = array('in', Staff::getLowerStaffId());
- break;
- case 3:
- $start = date('Y-m-d 00:00:00');
- $end = date('Y-m-d 23:59:59');
- $record = collection(RecordModel::where(array('relation_type' => 1, 'next_time' => array(array('egt', $start), array('elt', $end))))->field("id,relation_id")->select())->toArray();
- $relationId = [];
- foreach ($record as $k => $v) {
- $whereRe['id'] = array('gt', $v['id']);
- $whereRe['relation_id'] = $v['relation_id'];
- $recordData = RecordModel::where($whereRe)->count();
- if ($recordData == 0) {
- $relationId[] = $v['id'];
- }
- }
- $wheres['id'] = array('in', $relationId);
- $staff = Staff::info();
- $wheres['create_staff_id'] = $staff->id;
- break;
- case 4:
- $start = date('Y-m-d 00:00:00');
- $end = date('Y-m-d 23:59:59');
- $record = collection(RecordModel::where(array('relation_type' => 1, 'next_time' => array(array('egt', $start), array('elt', $end))))->field("id,relation_id")->select())->toArray();
- $relationId = [];
- foreach ($record as $k => $v) {
- $whereRe['id'] = array('gt', $v['id']);
- $whereRe['relation_id'] = $v['relation_id'];
- $recordData = RecordModel::where($whereRe)->count();
- if ($recordData >= 1) {
- $relationId[] = $v['id'];
- }
- }
- $wheres['id'] = array('in', $relationId);
- $staff = Staff::info();
- $wheres['create_staff_id'] = $staff->id;
- break;
- default:
- $wheres['create_staff_id'] = array('in', Staff::getMyStaffIds());
- break;
- }
- $wheres['relation_type'] = 1;
- $wheres['follow_type'] = ['neq', '其它'];
- if (isset($need) && $need == 'customer') {
- $staff = Staff::info();
- $wheres['create_staff_id'] = $staff->id;
- $wheres['status'] = 0;
- $wheres['next_time'] = array(array('egt', date('Y-m-d 00:00:00')), array('lt', date('Y-m-d 23:59:59')));
- $customerlist = $this->model->where($wheres)->column('relation_id');
- if ($customerlist) {
- $whereExit['relation_id'] = array('in', $customerlist);
- $whereExit['next_time'] = array('gt', date('Y-m-d 23:59:59'));
- $recordIds = $this->model->where($whereExit)->column('id');
- if ($recordIds) {
- $wheres['id'] = array('in', $recordIds);
- }
- }
- }
- if (isset($need) && $need == 'contacts') {
- $staff = Staff::info();
- $wheres['create_staff_id'] = $staff->id;
- $wheres['status'] = 0;
- $wheres['relation_type'] = 2;
- $wheres['next_time'] = array(array('egt', date('Y-m-d 00:00:00')), array('lt', date('Y-m-d 23:59:59')));
- $customerlist = $this->model->where($wheres)->column('relation_id');
- if ($customerlist) {
- $whereExit['relation_id'] = array('in', $customerlist);
- $whereExit['next_time'] = array('gt', date('Y-m-d 23:59:59'));
- $recordIds = $this->model->where($whereExit)->column('id');
- if ($recordIds) {
- $wheres['id'] = array('in', $recordIds);
- }
- }
- }
- if (isset($customer_id) && $customer_id) {
- $wheres['relation_type'] = 1;
- $wheres['relation_id'] = $customer_id;
- unset($wheres['create_staff_id']);
- }
- if (isset($contacts_id) && $contacts_id) {
- $wheres['relation_type'] = 2;
- $wheres['relation_id'] = $contacts_id;
- unset($wheres['create_staff_id']);
- }
- if (isset($leads_id) && $leads_id) {
- $wheres['relation_type'] = 4;
- $wheres['relation_id'] = $leads_id;
- unset($wheres['create_staff_id']);
- }
- if (isset($contract_id) && $contract_id) {
- $wheres['relation_type'] = 3;
- $wheres['relation_id'] = $contract_id;
- unset($wheres['create_staff_id']);
- }
- if (isset($busniess_id) && $busniess_id) {
- $wheres['relation_type'] = 5;
- $wheres['relation_id'] = $busniess_id;
- unset($wheres['create_staff_id']);
- }
- $list = $this->model->where($where)->where($wheres)->with(['staff', 'customer'])->order($sort, $order)->paginate($limit);
- foreach ($list as $k => $v) {
- if (!isset($v['customer']) || !$v['customer']) {
- $v['customer'] = array('id' => '', 'name' => '');
- }
- }
- $row = $list->items();
- $result = array("total" => $list->total(), "rows" => $row);
- return json($result);
- }
- // 获取跟进类型
- $typeList = Field::where('name', '跟进类型')->value('data');
- $typeList = json_decode($typeList, true);
- $recordTypeList = [];
- foreach ($typeList as $value) {
- $recordTypeList[$value] = $value;
- }
- $this->assignconfig('recordTypeList', $recordTypeList);
- return $this->view->fetch();
- }
- /**
- * 添加跟进
- */
- public function add($ids = null)
- {
- $relation_type = input('relation_type', 1);
- if ($this->request->isPost()) {
- $params = $this->request->post('row/a');
- // 表单验证
- if (($result = $this->qingdongamsValidate($params, 'Record', 'create')) !== true) {
- $this->error($result);
- }
- if (!empty($params['files'])) {
- $params['files'] = File::getId($params['files']);
- }
- $reminds_id = $this->request->post('reminds_id/a');
- $params['reminds_id'] = '';
- if ($reminds_id) {
- $params['reminds_id'] = implode(',', $reminds_id);
- }
- Db::startTrans();
- try {
- $result = $this->model::createRecord($params);
- Db::commit();
- } catch (Exception $e) {
- Db::rollback();
- $this->error($e->getMessage());
- }
- if ($result) {
- $this->success('创建跟进记录成功');
- }
- $this->error('创建失败');
- }
- $follow = Field::getField('客户状态');
- $customer = Customer::getList();
- $customers = [];
- foreach ($customer as $k => $v) {
- $customers[$v['id']] = $v['name'];
- }
- if ($relation_type == 2) {
- $contacts = Contacts::where(['id' => $ids])->column('id,name');
- $this->assign('contacts', $contacts);
- }
- $remind = Remind::where(['type' => Remind::RECORD_TYPE])->find();
- $staff_ids = $remind['staff_ids'] ?? '';
- $this->assign('staff_ids', $staff_ids);
- $this->assign('ids', $ids);
- $this->assign('relation_type', $relation_type);
- $this->assign('customer', $customers);
- $this->assign('follow', $follow);
- $this->assign('staff', Staff::where([])->column('name', 'id'));
- return $this->view->fetch();
- }
- /**
- * 跟进详情
- */
- public function detail($ids = null)
- {
- $row = $this->model->with(['staff', 'file'])->where([
- 'id' => $ids,
- ])->find();
- if (empty($row)) {
- $this->error(__('No Results were found'));
- }
- $row = $row->toArray();
- if ($row['staff_id']) {
- $createname = Staff::where(['id' => $row['staff_id']])->value('name');
- } else {
- $createname = isset($row['staff']['name']) ? $row['staff']['name'] : '';
- }
- //标记通知已读
- Message::setRead(Message::RECORD_TYPE, $ids, $this->_staff->id);
- //添加阅读记录
- RecordRead::addRead($ids, $this->_staff->id);
- $row['createname'] = $createname;
- $this->assign('row', $row);
- $this->assignconfig("idinfo", ['id' => $ids]);
- return $this->view->fetch();
- }
- /**
- * 评论
- */
- public function comment()
- {
- $this->request->filter(['strip_tags']);
- if ($this->request->isAjax()) {
- $record_id = input('record_id', '');
- $wheres['relation_id'] = $record_id;
- list($where, $sort, $order, $offset, $limit) = $this->buildparams();
- $list = Comment::where($where)->where($wheres)->with(['staff', 'record'])->order($sort, $order)->paginate($limit);
- $row = $list->items();
- $result = array("total" => $list->total(), "rows" => $row);
- return json($result);
- }
- return $this->view->fetch();
- }
- }
|