|
|
<?php
namespace App\Controller\v3;
use App\Constants\v3\ErrorCode;use App\Constants\v3\LogLabel;use App\Constants\v3\OrderState;use App\Controller\BaseController;use App\Exception\ErrorCodeException;use App\Model\v3\OrderMain;use App\Request\v3\OrderOnlineDetailRequest;use App\Request\v3\OrderOnlineRequest;use App\Request\v3\OrderOnlineStateRequest;use App\Service\v3\Implementations\PaymentService;use App\Service\v3\Interfaces\CouponRecServiceInterface;use App\Service\v3\Interfaces\SeparateAccountsServiceInterface;use App\Service\v3\Interfaces\ShopCartServiceInterface;use App\Service\v3\Interfaces\UserAddressServiceInterface;use Hyperf\DbConnection\Db;use Hyperf\Di\Annotation\Inject;use App\Service\v3\Interfaces\OrderOnlineServiceInterface;use App\Service\v3\Interfaces\UserBindTelServiceInterface;use App\Service\v3\Interfaces\AppointmentTimeServiceInterface;use Psr\Http\Message\ResponseInterface;use App\Model\v3\UserAddress;
class OrderOnlineController extends BaseController{ /** * @Inject * @var UserBindTelServiceInterface */ protected $userBindTelService; /** * @Inject * @var CouponRecServiceInterface */ protected $couponRecService; /** * @Inject * @var AppointmentTimeServiceInterface */ protected $appointmentTimeService;
/** * @Inject * @var OrderOnlineServiceInterface */ protected $orderOnlineService;
/** * @Inject * @var ShopCartServiceInterface */ protected $shopCartService;
/** * @Inject * @var SeparateAccountsServiceInterface */ protected $separateAccountsService;
/** * @Inject * @var UserAddressServiceInterface */ protected $userAddressService;
/* * 如果没有绑手机号去绑定页面 * 收货地址接口 * 返回预约送达时间 * 商品数据接口 * 红包独立接口 * 配送费独立接口 可根据距离动态计算费用 * 增值服务接口 * */ public function review() { $userId = $this->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], ['is_default','=',1], ]) ->select('id') ->first(); //$res['location'] = $this->userAddressService->getAddressAndDistributionRrice($address->id,$marketId);
//返回预约送达时间 数组
$res['appointment_time'] = $this->appointmentTimeService->do(); //
$res['store_list'] = $this->shopCartService->getGoodsByShopcartId($shopcartIds); //获取用户优惠券
$res['coupon']['available'] = $this->couponRecService->allForOrderOlAvailable('181.02',$userId,'',1,''); $res['coupon']['not_available'] = $this->couponRecService->allForOrderOlAvailable('181.02',$userId,'',1,''); //获取配送费
$res['distribution_price'] = '5.0'; //增值服务接口
$res['value_added_service'] = [ 'select' => 1, 'price' => 3.50 ]; $total = 0; foreach ($res['store_list'] as $store) { $total+= $store['subtotal']; } $total+= $res['value_added_service']['price']; $total+= $res['distribution_price']; $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['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['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['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['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['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['order_id'], $params['user_id']); $this->separateAccountsService->orderOnlineCompleted($params['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()); } }}
|