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/BusinessStatus.php

253 lines
7.4 KiB

4 years ago
<?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 BusinessStatus extends Common
{
/**
* 为了数据库的整洁同时又不影响Model和Controller的名称
* 我们约定每个模块的数据表都加上相同的前缀比如CRM模块用crm作为数据表前缀
*/
protected $name = 'crm_business_status';
/**
* [getDataList 商机状态list]
* @author Michael_xu
* @param type_id 商机组ID
* @return
*/
public function getDataList($type_id, $type = 0)
{
if ($type == 1) {
$list = $this->where(['type_id' => $type_id])->whereOr(['type_id' => 0])->select();
} else {
$list = $this->where(['type_id' => $type_id])->select();
}
return $list ? : [];
}
/**
* [getTypeList 商机组list]
* @author Michael_xu
* @param [string] $map [查询条件]
* @param [number] $page [当前页数]
* @param [number] $limit [每页数量]
* @return [array] [description]
*/
public function getTypeList($request)
{
$userModel = new \app\admin\model\User();
$structureModel = new \app\admin\model\Structure();
$request = $this->fmtRequest( $request );
$map = $request['map'] ? : [];
if (isset($map['search']) && $map['search']) {
//普通筛选
$map['name'] = ['like', '%'.$map['search'].'%'];
}
$map['is_display'] = ['eq', 1];
unset($map['search']);
$list = db('crm_business_type')
->where($map)
->page($request['page'], $request['limit'])
->select();
$dataCount = db('crm_business_type')->where($map)->count('type_id');
foreach ($list as $k=>$v) {
$list[$k]['create_user_id_info'] = $userModel->getUserById($v['create_user_id']);
$list[$k]['structure_id_info'] = $structureModel->getListByStr($v['structure_id']) ? : [];
$list[$k]['create_time'] = !empty($v['create_time']) ? date('Y-m-d H:i:s', $v['create_time']) : null;
$list[$k]['update_time'] = !empty($v['update_time']) ? date('Y-m-d H:i:s', $v['update_time']) : null;
}
$data = [];
$data['list'] = $list;
$data['dataCount'] = $dataCount ? : 0;
return $data;
}
/**
* 创建商机组
* @author Michael_xu
* @param
* @return
*/
public function createData($param)
{
if (!$param['name']) {
$this->error = '请填写商机组名称';
return false;
}
if (!$param['status']) {
$this->error = '请至少配置一个商机阶段';
return false;
}
$data = [];
$data['name'] = $param['name'];
$data['update_time'] = time();
$data['create_time'] = time();
$data['create_user_id'] = $param['create_user_id'];
$data['structure_id'] = arrayToString($param['structure_id']);
if ($type_id = db('crm_business_type')->insertGetId($data)) {
$statusData = [];
$i = 1;
foreach ($param['status'] as $k=>$v) {
//$v = json_decode($v,true);
$statusData[$k]['name'] = $v['name'];
$statusData[$k]['rate'] = $v['rate'];
$statusData[$k]['type_id'] = $type_id;
$statusData[$k]['order_id'] = $i;
if (empty($v['name']) && empty($v['rate'])) {
unset($statusData[$k]);
} else {
$i++;
}
}
db('crm_business_status')->insertAll($statusData);
return true;
} else {
$this->error = '添加失败';
return false;
}
}
/**
* 编辑商机组信息
* @author Michael_xu
* @param type_id 商机组类型ID
* @return
*/
public function updateDataById($param, $type_id = '')
{
$dataInfo = db('crm_business_type')->where(['type_id' => $type_id])->find();
if (!$dataInfo) {
$this->error = '数据不存在或已删除';
return false;
}
//过滤不能修改的字段
$unUpdateField = ['create_user_id'];
foreach ($unUpdateField as $v) {
unset($param[$v]);
}
if (!$param['name']) {
$this->error = '请填写商机组名称';
return false;
}
if (!$param['status']) {
$this->error = '请至少配置一个商机阶段';
return false;
}
$data = [];
$data['name'] = $param['name'];
$data['structure_id'] = arrayToString($param['structure_id']);
$newIds = []; //编辑ID
$statusData = [];
$resData = true;
// 启动事务
Db::startTrans();
try {
db('crm_business_type')->where(['type_id' => $type_id])->update($data);
$i = 1;
foreach ($param['status'] as $k=>$v) {
$statusData[$k]['name'] = $v['name'];
$statusData[$k]['rate'] = $v['rate'];
$statusData[$k]['type_id'] = $type_id;
$statusData[$k]['order_id'] = $i;
if ($v['status_id']) {
//编辑
$newIds[] = $v['status_id'];
$statusData[$k]['status_id'] = $v['status_id'];
$this->isUpdate()->saveAll($statusData);
unset($statusData[$k]);
}
if (empty($v['name']) && empty($v['rate'])) {
unset($statusData[$k]);
} else {
$i++;
}
}
//删除
$oldIds = $this->where(['type_id' => $type_id])->column('status_id'); //原ID
$delIds = array_diff($oldIds, $newIds); //数组差集
if ($delIds) {
db('crm_business_status')->where(['status_id' => ['in',$delIds]])->delete();
}
//新增
db('crm_business_status')->insertAll($statusData);
// 提交事务
Db::commit();
return true;
} catch (\Exception $e) {
$this->error = '编辑失败';
// 回滚事务
Db::rollback();
return false;
}
}
/**
* 商机组数据
* @param $status_id 商机组ID
* @return
*/
public function getDataById($type_id = '')
{
if (!$data = db('crm_business_type')->where(['type_id' => $type_id])->find()) {
$this->error = '数据不存在或已删除';
return false;
}
$status = $this->getDataList($type_id);
$data['structure_id'] = !empty($data['structure_id']) ? stringToArray($data['structure_id']) : [];
$data['status'] = $status ? : [];
return $data;
}
/**
* [delDataById 根据id删除数据]
* @param string $id [主键]
* @param boolean $delSon [是否删除子孙数据]
* @return [type] [description]
*/
public function delDataById($id = '', $delSon = false)
{
if (!$id) {
$this->error = '删除失败';
return false;
}
//状态组已被使用,则不能删除
$resDel = true;
// if (db('crm_business')->where(['type_id' => $id])->find()) {
// $this->error = '状态组已被使用,不能删除';
// return false;
// }
//启动事务
Db::startTrans();
try {
db('crm_business_type')->where(['type_id' => $id])->update(['is_display' => 0]);
// db('crm_business_type')->where(['type_id' => $id])->delete();
// db('crm_business_status')->where(['type_id' => $id])->delete();
// 提交事务
Db::commit();
return true;
} catch(\Exception $e) {
$this->error = '删除失败';
// 回滚事务
Db::rollback();
return false;
}
}
}