OrderInfo.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace app\common\model;
  3. use think\db\Query;
  4. use think\Model;
  5. /**
  6. * @property Orders orders
  7. * @property Refund refund
  8. * @method static static|Query payed()
  9. * @method static static|Query filterHasUnRefund()
  10. */
  11. class OrderInfo extends Model
  12. {
  13. protected $autoWriteTimestamp=true;
  14. protected $hidden=[
  15. 'goods_bak'
  16. ];
  17. public function orders(){
  18. return $this->belongsTo(Orders::class,'order_id');
  19. }
  20. public function goodsBak(){
  21. return $this->belongsTo(OrderInfoGoods::class,'goods_bak_id');
  22. }
  23. public function refund(){
  24. return $this->belongsTo(Refund::class,'refund_id');
  25. }
  26. public function refunds(){
  27. return $this->hasMany(Refund::class,'order_info_id')->order('order_info_refund.id','desc');
  28. }
  29. public static function saveInfo(Orders $orders,$goods){
  30. $orderInfo=new self();
  31. $orderInfoGoods=OrderInfoGoods::create([
  32. 'goods'=>$goods['goods'],
  33. 'sku'=>$goods['sku'],
  34. ]);
  35. $orderInfo['logo']=$goods['goods']['logo'][0];
  36. $orderInfo['user_id']=$orders['user_id'];
  37. $orderInfo['order_id']=$orders['id'];
  38. $orderInfo['goods_id']=$goods['goods_id'];
  39. $orderInfo['goods_sku_id']=$goods['goods_sku_id'];
  40. $orderInfo['num']=$goods['num'];
  41. $orderInfo['sku_name']=$goods['sku']['name'];
  42. $orderInfo['goods_name']=$goods['goods']['name'];
  43. $orderInfo['num_install']=$goods['num_install'];
  44. $orderInfo['coupon_id']=$goods['coupon_id']??0;
  45. $orderInfo['amount_coupon']=$goods['amount_coupon']??0;
  46. $orderInfo['amount_coupon_kill']=$goods['amount_coupon_kill']??0;
  47. $orderInfo['amount_coupon_level']=$goods['amount_coupon_level']??0;
  48. $orderInfo['amount_discount']=$goods['amount_discount']??0;
  49. $orderInfo['amount_total']=$goods['amount_total'];
  50. $orderInfo['amount_pay']=$goods['amount_pay'];
  51. $orderInfo['amount_install']=$goods['amount_install'];
  52. $orderInfo['amount']=$goods['sku']['amount'];
  53. $orderInfo['amount_cost']=$goods['sku']['amount_cost'];
  54. $orderInfo['amount_cost_total']=bcmul($orderInfo['num'],$orderInfo['amount_cost']);
  55. $orderInfo['goods_bak_id']=$orderInfoGoods['id'];
  56. $orderInfo['amount_goods']=$goods['amount_goods'];
  57. $orderInfo['amount_goods_real']=$goods['amount_goods_real'];
  58. $orderInfo['category_id']=$goods['goods']['category_id'];
  59. $orderInfo['category_name']=Category::withTrashed()->where('id',$orderInfo['category_id'])->value('name');
  60. #毛利率
  61. $orderInfo['amount_profit']=bcsub($orderInfo['amount_pay'],$orderInfo['amount_cost_total']);
  62. $orderInfo['amount_profit_per']=bcmul(100,$orderInfo['amount_pay']>0?bcdiv($orderInfo['amount_profit'],$orderInfo['amount_pay']):0);
  63. #佣金
  64. $orderInfo['amount_cmn']=$goods['amount_cmn'];
  65. #秒杀商品
  66. $orderInfo['is_kill']=$goods['is_kill'];
  67. if(!$orderInfo->save()){
  68. throw_user('保存失败');
  69. }
  70. #
  71. OrderGoods::unique($orderInfo);
  72. return $orderInfo;
  73. }
  74. public function getGoodsAttr(){
  75. $info=$this;
  76. return $info['goodsBak']['goods'];
  77. }
  78. public function getSkuAttr(){
  79. $info=$this;
  80. return $info['goodsBak']['sku'];
  81. }
  82. public function scopePayed(Query $query){
  83. $query->whereExists(
  84. Orders::payed()->whereRaw("{$this->getTable()}.order_id=orders.id")->buildSql()
  85. );
  86. }
  87. public function scopeFilterHasUnRefund(Query $query){
  88. $query
  89. ->where(function (Query $query){
  90. $query->whereNull('refund_id')
  91. ->whereOrRaw(
  92. "exists(".
  93. sprintf("select * from order_info_refund where order_info_refund.id=order_info.refund_id and order_info_refund.refund_status in (%d,%d)",Refund::REFUND_REJECT,Refund::REFUND_CANCEL).
  94. ")"
  95. );
  96. });
  97. }
  98. protected static function init()
  99. {
  100. self::beforeInsert(function (self $orderInfo){
  101. //$orderInfo['amount_discount']=bcadd($orderInfo['amount_coupon'],$orderInfo['amount_coupon_kill']);
  102. });
  103. }
  104. }