|
@@ -3,6 +3,8 @@
|
|
|
namespace app\data\model;
|
|
|
|
|
|
use think\admin\Model;
|
|
|
+use think\facade\Db;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 商城订单主模型
|
|
@@ -11,5 +13,199 @@ use think\admin\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;
|
|
|
+ }
|
|
|
|
|
|
}
|