新增业务

新增模型

文件地址: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 方法,支持对会员等级的更新操作。
  • 修改会员等级:新增了 modifyUserRankchangeUserRank 方法,用于根据成长值或消费额动态调整会员等级。
  • 成长值规则计算:新增了 getGrowthByRulegetExpireRangeGrowth 方法,用于根据保级规则计算用户的成长值。
  • 扣减成长值:新增了 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
  • 会员等级详情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接口控制器
新增路由