华为云服务器 Flexus X 搭建悟空 crm 管理系统——助力企业云上管理(解决 APP Referer 校验失败问题)

电子说

1.4w人已加入

描述

1、为什么我们企业会选择 Flexus 云服务器 X 实例来部署自己的 CRM 管理系统?

服务器

服务器

服务器

因为基于华为云 Flexus X 实例搭建 CRM 管理平台,可以从容面对企业内部瞬息万变的业务压力变化

2、华为云服务器 Flexus X 方案及优势:

灵活伸缩

搭配弹性伸缩服务 AS 及负载均衡服务 ELB,可以实现基于业务负载的快速弹缩,从容应对多变的市场业务压力

数据可靠

搭配华为云数据库服务,存储电商持久化数据,使用方便,可靠性高

安全可靠

搭配 WAF、DDoS 等网络安全服务,实现对电商业务全方位安全防护,降低黑客入侵风险

服务器

服务器

3、在宝塔里面安装必要的环境 PHP7.3、Mysql5.6+、NGINX

服务器

服务器

4、安装搭建好,进入 CRM 管理界面:

服务器

点击添加客户信息的时候就会发现,提示:

APP Referer 校验失败。请检查该 ak 设置的白名单与访问所有的域名是否一致。详情查看:http://lbsyun.baidu.com/apiconsole/key#
 

这是由于百度地图 api 接口没有配置好导致的问题出现

服务器

当配置好地图参数之后,就可以进行地区定位和使用附件客户等功能了

服务器

服务器

服务器

5、客户详情功能模块代码

public function read()

{

$customerModel = model('Customer');

$cutomerLogic = new CustomerLogic();

param=this->param;

userInfo=this->userInfo;

data=customerModel->getDataById(param[′id′],userInfo['id']);

if (!$data) {

return resultArray(['error' => $customerModel->getError()]);

}

//数据权限判断

$userModel = new appadminmodelUser();

authu​seri​ds=userModel->getUserByPer('crm', 'customer', 'read');

//读权限

roPre=userModel->rwPre(userInfo[′id′],data['ro_user_id'], $data['rw_user_id'], 'read');

rwPre=userModel->rwPre(userInfo[′id′],data['ro_user_id'], $data['rw_user_id'], 'update');

//判断是否客户池数据

wherePool=customerModel->getWhereByPool();

resPool=db(′crmc​ustomer′)−>alias(′customer′)−>where([′customeri​d′=>param['id']])->where($wherePool)->find();

if (!resPool && !in_array(data['owner_user_id'], auth_user_ids) && !roPre && !$rwPre) {

$authData['dataAuth'] = (int)0;

return resultArray(['data' => $authData]);

}

return resultArray(['data' => $data]);

}

6、编辑客户功能模块代码

public function update()

{

$customerModel = model('Customer');

param=this->param;

userInfo=this->userInfo;

//数据详情

data=customerModel->getDataById($param['id']);

if (!$data) {

return resultArray(['error' => $customerModel->getError()]);

}

param[′useri​d′]=userInfo['id'];

if (customerModel−>updateDataById(param, $param['id'])) {

return resultArray(['data' => '编辑成功']);

} else {

return resultArray(['error' => $customerModel->getError()]);

}

}

7、删除客户功能模块代码

public function delete()

