0, 'is_fail' => 0]; $cart_select = Cart::whereIn('cart_id', $cartId)->where($where)->field('goods_id as goods,cart_num')->select()->toArray(); if (empty($cart_select)) { self::setError('购物车为空'); return false; } /** 计算价格 */ foreach ($cart_select as $k => $v) { $sell = Goods::where(['id' => $v['goods']])->value('sell'); $cart_select[$k]['total'] = bcmul($v['cart_num'], $sell, 2); $cart_select[$k]['price'] = $sell; } $order = [ 'time' => time(), 'number' => static::getNewOrderId('PF'), 'total' => array_sum(array_column($cart_select, 'total')), 'pay_type' => $params['pay_type']??0, 'cart_id'=>implode(',',$cartId) ]; return ['order' => $order, 'cart_list' => $cart_select]; } /** * 创建新订单 * @return Object|bool */ static public function createOrder($cartId, $addressId, $user = null, $params = []) { $orderInfo = self::cartIdByOrderInfo($cartId, $addressId, $user, $params); $_order = $orderInfo['order']; $_order['deduction_price'] = 0; $_order['merchant'] = 0; $_order['customer'] = request()->userId; $_order['money'] = 0; $_order['user'] = request()->userId; $_order['account'] = 0; $_order['payinfo'] = ''; $_order['type'] = 0; $_order['actual'] = $_order['total']; Db::startTrans(); try { $order = Cashierclass::create($_order); $goods_list = $orderInfo['cart_list']; foreach ($goods_list as $k => $v) { $goods_list[$k]['pid'] = $order->id; $goods_list[$k]['merchant'] = 0; $goods_list[$k]['room'] = 0; $goods_list[$k]['discount'] = 0; $goods_list[$k]['warehouse'] = 0; $goods_list[$k]['nums'] = $v['cart_num']; } (new Cashierinfo())->saveAll($goods_list); Db::commit(); return $order; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 获取购货订单购物车商品信息 * @param $params * @return array */ static public function cartIdByPurchaseOrderInfo($user, $params) { if(!$user){ self::setError('没有用户信息,请先登录'); return false; } $mer_id=$user['merchant']['mer_id']; $where1=['paid'=>1]; $cartId=Cashierclass::where('merchant',$mer_id)->whereDay('create_time')->where($where1)->column('cart_id'); if(empty($cartId)){ self::setError('没有购物车信息'); return false; } $order_id=Cashierclass::where('merchant',$mer_id)->whereDay('create_time')->where($where1)->column('id'); $cart_arr=[]; foreach($cartId as $k=>$v){ $arr=explode(',',$v); foreach($arr as $kk=>$vv){ $cart_arr[]=$vv; } } $where = ['is_pay' => 1, 'is_fail' => 0]; $cart_select = Cart::whereIn('cart_id', $cart_arr)->where($where)->field('goods_id as goods,cart_num')->select()->toArray(); if (empty($cart_select)) { self::setError('购物车为空'); return false; } /** 计算价格 */ foreach ($cart_select as $k => $v) { $sell = Goods::where(['id' => $v['goods']])->value('sell'); $cart_select[$k]['total'] = bcmul($v['cart_num'], $sell, 2); $cart_select[$k]['price'] = $sell; } $order = [ 'time' => time(), 'number' => static::getNewOrderId('CG'), 'total' => array_sum(array_column($cart_select, 'total')), 'pay_type' => $params['pay_type']??0, 'cart_id'=>implode(',',$cart_arr), 'order_arr'=>implode(',',$order_id) ]; return ['order' => $order, 'cart_list' => $cart_select]; } /** * 创建购货订单 * @return Object|bool */ static public function createOpurchaseOrder($user = null, $params = []) { if(!$user){ self::setError('没有用户信息,请先登录'); return false; } $mer_id=$user['merchant']['mer_id']; $merchant=Merchant::where('mer_id',$mer_id)->find(); $orderInfo = self::cartIdByPurchaseOrderInfo($user, $params); if(!$orderInfo){ return false; } $_order = $orderInfo['order']; if($_order['total']<$merchant['mer_money']){ self::setError('商户余额不足'); return false; } $_order['merchant'] = $mer_id; $_order['money'] = $_order['total']; $_order['actual'] = $_order['total']; $_order['paid'] = 1; Db::startTrans(); try { $order = Opurchaseclass::create($_order); $goods_list = $orderInfo['cart_list']; foreach ($goods_list as $k => $v) { $goods_list[$k]['nums'] = $v['cart_num']; } (new Opurchaseinfo())->saveAll($goods_list); $merchant->mer_money=bcsub($merchant->mer_money,$_order['total'],2); $order_arr=explode(',',$_order['order_arr']); Cashierclass::where('id','in',$order_arr)->update(['is_opurchase'=>1]); Db::commit(); return $order; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 获取订单号 * @param $type * @return string * @author likeadmin * @date 2021/7/28 17:05 */ static public function getNewOrderId($type) { list($msec, $sec) = explode(' ', microtime()); $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', ''); $orderId = $type . $msectime . mt_rand(10000, max(intval($msec * 10000) + 10000, 98369)); return $orderId; } }