gcx/docs/guides/02-Flutter管理后台App开发指南.md

16 KiB
Raw Permalink Blame History

Genex Flutter 管理后台 App 开发指南

发行方管理控制台Issuer Console App


1. 产品定位

发行方管理后台App为企业/政府/机构提供Web2体验的券发行与管理工具。发行方无需了解区块链技术,发券 = 创建优惠活动,链上铸造在后台自动完成。

核心设计原则

  • 发行方看到的是"创建优惠活动",不是"链上铸造NFT"
  • 消费数据隔离:发行方仅可见汇总数据(兑付率、销量),不可见消费者个人信息
  • AI Agent深度融合协助发券建议、定价优化、信用提升

2. 技术栈

技术 用途
Flutter 3.x 跨平台iOS/Android与Consumer App共享核心模块
Riverpod 2.x 状态管理
GoRouter 路由管理
Dio HTTP客户端
Freezed 不可变数据模型
fl_chart 数据可视化图表
qr_code_scanner 扫码核销

3. 项目结构

genex_issuer/
├── lib/
│   ├── main.dart
│   ├── app/
│   │   ├── router.dart              # 发行方专用路由
│   │   └── theme/                   # 企业端主题(区别于消费者端)
│   ├── core/                        # 共享核心模块可从mono-repo引用
│   ├── features/
│   │   ├── auth/                    # 企业注册/登录
│   │   ├── onboarding/              # 入驻审核流程
│   │   ├── coupon_management/       # 券管理(核心模块)
│   │   │   ├── create/              # 创建券(模板化发券)
│   │   │   ├── list/                # 券列表管理
│   │   │   ├── detail/              # 券详情/数据
│   │   │   └── recall/              # 券召回/下架
│   │   ├── redemption/              # 核销管理
│   │   ├── finance/                 # 财务管理
│   │   ├── credit/                  # 信用评级
│   │   ├── dashboard/               # 数据仪表盘
│   │   ├── ai_agent/                # AI Agent
│   │   └── settings/                # 设置
│   └── shared/                      # 共享组件
├── test/
└── pubspec.yaml

4. 核心功能模块

4.1 企业入驻审核

// 入驻流程状态机
enum OnboardingStep {
  companyInfo,      // 企业基本信息
  documents,        // 营业执照/资质文件上传
  contactPerson,    // 联系人信息
  review,           // 等待平台审核
  approved,         // 审核通过
  rejected,         // 审核拒绝(可重新提交)
}

// 零保证金入驻:审核通过后给予初始低额度
@freezed
class IssuerProfile with _$IssuerProfile {
  const factory IssuerProfile({
    required String id,
    required String companyName,
    required String businessLicense,
    required CreditRating creditRating,    // 信用等级
    required double issuanceQuota,         // 发行额度
    required IssuerTier tier,              // 白银/黄金/铂金/钻石
    required OnboardingStep onboardingStep,
  }) = _IssuerProfile;
}

enum CreditRating { AAA, AA, A, BBB, BB }
enum IssuerTier { silver, gold, platinum, diamond }

4.2 模板化发券

发行方通过Web2界面创建券无需了解NFT/ERC标准。

// 券模板类型
enum CouponTemplate {
  discount,     // 折扣券
  voucher,      // 代金券
  giftCard,     // 礼品卡
  storedValue,  // 储值券
}