{

param=this->param;

$user = new ApiCommon();

userInfo=user->userInfo;

// 是否客户池

if ($param['isSeas'] == 1) {

$permission = checkPerByAction('crm', 'customer', 'poolDelete');

} else {

$permission = checkPerByAction('crm', 'customer', 'delete');

}

if ($permission == false) {

return resultArray(['error' => '无权操作']);

}

$customerModel = model('Customer');

$userModel = new appadminmodelUser();

$recordModel = new appadminmodelRecord();

$fileModel = new appadminmodelFile();

$actionRecordModel = new appadminmodelActionRecord();

if (!is_array($param['id'])) {

customeri​d[]=param['id'];

} else {

customeri​d=param['id'];

}

$delIds = [];

$errorMessage = [];

//数据权限判断

authu​seri​ds=userModel->getUserByPer('crm', 'customer', 'delete');

//判断是否客户池数据(客户池数据只有管理员可以删)

adminId=userModel->getAdminId();

wherePool=customerModel->getWhereByPool();

foreach (customeri​dask => $v) {

$isDel = true;

//数据详情

data=db(′crmc​ustomer′)−>where([′customeri​d′=>v])->find();

if (!$data) {

$isDel = false;

errorMessage[]=′id为′.v . '的客户删除失败,错误原因:' . $customerModel->getError();

}

resPool=db(′crmc​ustomer′)−>alias(′customer′)−>where([′customeri​d′=>v])->where($wherePool)->find();

if (!resPool && !in_array(data['owner_user_id'], auth_user_ids) && isDel) {

$isDel = false;

$errorMessage[] = '无权操作';

}

// 公海 (原逻辑,公海仅允许管理员删除,修改为授权,不再限制)

// if (resPool && !in_array(data['owner_user_id'],$adminId)) {

//     $isDel = false;

//     errorMessage[]=′名称为′.data['name'].'的客户删除失败,错误原因:无权操作';

// }

//有商机、合同、联系人则不能删除

if ($isDel) {

resBusiness=db(′crmb​usiness′)−>where([′customeri​d′=>v])->find();

if ($resBusiness) {

$isDel = false;

$errorMessage[] = '客户下存在商机,不能删除';

}

}

if ($isDel) {

resContacts=db(′crmc​ontacts′)−>where([′customeri​d′=>v])->find();

if ($resContacts) {

$isDel = false;

// errorMessage[]=′名称为′.data['name'] . '的客户删除失败,错误原因:客户下存在联系人,不能删除';

$errorMessage[] = '客户下存在联系人,不能删除';

}

}

if ($isDel) {

resContract=db(′crmc​ontract′)−>where([′customeri​d′=>v])->find();

if ($resContract) {

$isDel = false;

$errorMessage[] = '客户下存在合同,不能删除';

}

}

if ($isDel) {

delIds[]=v;

}

}

dataInfo=customerModel->where('customer_id', ['in', $delIds])->select();

if ($delIds) {

delRes=customerModel->delDatas($delIds);

if (!$delRes) {

return resultArray(['error' => $customerModel->getError()]);

}

// 删除客户扩展数据

db('crm_customer_data')->whereIn('customer_id', $delIds)->delete();

// 删除跟进记录

recordModel−>delDataByTypes(2,delIds);

// 删除关联附件

fileModel−>delRFileByModule(′crmc​ustomer′,delIds);

// 删除关联操作记录

actionRecordModel−>delDataById([′types′=>′crmc​ustomer′,′actioni​d′=>delIds]);

foreach (dataInfoask => $v) {

RecordActionLog(userInfo[′id′],′crmc​ustomer′,′delete′,v['name'], '', '', '删除了客户:' . $v['name']);

}

}

if ($errorMessage) {

return resultArray(['error' => $errorMessage]);

} else {

return resultArray(['data' => '删除成功']);

}

}

8、客户信息详情界面

服务器

9、客户转移功能

public function transfer()

