ShopOrder.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. namespace app\data\model;
  3. use think\admin\Model;
  4. use think\facade\Db;
  5. /**
  6. * 商城订单主模型
  7. * Class ShopOrder
  8. * @package app\data\model
  9. */
  10. class ShopOrder extends Model
  11. {
  12. /**
  13. * @param $data
  14. * @return void
  15. * 1 创建订单
  16. * 2 创建订单商品
  17. * 3 创建订单发货
  18. */
  19. public function order_create($data){
  20. $address_info = $this->address_info($data['uuid'],$data['address_id']);
  21. $goods_info = $this->goods_info($data['item_id']);
  22. $order_no =$this->order_no($data['uuid']);
  23. $pay_no = $this->pay_no($data['uuid']);
  24. $order_data = [
  25. 'uuid'=>$data['uuid'],
  26. 'order_no'=>$order_no,
  27. 'order_name'=>$goods_info['goods_spec'],
  28. 'amount_real'=>$goods_info['price_selling']*$data['number'],
  29. 'amount_total'=>$goods_info['price_selling']*$data['number'],
  30. 'amount_goods'=>$goods_info['price_market']*$data['number'],
  31. 'amount_express'=>6,
  32. 'payment_trade'=>$pay_no,
  33. 'payment_status'=>0,
  34. ];
  35. $item_data=[
  36. 'uuid'=>$data['uuid'],
  37. 'order_no'=>$order_no,
  38. 'goods_sku'=>$goods_info['goods_sku'],
  39. 'goods_code'=>$goods_info['goods_code'],
  40. 'goods_spec'=>$goods_info['goods_spec'],
  41. 'goods_name'=>$goods_info['name'],
  42. 'goods_cover'=>$goods_info['cover'],
  43. 'price_market'=>$goods_info['price_market'],
  44. 'price_selling'=>$goods_info['price_selling'],
  45. 'total_market'=>$goods_info['price_market']*$data['number'],
  46. 'total_selling'=>$goods_info['price_selling']*$data['number'],
  47. 'stock_sales'=>$data['number'],
  48. ];
  49. $send_data = [
  50. 'uuid'=>$data['uuid'],
  51. 'order_no'=>$order_no,
  52. 'address_code'=>$data['address_id'],
  53. 'address_name'=>$address_info['name'],
  54. 'address_phone'=>$address_info['phone'],
  55. 'address_province'=>$address_info['province'],
  56. 'address_city'=>$address_info['city'],
  57. 'address_area'=>$address_info['area'],
  58. 'address_content'=>$address_info['address'],
  59. ];
  60. // 启动事务
  61. try {
  62. $order_id = ShopOrder::mk()->insertGetId($order_data);
  63. $item_id = ShopOrderItem::mk()->insertGetId($item_data);
  64. $send_id = ShopOrderSend::mk()->insertGetId($send_data);
  65. // 提交事务
  66. Db::commit();
  67. return $pay_no;
  68. } catch (\Exception $e) {
  69. // 回滚事务
  70. Db::rollback();
  71. }
  72. }
  73. /**
  74. * @param $user_id
  75. * @param $address_id
  76. * @return DataUserAddress|array|mixed|\think\Model|null
  77. * @throws \think\db\exception\DataNotFoundException
  78. * @throws \think\db\exception\DbException
  79. * @throws \think\db\exception\ModelNotFoundException
  80. * 购物车下单
  81. */
  82. public function cart_create($data)
  83. {
  84. $address_info = $this->address_info($data['uuid'], $data['address_id']);
  85. $goods_info = $this->cart_goods_info($data['cart_ids'], $data['uuid']);
  86. $order_no = $this->order_no($data['uuid']);
  87. $pay_no = $this->pay_no($data['uuid']);
  88. foreach ($goods_info as $k => $v) {
  89. //订单主表
  90. $order_no = $this->order_no($v['admin_id']);
  91. $order_data = [
  92. 'uuid' => $data['uuid'],
  93. 'order_no' => $order_no,
  94. 'order_name'=>$v['order_name'],
  95. 'amount_real' => $v['goods_money'],
  96. 'amount_total' => $v['goods_money'],
  97. 'amount_goods' => $v['goods_money'],
  98. 'amount_express' => 6,
  99. 'payment_trade' => $pay_no,
  100. 'payment_status' => 0,
  101. ];
  102. $order_id = ShopOrder::mk()->insertGetId($order_data);
  103. $order_id_arr[] = $order_id;
  104. //订单项目表
  105. foreach ($v['goods_list'] as $k_order_goods => $order_goods) {
  106. $item_data = array(
  107. 'uuid'=>$data['uuid'],
  108. 'order_no'=>$order_no,
  109. 'goods_sku'=>$order_goods['goods_sku'],
  110. 'goods_code'=>$order_goods['goods_code'],
  111. 'goods_spec'=>$order_goods['goods_spec'],
  112. 'goods_name'=>$order_goods['name'],
  113. 'goods_cover'=>$order_goods['cover'],
  114. 'price_market'=>$order_goods['price_market'],
  115. 'price_selling'=>$order_goods['price_selling'],
  116. 'total_market'=>$order_goods['price_market']*$order_goods['num'],
  117. 'total_selling'=>$order_goods['price_selling']*$order_goods['num'],
  118. 'stock_sales'=>$order_goods['num'],
  119. );
  120. $item_id = ShopOrderItem::mk()->insertGetId($item_data);
  121. }
  122. $send_data = [
  123. 'uuid' => $data['uuid'],
  124. 'order_no' => $order_no,
  125. 'address_code' => $data['address_id'],
  126. 'address_name' => $address_info['name'],
  127. 'address_phone' => $address_info['phone'],
  128. 'address_province' => $address_info['province'],
  129. 'address_city' => $address_info['city'],
  130. 'address_area' => $address_info['area'],
  131. 'address_content' => $address_info['address'],
  132. ];
  133. // 启动事务
  134. try {
  135. $send_id = ShopOrderSend::mk()->insertGetId($send_data);
  136. // 提交事务
  137. Db::commit();
  138. return $pay_no;
  139. } catch (\Exception $e) {
  140. // 回滚事务
  141. Db::rollback();
  142. }
  143. }
  144. }
  145. public function address_info($user_id,$address_id){
  146. $address_info = DataUserAddress::mk()->where(array('id'=>$address_id,'uuid'=>$user_id))->find();
  147. return $address_info;
  148. }
  149. public function goods_info($item_id){
  150. $goods_info = ShopGoodsItem::mk()->alias('item')
  151. ->join('shop_goods goods','goods.code=item.goods_code')
  152. ->where('item.id',$item_id)
  153. ->field('item.*,goods.cover,goods.name')
  154. ->find();
  155. return $goods_info;
  156. }
  157. public function cart_goods_info($cart_ids,$uuid){
  158. //组装商品列表
  159. $goods_list = ShopGoodsCart::mk()->alias('car')
  160. ->join('shop_goods_item item','item.id=car.item_id')
  161. ->join('shop_goods goods','goods.code=item.goods_code')
  162. ->whereIn('car.id',$cart_ids)->where('car.user_id',$uuid)->select();
  163. $shop_goods_list = [];
  164. if(!empty($goods_list))
  165. {
  166. foreach ($goods_list as $k => $v)
  167. {
  168. $site_id = $v['admin_id'];
  169. if(isset($shop_goods_list[$site_id]))
  170. {
  171. $shop_goods_list[$site_id]['goods_list'][] = $v;
  172. $shop_goods_list[$site_id]['goods_num'] += $v['num'];
  173. $shop_goods_list[$site_id]['order_name'] = $shop_goods_list[$site_id]['order_name'].$v['goods_spec'];
  174. $shop_goods_list[$site_id]['goods_money'] += $v['price_selling'] * $v['num'];
  175. }else{
  176. $shop_goods_list[$site_id]['admin_id'] = $site_id;
  177. $shop_goods_list[$site_id]['admin_name'] = 111;
  178. $shop_goods_list[$site_id]['order_name'] = $v['goods_spec'];
  179. $shop_goods_list[$site_id]['goods_money'] = $v['price_selling'] * $v['num'];
  180. $shop_goods_list[$site_id]['goods_num'] = $v['num'];
  181. $shop_goods_list[$site_id]['goods_list'][] = $v;
  182. }
  183. }
  184. }
  185. return $shop_goods_list;
  186. }
  187. public function order_no($uuid){
  188. $time_str = date('YmdHi');
  189. $order_no = $time_str . sprintf("%04d", $uuid);
  190. return $order_no;
  191. }
  192. public function pay_no($uuid){
  193. $time_str = date('YmdHi');
  194. $pay_no = 'PAY'.$time_str . rand(00000,99999).$uuid;
  195. return $pay_no;
  196. }
  197. }