@freezed
class CreateCouponParams with _$CreateCouponParams {
  const factory CreateCouponParams({
    required CouponTemplate template,
    required String name,
    required double faceValue,
    required DateTime expiryDate,        // ≤12个月Utility Track强制
    required int quantity,               // 发行数量
    double? issuePrice,                  // 发行价(通常折价)
    bool? transferable,                  // 是否允许转让(默认可转让)
    int? maxResaleCount,                 // 最大转售次数默认2-3次
    bool? stackable,                     // 是否可叠加使用
    double? minPurchaseAmount,           // 最低消费金额
    List<String>? allowedStoreIds,       // 限定门店
    String? description,
    String? imageUrl,
  }) = _CreateCouponParams;
}
// 发券流程
// 选择模板 → 填写信息 → 设定规则 → 预览 → 提交审核 → 审核通过 → 自动链上铸造+上架
class CreateCouponUseCase {
  Future<Either<Failure, CouponDraft>> call(CreateCouponParams params) async {
    // 前端校验
    if (params.expiryDate.difference(DateTime.now()).inDays > 365) {
      return Left(Failure.validation(
        errors: {'expiryDate': 'Utility Track有效期不得超过12个月'},
      ));
    }
    return _repo.submitCouponDraft(params);
    // 后端:审核通过 → 自动调用CouponFactory合约铸造发行方无感知
  }
}

4.3 数据仪表盘

// 发行方数据概览
@freezed
class IssuerDashboard with _$IssuerDashboard {
  const factory IssuerDashboard({
    required int totalIssued,           // 总发行量
    required int totalRedeemed,         // 总核销量
    required double redemptionRate,     // 兑付率
    required double breakageRate,       // Breakage率
    required double totalRevenue,       // 总销售收入
    required double availableBalance,   // 可提现余额
    required CreditRating creditRating, // 信用等级
    required double quotaUsed,          // 已用额度
    required double quotaTotal,         // 总额度
  }) = _IssuerDashboard;
}

4.4 财务管理

// 财务视图:法币展示,不暴露链上稳定币细节
@freezed
class FinanceOverview with _$FinanceOverview {
  const factory FinanceOverview({
    required double salesRevenue,       // 销售收入
    required double pendingSettlement,  // 待结算
    required double withdrawable,       // 可提现
    required double totalWithdrawn,     // 已提现
    required List<Transaction> recentTransactions,
  }) = _FinanceOverview;
}

4.5 信用评级展示

// 四因子信用评分核销率35% + (1-Breakage率)25% + 市场存续20% + 用户满意度20%
class CreditScoreWidget extends StatelessWidget {
  final CreditDetail credit;

  @override
  Widget build(BuildContext context) {
    return Column(children: [
      // 总分和等级
      CreditScoreGauge(score: credit.totalScore, rating: credit.rating),
      // 四因子明细
      FactorBar(label: '核销率', value: credit.redemptionRate, weight: 0.35),
      FactorBar(label: '沉淀控制', value: 1 - credit.breakageRate, weight: 0.25),
      FactorBar(label: '市场存续', value: credit.tenureScore, weight: 0.20),
      FactorBar(label: '用户满意度', value: credit.satisfaction, weight: 0.20),
    ]);
  }
}

5. AI Agent 集成

5.1 发行方AI Agent场景

场景 AI能力 UI实现
发券建议 分析市场趋势,建议发券时间/面值/折扣/数量 发券中心顶部AI建议卡片
定价优化 三因子模型+AI定价引擎提供最优定价策略 创建券时AI推荐价格+对比分析
信用提升 分析信用评分各维度,给出改善建议 信用等级页面AI建议列表
销售分析 智能解读销售数据,发现异常和机会 数据中心AI洞察卡片
额度规划 预测额度消耗速度,建议补充计划 额度页面AI规划时间线
合规助手 提醒合规要求,辅助材料准备 入驻审核时AI检查清单

5.2 AI建议卡片组件

class AiSuggestionCard extends StatelessWidget {
  final AiSuggestion suggestion;
  final VoidCallback onAccept;
  final VoidCallback onDismiss;

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Column(children: [
        Row(children: [
          Icon(Icons.smart_toy, color: Colors.blue),
          Text('AI建议', style: Theme.of(context).textTheme.titleSmall),
        ]),
        Text(suggestion.content),
        if (suggestion.actionable)
          Row(children: [
            TextButton(onPressed: onDismiss, child: Text('忽略')),
            ElevatedButton(onPressed: onAccept, child: Text('采纳')),
          ]),
      ]),
    );
  }
}

6. 发行方分层激励展示

