139 lines
4.5 KiB
PHP
139 lines
4.5 KiB
PHP
<?php
|
||
|
||
// +----------------------------------------------------------------------
|
||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
// +----------------------------------------------------------------------
|
||
// | Author: CRMEB Team <admin@crmeb.com>
|
||
// +----------------------------------------------------------------------
|
||
|
||
|
||
namespace app\common\repositories\user;
|
||
|
||
use app\common\dao\user\IntegralDao;
|
||
use app\common\repositories\BaseRepository;
|
||
use app\common\repositories\system\merchant\MerchantRepository;
|
||
use think\facade\Log;
|
||
|
||
/**
|
||
* Common: ...
|
||
* Author: wu-hui
|
||
* Time: 2023/11/07 10:34
|
||
* Class IntegralRepository
|
||
* @package app\common\repositories\user
|
||
*/
|
||
class IntegralRepository extends BaseRepository
|
||
{
|
||
/**
|
||
* @var IntegralDao
|
||
*/
|
||
protected $dao;
|
||
|
||
/**
|
||
* IntegralRepository constructor.
|
||
* @param IntegralDao $dao
|
||
*/
|
||
public function __construct(IntegralDao $dao)
|
||
{
|
||
$this->dao = $dao;
|
||
}
|
||
/**
|
||
* Common: 积分变更
|
||
* Author: wu-hui
|
||
* Time: 2023/11/07 10:45
|
||
* @param int $uid
|
||
* @param int $mer_id
|
||
* @param float $changeNumber
|
||
*/
|
||
public function changeIntegral(int $uid, int $mer_id, float $changeNumber){
|
||
$info = $this->dao->findOrCreate([
|
||
'uid' => $uid,
|
||
'mer_id' => $mer_id
|
||
]);
|
||
$info->number = (float)sprintf("%.2f",$info->number + $changeNumber);
|
||
$info->save();
|
||
}
|
||
/**
|
||
* Common: 获取当前商户积分、平台积分及平台转换后的积分数量
|
||
* Author: wu-hui
|
||
* Time: 2023/11/07 18:01
|
||
* @param int $uid
|
||
* @param int $mer_id
|
||
* @return float[]
|
||
*/
|
||
public function getUseIntegral(int $uid,int $mer_id):array{
|
||
$convert_rate = (float)app()->make(MerchantRepository::class)->getSearch(['mer_id' => $mer_id])->value('mer_integral_merchant_rate');
|
||
return [
|
||
'mer_integral' => (float)$this->getMerIntegral($uid,$mer_id),// 当前商户积分
|
||
'convert_rate' => (float)$convert_rate,// 平台积分转商户积分转换比例
|
||
];
|
||
}
|
||
/**
|
||
* Common: 获取指定商户积分
|
||
* Author: wu-hui
|
||
* Time: 2023/11/07 17:38
|
||
* @param int $uid
|
||
* @param int $mer_id
|
||
* @return float
|
||
*/
|
||
public function getMerIntegral(int $uid,int $mer_id):float{
|
||
$integralInfo = $this->dao->findOrCreate([
|
||
'uid' => $uid,
|
||
'mer_id' => $mer_id
|
||
]);
|
||
|
||
return (float)$integralInfo->number;
|
||
}
|
||
/**
|
||
* Common: 获取平台积分
|
||
* Author: wu-hui
|
||
* Time: 2023/11/07 18:01
|
||
* @param int $uid
|
||
* @param int $mer_id
|
||
* @return array
|
||
*/
|
||
public function getIntegral(int $uid,int $mer_id = 0):array{
|
||
// 获取平台积分
|
||
$integral = $this->getMerIntegral($uid,(int)0);
|
||
// 是否转换为某个商户的商户积分
|
||
$convert_integral = 0;
|
||
$convert_rate = 0;
|
||
if($mer_id > 0 && $integral > 0){
|
||
$convert_rate = (float)app()->make(MerchantRepository::class)->getSearch(['mer_id' => $mer_id])->value('mer_integral_merchant_rate');
|
||
if($convert_rate > 0) $convert_integral = (float)sprintf("%.2f",$integral / $convert_rate);
|
||
}
|
||
|
||
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');
|
||
}
|
||
|
||
|
||
|
||
}
|