Tigshop 开发文档
新增业务
新增模型
文件地址:app/model/user/UserRank.php
在本次新增的会员等级业务中,我们对已有的 UserRank
模型进行了功能扩展。主要涉及以下内容:
- 等级类型名称映射:定义了
RANK_TYPE_NAME
常量数组,用于映射等级类型到其对应的名称,并通过getRankTypeNameAttr
方法动态获取等级类型名称。 - 国际化支持:新增了
getRankNameAttr
方法,支持根据请求头中的语言代码动态返回国际化的等级名称。
namespace app\model\user;
use think\Model;
use utils\Util;
class UserRank extends Model
{
// ... 省略其他代码
const RANK_TYPE_NAME = [
self::RANK_TYPE_SPECIAL => '根据成长值',
self::RANK_TYPE_NORMAL => '根据消费行为',
];
public function getRankTypeNameAttr($value, $data)
{
return isset($data['rank_type']) && $data['rank_type'] > 0 ? self::RANK_TYPE_NAME[$data['rank_type']] : "";
}
public function getRankNameAttr($value)
{
if (php_sapi_name() != 'cli' && !empty(request()->header('X-Locale-Code'))) {
$cache = Util::lang($value);
if ($cache) {
return $cache;
}
}
return $value;
}
}
新增服务类
文件地址:app/service/admin/user/UserRankService.php
新增了对会员等级业务逻辑的支持,主要体现在 UserRankService
类中。以下是新增的主要功能点:
- 默认数据配置:新增了
defaultRankData
方法,用于提供默认的会员等级数据。 - 更新会员等级:新增了
updateUserRank
方法,支持对会员等级的更新操作。 - 修改会员等级:新增了
modifyUserRank
和changeUserRank
方法,用于根据成长值或消费额动态调整会员等级。 - 成长值规则计算:新增了
getGrowthByRule
和getExpireRangeGrowth
方法,用于根据保级规则计算用户的成长值。 - 扣减成长值:新增了
reduceGrowth
方法,支持在退款时扣减用户成长值。
namespace app\service\admin\user;
use app\model\user\UserRank;
use app\service\common\BaseService;
class UserRankService extends BaseService
{
// ... 省略其他代码
public function defaultRankData()
{
return [
'rank_type' => 1,
'rank_config' => [
'type' => 1,
'rank_type' => 1,
'rank_after_month' => 12,
'use_month' => 12,
'code' => 'rank_config',
'data' => [
'type'=> 1,
'rank_after_month' => 12,
'use_month' => 12,
]
],
'grow_up_setting' => [
'buy_order' => 1,
'buy_order_number' => 1,
'buy_order_growth' => 1,
'evpi' => 1,
'evpi_growth' => 1,
'bind_phone' => 1,
'bind_phone_growth' => 1
],
'user_rank_list' => [
[
'rank_level' => 1,
'rank_name' => '黄金会员',
'rank_logo' => 'https://oss.tigshop.com/img/gallery/202501/1737524324ro1DJxNm3aQowZKnPU.png',
'rank_card_type' => 1,
'rank_ico' => 'card1',
'rank_bg' => '',
'min_growth_points' => 0,
'discount' => 0,
'rank_point' => 0,
'free_shipping' => 0,
'rights' => []
]
],
'user_rank_list_not_pro' => [
[
'rank_level' => 1,
'rank_name' => '黄金会员',
'rank_logo' => 'https://oss.tigshop.com/img/gallery/202501/1735803176Yh9mCaE2r9ebXK3bGm.png',
]
]
];
}
public function updateUserRank(array $data):bool
{
// 更新逻辑省略
}
public function modifyUserRank(int $user_id):bool
{
// 修改逻辑省略
}
public function changeUserRank($growth_points,int $user_id, int $rank_type = 1):bool
{
// 修改逻辑省略
}
public function getGrowthByRule(int $user_id):bool
{
// 计算逻辑省略
}
public function reduceGrowth(int $refund_id):bool
{
// 扣减逻辑省略
}
}
新增API接口控制器
文件地址:app/adminapi/controller/user/UserRank.php
新增了对会员等级相关接口的支持,主要体现在 UserRank
控制器中。以下是新增的主要接口:
- 非pro会员列表:新增了
list
方法,用于获取非pro版本会员的等级列表。 - pro会员列表:新增了
listByPro
方法,用于获取pro版本会员的等级列表。 - 详情查询:新增了
detail
方法,用于查询某个会员等级的详细信息。 - 编辑更新:新增了
update
方法,用于编辑和更新会员等级信息。
namespace app\adminapi\controller\user;
use app\adminapi\AdminBaseController;
use app\service\admin\user\UserRankService;
class UserRank extends AdminBaseController
{
protected UserRankService $userRankService;
public function __construct(App $app, UserRankService $userRankService)
{
parent::__construct($app);
$this->userRankService = $userRankService;
}
public function list()
{
// 获取非pro会员列表
}
public function listByPro()
{
// 获取pro会员列表
}
public function detail(): Response
{
// 查询详情
}
public function update(): \think\Response
{
// 编辑更新
}
}
新增路由
文件地址:app/adminapi/route/user.php
新增了对会员等级业务的路由支持,主要体现在 user.php
文件中。以下是新增的路由配置:
- 会员等级列表:
- 非pro会员列表:
GET /user/userRank/list
- pro会员列表:
GET /user/userRank/listByPro
- 非pro会员列表:
- 会员等级详情:
GET /user/userRank/detail
- 会员等级编辑:
POST /user/userRank/update
Route::group('userRank', function () {
// 列表
Route::get('list', 'list');
// pro会员列表
Route::get('listByPro', 'listByPro');
// 详情
Route::get('detail', 'detail');
// 编辑
Route::post('update', 'update')->append([
"authorityCheckSubPermissionName" => 'userRankModifyManage'
]);
})->append([
//用于权限校验的名称
'authorityCheckAppendName' => 'userRankManage'
])->prefix("user.userRank/");
大纲
新增模型
新增服务类
新增API接口控制器
新增路由