层级 月发行量 手续费率 增值服务
白银 < 100万 1.5% 基础数据看板
黄金 100-500万 1.2% 高级数据分析+推荐位
铂金 500-2000万 1.0% 专属客服+定制报表
钻石 > 2000万 0.8% 定制开发+专属API+联合营销

新入驻发行方首月享黄金层级手续费(获客激励)。


7. 与Consumer App共享

共享模块 内容
core/network/ Dio配置、拦截器
core/storage/ 本地存储封装
core/constants/ 术语映射、API地址
shared/widgets/ 通用UI组件
shared/models/ Coupon、User等共享模型

通过Dart Package或Mono-repo方式实现代码共享。


8. 测试与发布

  • 单元测试:发券参数校验、信用评分计算、额度校验
  • Widget测试发券表单、仪表盘图表
  • 集成测试:完整发券流程、核销流程
  • 发布通道与Consumer App独立不同App ID不同签名

9. 财务管理增强

9.1 保证金与冻结销售款

// 发行方可选:缴纳保证金以快速提升额度
@freezed
class GuaranteeFund with _$GuaranteeFund {
  const factory GuaranteeFund({
    required double deposited,         // 已缴纳保证金
    required double frozenSales,       // 冻结的销售款(自愿开启)
    required bool autoFreezeEnabled,   // 是否开启销售款自动冻结
    required double freezePercent,     // 冻结比例如20%销售额)
  }) = _GuaranteeFund;
}

// 财务管理增强视图
@freezed
class FinanceDetailView with _$FinanceDetailView {
  const factory FinanceDetailView({
    required double salesRevenue,       // 销售收入
    required double breakageIncome,     // Breakage收入过期券
    required double platformFees,       // 平台手续费支出
    required double pendingSettlement,  // 待结算
    required double withdrawable,       // 可提现
    required double totalWithdrawn,     // 已提现
    required double guaranteeDeposit,   // 保证金
    required double frozenSales,        // 冻结销售款
  }) = _FinanceDetailView;
}

9.2 对账报表

// 日/月对账单
class ReconciliationReport {
  final DateTime periodStart;
  final DateTime periodEnd;
  final List<TransactionEntry> entries;
  final double totalIncome;
  final double totalExpense;
  final double netBalance;

  // 导出为CSV/PDF
  Future<File> exportAsCsv() async { /* ... */ }
  Future<File> exportAsPdf() async { /* ... */ }
}

10. 发行方数据分析增强

10.1 二级市场分析

@freezed
class SecondaryMarketAnalysis with _$SecondaryMarketAnalysis {
  const factory SecondaryMarketAnalysis({
    required int listedCount,          // 二级市场挂单数
    required double avgResalePrice,    // 平均转售价
    required double avgDiscount,       // 平均折扣率
    required int resaleVolume,         // 转售成交量
    required double resaleRevenue,     // 转售成交额
    required List<PricePoint> priceHistory, // 价格历史K线数据
  }) = _SecondaryMarketAnalysis;
}

10.2 融资效果分析

@freezed
class FinancingEffectReport with _$FinancingEffectReport {
  const factory FinancingEffectReport({
    required double cashAdvanced,       // 现金提前回笼总额
    required double avgAdvanceDays,     // 平均提前回笼天数
    required double financingCost,      // 融资成本(平台手续费+折扣损失)
    required double effectiveRate,      // 等效年利率
    required List<CashFlowPoint> cashFlowTimeline, // 现金流时序图
  }) = _FinancingEffectReport;
}

11. 退款窗口配置

// 发行方可配置退款期限
@freezed
class RefundPolicy with _$RefundPolicy {
  const factory RefundPolicy({
    required int refundWindowDays,      // 退款窗口默认7天
    required bool autoRefundEnabled,    // 是否自动退款
    required String refundConditions,   // 退款条件说明
  }) = _RefundPolicy;
}

