['exceldownload'], 'allow'=>['index','relation','setprimary','getcontactslist','system','count'] ]; Hook::listen('check_auth',$action); $request = Request::instance(); $a = strtolower($request->action()); if (!in_array($a, $action['permission'])) { parent::_initialize(); } } /** * 联系人列表 * @author Michael_xu * @return */ public function index() { $contactsModel = model('Contacts'); $param = $this->param; $userInfo = $this->userInfo; $param['user_id'] = $userInfo['id']; $data = $contactsModel->getDataList($param); return resultArray(['data' => $data]); } /** * 添加联系人 * @author Michael_xu * @param * @return */ public function save() { $contactsModel = model('Contacts'); $param = $this->param; $userInfo = $this->userInfo; $param['create_user_id'] = $userInfo['id']; $param['owner_user_id'] = $userInfo['id']; if ($data = $contactsModel->createData($param)) { # 商机管理联系人 $business_id = $param['business_id'] ? $param['business_id'] : 0; if (!empty($business_id)) { $data['business_id'] = $business_id; if ($res = Db::name('crm_contacts_business')->data($data)->insert()) { return resultArray(['data' => '添加成功']); } else { return resultArray(['error' => Db::name('crm_contacts_business')->getError()]); } } return resultArray(['data' => '添加成功']); } else { return resultArray(['error' => $contactsModel->getError()]); } } /** * 联系人详情 * @author Michael_xu * @param * @return */ public function read() { $contactsModel = model('Contacts'); $userModel = new \app\admin\model\User(); $param = $this->param; $data = $contactsModel->getDataById($param['id'], $this->userInfo['id']); //判断权限 $auth_user_ids = $userModel->getUserByPer('crm', 'contacts', 'read'); if (!in_array($data['owner_user_id'],$auth_user_ids)) { $authData['dataAuth'] = (int)0; return resultArray(['data' => $authData]); } if (!$data) { return resultArray(['error' => $contactsModel->getError()]); } return resultArray(['data' => $data]); } /** * 编辑联系人 * @author Michael_xu * @param * @return */ public function update() { $contactsModel = model('Contacts'); $param = $this->param; $userInfo = $this->userInfo; $param['user_id'] = $userInfo['id']; // //判断权限 // $data = $contactsModel->getDataById($param['id']); // $auth_user_ids = $userModel->getUserByPer('crm', 'contacts', 'update'); // if (!in_array($data['owner_user_id'],$auth_user_ids)) { // header('Content-Type:application/json; charset=utf-8'); // exit(json_encode(['code'=>102,'error'=>'无权操作'])); // } if ($contactsModel->updateDataById($param, $param['id'])) { return resultArray(['data' => '编辑成功']); } else { return resultArray(['error' => $contactsModel->getError()]); } } /** * 删除联系人 * @author Michael_xu * @param * @return */ public function delete() { $param = $this->param; $contactsModel = model('Contacts'); $recordModel = new \app\admin\model\Record(); $fileModel = new \app\admin\model\File(); $actionRecordModel = new \app\admin\model\ActionRecord(); if (!is_array($param['id'])) { $contacts_id[] = $param['id']; } else { $contacts_id = $param['id']; } $delIds = []; $errorMessage = []; //数据权限判断 $userModel = new \app\admin\model\User(); $auth_user_ids = $userModel->getUserByPer('crm', 'contacts', 'delete'); foreach ($contacts_id as $k=>$v) { $isDel = true; //数据详情 $data = $contactsModel->getDataById($v); if (!$data) { $isDel = false; $errorMessage[] = 'id为'.$v.'的联系人删除失败,错误原因:'.$contactsModel->getError(); } if (!in_array($data['owner_user_id'],$auth_user_ids)) { $isDel = false; $errorMessage[] = '名称为'.$data['name'].'的联系人删除失败,错误原因:无权操作'; } if ($isDel) { $delIds[] = $v; } } $dataInfo = $contactsModel->getDataById($v); if ($delIds) { $data = $contactsModel->delDatas($delIds); if (!$data) { return resultArray(['error' => $contactsModel->getError()]); } // 删除联系人扩展数据 db('crm_contacts_data')->whereIn('contacts_id', $delIds)->delete(); //删除跟进记录 $recordModel->delDataByTypes(3,$delIds); //删除关联附件 $fileModel->delRFileByModule('crm_contacts',$delIds); //删除关联操作记录 $actionRecordModel->delDataById(['types'=>'crm_contacts','action_id'=>$delIds]); $userInfo = $this->userInfo; foreach ($contacts_id as $k => $v) { RecordActionLog($userInfo['id'], 'crm_contacts', 'delete', $dataInfo['name'], '', '', '删除了联系人:' . $dataInfo['name']); } } if ($errorMessage) { return resultArray(['error' => $errorMessage]); } else { return resultArray(['data' => '删除成功']); } } /** * 联系人转移 * @author Michael_xu * @param owner_user_id 变更负责人 * @param is_remove 1移出,2转为团队成员 * @param type 权限 1只读2读写 * @return */ public function transfer() { $param = $this->param; $userInfo = $this->userInfo; $contactsModel = model('Contacts'); $settingModel = model('Setting'); $userModel = new \app\admin\model\User(); $authIds = $userModel->getUserByPer(); //权限范围的user_id if (!$param['owner_user_id']) { return resultArray(['error' => '变更负责人不能为空']); } $owner_user_info = $userModel->getUserById($param['owner_user_id']); if (!$param['contacts_id'] || !is_array($param['contacts_id'])) { return resultArray(['error' => '请选择需要转移的联系人']); } $is_remove = $param['is_remove'] == 2 ? : 1; $type = $param['type'] == 2 ? : 1; $data = []; $data['owner_user_id'] = $param['owner_user_id']; $data['update_time'] = time(); $errorMessage = []; foreach ($param['contacts_id'] as $contacts_id) { $contactsInfo = $contactsModel->getDataById($contacts_id); // 转移至当前负责人的直接跳过 if ($param['owner_user_id'] == $contactsInfo['owner_user_id']) continue; if (!$contactsInfo) { $errorMessage[] = '名称:为《'.$contactsInfo['name'].'》的联系人转移失败,错误原因:数据不存在;'; continue; } //权限判断 if (!in_array($contactsInfo['owner_user_id'],$authIds)) { $errorMessage[] = $contactsInfo['name'].'"转移失败,错误原因:无权限;'; continue; } $resContacts = db('crm_contacts')->where(['contacts_id' => $contacts_id])->update($data); if (!$resContacts) { $errorMessage[] = $contactsInfo['name'].'"转移失败,错误原因:数据出错;'; continue; } updateActionLog($userInfo['id'], 'crm_contacts', $contacts_id, '', '', '将联系人转移给:' . $owner_user_info['realname']); RecordActionLog($userInfo['id'], 'crm_contacts', 'transfer',$contactsInfo['name'], '','','将联系人:'.$contactsInfo['name'].'转移给:' . $owner_user_info['realname']); } if (!$errorMessage) { return resultArray(['data' => '转移成功']); } else { return resultArray(['error' => $errorMessage]); } } /** * 联系人导入模板 * @author Michael_xu * @param string $save_path 本地保存路径 用于错误数据导出,在 Admin\Model\Excel::importExcel()调用 * @return */ public function excelDownload($save_path = '') { # 下次升级 $param = $this->param; $userInfo = $this->userInfo; $excelModel = new \app\admin\model\Excel(); // 导出的字段列表 $fieldModel = new \app\admin\model\Field(); $fieldParam['types'] = 'crm_contacts'; $fieldParam['action'] = 'excel'; $field_list = $fieldModel->field($fieldParam); $array=[]; $field=[1=>[ 'field'=>'owner_user_id', 'types'=>'crm_contacts', 'name'=>'负责人', 'form_type'=>'user', 'default_value'=>'', 'is_null' => 1, 'input_tips' =>'', 'setting' => Array(), 'is_hidden'=>0, 'writeStatus' => 1, 'value' => ''] ]; $first_array = array_splice($field_list, 2,0, $field); $excelModel->excelImportDownload($field_list, 'crm_contacts', $save_path); } /** * 联系人导出 * @author Michael_xu * @param * @return */ public function excelExport() { $param = $this->param; $userInfo = $this->userInfo; $param['user_id'] = $userInfo['id']; $action_name='导出全部'; if ($param['contacts_id']) { $param['contacts_id'] = ['condition' => 'in','value' => $param['contacts_id'],'form_type' => 'text','name' => '']; $param['is_excel'] = 1; $action_name='导出选中'; } $excelModel = new \app\admin\model\Excel(); // 导出的字段列表 $fieldModel = new \app\admin\model\Field(); $field_list = $fieldModel->getIndexFieldConfig('crm_contacts', $userInfo['id'],'','excel'); // 文件名 $file_name = '5kcrm_contacts_'.date('Ymd'); $model = model('Contacts'); $temp_file = $param['temp_file']; unset($param['temp_file']); $page = $param['page'] ?: 1; unset($param['page']); unset($param['export_queue_index']); RecordActionLog($userInfo['id'],'crm_contracts','excelexport',$action_name,'','','导出联系人'); return $excelModel->batchExportCsv($file_name, $temp_file, $field_list, $page, function($page, $limit) use ($model, $param, $field_list) { $param['page'] = $page; $param['limit'] = $limit; $data = $model->getDataList($param); $data['list'] = $model->exportHandle($data['list'], $field_list, 'contacts'); return $data; }); } /** * 联系人数据导入 * @author Michael_xu * @param * @return */ public function excelImport() { $param = $this->param; $userInfo = $this->userInfo; $excelModel = new \app\admin\model\Excel(); $param['types'] = 'crm_contacts'; $param['create_user_id'] = $userInfo['id']; $param['owner_user_id'] = $param['owner_user_id'] ? : $userInfo['id']; $file = request()->file('file'); // $res = $excelModel->importExcel($file, $param, $this); $res = $excelModel->batchImportData($file, $param, $this); // if (!$res) { // return resultArray(['error'=>$excelModel->getError()]); // } RecordActionLog($userInfo['id'],'crm_contacts','excel','导入联系人','','','导入联系人'); return resultArray(['data' => $excelModel->getError()]); } /** * 联系人 关联/取消关联 商机 * @return [type] [description] */ public function relation() { $param = $this->param; if (!$param['contacts_id'] || !$param['contacts_id']) { return resultArray(['error' => '参数错误!']); } $res = 1; if ($param['is_relation'] == 1) {//关联 $data = []; if (is_array($param['contacts_id'])) {//商机关联联系人 foreach ($param['contacts_id'] as $key => $value) { $data['contacts_id'] = $value; $data['business_id'] = $param['business_id']; $ret = Db::name('crm_contacts_business')->where(['contacts_id' => $value,'business_id' => $param['business_id']])->find(); if (!$ret) { if (!Db::name('crm_contacts_business')->insert($data)) { $res = 0; } } } } else {//联系人关联商机 foreach ($param['business_id'] as $key => $value) { $data['business_id'] = $value; $data['contacts_id'] = $param['contacts_id']; $ret = Db::name('crm_contacts_business')->where(['contacts_id' => $param['contacts_id'],'business_id' => $value])->find(); if (!$ret) { if (!Db::name('crm_contacts_business')->insert($data)) { $res = 0; } } } } } else {//取消关联 $where = array(); if (is_array($param['contacts_id'])) { $where['contacts_id'] = array('in',$param['contacts_id']); $where['business_id'] = array('eq',$param['business_id']); } else { $where['business_id'] = array('in',$param['business_id']); $where['contacts_id'] = array('eq',$param['contacts_id']); } Db::name('crm_contacts_business')->where($where)->delete(); # 商机首要联系人处理 if (is_array($param['contacts_id'])) { foreach ($param['contacts_id'] AS $key => $value) { $contactsId = Db::name('crm_business')->where('business_id', $param['business_id'])->value('contacts_id'); if ($contactsId == $value) { Db::name('crm_business')->where('business_id', $param['business_id'])->update(['contacts_id' => 0]); } } } } if ($res == 1) { return resultArray(['data' => '操作成功!']); } else { return resultArray(['error' => '操作失败,请重试!']); } } /** * 设置关注 * * @return \think\response\Json * @throws \think\Exception * @throws \think\exception\PDOException */ public function star() { $userId = $this->userInfo['id']; $targetId = $this->param['target_id']; $type = $this->param['type']; if (empty($userId) || empty($targetId) || empty($type)) return resultArray(['error' => '缺少必要参数!']); if (!$this->setStar($type, $userId, $targetId)) { return resultArray(['error' => '设置关注失败!']); } return resultArray(['data' => '设置关注成功!']); } /** * 设置首要联系人 * * @return \think\response\Json * @throws \think\Exception * @throws \think\exception\PDOException */ public function setPrimary() { $customerId = $this->param['customer_id']; $contactsId = $this->param['contacts_id']; if (empty($customerId)) return resultArray(['error' => '缺少客户ID!']); if (empty($customerId)) return resultArray(['error' => '缺少联系人ID!']); $contactsModel = new \app\crm\model\Contacts(); $contactsModel->setPrimary($customerId, $contactsId); return resultArray(['data' => '操作成功!']); } /** * 获取联系人 * * @return \think\response\Json * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getContactsList() { if (empty($this->param['customer_id'])) return resultArray(['error' => '缺少客户ID!']); $contactsModel = new \app\crm\model\Contacts(); $data = $contactsModel->getContactsList($this->param['customer_id']); return resultArray(['data' => $data]); } /** * 系统信息 * * @return \think\response\Json * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function system() { if (empty($this->param['id'])) return resultArray(['error' => '参数错误!']); $contactsModel = new \app\crm\model\Contacts(); $data = $contactsModel->getSystemInfo($this->param['id']); return resultArray(['data' => $data]); } /** * table标签栏数量 * * @return \think\response\Json * @throws \think\Exception */ public function count() { if (empty($this->param['contacts_id'])) return resultArray(['error' => '参数错误!']); $contactsId = $this->param['contacts_id']; $userInfo = $this->userInfo; # 团队成员 $contacts = Db::name('crm_contacts')->field(['owner_user_id', 'ro_user_id', 'rw_user_id'])->where('contacts_id', $contactsId)->find(); $contacts['ro_user_id'] = stringToArray($contacts['ro_user_id']); $contacts['rw_user_id'] = stringToArray($contacts['rw_user_id']); $contacts['owner_user_id'] = [$contacts['owner_user_id']]; $teamCount = array_filter(array_unique(array_merge($contacts['ro_user_id'], $contacts['rw_user_id'], $contacts['owner_user_id']))); # 查询联系人和商机的关联表 $businessIds = Db::name('crm_contacts_business')->where('contacts_id', $contactsId)->column('business_id'); # 商机权限条件 $businessAuth = $this->getBusinessSearchWhere($userInfo['id']); # 商机 $businessCount = Db::name('crm_business')->whereIn('business_id', $businessIds)->where($businessAuth)->count(); # 附件 $fileCount = Db::name('crm_contacts_file')->alias('contacts')->join('__ADMIN_FILE__ file', 'file.file_id = contacts.file_id', 'LEFT')->where('contacts_id', $contactsId)->count(); $data = [ 'businessCount' => $businessCount, 'fileCount' => $fileCount, 'memberCount' => count($teamCount), ]; return resultArray(['data' => $data]); } }