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' => 0, 'price' => 0, 'original_price' => 3.5 ]; $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()); } } }