添加:积分管理相关接口(商户积分列表、积分转换接口)

This commit is contained in:
wuhui_zzw 2023-11-10 16:12:36 +08:00
parent 717b148550
commit 9925ef1918
5 changed files with 118 additions and 4 deletions

View File

@ -15,6 +15,7 @@ namespace app\common\model\user;
use app\common\model\BaseModel;
use app\common\model\system\merchant\Merchant;
class Integral extends BaseModel
{
@ -44,4 +45,8 @@ class Integral extends BaseModel
return $this->hasOne(User::class, 'uid', 'uid');
}
public function mer(){
return $this->hasOne(Merchant::class,'mer_id','mer_id');
}
}

View File

@ -108,10 +108,30 @@ class IntegralRepository extends BaseRepository
return compact('integral','convert_integral','convert_rate');
}
/**
* Common: 获取商户积分列表
* Author: wu-hui
* Time: 2023/11/10 14:20
* @param int $uid
* @param int $page
* @param int $limit
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getMerIntegralList(int $uid,int $page,int $limit):array{
$query = $this->dao->getSearch(['uid'=>$uid])
->where('mer_id','>',0)
->with(['mer'=>function($query){
$query->field('mer_id,mer_name,mer_avatar,mer_integral_platform_rate')->bind(['mer_name','mer_avatar','mer_integral_platform_rate']);
}])
->order('create_time DESC');
$count = $query->count();
$list = $query->page($page,$limit)->select();
return compact('count','list');
}

View File

@ -54,10 +54,12 @@ class UserBillRepository extends BaseRepository
'integral/sys_inc' => '系统增加积分',
'integral/timeout' => '积分过期',
'integral/mer_give' => '商户赠送',
'integral/convert' => '积分转换',
'mer_integral/deduction' => '积分抵扣',
'mer_integral/refund' => '订单退款',
'mer_integral/lock' => '下单赠送积分',
'mer_integral/mer_give' => '商户赠送',
'mer_integral/convert' => '积分转换',
'mer_lock_money/order' => '商户佣金冻结',
'now_money/brokerage' => '佣金转入余额',
'now_money/pay_product' => '购买商品',

View File

@ -17,6 +17,7 @@ namespace app\controller\api\user;
use app\common\repositories\store\IntegralRepository;
use app\common\repositories\store\service\StoreServiceRepository;
use app\common\repositories\system\CacheRepository;
use app\common\repositories\user\IntegralGiveRecordRepository;
use app\common\repositories\user\MemberinterestsRepository;
use app\common\repositories\user\UserBillRepository;
use app\common\repositories\user\UserBrokerageRepository;
@ -26,10 +27,12 @@ use app\validate\api\UserBaseInfoValidate;
use crmeb\basic\BaseController;
use crmeb\services\MiniProgramService;
use crmeb\services\SmsService;
use Exception;
use think\App;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Db;
class User extends BaseController
{
@ -426,8 +429,10 @@ class User extends BaseController
}
$nextClearDay = date('m月d日', $nextClearDay);
$clear = compact('nextClearDay', 'status', 'nextClearIntegral');
// 获取用户平台积分
$platform_integral = app()->make(\app\common\repositories\user\IntegralRepository::class)->getMerIntegral((int)$this->user->uid,(int)0);
return app('json')->success(compact('integral', 'lockIntegral', 'deductionIntegral', 'totalGainIntegral', 'clear'));
return app('json')->success(compact('integral', 'lockIntegral', 'deductionIntegral', 'totalGainIntegral', 'clear','platform_integral'));
}
public function integralList(UserBillRepository $repository)
@ -440,6 +445,85 @@ class User extends BaseController
return app('json')->success($data);
}
/**
* Common: 获取用户商户积分列表
* Author: wu-hui
* Time: 2023/11/10 14:21
* @return mixed
*/
public function merIntegralList(){
[$page, $limit] = $this->getPage();
$data = app()->make(\app\common\repositories\user\IntegralRepository::class)->getMerIntegralList((int)$this->user->uid,(int)$page,(int)$limit);
return app('json')->success($data);
}
/**
* Common: 积分转换
* Author: wu-hui
* Time: 2023/11/10 15:37
* @param $merId
* @return mixed
*/
public function merIntegralConvert($merId){
$params = $this->request->params(['convert_integral']);
$convertIntegral = (float)abs($params['convert_integral']);
if($convertIntegral <= 0) return app('json')->fail('转换数量不能小于0');
// 转换操作
try {
Db::transaction(function () use ($merId, $convertIntegral) {
$mer_integral_platform_rate = (float)merchantConfig($merId,'mer_integral_platform_rate');
if($mer_integral_platform_rate <= 0) throw new Exception('转换失败,商户未设置转换比例!');
$uid = $this->request->uid();
$user = app()->make(UserRepository::class)->get($uid);
$integralMake = app()->make(\app\common\repositories\user\IntegralRepository::class);
$bills = [];
// 计算转换后的积分 应得平台积分
$convertAfterIntegral = (float)sprintf("%.2f",$convertIntegral * $mer_integral_platform_rate);
// 减少商户积分
$integralMake->changeIntegral((int)$uid,(int)$merId,(float)sprintf('%.2f',0 - $convertIntegral));
$user->integral = bcsub($user->integral,$convertIntegral,2);
$bills[] = [
'uid' => $uid,
'link_id' => $merId,
'pm' => 0,
'title' => '积分转换',
'category' => 'mer_integral',
'type' => 'convert',
'number' => $convertIntegral,
'balance' => $user->integral,
'mark' => "将({$convertIntegral})本商户积分转换为平台积分,获得{$convertAfterIntegral}平台积分",
'mer_id' => $merId,
'status' => 1
];
// 增加平台积分
$integralMake->changeIntegral((int)$uid,(int)0,(float)sprintf('%.2f', $convertAfterIntegral));
$user->integral = bcadd($user->integral,$convertAfterIntegral,2);
$bills[] = [
'uid' => $uid,
'link_id' => $merId,
'pm' => 0,
'title' => '积分转换',
'category' => 'integral',
'type' => 'convert',
'number' => $convertAfterIntegral,
'balance' => $user->integral,
'mark' => "将({$convertIntegral})商户积分转换为平台积分,获得{$convertAfterIntegral}平台积分",
'mer_id' => 0,
'status' => 1
];
// 修改总积分
$user->save();
// 添加记录
app()->make(UserBillRepository::class)->insertAll($bills);
});
return app('json')->success('操作成功');
} catch (\Throwable $e) {
return app('json')->fail($e->getMessage());
}
}
public function services()
{
$uid = $this->user->uid;

View File

@ -202,6 +202,9 @@ Route::group('api/', function () {
//积分
Route::get('integral/info', 'User/integralInfo');
Route::get('integral/lst', 'User/integralList');
Route::post('integral/mer_list', 'User/merIntegralList');
Route::post('integral/integral_convert/:merId', 'User/merIntegralConvert');
//客服列表
Route::get('services', 'User/services');