{

param=this->param;

userInfo=this->userInfo;

$customerModel = model('Customer');

$businessModel = model('Business');

$contractModel = model('Contract');

$contactsModel = model('Contacts');

$settingModel = model('Setting');

$customerConfigModel = model('CustomerConfig');

$userModel = new appadminmodelUser();

if (!$param['owner_user_id']) {

return resultArray(['error' => '变更负责人不能为空']);

}

if (!param[′customeri​d′]∣∣!isa​rray(param['customer_id'])) {

return resultArray(['error' => '请选择需要转移的客户']);

}

isr​emove=(param['is_remove'] == 2) ? 2 : 1;

type=param['type'] == 2 ?: 1;

types=param['types'] ?: [];

$data = [];

data[′owneru​seri​d′]=param['owner_user_id'];

$data['update_time'] = time();

$data['follow'] = '待跟进';

# 获取客户的时间

$data['obtain_time'] = time();

ownerUserName=userModel->getUserNameById($param['owner_user_id']);

$errorMessage = [];

foreach (param[′customeri​d′]ascustomer_id) {

customerInfo=db(′crmc​ustomer′)−>where([′customeri​d′=>customer_id])->find();

if (!$customerInfo) {

errorMessage[]=′名称:为《′.customerInfo['name'] . '》的客户转移失败,错误原因:数据不存在;';

continue;

}

$resCustomer = true;

//权限判断

if (!customerModel−>checkData(customer_id)) {

errorMessage[]=customerInfo['name'] . '转移失败,错误原因:无权限;';

continue;

}

//拥有客户数上限检测

if (!customerConfigModel−>checkData(param['owner_user_id'], 1)) {

errorMessage[]=customerInfo['name'] . '转移失败,错误原因:' . $customerConfigModel->getError();

continue;

}

//团队成员

$teamData = [];

teamData[′type′]=type; //权限 1 只读 2 读写

teamData[′useri​d′]=[customerInfo['owner_user_id']]; //协作人

$teamData['types'] = 'crm_customer'; //类型

teamData[′typesi​d′]=customer_id; //类型 ID

teamData[′isd​el′]=(is_remove == 1) ? 1 : '';

res=settingModel->createTeamData($teamData);

# 处理分配标识,待办事项专用

$data['is_allocation'] = 1;

resCustomer=db(′crmc​ustomer′)−>where([′customeri​d′=>customer_id])->update($data);

if (!$resCustomer) {

errorMessage[]=customerInfo['name'] . '转移失败,错误原因:数据出错;';

continue;

} else {

# 处理转移时,负责人出现在只读和读写成员列表中

$customerArray = [];

teamCustomer=db(′crmc​ustomer′)−>field([′owneru​seri​d′,′rou​seri​d′,′rwu​seri​d′])−>where(′customeri​d′,customer_id)->find();

if (!empty($teamCustomer['ro_user_id'])) {

customerRo=arrayToString(arrayd​iff(stringToArray(teamCustomer['ro_user_id']), [$teamCustomer['owner_user_id']]));

customerArray[′rou​seri​d′]=customerRo;

}

if (!empty($teamCustomer['rw_user_id'])) {

customerRo=arrayToString(arrayd​iff(stringToArray(teamCustomer['rw_user_id']), [$teamCustomer['owner_user_id']]));

customerArray[′rwu​seri​d′]=customerRo;

}

db('crm_customer')->where('customer_id', customeri​d)−>update(customerArray);

}

if (in_array('crm_contacts', $types)) {

$contactsIds = [];

contactsIds=db(′crmc​ontacts′)−>where([′customeri​d′=>customer_id])->column('contacts_id');

if ($contactsIds) {

resContacts=contactsModel->transferDataById(contactsIds,param['owner_user_id'], type,is_remove);

if ($resContacts !== true) {

errorMessage[]=resContacts;

continue;

}

}

}

//商机、合同转移

if (in_array('crm_business', $types)) {

$businessIds = [];

businessIds=db(′crmb​usiness′)−>where([′customeri​d′=>customer_id])->column('business_id');

if ($businessIds) {

resBusiness=businessModel->transferDataById(businessIds,param['owner_user_id'], type,is_remove);

if ($resBusiness !== true) {

errorMessage=errorMessage ? array_merge(errorMessage,resBusiness) : $resBusiness;

continue;

}

}

}

if (in_array('crm_contract', $types)) {

$contractIds = [];

contractIds=db(′crmc​ontract′)−>where([′customeri​d′=>customer_id])->column('contract_id');

if ($contractIds) {

resContract=contractModel->transferDataById(contractIds,param['owner_user_id'], type,is_remove);

if ($resContract !== true) {

errorMessage=errorMessage ? array_merge(errorMessage,resContract) : $resContract;

continue;

}

}

}

//修改记录

updateActionLog(userInfo[′id′],′crmc​ustomer′,customer_id, '', '', '将客户转移给:' . $ownerUserName);

RecordActionLog(userInfo[′id′],′crmc​ustomer′,′transfer′,customerInfo['name'], '', '', '将客户:' . customerInfo[′name′].′转移给:′.ownerUserName);

}

if (!$errorMessage) {

return resultArray(['data' => '转移成功']);

} else {

return resultArray(['error' => $errorMessage]);

}

}

企业 CRM 管理系统部署上线之后,我们可以在华为云的控制台可以观察监控着 CPU 使用情况、内存、磁盘等等一切运作情况。华为云真的是性能强大、安全、稳定的云产品!!!

服务器

华为云 828 为企业提供多行业场景解决方案及企业专属优惠,助力企业实现数字化转型升级,大家赶紧去选购吧!!

服务器

服务器

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/csdndddsd/article/details/141969901

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分