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.
145 lines
5.7 KiB
145 lines
5.7 KiB
4 years ago
|
<?php
|
||
|
/**
|
||
|
* crm模块下的通用功能逻辑类
|
||
|
*
|
||
|
* @author qifan
|
||
|
* @date 2020-12-11
|
||
|
*/
|
||
|
|
||
|
namespace app\crm\logic;
|
||
|
|
||
|
use app\admin\controller\ApiCommon;
|
||
|
use app\admin\model\User;
|
||
|
use app\crm\model\Customer;
|
||
|
use think\Db;
|
||
|
|
||
|
class CommonLogic
|
||
|
{
|
||
|
public $error = '操作失败!';
|
||
|
|
||
|
/**
|
||
|
* 快捷编辑【线索、客户、联系人、商机、合同、回款、回访、产品】
|
||
|
*
|
||
|
* @param $param
|
||
|
* @return false|int|string
|
||
|
* @throws \think\Exception
|
||
|
* @throws \think\db\exception\DataNotFoundException
|
||
|
* @throws \think\db\exception\ModelNotFoundException
|
||
|
* @throws \think\exception\DbException
|
||
|
* @throws \think\exception\PDOException
|
||
|
*/
|
||
|
public function quickEdit($param)
|
||
|
{
|
||
|
/**
|
||
|
* $param['types'] 表名
|
||
|
* $param['action_id'] 主键ID
|
||
|
* $param['field'] 字段
|
||
|
* $param['name'] 字段中文名,用作提示
|
||
|
* $param['value] 字段值
|
||
|
*/
|
||
|
|
||
|
$actionId = $param['action_id'];
|
||
|
$types = $param['types'];
|
||
|
unset($param['action_id']);
|
||
|
unset($param['types']);
|
||
|
|
||
|
# 模型
|
||
|
$model = db($types);
|
||
|
|
||
|
# 主键
|
||
|
$primaryKey = '';
|
||
|
if ($types == 'crm_leads') $primaryKey = 'leads_id';
|
||
|
if ($types == 'crm_customer') $primaryKey = 'customer_id';
|
||
|
if ($types == 'crm_contacts') $primaryKey = 'contacts_id';
|
||
|
if ($types == 'crm_business') $primaryKey = 'business_id';
|
||
|
if ($types == 'crm_contract') $primaryKey = 'contract_id';
|
||
|
if ($types == 'crm_receivables') $primaryKey = 'receivables_id';
|
||
|
if ($types == 'crm_visit') $primaryKey = 'visit_id';
|
||
|
if ($types == 'crm_product') $primaryKey = 'product_id';
|
||
|
|
||
|
$apiCommon = new ApiCommon();
|
||
|
$userModel = new User();
|
||
|
|
||
|
# 客户模块快捷编辑权限验证
|
||
|
if ($types == 'crm_customer') {
|
||
|
$dataInfo = $model->field(['ro_user_id', 'rw_user_id', 'owner_user_id'])->where($primaryKey, $actionId)->find();
|
||
|
$auth_user_ids = $userModel->getUserByPer('crm', 'customer', 'update');
|
||
|
$rwPre = $userModel->rwPre($apiCommon->userInfo['id'], $dataInfo['ro_user_id'], $dataInfo['rw_user_id'], 'update');
|
||
|
$wherePool = (new Customer())->getWhereByPool();
|
||
|
$resPool = db('crm_customer')->alias('customer')->where(['customer_id' => $param['action_id']])->where($wherePool)->find();
|
||
|
if ($resPool || (!in_array($dataInfo['owner_user_id'],$auth_user_ids) && !$rwPre)) {
|
||
|
$this->error = '无权操作!';
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# 商机模块快捷编辑权限验证
|
||
|
if ($types == 'crm_business') {
|
||
|
$dataInfo = $model->field(['ro_user_id', 'rw_user_id', 'owner_user_id'])->where($primaryKey, $actionId)->find();
|
||
|
$auth_user_ids = $userModel->getUserByPer('crm', 'business', 'update');
|
||
|
$rwPre = $userModel->rwPre($apiCommon->userInfo['id'], $dataInfo['ro_user_id'], $dataInfo['rw_user_id'], 'update');
|
||
|
if (!in_array($dataInfo['owner_user_id'],$auth_user_ids) && !$rwPre) {
|
||
|
$this->error = '无权操作!';
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# 合同模块快捷编辑权限验证
|
||
|
if ($types == 'crm_contract') {
|
||
|
$dataInfo = $model->field(['ro_user_id', 'rw_user_id', 'owner_user_id'])->where($primaryKey, $actionId)->find();
|
||
|
$auth_user_ids = $userModel->getUserByPer('crm', 'contract', 'update');
|
||
|
$rwPre = $userModel->rwPre($apiCommon->userInfo['id'], $dataInfo['ro_user_id'], $dataInfo['rw_user_id'], 'update');
|
||
|
if (!in_array($dataInfo['owner_user_id'], $auth_user_ids) && !$rwPre) {
|
||
|
$this->error = '无权操作!';
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
foreach ($param AS $key => $value) {
|
||
|
# 查询自定义字段信息
|
||
|
$fieldInfo = Db::name('admin_field')->field(['max_length', 'is_unique', 'is_null', 'name'])
|
||
|
->where('types', $types)->where('field', $key)->find();
|
||
|
|
||
|
# 字符长度
|
||
|
if (!empty($fieldInfo['max_length']) && strlen($value) > $fieldInfo['max_length']) {
|
||
|
$this->error = $fieldInfo['name'] . ' 字符长度不能超过 ' . $fieldInfo['max_length'] . ' 个字符!';
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
# 必填
|
||
|
if (!empty($fieldInfo['is_null']) && empty($value)) {
|
||
|
$this->error = $fieldInfo['name'] . ' 是必填信息,不能为空!';
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
# 唯一
|
||
|
if (!empty($fieldInfo['is_unique']) && $model->where([$primaryKey => ['neq', $actionId]])->where($key, $value)->value($primaryKey)) {
|
||
|
$this->error = $fieldInfo['name'] . ' 内容重复!';
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# 编辑参数
|
||
|
$data = [];
|
||
|
if (!empty($param['list'])) {
|
||
|
foreach ($param['list'] AS $key => $value) {
|
||
|
foreach ($value AS $k => $v) {
|
||
|
# 处理下次联系时间格式
|
||
|
if ($k == 'next_time') {
|
||
|
$data[$k] = !empty($v) ? strtotime($v) : '';
|
||
|
} else {
|
||
|
$data[$k] = $v;
|
||
|
}
|
||
|
# 处理产品类别
|
||
|
if ($types == 'crm_product' && $k == 'category_id') {
|
||
|
$categorys = explode(',', $v);
|
||
|
$data[$k] = $categorys[count($categorys) - 1];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$data[$primaryKey] = $actionId;
|
||
|
}
|
||
|
|
||
|
return $model->update($data);
|
||
|
}
|
||
|
}
|