// 创建券时配置退款策略
class CreateCouponWithRefundPolicy {
  Widget buildRefundSection() {
    return Column(children: [
      Text('退款策略'),
      NumberPicker(
        label: '退款窗口(天)',
        min: 0, max: 30, initial: 7,
        onChanged: (days) => _refundDays = days,
      ),
      SwitchListTile(
        title: Text('允许自动退款'),
        subtitle: Text('窗口期内用户可直接退款无需审核'),
        value: _autoRefund,
        onChanged: (v) => setState(() => _autoRefund = v),
      ),
    ]);
  }
}

12. 批量操作

// 批量发行、批量核销、批量导出
class BatchOperationsService {
  // 批量发行(一次创建多种券模板)
  Future<Either<Failure, List<CouponDraft>>> batchCreate(
    List<CreateCouponParams> paramsList
  ) async {
    return _repo.batchSubmitDrafts(paramsList);
  }

  // 批量核销
  Future<Either<Failure, BatchRedeemResult>> batchRedeem(
    List<String> couponCodes
  ) async {
    return _repo.batchRedeem(couponCodes);
  }

  // 批量数据导出
  Future<File> exportData({
    required ExportType type,  // coupons / transactions / reconciliation
    required DateRange range,
    required ExportFormat format, // csv / xlsx / pdf
  }) async {
    return _repo.exportBatchData(type, range, format);
  }
}

13. 券召回与下架

// 券召回流程
class CouponRecallService {
  /// 召回未售出的券(链上销毁)
  Future<Either<Failure, RecallResult>> recallUnsold(String couponBatchId) async {
    return _repo.recallUnsoldCoupons(couponBatchId);
  }

  /// 问题券紧急下架
  Future<Either<Failure, void>> emergencyDelist(String couponId, String reason) async {
    return _repo.delistCoupon(couponId, reason);
  }

  /// 已售出券的退款处理
  Future<Either<Failure, void>> initiateRefundForSold(
    String couponBatchId, String refundReason
  ) async {
    return _repo.initiateRefundForSoldCoupons(couponBatchId, refundReason);
  }
}

14. 多门店管理增强

// 门店层级管理
@freezed
class StoreHierarchy with _$StoreHierarchy {
  const factory StoreHierarchy({
    required String id,
    required String name,
    required StoreLevel level,         // headquarters / regional / store
    String? parentId,                  // 上级ID
    required List<StoreHierarchy> children,
    required StorePermissions permissions,
  }) = _StoreHierarchy;
}

enum StoreLevel { headquarters, regional, store }

// 门店员工管理
@freezed
class StoreEmployee with _$StoreEmployee {
  const factory StoreEmployee({
    required String id,
    required String name,
    required String phone,
    required StoreRole role,            // cashier / manager / admin
    required List<String> storeIds,     // 可操作的门店
  }) = _StoreEmployee;
}

enum StoreRole {
  cashier,  // 收银员:仅核销权限
  manager,  // 店长:核销 + 数据查看
  admin,    // 管理员:全部权限
}

15. 专属客服通道

// 铂金/钻石层级发行方专属客服
class DedicatedSupportWidget extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final issuer = ref.watch(issuerProfileProvider);

    if (['platinum', 'diamond'].contains(issuer.tier.name)) {
      return Card(
        child: ListTile(
          leading: Icon(Icons.headset_mic, color: Colors.amber),
          title: Text('专属客服'),
          subtitle: Text('1小时内响应 | 您的客户经理:${issuer.accountManager}'),
          onTap: () => _openDedicatedChat(context),
        ),
      );
    }

    return Card(
      child: ListTile(
        leading: Icon(Icons.support_agent),
        title: Text('在线客服'),
        subtitle: Text('24小时内响应'),
        onTap: () => _openSupportTicket(context),
      ),
    );
  }
}

文档版本: v2.0 基于: Genex 券交易平台 - 软件需求规格说明书 v4.1 技术栈: Flutter 3.x + Riverpod + Clean Architecture 更新: 补充保证金/冻结销售款/对账报表/二级市场分析/融资效果/退款窗口/批量操作/券召回/多门店增强/专属客服