From fd8c1d09cce6315bbc10c2e5bcd2a92e49690913 Mon Sep 17 00:00:00 2001 From: chen Date: Sat, 19 Sep 2026 15:41:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(dmepa):=20=E5=85=A8=E5=B1=80=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E8=A7=84=E8=8C=83DMEPA=E5=91=BD=E5=90=8D=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B8=B8=E5=AE=A2=E4=B8=8E=E5=93=81=E9=85=92?= =?UTF-8?q?=E5=B8=88=E8=BA=AB=E4=BB=BD=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/shopro/console/PartnerClean.php | 20 +- addons/shopro/console/PartnerInstall.php | 2 +- addons/shopro/console/PartnerSettle.php | 4 +- addons/shopro/controller/user/User.php | 2 +- .../service/partner/DailySettleService.php | 12 +- .../service/partner/IdentityService.php | 96 +++++++--- .../shopro/service/partner/MadowService.php | 8 +- .../shopro/service/partner/PartnerConfig.php | 123 ++++++++++++- addons/shopro/service/partner/RateService.php | 4 +- addons/shopro/upgrade/partner_v2.sql | 34 ++-- .../admin/controller/shopro/Dashboard.php | 2 +- .../admin/controller/shopro/order/Order.php | 12 +- .../controller/shopro/partner/Reward.php | 4 +- .../admin/controller/shopro/user/User.php | 14 +- .../admin/model/shopro/commission/Agent.php | 12 ++ .../admin/model/shopro/partner/Reward.php | 2 +- .../view/shopro/commission/agent/detail.html | 4 +- .../view/shopro/commission/agent/index.html | 2 +- .../admin/view/shopro/dashboard/index.html | 46 ++--- .../admin/view/shopro/order/order/detail.html | 10 +- .../view/shopro/partner/daily/index.html | 10 +- .../view/shopro/partner/reward/index.html | 8 +- .../admin/view/shopro/user/user/detail.html | 14 +- .../admin/view/shopro/user/user/index.html | 6 +- .../admin/view/shopro/user/user/recharge.html | 4 +- application/extra/site.php | 2 +- docs/partner-api-contract.md | 2 +- docs/sql/clean_order_and_partner_data.sql | 14 +- docs/会员角色与收益体系规格及代码完善分析.md | 28 +-- docs/收益中心-后台与用户端功能规格.md | 68 +++---- docs/收益中心二次开发文档.md | 60 +++--- .../收益中心全场景关系链收益模拟与测算文档.md | 24 +-- docs/收益中心多场景收益模拟测算表.md | 14 +- .../js/backend/shopro/partner/reward.js | 2 +- public/assets/js/backend/shopro/user/user.js | 2 +- tests/partner/DashboardWealthTest.php | 6 +- tests/partner/MultiAssetRechargeTest.php | 22 +-- tests/partner/User10Verify.php | 14 +- .../verify_admin_views_alignment_spec.js | 2 +- .../verify_cash_rewards_filter_spec.js | 94 ++++++++++ .../verify_guest_to_taster_identity_spec.js | 156 ++++++++++++++++ tests/partner/verify_madow_switch_spec.js | 4 +- .../verify_remove_mabi_wording_spec.js | 174 ++++++++++++++++++ .../verify_wallet_records_alignment_spec.js | 4 +- tests/verify_all_pools_minute_settle_spec.js | 2 +- tests/verify_clean_partner_data_spec.js | 12 +- tests/verify_commission_goods_rules_spec.js | 2 +- ...verify_madow_dashboard_and_integer_spec.js | 34 ++-- ...rify_madow_rate_precision_no_round_spec.js | 2 +- tests/verify_madow_ui_upgrade_spec.js | 18 +- tests/verify_minute_settle_spec.js | 8 +- ...verify_rate_realtime_and_precision_spec.js | 6 +- tests/verify_user_list_and_detail_spec.js | 4 +- tests/verify_user_wallet_card_spec.js | 8 +- tests/verify_voucher_page_spec.js | 2 +- tests/verify_voucher_unit_ge_spec.js | 4 +- uniapp/pages.json | 4 +- .../commission/components/commission-info.vue | 2 + .../commission/components/commission-menu.vue | 2 +- uniapp/pages/commission/madow.vue | 159 ++++++++++------ uniapp/pages/commission/rewards.vue | 8 +- uniapp/pages/commission/team.vue | 3 + uniapp/pages/user/wallet/commission.vue | 2 +- .../components/s-user-card/s-user-card.vue | 21 ++- uniapp/sheep/store/user.js | 8 +- 65 files changed, 1068 insertions(+), 390 deletions(-) create mode 100644 tests/partner/verify_cash_rewards_filter_spec.js create mode 100644 tests/partner/verify_guest_to_taster_identity_spec.js create mode 100644 tests/partner/verify_remove_mabi_wording_spec.js diff --git a/addons/shopro/console/PartnerClean.php b/addons/shopro/console/PartnerClean.php index cdc2182..117e74d 100644 --- a/addons/shopro/console/PartnerClean.php +++ b/addons/shopro/console/PartnerClean.php @@ -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(); diff --git a/addons/shopro/console/PartnerInstall.php b/addons/shopro/console/PartnerInstall.php index ef573b6..368b65b 100644 --- a/addons/shopro/console/PartnerInstall.php +++ b/addons/shopro/console/PartnerInstall.php @@ -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 '兑换券已使用'", diff --git a/addons/shopro/console/PartnerSettle.php b/addons/shopro/console/PartnerSettle.php index 1395d2a..400104f 100644 --- a/addons/shopro/console/PartnerSettle.php +++ b/addons/shopro/console/PartnerSettle.php @@ -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(); diff --git a/addons/shopro/controller/user/User.php b/addons/shopro/controller/user/User.php index 8da608f..e288204 100644 --- a/addons/shopro/controller/user/User.php +++ b/addons/shopro/controller/user/User.php @@ -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) diff --git a/addons/shopro/service/partner/DailySettleService.php b/addons/shopro/service/partner/DailySettleService.php index 5be3937..2245593 100644 --- a/addons/shopro/service/partner/DailySettleService.php +++ b/addons/shopro/service/partner/DailySettleService.php @@ -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'; diff --git a/addons/shopro/service/partner/IdentityService.php b/addons/shopro/service/partner/IdentityService.php index 6752fa8..49a6ae2 100644 --- a/addons/shopro/service/partner/IdentityService.php +++ b/addons/shopro/service/partner/IdentityService.php @@ -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'], diff --git a/addons/shopro/service/partner/MadowService.php b/addons/shopro/service/partner/MadowService.php index b4842c2..a5f885b 100644 --- a/addons/shopro/service/partner/MadowService.php +++ b/addons/shopro/service/partner/MadowService.php @@ -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]; diff --git a/addons/shopro/service/partner/PartnerConfig.php b/addons/shopro/service/partner/PartnerConfig.php index a10c901..2daf5ff 100644 --- a/addons/shopro/service/partner/PartnerConfig.php +++ b/addons/shopro/service/partner/PartnerConfig.php @@ -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' => '消费券抵扣', diff --git a/addons/shopro/service/partner/RateService.php b/addons/shopro/service/partner/RateService.php index 17ef56a..5c63fa1 100644 --- a/addons/shopro/service/partner/RateService.php +++ b/addons/shopro/service/partner/RateService.php @@ -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() { diff --git a/addons/shopro/upgrade/partner_v2.sql b/addons/shopro/upgrade/partner_v2.sql index e3dbc57..47d592d 100644 --- a/addons/shopro/upgrade/partner_v2.sql +++ b/addons/shopro/upgrade/partner_v2.sql @@ -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), diff --git a/application/admin/controller/shopro/Dashboard.php b/application/admin/controller/shopro/Dashboard.php index 93162cf..6b2384b 100644 --- a/application/admin/controller/shopro/Dashboard.php +++ b/application/admin/controller/shopro/Dashboard.php @@ -333,7 +333,7 @@ class Dashboard extends Common 'filter_type' => 'normal', ]; - // 全平台全员合计行 (总马豆与总分佣与顶部大盘完全一致) + // 全平台全员合计行 (总dmepa与总分佣与顶部大盘完全一致) $allTotalRow = [ 'role_key' => 'all_total', 'role_name' => '全平台全员合计', diff --git a/application/admin/controller/shopro/order/Order.php b/application/admin/controller/shopro/order/Order.php index d756a51..b42afe1 100644 --- a/application/admin/controller/shopro/order/Order.php +++ b/application/admin/controller/shopro/order/Order.php @@ -244,7 +244,7 @@ class Order extends Common if ($type === 'voucher_grant') { $amountText = number_format($baseAmount, 2, '.', '') . ' 个'; } elseif ($madow > 0) { - $amountText = \addons\shopro\service\partner\IdentityService::formatMadow($madow) . ' 马豆'; + $amountText = \addons\shopro\service\partner\IdentityService::formatMadow($madow) . ' dmepa'; } elseif ($amount > 0) { $amountText = '¥' . number_format($amount, 2, '.', ''); } else { @@ -379,7 +379,7 @@ class Order extends Common } $platform = $platRows[0]; $amountText = $type === 'madow_share' - ? \addons\shopro\service\partner\IdentityService::formatMadow($platMadow) . ' 马豆' + ? \addons\shopro\service\partner\IdentityService::formatMadow($platMadow) . ' dmepa' : '¥' . number_format($platAmount, 2, '.', ''); $items[] = [ @@ -402,7 +402,7 @@ class Order extends Common 'settle_date' => $settleDate, 'status' => 1, 'status_text' => '已入账', - 'unit' => $type === 'madow_share' ? '马豆' : '元', + 'unit' => $type === 'madow_share' ? 'dmepa' : '元', 'formula' => (string) ($platform->formula ?? ''), 'skip_reason_text' => '', 'tip' => '当日无人参与,奖池进平台', @@ -429,13 +429,13 @@ class Order extends Common 'each_madow' => $eachMadow, 'total_amount' => number_format($totalAmount, 2, '.', ''), 'total_madow' => \addons\shopro\service\partner\IdentityService::formatMadow($totalMadow), - 'amount_text' => $type === 'madow_share' ? ($eachMadow . ' 马豆/人') : ('¥' . $eachAmount . '/人'), + 'amount_text' => $type === 'madow_share' ? ($eachMadow . ' dmepa/人') : ('¥' . $eachAmount . '/人'), 'wallet_type' => $type === 'madow_share' ? 'madow' : \addons\shopro\service\partner\PartnerConfig::rewardWalletType(), - 'wallet_type_text' => $type === 'madow_share' ? '分红马豆' : (\addons\shopro\service\partner\PartnerConfig::rewardWalletType() === 'money' ? '商城余额' : '佣金钱包'), + 'wallet_type_text' => $type === 'madow_share' ? '分红dmepa' : (\addons\shopro\service\partner\PartnerConfig::rewardWalletType() === 'money' ? '商城余额' : '佣金钱包'), 'settle_date' => $settleDate, 'status' => 1, 'status_text' => '已入账', - 'unit' => $type === 'madow_share' ? '马豆' : '元', + 'unit' => $type === 'madow_share' ? 'dmepa' : '元', 'formula' => (string) ($first->formula ?? ''), 'skip_reason_text' => '', 'tip' => '日结均分(不列出参与用户名单)', diff --git a/application/admin/controller/shopro/partner/Reward.php b/application/admin/controller/shopro/partner/Reward.php index ff94e24..3a5bebe 100644 --- a/application/admin/controller/shopro/partner/Reward.php +++ b/application/admin/controller/shopro/partner/Reward.php @@ -51,7 +51,7 @@ class Reward extends Common 'role_text' => '受益身份', 'amount' => '结算金额', 'wallet_type_text' => '入账账户', - 'madow' => '马豆', + 'madow' => 'dmepa', 'base_amount' => '基数', 'status_text' => '状态', 'formula' => '测算摘要', @@ -108,7 +108,7 @@ class Reward extends Common 'madow' => $formattedTotalMadow, 'base_amount' => '-', 'status_text' => '已汇总', - 'formula' => "总现金: {$totalAmount}, 总马豆: {$formattedTotalMadow}", + 'formula' => "总现金: {$totalAmount}, 总dmepa: {$formattedTotalMadow}", ]; } return $newDatas; diff --git a/application/admin/controller/shopro/user/User.php b/application/admin/controller/shopro/user/User.php index 6fba0c7..30578d7 100644 --- a/application/admin/controller/shopro/user/User.php +++ b/application/admin/controller/shopro/user/User.php @@ -40,7 +40,7 @@ class User extends Common $list = $paginator->items(); foreach ($list as &$user) { $agent = $user->agent; - $partner = \addons\shopro\service\partner\IdentityService::attachProfile($agent, $rate); + $partner = \addons\shopro\service\partner\IdentityService::attachProfile($agent, $rate, $user); foreach ($partner as $k => $v) { $user->$k = $v; } @@ -110,7 +110,7 @@ class User extends Common $this->error(__('No Results were found')); } $agent = \addons\shopro\service\partner\IdentityService::findAgent($id); - $partner = \addons\shopro\service\partner\IdentityService::attachProfile($agent); + $partner = \addons\shopro\service\partner\IdentityService::attachProfile($agent, null, $user); $data = array_merge($user->toArray(), $partner); $data['has_agent'] = (bool) $agent; @@ -363,7 +363,7 @@ class User extends Common return WalletService::change($userId, 'score', $amount, 'admin_recharge', [], $memo ?: '后台管理调整积分'); } - // 对于马豆 (madow) 与兑换券 (voucher),属于合伙人二开资产体系 + // 对于dmepa (madow) 与兑换券 (voucher),属于合伙人二开资产体系 $agent = \app\admin\model\shopro\commission\Agent::where('user_id', $userId)->lock(true)->find(); if (!$agent) { // 自动为用户初始化分销商记录,以便承载二开资产体系 @@ -392,13 +392,13 @@ class User extends Common $role = !empty($identity['identities']) ? end($identity['identities']) : 'taster'; if ($type === 'madow') { - // 马豆充值或扣除 (8位小数精度) + // dmepa充值或扣除 (8位小数精度) $currentMadow = (string) ($agent->madow ?? '0.00000000'); $amountMadow = function_exists('bcadd') ? bcadd((string) $amount, '0', 8) : number_format((float) $amount, 8, '.', ''); $afterMadow = function_exists('bcadd') ? bcadd($currentMadow, $amountMadow, 8) : ($currentMadow + $amountMadow); if ((float) $afterMadow < 0) { - error_stop('当前持仓马豆不足,无法扣除'); + error_stop('当前持仓dmepa不足,无法扣除'); } $rate = (new \addons\shopro\service\partner\RateService())->currentRate(); @@ -417,8 +417,8 @@ class User extends Common 'rate' => $rate, 'settle_date' => null, // 设为 null,避免与每日均分的 uk_daily_user_type 发生索引冲突 'ext' => [ - 'formula' => ($amount > 0 ? '管理员充值马豆: +' : '管理员扣除马豆: ') . $amountMadow, - 'memo' => $memo ?: ($amount > 0 ? '管理员充值马豆' : '管理员扣除马豆'), + 'formula' => ($amount > 0 ? '管理员充值dmepa: +' : '管理员扣除dmepa: ') . $amountMadow, + 'memo' => $memo ?: ($amount > 0 ? '管理员充值dmepa' : '管理员扣除dmepa'), 'operator' => $operDesc, 'before' => $currentMadow, 'after' => $afterMadow, diff --git a/application/admin/model/shopro/commission/Agent.php b/application/admin/model/shopro/commission/Agent.php index fb496e4..103f3e6 100644 --- a/application/admin/model/shopro/commission/Agent.php +++ b/application/admin/model/shopro/commission/Agent.php @@ -22,6 +22,8 @@ class Agent extends Common 'pending_reward', 'identity_text', 'identities', + 'is_guest', + 'has_purchased', 'is_partner', 'is_advanced', 'maker_level_name', @@ -91,6 +93,16 @@ class Agent extends Common return \addons\shopro\service\partner\IdentityService::build($data)['identities']; } + public function getIsGuestAttr($value, $data) + { + return \addons\shopro\service\partner\IdentityService::build($data)['is_guest'] ?? false; + } + + public function getHasPurchasedAttr($value, $data) + { + return \addons\shopro\service\partner\IdentityService::build($data)['has_purchased'] ?? false; + } + public function getIsPartnerAttr($value, $data) { return \addons\shopro\service\partner\IdentityService::build($data)['is_partner']; diff --git a/application/admin/model/shopro/partner/Reward.php b/application/admin/model/shopro/partner/Reward.php index 4aedc81..45a9f36 100644 --- a/application/admin/model/shopro/partner/Reward.php +++ b/application/admin/model/shopro/partner/Reward.php @@ -122,7 +122,7 @@ class Reward extends Common 'money' => '商城余额', 'commission' => '佣金钱包', 'voucher' => '消费补贴券', - 'madow' => '分红马豆', + 'madow' => '分红dmepa', 'system' => '平台留存', ]; return $map[$type] ?? '商城余额'; diff --git a/application/admin/view/shopro/commission/agent/detail.html b/application/admin/view/shopro/commission/agent/detail.html index 5f367af..4fd3d5c 100644 --- a/application/admin/view/shopro/commission/agent/detail.html +++ b/application/admin/view/shopro/commission/agent/detail.html @@ -353,7 +353,7 @@ {{ state.data.partner_exclusive_cash || '0.00' }} 元 - + {{ state.data.madow || 0 }}(约合 ¥{{ state.data.madow_value || '0.00' }}) @@ -373,7 +373,7 @@ 免自购考核 (基础会员/{{ state.data.custom_role_names?.taster || '品酒师' }}) - 升级{{ state.data.custom_role_names?.maker || '创客' }}或开通{{ (state.data.custom_role_names?.venue || '馆').substr(0, 1) }}/{{ (state.data.custom_role_names?.county || '县').substr(0, 1) }}/{{ (state.data.custom_role_names?.partner || '股东').substr(0, 2) }}后即可享有团队奖、级差奖与马豆分红 + 升级{{ state.data.custom_role_names?.maker || '创客' }}或开通{{ (state.data.custom_role_names?.venue || '馆').substr(0, 1) }}/{{ (state.data.custom_role_names?.county || '县').substr(0, 1) }}/{{ (state.data.custom_role_names?.partner || '股东').substr(0, 2) }}后即可享有团队奖、级差奖与dmepa分红 diff --git a/application/admin/view/shopro/commission/agent/index.html b/application/admin/view/shopro/commission/agent/index.html index 4bafbc7..83c14a7 100644 --- a/application/admin/view/shopro/commission/agent/index.html +++ b/application/admin/view/shopro/commission/agent/index.html @@ -80,7 +80,7 @@ - + - + - +