OrderSend.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 2017/3/3
  6. * Time: 下午3:43
  7. */
  8. namespace app\frontend\modules\order\services\behavior;
  9. use app\backend\modules\order\services\OrderPackageService;
  10. use app\common\events\order\AfterOrderPackageSentEvent;
  11. use app\common\models\DispatchType;
  12. use app\common\models\Order;
  13. use app\common\models\order\OrderPackage;
  14. use app\common\models\OrderGoods;
  15. use app\common\models\order\Express;
  16. use app\common\repositories\ExpressCompany;
  17. class OrderSend extends ChangeStatusOperation
  18. {
  19. protected $statusBeforeChange = [ORDER::WAIT_SEND];
  20. protected $statusAfterChanged = ORDER::WAIT_RECEIVE;
  21. protected $name = '发货';
  22. protected $time_field = 'send_time';
  23. public $params = [];
  24. protected $past_tense_class_name = 'OrderSent';
  25. protected function _fireEvent()
  26. {
  27. $this->fireSentEvent();
  28. }
  29. /**
  30. * @return bool|void
  31. */
  32. protected function updateTable()
  33. {
  34. $data = $this->params ? $this->params : request()->input();
  35. if (isset($data['express_code'])) {
  36. //实体订单
  37. // $order_id = request()->input('order_id');
  38. $order_id = $data['order_id'];
  39. $db_express_model = Express::where('order_id', $order_id)->first();
  40. !$db_express_model && $db_express_model = new Express();
  41. $db_express_model->order_id = $order_id;
  42. // $db_express_model->express_code = request()->input('express_code','');
  43. $db_express_model->express_code = $data['express_code'] ?: '';
  44. // $db_express_model->express_company_name = request()->input('express_company_name', function (){
  45. // return array_get(ExpressCompany::create()->where('value',request()->input('express_code',''))->first(),'name','');
  46. // });
  47. //当code获取不到物流,并且 有传过来物流名称则使用传过来的(主要针对供应链)
  48. $express_company_name = array_get(ExpressCompany::create()->where('value', $data['express_code'])->first(), 'name', '其他快递');
  49. if ($express_company_name == "其他快递" && !empty($data['express_company_name'])) $express_company_name = $data['express_company_name'];
  50. $db_express_model->express_company_name = $express_company_name;
  51. // $db_express_model->express_sn = request()->input('express_sn','');
  52. $db_express_model->express_sn = $data['express_sn'] ?: '';
  53. // dd($db_express_model->express_sn);
  54. $db_express_model->save();
  55. //修改所有这个订单的商品 快递信息为这个
  56. if (empty($data['order_goods_ids'])) {
  57. // 获取剩余未发货的商品
  58. $where[] = ['order_id','=',$data['order_id']];
  59. $order_goods = \app\frontend\models\OrderGoods::uniacid()->where($where)->whereNull('order_express_id')->get()->makeVisible('order_id');
  60. $order_package = OrderPackage::getOrderPackage($data['order_id'])->where('order_express_id','!=',false);
  61. $new_order_goods = OrderPackageService::filterGoods($order_goods,$order_package);
  62. // 单包裹发货
  63. OrderPackageService::saveOneOrderPackage((int)$data['order_id'],(int)$db_express_model->id,$new_order_goods);
  64. } else {
  65. // 新做的参数,可能有些地方没改到
  66. if(empty($data['order_package'])){// 没有此参数,则将order_goods_ids里未发货的商品全部发货
  67. // 获取剩余未发货的商品
  68. $order_goods = \app\frontend\models\OrderGoods::uniacid()
  69. ->where('order_id',$data['order_id'])
  70. ->whereIn('id',$data['order_goods_ids'] ?: [])
  71. ->whereNull('order_express_id')
  72. ->get()
  73. ->makeVisible('order_id');
  74. $order_package = OrderPackage::getOrderPackage($data['order_id'])->where('order_express_id','!=',false);
  75. $new_order_goods = OrderPackageService::filterGoods($order_goods,$order_package);
  76. // 单包裹发货
  77. OrderPackageService::saveOneOrderPackage((int)$data['order_id'],(int)$db_express_model->id,$new_order_goods);
  78. }else{// order_package数据结构[['order_goods_id' => int,'total' => int],['order_goods_id' => int,'total' => int]...]
  79. // 获取剩余未发货的商品
  80. $where[] = ['order_id','=',$data['order_id']];
  81. $order_goods = OrderGoods::uniacid()->where($where)->whereNull('order_express_id')->get()->makeVisible('order_id');
  82. $order_package = OrderPackage::getOrderPackage($data['order_id'])->where('order_express_id','!=',false);
  83. $new_order_goods = OrderPackageService::filterGoods($order_goods,$order_package);
  84. // 校验包裹商品
  85. $new_order_package = collect($data['order_package']);
  86. OrderPackageService::checkGoodsPackage($new_order_package,$new_order_goods);
  87. // 单包裹发货
  88. OrderPackageService::saveOneOrderPackage((int)$data['order_id'],(int)$db_express_model->id,$new_order_package);
  89. event(new AfterOrderPackageSentEvent(Order::find($data['order_id'])));
  90. }
  91. // 全部发货则改订单状态
  92. $order_goods = \app\frontend\models\OrderGoods::uniacid()->where('order_id',$data['order_id'])->whereNull('order_express_id')->get()->makeVisible('order_id');
  93. $order_package = OrderPackage::getOrderPackage($data['order_id'])->where('order_express_id','!=',false);
  94. $new_order_goods = OrderPackageService::filterGoods($order_goods,$order_package);
  95. if($new_order_goods->isEmpty()){
  96. $this->is_all_send_goods = 2;
  97. }else{
  98. $this->is_all_send_goods = 1;
  99. }
  100. }
  101. }
  102. parent::updateTable();
  103. }
  104. }