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; } try { self::$total = 0; /** 计算价格 */ foreach ($cart_select as $k => $v) { $find = Goods::where(['id' => $v['goods']])->field('name,imgs,unit,sell')->find(); if(!$find){ continue; } $cart_select[$k]['total'] = bcmul($v['cart_num'], $find['sell'], 2); $cart_select[$k]['price'] = $find['sell']; $cart_select[$k]['name'] = $find['name']; $cart_select[$k]['imgs'] = $find['imgs']; $cart_select[$k]['unit_name'] = Unit::where(['id' => $find['unit']])->value('name'); self::$total=bcadd(self::$total, $cart_select[$k]['total'], 2); } $order = [ 'time' => time(), 'number' => getNewOrderId('PF'), 'total' => self::$total, 'pay_type' => $params['pay_type'] ?? 0, 'cart_id' => implode(',', $cartId), 'delivery_msg'=>' 预计48小时发货 ' ]; } catch (\Exception $e) { self::setError($e->getMessage()); return false; } 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); if(!$orderInfo){ return false; } $_order = $orderInfo['order']; $_order['deduction_price'] = 0; $_order['merchant'] = $params['mer_id']; $_order['uid'] = request()->userId; $_order['money'] = 0; $_order['user'] = request()->userId; $_order['account'] = 0; $_order['payinfo'] = ''; $_order['type'] = 0; $_order['source'] = 0; $_order['actual'] = $_order['total']; if($addressId>0){ $address=UserAddress::where(['address_id'=>$addressId,'uid'=>Request()->userId])->find(); if($address){ $_order['real_name'] = $address['real_name']; $_order['user_phone'] = $address['phone']; $_order['user_address'] = $address['detail']; $_order['address_id'] = $addressId; } } if($params['pay_type']==PayEnum::WECHAT_PAY_BARCODE){ $_order['source']=1; } if($params['pay_type']==PayEnum::CASH_PAY){ $_order['money']=$_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'] = $params['mer_id']; $goods_list[$k]['uid'] = request()->userId; $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); $where = ['is_pay' => 0, 'is_fail' => 0]; Cart::whereIn('cart_id', $cartId)->where($where)->update(['is_pay'=>1]); 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,'is_opurchase'=>0]; $where1[] = ['pay_type','<>',9]; $arrs = Cashierclass::where('merchant', $mer_id)->whereDay('create_time')->where($where1)->column('cart_id,id,address_id'); // $order_id = Cashierclass::where('merchant', $mer_id)->whereDay('create_time')->where($where1)->column('id'); $cart_arr = []; $order_id = []; foreach ($arrs as $k => $v) { if (empty($v['cart_id'])) { self::setError('没有购物车信息'); return false; } // if (empty($v['address_id'])) { // self::setError('请先设置配送地址'); // return false; // } $arr = explode(',',$v['cart_id']); foreach ($arr as $kk => $vv) { $cart_arr[] = $vv; } $order_id[] = $v['id']; } $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']; $goods_list[$k]['pid'] = $order->id; } (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; } }