暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

YTANRA 2024-12-28
146


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 \app\admin\model\User();


authuserids=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(′crmcustomer′)−>alias(′customer′)−>where([′customerid′=>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[′userid′]=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 \app\admin\model\User();


$recordModel = new \app\admin\model\Record();


$fileModel = new \app\admin\model\File();


$actionRecordModel = new \app\admin\model\ActionRecord();


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


customerid[]=param['id'];


} else {


customerid=param['id'];


}


$delIds = [];


$errorMessage = [];


//数据权限判断


authuserids=userModel->getUserByPer('crm', 'customer', 'delete');


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


adminId=userModel->getAdminId();


wherePool=customerModel->getWhereByPool();


foreach (customeridask => $v) {


$isDel = true;


//数据详情


data=db(′crmcustomer′)−>where([′customerid′=>v])->find();


if (!$data) {


$isDel = false;


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


}


resPool=db(′crmcustomer′)−>alias(′customer′)−>where([′customerid′=>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(′crmbusiness′)−>where([′customerid′=>v])->find();


if ($resBusiness) {


$isDel = false;


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


}


}


if ($isDel) {


resContacts=db(′crmcontacts′)−>where([′customerid′=>v])->find();


if ($resContacts) {


$isDel = false;


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


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


}


}


if ($isDel) {


resContract=db(′crmcontract′)−>where([′customerid′=>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(′crmcustomer′,delIds);


// 删除关联操作记录


actionRecordModel−>delDataById([′types′=>′crmcustomer′,′actionid′=>delIds]);


foreach (dataInfoask => $v) {


RecordActionLog(userInfo[′id′],′crmcustomer′,′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 \app\admin\model\User();


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


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


}


if (!param[′customerid′]∣∣!isarray(param['customer_id'])) {


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


}


isremove=(param['is_remove'] == 2) ? 2 : 1;


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


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


$data = [];


data[′owneruserid′]=param['owner_user_id'];


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


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


# 获取客户的时间


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


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


$errorMessage = [];


foreach (param[′customerid′]ascustomer_id) {


customerInfo=db(′crmcustomer′)−>where([′customerid′=>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[′userid′]=[customerInfo['owner_user_id']]; //协作人


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


teamData[′typesid′]=customer_id; //类型 ID


teamData[′isdel′]=(is_remove == 1) ? 1 : '';


res=settingModel->createTeamData($teamData);


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


$data['is_allocation'] = 1;


resCustomer=db(′crmcustomer′)−>where([′customerid′=>customer_id])->update($data);


if (!$resCustomer) {


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


continue;


} else {


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


$customerArray = [];


teamCustomer=db(′crmcustomer′)−>field([′owneruserid′,′rouserid′,′rwuserid′])−>where(′customerid′,customer_id)->find();


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


customerRo=arrayToString(arraydiff(stringToArray(teamCustomer['ro_user_id']), [$teamCustomer['owner_user_id']]));


customerArray[′rouserid′]=customerRo;


}


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


customerRo=arrayToString(arraydiff(stringToArray(teamCustomer['rw_user_id']), [$teamCustomer['owner_user_id']]));


customerArray[′rwuserid′]=customerRo;


}


db('crm_customer')->where('customer_id', customerid)−>update(customerArray);


}


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


$contactsIds = [];


contactsIds=db(′crmcontacts′)−>where([′customerid′=>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(′crmbusiness′)−>where([′customerid′=>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(′crmcontract′)−>where([′customerid′=>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′],′crmcustomer′,customer_id, '', '', '将客户转移给:' . $ownerUserName);


RecordActionLog(userInfo[′id′],′crmcustomer′,′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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论