链街Dcat后台
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.

179 lines
5.8 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Models;
  3. use App\Admin\Common\Rpc;
  4. use Dcat\Admin\Traits\HasDateTimeFormatter;
  5. use App\Models\v3\Market as MarketModel;
  6. use Illuminate\Database\Eloquent\Model;
  7. use Illuminate\Support\Facades\DB;
  8. use App\Models\v3\LanzuEmployees as EmployeesModel;
  9. class ImsCjdcOrderMain extends Model
  10. {
  11. // 线上订单,外卖
  12. const ORDER_TYPE_ONLINE = 1;
  13. // 线下订单,当面付
  14. const ORDER_TYPE_OFFLINE = 4;
  15. // 配送方式:1服务站配送,2达达配送,3用户自提 shipping_type
  16. const ORDER_SHIPPING_TYPE_MARKET = 1;
  17. const ORDER_SHIPPING_TYPE_DADA = 2;
  18. const ORDER_SHIPPING_TYPE_USER_SELF = 3;
  19. // 订单状态
  20. // 待付款
  21. const ORDER_STATE_UNPAY = 1;
  22. // 待接单
  23. const ORDER_STATE_UNTAKE = 2;
  24. // 待送达
  25. const ORDER_STATE_DELIVERY = 3;
  26. // 已完成
  27. const ORDER_STATE_COMPLETE = 4;
  28. // 已评价
  29. const ORDER_STATE_EVALUATED = 5;
  30. // 已取消
  31. const ORDER_STATE_CANCEL = 6;
  32. // 已拒单
  33. const ORDER_STATE_REFUSE = 7;
  34. // 退款中
  35. const ORDER_STATE_REFUNDING = 8;
  36. // 已退款
  37. const ORDER_STATE_REFUNDED = 9;
  38. // 拒绝退款
  39. const ORDER_STATE_UNREFUND = 10;
  40. // 部分退款
  41. const ORDER_STATE_REBATES = 11;
  42. // 完成状态组合
  43. const ORDER_STATE_FINISH = [self::ORDER_STATE_COMPLETE, self::ORDER_STATE_EVALUATED, self::ORDER_STATE_UNREFUND, self::ORDER_STATE_REBATES];
  44. const STATE_LIST = [
  45. self::ORDER_STATE_UNPAY => '待支付',
  46. self::ORDER_STATE_UNTAKE => '待接单',
  47. self::ORDER_STATE_DELIVERY => '待送达',
  48. self::ORDER_STATE_COMPLETE => '已完成',
  49. self::ORDER_STATE_EVALUATED => '已评价',
  50. self::ORDER_STATE_CANCEL => '已取消',
  51. self::ORDER_STATE_REFUSE => '已拒单',
  52. self::ORDER_STATE_REFUNDING => '退款中',
  53. self::ORDER_STATE_REFUNDED => '已退款',
  54. self::ORDER_STATE_UNREFUND => '拒绝退款',
  55. self::ORDER_STATE_REBATES => '部分退款',
  56. ];
  57. const SHIPPING_TYPE_LIST = [
  58. self::ORDER_SHIPPING_TYPE_MARKET => '服务站配送',
  59. self::ORDER_SHIPPING_TYPE_DADA => '达达配送',
  60. self::ORDER_SHIPPING_TYPE_USER_SELF => '用户自提'
  61. ];
  62. const TABLE_NAME = 'lanzu_order_main';
  63. // 订单支付方式
  64. // 微信支付
  65. const ORDER_PAY_WX = 1;
  66. // 余额支付
  67. const ORDER_PAY_BALANCE = 2;
  68. use HasDateTimeFormatter;
  69. protected $table = 'lanzu_order_main';
  70. public $timestamps = false;
  71. public static $tableName = 'lanzu_order_main';
  72. public function imsCjdcUser()
  73. {
  74. return $this->hasOne('\App\Models\ImsCjdcUser', 'id', 'user_id');
  75. }
  76. public function market()
  77. {
  78. return $this->hasOne('\App\Models\ImsCjdcMarket', 'id', 'market_id');
  79. }
  80. /**
  81. * 变更订单状态,
  82. * @param $oid //主订单id
  83. * @param $state //订单状态
  84. */
  85. public function modifyState($oid, $state)
  86. {
  87. $where = [];
  88. $where['state'] = $state;
  89. $where['updated_at'] = time();
  90. if ($state == 3) {
  91. $where['receive_time'] = time();
  92. } elseif ($state == 4) {
  93. $where['complete_time'] = time();
  94. } elseif ($state == 6) {
  95. $where['cancel_time'] = time();
  96. }
  97. return self::where('id', $oid)->update($where);
  98. }
  99. public function updateShippingType($oid, $type)
  100. {
  101. return self::where('id', $oid)->update(['shipping_type' => $type]);
  102. }
  103. public static function getOrderData($oid)
  104. {
  105. $order = ImsCjdcOrderMain::where('id', $oid)->first()->toArray();
  106. $order['created_at'] = date('Y-m-d H:i:s', $order['created_at']);
  107. $order['updated_at'] = $order['updated_at'] ? date('Y-m-d H:i:s', $order['updated_at']) : null;
  108. $order['pay_type'] = config('order.pay_type')[$order['pay_type']];
  109. $order['shipping_type_num'] = $order['shipping_type'];
  110. $order['shipping_type'] = config('order.shipping_type')[$order['shipping_type']];
  111. $order['horseman_name'] = $order['shipping_name'] ?? LanzuServiceHorseman::getName($order['horseman_id']);
  112. // 获取市场
  113. $marketId = $order['market_id']?$order['market_id']:0;
  114. $market = MarketModel::getMarketInfo($marketId,['name','lat','lng']);
  115. $order['market_name'] = $market?$market['name']:'';
  116. $order['market_lat'] = $market?$market['lat']:'';
  117. $order['market_lng'] = $market?$market['lng']:'';
  118. //获取市场经纬度
  119. //$market = LanzuMarket::where('id',$order['market_id'])->first()->toArray();
  120. //$order['distance'] = Rpc::getDistance($market['lng'],$market['lat'],$order['lng'],$order['lat'])['result'];
  121. if ($order['delivery_distance'] > 1000) {
  122. $order['delivery_distance'] = number_format(($order['delivery_distance'] / 1000), 1) . 'km';
  123. } else {
  124. $order['delivery_distance'] .= '米';
  125. }
  126. return $order;
  127. }
  128. /**
  129. * 根据订单状态统计数量
  130. * @param $state
  131. * @param null $marketId
  132. * @return mixed
  133. */
  134. public static function getOrderStateCount($state, $marketId = null)
  135. {
  136. $builder = self::where('type', 1)
  137. ->where('created_at','>=',time()-(7*86400));
  138. if ($marketId) {
  139. $builder = $builder->where('market_id',$marketId);
  140. }
  141. if ($state==3){
  142. $builder = $builder->where('state',$state)->where('shipping_type',1)->where('horseman_id',0);
  143. }elseif ($state==311){
  144. $builder = $builder->where('state',3)->where('shipping_type',1)->where('horseman_id','>',0);
  145. }else{
  146. $builder = $builder->where('state',$state);
  147. }
  148. $count = $builder->count();
  149. return $count;
  150. }
  151. /**
  152. * 关联懒族员工表
  153. */
  154. public function employees()
  155. {
  156. return $this->belongsTo(new EmployeesModel(),'horseman_id','id','left');
  157. }
  158. }