feat(dmepa): 全局统一规范DMEPA命名并优化游客与品酒师身份显示

这个提交包含在:
chen
2026-09-19 15:41:39 +08:00
父节点 3868becc63
当前提交 fd8c1d09cc
共有 65 个文件被更改,包括 1068 次插入 和 390 次删除

查看文件

@@ -9,7 +9,7 @@ use think\console\input\Option;
use think\Db;
/**
* 清理订单数据、分销分润记录、日结快照日志,并将马豆汇率回归初始状态
* 清理订单数据、分销分润记录、日结快照日志,并将dmepa汇率回归初始状态
*/
class PartnerClean extends Command
{
@@ -18,7 +18,7 @@ class PartnerClean extends Command
$this->setName('shopro:partner:clean')
->addOption('force', 'f', Option::VALUE_NONE, '强制执行,不提示确认')
->addOption('with-wallet-log', 'w', Option::VALUE_NONE, '同时清理分佣与订单相关的佣金钱包流水日志')
->setDescription('清理所有订单、分销分润、日结日志,重置马豆与汇率回初始值');
->setDescription('清理所有订单、分销分润、日结日志,重置dmepa与汇率回初始值');
}
protected function execute(Input $input, Output $output)
@@ -27,11 +27,11 @@ class PartnerClean extends Command
$withWallet = (bool) $input->getOption('with-wallet-log');
$output->writeln("========================================================");
$output->writeln(" 收益中心交易数据清理与马豆汇率重置程序");
$output->writeln(" 收益中心交易数据清理与dmepa汇率重置程序");
$output->writeln("========================================================");
if (!$force) {
$output->writeln("【警告】此操作将清空所有商城订单、分销记录、分润流水并重置马豆汇率!");
$output->writeln("【警告】此操作将清空所有商城订单、分销记录、分润流水并重置dmepa汇率!");
$output->writeln("如需执行,请增加参数 --force 或 -f,例如:");
$output->writeln("php think shopro:partner:clean --force");
return 1;
@@ -80,9 +80,9 @@ class PartnerClean extends Command
}
}
// 3. 清理日结对账、马豆大盘汇率快照与兑换券释放计划
// 3. 清理日结对账、dmepa大盘汇率快照与兑换券释放计划
$dailyTables = [
'shopro_partner_rate_log', // 马豆大盘汇率历史快照日志(清空后大盘汇率无历史,自动按 0 单重算)
'shopro_partner_rate_log', // dmepa大盘汇率历史快照日志(清空后大盘汇率无历史,自动按 0 单重算)
'shopro_partner_daily_report', // 每日日结对账日报表
'shopro_partner_voucher_plan', // 兑换券释放计划表
'shopro_partner_voucher_log', // 兑换券释放明细流水
@@ -97,7 +97,7 @@ class PartnerClean extends Command
}
}
// 4. 重置分销商资产状态(马豆归零、推三返一序号归零、兑换券归零、收益归零)
// 4. 重置分销商资产状态(dmepa归零、推三返一序号归零、兑换券归零、收益归零)
$output->writeln("\n>>> 4. 正在重置分销商(Agent)资产指标...");
$agentTable = $prefix . 'shopro_commission_agent';
if ($this->tableExists($agentTable)) {
@@ -117,7 +117,7 @@ class PartnerClean extends Command
`child_order_count_2` = 0,
`child_order_count_all` = 0,
`last_self_order_time` = NULL");
$output->writeln(" [OK] 已将所有分销商持仓马豆、推三返一序号、兑换券及累计收益重置归零");
$output->writeln(" [OK] 已将所有分销商持仓dmepa、推三返一序号、兑换券及累计收益重置归零");
}
// 5. 重置用户表钱包分销佣金与累计消费额
@@ -148,14 +148,14 @@ class PartnerClean extends Command
}
// 7. 清理缓存中汇率与收益中心配置
$output->writeln("\n>>> 6. 正在清除马豆汇率缓存与系统配置缓存...");
$output->writeln("\n>>> 6. 正在清除dmepa汇率缓存与系统配置缓存...");
cache('partner_madow_current_rate', null);
cache('partner_rules', null);
if (function_exists('rmdirs')) {
@rmdirs(RUNTIME_PATH . 'cache');
@rmdirs(RUNTIME_PATH . 'temp');
}
$output->writeln(" [OK] 马豆即时汇率缓存已清理");
$output->writeln(" [OK] dmepa即时汇率缓存已清理");
// 8. 校验回归初始汇率
$rateService = new \addons\shopro\service\partner\RateService();

