Bill.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. namespace app\common\model\plus\assemble;
  3. use app\common\enum\settings\DeliveryTypeEnum;
  4. use app\common\library\helper;
  5. use app\common\model\BaseModel;
  6. use app\common\model\order\Order as OrderModel;
  7. use app\common\model\plus\assemble\BillUser as BillUserModel;
  8. use app\common\service\order\OrderPrinterService;
  9. /**
  10. * 参与记录模型
  11. */
  12. class Bill extends BaseModel
  13. {
  14. protected $name = 'assemble_bill';
  15. protected $pk = 'assemble_bill_id';
  16. /**
  17. * 详情
  18. */
  19. public static function detail($assemble_bill_id, $with = [])
  20. {
  21. return (new static())->with($with)->where('assemble_bill_id', '=', $assemble_bill_id)->find();
  22. }
  23. /**
  24. * 关联活动表
  25. */
  26. public function activity()
  27. {
  28. return $this->belongsTo('Active', 'assemble_activity_id', 'assemble_activity_id');
  29. }
  30. /**
  31. * 关联创建者
  32. */
  33. public function user()
  34. {
  35. return $this->belongsTo('app\\common\\model\\user\\User', 'creator_id', 'user_id')
  36. ->field(['user_id', 'nickName', 'avatarUrl']);
  37. }
  38. /**
  39. * 关联拼团成员表
  40. */
  41. public function billUser()
  42. {
  43. return $this->hasMany('app\\common\\model\\plus\\assemble\\BillUser', 'assemble_bill_id', 'assemble_bill_id')
  44. ->field(['user_id','assemble_bill_id'])
  45. ->order(['create_time' => 'asc']);
  46. }
  47. /**
  48. * 新拼团订单
  49. */
  50. public function newOrder($product, $sku)
  51. {
  52. $active = Active::detail($sku['assemble_activity_id']);
  53. //插入主表
  54. $this->save([
  55. 'assemble_product_id' => $sku['assemble_product_id'],
  56. 'actual_people' => 1,
  57. 'creator_id' => $product['user_id'],
  58. 'assemble_activity_id' => $sku['assemble_activity_id'],
  59. 'end_time' => time() + $active['together_time'] * 60 * 60,
  60. 'app_id' => $active['app_id'],
  61. ]);
  62. //插入拼团记录表
  63. $bill_user_model = new BillUser();
  64. $bill_user_model->save([
  65. 'assemble_bill_id' => $this['assemble_bill_id'],
  66. 'order_id' => $product['order_id'],
  67. 'user_id' => $product['user_id'],
  68. 'is_creator' => 1,
  69. 'app_id' => $active['app_id'],
  70. ]);
  71. //拼团订单商品
  72. $product->save([
  73. 'bill_source_id' => $this['assemble_bill_id']
  74. ]);
  75. //更新主订单表拼团状态
  76. (new OrderModel)->where('order_id', '=', $product['order_id'])
  77. ->save([
  78. 'assemble_status' => 10
  79. ]);
  80. }
  81. /**
  82. * 参团订单
  83. */
  84. public function updateOrder($product, $sku)
  85. {
  86. //更新拼团人数
  87. $this->where('assemble_bill_id', '=', $this['assemble_bill_id'])->inc('actual_people', 1)->update();
  88. //插入拼团记录表
  89. $bill_user_model = new BillUser();
  90. $bill_user_model->save([
  91. 'assemble_bill_id' => $this['assemble_bill_id'],
  92. 'order_id' => $product['order_id'],
  93. 'user_id' => $product['user_id'],
  94. 'is_creator' => 0,
  95. 'app_id' => $product['app_id'],
  96. ]);
  97. //开团信息
  98. $asemble_product = Product::detail($sku['assemble_product_id']);
  99. //判断拼团是否成功
  100. if($this['actual_people'] + 1 >= $asemble_product['assemble_num']){
  101. $this->save([
  102. 'status' => 20
  103. ]);
  104. $order_list = (new BillUserModel)
  105. ->field(['order_id'])
  106. ->where('assemble_bill_id', '=', $this['assemble_bill_id'])
  107. ->select();
  108. $orderIds = helper::getArrayColumn($order_list, 'order_id');
  109. //更新主订单表拼团状态
  110. (new OrderModel)->where('order_id', 'in', $orderIds)
  111. ->save([
  112. 'assemble_status' => 20
  113. ]);
  114. // 是否是虚拟商品
  115. $order = OrderModel::detail($product['order_id']);
  116. if($order['delivery_type']['value'] == DeliveryTypeEnum::NO_EXPRESS){
  117. (new OrderModel)->where('order_id', 'in', $orderIds)
  118. ->save([
  119. 'assemble_status' => 20,
  120. 'delivery_status' => 20,
  121. 'delivery_time' => time(),
  122. 'receipt_status' => 20,
  123. 'receipt_time' => time(),
  124. 'order_status' => 30
  125. ]);
  126. }
  127. // 拼团订单打印
  128. foreach($orderIds as $orderId){
  129. (new OrderPrinterService)->printTicket(OrderModel::detail($orderId));
  130. }
  131. }else{
  132. //更新主订单表拼团状态
  133. (new OrderModel)->where('order_id', '=', $product['order_id'])
  134. ->save([
  135. 'assemble_status' => 10
  136. ]);
  137. }
  138. }
  139. }