Files
MBTI_wang/api/app/common/service/TestProductPricing.php
Ghost c4ac0f8a08 feat: 高考志愿与定价分销链路更新(管理端/API/小程序)
- 新增高考志愿核心服务、模型、控制器与迁移脚本

- 同步管理端定价/分销/设置与小程序入口、历史、测试选择和支付逻辑

- 补充相关开发文档

Made-with: Cursor
2026-04-25 16:19:08 +08:00

55 lines
2.1 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
namespace app\common\service;
use app\model\PricingConfig as PricingConfigModel;
use think\facade\Db;
/**
* 与 Payment::calculateAmount 中「测试类产品」分支一致,供非 Controller 复用(如高考定价)
*/
class TestProductPricing
{
/** @var string[] */
public const TEST_PRODUCT_TYPES = ['face', 'mbti', 'sbti', 'disc', 'pdp', 'resume', 'report', 'team_analysis', 'gaokao'];
/**
* @param int|null $enterpriseId 用于查价的企业 IDpersonal 时走 admin_personal+eidenterprise 时走 admin_enterprise+eid
* @param string $pricingTier personal=用户侧个人版定价含企业后台「个人版」专属价enterprise=企业版定价
* @return array{0:int,1:string} [amountFen, pricingType personal|enterprise]
*/
public static function amountFenForTestProduct(
string $productType,
int $wechatUserId,
?int $enterpriseId = null,
int $quantity = 1,
string $pricingTier = 'personal'
): array {
$pricingType = $pricingTier === 'enterprise' ? 'enterprise' : 'personal';
$quantity = $quantity > 0 ? $quantity : 1;
$pricingEnterpriseId = null;
if ($enterpriseId !== null && (int) $enterpriseId > 0) {
$pricingEnterpriseId = (int) $enterpriseId;
} elseif ($wechatUserId > 0) {
$userEid = (int) Db::name('wechat_users')->where('id', $wechatUserId)->value('enterpriseId');
if ($userEid > 0) {
$pricingEnterpriseId = $userEid;
}
}
$pricingConfig = PricingConfigModel::getByTypeAndEnterprise($pricingType, $pricingEnterpriseId);
$config = [];
if ($pricingConfig && !empty($pricingConfig->config)) {
$raw = $pricingConfig->config;
$config = is_array($raw) ? $raw : (array) $raw;
}
$keyMap = ['team_analysis' => 'teamAnalysis'];
$key = $keyMap[$productType] ?? $productType;
$unitPriceYuan = isset($config[$key]) ? (float) $config[$key] : 0.0;
$amountFen = (int) round($unitPriceYuan * 100 * $quantity);
return [$amountFen, $pricingType];
}
}