You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
303 lines
14 KiB
303 lines
14 KiB
<?php
|
|
|
|
namespace app\admin\controller\qingdong\customer;
|
|
|
|
use addons\qingdong\model\ContactsFile;
|
|
use addons\qingdong\model\ReceivablesPlan;
|
|
use app\admin\controller\qingdong\Base;
|
|
use addons\qingdong\model\Staff;
|
|
use think\Db;
|
|
use think\Exception;
|
|
use addons\qingdong\model\Customer;
|
|
use addons\qingdong\model\Contacts;
|
|
use addons\qingdong\model\Form;
|
|
use addons\qingdong\model\CustomerOther;
|
|
use addons\qingdong\model\Receivables;
|
|
use addons\qingdong\model\Record;
|
|
use addons\qingdong\model\Contract;
|
|
use addons\qingdong\model\Comment;
|
|
use addons\qingdong\model\Consume;
|
|
/**
|
|
* 客户查重管理
|
|
* 操作文档:https://doc.fastadmin.net/qingdong
|
|
* 软件介绍:https://www.fastadmin.net/store/qingdong.html
|
|
* 售后微信:qingdong_crm
|
|
*/
|
|
class Cnki extends Base
|
|
{
|
|
protected $relationSearch = true;
|
|
/**
|
|
* @var \addons\qingdong\model\Customer
|
|
*/
|
|
protected $model = null;
|
|
|
|
|
|
public function _initialize()
|
|
{
|
|
parent::_initialize();
|
|
$this->model = new \addons\qingdong\model\Customer;
|
|
}
|
|
|
|
|
|
/**
|
|
* 查看
|
|
*/
|
|
public function index()
|
|
{
|
|
//设置过滤方法
|
|
$this->request->filter(['strip_tags', 'trim']);
|
|
if ($this->request->isAjax()) {
|
|
if ($this->request->request('keyField')) {
|
|
return $this->selectpage();
|
|
}
|
|
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
|
|
$customer_ids_name=Customer::where('cid='.CID.' and name in '.Customer::where(['cid'=>CID])->having('count(*) > 1')->group('name')->field('name')->buildSql(true))->column('id');
|
|
$customer_ids_mobile= Contacts::where('cid='.CID.' and mobile in '. Contacts::where(['cid'=>CID])->having('count(*) > 1')->group('mobile')->where(['mobile'=>['neq','']])->field('mobile')->buildSql(true))->column('customer_id');
|
|
$customer_ids_email = Contacts::where('cid='.CID.' and email in '.Contacts::where(['cid'=>CID])->having('count(*) > 1')->group('email,customer_id')->where(['email'=>['neq','']])->field('email')->buildSql(true))->column('customer_id');
|
|
|
|
$customer_ids=array_merge($customer_ids_name?:[],$customer_ids_mobile?:[],$customer_ids_email?:[]);
|
|
$customer_ids=array_values(array_unique($customer_ids));
|
|
$list = $this->model->where($where)
|
|
->where(['id'=>['in',$customer_ids]])
|
|
->order($sort, $order)->paginate($limit);
|
|
|
|
$rows = $list->items();
|
|
foreach($rows as $k=>$v){
|
|
$contacts = Contacts::where(array('cid'=>CID,'customer_id'=>$v['id']))->select();
|
|
foreach($contacts as $ks=>$vs){
|
|
$emailinfo='';
|
|
$mobileinfo ='';
|
|
if($vs['mobile']){
|
|
$mobileinfo = Contacts::where(array('id'=>['neq',$vs['id']],'customer_id'=>$v['id'],'mobile'=>$vs['mobile']))->value('id');
|
|
}
|
|
if($vs['email']){
|
|
$emailinfo = Contacts::where(array('id'=>['neq',$vs['id']],'customer_id'=>$v['id'],'email'=>$vs['email']))->value('id');
|
|
}
|
|
if($mobileinfo || $emailinfo){
|
|
unset($rows[$k]);
|
|
}
|
|
}
|
|
|
|
}
|
|
$result = array("total" => $list->total(), "rows" => array_values($rows));
|
|
|
|
return json($result);
|
|
}
|
|
|
|
return $this->view->fetch();
|
|
}
|
|
|
|
/**
|
|
* 合并客户
|
|
*/
|
|
public function edit($ids=null)
|
|
{
|
|
if ($this->request->isPost()) {
|
|
$params = $this->request->post("row/a");
|
|
if ($params) {
|
|
|
|
$check = isset($params['check']) ? $params['check'] : '';
|
|
$ids = $params['id'];
|
|
$customer_ids = $params['customer_ids'];
|
|
unset($params['check']);
|
|
unset($params['customer_ids']);
|
|
$params = $this->preExcludeFields($params);
|
|
$result = false;
|
|
Db::startTrans();
|
|
try {
|
|
$params['id'] = $ids;
|
|
$result = $this->model::updateCustomer($params);
|
|
//合并后删除被合并客户
|
|
$rescustomer = true;
|
|
$rescontacts = true;
|
|
$resrecord = true;
|
|
$rescontract = true;
|
|
$resconsume = true;
|
|
$resreceivables = true;
|
|
$resreceivables_plan = true;
|
|
$rescomment = true;
|
|
if($check == 1){
|
|
//客户
|
|
$hecustomer = $this->model->where(array('id'=>$customer_ids))->find();
|
|
if($hecustomer){
|
|
$rescustomer = $this->model->where(array('id'=>$customer_ids))->update(array('deletetime'=>time()));
|
|
}
|
|
//联系人
|
|
$hecontacts =Contacts::where(array('customer_id'=>$customer_ids))->find();
|
|
if($hecontacts){
|
|
$rescontacts = Contacts::where(array('customer_id'=>$customer_ids))->update(array('customer_id'=>$ids,'updatetime'=>time()));
|
|
}
|
|
//跟进记录
|
|
$herecord = Record::where(array('relation_type'=>1,'relation_id'=>$customer_ids))->find();
|
|
if($herecord){
|
|
$resrecord = Record::where(array('relation_type'=>1,'relation_id'=>$customer_ids))->update(array('relation_id'=>$ids,'updatetime'=>time()));
|
|
}
|
|
//合同
|
|
$hecontract=Contract::where(array('customer_id'=>$customer_ids))->find();
|
|
if($hecontract){
|
|
$rescontract=Contract::where(array('customer_id'=>$customer_ids))->update(array('customer_id'=>$ids,'updatetime'=>time()));
|
|
}
|
|
//费用
|
|
$heconsume = Consume::where(array('customer_id'=>$customer_ids))->find();
|
|
if($heconsume){
|
|
$resconsume = Consume::where(array('customer_id'=>$customer_ids))->update(array('customer_id'=>$ids,'updatetime'=>time()));
|
|
}
|
|
//回款
|
|
$hereceivables = Receivables::where(array('customer_id'=>$customer_ids))->find();
|
|
if($hereceivables){
|
|
$resreceivables = Receivables::where(array('customer_id'=>$customer_ids))->update(array('customer_id'=>$ids,'updatetime'=>time()));
|
|
}
|
|
//回款计划
|
|
$hereceivables_plan = ReceivablesPlan::where(array('customer_id'=>$customer_ids))->find();
|
|
if($hereceivables_plan){
|
|
$resreceivables_plan = ReceivablesPlan::where(array('customer_id'=>$customer_ids))->update(array('customer_id'=>$ids,'updatetime'=>time()));
|
|
}
|
|
//评论
|
|
$hecomment = Comment::where(array('relation_type'=>1,'relation_id'=>$customer_ids))->find();
|
|
if($hecomment){
|
|
$rescomment = Comment::where(array('relation_type'=>1,'relation_id'=>$customer_ids))->update(array('relation_id'=>$ids,'updatetime'=>time()));
|
|
|
|
}
|
|
if(!$rescustomer || !$rescontacts || !$resrecord || !$rescontract || !$resconsume || !$resreceivables || !$resreceivables_plan || !$rescomment){
|
|
$result = false;
|
|
throw new Exception('合并失败');
|
|
}
|
|
}else{
|
|
//联系人
|
|
$hecontacts = collection(Contacts::where(array('cid'=>CID,'customer_id'=>$customer_ids))->select())->toArray();
|
|
foreach($hecontacts as $k=>$v){
|
|
unset($v['id']);
|
|
$mobileinfo = Contacts::where(array('customer_id'=>$customer_ids,'mobile'=>$v['mobile']))->value('id');
|
|
$emailinfo = Contacts::where(array('customer_id'=>$customer_ids,'email'=>$v['email']))->value('id');
|
|
if($emailinfo){
|
|
$v['email'] = '';
|
|
}
|
|
if(($mobileinfo && $emailinfo) || $mobileinfo){
|
|
continue;
|
|
}
|
|
$v['customer_id'] = $ids;
|
|
$rescontacts = Contacts::create($v);
|
|
}
|
|
|
|
//跟进记录
|
|
$herecords = collection(Record::where(array('relation_type'=>1,'relation_id'=>$customer_ids))->select())->toArray();
|
|
foreach($herecords as $k=>$vs){
|
|
unset($vs['id']);
|
|
$vs['relation_id'] = $ids;
|
|
$resrecord = Record::create($vs);
|
|
}
|
|
//合同
|
|
$hecontract=collection(Contract::where(array('customer_id'=>$customer_ids))->select())->toArray();
|
|
foreach($hecontract as $k=>$v){
|
|
unset($v['id']);
|
|
$v['customer_id'] = $ids;
|
|
$rescontract = Contract::create($v);
|
|
}
|
|
//费用
|
|
$heconsume = collection(Consume::where(array('customer_id'=>$customer_ids))->select())->toArray();
|
|
foreach($heconsume as $k=>$v){
|
|
unset($v['id']);
|
|
$v['customer_id'] = $ids;
|
|
$resconsume = Consume::create($v);
|
|
}
|
|
//回款
|
|
$hereceivables = collection(Receivables::where(array('customer_id'=>$customer_ids))->select())->toArray();
|
|
foreach($hereceivables as $k=>$v){
|
|
unset($v['id']);
|
|
$v['customer_id'] = $ids;
|
|
$resreceivables = Receivables::create($v);
|
|
}
|
|
//回款计划
|
|
$hereceivables_plan = collection(ReceivablesPlan::where(array('customer_id'=>$customer_ids))->select())->toArray();
|
|
foreach($hereceivables_plan as $k=>$v){
|
|
unset($v['id']);
|
|
$v['customer_id'] = $ids;
|
|
$resreceivables_plan = ReceivablesPlan::create($v);
|
|
}
|
|
//评论
|
|
$hecomment = collection(Comment::where(array('relation_type'=>1,'relation_id'=>$customer_ids))->select())->toArray();
|
|
foreach($hecomment as $k=>$v){
|
|
unset($v['id']);
|
|
$v['relation_id'] = $ids;
|
|
$rescomment = Comment::create($v);
|
|
}
|
|
|
|
if(!$rescontacts || !$resrecord || !$rescontract || !$resconsume || !$resreceivables || !$resreceivables_plan || !$rescomment){
|
|
$result = false;
|
|
throw new Exception('合并失败');
|
|
}
|
|
}
|
|
Db::commit();
|
|
} catch (Exception $e) {
|
|
Db::rollback();
|
|
$this->error($e->getMessage());
|
|
}
|
|
if ($result !== false) {
|
|
$this->success();
|
|
} else {
|
|
$this->error('合并失败');
|
|
}
|
|
}
|
|
$this->error('参数不能为空');
|
|
}
|
|
//客户
|
|
$row = Customer::where(array('id'=>$ids))->find();
|
|
if(!$row){
|
|
$this->error('客户不存在');
|
|
}
|
|
$row=$row->toArray();
|
|
$row = CustomerOther::getOther($row);
|
|
$fieldlist = Form::getDataValue('customer');
|
|
|
|
//被合并客户信息
|
|
$customer_ids = Customer::where(array('name'=>$row['name'],'id'=>['neq',$ids]))->value('id');
|
|
if(!$customer_ids){
|
|
//手机号
|
|
$wheres['customer_id'] = array('neq',$ids);
|
|
$customer_ids_mobile = Contacts::where(array('customer_id'=>$ids))->field('mobile')->group('mobile')->column('mobile');
|
|
if($customer_ids_mobile){
|
|
$customer_ids_mobile = Contacts::where($wheres)->where('mobile', 'in', $customer_ids_mobile)->value('customer_id');
|
|
if($customer_ids_mobile){
|
|
$customer_ids = $customer_ids_mobile;
|
|
}
|
|
}
|
|
$customer_ids_email = Contacts::where(array('customer_id'=>$ids))->field('email')->group('email')->column('email');
|
|
if($customer_ids_email){
|
|
$customer_ids_email = Contacts::where($wheres)->where('email', 'in', $customer_ids_mobile)->value('customer_id');
|
|
if($customer_ids_email){
|
|
$customer_ids = $customer_ids_email;
|
|
}
|
|
}
|
|
}
|
|
if(!$customer_ids){
|
|
$this->error('被合并客户不存在');
|
|
}
|
|
$rowinfo = Customer::where(array('id' => $customer_ids))->find();
|
|
$rowinfo = $rowinfo->toArray();
|
|
$rowinfo = CustomerOther::getOther($rowinfo);
|
|
$hecustomer = $fieldlist;
|
|
$hecustomerInfo = [];
|
|
foreach($hecustomer as $k=>$v){
|
|
$hecustomerInfo[$v['id']] = $v;
|
|
$hecustomerInfo[$v['id']]['value']= $rowinfo[$v['id']]??'';
|
|
}
|
|
|
|
$zucustomer = $fieldlist;
|
|
//主客户信息
|
|
foreach($zucustomer as $k=>$v){
|
|
$zucustomer[$k]['value']= $row[$v['id']]??'';
|
|
|
|
if(key_exists($v['id'],$hecustomerInfo)){
|
|
$zucustomer[$k]['chilend'] = $hecustomerInfo[$v['id']];;
|
|
}
|
|
}
|
|
|
|
$check = array('1'=>'合并后删除被合并客户');
|
|
$this->assign('check',$check);
|
|
$this->assign('form_data', $zucustomer);
|
|
$this->assign('ids',$ids);
|
|
$this->assign('customer_ids',$customer_ids);
|
|
return $this->view->fetch();
|
|
}
|
|
|
|
}
|
|
|