request->input('user_id'); $marketId = $this->request->input('market_id'); $shopcartIds = $this->request->input('shopcart_ids'); //判断用户有没有绑定手机 // $telExists = $this->userBindTelService->check($userId); // if(!$telExists){ // throw new ErrorCodeException(ErrorCode::NOT_BIND_TEL_ERROR); // } // //获取用户收货地址 // $address = UserAddress::query()->where('user_id',$userId) // ->orderByDesc('is_default') // ->orderByDesc('updated_at') // ->first(); // $res['location'] = [ // 'address' => $address, // 'distribution_price' => 0 // ]; //返回预约送达时间 数组 $res['appointment_time'] = $this->appointmentTimeService->get($shopcartIds); // // $res['store_list'] = $this->shopCartService->getGoodsByShopcartId($shopcartIds); // //获取用户优惠券 // $res['coupon'] = $this->couponRecService->allForOnlineOrderAvailable($userId, $marketId); // //增值服务接口 // $res['value_added_service'] = [ // 'text' => '买鸡买鸭,免费帮杀;买瓜买黇,包熟包甜', // 'select' => 1, // 'price' => 3.50 // ]; // $total = 0; // foreach ($res['store_list'] as $store) // { // $total = bcadd($total,$store['subtotal'],2); // } // $total = bcadd($total,$res['value_added_service']['price'],2); // $total = bcadd($total,$res['location']['distribution_price'],2); // $res['total'] = $total; return $this->success($res); } /** * 订单详情 * 1、主订单信息,用户配送信息(地址、姓名、电话、配送时间、配送类型)、基础信息(订单ID、订单编号、下单时间、订单金额、付款时间、支付方式、红包优惠、服务站电话、增值服务费) * 2、子订单以及订单商品,按商户分组,有商户信息(ID、商户名、商户logo),商品信息(id、名字、封面、规格、tag、原价、售价、库存、总销、月销、是否失效、失效原因) * @param OrderOnlineDetailRequest $request * @return ResponseInterface */ public function detailByUser(OrderOnlineDetailRequest $request) { $params = $request->validated(); return $this->success(['detail' => $this->orderOnlineService->detailByUser($params['global_order_id'], $params['user_id'])]); } /** * 下单并进行支付,返回支付参数 * 1、用户传参,用户地址ID,用于获取用户地址经纬度来计算配送费 * 2、用户传参,购物车IDs,去获取购物车里的商品详情 * 3、预约送达时间 * 4、优惠券IDs * 5、订单总金额,用于校验比对 * 6、下单成功,请求支付 * @param OrderOnlineRequest $request * @return ResponseInterface */ public function add(OrderOnlineRequest $request){ // 下单 $params = $request->validated(); $couponIds = isset($params['coupon_ids'])&&$params['coupon_ids'] ? explode(',', $params['coupon_ids']) : []; $data = $this->orderOnlineService->do( $params['market_id'], $params['user_id'], $params['user_address_id'], json_decode($params['store_list']), $params['total_money'], $params['delivery_time_note'], $params['service_money'], $couponIds, $params['plat'] ); return $this->success(['data' => $data]); } /** * 待支付订单重新发起支付 * 1、用户id、订单id * 2、发起支付 * @param OrderOnlineStateRequest $request * @return ResponseInterface */ public function pay(OrderOnlineStateRequest $request) { $params = $request->validated(); $data = $this->orderOnlineService->doPay($params['global_order_id'], $params['user_id']); return $this->success(['data' => $data]); } /** * 取消订单 * @param OrderOnlineStateRequest $request * @return ResponseInterface */ public function cancel(OrderOnlineStateRequest $request) { $params = $request->validated(); $this->orderOnlineService->undo($params['global_order_id'], $params['user_id']); return $this->success([]); } /** * 删除订单 * @param OrderOnlineStateRequest $request * @return ResponseInterface */ public function del(OrderOnlineStateRequest $request) { $params = $request->validated(); $this->orderOnlineService->doDel($params['global_order_id'], $params['user_id']); return $this->success([]); } /** * 申请退款 * @param OrderOnlineStateRequest $request * @return ResponseInterface */ public function applyRefund(OrderOnlineStateRequest $request) { $params = $request->validated(); $this->orderOnlineService->doApplyRefund($params['global_order_id'], $params['user_id']); return $this->success([]); } /** * 完成订单 * @param OrderOnlineStateRequest $request * @return ResponseInterface */ public function complete(OrderOnlineStateRequest $request) { Db::beginTransaction(); try { $params = $request->validated(); $this->orderOnlineService->doComplete($params['global_order_id'], $params['user_id']); $this->separateAccountsService->orderOnlineCompleted($params['global_order_id'], $params['user_id']); Db::commit(); return $this->success([]); } catch (\Exception $e) { Db::rollBack(); $this->log->event(LogLabel::ORDER_COMPLETE_LOG, ['exception' => $e->getMessage()]); throw new ErrorCodeException(ErrorCode::ORDER_COMPLETE_FAIL, $e->getMessage()); } } }