商品订单类1——TP5微信小程序开发日志(一)

商品订单类1——TP5微信小程序开发日志(一)

本人是小白,参考文章请谨慎。
在本文中,我们将实现获得用户订单,同时根据商品的库存量来判断是否下单成功。

完整版预订单类已更新,请查看最新博客TP5预订单创建——TP5微信小程序开发日志

类变量

protected $oProducts;

protected $products;

protected $uid;

我们需要获得用户的下单的openid即$uid,同时也要获得用户的下单信息$oProducts来自于小程序前端。

当然要检测而库存是否足够,也需要读取数据库的数据。

$oProducts 小程序端的提交的订单数据格式如下:

protected $product=[
  [
      'product_id'=>1,
      'count'=>3,
  ],
    [
        'product_id'=>1,
        'count'=>3,
    ],
    [
        'product_id'=>1,
        'count'=>3,
    ],
];

初始化方法(类似于构造方法)

public function place($uid,$oProducts){
    
    $this->oProducts=$oProducts;
    
    $this->products=$this->getProductsByOrder($oProducts);
    
    $this->uid=$uid;
    
}

我们给内部变量进行赋值。传入的 u i d , uid, uid,oProducts对内部变量进行赋值,而数据库的商品信息$this->products则需要访问数据库的来获得,所以我们得再写一个方法:

private function getProductsByOrder($oProducts)
{
    $oPIDs=[];
    foreach ($oProducts as $oProduct){
        array_push($oPIDs,$oProduct['product_id']);
    }
    $products=Product::all($oPIDs)
        ->visible(['id','price','stock','name','main_img_url']);
    return $products;
}

1.我们需要根据提交的商品id来访问特定的商品信息,而不是全部将其返回,所以我们需要新建一个数组来保存需要访问商品的id。

2.我们根据包含商品id的数组,来访问数据库,即通过Model类来访问。

3.最后返回结果。

订单状态方法

public function getOrderStatus()
{
    $status=[
        'pass'=>true,
        'orderplace'=>0,
        'pStatusArray'=>[]
    ];
    foreach ($this->oProducts as $oProduct){
        $pStatus=$this->getProductStatus($oProduct['product_id'],$oProduct['count'],$this->products);
        if(!$pStatus['haveStock']){
            $status['pass']=false;
        }
        $status['orderplace']+=$pStatus['totalPrice'];
        array_push($status['pStatusArray'],$pStatus);
    }
    return $status;
}

1.首先,我们需要通过建立一个字典来表示一个订单的信息,需要记录订单状态pass、订单总计orderplace、订单包含商品状态pstatusarray

注意:此处订单状态不仅仅指库存是否足够,同时也包含订单总计和商品信息。

因为订单的状态是由每个商品决定的,所以我们再去遍历每个商品的信息getProductStatus见商品状态方法

2.我们遍历每个商品,执行一次getProductStatus方法,获得每个商品的状态信息,然后根据if(!$pStatus['haveStock'])是否为假,如果为假的话,订单信息即为假 $status['pass']=false;所以只要有一个商品库存状态不够,该订单的状态库存即为false,其他的状态信息直接相加即可。

3.最后返回

商品状态方法

public function getProductStatus($oPID,$oCount,$products)
{

   $pIndex=-1;

   $pStatus=[
       'id'=>null,
       'name'=>'',
       'count'=>0,
       'haveStock'=>false,
       'totalPrice'=>0,
   ];
   for ($i=0;$i<count($products);$i++){
       if($oPID==$products[$i]['id']){
           $pIndex=$i;
       }
   }
   if($pIndex==-1){
       throw new OrderException([
           'msg'=>'id为'.$oPID.'的商品不存在,订单生成失败.'
       ]);
   }else{

       $product=$products[$pIndex];

       $pStatus['id']=$product['id'];
       $pStatus['name']=$product['name'];
       $pStatus['count']=$oCount;
       $pStatus['totalPrice']=$product['price']*$oCount;
       if($product['stock']-$oCount>=0){
           $pStatus['haveStock']=true;
       }

   }
    return $pStatus;
}

我们需要给商品状态方法传入商品的id,商品的个数,还有数据库商品的信息

1.我们需要建立个商品字典来存储商品的信息

2.然后需要遍历数据库返回的数据中,是否存在该商品,通过product_id号来比较

3.如果存在那么就记录下该条商品信息在数据库返回数组的位置$pIndex=$i;,不存在则抛出自定义异常**

4.记录下位置后,对商品字典进行赋值,根据数据库返回的商品信息,库存是否存在需要通过数据库库存减去订 单库存来判断$product['stock']-$oCount>=0,足够$pStatus['haveStock']=true;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值