From 779f8711719036e4112f490f772eed51f9d8bfe2 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Mon, 5 Feb 2024 15:53:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E9=A2=84=E6=94=AF?= =?UTF-8?q?=E7=A7=AF=E5=88=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/ExchangeIntegralRecordRepository.php | 5 +- .../user/UserMerchantRepository.php | 17 ++++-- app/controller/admin/user/ExchangeQuota.php | 2 +- .../api/store/user/UserMerchant.php | 60 +++++++++++++++++-- .../exchangeQuota/OrderPaySuccessEvent.php | 57 +++++++++++++----- route/admin/marketing.php | 6 +- route/api.php | 1 + 7 files changed, 118 insertions(+), 30 deletions(-) diff --git a/app/common/repositories/user/ExchangeIntegralRecordRepository.php b/app/common/repositories/user/ExchangeIntegralRecordRepository.php index 0b9f5a0..b715c10 100644 --- a/app/common/repositories/user/ExchangeIntegralRecordRepository.php +++ b/app/common/repositories/user/ExchangeIntegralRecordRepository.php @@ -26,9 +26,12 @@ class ExchangeIntegralRecordRepository extends BaseRepository{ */ public function getList(array $params,int $page,int $limit):array{ $query = $this->dao->getSearch([]) - ->when((int)$params['uid'] > 0,function($query) use ($params){ + ->when(isset($params['uid']) && $params['uid'] !== '',function($query) use ($params){ $query->where('uid', (int)$params['uid']); }) + ->when(isset($params['source']) && $params['source'] !== '',function($query) use ($params){ + $query->where('source', (int)$params['source']); + }) ->with([ 'user' => function($query){ $query->field('uid,nickname,avatar')->bind(['nickname','avatar']); diff --git a/app/common/repositories/user/UserMerchantRepository.php b/app/common/repositories/user/UserMerchantRepository.php index 751c573..de00e79 100644 --- a/app/common/repositories/user/UserMerchantRepository.php +++ b/app/common/repositories/user/UserMerchantRepository.php @@ -37,14 +37,19 @@ class UserMerchantRepository extends BaseRepository $count = $query->count(); $make = app()->make(UserLabelRepository::class); $integralMake = app()->make(IntegralRepository::class); - $list = $query->setOption('field', [])->field('A.uid,A.user_merchant_id,B.avatar,B.nickname,B.user_type,A.last_pay_time,A.first_pay_time,A.label_id,A.create_time,A.last_time,A.pay_num,A.pay_price,B.phone,B.is_svip,B.svip_endtime') - ->page($page, $limit)->order('A.user_merchant_id DESC')->select()->each(function ($item) use ($where, $make, $integralMake) { - $item->label = count($item['label_id']) ? $make->labels($item['label_id'], $where['mer_id']) : []; - $item->svip_endtime = date('Y-m-d H:i:s', strtotime("+100 year")); + $list = $query->setOption('field',[]) + ->field('A.uid,A.user_merchant_id,B.avatar,B.nickname,B.user_type,A.last_pay_time,A.first_pay_time,A.label_id,A.create_time,A.last_time,A.pay_num,A.pay_price,B.phone,B.is_svip,B.svip_endtime,B.advance_exchange_integral') + ->page($page,$limit) + ->order('A.user_merchant_id DESC') + ->select() + ->each(function($item) use ($where,$make,$integralMake){ + $item->label = count($item['label_id']) ? $make->labels($item['label_id'],$where['mer_id']) : []; + $item->svip_endtime = date('Y-m-d H:i:s',strtotime("+100 year")); $item->merchant_integral = $integralMake->getMerIntegral((int)$item->uid,(int)$where['mer_id']); // 当前用户是否已经绑定店员身份 - $item->is_store_service = (int)app()->make(StoreServiceRepository::class)->isService((int)$item->uid, 0, 1); - + $item->is_store_service = (int)app() + ->make(StoreServiceRepository::class) + ->isService((int)$item->uid,0,1); return $item; }); diff --git a/app/controller/admin/user/ExchangeQuota.php b/app/controller/admin/user/ExchangeQuota.php index 14d931f..5e9f240 100644 --- a/app/controller/admin/user/ExchangeQuota.php +++ b/app/controller/admin/user/ExchangeQuota.php @@ -112,7 +112,7 @@ class ExchangeQuota extends BaseController */ public function integralRecordList(){ [$page, $limit] = $this->getPage(); - $params = $this->request->params(['uid']); + $params = $this->request->params(['uid','source']); $data = app()->make(ExchangeIntegralRecordRepository::class)->getList((array)$params,(int)$page,(int)$limit); diff --git a/app/controller/api/store/user/UserMerchant.php b/app/controller/api/store/user/UserMerchant.php index 5c95adf..575882a 100644 --- a/app/controller/api/store/user/UserMerchant.php +++ b/app/controller/api/store/user/UserMerchant.php @@ -1,14 +1,14 @@ fail($e->getMessage()); } } + /** + * Common: 预支积分 + * Author: wu-hui + * Time: 2024/02/05 15:01 + * @return mixed + */ + public function advanceExchangeIntegral(){ + $params = $this->request->params(['uid','integral','mer_id']); + // 变更操作 + try { + Db::transaction(function () use ($params) { + $integral = $params['integral'] ?? 0; + // 获取用户当前持有 + $userHoldInfo = User::where('uid',$params['uid'])->findOrEmpty(); + // 赠送 预支酒水卡积分 + $changeFront = (float)$userHoldInfo->exchange_integral; + $advanceChangeFront = (float)$userHoldInfo->advance_exchange_integral; + $userHoldInfo->exchange_integral += (float)$integral;// 总额度 + $userHoldInfo->advance_exchange_integral += (float)$integral;// 总额度 + // 记录 + $insertData[] = [ + 'uid' => $params['uid'], + 'product_id' => 0, + 'order_id' => 0, + 'order_product_id' => 0, + 'change_type' => 1, + 'change_quantity' => (float)$integral, + 'change_front' => $advanceChangeFront, + 'change_after' => (float)$userHoldInfo->advance_exchange_integral, + 'remark' => "预支酒水卡积分", + 'source' => 1 + ]; + $insertData[] = [ + 'uid' => $params['uid'], + 'product_id' => 0, + 'order_id' => 0, + 'order_product_id' => 0, + 'change_type' => 1, + 'change_quantity' => (float)$integral, + 'change_front' => $changeFront, + 'change_after' => (float)$userHoldInfo->exchange_integral, + 'remark' => "预支酒水卡积分,增加积分", + 'source' => 0 + ]; + // 修改用户持有 + $userHoldInfo->save(); + // 记录酒卡额度信息 + if(count($insertData) > 0) ExchangeIntegralRecord::insertAll($insertData); + }); - - + return app('json')->success('操作成功'); + } catch (\Throwable $e) { + return app('json')->fail($e->getMessage()); + } + } } diff --git a/app/listener/exchangeQuota/OrderPaySuccessEvent.php b/app/listener/exchangeQuota/OrderPaySuccessEvent.php index d1c40ee..163857e 100644 --- a/app/listener/exchangeQuota/OrderPaySuccessEvent.php +++ b/app/listener/exchangeQuota/OrderPaySuccessEvent.php @@ -102,21 +102,48 @@ class OrderPaySuccessEvent{ // 循环处理单个商品 $insertData = []; foreach($groupOrder->orderList as $orderInfo){ - // 赠送 支付的金额=赠送的酒水卡积分 - $changeFront = (float)$userHoldInfo->exchange_integral; - $userHoldInfo->exchange_integral += (float)$orderInfo->pay_price;// 总额度 - // 记录 - $insertData[] = [ - 'uid' => $orderInfo->uid, - 'product_id' => $orderInfo->product_id ?? 0, - 'order_id' => $orderInfo->order_id ?? 0, - 'order_product_id' => $orderInfo->order_product_id ?? 0, - 'change_type' => 1, - 'change_quantity' => (float)$orderInfo->pay_price, - 'change_front' => $changeFront, - 'change_after' => (float)$userHoldInfo->exchange_integral, - 'remark' => "消费赠送酒水卡积分", - ]; + // 判断:存在预支积分时 当前订单赠送积分抵消预支积分后是否存在结余 + $surplus = (float)$orderInfo->pay_price; + if((float)$userHoldInfo->advance_exchange_integral > 0){ + // 抵消减少的积分 预支积分 小于等于 赠送积分,减少预支积分,否则减少赠送积分 + $reduceIntegral = (float)$userHoldInfo->advance_exchange_integral <= $surplus ? (float)$userHoldInfo->advance_exchange_integral : $surplus; + // 存在预支积分 减少预支积分,赠送积分为0 + $changeFront = (float)$userHoldInfo->advance_exchange_integral; + $userHoldInfo->advance_exchange_integral -= (float)$reduceIntegral;// 总额度 + $insertData[] = [ + 'uid' => $orderInfo->uid, + 'product_id' => $orderInfo->product_id ?? 0, + 'order_id' => $orderInfo->order_id ?? 0, + 'order_product_id' => $orderInfo->order_product_id ?? 0, + 'change_type' => 0, + 'change_quantity' => (float)$reduceIntegral, + 'change_front' => $changeFront, + 'change_after' => (float)$userHoldInfo->advance_exchange_integral, + 'remark' => "消费抵消预支积分" . (float)$reduceIntegral, + 'source' => 1 + ]; + // 是否存在结余 + $surplus = (float)sprintf("%.2f",$surplus - $reduceIntegral); + } + // 判断:抵消预支积分后 是否存在结余,存在则未抵消完成,进行赠送操作 + if((float)$surplus > 0){ + // 无预支积分 正常赠送 + $changeFront = (float)$userHoldInfo->exchange_integral; + $userHoldInfo->exchange_integral += (float)$surplus;// 总额度 + // 记录 + $insertData[] = [ + 'uid' => $orderInfo->uid, + 'product_id' => $orderInfo->product_id ?? 0, + 'order_id' => $orderInfo->order_id ?? 0, + 'order_product_id' => $orderInfo->order_product_id ?? 0, + 'change_type' => 1, + 'change_quantity' => (float)$surplus, + 'change_front' => $changeFront, + 'change_after' => (float)$userHoldInfo->exchange_integral, + 'remark' => "消费赠送酒水卡积分", + 'source' => 0 + ]; + } } // 修改用户持有 $userHoldInfo->save(); diff --git a/route/admin/marketing.php b/route/admin/marketing.php index 8350eba..b859cfa 100644 --- a/route/admin/marketing.php +++ b/route/admin/marketing.php @@ -438,13 +438,13 @@ Route::group(function () { ]); // 兑换积分相关 Route::get('integral_title','.ExchangeQuota/integralTitle')->name('systemUserExchangeIntegralTitle')->option([ - '_alias' => '额度统计', + '_alias' => '积分统计', ]); Route::get('integral_list', '.ExchangeQuota/integralList')->name('systemUserExchangeIntegralList')->option([ - '_alias' => '额度持有信息', + '_alias' => '积分持有信息', ]); Route::get('integral_record_list', '.ExchangeQuota/integralRecordList')->name('systemUserExchangeIntegralRecordList')->option([ - '_alias' => '额度变更记录', + '_alias' => '积分变更记录', ]); // 提货点管理 Route::get('pickup_point_edit', '.ExchangeQuota/pickupPointEdit')->name('systemUserExchangePickupPointEdit')->option([ diff --git a/route/api.php b/route/api.php index 6c3b79c..f7fa774 100644 --- a/route/api.php +++ b/route/api.php @@ -49,6 +49,7 @@ Route::group('api/', function () { Route::group('custom', function () { Route::get('list/:merId', 'api.store.user.UserMerchant/getList'); Route::post('integral_change/:merId', 'api.store.user.UserMerchant/integralChange'); + Route::post('advance_exchange_integral', 'api.store.user.UserMerchant/advanceExchangeIntegral'); }); //订单 Route::group('order', function () {