new-admin-api/app/common/repositories/user/IntegralRepository.php

139 lines
4.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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');
}
}