274 lines
7.4 KiB
PHP
274 lines
7.4 KiB
PHP
<?php
|
|
|
|
namespace app\admin\model;
|
|
|
|
use app\admin\library\Auth;
|
|
use think\Model;
|
|
use traits\model\SoftDelete;
|
|
|
|
|
|
class Order extends Model
|
|
{
|
|
|
|
|
|
use SoftDelete;
|
|
|
|
|
|
// 表名
|
|
protected $name = 'order';
|
|
|
|
// 自动写入时间戳字段
|
|
protected $autoWriteTimestamp = 'datetime';
|
|
|
|
protected $dateFormat = 'Y-m-d H:i:s';
|
|
// 定义时间戳字段名
|
|
protected $createTime = 'create_time';
|
|
protected $updateTime = 'update_time';
|
|
protected $deleteTime = 'delete_time';
|
|
|
|
// 追加属性
|
|
protected $append = [
|
|
'status_text',
|
|
'collect_text',
|
|
'dispatch_type_text',
|
|
'offline_amount_type_text'
|
|
];
|
|
|
|
|
|
const TAB_DISPATCH = 'dispatch'; //派单
|
|
|
|
const TAB_PENDING = 'pending'; //跟进中
|
|
|
|
const TAB_SETTING = 'setting'; //跟进中
|
|
|
|
const TAB_AUDIT = 'audit'; //审核
|
|
|
|
const TAB_REVIEW = 'review'; //回访
|
|
|
|
const TAB_VALID = 'valid'; //有效的订单,即除了取消的和草稿
|
|
|
|
const STATUS_DRAFT = 0; //草稿
|
|
const STATUS_DISPATCHING = 10; //待派单
|
|
const STATUS_DISPATCHED = 20; //已派单
|
|
//const STATUS_ING = 30; //进行中
|
|
const STATUS_CHECKING = 40; //待审核
|
|
const STATUS_CHECKONCE = 41; //审核未通过
|
|
const STATUS_AUDITING = 50; //审核中
|
|
const STATUS_FINISHED = 60; //已完成
|
|
const STATUS_AFTERSALE= 70; //已完成
|
|
const STATUS_CANCEL = -10; //取消
|
|
|
|
|
|
|
|
|
|
|
|
public function getStatusList()
|
|
{
|
|
return ['0' => __('Status 0'),'10' => __('Status 10'), '20' => __('Status 20'),
|
|
//'30' => __('Status 30'),
|
|
'40' => __('Status 40'),
|
|
'41' => __('Status 41'),
|
|
'50' => __('Status 50'),
|
|
'60' => __('Status 60'),
|
|
'70' => __('Status 70'),
|
|
'-10' => __('Status -10')];
|
|
}
|
|
|
|
|
|
public function getDispatchTypeList()
|
|
{
|
|
return ['10' => __('Dispatch_type 10'), '11' => __('Dispatch_type 11'), '20' => __('Dispatch_type 20')];
|
|
}
|
|
|
|
|
|
public function getAuditStatusList()
|
|
{
|
|
return [self::STATUS_AUDITING => __('Status 50'), self::STATUS_FINISHED => __('Status 60'), ];
|
|
}
|
|
|
|
|
|
public function getOfflineTotalTypeList()
|
|
{
|
|
return ['0' => __('Offline_amount_type 0'), '1'=> __('Offline_amount_type 1'),'2' => __('Offline_amount_type 2')];
|
|
}
|
|
|
|
|
|
public function getStatusTextAttr($value, $data)
|
|
{
|
|
$value = $value ?: ($data['status'] ?? '');
|
|
$list = $this->getStatusList();
|
|
return $list[$value] ?? '';
|
|
}
|
|
|
|
public function getOfflineAmountTypeTextAttr($value, $data)
|
|
{
|
|
$value = $value ?: ($data['offline_amount_type'] ?? '');
|
|
$list = $this->getOfflineTotalTypeList();
|
|
return $list[$value] ?? '';
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function getCollectTextAttr($value, $data)
|
|
{
|
|
$value = $value ?: ($data['collect'] ?? '');
|
|
//$list = $this->getCollectList();
|
|
return $list[$value] ?? '';
|
|
}
|
|
|
|
|
|
public function getDispatchTypeTextAttr($value, $data)
|
|
{
|
|
$value = $value ?: ($data['dispatch_type'] ?? '');
|
|
$list = $this->getDispatchTypeList();
|
|
return $list[$value] ?? '';
|
|
}
|
|
|
|
|
|
protected function scopeTab($query, $tab=null)
|
|
{
|
|
$status = $this->tabStatus($tab);
|
|
if(!empty($status)){
|
|
$query->whereIn('fa_order.status', $status);
|
|
}
|
|
return $query;
|
|
}
|
|
|
|
public function tabStatus($tab){
|
|
$tabStatus = [
|
|
self::TAB_DISPATCH => [
|
|
self::STATUS_DISPATCHING,
|
|
self::STATUS_DISPATCHED,
|
|
self::STATUS_CANCEL
|
|
], //派单管理状态
|
|
self::TAB_PENDING => [
|
|
self::STATUS_DISPATCHED,
|
|
//self::STATUS_ING,
|
|
self::STATUS_CHECKING,
|
|
], //订单跟进状态
|
|
self::TAB_AUDIT => [
|
|
self::STATUS_AUDITING,
|
|
self::STATUS_FINISHED
|
|
], //待结算
|
|
self::TAB_REVIEW => [
|
|
self::STATUS_FINISHED
|
|
],
|
|
self::TAB_SETTING => [
|
|
self::STATUS_CHECKING,
|
|
self::STATUS_CHECKONCE
|
|
],
|
|
self::TAB_VALID => [
|
|
self::STATUS_DISPATCHING,
|
|
self::STATUS_DISPATCHED,
|
|
self::STATUS_CHECKING,
|
|
self::STATUS_CHECKONCE,
|
|
self::STATUS_AUDITING,
|
|
self::STATUS_FINISHED
|
|
],
|
|
];
|
|
return $tabStatus[$tab] ?? [];
|
|
}
|
|
|
|
public const DELETED_TYPE = [
|
|
1 => '无相关师傅',
|
|
2 => '距离客户太远',
|
|
3 => '价格不同意',
|
|
4 => '重复订单',
|
|
5 => '联系客户已晚',
|
|
6 => '询价后没有后续',
|
|
7 => '一直联系不上',
|
|
8 => '客户不能久等',
|
|
];
|
|
|
|
|
|
public function incomeBtnStatus(){
|
|
return array_merge($this->tabStatus(self::TAB_PENDING),[self::STATUS_AUDITING]);
|
|
}
|
|
|
|
public function user(){
|
|
return $this->belongsTo(Admin::class,'admin_id',);
|
|
}
|
|
|
|
public function admin(){
|
|
return $this->belongsTo(Admin::class,'admin_id',joinType: 'left')
|
|
->setEagerlyType(0);
|
|
}
|
|
|
|
public function item(){
|
|
return $this->belongsTo(Item::class,'item_id',);
|
|
}
|
|
public function source(){
|
|
return $this->belongsTo(Source::class,'source');
|
|
}
|
|
|
|
public function area(){
|
|
return $this->belongsTo(Area::class,'area_id','area_code');
|
|
}
|
|
public function coupon(){
|
|
return $this->belongsTo(Coupons::class,'coupon_id');
|
|
}
|
|
public function phone(){
|
|
return $this->belongsTo(Phones::class,'work_tel_id',);
|
|
}
|
|
|
|
public function auditadmin(){
|
|
return $this->belongsTo(Admin::class,'audit_admin_id',);
|
|
}
|
|
|
|
|
|
public function dispatchadmin(){
|
|
return $this->belongsTo(Admin::class,'dispatch_admin_id',);
|
|
}
|
|
|
|
|
|
public function dispatch()
|
|
{
|
|
return $this->hasOne(OrderDispatch::class, 'order_id', 'id', [], 'LEFT')->setEagerlyType(0)->where('fa_order_dispatch.status','>',0);
|
|
}
|
|
|
|
public function dispatch2()
|
|
{
|
|
return $this->hasOne(OrderDispatch::class, 'order_id', 'id', [], 'LEFT')->setEagerlyType(1)->where('fa_order_dispatch.status',OrderDispatch::STATUS_FINISH);
|
|
}
|
|
|
|
/**
|
|
* 管理员权限
|
|
* @param $query
|
|
* @param Auth $auth
|
|
* @param string $auth_admin_id
|
|
* @return mixed
|
|
*/
|
|
public function scopeAuth($query, Auth $auth, string $admin_id_field='admin_id'){
|
|
|
|
if(!$auth->isSuperAdmin()){
|
|
$query->where('fa_order.'.$admin_id_field,$auth->id);
|
|
}
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* 地域权限
|
|
* @param $query
|
|
* @param Auth $auth
|
|
* @param string $area_id_field
|
|
* @return mixed
|
|
*/
|
|
public function scopeAreaauth($query,Auth $auth,string $area_id_field='area_id'){
|
|
if(!$auth->isSuperAdmin()){
|
|
$areaIds = array_unique(array_filter(explode(',',trim($auth->area_ids??''))));
|
|
if(!in_array('*',$areaIds)){
|
|
$query->whereIn('fa_order.'.$area_id_field,$areaIds);
|
|
}
|
|
}
|
|
return $query;
|
|
}
|
|
|
|
|
|
public function workerman(){
|
|
return $this->belongsTo(Worker::class,'worker_id',);
|
|
}
|
|
|
|
}
|