硕顺crm后台
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.
 
 
 
 
 
 

312 lines
9.3 KiB

<?php
namespace addons\qingdong\model;
use think\Db;
use think\Exception;
use think\Model;
use traits\model\SoftDelete;
/**
* 商机管理
*/
class Business Extends Model
{
use SoftDelete;
// 表名,不含前缀
protected $name = 'qingdong_business';
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = 'deletetime';
//创建商机
public static function createBusiness($params) {
//自定义字段
$other = [];
foreach ($params as $name => $val) {
if (strstr($name, 'other_') !== false) {
if(is_array($val)){
$other[$name] = implode(',',$val);
}else{
$other[$name] = $val;
}
unset($params[$name]);
}else{
if(empty($params[$name])){
$params[$name]=NULL;
}
}
}
$product = [];
if (isset($params['product']) && $params['product']) {
$product = $params['product'];
unset($params['product']);
foreach ($product as $tkey => $t) {
unset($product[$tkey]['id']);
if($t['number'] <=0){
throw new Exception('产品数量必须大于0');
}
}
}
$customer=Customer::where(['id'=>$params['customer_id']])->find();
if(empty($customer)){
throw new Exception('客户不存在');
}
$params['owner_staff_id'] = $customer->owner_staff_id;
$staff = Staff::info();
if (!empty($staff)) {
$params['create_staff_id'] = $staff->id;
}
$Model = new self;
$result = $Model->allowField(true)->save($params);
if (false === $result) {
// 验证失败 输出错误信息
throw new Exception($Model->getError());
}
$lastId = $Model->id;
$otherModel = new BusinessOther();
if ($otherModel->save(['id' => $lastId, 'otherdata' => json_encode($other, JSON_UNESCAPED_UNICODE)]) === false) {
// 验证失败 输出错误信息
throw new Exception($otherModel->getError());
}
$addProduct = [];
foreach ($product as $v) {
$v['business_id'] = $lastId;
$addProduct[] = $v;
}
if ($addProduct) {
$productModel = new BusinessProduct();
$productModel->allowField(true)->saveAll($addProduct);
}
OperationLog::createLog(OperationLog::BUSINESS_TYPE, $lastId, '创建商机');
return true;
}
//修改商机
public static function updateBusiness($params) {
//自定义字段
$other = [];
foreach ($params as $name => $val) {
if (strstr($name, 'other_') !== false) {
if(is_array($val)){
$other[$name] = implode(',',$val);
}else{
$other[$name] = $val;
}
unset($params[$name]);
}else{
if(empty($params[$name])){
$params[$name]=NULL;
}
}
}
$product = [];
if (isset($params['product'])) {
$product = $params['product'];
unset($params['product']);
if(isset($params['row[product'])){
unset($params['row[product']);
}
if(!is_array($product)){
$product = json_decode($product,true);
}
foreach ($product as $tkey => $t) {
unset($product[$tkey]['id']);
if($t['number'] <=0){
throw new Exception('产品数量必须大于0');
}
}
}
$Model = new self;
// 调用当前模型对应的User验证器类进行数据验证
$result = $Model->allowField(true)->save($params, ['id' => $params['id']]);
if (false === $result) {
// 验证失败 输出错误信息
throw new Exception($Model->getError());
}
$otherModel = new BusinessOther();
if ($otherModel->save(['otherdata' => json_encode($other, JSON_UNESCAPED_UNICODE)], ['id' => $params['id']]) === false) {
// 验证失败 输出错误信息
throw new Exception($otherModel->getError());
}
$addProduct = [];
if($product){
foreach ($product as $v) {
$v['business_id'] = $params['id'];
$addProduct[] = $v;
}
}
if ($addProduct) {
$productModel = new BusinessProduct();
$productModel->where(['business_id' => $params['id']])->delete();
$productModel->allowField(true)->saveAll($addProduct);
}
return true;
}
//获取更新时间
public function getUpdatetimeAttr($value) {
return date('Y-m-d H:i:s', $value);
}
//负责人
public function ownerStaff() {
return $this->hasOne(Staff::class, 'id', 'owner_staff_id')->field('id,name,img');
}
//客户
public function customer() {
return $this->hasOne(Customer::class, 'id', 'customer_id')->field('id,name,follow');
}
//商机
public function businessOther() {
return $this->hasOne(BusinessOther::class, 'id', 'id');
}
//
public function staff() {
return $this->hasOne(Staff::class, 'id', 'owner_staff_id')->field('id,name,img,department_id,post');
}
//产品
public function product(){
return $this->hasMany(BusinessProduct::class,'business_id','id')->with('productOne');
}
/**
* 批量转移商机
*/
public static function batchTransfer($ids, $staff_id) {
Db::startTrans();
try {
if (Business::where(['id' => ['in',$ids]])->update([
'owner_staff_id' => $staff_id,
'updatetime' => time()
]) == false) {
throw new Exception('修改失败');
}
$staff = Staff::get($staff_id);
foreach ($ids as $id){
OperationLog::createLog(OperationLog::BUSINESS_TYPE, $id, '将商机转移给:' . $staff['name']);
}
Db::commit();
} catch (Exception $e) {
Db::rollback();
throw new Exception($e->getMessage());
}
return true;
}
public static function getList() {
return self::where(['owner_staff_id'=>['in',Staff::getMyStaffIds()]])->field('id,name')->select();
}
/**
* 推进商机
*/
public static function batchStatus($params) {
Db::startTrans();
try {
$ret = array(
'business_id'=>$params['id'],
'type'=>$params['type'],
'remark'=>$params['remark'],
'file'=>$params['file'],
);
$result = BusinessStatus::create($ret);
if ($result == false) {
throw new Exception('推进失败');
}
Db::commit();
} catch (Exception $e) {
Db::rollback();
throw new Exception($e->getMessage());
}
return true;
}
/**
* 导入商机
* @param $data
* @return bool
*/
public static function importBusiness($data) {
$addBusiness = [];
$addOther = [];
$addLog=[];
foreach ($data as $params) {
//自定义字段
$other = [];
foreach ($params as $name => $val) {
if (strstr($name, 'other_') !== false) {
if(is_array($val)){
$other[$name] = implode(',',$val);
}else{
$other[$name] = $val;
}
unset($params[$name]);
}else{
if(empty($params[$name])){
$params[$name]=NULL;
}
}
}
$other['id'] = $params['id'];
$params['next_time'] = date('Y-m-d H:i:s');
$params['createtime'] = time();
$params['updatetime'] = time();
$addOther[] = ['id' => $params['id'], 'otherdata' => json_encode($other, JSON_UNESCAPED_UNICODE)];
$addLog[] = [
'content' => '导入商机',
'operation_type' => 2,
'operation_id' => 30,
'relation_type' => OperationLog::BUSINESS_TYPE,
'relation_id' => $params['id'],
'createtime' => time()
];
$addBusiness[] = $params;
}
$customer = new self;
// 调用当前模型对应的User验证器类进行数据验证
$result = $customer->allowField(true)->insertAll($addBusiness);
$otherModel = new BusinessOther();
$otherModel->allowField(true)->insertAll($addOther);
$logModel = new OperationLog();
$logModel->allowField(true)->insertAll($addLog);
return true;
}
}