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.
174 lines
5.6 KiB
174 lines
5.6 KiB
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Admin\Common\Rpc;
|
|
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
|
use App\Models\v3\Market as MarketModel;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Models\v3\LanzuEmployees as EmployeesModel;
|
|
|
|
class ImsCjdcOrderMain extends Model
|
|
{
|
|
// 线上订单,外卖
|
|
const ORDER_TYPE_ONLINE = 1;
|
|
// 线下订单,当面付
|
|
const ORDER_TYPE_OFFLINE = 4;
|
|
|
|
// 配送方式:1服务站配送,2达达配送,3用户自提 shipping_type
|
|
const ORDER_SHIPPING_TYPE_MARKET = 1;
|
|
const ORDER_SHIPPING_TYPE_DADA = 2;
|
|
const ORDER_SHIPPING_TYPE_USER_SELF = 3;
|
|
|
|
// 订单状态
|
|
// 待付款
|
|
const ORDER_STATE_UNPAY = 1;
|
|
// 待接单
|
|
const ORDER_STATE_UNTAKE = 2;
|
|
// 待送达
|
|
const ORDER_STATE_DELIVERY = 3;
|
|
// 已完成
|
|
const ORDER_STATE_COMPLETE = 4;
|
|
// 已评价
|
|
const ORDER_STATE_EVALUATED = 5;
|
|
// 已取消
|
|
const ORDER_STATE_CANCEL = 6;
|
|
// 已拒单
|
|
const ORDER_STATE_REFUSE = 7;
|
|
// 退款中
|
|
const ORDER_STATE_REFUNDING = 8;
|
|
// 已退款
|
|
const ORDER_STATE_REFUNDED = 9;
|
|
// 拒绝退款
|
|
const ORDER_STATE_UNREFUND = 10;
|
|
// 部分退款
|
|
const ORDER_STATE_REBATES = 11;
|
|
// 完成状态组合
|
|
const ORDER_STATE_FINISH = [self::ORDER_STATE_COMPLETE, self::ORDER_STATE_EVALUATED, self::ORDER_STATE_UNREFUND, self::ORDER_STATE_REBATES];
|
|
|
|
const STATE_LIST = [
|
|
self::ORDER_STATE_UNPAY => '待支付',
|
|
self::ORDER_STATE_UNTAKE => '待接单',
|
|
self::ORDER_STATE_DELIVERY => '待送达',
|
|
self::ORDER_STATE_COMPLETE => '已完成',
|
|
self::ORDER_STATE_EVALUATED => '已评价',
|
|
self::ORDER_STATE_CANCEL => '已取消',
|
|
self::ORDER_STATE_REFUSE => '已拒单',
|
|
self::ORDER_STATE_REFUNDING => '退款中',
|
|
self::ORDER_STATE_REFUNDED => '已退款',
|
|
self::ORDER_STATE_UNREFUND => '拒绝退款',
|
|
self::ORDER_STATE_REBATES => '部分退款',
|
|
];
|
|
const TABLE_NAME = 'lanzu_order_main';
|
|
// 订单支付方式
|
|
// 微信支付
|
|
const ORDER_PAY_WX = 1;
|
|
// 余额支付
|
|
const ORDER_PAY_BALANCE = 2;
|
|
|
|
use HasDateTimeFormatter;
|
|
|
|
protected $table = 'lanzu_order_main';
|
|
public $timestamps = false;
|
|
|
|
public static $tableName = 'lanzu_order_main';
|
|
|
|
public function imsCjdcUser()
|
|
{
|
|
return $this->hasOne('\App\Models\ImsCjdcUser', 'id', 'user_id');
|
|
}
|
|
|
|
public function market()
|
|
{
|
|
return $this->hasOne('\App\Models\ImsCjdcMarket', 'id', 'market_id');
|
|
}
|
|
|
|
/**
|
|
* 变更订单状态,
|
|
* @param $oid //主订单id
|
|
* @param $state //订单状态
|
|
*/
|
|
public function modifyState($oid, $state)
|
|
{
|
|
$where = [];
|
|
$where['state'] = $state;
|
|
$where['updated_at'] = time();
|
|
if ($state == 3) {
|
|
$where['receive_time'] = time();
|
|
} elseif ($state == 4) {
|
|
$where['complete_time'] = time();
|
|
} elseif ($state == 6) {
|
|
$where['cancel_time'] = time();
|
|
}
|
|
|
|
return self::where('id', $oid)->update($where);
|
|
|
|
}
|
|
|
|
public function updateShippingType($oid, $type)
|
|
{
|
|
return self::where('id', $oid)->update(['shipping_type' => $type]);
|
|
}
|
|
|
|
public static function getOrderData($oid)
|
|
{
|
|
$order = ImsCjdcOrderMain::where('id', $oid)->first()->toArray();
|
|
$order['created_at'] = date('Y-m-d H:i:s', $order['created_at']);
|
|
$order['updated_at'] = $order['updated_at'] ? date('Y-m-d H:i:s', $order['updated_at']) : null;
|
|
$order['pay_type'] = config('order.pay_type')[$order['pay_type']];
|
|
$order['shipping_type_num'] = $order['shipping_type'];
|
|
$order['shipping_type'] = config('order.shipping_type')[$order['shipping_type']];
|
|
$order['horseman_name'] = $order['shipping_name'] ?? LanzuServiceHorseman::getName($order['horseman_id']);
|
|
|
|
// 获取市场
|
|
$marketId = $order['market_id']?$order['market_id']:0;
|
|
$market = MarketModel::getMarketInfo($marketId,['name','lat','lng']);
|
|
|
|
$order['market_name'] = $market?$market['name']:'';
|
|
$order['market_lat'] = $market?$market['lat']:'';
|
|
$order['market_lng'] = $market?$market['lng']:'';
|
|
|
|
//获取市场经纬度
|
|
//$market = LanzuMarket::where('id',$order['market_id'])->first()->toArray();
|
|
//$order['distance'] = Rpc::getDistance($market['lng'],$market['lat'],$order['lng'],$order['lat'])['result'];
|
|
if ($order['delivery_distance'] > 1000) {
|
|
$order['delivery_distance'] = number_format(($order['delivery_distance'] / 1000), 1) . 'km';
|
|
} else {
|
|
$order['delivery_distance'] .= '米';
|
|
}
|
|
return $order;
|
|
}
|
|
|
|
/**
|
|
* 根据订单状态统计数量
|
|
* @param $state
|
|
* @param null $marketId
|
|
* @return mixed
|
|
*/
|
|
public static function getOrderStateCount($state, $marketId = null)
|
|
{
|
|
$builder = self::where('type', 1)
|
|
->where('created_at','>=',time()-(7*86400));
|
|
if ($marketId) {
|
|
$builder = $builder->where('market_id',$marketId);
|
|
}
|
|
if ($state==3){
|
|
$builder = $builder->where('state',$state)->where('shipping_type',1)->where('horseman_id',0);
|
|
}elseif ($state==311){
|
|
$builder = $builder->where('state',3)->where('shipping_type',1)->where('horseman_id','>',0);
|
|
}else{
|
|
$builder = $builder->where('state',$state);
|
|
}
|
|
$count = $builder->count();
|
|
return $count;
|
|
}
|
|
|
|
/**
|
|
* 关联懒族员工表
|
|
*/
|
|
public function employees()
|
|
{
|
|
return $this->belongsTo(new EmployeesModel(),'horseman_id','id','left');
|
|
}
|
|
}
|