'获取成功', 'data' => ShopOrderModel::list($request->only(['status', 'order_type']), $request->only(['page', 'limit']), $request->uid)]); } catch (\Exception $e) { return api_error_return('获取失败' . $e->getMessage()); } } /** * 订单详情 */ public function orderDetail(Request $request): Response { try { return api_succ_return(['msg' => '获取成功', 'data' => ShopOrderModel::details($request->only(['order_sn']), $request->uid)]); } catch (\Exception $e) { return api_error_return('获取失败' . $e->getMessage()); } } /** * 下单商品详情 */ public function buyDetail(Request $request) { $buy_goods = $request->post('buy_goods'); $address = $request->post('address_id'); if (empty($buy_goods)) { return api_error_return('参数错误'); } try { $buy_goods = json_decode(html_entity_decode($buy_goods), true); if (empty($buy_goods)) { return api_error_return('商品参数错误,请返回刷新重新下单'); } foreach ($buy_goods as $k => $v) { $goodsInfo = ShopGoodsModel::where(['goods_sn' => $v['goods_sn']])->field('goods_type')->find(); if (!$goodsInfo) { return api_error_return('下单失败,请返回刷新列表'); } } if (empty($address)) { //用户默认收货地址 $address = UserAddress::where(['uid' => $request->uid, 'is_default' => 1])->field('id,province,city,county,name,mobile,remark,is_default,mergename')->findOrEmpty()->toArray(); } else { $address = UserAddress::where(['uid' => $request->uid, 'id' => $address])->field('id,province,city,county,name,mobile,remark,is_default,mergename')->findOrEmpty()->toArray(); } // if (!$address){ // return api_error_return('地址获取失败'); // } $data = ShopOrderModel::buyDetails($buy_goods, $address); if (empty($data)) { return api_error_return('获取失败'); } $cur_xzmoney = Db::name('system_config')->where('name', 'xz_cur_money')->where('group', 'xzconfig')->value('value'); foreach ($data['details'] as $key => $val) { foreach ($val['goods'] as $k1 => $v1) { $goods_name = $v1['goods_name']; $goods_name = str_replace(' ', '', $goods_name); if (strlen($goods_name) > 20) { $goods_name = substr($goods_name, 0, 19); } // $data['details'][$key]['goods'][$k1]['goods_name'] = mb_convert_encoding($goods_name, 'UTF-8', 'UTF-8'); // $data['details'][$key]['goods'][$k1]['goods_name'] = '云德商品购买'; if ($v1['goods_type'] == 5) { $data['details'][$key]['goods'][$k1]['price'] = getXzPirceWithPrice($cur_xzmoney, $data['details'][$key]['goods'][$k1]['price']); $data['details'][$key]['goods'][$k1]['total_fee'] = getXzPirceWithPrice($cur_xzmoney, $data['details'][$key]['goods'][$k1]['total_fee']); } } } // if ($order_type == 5){ // // foreach ($data['details'] as $key=>$val){ //// ['total_price'] = getXzPirceWithPrice($cur_xzmoney, $data['total_price']); // $data['details'][$key]['total_price']= getXzPirceWithPrice($cur_xzmoney, $val['total_price']); // $data['details'][$key]['payment']= getXzPirceWithPrice($cur_xzmoney, $val['payment']); // // } // // $data['total']['count_payment'] = getXzPirceWithPrice($cur_xzmoney, $data['total']['count_payment']); // // } return api_succ_return(['msg' => '获取成功', 'data' => ['address' => (object)$address, 'buyDetail' => $data['details'], 'total' => $data['total']]]); } catch (\Exception $e) { return api_error_return($e->getMessage()); } } /** * 商城下单购买商品 * @param Request $request * @return Response * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function createOrder(Request $request) { $addressId = $request->post('address', ''); $remark = $request->post('order_remark', ''); $payType = $request->post('pay_type', 0); $payType = $payType == 3 ? $payType : 99; // 因收银台功能过滤支付方式 // 购买商品参数 $buyGoods = json_decode(html_entity_decode($request->post('buy_goods', '')), true); if ($request->user['status'] == 0) { return api_error_return('用户被禁用'); } if ($request->user['is_reward'] == 0) { return api_error_return('用户已被禁止交易'); } // 重复提交拦截 $cacheKeyLock = "caches:orders:createLock:{$request->uid}"; try { $orderGoods = []; $order_type = 1; // 1 买商品送积分 2积分兑换 3任务包兑换券 4提货券 5 星钻兑换 foreach ($buyGoods as $k => $v) { $goodsSn = isset($v['goods_sn'])? trim($v['goods_sn']) : 0; $specId = isset($v['spec_id'])? trim($v['spec_id']) : 0; $orderGoods["{$goodsSn}_{$specId}"][] = $v; $num = isset($v['num']) ? intval($v['num']) : 0; if ($num < 1) { return api_error_return("请先选择商品数量哦"); } $goodsInfo = ShopGoodsService::make()->getCacheInfo($v['goods_sn']); if (!$goodsInfo) { return api_error_return('商品参数错误或已下架,请返回刷新列表'); } if ($goodsInfo['goods_type'] == 2) { return api_error_return('福袋商品不能购买'); } if ($goodsInfo['restrictions_num'] > 0) { $count = Db::name('shop_order_goods') ->alias('og') ->leftJoin('shop_order o', 'o.order_id = og.order_id') ->where('o.status', 'in', [1, 2, 4]) ->where('og.uid', $request->uid) ->count('og.og_id'); if ($count > $goodsInfo['restrictions_num']) { return api_error_return('超过限购'); } if ($v['num'] + $count > $goodsInfo['restrictions_num']) { return api_error_return('超过限购数量,还可购买:' . ($goodsInfo['restrictions_num'] - $count) . '件'); } } } if (!$userAddress = UserAddress::getAddressIdDetails((int)$addressId)) { return api_error_return('获取收货地址失败'); } if ($userAddress['uid'] != $request->user['id']) { return api_error_return('收货地址信息异常'); } if (empty($buy_goods)) { return api_error_return('参数错误2'); } foreach ($buy_goods as $key => $value) { $result[$value['goods_sn'] . '_' . $value['spec_id']][] = $value; } if (!ShopOrderModel::checkStock($result)) { return api_error_return('下单失败,所选商品含有库存不足的商品'); } try { $data = ShopOrderModel::buyDetails($buy_goods, $userAddress); $supplier_name = $data['details'][0]['supplier_name']; $paymoney = $data['total']['count_payment']; $count = Db::name('shop_order')->where('user_id', $request->uid)->where('order_type', 1)->where('status', 0)->whereTime('created_time', '-2 hours')->count(); if ($count > 20) { return api_error_return('未支付的订单太多,创建失败'); } // 订单处理数据 $orderData = [ 'order' => $result, 'address' => $userAddress, 'cls' => 0, 'cart_ids' => 0, 'pay_type' => $payType, 'order_remark' => $remark, 'order_type' => $order_type, 'supplier_name' => $supplier_name ]; $flag = ShopOrderModel::createOrder($orderData, $request->uid, $request->user, $data, $request->post('cart_id', '')); if (!$flag) { return api_error_return('下单失败'); } return api_succ_return(['msg' => '下单成功', 'data' => ['order_ids' => $flag['data']]]); } catch (\Exception $e) { return api_error_return('下单失败 ' . $e->getMessage()); } } catch (\Exception $e) { return api_error_return($e->getMessage()); } } /** * 取消订单 */ public function cancelOrder(Request $request): Response { if (empty($request->only(['order_sn']))) { return api_error_return('订单号不能为空'); } Db::startTrans(); try { ShopOrderModel::cancelOrder($request->only(['order_sn']), $request->uid); Db::commit(); } catch (\Exception $e) { Db::rollback(); return api_error_return('取消失败' . $e->getMessage()); } return api_succ_return('取消成功'); } /** * 确认订单 */ public function receiveOrder(Request $request): Response { if (empty($request->only(['order_sn']))) { return api_error_return('订单号不能为空'); } Db::startTrans(); try { ShopOrderModel::receiveOrder($request->only(['order_sn']), $request->uid); Db::commit(); } catch (\Exception $e) { Db::rollback(); return api_error_return('确认失败' . $e->getMessage()); } return api_succ_return('确认成功'); } }