From f395a4de785bd7dcfea2f703b8e250d53e704960 Mon Sep 17 00:00:00 2001 From: weigang Date: Mon, 7 Sep 2020 17:45:04 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Constants/v3/ErrorCode.php | 24 +++ app/Constants/v3/LogLabel.php | 10 ++ app/Constants/v3/OrderState.php | 4 +- app/Controller/v3/HomeController.php | 2 +- app/Controller/v3/LocationController.php | 17 +- app/Controller/v3/OrderOfflineController.php | 2 + app/Controller/v3/OrderOnlineController.php | 90 +++++++++- app/Controller/v3/PaymentController.php | 48 ----- app/JsonRpc/OrderOnlineService.php | 87 +++++++++ app/JsonRpc/OrderOnlineServiceInterface.php | 8 + app/Model/v3/Market.php | 21 +++ app/Model/v3/OrderMain.php | 2 + app/Model/v3/ServiceReward.php | 2 + app/Model/v3/UserRelationBind.php | 2 + app/Request/v3/OrderOnlineStateRequest.php | 37 ++++ .../v3/Implementations/ActivityService.php | 7 +- .../v3/Implementations/BannerService.php | 12 +- .../v3/Implementations/CouponRecService.php | 2 +- .../v3/Implementations/CouponService.php | 112 ++++++++++++ .../Implementations/GoodsActivityService.php | 37 +++- .../Implementations/OrderOfflineService.php | 8 +- .../v3/Implementations/OrderOnlineService.php | 167 ++++++++++++------ .../SeparateAccountsService.php | 66 +++---- .../v3/Interfaces/CouponServiceInterface.php | 15 ++ .../GoodsActivityServiceInterface.php | 2 + .../OrderOnlineServiceInterface.php | 50 +++++- .../SeparateAccountsServiceInterface.php | 5 +- config/autoload/wechat.php | 4 + config/routes.php | 6 +- 29 files changed, 663 insertions(+), 186 deletions(-) delete mode 100644 app/Controller/v3/PaymentController.php create mode 100644 app/JsonRpc/OrderOnlineService.php create mode 100644 app/JsonRpc/OrderOnlineServiceInterface.php create mode 100644 app/Request/v3/OrderOnlineStateRequest.php diff --git a/app/Constants/v3/ErrorCode.php b/app/Constants/v3/ErrorCode.php index 9cdc096..faa2df5 100644 --- a/app/Constants/v3/ErrorCode.php +++ b/app/Constants/v3/ErrorCode.php @@ -53,6 +53,30 @@ class ErrorCode extends AbstractConstants */ const ORDER_NOT_AVAILABLE = 605; + /** + * 订单取消失败 + * @Message("订单取消失败") + */ + const ORDER_CANCEL_FAIL = 606; + + /** + * 订单删除失败 + * @Message("订单删除失败") + */ + const ORDER_DELETE_FAIL = 607; + + /** + * 订单申请退款失败 + * @Message("订单申请退款失败") + */ + const ORDER_APPLY_REFUND_FAIL = 608; + + /** + * 订单完成失败 + * @Message("订单完成失败") + */ + const ORDER_COMPLETE_FAIL = 609; + /************************************/ /* 支付相关 651-700 */ /************************************/ diff --git a/app/Constants/v3/LogLabel.php b/app/Constants/v3/LogLabel.php index f49eb61..c83fde0 100644 --- a/app/Constants/v3/LogLabel.php +++ b/app/Constants/v3/LogLabel.php @@ -52,6 +52,11 @@ class LogLabel extends AbstractConstants */ const ORDER_PAYMENT_LOG = 'order_payment_log'; + /** + * @Message("订单完成") + */ + const ORDER_COMPLETE_LOG = 'order_complete_log'; + /** * @Message("IOT设备绑定") */ @@ -72,4 +77,9 @@ class LogLabel extends AbstractConstants */ const SEPARATE_ACCOUNTS_LOG = 'separate_accounts_log'; + /** + * @Message("优惠券退还") + */ + const COUPON_REFUND_LOG = 'coupon_refund_log'; + } diff --git a/app/Constants/v3/OrderState.php b/app/Constants/v3/OrderState.php index cc0fb41..f6848f5 100644 --- a/app/Constants/v3/OrderState.php +++ b/app/Constants/v3/OrderState.php @@ -68,11 +68,13 @@ class OrderState extends AbstractConstants /** * @Message("订单完成") */ - const FINISH = [self::COMPLETED, self::EVALUATED]; + const FINISH = [self::COMPLETED, self::EVALUATED, self::CANCELED]; /** * @Message("售后/退款") */ const REFUND = [self::REFUNDING, self::REFUNDED, self::REFUND_REFUSE]; + const CAN_DEL = [self::COMPLETED, self::EVALUATED, self::CANCELED, self::REFUNDED, self::REFUND_REFUSE]; + } \ No newline at end of file diff --git a/app/Controller/v3/HomeController.php b/app/Controller/v3/HomeController.php index 04de8ca..062b63d 100644 --- a/app/Controller/v3/HomeController.php +++ b/app/Controller/v3/HomeController.php @@ -94,7 +94,7 @@ class HomeController extends BaseController public function appletIndex() { - $marketId = $this->request->input('market_id', 0); + $marketId = $this->request->input('market_id', -1); $banners = $this->bannerService->all(Banner::TYPE_APPLET_INDEX, $marketId); $categories = $this->categoryService->allForAppletIndex(); $activity = $this->activityService->allForAppletIndex(env('APPLET_INDEX_ACTIVITY_TYPE'), $marketId); diff --git a/app/Controller/v3/LocationController.php b/app/Controller/v3/LocationController.php index 8fbffae..04d043b 100644 --- a/app/Controller/v3/LocationController.php +++ b/app/Controller/v3/LocationController.php @@ -3,6 +3,7 @@ namespace App\Controller\v3; use App\Controller\BaseController; +use App\Model\v3\Market; use App\Service\v3\Interfaces\LocationServiceInterface; use Hyperf\Di\Annotation\Inject; @@ -27,21 +28,7 @@ class LocationController extends BaseController */ public function getNearestMarket() { - return $this->success([ - 'market' => [ - 'id' => 1, - 'name' => '海尔青啤', - 'province_id' => 1, - 'province_name' => '广西', - 'city_id' => 2, - 'city_name' => '南宁市', - 'area_id' => 3, - 'area_name' => '良庆区', - 'address' => '海尔青啤广场', - 'lng' => '108.383566', - 'lat' => '22.759946', - ] - ]); + return $this->success(Market::query()->find(1)); } public function getMarketListByLocation() diff --git a/app/Controller/v3/OrderOfflineController.php b/app/Controller/v3/OrderOfflineController.php index 05539aa..5951e52 100644 --- a/app/Controller/v3/OrderOfflineController.php +++ b/app/Controller/v3/OrderOfflineController.php @@ -9,6 +9,7 @@ use App\Service\v3\Interfaces\OrderOfflineServiceInterface; use App\Service\v3\Interfaces\StoreServiceInterface; use Hyperf\Validation\ValidationException; use Hyperf\Di\Annotation\Inject; +use Psr\Http\Message\ResponseInterface; class OrderOfflineController extends BaseController { @@ -51,6 +52,7 @@ class OrderOfflineController extends BaseController * 1、用户id、去商户id下支付、支付的金额 * 2、下单同时支付,下发支付参数 * @param OrderOfflineRequest $request + * @return ResponseInterface */ public function add(OrderOfflineRequest $request) { diff --git a/app/Controller/v3/OrderOnlineController.php b/app/Controller/v3/OrderOnlineController.php index a2cd5e7..b740c7b 100644 --- a/app/Controller/v3/OrderOnlineController.php +++ b/app/Controller/v3/OrderOnlineController.php @@ -3,12 +3,19 @@ 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 Hyperf\DbConnection\Db; use Hyperf\Di\Annotation\Inject; use App\Service\v3\Interfaces\OrderOnlineServiceInterface; use App\Service\v3\Interfaces\UserBindTelServiceInterface; @@ -46,6 +53,12 @@ class OrderOnlineController extends BaseController */ protected $shopCartService; + /** + * @Inject + * @var SeparateAccountsServiceInterface + */ + protected $separateAccountsService; + /* * 如果没有绑手机号去绑定页面 * 收货地址接口 @@ -110,6 +123,7 @@ class OrderOnlineController extends BaseController // 下单 $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'], @@ -118,10 +132,84 @@ class OrderOnlineController extends BaseController $params['total_money'], $params['delivery_time_note'], $params['service_money'], - explode(',', $params['coupon_ids']), + $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()); + } + } } \ No newline at end of file diff --git a/app/Controller/v3/PaymentController.php b/app/Controller/v3/PaymentController.php deleted file mode 100644 index 549b60b..0000000 --- a/app/Controller/v3/PaymentController.php +++ /dev/null @@ -1,48 +0,0 @@ -validationFactory->make( - $this->request->all(), - [ - 'global_order_id' => 'required|nonempty', - 'user_id' => 'required|nonempty', - ], - [ - 'global_order_id.*' => '订单号错误' - ] - ); - - if ($validator->fails()) { - throw new ValidationException($validator); - } - - $params = $validator->validated(); - $orderMain = OrderMain::query()->select('global_order_id', 'money', 'user_id') - ->where(['global_order_id' => $params['global_order_id']])->first(); - $parameters = $this->paymentService->do($orderMain->global_order_id, $orderMain->money, $orderMain->user_id); - - return $this->success(['parameters' => $parameters]); - } -} \ No newline at end of file diff --git a/app/JsonRpc/OrderOnlineService.php b/app/JsonRpc/OrderOnlineService.php new file mode 100644 index 0000000..b7d0360 --- /dev/null +++ b/app/JsonRpc/OrderOnlineService.php @@ -0,0 +1,87 @@ +orderOnlineService->doComplete($orderMainId, $userId); + $this->separateAccountsService->orderOnlineCompleted($orderMainId, $userId); + + Db::commit(); + return [ + "status" => 200, + "code" => 0, + "result" => [], + "message" => '调用成功' + ]; + } catch (\Exception $e) { + + Db::rollBack(); + $this->log->event(LogLabel::ORDER_COMPLETE_LOG, ['exception' => $e->getMessage()]); + throw new ErrorCodeException(ErrorCode::ORDER_COMPLETE_FAIL, $e->getMessage()); + } + + } + + /** + * 线上订单退款 + * 申请退款 state = 8 + * 退款成功 state = 9 + */ + public function onlineRefund($global_order_id){ + $result = [ + "status" => 200, + "code" => ErrorCode::ORDER_FAILURE, + "result" => [], + "message" => '' + ]; + + $res = $this->orderOnlineService->onlineRefund($global_order_id); + if($res['code'] > 0){ + $result['result'] = $res; + $result['message'] = '退款失败'; + }else{ + $result['code'] = 0; + $result['result'] = $res; + $result['message'] = '退款成功'; + }; + + return $result; + } +} \ No newline at end of file diff --git a/app/JsonRpc/OrderOnlineServiceInterface.php b/app/JsonRpc/OrderOnlineServiceInterface.php new file mode 100644 index 0000000..5f26e43 --- /dev/null +++ b/app/JsonRpc/OrderOnlineServiceInterface.php @@ -0,0 +1,8 @@ +find($this->attributes['province_id'])->value('name'); + } + + public function getCityNameAttribute() + { + return Area::query()->find($this->attributes['city_id'])->value('name'); + } + + public function getRegionNameAttribute() + { + return Area::query()->find($this->attributes['region_id'])->value('name'); + } + public function stores() { return $this->hasMany(Store::class,'market_id','id'); diff --git a/app/Model/v3/OrderMain.php b/app/Model/v3/OrderMain.php index d7de827..9d4f06b 100644 --- a/app/Model/v3/OrderMain.php +++ b/app/Model/v3/OrderMain.php @@ -6,9 +6,11 @@ use App\Constants\v3\OrderState; use App\Constants\v3\Payment; use App\Constants\v3\Shipping; use App\Model\Model; +use Hyperf\Database\Model\SoftDeletes; class OrderMain extends Model { + use SoftDeletes; protected $table = 'lanzu_order_main'; protected $fillable = [ diff --git a/app/Model/v3/ServiceReward.php b/app/Model/v3/ServiceReward.php index 3f8647c..a003ec0 100644 --- a/app/Model/v3/ServiceReward.php +++ b/app/Model/v3/ServiceReward.php @@ -3,6 +3,8 @@ declare (strict_types=1); namespace App\Model\v3; +use App\Model\Model; + class ServiceReward extends Model { /** diff --git a/app/Model/v3/UserRelationBind.php b/app/Model/v3/UserRelationBind.php index 772c681..3dd22e3 100644 --- a/app/Model/v3/UserRelationBind.php +++ b/app/Model/v3/UserRelationBind.php @@ -3,6 +3,8 @@ declare (strict_types=1); namespace App\Model\v3; +use App\Model\Model; + /** */ class UserRelationBind extends Model diff --git a/app/Request/v3/OrderOnlineStateRequest.php b/app/Request/v3/OrderOnlineStateRequest.php new file mode 100644 index 0000000..523fb40 --- /dev/null +++ b/app/Request/v3/OrderOnlineStateRequest.php @@ -0,0 +1,37 @@ + 'required|nonempty|integer', + 'user_id' => 'required|nonempty|integer', + ]; + } + + /** + * @return array + */ + public function messages(): array + { + return [ + '*.*' => ':attribute无效', + ]; + } + + public function attributes(): array + { + return parent::attributes(); + } +} diff --git a/app/Service/v3/Implementations/ActivityService.php b/app/Service/v3/Implementations/ActivityService.php index 76a14f4..15cbc6e 100644 --- a/app/Service/v3/Implementations/ActivityService.php +++ b/app/Service/v3/Implementations/ActivityService.php @@ -28,8 +28,11 @@ class ActivityService implements ActivityServiceInterface { $builder = GoodsActivity::query() ->with(['store']) - ->where(['type' => $type]) - ->whereIn('market_id', [0,$marketId]); + ->where(['type' => $type]); + + if ($marketId != -1) { + $builder = $builder->whereJsonContains('market_ids', [(string)$marketId]); + } return $builder->get()->toArray(); } diff --git a/app/Service/v3/Implementations/BannerService.php b/app/Service/v3/Implementations/BannerService.php index c686de4..05d30bd 100644 --- a/app/Service/v3/Implementations/BannerService.php +++ b/app/Service/v3/Implementations/BannerService.php @@ -9,9 +9,13 @@ class BannerService implements BannerServiceInterface { public function all($type, $marketId) { - return Banner::query() - ->where(['type' => $type]) - ->whereJsonContains('market_ids', [(string)$marketId]) - ->get()->toArray(); + $builder = Banner::query() + ->where(['type' => $type]); + + if ($marketId != -1) { + $builder = $builder->whereJsonContains('market_ids', [(string)$marketId]); + } + + return $builder->get()->toArray(); } } \ No newline at end of file diff --git a/app/Service/v3/Implementations/CouponRecService.php b/app/Service/v3/Implementations/CouponRecService.php index 02f9d7d..eb4c764 100644 --- a/app/Service/v3/Implementations/CouponRecService.php +++ b/app/Service/v3/Implementations/CouponRecService.php @@ -56,7 +56,7 @@ class CouponRecService implements CouponRecServiceInterface } if (!empty($storeTypeIds)) { - $builder->whereJsonContains('coupon.storetype_ids', $storeTypeIds); + $builder->whereJsonContains('coupon.category_ids', $storeTypeIds); } $builder->where(['receive.user_id' => $userId]) diff --git a/app/Service/v3/Implementations/CouponService.php b/app/Service/v3/Implementations/CouponService.php index 950937b..5071541 100644 --- a/app/Service/v3/Implementations/CouponService.php +++ b/app/Service/v3/Implementations/CouponService.php @@ -2,7 +2,14 @@ namespace App\Service\v3\Implementations; +use App\Constants\v3\ErrorCode; +use App\Constants\v3\LogLabel; +use App\Exception\ErrorCodeException; +use App\Model\v3\CouponRec; +use App\Model\v3\CouponUse; +use App\Model\v3\OrderMain; use App\Service\v3\Interfaces\CouponServiceInterface; +use Hyperf\DbConnection\Db; use Hyperf\Redis\Redis; use Hyperf\Utils\ApplicationContext; @@ -55,4 +62,109 @@ class CouponService implements CouponServiceInterface $expireRes = $redis->expire('coupon_' . date('Ymd') . '_used_' . $userId, strtotime(date('Y-m-d') . ' 23:59:59') - time()); return $setRes && $expireRes; } + + public function orderUseCoupons($orderMainId, $couponRecs) + { + Db::beginTransaction(); + try { + if (is_array($couponRecs)&&!empty($couponRecs)) { + # 使用记录、更新当前优惠券 + foreach ($couponRecs as $key => &$coupon) { + + $couponUse = [ + 'user_id' => $coupon['user_id'], + 'user_receive_id' => $coupon['id'], + 'coupon_id' => $coupon['coupon_id'], + 'order_main_id' => $orderMainId, + 'use_time' => time(), + 'return_time' => 0, + 'number' => 1, + 'status' => 1, + 'update_time' => 0, + ]; + + $insertRes = CouponUse::query()->insert($couponUse); + if ($insertRes) { + $status = 0; + $numberRemain = $coupon['number_remain'] - 1; + if ($numberRemain == 0) { + $status = 2; + } elseif ($numberRemain > 0 && $numberRemain < $coupon['number']) { + $status = 1; + } elseif ($numberRemain == $coupon['number']) { + $status = 0; + } + + $upRes = CouponRec::query()->where(['id' => $coupon['id']]) + ->update(['number_remain' => $numberRemain, 'status' => $status]); + if (!$upRes) { + Db::rollBack(); + throw new ErrorCodeException(ErrorCode::COUPON_USE_FAILURE); + } + // 缓存使用记录 + $usedRes = $this->cacheTodayCouponUsed($coupon['user_id'], $coupon['coupon_id'], $coupon['id']); + if (!$usedRes) { + Db::rollBack(); + throw new ErrorCodeException(ErrorCode::COUPON_USE_FAILURE); + } + } else { + Db::rollBack(); + throw new ErrorCodeException(ErrorCode::COUPON_USE_FAILURE); + } + + } + } + + Db::commit(); + } catch (\Exception $e) { + Db::rollBack(); + throw new ErrorCodeException(ErrorCode::COUPON_USE_FAILURE, $e->getMessage()); + } + + } + + /** + * 退还优惠券,订单取消,申请退款成功时 + * 先查询是否正常使用优惠券 + * 修改状态,退还领取记录库存,删除ssdb缓存 + * @param $orderMainId + * @return bool + */ + public function orderRefundCoupons($orderMainId) + { + $currentTime = time(); + Db::beginTransaction(); + try { + $couponUses = CouponUse::query() + ->where('order_main_id', $orderMainId) + ->where('status', 1) + ->get(); + if (!empty($couponUses)) { + foreach ($couponUses as $use) { + $use->status = 1; + $use->return_time = $currentTime; + $use->update_time = $currentTime; + $res = $use->save(); + $couponReceive = CouponRec::query() + ->where('id', $use->user_receive_id) + ->whereRaw('number >= number_remain+' . $use->number) + ->update([ + 'number_remain' => Db::raw('number_remain+' . $use->number), + 'status' => Db::raw('IF(number=number_remain, 0,1)'), 'update_time' => $currentTime + ]); + + if ($res && $couponReceive) { + $redis = ApplicationContext::getContainer()->get(Redis::class); + $clearUseRedis = $redis->sRem('coupon_' . date('Ymd') . '_used_' . $use->user_id, $use->coupon_id); + } + } + } + Db::commit(); + return true; + } catch (\Exception $e) { + $this->log->event(LogLabel::COUPON_REFUND_LOG, ['msg' => '订单取消/退款退还优惠券', 'exception' => $e->getMessage()]); + Db::rollBack(); + return false; + } + } } \ No newline at end of file diff --git a/app/Service/v3/Implementations/GoodsActivityService.php b/app/Service/v3/Implementations/GoodsActivityService.php index 884dfa7..09f7df8 100644 --- a/app/Service/v3/Implementations/GoodsActivityService.php +++ b/app/Service/v3/Implementations/GoodsActivityService.php @@ -31,7 +31,7 @@ class GoodsActivityService implements GoodsActivityServiceInterface } // 商户歇业 - if($goods->store->is_rest != Store::IS_OPEN_YES){ + if($goods->store->is_rest == 1){ return ErrorCode::GOODS_ACTIVITY_ON_SALE_NO; } @@ -46,13 +46,13 @@ class GoodsActivityService implements GoodsActivityServiceInterface } // 是否超过限购数量 - if ($goods->restrict_num > $num) { + if ($goods->restrict_num < $num) { return ErrorCode::GOODS_ACTIVITY_RESTRICT_LIMIT; } // 是否已经购买过(某个时间段内,时间段有商品的限制) $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); - $hasBuy = $ssdb->exec('get', SsdbKeys::ACTIVITY_GOODS_BUY_RECORD.$userId.'_'.$goodsId); + $hasBuy = $ssdb->exec('get', SsdbKeys::ACTIVITY_GOODS_BUY_RECORD.$userId.'_'.$goods->type.'_'.$goodsId); if ($hasBuy && $hasBuy >= $goods->time_limit_num) { return ErrorCode::GOODS_ACTIVITY_BUY; } @@ -80,17 +80,19 @@ class GoodsActivityService implements GoodsActivityServiceInterface public function cacheRecord($goodsId, $num, $userId) { - $goods = GoodsActivity::query()->select('time_limit_days', 'time_limit_num') + $goods = GoodsActivity::query() ->where('id', $goodsId) ->first(); - $ssdbKey = SsdbKeys::ACTIVITY_GOODS_BUY_RECORD.$userId.'_'.$goodsId; + $ssdbKey = SsdbKeys::ACTIVITY_GOODS_BUY_RECORD.$userId.'_'.$goods->type.'_'.$goodsId; $expireTime = 0; - if ($goods->time_limit_days <= 1) { + if ($goods->time_limit_days >= 1) { $expireTime += strtotime(date('Y-m-d 23:59:59')) - time(); + var_dump('ex1', $expireTime); } - $expireTime += ($goods->time_limit_days-1) *86400; + $expireTime += ($goods->time_limit_days-1) * 86400; + var_dump('ex2', $expireTime); $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); @@ -103,6 +105,27 @@ class GoodsActivityService implements GoodsActivityServiceInterface } + public function clearCacheRecord($goodsId, $num, $userId) + { + $goods = GoodsActivity::query() + ->where('id', $goodsId) + ->first(); + var_dump('$goods', $goods, $goodsId); + if (empty($goods)) { + return true; + } + $ssdbKey = SsdbKeys::ACTIVITY_GOODS_BUY_RECORD.$userId.'_'.$goods->type.'_'.$goodsId; + var_dump('ssdbkey', $ssdbKey); + + $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); + + if (!$ssdb->exec('exists', $ssdbKey)) { + } else { + $res = $ssdb->exec('incr', $ssdbKey, -1*$num); + var_dump('res', $res, -1*$num); + } + } + /** * 统计订单中活动商品的数量,并校验 * @param $orderGoods diff --git a/app/Service/v3/Implementations/OrderOfflineService.php b/app/Service/v3/Implementations/OrderOfflineService.php index 908268f..8ebdaf3 100644 --- a/app/Service/v3/Implementations/OrderOfflineService.php +++ b/app/Service/v3/Implementations/OrderOfflineService.php @@ -57,7 +57,7 @@ class OrderOfflineService implements OrderOfflineServiceInterface 'delivery_time_note' => '' ]; - $orderMain = OrderMain::create($dataMain); + $orderMain = OrderMain::query()->create($dataMain); $orderMainId = $orderMain->id; // 子订单数据 @@ -70,15 +70,15 @@ class OrderOfflineService implements OrderOfflineServiceInterface 'note' => '' ]; - $orderChild = Order::create($dataChildren); + $orderChild = Order::query()->create($dataChildren); $orderChildId = $orderChild->id; Db::commit(); // 支付 - return $this->paymentService->do($globalOrderId, $money, $userId, config('site_host') . '/v3/wechat/notify/offline'); + return $this->paymentService->do($globalOrderId, $money, $userId, config('wechat.notify_url.offline')); } catch (\Exception $e) { Db::rollBack(); - $this->log->event(LogLabel::ORDER_ONLINE_LOG, ['exception_msg' => $e->getMessage()]); + $this->log->event(LogLabel::ORDER_OFFLINE_LOG, ['exception_msg' => $e->getMessage()]); throw new ErrorCodeException(ErrorCode::ORDER_ONLINE_FAIL); } } diff --git a/app/Service/v3/Implementations/OrderOnlineService.php b/app/Service/v3/Implementations/OrderOnlineService.php index 7ef305c..8c36c40 100644 --- a/app/Service/v3/Implementations/OrderOnlineService.php +++ b/app/Service/v3/Implementations/OrderOnlineService.php @@ -29,6 +29,8 @@ use App\Service\v3\Interfaces\GoodsActivityServiceInterface; use App\Service\v3\Interfaces\GoodsServiceInterface; use App\Service\v3\Interfaces\PaymentServiceInterface; use App\TaskWorker\SSDBTask; +use Exception; +use Hyperf\Database\Model\Model; use Hyperf\DbConnection\Db; use Hyperf\Di\Annotation\Inject; use App\Service\v3\Interfaces\OrderOnlineServiceInterface; @@ -142,13 +144,13 @@ class OrderOnlineService implements OrderOnlineServiceInterface $goods = Goods::query()->lockForUpdate()->find($cart->goods_id); $check = $this->goodsService->check($goods->id, $cart->num); if (true !== $check) { - // throw new ErrorCodeException($check, '[商品失效1]'.$cart->goods_id); + throw new ErrorCodeException($check, '[商品失效1]'.$cart->goods_id); } } elseif ($cart->activity_type == 2) { $goods = GoodsActivity::query()->lockForUpdate()->find($cart->goods_id); $check = $this->goodsActivityService->check($goods->id, $cart->num, $userId); if (true !== $check) { - // throw new ErrorCodeException($check, '[商品失效2]'.$cart->goods_id); + throw new ErrorCodeException($check, '[商品失效2]'.$cart->goods_id); } // 活动商品不可用优惠券 @@ -314,71 +316,70 @@ class OrderOnlineService implements OrderOnlineServiceInterface } // 优惠券红包使用记录 - if (is_array($couponRec)&&!empty($couponRec)) { - # 使用记录、更新当前优惠券 - foreach ($couponRec as $key => &$coupon) { - - $couponUse = [ - 'user_id' => $coupon['user_id'], - 'user_receive_id' => $coupon['id'], - 'coupon_id' => $coupon['coupon_id'], - 'order_main_id' => $orderMainId, - 'use_time' => $currentTime, - 'return_time' => 0, - 'number' => 1, - 'status' => 1, - 'update_time' => 0, - ]; - - $insertRes = CouponUse::query()->insert($couponUse); - if ($insertRes) { - $numberRemain = $coupon['number_remain'] - 1; - if ($numberRemain == 0) { - $status = 2; - } elseif ($numberRemain > 0 && $numberRemain < $coupon['number']) { - $status = 1; - } elseif ($numberRemain == $coupon['number']) { - $status = 0; - } - - $upRes = CouponRec::query()->where(['id' => $coupon['id']])->update(['number_remain' => $numberRemain, 'status' => $status]); - if (!$upRes) { - Db::rollBack(); - throw new ErrorCodeException(ErrorCode::COUPON_USE_FAILURE); - } - // 缓存使用记录 - $usedRes = $this->couponService->cacheTodayCouponUsed($coupon['user_id'], $coupon['coupon_id'], $coupon['id']); - if (!$usedRes) { - Db::rollBack(); - throw new ErrorCodeException(ErrorCode::COUPON_USE_FAILURE); - } - } else { - Db::rollBack(); - throw new ErrorCodeException(ErrorCode::COUPON_USE_FAILURE); - } - - } - } + $this->couponService->orderUseCoupons($orderMainId, $couponRec); Db::commit(); // 支付 - return $this->paymentService->do($globalOrderId, $totalAmount, $userId, config('site_host') . '/v3/wechat/notify/online'); - } catch (\Exception $e) { + return $this->paymentService->do($globalOrderId, $totalAmount, $userId, config('wechat.notify_url.online')); + } catch (Exception $e) { Db::rollBack(); $this->log->event(LogLabel::ORDER_ONLINE_LOG, ['exception_msg' => $e->getMessage()]); - throw new ErrorCodeException(ErrorCode::ORDER_ONLINE_FAIL); + throw new ErrorCodeException(ErrorCode::ORDER_ONLINE_FAIL, $e->getMessage()); } } - public function check() + public function check($orderMainId, $userId, $state): Model { - // TODO: Implement check() method. + $builder = OrderMain::query() + ->where(['id' => $orderMainId, 'user_id' => $userId]); + + if (is_array($state)) { + $builder = $builder->whereIn('state', $state); + } else { + $builder = $builder->where(['state' => $state]); + } + $orderMain = $builder->first(); + if (empty($orderMain)) { + throw new ErrorCodeException(ErrorCode::ORDER_NOT_AVAILABLE); + } + + return $orderMain; } - public function undo() + /** + * @inheritDoc + */ + public function undo($orderMainId, $userId) { - // TODO: Implement undo() method. + Db::beginTransaction(); + try { + // 订单待支付 + $orderMain = $this->check($orderMainId, $userId, OrderState::UNPAID); + $orderMain->state = OrderState::CANCELED; + if (!$orderMain->save()) { + throw new ErrorCodeException(ErrorCode::ORDER_NOT_AVAILABLE); + } + + // 退还优惠券 + $this->couponService->orderRefundCoupons($orderMainId); + + // 撤销活动商品购买记录 + $orders = Order::query()->where(['order_main_id' => $orderMainId])->get()->toArray(); + $orderGoods = OrderGoods::query() + ->where('activity_type', 2) + ->whereIn('order_id', array_values(array_column($orders, 'id'))) + ->get(); + foreach ($orderGoods as $key => &$goods) { + $this->goodsActivityService->clearCacheRecord($goods->goods_id, $goods->number, $orderMain->user_id); + } + + Db::commit(); + return true; + } catch (Exception $e) { + Db::rollBack(); + throw new ErrorCodeException(ErrorCode::ORDER_CANCEL_FAIL, $e->getMessage()); + } } public function detailByUser($orderMainId, $userId) @@ -476,11 +477,67 @@ class OrderOnlineService implements OrderOnlineServiceInterface Db::commit(); return true; - } catch (\Exception $e) { + } catch (Exception $e) { $this->log->event(LogLabel::ORDER_ONLINE_PAID_LOG, ['exception' => $e->getMessage()]); Db::rollBack(); return false; } } + + /** + * @inheritDoc + */ + public function doPay($orderMainId, $userId) + { + // 订单待支付 + $orderMain = $this->check($orderMainId, $userId, OrderState::UNPAID); + return $this->paymentService->do( + $orderMain->global_order_id, + $orderMain->money, + $orderMain->user_id, + config('wechat.notify_url.online') + ); + } + + /** + * @inheritDoc + * @throws Exception + */ + public function doDel($orderMainId, $userId) + { + // 订单完成 + $orderMain = $this->check($orderMainId, $userId, OrderState::CAN_DEL); + if (!$orderMain->delete()) { + throw new ErrorCodeException(ErrorCode::ORDER_DELETE_FAIL); + } + return true; + } + + /** + * @inheritDoc + */ + public function doApplyRefund($orderMainId, $userId) + { + // 未接单 + $orderMain = $this->check($orderMainId, $userId, OrderState::PAID); + $orderMain->state = OrderState::REFUNDING; + if (!$orderMain->save()) { + throw new ErrorCodeException(ErrorCode::ORDER_APPLY_REFUND_FAIL); + } + return true; + } + + /** + * @inheritDoc + */ + public function doComplete($orderMainId, $userId) + { + $orderMain = $this->check($orderMainId, $userId, OrderState::RECEIVING); + $orderMain->state = OrderState::COMPLETED; + if (!$orderMain->save()) { + throw new ErrorCodeException(ErrorCode::ORDER_COMPLETE_FAIL); + } + return true; + } } \ No newline at end of file diff --git a/app/Service/v3/Implementations/SeparateAccountsService.php b/app/Service/v3/Implementations/SeparateAccountsService.php index 20ea856..3cc9f7b 100644 --- a/app/Service/v3/Implementations/SeparateAccountsService.php +++ b/app/Service/v3/Implementations/SeparateAccountsService.php @@ -4,6 +4,7 @@ namespace App\Service\v3\Implementations; use App\Commons\Log; use App\Constants\v3\LogLabel; +use App\Constants\v3\OrderState; use App\Model\v3\FinancialRecord; use App\Model\v3\Order; use App\Model\v3\OrderMain; @@ -16,6 +17,7 @@ use App\Model\v3\UserRelationBind; use App\Model\v3\User; use App\Service\v3\Interfaces\FinancialRecordServiceInterface; use App\Service\v3\Interfaces\MiniprogramServiceInterface; +use App\Service\v3\Interfaces\OrderOnlineServiceInterface; use App\Service\v3\Interfaces\SeparateAccountsServiceInterface; use App\Service\v3\Interfaces\UserServiceInterface; use Hyperf\DbConnection\Db; @@ -47,6 +49,12 @@ class SeparateAccountsService implements SeparateAccountsServiceInterface */ protected $miniprogramService; + /** + * @Inject + * @var OrderOnlineServiceInterface + */ + protected $orderOnlineService; + /** * @inheritDoc */ @@ -75,18 +83,11 @@ class SeparateAccountsService implements SeparateAccountsServiceInterface /** * @inheritDoc */ - public function orderOnlineCompleted($global_order_id) + public function orderOnlineCompleted($orderMainId, $userId) { // 线上订单完成(用户点击确认收货完成/管理后台点击完成/配送员点击完成/自动收货等),进行相关分账 // 订单 - $orderMain = OrderMain::query() - ->where(['global_order_id' => $global_order_id]) - ->whereIn('state', [OrderMain::ORDER_STATE_COMPLETE,OrderMain::ORDER_STATE_EVALUATED,OrderMain::ORDER_STATE_UNREFUND]) - ->first(); - - if (empty($orderMain)) { - return false; - } + $orderMain = $this->orderOnlineService->check($orderMainId, $userId,OrderState::FINISH); $currentTime = time(); Db::beginTransaction(); @@ -94,35 +95,14 @@ class SeparateAccountsService implements SeparateAccountsServiceInterface // =======商户订单收入流水 / Start======= // 查询子订单 - $orders = Order::query()->select(['id', 'money', 'user_id', 'store_id', 'pay_time']) + $orders = Order::query() ->where(['order_main_id' => $orderMain->id]) ->get()->toArray(); + // 新商户流水 foreach ($orders as $key => &$order) { - - // 商户 - $store = Store::find($order['store_id']); - - // 旧商户流水基础数据 TODO 直接移除或后续考虑移除 - $storeAccountBase = [ - 'user_id' => $order['user_id'], - 'order_id' => $order['id'], - 'store_id' => $order['store_id'], - 'type' => 1, - 'time' => date('Y-m-d H:i:s', $currentTime), - 'add_time' => $currentTime, - ]; - - // 旧商户流水 TODO 直接移除或后续考虑移除 - $storeAccount = [ - 'money' => $order['money'], - 'note' => '线上订单', - 'category' => 1, - ]; - StoreAccount::query()->insert(array_merge($storeAccountBase, $storeAccount)); - - // 新商户流水 - $this->financialRecordService->storeByOLOrderComp($store->user_id, $global_order_id ,$order['money']); + $store = Store::query()->find($order['store_id']); + $this->financialRecordService->storeByOLOrderComp($store->user_id, $orderMain->global_order_id ,$order['money']); } // =======商户订单收入流水 / End======= @@ -138,25 +118,29 @@ class SeparateAccountsService implements SeparateAccountsServiceInterface ->first(); if ($communityBind) { - // 奖励/分账金额 $award = ServiceReward::query()->where(['type' => ServiceReward::TYPE_COMMUNITY])->first(); if (empty($award)) { Db::rollBack(); return false; } - $award = $award->set_reward; - // 平台新用户 if ($this->userService->isPlatformNewUser($orderMain->user_id, $orderMain->id)) { - $this->financialRecordService->communityAwardByPlatNewUser($communityBind->source_id, $global_order_id, $award['new_user_reward']); - $this->financialRecordService->communityAwardByPlatNewUserFirstOLOrder($communityBind->source_id, $global_order_id, $award['first_reward']); + $this->financialRecordService->communityAwardByPlatNewUser( + $communityBind->source_id, + $orderMain->global_order_id, + $award['new_user_reward'] + ); + $this->financialRecordService->communityAwardByPlatNewUserFirstOLOrder( + $communityBind->source_id, + $orderMain->global_order_id, + $award['first_reward'] + ); } - // 账单分成 $money = bcmul($orderMain->money, bcdiv($award['flow_reward'], 100, 6), 2); - $this->financialRecordService->communitySeparateAccountsByOrderComp($communityBind->source_id, $global_order_id, $money); + $this->financialRecordService->communitySeparateAccountsByOrderComp($communityBind->source_id, $orderMain->global_order_id, $money); } // =======社区服务点分账 / End======= diff --git a/app/Service/v3/Interfaces/CouponServiceInterface.php b/app/Service/v3/Interfaces/CouponServiceInterface.php index cd42129..c44e41e 100644 --- a/app/Service/v3/Interfaces/CouponServiceInterface.php +++ b/app/Service/v3/Interfaces/CouponServiceInterface.php @@ -28,4 +28,19 @@ interface CouponServiceInterface * @return mixed */ public function countAvailableByUser($userId); + + /** + * 订单使用优惠券 + * @param $orderMainId + * @param $couponRecs + * @return mixed + */ + public function orderUseCoupons($orderMainId, $couponRecs); + + /** + * 订单退还优惠券 + * @param $orderMainId + * @return mixed + */ + public function orderRefundCoupons($orderMainId); } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/GoodsActivityServiceInterface.php b/app/Service/v3/Interfaces/GoodsActivityServiceInterface.php index 13b6719..2ef9218 100644 --- a/app/Service/v3/Interfaces/GoodsActivityServiceInterface.php +++ b/app/Service/v3/Interfaces/GoodsActivityServiceInterface.php @@ -9,5 +9,7 @@ interface GoodsActivityServiceInterface public function undo(); public function getBanner($goodsId); public function detail($goodsId); + public function cacheRecord($goodsId, $num, $userId); + public function clearCacheRecord($goodsId, $num, $userId); public function checkOrderActivityCount($orderGoods, $limitNum=1); } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/OrderOnlineServiceInterface.php b/app/Service/v3/Interfaces/OrderOnlineServiceInterface.php index 968c88b..e17c3d1 100644 --- a/app/Service/v3/Interfaces/OrderOnlineServiceInterface.php +++ b/app/Service/v3/Interfaces/OrderOnlineServiceInterface.php @@ -2,20 +2,64 @@ namespace App\Service\v3\Interfaces; +use Hyperf\Database\Model\Model; + interface OrderOnlineServiceInterface { public function do($marketId, $userId, $userAddrId, $storeList, $totalMoney, $deliveryTimeNote='尽快送达', $serviceMoney, $receiveCouponIds=null, $plat=''); - public function check(); + /** + * 订单是否存在,有效 + * @param $orderMainId + * @param $userId + * @param $state + * @return mixed + */ + public function check($orderMainId, $userId, $state): Model; - public function undo(); + /** + * 取消订单 + * @param $orderMainId + * @param $userId + * @return mixed + */ + public function undo($orderMainId, $userId); public function detailByUser($orderMainId, $userId); /** - * 线上订单支付完成(支付成功) + * 线上订单支付完成(支付成功)后续处理 * @param $orderMainId * @return mixed */ public function doByPaid($orderMainId); + + /** + * 线上订单支付 + * @param $orderMainId + * @param $userId + */ + public function doPay($orderMainId, $userId); + + /** + * 删除订单 + * @param $orderMainId + * @param $userId + */ + public function doDel($orderMainId, $userId); + + /** + * 申请退款 + * @param $orderMainId + * @param $userId + */ + public function doApplyRefund($orderMainId, $userId); + + /** + * 确认收货等完成订单 + * @param $orderMainId + * @param $userId + * @return mixed + */ + public function doComplete($orderMainId, $userId); } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/SeparateAccountsServiceInterface.php b/app/Service/v3/Interfaces/SeparateAccountsServiceInterface.php index 0780d6b..c81cbdc 100644 --- a/app/Service/v3/Interfaces/SeparateAccountsServiceInterface.php +++ b/app/Service/v3/Interfaces/SeparateAccountsServiceInterface.php @@ -14,10 +14,11 @@ interface SeparateAccountsServiceInterface /** * (线上)订单确认完成分账 * 用户确认或服务商(服务站确认) - * @param $global_order_id + * @param $orderMainId + * @param $userId * @return mixed */ - public function orderOnlineCompleted($global_order_id); + public function orderOnlineCompleted($orderMainId, $userId); /** * (线下)订单支付完成分账 diff --git a/config/autoload/wechat.php b/config/autoload/wechat.php index 8739460..9802ac9 100644 --- a/config/autoload/wechat.php +++ b/config/autoload/wechat.php @@ -11,4 +11,8 @@ return [ 'app_id' => env('APP_ID',''), 'secret' => env('APP_SECRET',''), ], + 'notify_url' => [ + 'online' => env('SITE_HOST') . '/v3/wechat/notify/online', + 'offline' => env('SITE_HOST') . '/v3/wechat/notify/offline', + ] ]; \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index 3de5cde..11a8405 100644 --- a/config/routes.php +++ b/config/routes.php @@ -120,7 +120,6 @@ Router::addGroup('/v3/', function () { Router::post('orderOnline/add', 'App\Controller\v3\OrderOnlineController@add'); Router::post('orderOffline/add', 'App\Controller\v3\OrderOfflineController@add'); Router::post('store/storeWithdrawalList', 'App\Controller\v3\BalanceStatementController@getWithdrawalListByStore'); - Router::post('payment/wechatpayOnline', 'App\Controller\v3\PaymentController@wechatpayOnline'); Router::post('store/getBusinessHours', 'App\Controller\v3\StoreController@getBusinessHours'); Router::post('store/updateBusinessHours', 'App\Controller\v3\StoreController@updateBusinessHours'); Router::post('userAddress/update', 'App\Controller\v3\UserAddressController@update'); @@ -130,6 +129,11 @@ Router::addGroup('/v3/', function () { Router::post('userAddress/delete', 'App\Controller\v3\UserAddressController@delete'); Router::post('coupon/getListByUser', 'App\Controller\v3\CouponController@getListByUser'); Router::post('shopCart/info', 'App\Controller\v3\ShopCartController@info'); + Router::post('orderOnline/pay', 'App\Controller\v3\OrderOnlineController@pay'); + Router::post('orderOnline/cancel', 'App\Controller\v3\OrderOnlineController@cancel'); + Router::post('orderOnline/del', 'App\Controller\v3\OrderOnlineController@del'); + Router::post('orderOnline/applyRefund', 'App\Controller\v3\OrderOnlineController@applyRefund'); + Router::post('orderOnline/complete', 'App\Controller\v3\OrderOnlineController@complete'); },['middleware' => [\App\Middleware\Auth\ApiMiddleware::class, \App\Middleware\Auth\UserMiddleware::class]]); // 微信支付回调 From 99021a94fc659573996a28010f2fda6b9b3b42d9 Mon Sep 17 00:00:00 2001 From: Mike Date: Mon, 7 Sep 2020 17:49:40 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E6=B7=BB=E5=8A=A0detal=20imgs=20url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/v3/Goods.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/Model/v3/Goods.php b/app/Model/v3/Goods.php index 2c89408..84daf35 100644 --- a/app/Model/v3/Goods.php +++ b/app/Model/v3/Goods.php @@ -12,6 +12,7 @@ use Hyperf\Database\Model\SoftDeletes; use Hyperf\Utils\ApplicationContext; use Hyperf\Di\Annotation\Inject; use App\Constants\v3\Goods as GoodsConstants; +use Hyperf\Utils\Collection; /** */ @@ -53,6 +54,7 @@ class Goods extends Model 'cart_num', 'is_effective', 'noneffective_note', + 'details_imgs_url', ]; protected function boot(): void @@ -108,6 +110,16 @@ class Goods extends Model return ''; } + public function getDetailsImgsUrlAttribute() + { + $details_imgs = $this->details_imgs; + $img_host = config('alioss.img_host').'/'; + + return collect($details_imgs)->map(function($item) use ($img_host){ + return $img_host . $item; + }); + } + public function store() { return $this->belongsTo(Store::class, 'store_id', 'id'); From dbad83ace7e4023e1ab585070a0cb7e2db72dd4f Mon Sep 17 00:00:00 2001 From: weigang Date: Mon, 7 Sep 2020 17:57:47 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E5=B8=82=E5=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/LocationController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Controller/v3/LocationController.php b/app/Controller/v3/LocationController.php index 04d043b..d139be8 100644 --- a/app/Controller/v3/LocationController.php +++ b/app/Controller/v3/LocationController.php @@ -28,7 +28,7 @@ class LocationController extends BaseController */ public function getNearestMarket() { - return $this->success(Market::query()->find(1)); + return $this->success(['market' => Market::query()->find(1)]); } public function getMarketListByLocation() From d0f5ebdf2e28b059ee135186cbb0c6ee6118606b Mon Sep 17 00:00:00 2001 From: Mike Date: Mon, 7 Sep 2020 19:03:37 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=88=91=E7=9A=84block?= =?UTF-8?q?s=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Service/v3/Implementations/UserCenterBlockService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Service/v3/Implementations/UserCenterBlockService.php b/app/Service/v3/Implementations/UserCenterBlockService.php index f7cf039..f918fb5 100644 --- a/app/Service/v3/Implementations/UserCenterBlockService.php +++ b/app/Service/v3/Implementations/UserCenterBlockService.php @@ -31,7 +31,7 @@ class UserCenterBlockService implements UserCenterBlockServiceInterface return [ [ 'type' => 'user', - 'title' => '我的', + 'title' => '常用功能', 'items' => [ ['name' => '收货地址', 'icon' => $img_host . 'user_icons/user_addr.png', 'type' => 'page', 'path' => '/pages/address/userAddress/userAddress','command'=>'user_addr'], ['name' => '当面付订单查询', 'icon' => $img_host . 'user_icons/offline_orders.png', 'type' => 'page', 'path' => '/pages/faceOrderList/faceOrderList','command'=>'offline_orders'], @@ -42,7 +42,7 @@ class UserCenterBlockService implements UserCenterBlockServiceInterface ], [ 'type' => 'store_user', - 'title' => '我的', + 'title' => '商户相关', 'items' => [ ['name' => '商家入口', 'icon' => $img_host . 'user_icons/shop_enter.png', 'type' => 'page', 'path' => '/pages/shopLogin/shopLogin','command'=>'store_login'] ] From 7b1e9eea5f33df1fdd8ceb27b456fe02350599db Mon Sep 17 00:00:00 2001 From: weigang Date: Mon, 7 Sep 2020 20:03:53 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E9=A6=96=E9=A1=B5tab=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=8C=E4=B8=BA=E4=BD=A0=E6=8E=A8=E8=8D=90=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v3/GoodsRecommendController.php | 36 ++++++++++++++----- app/Request/v3/OrderOnlineRequest.php | 6 ++-- .../v3/Implementations/VerifyCodeService.php | 2 +- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/app/Controller/v3/GoodsRecommendController.php b/app/Controller/v3/GoodsRecommendController.php index 79ecd34..4bd993d 100644 --- a/app/Controller/v3/GoodsRecommendController.php +++ b/app/Controller/v3/GoodsRecommendController.php @@ -23,16 +23,35 @@ class GoodsRecommendController extends BaseController */ public function getByTabsForAppletIndex() { - $goods = Goods::query() - ->with(['store']) - ->forPage($this->request->input('page', 1), $this->request->input('pagesize', 15)) - ->get()->toArray(); - return $this->success(['tab_data' => $goods]); + $tab = $this->request->input('tab', ''); + $page = $this->request->input('page', 1); + $pagesize = $this->request->input('pagesize', 10); + + $builder = Goods::query()->with('store'); + + switch ($tab) { + case Tabs::APPLET_INDEX_RECOMMEND: + $builder = $builder->orderBy('sales', 'desc'); + break; + case Tabs::APPLET_INDEX_NEW: + $builder = $builder->orderBy('created_at', 'desc'); + break; + case Tabs::APPLET_INDEX_FRESH: + $builder = $builder->orderBy('price', 'asc'); + break; + case Tabs::APPLET_INDEX_OFFICE: + $builder = $builder->whereIn('category_id', [97,98]); + break; + } + + $paginate = $builder->paginate($pagesize); + $goods = $paginate->toArray(); + return $this->success(['has_more_pages' => $paginate->hasMorePages(), 'tab_data' => $goods]); } /** - * 获取搜索页推荐商品列表 + * 获取推荐商品列表 * 1、前端上传标识 * recommend_search_goods * recommend_search_stores @@ -45,9 +64,10 @@ class GoodsRecommendController extends BaseController { $goods = Goods::query() ->with(['store']) - ->limit(6) + ->inRandomOrder() + ->limit(2) ->get()->toArray(); - return $this->success(['tab_data' => $goods]); + return $this->success(['has_more_pages' => false, 'tab_data' => $goods]); } diff --git a/app/Request/v3/OrderOnlineRequest.php b/app/Request/v3/OrderOnlineRequest.php index 309364a..26859ca 100644 --- a/app/Request/v3/OrderOnlineRequest.php +++ b/app/Request/v3/OrderOnlineRequest.php @@ -28,9 +28,9 @@ class OrderOnlineRequest extends BaseFormRequest 'store_list' => 'required|nonempty|json_keys:store_id,note,cart_ids', 'delivery_time_note' => 'required|nonempty', 'total_money' => 'required|nonempty', - 'coupon_ids' => 'nonempty', - 'service_money' => 'nonempty|numeric', - 'plat' => 'nonempty', + 'coupon_ids' => '', + 'service_money' => 'numeric', + 'plat' => '', ]; } diff --git a/app/Service/v3/Implementations/VerifyCodeService.php b/app/Service/v3/Implementations/VerifyCodeService.php index e59846d..a700ebf 100644 --- a/app/Service/v3/Implementations/VerifyCodeService.php +++ b/app/Service/v3/Implementations/VerifyCodeService.php @@ -46,7 +46,7 @@ class VerifyCodeService implements VerifyCodeServiceInterface $expireRes = $ssdbClient->exec( 'expire', SsdbKeys::VERIFY_CODE.$userId.'_'.$tel, - 900 + 600 ); if (!$expireRes) { throw new ErrorCodeException(ErrorCode::VERIFY_CODE_ERROR); From a7fc30939e105690050377ed6b52aab4d796c6ab Mon Sep 17 00:00:00 2001 From: weigang Date: Mon, 7 Sep 2020 20:07:33 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E9=A6=96=E9=A1=B5tab=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/GoodsRecommendController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Controller/v3/GoodsRecommendController.php b/app/Controller/v3/GoodsRecommendController.php index 4bd993d..c6bfe1f 100644 --- a/app/Controller/v3/GoodsRecommendController.php +++ b/app/Controller/v3/GoodsRecommendController.php @@ -46,7 +46,7 @@ class GoodsRecommendController extends BaseController $paginate = $builder->paginate($pagesize); $goods = $paginate->toArray(); - return $this->success(['has_more_pages' => $paginate->hasMorePages(), 'tab_data' => $goods]); + return $this->success(['has_more_pages' => $paginate->hasMorePages(), 'tab_data' => $goods['data']]); } From ace050769bc655583501e6b648f5bacd1dae731c Mon Sep 17 00:00:00 2001 From: weigang Date: Mon, 7 Sep 2020 20:20:52 +0800 Subject: [PATCH 07/11] fixed --- app/Controller/v3/GoodsRecommendController.php | 2 +- app/Controller/v3/HomeController.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Controller/v3/GoodsRecommendController.php b/app/Controller/v3/GoodsRecommendController.php index c6bfe1f..3b6d896 100644 --- a/app/Controller/v3/GoodsRecommendController.php +++ b/app/Controller/v3/GoodsRecommendController.php @@ -65,7 +65,7 @@ class GoodsRecommendController extends BaseController $goods = Goods::query() ->with(['store']) ->inRandomOrder() - ->limit(2) + ->limit(20) ->get()->toArray(); return $this->success(['has_more_pages' => false, 'tab_data' => $goods]); } diff --git a/app/Controller/v3/HomeController.php b/app/Controller/v3/HomeController.php index 062b63d..5a0bc2f 100644 --- a/app/Controller/v3/HomeController.php +++ b/app/Controller/v3/HomeController.php @@ -149,7 +149,7 @@ class HomeController extends BaseController public function storeIndex() { - $data['detail'] = $this->storeInfoService->detail(1); + $data['detail'] = $this->storeService->detail(1); $data['order_online'] = [ 'count' => 6549, 'total' => 12654.12 From 9ed7cc758a5d8239ab445ab379a452efe60c3fba Mon Sep 17 00:00:00 2001 From: weigang Date: Mon, 7 Sep 2020 20:25:40 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E5=88=86=E5=B8=82=E5=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/GoodsRecommendController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Controller/v3/GoodsRecommendController.php b/app/Controller/v3/GoodsRecommendController.php index 3b6d896..74ffa30 100644 --- a/app/Controller/v3/GoodsRecommendController.php +++ b/app/Controller/v3/GoodsRecommendController.php @@ -24,10 +24,11 @@ class GoodsRecommendController extends BaseController public function getByTabsForAppletIndex() { $tab = $this->request->input('tab', ''); + $marketId = $this->request->input('market_id', 0); $page = $this->request->input('page', 1); $pagesize = $this->request->input('pagesize', 10); - $builder = Goods::query()->with('store'); + $builder = Goods::query()->with('store')->where('market_id', $marketId); switch ($tab) { case Tabs::APPLET_INDEX_RECOMMEND: @@ -62,8 +63,10 @@ class GoodsRecommendController extends BaseController */ public function getByTab() { + $marketId = $this->request->input('market_id', 0); $goods = Goods::query() ->with(['store']) + ->where('market_id', $marketId) ->inRandomOrder() ->limit(20) ->get()->toArray(); From de9af0c7f9f670251e0d4a196d8acd2d029bb7c9 Mon Sep 17 00:00:00 2001 From: lanzu_qsy <334039090@qq.com> Date: Mon, 7 Sep 2020 21:03:07 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E5=A2=9E=E5=8A=A0RPC=20=E6=89=93?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/JsonRpc/FeieService.php | 29 +++++++++++++++++++ app/JsonRpc/PrintServiceInterface.php | 10 +++++++ .../v3/Implementations/FeiePrintService.php | 13 ++++----- config/autoload/dependencies.php | 1 + config/autoload/feie.php | 2 +- 5 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 app/JsonRpc/FeieService.php create mode 100644 app/JsonRpc/PrintServiceInterface.php diff --git a/app/JsonRpc/FeieService.php b/app/JsonRpc/FeieService.php new file mode 100644 index 0000000..9ac61ef --- /dev/null +++ b/app/JsonRpc/FeieService.php @@ -0,0 +1,29 @@ +feieprintService->feiePrint($oid); + + } +} \ No newline at end of file diff --git a/app/JsonRpc/PrintServiceInterface.php b/app/JsonRpc/PrintServiceInterface.php new file mode 100644 index 0000000..1da3ceb --- /dev/null +++ b/app/JsonRpc/PrintServiceInterface.php @@ -0,0 +1,10 @@ +orderBy('s.id') ->get() ->toArray(); + if (empty($data)) { return ; } @@ -59,6 +60,7 @@ class FeiePrintService implements FeiePrintServiceInterface } $content = $this->printFormat($data, 14, 6, 3, 6); + $res = $this->printMsg($data[0]['sn'], $content, 1); return ($res); } @@ -82,7 +84,6 @@ class FeiePrintService implements FeiePrintServiceInterface 'content' => $content, 'times' => $times//打印次数 ); - $client = new FeiePrintClient($this->feieHost, $this->feiePort); if (!$client->post($this->feieApiPath, $msgInfo)) { echo 'error'; @@ -110,14 +111,10 @@ class FeiePrintService implements FeiePrintServiceInterface $shopname = $v5['shopname']; } $name = $v5['name']; - if(!empty($v5['spec'])) { - $name .= "(规格:". $v5['spec'].")"; - }elseif (!empty($v5['good_unit'])){ - $name .= "(规格:". $v5['good_unit'].")"; - } - $price = $v5['money']; + $name .= "(规格:". $v5['goods_unit'].")"; + $price = $v5['m_money']; $num = $v5['number']; - $prices = sprintf("%.2f",$v5['money']*$v5['number']); + $prices = sprintf("%.2f",$v5['m_money']*$v5['number']); $kw3 = ''; $kw1 = ''; $kw2 = ''; diff --git a/config/autoload/dependencies.php b/config/autoload/dependencies.php index d3ec392..337037d 100644 --- a/config/autoload/dependencies.php +++ b/config/autoload/dependencies.php @@ -78,4 +78,5 @@ return [ \App\Service\v3\Interfaces\UserServiceInterface::class => \App\Service\v3\Implementations\UserService::class, \App\Service\v3\Interfaces\CouponRebateServiceInterface::class => \App\Service\v3\Implementations\CouponRebateService::class, \App\Service\v3\Interfaces\SmsServiceInterface::class => \App\Service\v3\Implementations\SmsAliService::class, + \App\JsonRpc\PrintServiceInterface::class => \App\JsonRpc\FeieService::class, ]; diff --git a/config/autoload/feie.php b/config/autoload/feie.php index 44c39b9..4b98666 100644 --- a/config/autoload/feie.php +++ b/config/autoload/feie.php @@ -5,7 +5,7 @@ declare(strict_types=1); return [ 'user' => env('FEIE_USER', ''), 'ukey' => env('FEIE_UKEY', ''), - 'host' => env('FEIE_API_PATH', ''), + 'host' => env('FEIE_HOST', ''), 'port' => env('FEIE_PORT', ''), 'api_path' => env('FEIE_API_PATH', ''), ]; \ No newline at end of file From 5b37d81626c4de126d9aefd3af6ab380f9002318 Mon Sep 17 00:00:00 2001 From: weigang Date: Mon, 7 Sep 2020 21:39:50 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=95=86=E5=93=81?= =?UTF-8?q?=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Constants/v3/ErrorCode.php | 6 ++ app/Model/v3/Goods.php | 13 +-- app/Model/v3/GoodsActivity.php | 12 +++ .../v3/Implementations/AttachmentService.php | 87 +++++++++++++++++++ .../v3/Implementations/WxLoginService.php | 6 ++ .../Interfaces/AttachmentServiceInterface.php | 25 ++++++ composer.json | 3 +- composer.lock | 75 +++++++++++++++- config/autoload/dependencies.php | 1 + config/config.php | 1 + 10 files changed, 222 insertions(+), 7 deletions(-) create mode 100644 app/Service/v3/Implementations/AttachmentService.php create mode 100644 app/Service/v3/Interfaces/AttachmentServiceInterface.php diff --git a/app/Constants/v3/ErrorCode.php b/app/Constants/v3/ErrorCode.php index faa2df5..0c2605f 100644 --- a/app/Constants/v3/ErrorCode.php +++ b/app/Constants/v3/ErrorCode.php @@ -156,6 +156,12 @@ class ErrorCode extends AbstractConstants */ const SMS_SEND_FAILURE = 1003; + /** + * 文件上传失败 + * @Message("文件上传失败") + */ + const UPLOAD_INVALID = 1004; + /************************************/ /* 商品相关 1101-1150 */ /************************************/ diff --git a/app/Model/v3/Goods.php b/app/Model/v3/Goods.php index 84daf35..352fb93 100644 --- a/app/Model/v3/Goods.php +++ b/app/Model/v3/Goods.php @@ -5,6 +5,7 @@ namespace App\Model\v3; use App\Constants\v3\SsdbKeys; use App\Model\Model; +use App\Service\v3\Interfaces\AttachmentServiceInterface; use App\Service\v3\Interfaces\ShopCartServiceInterface; use App\TaskWorker\SSDBTask; use Hyperf\Database\Model\Builder; @@ -26,6 +27,12 @@ class Goods extends Model */ protected $shopCartService; + /** + * @Inject + * @var AttachmentServiceInterface + */ + protected $attachmentService; + /** * The table associated with the model. * @@ -82,11 +89,7 @@ class Goods extends Model public function getCoverImgAttribute($value) { - if(strripos($value,"http") === false){ - return config('alioss.img_host').'/'.$value; - }else{ - return $value; - } + return $this->attachmentService->switchImgToAliOss($value); } public function getMonthSalesAttribute() diff --git a/app/Model/v3/GoodsActivity.php b/app/Model/v3/GoodsActivity.php index df2f6a2..e523d6f 100644 --- a/app/Model/v3/GoodsActivity.php +++ b/app/Model/v3/GoodsActivity.php @@ -5,6 +5,7 @@ namespace App\Model\v3; use App\Constants\v3\Goods as GoodsConstants; use App\Constants\v3\SsdbKeys; use App\Model\Model; +use App\Service\v3\Interfaces\AttachmentServiceInterface; use App\Service\v3\Interfaces\ShopCartServiceInterface; use App\TaskWorker\SSDBTask; use Hyperf\Database\Model\Builder; @@ -23,6 +24,12 @@ class GoodsActivity extends Model */ protected $shopCartService; + /** + * @Inject + * @var AttachmentServiceInterface + */ + protected $attachmentService; + protected $table = 'lanzu_goods_activity'; protected $casts = [ @@ -78,6 +85,11 @@ class GoodsActivity extends Model return $this->attributes['expire_time'] - time(); } + public function getCoverImgAttribute($value) + { + return $this->attachmentService->switchImgToAliOss($value); + } + public function store() { return $this->belongsTo(Store::class, 'store_id', 'id'); diff --git a/app/Service/v3/Implementations/AttachmentService.php b/app/Service/v3/Implementations/AttachmentService.php new file mode 100644 index 0000000..9a82593 --- /dev/null +++ b/app/Service/v3/Implementations/AttachmentService.php @@ -0,0 +1,87 @@ +getRealPath(); + $fileHash = md5_file($fileRealPath); + + $path = $this->getBasePath($path, $attachmenttype); + $fileName = $path . '/' . $fileHash . '.' . $file->getExtension(); + + $stream = fopen($fileRealPath, 'r+'); + $filesystem->writeStream($fileName, $stream); + fclose($stream); + + return $fileName; + } + + /** + * @inheritDoc + */ + public function base64Upload($contents, $path, $filesystem) + { + + preg_match('/^(data:\s*image\/(\w+);base64,)/', $contents, $result); + if (empty($result)) { + throw new FilesystemNotFoundException(ErrorCode::getMessage(ErrorCode::UPLOAD_INVALID),ErrorCode::UPLOAD_INVALID); + } + + $contents = base64_decode(str_replace($result[1], '', $contents)); + + $fileHash = md5($contents); + $path = $this->getBasePath($path); + $fileName = $path . '/' . $fileHash . '.' . $result[2]; + + $filesystem->write($fileName, $contents); + + return $fileName; + } + + protected function getBasePath($path, $attachmenttype = 'image') + { + switch ($attachmenttype) { + case 'image': + $baseDir = env('IMAGE_BASE', '/attachment/images'); + break; + + case 'file': + $baseDir = env('FILES_BASE', '/attachment/files'); + break; + + default: + $baseDir = env('FILES_BASE', '/attachment'); + break; + } + + $path = $path ? '/'.$path : ''; + $path .= '/'.date('Y').'/'.date('m').'/'.date('d'); + return $baseDir.$path; + } + + public function switchImgToAliOss($path, $bucket = 'thumbnail_q50') + { + if (strpos($path, 'http') === false || strpos($path, 'https') === false) { + $path = config('alioss.img_host') . '/' . $path; + } else { + $temp = explode('//', $path); + $temp = explode('/', $temp[1]); + unset($temp[0]); + $path = config('alioss.img_host') . '/' . implode('/', $temp); + } + return $path . '!' . $bucket; + } +} \ No newline at end of file diff --git a/app/Service/v3/Implementations/WxLoginService.php b/app/Service/v3/Implementations/WxLoginService.php index 5c32f7a..11f8e69 100644 --- a/app/Service/v3/Implementations/WxLoginService.php +++ b/app/Service/v3/Implementations/WxLoginService.php @@ -10,6 +10,7 @@ use App\TaskWorker\SSDBTask; use EasyWeChat\Factory; use Hyperf\Guzzle\CoroutineHandler; use Hyperf\Utils\ApplicationContext; +use Hashids\Hashids; class WxLoginService implements \App\Service\v3\Interfaces\WxLoginServiceInterface { @@ -33,6 +34,11 @@ class WxLoginService implements \App\Service\v3\Interfaces\WxLoginServiceInterfa ['unionid' => $result['unionid']] )->toArray(); + // 登录成功 + $hash = new Hashids(config('hash_ids_secret')); + $hashIds = $hash->encode((int)$user['id']); + $user['user_token'] = $hashIds; + $return = array_merge($user, $result); $kvs = []; foreach ($return as $k => $v) { diff --git a/app/Service/v3/Interfaces/AttachmentServiceInterface.php b/app/Service/v3/Interfaces/AttachmentServiceInterface.php new file mode 100644 index 0000000..c5b4310 --- /dev/null +++ b/app/Service/v3/Interfaces/AttachmentServiceInterface.php @@ -0,0 +1,25 @@ + \App\Service\v3\Implementations\UserService::class, \App\Service\v3\Interfaces\CouponRebateServiceInterface::class => \App\Service\v3\Implementations\CouponRebateService::class, \App\Service\v3\Interfaces\SmsServiceInterface::class => \App\Service\v3\Implementations\SmsAliService::class, + \App\Service\v3\Interfaces\AttachmentServiceInterface::class => \App\Service\v3\Implementations\AttachmentService::class, ]; diff --git a/config/config.php b/config/config.php index ad49d28..26b4014 100644 --- a/config/config.php +++ b/config/config.php @@ -52,4 +52,5 @@ return [ 'alioss' => [ 'img_host' => env('OSS_IMG_HOST', ''), ], + 'hash_ids_secret' => env('HASH_IDS_SECRET'), ]; From 2cc608dcc9b60d33770bbe1c9fd8deb94e760b26 Mon Sep 17 00:00:00 2001 From: weigang Date: Mon, 7 Sep 2020 22:00:19 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/GoodsRecommendController.php | 2 +- app/Controller/v3/SearchController.php | 4 ++-- app/Service/v3/Implementations/SearchService.php | 10 +++++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/Controller/v3/GoodsRecommendController.php b/app/Controller/v3/GoodsRecommendController.php index 74ffa30..95ee76d 100644 --- a/app/Controller/v3/GoodsRecommendController.php +++ b/app/Controller/v3/GoodsRecommendController.php @@ -41,7 +41,7 @@ class GoodsRecommendController extends BaseController $builder = $builder->orderBy('price', 'asc'); break; case Tabs::APPLET_INDEX_OFFICE: - $builder = $builder->whereIn('category_id', [97,98]); + $builder = $builder->whereIn('category_id', [142,146]); break; } diff --git a/app/Controller/v3/SearchController.php b/app/Controller/v3/SearchController.php index 45d9552..626ce70 100644 --- a/app/Controller/v3/SearchController.php +++ b/app/Controller/v3/SearchController.php @@ -51,7 +51,7 @@ class SearchController extends BaseController $params = $request->validated(); $data = $this->searchService->doForGoods($params); - return $this->success(['goods' => $data]); + return $this->success($data); } /** @@ -67,7 +67,7 @@ class SearchController extends BaseController $params = $request->validated(); $data = $this->searchService->doForStores($params); - return $this->success(['stores' => $data]); + return $this->success($data); } /** diff --git a/app/Service/v3/Implementations/SearchService.php b/app/Service/v3/Implementations/SearchService.php index 32849fe..4ce8b47 100644 --- a/app/Service/v3/Implementations/SearchService.php +++ b/app/Service/v3/Implementations/SearchService.php @@ -6,6 +6,7 @@ namespace App\Service\v3\Implementations; use App\Model\v3\Goods; use App\Model\v3\Store; +use Hyperf\Paginator\Paginator; class SearchService implements \App\Service\v3\Interfaces\SearchServiceInterface { @@ -44,7 +45,9 @@ class SearchService implements \App\Service\v3\Interfaces\SearchServiceInterface } $builder->select(['id', 'store_id', 'cover_img', 'name', 'spec', 'tags', 'original_price', 'price', 'inventory', 'sales as total_sales']); - return $goods = $builder->forPage($params['page'], $params['pagesize'])->get()->toArray(); + $paginate = $builder->paginate($params['pagesize']); + $goods = $paginate->toArray(); + return ['has_more_pages' => $paginate->hasMorePages(), 'goods' => $goods]; } public function doForStores($params) @@ -81,8 +84,9 @@ class SearchService implements \App\Service\v3\Interfaces\SearchServiceInterface } $builder->select(['id', 'logo', 'name']); - $stores = $builder->forPage($params['page'], $params['pagesize'])->get()->toArray(); - return $stores; + $paginate = $builder->paginate($params['pagesize']); + $stores = $paginate->toArray(); + return ['has_more_pages' => $paginate->hasMorePages(), 'stores' => $stores]; } public function getHotKeywords($type)