123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <?php
- namespace app\data\model;
- use think\admin\Model;
- use think\facade\Db;
- /**
- * 商城订单主模型
- * Class ShopOrder
- * @package app\data\model
- */
- class ShopOrder extends Model
- {
- /**
- * @param $data
- * @return void
- * 1 创建订单
- * 2 创建订单商品
- * 3 创建订单发货
- */
- public function order_create($data){
- $address_info = $this->address_info($data['uuid'],$data['address_id']);
- $goods_info = $this->goods_info($data['item_id']);
- $order_no =$this->order_no($data['uuid']);
- $pay_no = $this->pay_no($data['uuid']);
- $order_data = [
- 'uuid'=>$data['uuid'],
- 'order_no'=>$order_no,
- 'order_name'=>$goods_info['goods_spec'],
- 'amount_real'=>$goods_info['price_selling']*$data['number'],
- 'amount_total'=>$goods_info['price_selling']*$data['number'],
- 'amount_goods'=>$goods_info['price_market']*$data['number'],
- 'amount_express'=>6,
- 'payment_trade'=>$pay_no,
- 'payment_status'=>0,
- ];
- $item_data=[
- 'uuid'=>$data['uuid'],
- 'order_no'=>$order_no,
- 'goods_sku'=>$goods_info['goods_sku'],
- 'goods_code'=>$goods_info['goods_code'],
- 'goods_spec'=>$goods_info['goods_spec'],
- 'goods_name'=>$goods_info['name'],
- 'goods_cover'=>$goods_info['cover'],
- 'price_market'=>$goods_info['price_market'],
- 'price_selling'=>$goods_info['price_selling'],
- 'total_market'=>$goods_info['price_market']*$data['number'],
- 'total_selling'=>$goods_info['price_selling']*$data['number'],
- 'stock_sales'=>$data['number'],
- ];
- $send_data = [
- 'uuid'=>$data['uuid'],
- 'order_no'=>$order_no,
- 'address_code'=>$data['address_id'],
- 'address_name'=>$address_info['name'],
- 'address_phone'=>$address_info['phone'],
- 'address_province'=>$address_info['province'],
- 'address_city'=>$address_info['city'],
- 'address_area'=>$address_info['area'],
- 'address_content'=>$address_info['address'],
- ];
- // 启动事务
- try {
- $order_id = ShopOrder::mk()->insertGetId($order_data);
- $item_id = ShopOrderItem::mk()->insertGetId($item_data);
- $send_id = ShopOrderSend::mk()->insertGetId($send_data);
- // 提交事务
- Db::commit();
- return $pay_no;
- } catch (\Exception $e) {
- // 回滚事务
- Db::rollback();
- }
- }
- /**
- * @param $user_id
- * @param $address_id
- * @return DataUserAddress|array|mixed|\think\Model|null
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- * 购物车下单
- */
- public function cart_create($data)
- {
- $address_info = $this->address_info($data['uuid'], $data['address_id']);
- $goods_info = $this->cart_goods_info($data['cart_ids'], $data['uuid']);
- $order_no = $this->order_no($data['uuid']);
- $pay_no = $this->pay_no($data['uuid']);
- foreach ($goods_info as $k => $v) {
- //订单主表
- $order_no = $this->order_no($v['admin_id']);
- $order_data = [
- 'uuid' => $data['uuid'],
- 'order_no' => $order_no,
- 'order_name'=>$v['order_name'],
- 'amount_real' => $v['goods_money'],
- 'amount_total' => $v['goods_money'],
- 'amount_goods' => $v['goods_money'],
- 'amount_express' => 6,
- 'payment_trade' => $pay_no,
- 'payment_status' => 0,
- ];
- $order_id = ShopOrder::mk()->insertGetId($order_data);
- $order_id_arr[] = $order_id;
- //订单项目表
- foreach ($v['goods_list'] as $k_order_goods => $order_goods) {
- $item_data = array(
- 'uuid'=>$data['uuid'],
- 'order_no'=>$order_no,
- 'goods_sku'=>$order_goods['goods_sku'],
- 'goods_code'=>$order_goods['goods_code'],
- 'goods_spec'=>$order_goods['goods_spec'],
- 'goods_name'=>$order_goods['name'],
- 'goods_cover'=>$order_goods['cover'],
- 'price_market'=>$order_goods['price_market'],
- 'price_selling'=>$order_goods['price_selling'],
- 'total_market'=>$order_goods['price_market']*$order_goods['num'],
- 'total_selling'=>$order_goods['price_selling']*$order_goods['num'],
- 'stock_sales'=>$order_goods['num'],
- );
- $item_id = ShopOrderItem::mk()->insertGetId($item_data);
- }
- $send_data = [
- 'uuid' => $data['uuid'],
- 'order_no' => $order_no,
- 'address_code' => $data['address_id'],
- 'address_name' => $address_info['name'],
- 'address_phone' => $address_info['phone'],
- 'address_province' => $address_info['province'],
- 'address_city' => $address_info['city'],
- 'address_area' => $address_info['area'],
- 'address_content' => $address_info['address'],
- ];
- // 启动事务
- try {
- $send_id = ShopOrderSend::mk()->insertGetId($send_data);
- // 提交事务
- Db::commit();
- return $pay_no;
- } catch (\Exception $e) {
- // 回滚事务
- Db::rollback();
- }
- }
- }
- public function address_info($user_id,$address_id){
- $address_info = DataUserAddress::mk()->where(array('id'=>$address_id,'uuid'=>$user_id))->find();
- return $address_info;
- }
- public function goods_info($item_id){
- $goods_info = ShopGoodsItem::mk()->alias('item')
- ->join('shop_goods goods','goods.code=item.goods_code')
- ->where('item.id',$item_id)
- ->field('item.*,goods.cover,goods.name')
- ->find();
- return $goods_info;
- }
- public function cart_goods_info($cart_ids,$uuid){
- //组装商品列表
- $goods_list = ShopGoodsCart::mk()->alias('car')
- ->join('shop_goods_item item','item.id=car.item_id')
- ->join('shop_goods goods','goods.code=item.goods_code')
- ->whereIn('car.id',$cart_ids)->where('car.user_id',$uuid)->select();
- $shop_goods_list = [];
- if(!empty($goods_list))
- {
- foreach ($goods_list as $k => $v)
- {
- $site_id = $v['admin_id'];
- if(isset($shop_goods_list[$site_id]))
- {
- $shop_goods_list[$site_id]['goods_list'][] = $v;
- $shop_goods_list[$site_id]['goods_num'] += $v['num'];
- $shop_goods_list[$site_id]['order_name'] = $shop_goods_list[$site_id]['order_name'].$v['goods_spec'];
- $shop_goods_list[$site_id]['goods_money'] += $v['price_selling'] * $v['num'];
- }else{
- $shop_goods_list[$site_id]['admin_id'] = $site_id;
- $shop_goods_list[$site_id]['admin_name'] = 111;
- $shop_goods_list[$site_id]['order_name'] = $v['goods_spec'];
- $shop_goods_list[$site_id]['goods_money'] = $v['price_selling'] * $v['num'];
- $shop_goods_list[$site_id]['goods_num'] = $v['num'];
- $shop_goods_list[$site_id]['goods_list'][] = $v;
- }
- }
- }
- return $shop_goods_list;
- }
- public function order_no($uuid){
- $time_str = date('YmdHi');
- $order_no = $time_str . sprintf("%04d", $uuid);
- return $order_no;
- }
- public function pay_no($uuid){
- $time_str = date('YmdHi');
- $pay_no = 'PAY'.$time_str . rand(00000,99999).$uuid;
- return $pay_no;
- }
- }
|