添加:预支积分功能

This commit is contained in:
wuhui_zzw 2024-02-05 15:53:05 +08:00
parent 2f3acf42d9
commit 779f871171
7 changed files with 118 additions and 30 deletions

View File

@ -26,9 +26,12 @@ class ExchangeIntegralRecordRepository extends BaseRepository{
*/ */
public function getList(array $params,int $page,int $limit):array{ public function getList(array $params,int $page,int $limit):array{
$query = $this->dao->getSearch([]) $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']); $query->where('uid', (int)$params['uid']);
}) })
->when(isset($params['source']) && $params['source'] !== '',function($query) use ($params){
$query->where('source', (int)$params['source']);
})
->with([ ->with([
'user' => function($query){ 'user' => function($query){
$query->field('uid,nickname,avatar')->bind(['nickname','avatar']); $query->field('uid,nickname,avatar')->bind(['nickname','avatar']);

View File

@ -37,14 +37,19 @@ class UserMerchantRepository extends BaseRepository
$count = $query->count(); $count = $query->count();
$make = app()->make(UserLabelRepository::class); $make = app()->make(UserLabelRepository::class);
$integralMake = app()->make(IntegralRepository::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') $list = $query->setOption('field',[])
->page($page, $limit)->order('A.user_merchant_id DESC')->select()->each(function ($item) use ($where, $make, $integralMake) { ->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')
$item->label = count($item['label_id']) ? $make->labels($item['label_id'], $where['mer_id']) : []; ->page($page,$limit)
$item->svip_endtime = date('Y-m-d H:i:s', strtotime("+100 year")); ->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->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; return $item;
}); });

View File

@ -112,7 +112,7 @@ class ExchangeQuota extends BaseController
*/ */
public function integralRecordList(){ public function integralRecordList(){
[$page, $limit] = $this->getPage(); [$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); $data = app()->make(ExchangeIntegralRecordRepository::class)->getList((array)$params,(int)$page,(int)$limit);

View File

@ -1,14 +1,14 @@
<?php <?php
namespace app\controller\api\store\user; namespace app\controller\api\store\user;
use app\common\model\user\ExchangeIntegralRecord;
use app\common\model\user\User;
use app\common\repositories\user\IntegralGiveRecordRepository; use app\common\repositories\user\IntegralGiveRecordRepository;
use app\common\repositories\user\IntegralRepository; use app\common\repositories\user\IntegralRepository;
use app\common\repositories\user\UserBillRepository; use app\common\repositories\user\UserBillRepository;
use app\common\repositories\user\UserMerchantRepository; use app\common\repositories\user\UserMerchantRepository;
use app\common\repositories\user\UserRepository; use app\common\repositories\user\UserRepository;
use crmeb\basic\BaseController; use crmeb\basic\BaseController;
use EasyWeChat\Support\Log;
use Exception;
use think\App; use think\App;
use think\facade\Db; use think\facade\Db;
@ -104,10 +104,62 @@ class UserMerchant extends BaseController{
return app('json')->fail($e->getMessage()); return app('json')->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());
}
}
} }

View File

@ -102,21 +102,48 @@ class OrderPaySuccessEvent{
// 循环处理单个商品 // 循环处理单个商品
$insertData = []; $insertData = [];
foreach($groupOrder->orderList as $orderInfo){ foreach($groupOrder->orderList as $orderInfo){
// 赠送 支付的金额=赠送的酒水卡积分 // 判断:存在预支积分时 当前订单赠送积分抵消预支积分后是否存在结余
$changeFront = (float)$userHoldInfo->exchange_integral; $surplus = (float)$orderInfo->pay_price;
$userHoldInfo->exchange_integral += (float)$orderInfo->pay_price;// 总额度 if((float)$userHoldInfo->advance_exchange_integral > 0){
// 记录 // 抵消减少的积分 预支积分 小于等于 赠送积分,减少预支积分,否则减少赠送积分
$insertData[] = [ $reduceIntegral = (float)$userHoldInfo->advance_exchange_integral <= $surplus ? (float)$userHoldInfo->advance_exchange_integral : $surplus;
'uid' => $orderInfo->uid, // 存在预支积分 减少预支积分赠送积分为0
'product_id' => $orderInfo->product_id ?? 0, $changeFront = (float)$userHoldInfo->advance_exchange_integral;
'order_id' => $orderInfo->order_id ?? 0, $userHoldInfo->advance_exchange_integral -= (float)$reduceIntegral;// 总额度
'order_product_id' => $orderInfo->order_product_id ?? 0, $insertData[] = [
'change_type' => 1, 'uid' => $orderInfo->uid,
'change_quantity' => (float)$orderInfo->pay_price, 'product_id' => $orderInfo->product_id ?? 0,
'change_front' => $changeFront, 'order_id' => $orderInfo->order_id ?? 0,
'change_after' => (float)$userHoldInfo->exchange_integral, 'order_product_id' => $orderInfo->order_product_id ?? 0,
'remark' => "消费赠送酒水卡积分", '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(); $userHoldInfo->save();

View File

@ -438,13 +438,13 @@ Route::group(function () {
]); ]);
// 兑换积分相关 // 兑换积分相关
Route::get('integral_title','.ExchangeQuota/integralTitle')->name('systemUserExchangeIntegralTitle')->option([ Route::get('integral_title','.ExchangeQuota/integralTitle')->name('systemUserExchangeIntegralTitle')->option([
'_alias' => '额度统计', '_alias' => '积分统计',
]); ]);
Route::get('integral_list', '.ExchangeQuota/integralList')->name('systemUserExchangeIntegralList')->option([ Route::get('integral_list', '.ExchangeQuota/integralList')->name('systemUserExchangeIntegralList')->option([
'_alias' => '额度持有信息', '_alias' => '积分持有信息',
]); ]);
Route::get('integral_record_list', '.ExchangeQuota/integralRecordList')->name('systemUserExchangeIntegralRecordList')->option([ Route::get('integral_record_list', '.ExchangeQuota/integralRecordList')->name('systemUserExchangeIntegralRecordList')->option([
'_alias' => '额度变更记录', '_alias' => '积分变更记录',
]); ]);
// 提货点管理 // 提货点管理
Route::get('pickup_point_edit', '.ExchangeQuota/pickupPointEdit')->name('systemUserExchangePickupPointEdit')->option([ Route::get('pickup_point_edit', '.ExchangeQuota/pickupPointEdit')->name('systemUserExchangePickupPointEdit')->option([

View File

@ -49,6 +49,7 @@ Route::group('api/', function () {
Route::group('custom', function () { Route::group('custom', function () {
Route::get('list/:merId', 'api.store.user.UserMerchant/getList'); Route::get('list/:merId', 'api.store.user.UserMerchant/getList');
Route::post('integral_change/:merId', 'api.store.user.UserMerchant/integralChange'); Route::post('integral_change/:merId', 'api.store.user.UserMerchant/integralChange');
Route::post('advance_exchange_integral', 'api.store.user.UserMerchant/advanceExchangeIntegral');
}); });
//订单 //订单
Route::group('order', function () { Route::group('order', function () {