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.
wkcrm/application/crm/model/CustomerConfig.php

228 lines
7.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
// +----------------------------------------------------------------------
// | Description: 客户扩展设置
// +----------------------------------------------------------------------
// | Author: Michael_xu | gengxiaoxu@5kcrm.com
// +----------------------------------------------------------------------
namespace app\crm\model;
use think\Db;
use app\admin\model\Common;
use think\Request;
use think\Validate;
class CustomerConfig extends Common
{
/**
* 为了数据库的整洁同时又不影响Model和Controller的名称
* 我们约定每个模块的数据表都加上相同的前缀比如CRM模块用crm作为数据表前缀
*/
protected $name = 'crm_customer_config';
protected $createTime = 'create_time';
protected $updateTime = 'update_time';
protected $autoWriteTimestamp = true;
/**
* 列表数据
*
* @param $request
* @return array
* @throws \think\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function getDataList($request)
{
$userModel = new \app\admin\model\User();
$structureModel = new \app\admin\model\Structure();
$request = $this->fmtRequest( $request );
$map = $request['map'] ? : [];
$order = 'update_time desc'; //排序
$list = $this
->where($map)
->page($request['page'], $request['limit'])
->order($order)
->select();
foreach ($list as $k=>$v) {
$list[$k]['user_ids_info'] = $userModel->getListByStr($v['user_ids']);
$list[$k]['structure_ids_info'] = $structureModel->getListByStr($v['structure_ids']);
}
$dataCount = $this->where($map)->count('id');
$data = [];
$data['list'] = $list;
$data['dataCount'] = $dataCount ? : 0;
return $data;
}
/**
* 保存/编辑相关信息 todo 创建和编辑走一个接口,前端非要这么搞
*
* @param array $param
* @return array|bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function createData($param)
{
$id = !empty($param['id']) ? $param['id'] : 0;
if ($param['value'] <= 0) {
$this->error = '数量上限必须大于0';
return false;
}
# 验证重复
if ($this->checkRepeat($param['types'], $param['user_ids'], $param['structure_ids'], $id)) {
$this->error = '有员工或部门包含在其他的规则里!';
return false;
}
$param['types'] = !empty($param['types']) ? $param['types'] : 1; # 1拥有客户上限2锁定客户上限
$param['user_ids'] = !empty($param['user_ids']) ? arrayToString($param['user_ids']) : ''; # 处理user_id
$param['structure_ids'] = !empty($param['structure_ids']) ? arrayToString($param['structure_ids']) : ''; # 处理structure_id
if ($this->allowField(true)->isUpdate(empty($id) ? false : true)->save($param, !empty($id) ? ['id' => $id] : [])) {
$data['id'] = $this->id;
return $data;
} else {
$this->error = '创建失败';
return false;
}
}
/**
* 编辑相关信息
*
* @param $param
* @param string $id
* @return array|bool
*/
public function updateDataById($param, $id = '')
{
if (!$id) {
$this->error = '参数错误';
return false;
}
if ($param['value'] <= 0) {
$this->error = '数量上限必须大于0';
return false;
}
unset($param['id']);
$param['user_ids'] = is_array($param['user_ids']) ? arrayToString($param['user_ids']) : $param['user_ids']; //处理user_id
$param['structure_ids'] = is_array($param['structure_ids']) ? arrayToString($param['structure_ids']) : ''; //处理structure_id
if ($this->allowField(true)->isUpdate(true)->save($param, ['id' => $id])) {
$data['id'] = $id;
return $data;
} else {
$this->error = '编辑失败';
return false;
}
}
/**
* 相关信息数据
*
* @param string $id
* @return Common|array|bool|\PDOStatement|string|\think\Model|null
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function getDataById($id = '')
{
$map['id'] = $id;
$dataInfo = $this->where($map)->find();
return $dataInfo ? : [];
}
/**
* 验证相关信息
*
* @param $user_id
* @param $types
* @param string $is_update
* @return bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function checkData($user_id, $types, $is_update = '')
{
$userModel = new \app\admin\model\User();
$customerModel = new \app\crm\model\Customer();
$userInfo = $userModel->getUserById($user_id);
$dataInfo = $this->where(['types' => $types,'user_ids' => ['like','%,'.$user_id.',%']])->order('update_time desc')->find();
if (!$dataInfo) {
$dataInfo = $this->where(['types' => $types,'structure_ids' => ['like','%,'.$userInfo['structure_id'].',%']])->find();
}
switch ($types) {
case '1' : $types_title = '拥有的客户数量'; break;
case '2' : $types_title = '锁定的客户数量'; break;
}
if ($dataInfo) {
$is_deal = $dataInfo['is_deal'] ? : 0;
if (!$dataInfo['value']) {
$this->error = $types_title.'超出限制:'.$dataInfo['value'].'个';
return false;
}
//拥有数、锁定数
$count = $customerModel->getCountByHave($user_id,$is_deal,$types);
$error = false;
if ($count >= $dataInfo['value']) {
$error = true;
}
if ($is_update == 1 && $types == 1 && $dataInfo['is_deal'] == 1) {
//更改成交状态
if ($count = $dataInfo['value']) {
$error = false;
}
}
if ($error == true) {
$this->error = $userInfo['realname'].','.$types_title.'超出限制:'.$dataInfo['value'].'个';
return false;
}
}
return true;
}
/**
* 验证拥有/锁定客户数中的员工或部门是否重复添加
*
* @param $types
* @param $users
* @param $structures
* @param $id
* @return bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
private function checkRepeat($types, $users, $structures, $id)
{
$userArray = [];
$structureArray = [];
$where['types'] = $types;
if (!empty($id)) $where['id'] = ['neq', $id];
$data = db('crm_customer_config')->field(['user_ids', 'structure_ids'])->where($where)->select();
foreach ($data AS $key => $value) {
if (!empty($value['user_ids'])) {
$userArray = array_merge($userArray, explode(',', trim($value['user_ids'], ',')));
}
if (!empty($value['structure_ids'])) {
$structureArray = array_merge($structureArray, explode(',', trim($value['structure_ids'], ',')));
}
}
if (array_intersect($users, $userArray) || array_intersect($structures, $structureArray)) {
return true;
}
return false;
}
}