查看文件

@@ -41,7 +41,7 @@ class PartnerInstall extends Command
'is_county' => "tinyint(1) NOT NULL DEFAULT 0 COMMENT '区县代理'",
'county_code' => "varchar(20) NOT NULL DEFAULT '' COMMENT '区县编码'",
'direct_order_seq' => "int(11) NOT NULL DEFAULT 0 COMMENT '直推合格单累计'",
'madow' => "decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT '马豆'",
'madow' => "decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT 'dmepa'",
'voucher_total' => "decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '兑换券总额'",
'voucher_released' => "decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '兑换券已释放'",
'voucher_used' => "decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '兑换券已使用'",

查看文件

@@ -16,7 +16,7 @@ class PartnerSettle extends Command
->addOption('date', 'd', Option::VALUE_OPTIONAL, '结算日期 Y-m-d,指定日期时执行传统日结')
->addOption('rerun', 'r', Option::VALUE_NONE, '删除当天日结后重算')
->addOption('daily', null, Option::VALUE_NONE, '强制执行昨天标准日结')
->setDescription('收益中心结算(默认1分钟马豆增量结算与兑换券释放,亦支持指定日期日结)');
->setDescription('收益中心结算(默认1分钟dmepa增量结算与兑换券释放,亦支持指定日期日结)');
}
protected function execute(Input $input, Output $output)
@@ -39,7 +39,7 @@ class PartnerSettle extends Command
}
}
// 默认执行 1 分钟马豆增量结算与兑换券释放
// 默认执行 1 分钟dmepa增量结算与兑换券释放
$output->writeln('[' . date('Y-m-d H:i:s') . '] partner minute settle start');
try {
$result = (new DailySettleService())->runMinute();

查看文件

@@ -83,7 +83,7 @@ class User extends Common
$user->hidden(['password', 'salt', 'createtime', 'updatetime', 'deletetime', 'remember_token', 'login_fail', 'login_ip', 'login_time']);
$agent = \addons\shopro\service\partner\IdentityService::findAgent($user->id);
$partner = \addons\shopro\service\partner\IdentityService::attachProfile($agent);
$partner = \addons\shopro\service\partner\IdentityService::attachProfile($agent, null, $user);
if (empty($partner['total_income']) || $partner['total_income'] === '0.00') {
$userRewardCash = \app\admin\model\shopro\partner\Reward::where('user_id', $user->id)
->where('status', 1)

查看文件

@@ -9,7 +9,7 @@ use app\admin\model\shopro\partner\Reward as RewardModel;
use app\admin\model\shopro\commission\Agent as AgentModel;
/**
* 日结:马豆 / 馆县均分 / 券释放
* 日结:dmepa / 馆县均分 / 券释放
*/
class DailySettleService
{
@@ -56,7 +56,7 @@ class DailySettleService
}
/**
* 临时分钟级调度:执行未结算订单的马豆分红,并释放一期兑换券
* 临时分钟级调度:执行未结算订单的dmepa分红,并释放一期兑换券
*/
public function runMinute()
{
@@ -79,7 +79,7 @@ class DailySettleService
// 1. 兑换券 1 分钟释放一次
$voucherTotal = (new VoucherService())->releaseMinute();
// 2. 马豆 1 分钟结算一次(提取已支付但尚未结算马豆的合格订单)
// 2. dmepa 1 分钟结算一次(提取已支付但尚未结算dmepa的合格订单)
$allQualifiedOrders = $rateService->qualifiedOrderQuery()->field('o.id,o.pay_fee,o.user_id,o.ext,o.paid_time')->select();
$unsettledOrders = [];
$madowGmv = 0;
@@ -106,7 +106,7 @@ class DailySettleService
$madowRes = (new MadowService())->shareMinute($madowGmv, $tasterIds, $settledOrderIds);
// 标记订单已结算马豆
// 标记订单已结算dmepa
foreach ($unsettledOrders as $o) {
$freshExt = \think\Db::name('shopro_order')->where('id', $o['id'])->value('ext');
$ext = is_array($freshExt) ? $freshExt : (json_decode($freshExt ?? '', true) ?: []);
@@ -208,7 +208,7 @@ class DailySettleService
->where('status', 1)
->sum('amount');
// 当日累计发放马豆总额
// 当日累计发放dmepa总额
$todayMadowPool = (float) \think\Db::name('shopro_partner_reward')
->whereBetween('createtime', [$todayStart, $todayEnd])
->where('reward_type', 'madow_share')
@@ -570,7 +570,7 @@ class DailySettleService
$orderCountN = $rateService->countN();
$rate = $rateService->calcRate($orderCountN);
// 马豆池 (1:1 GMV)
// dmepa池 (1:1 GMV)
$madowPool = (float) $gmv;
$madowEach = $tasterCount > 0 ? (function_exists('bcdiv') ? bcdiv((string) $madowPool, (string) $tasterCount, 8) : number_format($madowPool / $tasterCount, 8, '.', '')) : '0.00000000';

查看文件

@@ -9,11 +9,52 @@ use app\admin\model\shopro\commission\Agent as AgentModel;
*/
class IdentityService
{
public static function build($agent)
public static function hasPurchased($userId, $user = null)
{
$userId = intval($userId);
if ($userId <= 0) {
return false;
}
// 1. 如果传入了 user 对象且 total_consume > 0,快速命中
if ($user) {
$consume = floatval(is_array($user) ? ($user['total_consume'] ?? 0) : ($user->total_consume ?? 0));
if ($consume > 0) {
return true;
}
} else {
// 若未传入 user 对象,轻量获取 user 表的 total_consume 尝试命中
try {
$userConsume = \think\Db::name('user')->where('id', $userId)->value('total_consume');
if (floatval($userConsume) > 0) {
return true;
}
} catch (\Exception $e) {
// 容错继续
}
}
// 2. 查询有效已支付订单(排除全额退款完成的订单)
try {
$hasOrder = \think\Db::name('shopro_order')
->where('user_id', $userId)
->whereIn('status', ['paid', 'completed'])
->where('apply_refund_status', '<>', 2)
->whereNull('deletetime')
->count() > 0;
return $hasOrder;
} catch (\Exception $e) {
return false;
}
}
public static function build($agent, $user = null)
{
$empty = [
'identities' => [],
'identity_text' => '',
'identities' => ['guest'],
'identity_text' => '游客',
'is_guest' => true,
'has_purchased' => false,
'is_partner' => false,
'is_advanced' => false,
'maker_level_name' => '',
@@ -23,24 +64,33 @@ class IdentityService
if (!$agent) {
return $empty;
}
$userId = intval(is_array($agent) ? ($agent['user_id'] ?? 0) : ($agent->user_id ?? 0));
$level = intval(is_array($agent) ? ($agent['level'] ?? 0) : ($agent->level ?? 0));
$isVenue = intval(is_array($agent) ? ($agent['is_venue'] ?? 0) : ($agent->is_venue ?? 0));
$isCounty = intval(is_array($agent) ? ($agent['is_county'] ?? 0) : ($agent->is_county ?? 0));
$isPartner = intval(is_array($agent) ? ($agent['is_partner'] ?? 0) : ($agent->is_partner ?? 0));
$roleNames = PartnerConfig::roleNames();
$tasterName = $roleNames['taster'];
$makerBaseName = $roleNames['maker'];
$venueName = $roleNames['venue'];
$countyName = $roleNames['county'];
$partnerName = $roleNames['partner'];
$tasterName = $roleNames['taster'] ?? '品酒师';
$makerBaseName = $roleNames['maker'] ?? '创客';
$venueName = $roleNames['venue'] ?? '酒道馆';
$countyName = $roleNames['county'] ?? '区县';
$partnerName = $roleNames['partner'] ?? '合伙股东';
$isAdvanced = ($level >= 2) || ($isVenue == 1) || ($isCounty == 1) || ($isPartner == 1);
$hasPurchased = $userId > 0 ? self::hasPurchased($userId, $user ?: (is_array($agent) ? ($agent['user'] ?? null) : ($agent->user ?? null))) : false;
$isGuest = ($level == 1 && !$hasPurchased && !$isAdvanced);
$identities = [];
$parts = [];
$makerLevelName = '';
if ($level == 1) {
$identities[] = 'taster';
if ($hasPurchased) {
$identities[] = 'taster';
} elseif (!$isAdvanced) {
$identities[] = 'guest';
}
} elseif ($level >= 2) {
$identities[] = 'maker';
$makerLevelName = $makerBaseName . 'V' . ($level - 1);
@@ -59,16 +109,16 @@ class IdentityService
$parts[] = $partnerName;
}
// 若无进阶角色身份且等级为1,则身份为基础品酒师/自定义基础名称
// 若无进阶角色身份且等级为1,根据是否买单显示品酒师或游客
if (empty($parts) && $level == 1) {
$parts[] = $tasterName;
$parts[] = $hasPurchased ? $tasterName : '游客';
}
$isAdvanced = ($level >= 2) || ($isVenue == 1) || ($isCounty == 1) || ($isPartner == 1);
return [
'identities' => $identities,
'identity_text' => implode(' · ', $parts),
'identity_text' => implode(' · ', $parts) ?: ($isGuest ? '游客' : ''),
'is_guest' => $isGuest,
'has_purchased' => $hasPurchased,
'is_partner' => (bool) $isPartner,
'is_advanced' => $isAdvanced,
'maker_level_name' => $makerLevelName,
@@ -85,7 +135,7 @@ class IdentityService
public static function formatMadow($value)
{
$floatVal = (float) $value;
// 当存在小于 1 豆且大于 0 的微量马豆时,自适应保留有效小数(最多4位),避免直接抹零显示为 0 豆
// 当存在小于 1 豆且大于 0 的微量dmepa时,自适应保留有效小数(最多4位),避免直接抹零显示为 0 豆
if ($floatVal > 0 && $floatVal < 1) {
return rtrim(rtrim(number_format($floatVal, 4, '.', ''), '0'), '.');
}
@@ -107,12 +157,12 @@ class IdentityService
return $trimmed !== '' ? $trimmed : '0';
}
public static function attachAgent($agent, $rate = null)
public static function attachAgent($agent, $rate = null, $user = null)
{
if (!$agent) {
return null;
}
$identity = self::build($agent);
$identity = self::build($agent, $user);
$madow = is_array($agent) ? ($agent['madow'] ?? 0) : ($agent->madow ?? 0);
$released = is_array($agent) ? ($agent['voucher_released'] ?? 0) : ($agent->voucher_released ?? 0);
$used = is_array($agent) ? ($agent['voucher_used'] ?? 0) : ($agent->voucher_used ?? 0);
@@ -185,14 +235,16 @@ class IdentityService
]);
}
public static function attachProfile($agent, $rate = null)
public static function attachProfile($agent, $rate = null, $user = null)
{
if (!$agent) {
$baseRate = PartnerConfig::get('partner_madow_base_rate', '0.00000075');
$roleNames = PartnerConfig::roleNames();
return [
'identity_text' => '',
'identities' => [],
'identity_text' => '游客',
'identities' => ['guest'],
'is_guest' => true,
'has_purchased' => false,
'is_partner' => false,
'is_advanced' => false,
'maker_level_name' => '',
@@ -215,11 +267,13 @@ class IdentityService
'partner_mode' => PartnerConfig::isPartnerMode(),
];
}
$full = self::attachAgent($agent, $rate);
$full = self::attachAgent($agent, $rate, $user);
$roleNames = $full['role_names'] ?? PartnerConfig::roleNames();
return [
'identity_text' => $full['identity_text'],
'identities' => $full['identities'],
'is_guest' => $full['is_guest'] ?? false,
'has_purchased' => $full['has_purchased'] ?? false,
'is_partner' => $full['is_partner'],
'is_advanced' => $full['is_advanced'] ?? false,
'maker_level_name' => $full['maker_level_name'],

查看文件

@@ -5,7 +5,7 @@ namespace addons\shopro\service\partner;
use app\admin\model\shopro\commission\Agent as AgentModel;
/**
* 马豆日结 1:1 GMV 均分
* dmepa日结 1:1 GMV 均分
*/
class MadowService
{
@@ -27,7 +27,7 @@ class MadowService
'madow' => $pool,
'base_amount' => $pool,
'settle_date' => $settleDate,
'ext' => ['formula' => "分母为0,马豆池 {$pool} 进平台", 'skip_reason' => ''],
'ext' => ['formula' => "分母为0,dmepa池 {$pool} 进平台", 'skip_reason' => ''],
'status' => 1,
]);
return ['pool' => $pool, 'count' => 0, 'each' => 0];
@@ -83,7 +83,7 @@ class MadowService
}
/**
* 临时分钟级马豆结算均分
* 临时分钟级dmepa结算均分
*/
public function shareMinute($gmv, $userIds, $orderIds = [])
{
@@ -107,7 +107,7 @@ class MadowService
'madow' => $pool,
'base_amount' => $pool,
'settle_date' => null,
'ext' => ['formula' => "分母为0,马豆池 {$pool} 进平台", 'orders' => $orderIds],
'ext' => ['formula' => "分母为0,dmepa池 {$pool} 进平台", 'orders' => $orderIds],
'status' => 1,
]);
return ['pool' => $pool, 'count' => 0, 'each' => 0];

查看文件

@@ -49,6 +49,123 @@ class PartnerConfig
return intval($show) ? 1 : 0;
}
public static function isMadowWithdrawEnabled()
{
$enable = self::get('partner_madow_withdraw_enable', 1);
if ($enable === null || $enable === '') {
return 1;
}
return intval($enable) ? 1 : 0;
}
public static function madowWithdrawMin()
{
$min = self::get('partner_madow_withdraw_min', 1);
if ($min === null || $min === '' || !is_numeric($min)) {
return 1.0;
}
return max(0.0, floatval($min));
}
public static function madowRuleTitle()
{
$title = trim((string) self::get('partner_madow_rule_title', '市值与增值规则')) ?: '市值与增值规则';
return str_replace('马币', '', $title);
}
public static function madowRules()
{
$defaultRules = [
[
'title' => 'DMEPA获取与核算',
'desc' => '平台合伙人与创客达成考核或完成订单后,系统将于次日 00:30 起统一参与每日DMEPA加权核算并自动分发。',
],
[
'title' => '市值动态增值',
'desc' => '市值随全平台订单增加而上浮增值。全网完成订单总量越多,DMEPA单价所对应的市值越高,共享生态红利。',
],
[
'title' => '价值说明与权益',
'desc' => '市值仅作为平台数字生态资产价值参考展示,不可直接兑换现金提现。具体权益按平台股东与合伙人章程执行。',
],
];
$rules = self::get('partner_madow_rules', $defaultRules);
$normalized = self::normalizeRules($rules, $defaultRules);
foreach ($normalized as &$rule) {
if (isset($rule['title'])) {
$rule['title'] = str_replace('马币', '', $rule['title']);
}
if (isset($rule['desc'])) {
$rule['desc'] = str_replace('马币', '', $rule['desc']);
}
}
unset($rule);
return $normalized;
}
public static function voucherRuleTitle()
{
return trim((string) self::get('partner_voucher_rule_title', '兑换券释放与使用规则')) ?: '兑换券释放与使用规则';
}
public static function voucherRules()
{
$defaultRules = [
[
'title' => '赠送与释放天数',
'desc' => '会员在平台完成符合条件的商城订单后,系统将按订单金额(默认 1.5 倍)生成兑换券计划,分 365 天按日线性释放。',
],
[
'title' => '每日自动到账',
'desc' => '系统将于次日 00:30 起统一执行日结核算,按期释放的兑换券将自动计入您的「可用兑换券」账户,无需手动领取。',
],
[
'title' => '全场购物直接抵扣',
'desc' => '可用兑换券可在平台商城下单结算时作为现金抵扣使用,尊享优惠抵扣权益。',
],
];
$rules = self::get('partner_voucher_rules', $defaultRules);
return self::normalizeRules($rules, $defaultRules);
}
private static function normalizeRules($rules, array $defaultRules)
{
if (is_string($rules)) {
$decoded = json_decode($rules, true);
if (is_array($decoded)) {
$rules = $decoded;
} else {
$lines = array_filter(array_map('trim', explode("\n", $rules)));
$parsed = [];
foreach ($lines as $line) {
$parts = preg_split('/[::]/u', $line, 2);
if (count($parts) === 2) {
$parsed[] = ['title' => trim($parts[0]), 'desc' => trim($parts[1])];
} else {
$parsed[] = ['title' => '', 'desc' => $line];
}
}
$rules = !empty($parsed) ? $parsed : $defaultRules;
}
}
if (!is_array($rules) || empty($rules)) {
return $defaultRules;
}
$result = [];
foreach ($rules as $item) {
if (is_array($item)) {
$title = isset($item['title']) ? trim((string) $item['title']) : '';
$desc = isset($item['desc']) ? trim((string) $item['desc']) : '';
if ($title !== '' || $desc !== '') {
$result[] = ['title' => $title, 'desc' => $desc];
}
} elseif (is_string($item) && trim($item) !== '') {
$result[] = ['title' => '', 'desc' => trim($item)];
}
}
return !empty($result) ? $result : $defaultRules;
}
public static function activeDays()
{
$days = intval(self::get('partner_active_days', 30));
@@ -120,8 +237,10 @@ class PartnerConfig
'county_peer' => $countyAgentShort . '平级奖',
'venue_share' => $venue . '加权奖',
'county_share' => $countyShort . '加权奖',
'madow_share' => '每日贡献马豆',
'admin_madow' => '管理员调整马豆',
'madow_share' => '每日贡献dmepa',
'madow_withdraw' => 'dmepa提现扣除',
'madow_withdraw_refund' => 'dmepa提现退还',
'admin_madow' => '管理员调整dmepa',
'voucher_grant' => '消费补贴发放',
'voucher_release' => '消费补贴到账',
'voucher_consume' => '消费券抵扣',

查看文件

@@ -7,7 +7,7 @@ use app\admin\model\shopro\order\Order as OrderModel;
use app\admin\model\shopro\commission\CommissionGoods;
/**
* 马豆汇率:rate = base * floor(N / n)
* dmepa汇率:rate = base * floor(N / n)
*/
class RateService
{
@@ -31,7 +31,7 @@ class RateService
}
/**
* 主动清除当前马豆汇率缓存(订单支付、退款或后台调整时调用)
* 主动清除当前dmepa汇率缓存(订单支付、退款或后台调整时调用)
*/
public static function clearCache()
{

查看文件

@@ -61,13 +61,13 @@ BEGIN
ADD COLUMN `direct_order_seq` int(11) NOT NULL DEFAULT 0 COMMENT '直推合格单累计(推三返一)' AFTER `county_code`;
END IF;
-- 6. madow (马豆资产持有量)
-- 6. madow (dmepa资产持有量)
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = target_table AND COLUMN_NAME = 'madow'
) THEN
ALTER TABLE `__PREFIX__shopro_commission_agent`
ADD COLUMN `madow` decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT '马豆' AFTER `direct_order_seq`;
ADD COLUMN `madow` decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT 'dmepa' AFTER `direct_order_seq`;
END IF;
-- 7. voucher_total (兑换券总额度)
@@ -152,7 +152,7 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__shopro_partner_reward` (
`role` varchar(20) NOT NULL DEFAULT '' COMMENT '业务角色: taster/maker/venue/county/partner/system',
`reward_type` varchar(32) NOT NULL COMMENT '收益类型标识 (push3, maker_diff, team_venue, madow_share, voucher_release 等)',
`amount` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '现金变动金额 (元)',
`madow` decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT '马豆变动数量',
`madow` decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT 'dmepa变动数量',
`base_amount` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '计奖基数 (元)',
`rate` decimal(16,10) NOT NULL DEFAULT 0.0000000000 COMMENT '结算时刻对应汇率或比例',
`ext` text COMMENT '扩展信息与计算公式 JSON',
@@ -191,22 +191,22 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__shopro_partner_voucher_plan` (
-- ------------------------------------------------------------------------------
-- 4. 马豆大盘汇率历史快照表 (shopro_partner_rate_log)
-- 4. dmepa大盘汇率历史快照表 (shopro_partner_rate_log)
-- ------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `__PREFIX__shopro_partner_rate_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`settle_date` date NOT NULL COMMENT '结算对账日期',
`order_count_n` int(11) NOT NULL DEFAULT 0 COMMENT '历史合格单累计N',
`rate` decimal(16,10) NOT NULL DEFAULT 0.0000000000 COMMENT '当日核算汇率 (元/马豆)',
`rate` decimal(16,10) NOT NULL DEFAULT 0.0000000000 COMMENT '当日核算汇率 (元/dmepa)',
`gmv` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '当日全平台计奖订单GMV',
`madow_pool` decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT '当日产出总马豆池',
`share_user_count` int(11) NOT NULL DEFAULT 0 COMMENT '参与马豆分润人数',
`madow_pool` decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT '当日产出总dmepa池',
`share_user_count` int(11) NOT NULL DEFAULT 0 COMMENT '参与dmepa分润人数',
`venue_pool` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '酒道馆分红池总额',
`county_pool` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '区县代理分红池总额',
`createtime` bigint(16) DEFAULT NULL COMMENT '生成时间戳',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_date` (`settle_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='马豆汇率与大盘指标日志';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='dmepa汇率与大盘指标日志';
-- ------------------------------------------------------------------------------
@@ -219,8 +219,8 @@ CREATE TABLE IF NOT EXISTS `__PREFIX__shopro_partner_daily_report` (
`order_count_n` int(11) NOT NULL DEFAULT 0 COMMENT '截至当日历史累计合格订单数N',
`gmv` decimal(14,2) NOT NULL DEFAULT 0.00 COMMENT '当日合格GMV现金流水',
`rate` decimal(16,10) NOT NULL DEFAULT 0.0000000000 COMMENT '执行汇率',
`madow_pool` decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT '马豆奖池',
`share_user_count` int(11) NOT NULL DEFAULT 0 COMMENT '马豆分润受益人数',
`madow_pool` decimal(20,8) NOT NULL DEFAULT 0.00000000 COMMENT 'dmepa奖池',
`share_user_count` int(11) NOT NULL DEFAULT 0 COMMENT 'dmepa分润受益人数',
`venue_pool` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '酒道馆均分现金池',
`venue_user_count` int(11) NOT NULL DEFAULT 0 COMMENT '符合条件的酒道馆数',
`county_pool` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT '区县均分现金池',
@@ -245,12 +245,18 @@ INSERT INTO `__PREFIX__shopro_config` (`code`, `parent_code`, `name`, `descripti
('shop.commission.partner_active_days', 'shop.commission', '自购活跃考核窗口', '进阶角色需在指定天数内有自购合格订单才可享受分润', 'int', '30', NULL, NULL, 83),
('shop.commission.partner_chain_max_depth', 'shop.commission', '关系链最大追溯层级', '向上寻找创客/酒道馆/区县时的最大关系链深度', 'int', '50', NULL, NULL, 84),
('shop.commission.partner_push3_amounts', 'shop.commission', '推三返一循环金额配置', '品酒师推荐直推合格单获得的阶梯奖励金额循环数组', 'array', '[398,400,600]', NULL, NULL, 85),
('shop.commission.partner_madow_mode', 'shop.commission', '每日GMV分润模式', 'madow=以马豆形式发放 cash=直接以佣金现金发放', 'string', 'madow', NULL, NULL, 86),
('shop.commission.partner_show_madow_rate', 'shop.commission', '显示马币市值胶囊', '控制移动端我的马豆页面是否显示马币市值胶囊 1=显示 0=隐藏', 'int', '1', NULL, NULL, 86),
('shop.commission.partner_madow_base_rate', 'shop.commission', '马豆基准汇率', '大盘初始起步汇率 (元/马豆)', 'string', '0.00000075', NULL, NULL, 87),
('shop.commission.partner_madow_step_orders', 'shop.commission', '马豆汇率步进单数', '每达成指定合格订单数,马豆大盘汇率递增1个基数', 'int', '1', NULL, NULL, 88),
('shop.commission.partner_madow_mode', 'shop.commission', '每日GMV分润模式', 'madow=以dmepa形式发放 cash=直接以佣金现金发放', 'string', 'madow', NULL, NULL, 86),
('shop.commission.partner_show_madow_rate', 'shop.commission', '显示市值胶囊', '控制移动端我的dmepa页面是否显示市值指示胶囊 1=显示 0=隐藏', 'int', '1', NULL, NULL, 86),
('shop.commission.partner_madow_base_rate', 'shop.commission', 'dmepa基准汇率', '大盘初始起步汇率 (元/dmepa)', 'string', '0.00000075', NULL, NULL, 87),
('shop.commission.partner_madow_step_orders', 'shop.commission', 'dmepa汇率步进单数', '每达成指定合格订单数,dmepa大盘汇率递增1个基数', 'int', '1', NULL, NULL, 88),
('shop.commission.partner_madow_rule_title', 'shop.commission', 'dmepa市值规则弹窗标题', '我的dmepa市值规则弹窗标题', 'string', '市值与增值规则', NULL, NULL, 88),
('shop.commission.partner_madow_rules', 'shop.commission', 'dmepa市值规则说明条目', '我的dmepa市值规则条目', 'array', '[{\"title\":\"dmepa获取与核算\",\"desc\":\"平台合伙人与创客达成考核或完成订单后,系统将于次日 00:30 起统一参与每日dmepa加权核算并自动分发。\"},{\"title\":\"市值动态增值\",\"desc\":\"市值随全平台订单增加而上浮增值。全网完成订单总量越多,dmepa单价所对应的市值越高,共享生态红利。\"},{\"title\":\"价值说明与权益\",\"desc\":\"市值仅作为平台数字生态资产价值参考展示,不可直接兑换现金提现。具体权益按平台股东与合伙人章程执行。\"}]', NULL, NULL, 88),
('shop.commission.partner_madow_withdraw_enable', 'shop.commission', '开启dmepa提现', '控制移动端我的dmepa页面是否开启提现 1=开启 0=关闭', 'int', '1', NULL, NULL, 88),
('shop.commission.partner_madow_withdraw_min', 'shop.commission', 'dmepa最低提现金额', 'dmepa每次提现最低金额(元)', 'float', '1', NULL, NULL, 88),
('shop.commission.partner_voucher_times', 'shop.commission', '买酒赠送兑换券倍数', '符合条件的订单实付金额倍数,默认1.5倍', 'float', '1.5', NULL, NULL, 89),
('shop.commission.partner_voucher_days', 'shop.commission', '兑换券线性释放天数', '兑换券按日分期释放的总周期,默认365天', 'int', '365', NULL, NULL, 90),
('shop.commission.partner_voucher_rule_title', 'shop.commission', '兑换券规则弹窗标题', '移动端兑换券释放与使用规则弹窗标题', 'string', '兑换券释放与使用规则', NULL, NULL, 90),
('shop.commission.partner_voucher_rules', 'shop.commission', '兑换券规则说明条目', '移动端兑换券释放与使用规则条目', 'array', '[{\"title\":\"赠送与释放天数\",\"desc\":\"会员在平台完成符合条件的商城订单后,系统将按订单金额(默认 1.5 倍)生成兑换券计划,分 365 天按日线性释放。\"},{\"title\":\"每日自动到账\",\"desc\":\"系统将于次日 00:30 起统一执行日结核算,按期释放的兑换券将自动计入您的「可用兑换券」账户,无需手动领取。\"},{\"title\":\"全场购物直接抵扣\",\"desc\":\"可用兑换券可在平台商城下单结算时作为现金抵扣使用,尊享优惠抵扣权益。\"}]', NULL, NULL, 90),
('shop.commission.partner_maker_bonus', 'shop.commission', '创客各级级差基数', '各创客等级(level 2~7)对应的级差佣金基准金额(元)', 'array', '{\"2\":20,\"3\":40,\"4\":60,\"5\":80,\"6\":100,\"7\":120}', NULL, NULL, 91),
('shop.commission.partner_maker_peer_rate', 'shop.commission', '创客平级协同比例', '创客直属平级上级获得的协同奖励比例', 'float', '0.10', NULL, NULL, 92),
('shop.commission.partner_maker_overtaken_rate', 'shop.commission', '创客超越奖励比例', '下级等级超越上级时,上级获得的超越关怀比例', 'float', '0.05', NULL, NULL, 93),