Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5505b84b78 | |||
| afd71454fb |
856
.kiro/specs/digital-credit-service/design.md
Normal file
@ -0,0 +1,856 @@
|
||||
# 数字债权服务系统设计文档
|
||||
|
||||
## 概述
|
||||
|
||||
数字债权服务系统是基于RuoYi框架构建的企业级债权管理平台,采用微服务架构和区块链技术,为安保服务行业提供完整的债权确权、融资申请和结算清收解决方案。系统遵循RuoYi的分层架构模式,在现有框架基础上扩展债权管理相关功能模块。
|
||||
|
||||
## 架构设计
|
||||
|
||||
### 整体架构
|
||||
|
||||
系统采用分层架构模式,基于RuoYi框架的模块化设计,集成区块链、安全、监控等多个技术栈:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 前端展示层 (Vue3) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
|
||||
│ │债权管理界面 │ │融资管理界面 │ │ 报表分析界面 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Web控制层 (Controller) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
|
||||
│ │合同API │ │融资API │ │ 报表API │ │
|
||||
│ │债权API │ │支付API │ │ 监控API │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ 业务服务层 (Service) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
|
||||
│ │合同管理 │ │融资管理 │ │ 报表分析 │ │
|
||||
│ │债权管理 │ │支付结算 │ │ 工作流引擎 │ │
|
||||
│ │安全管理 │ │通知服务 │ │ 集成适配 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ 数据访问层 (Mapper) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
|
||||
│ │合同数据访问 │ │融资数据访问 │ │ 日志数据访问 │ │
|
||||
│ │债权数据访问 │ │支付数据访问 │ │ 缓存数据访问 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ 数据持久层 │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
|
||||
│ │MySQL数据库 │ │Redis缓存 │ │ 文件存储 │ │
|
||||
│ │(业务数据) │ │(会话/缓存) │ │ (报表/日志) │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌─────────────────────┼─────────────────────┐
|
||||
│ │ │
|
||||
┌───────▼────────┐ ┌─────────▼────────┐ ┌────────▼────────┐
|
||||
│ 区块链集成层 │ │ 外部系统集成 │ │ 监控告警系统 │
|
||||
│ ┌─────────────┐ │ │ ┌──────────────┐ │ │ ┌─────────────┐ │
|
||||
│ │智能合约执行 │ │ │ │金融机构API │ │ │ │系统监控 │ │
|
||||
│ │数据上链存储 │ │ │ │支付网关集成 │ │ │ │性能监控 │ │
|
||||
│ │链上数据验证 │ │ │ │第三方服务 │ │ │ │告警通知 │ │
|
||||
│ └─────────────┘ │ │ └──────────────┘ │ │ └─────────────┘ │
|
||||
└────────────────┘ └──────────────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
#### 架构特点
|
||||
|
||||
1. **分层解耦**: 严格的分层架构,每层职责明确
|
||||
2. **模块化设计**: 按业务领域划分模块,便于维护和扩展
|
||||
3. **多技术栈集成**: 集成区块链、缓存、监控等多种技术
|
||||
4. **横向扩展**: 支持微服务化改造和水平扩展
|
||||
5. **安全优先**: 在每一层都集成安全控制和数据保护
|
||||
|
||||
### 模块架构
|
||||
|
||||
系统将作为新的业务模块集成到RuoYi框架中:
|
||||
|
||||
```
|
||||
RuoYi数字债权服务系统模块架构
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ RuoYi Framework │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ ruoyi-admin │ ruoyi-system │ ruoyi-framework │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ 新增债权服务模块 │
|
||||
├─────────────────┬─────────────────┬─────────────────────────┤
|
||||
│ ruoyi-credit │ ruoyi-blockchain│ ruoyi-payment │
|
||||
│ ┌─────────────┐│ ┌─────────────┐│ ┌─────────────────────┐│
|
||||
│ │合同管理 ││ │区块链集成 ││ │支付结算 ││
|
||||
│ │债权管理 ││ │智能合约 ││ │资金监管 ││
|
||||
│ │融资管理 ││ │数据上链 ││ │资金分配 ││
|
||||
│ └─────────────┘│ └─────────────┘│ └─────────────────────┘│
|
||||
├─────────────────┼─────────────────┼─────────────────────────┤
|
||||
│ ruoyi-security │ruoyi-notification│ ruoyi-analytics │
|
||||
│ ┌─────────────┐│ ┌─────────────┐│ ┌─────────────────────┐│
|
||||
│ │身份认证 ││ │消息推送 ││ │报表生成 ││
|
||||
│ │权限管理 ││ │定时提醒 ││ │数据分析 ││
|
||||
│ │数据加密 ││ │告警通知 ││ │仪表板 ││
|
||||
│ │审计日志 ││ │消息模板 ││ │数据导出 ││
|
||||
│ └─────────────┘│ └─────────────┘│ └─────────────────────┘│
|
||||
├─────────────────┼─────────────────┼─────────────────────────┤
|
||||
│ ruoyi-workflow │ ruoyi-integration│ ruoyi-monitor │
|
||||
│ ┌─────────────┐│ ┌─────────────┐│ ┌─────────────────────┐│
|
||||
│ │流程引擎 ││ │外部系统集成 ││ │系统监控 ││
|
||||
│ │任务管理 ││ │API适配 ││ │性能监控 ││
|
||||
│ │审批流程 ││ │数据同步 ││ │健康检查 ││
|
||||
│ │流程回滚 ││ │第三方服务 ││ │告警机制 ││
|
||||
│ └─────────────┘│ └─────────────┘│ └─────────────────────┘│
|
||||
└─────────────────┴─────────────────┴─────────────────────────┘
|
||||
```
|
||||
|
||||
#### 核心模块说明
|
||||
|
||||
- **ruoyi-credit**: 债权管理核心模块
|
||||
- 合同管理服务 (ContractManager)
|
||||
- 债权管理服务 (CreditManager)
|
||||
- 融资管理服务 (FinancingManager)
|
||||
|
||||
- **ruoyi-blockchain**: 区块链集成模块
|
||||
- 区块链集成组件 (BlockchainIntegrator)
|
||||
- 智能合约执行和数据上链
|
||||
|
||||
- **ruoyi-payment**: 支付结算模块
|
||||
- 支付处理组件 (PaymentProcessor)
|
||||
- 资金监管和分配逻辑
|
||||
|
||||
- **ruoyi-security**: 安全管理模块
|
||||
- 安全管理组件 (SecurityManager)
|
||||
- 数据加密、身份认证、权限控制
|
||||
|
||||
- **ruoyi-notification**: 通知服务模块
|
||||
- 通知服务组件 (NotificationService)
|
||||
- 消息推送、定时提醒、告警通知
|
||||
|
||||
- **ruoyi-analytics**: 数据分析模块
|
||||
- 报表分析组件 (ReportAnalyzer)
|
||||
- 财务报表、数据可视化、仪表板
|
||||
|
||||
- **ruoyi-workflow**: 工作流模块
|
||||
- 工作流引擎组件 (WorkflowEngine)
|
||||
- 业务流程自动化、任务审批
|
||||
|
||||
- **ruoyi-integration**: 集成适配模块
|
||||
- 集成适配组件 (IntegrationAdapter)
|
||||
- 外部系统集成、API适配
|
||||
|
||||
- **ruoyi-monitor**: 监控管理模块
|
||||
- 系统监控、性能监控、健康检查
|
||||
- 缓存管理组件 (CacheManager)
|
||||
|
||||
## 组件和接口
|
||||
|
||||
### 核心组件
|
||||
|
||||
#### 1. 合同管理组件 (ContractManager)
|
||||
- **所属模块**: ruoyi-credit
|
||||
- **架构层级**: 业务服务层
|
||||
- **职责**: 处理服务合同的创建、确认和状态管理
|
||||
- **接口**:
|
||||
- `createContract(contractInfo)`: 创建服务合同
|
||||
- `confirmContract(contractId, partyType)`: 确认合同
|
||||
- `updateContractStatus(contractId, status)`: 更新合同状态
|
||||
- `validateContractData(contractInfo)`: 验证合同数据完整性
|
||||
- `generateContractNumber()`: 生成合同编号
|
||||
|
||||
#### 2. 债权管理组件 (CreditManager)
|
||||
- **所属模块**: ruoyi-credit
|
||||
- **架构层级**: 业务服务层
|
||||
- **职责**: 管理数字债权凭证的生成、验证和状态跟踪
|
||||
- **接口**:
|
||||
- `generateCredit(contractId)`: 生成数字债权凭证
|
||||
- `validateCredit(creditId)`: 验证债权凭证有效性
|
||||
- `updateCreditStatus(creditId, status)`: 更新债权状态
|
||||
- `calculateCreditAmount(contractId)`: 计算债权金额
|
||||
- `generateDigitalSignature(creditData)`: 生成数字签名
|
||||
|
||||
#### 3. 融资管理组件 (FinancingManager)
|
||||
- **所属模块**: ruoyi-credit
|
||||
- **架构层级**: 业务服务层
|
||||
- **职责**: 处理融资申请、审批和资金管理
|
||||
- **接口**:
|
||||
- `submitFinancingApplication(creditId, amount)`: 提交融资申请
|
||||
- `processApproval(applicationId, result)`: 处理审批结果
|
||||
- `manageFunds(accountId, operation)`: 管理资金操作
|
||||
- `calculateInterestRate(creditInfo, institutionId)`: 计算利率
|
||||
- `generateRiskAssessment(applicationId)`: 生成风险评估报告
|
||||
|
||||
#### 4. 区块链集成组件 (BlockchainIntegrator)
|
||||
- **所属模块**: ruoyi-blockchain
|
||||
- **架构层级**: 区块链集成层
|
||||
- **职责**: 与区块链网络交互,确保数据不可篡改性
|
||||
- **接口**:
|
||||
- `storeOnChain(data)`: 将数据存储到区块链
|
||||
- `verifyOnChain(hash)`: 验证链上数据
|
||||
- `executeSmartContract(contractAddress, params)`: 执行智能合约
|
||||
- `deploySmartContract(contractCode)`: 部署智能合约
|
||||
- `queryChainData(queryParams)`: 查询链上数据
|
||||
- `monitorChainEvents(eventFilter)`: 监控链上事件
|
||||
|
||||
#### 5. 支付结算组件 (PaymentProcessor)
|
||||
- **所属模块**: ruoyi-payment
|
||||
- **架构层级**: 业务服务层
|
||||
- **职责**: 处理资金流转、分配和结算
|
||||
- **接口**:
|
||||
- `processPayment(paymentInfo)`: 处理支付
|
||||
- `distributeFunds(distributionPlan)`: 分配资金
|
||||
- `settleAccount(accountId)`: 结算账户
|
||||
- `createEscrowAccount(applicationId)`: 创建监管账户
|
||||
- `transferFunds(fromAccount, toAccount, amount)`: 资金转账
|
||||
- `calculateFees(transactionAmount)`: 计算手续费
|
||||
|
||||
#### 6. 通知服务组件 (NotificationService)
|
||||
- **所属模块**: ruoyi-notification
|
||||
- **架构层级**: 业务服务层
|
||||
- **职责**: 发送各类业务通知和提醒
|
||||
- **接口**:
|
||||
- `sendNotification(recipient, message, type)`: 发送通知
|
||||
- `scheduleReminder(scheduleInfo)`: 安排提醒
|
||||
- `sendAlert(alertInfo)`: 发送告警
|
||||
- `createMessageTemplate(templateInfo)`: 创建消息模板
|
||||
- `batchSendNotification(recipients, message)`: 批量发送通知
|
||||
- `trackDeliveryStatus(messageId)`: 跟踪消息投递状态
|
||||
|
||||
#### 7. 安全管理组件 (SecurityManager)
|
||||
- **所属模块**: ruoyi-security
|
||||
- **架构层级**: 业务服务层(横切关注点)
|
||||
- **职责**: 统一管理系统安全策略和安全事件处理
|
||||
- **接口**:
|
||||
- `authenticateUser(credentials)`: 用户身份认证
|
||||
- `authorizeAccess(userId, resource, action)`: 权限授权
|
||||
- `encryptData(data, keyId)`: 数据加密
|
||||
- `decryptData(encryptedData, keyId)`: 数据解密
|
||||
- `auditLog(operation, userId, resource)`: 审计日志记录
|
||||
- `detectThreat(eventData)`: 威胁检测
|
||||
- `handleSecurityIncident(incident)`: 安全事件处理
|
||||
- `generateMFAToken(userId)`: 生成多因素认证令牌
|
||||
- `validateMFAToken(userId, token)`: 验证多因素认证令牌
|
||||
- `maskSensitiveData(data, userRole)`: 敏感数据脱敏
|
||||
|
||||
#### 8. 数据管理组件 (DataManager)
|
||||
- **所属模块**: ruoyi-monitor
|
||||
- **架构层级**: 数据访问层
|
||||
- **职责**: 管理数据生命周期、备份恢复和数据质量
|
||||
- **接口**:
|
||||
- `backupData(dataType, schedule)`: 数据备份
|
||||
- `restoreData(backupId, targetTime)`: 数据恢复
|
||||
- `validateDataIntegrity(dataId)`: 数据完整性验证
|
||||
- `maskSensitiveData(data, maskLevel)`: 敏感数据脱敏
|
||||
- `archiveData(dataId, retentionPolicy)`: 数据归档
|
||||
- `purgeData(dataId, reason)`: 数据清理
|
||||
- `syncDataAcrossNodes(dataType)`: 跨节点数据同步
|
||||
- `compressHistoricalData(timeRange)`: 压缩历史数据
|
||||
- `generateDataQualityReport()`: 生成数据质量报告
|
||||
|
||||
#### 9. 工作流引擎组件 (WorkflowEngine)
|
||||
- **所属模块**: ruoyi-workflow
|
||||
- **架构层级**: 业务服务层
|
||||
- **职责**: 管理业务流程的自动化执行和状态跟踪
|
||||
- **接口**:
|
||||
- `startWorkflow(processDefinition, parameters)`: 启动工作流
|
||||
- `executeTask(taskId, action, parameters)`: 执行任务
|
||||
- `approveTask(taskId, approver, decision)`: 任务审批
|
||||
- `getWorkflowStatus(instanceId)`: 获取流程状态
|
||||
- `rollbackWorkflow(instanceId, targetStep)`: 流程回滚
|
||||
- `defineWorkflowTemplate(templateInfo)`: 定义工作流模板
|
||||
- `assignTask(taskId, assignee)`: 分配任务
|
||||
- `escalateTask(taskId, escalationRule)`: 任务升级
|
||||
|
||||
#### 10. 报表分析组件 (ReportAnalyzer)
|
||||
- **所属模块**: ruoyi-analytics
|
||||
- **架构层级**: 业务服务层
|
||||
- **职责**: 生成各类业务报表和数据分析
|
||||
- **接口**:
|
||||
- `generateReport(reportType, parameters)`: 生成报表
|
||||
- `exportReport(reportId, format)`: 导出报表
|
||||
- `analyzeRisk(creditId, analysisType)`: 风险分析
|
||||
- `calculateMetrics(metricType, timeRange)`: 计算指标
|
||||
- `createDashboard(userId, widgets)`: 创建仪表板
|
||||
- `scheduleReportGeneration(reportConfig)`: 定时生成报表
|
||||
- `aggregateStatistics(dataSource, groupBy)`: 聚合统计数据
|
||||
- `predictTrends(historicalData, algorithm)`: 趋势预测
|
||||
|
||||
#### 11. 集成适配组件 (IntegrationAdapter)
|
||||
- **所属模块**: ruoyi-integration
|
||||
- **架构层级**: 外部系统集成层
|
||||
- **职责**: 与外部系统和第三方服务的集成适配
|
||||
- **接口**:
|
||||
- `connectExternalSystem(systemConfig)`: 连接外部系统
|
||||
- `syncData(sourceSystem, targetSystem, dataType)`: 数据同步
|
||||
- `callThirdPartyAPI(apiConfig, parameters)`: 调用第三方API
|
||||
- `handleCallback(callbackData, source)`: 处理回调
|
||||
- `transformData(data, sourceFormat, targetFormat)`: 数据转换
|
||||
- `registerWebhook(webhookConfig)`: 注册Webhook
|
||||
- `retryFailedIntegration(integrationId)`: 重试失败的集成
|
||||
- `monitorIntegrationHealth(systemId)`: 监控集成健康状态
|
||||
|
||||
#### 12. 缓存管理组件 (CacheManager)
|
||||
- **所属模块**: ruoyi-monitor
|
||||
- **架构层级**: 数据访问层
|
||||
- **职责**: 管理系统缓存策略和性能优化
|
||||
- **接口**:
|
||||
- `cacheData(key, data, expiration)`: 缓存数据
|
||||
- `getCachedData(key)`: 获取缓存数据
|
||||
- `invalidateCache(pattern)`: 失效缓存
|
||||
- `preloadCache(dataType)`: 预加载缓存
|
||||
- `monitorCachePerformance()`: 监控缓存性能
|
||||
- `configureCachePolicy(cacheConfig)`: 配置缓存策略
|
||||
- `distributeCacheUpdate(key, data)`: 分布式缓存更新
|
||||
- `analyzeCacheHitRate(timeRange)`: 分析缓存命中率
|
||||
|
||||
### API接口设计
|
||||
|
||||
#### RESTful API端点
|
||||
|
||||
##### 合同管理API (ruoyi-credit模块)
|
||||
```
|
||||
POST /api/credit/contracts # 创建服务合同
|
||||
PUT /api/credit/contracts/{id}/confirm # 确认合同
|
||||
GET /api/credit/contracts/{id} # 获取合同详情
|
||||
GET /api/credit/contracts # 查询合同列表
|
||||
PUT /api/credit/contracts/{id}/status # 更新合同状态
|
||||
DELETE /api/credit/contracts/{id} # 删除合同
|
||||
POST /api/credit/contracts/{id}/validate # 验证合同数据
|
||||
```
|
||||
|
||||
##### 债权管理API (ruoyi-credit模块)
|
||||
```
|
||||
POST /api/credit/credits # 生成数字债权凭证
|
||||
GET /api/credit/credits/{id} # 获取债权凭证详情
|
||||
GET /api/credit/credits # 查询债权列表
|
||||
PUT /api/credit/credits/{id}/status # 更新债权状态
|
||||
POST /api/credit/credits/{id}/validate # 验证债权有效性
|
||||
GET /api/credit/credits/{id}/signature # 获取数字签名
|
||||
```
|
||||
|
||||
##### 融资管理API (ruoyi-credit模块)
|
||||
```
|
||||
POST /api/credit/financing # 提交融资申请
|
||||
PUT /api/credit/financing/{id}/approve # 审批融资申请
|
||||
GET /api/credit/financing/{id} # 获取融资详情
|
||||
GET /api/credit/financing # 查询融资申请列表
|
||||
POST /api/credit/financing/{id}/risk-assess # 风险评估
|
||||
GET /api/credit/financing/{id}/interest-rate # 获取利率信息
|
||||
```
|
||||
|
||||
##### 支付结算API (ruoyi-payment模块)
|
||||
```
|
||||
POST /api/payment/process # 处理支付
|
||||
POST /api/payment/escrow # 创建监管账户
|
||||
PUT /api/payment/escrow/{id}/distribute # 资金分配
|
||||
GET /api/payment/history # 获取支付历史
|
||||
GET /api/payment/escrow/{id}/balance # 查询账户余额
|
||||
POST /api/payment/transfer # 资金转账
|
||||
```
|
||||
|
||||
##### 区块链集成API (ruoyi-blockchain模块)
|
||||
```
|
||||
POST /api/blockchain/store # 数据上链存储
|
||||
GET /api/blockchain/verify/{hash} # 验证链上数据
|
||||
POST /api/blockchain/contract/execute # 执行智能合约
|
||||
POST /api/blockchain/contract/deploy # 部署智能合约
|
||||
GET /api/blockchain/events # 查询链上事件
|
||||
GET /api/blockchain/transaction/{txHash} # 查询交易详情
|
||||
```
|
||||
|
||||
##### 报表分析API (ruoyi-analytics模块)
|
||||
```
|
||||
GET /api/reports/dashboard # 获取仪表板数据
|
||||
POST /api/reports/generate # 生成报表
|
||||
GET /api/reports/{id}/export # 导出报表
|
||||
GET /api/reports/financial # 获取财务报表
|
||||
POST /api/reports/risk-analysis # 风险分析
|
||||
GET /api/reports/statistics # 统计数据
|
||||
```
|
||||
|
||||
##### 安全管理API (ruoyi-security模块)
|
||||
```
|
||||
POST /api/security/authenticate # 用户认证
|
||||
POST /api/security/mfa/generate # 生成MFA令牌
|
||||
POST /api/security/mfa/validate # 验证MFA令牌
|
||||
GET /api/security/audit-logs # 查询审计日志
|
||||
POST /api/security/encrypt # 数据加密
|
||||
POST /api/security/decrypt # 数据解密
|
||||
```
|
||||
|
||||
##### 通知服务API (ruoyi-notification模块)
|
||||
```
|
||||
POST /api/notification/send # 发送通知
|
||||
POST /api/notification/schedule # 安排定时通知
|
||||
GET /api/notification/templates # 获取消息模板
|
||||
POST /api/notification/templates # 创建消息模板
|
||||
GET /api/notification/delivery-status/{id} # 查询投递状态
|
||||
POST /api/notification/batch-send # 批量发送通知
|
||||
```
|
||||
|
||||
## 数据模型
|
||||
|
||||
### 核心实体
|
||||
|
||||
#### 服务合同 (ServiceContract)
|
||||
```java
|
||||
public class ServiceContract {
|
||||
private Long contractId; // 合同ID
|
||||
private String contractNumber; // 合同编号
|
||||
private Long securityCompanyId; // 安保公司ID
|
||||
private Long clientCompanyId; // 甲方单位ID
|
||||
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private String serviceContent; // 服务内容(加密)
|
||||
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private BigDecimal contractAmount; // 合同金额(加密)
|
||||
|
||||
private Date startDate; // 服务开始日期
|
||||
private Date endDate; // 服务结束日期
|
||||
private Date paymentDueDate; // 付款到期日
|
||||
private String contractStatus; // 合同状态
|
||||
private Date createTime; // 创建时间
|
||||
private Date updateTime; // 更新时间
|
||||
private String blockchainHash; // 区块链哈希
|
||||
private String dataHash; // 敏感数据哈希(用于完整性验证)
|
||||
}
|
||||
```
|
||||
|
||||
#### 数字债权凭证 (DigitalCredit)
|
||||
```java
|
||||
public class DigitalCredit {
|
||||
private Long creditId; // 债权ID
|
||||
private String creditNumber; // 债权编号
|
||||
private Long contractId; // 关联合同ID
|
||||
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private BigDecimal creditAmount; // 债权金额(加密)
|
||||
|
||||
private Date issueDate; // 发行日期
|
||||
private Date maturityDate; // 到期日期
|
||||
private String creditStatus; // 债权状态
|
||||
private String blockchainHash; // 区块链哈希
|
||||
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private String digitalSignature; // 数字签名(加密)
|
||||
|
||||
private Date createTime; // 创建时间
|
||||
private Date updateTime; // 更新时间
|
||||
private String encryptionKeyId; // 加密密钥ID
|
||||
}
|
||||
```
|
||||
|
||||
#### 融资申请 (FinancingApplication)
|
||||
```java
|
||||
public class FinancingApplication {
|
||||
private Long applicationId; // 申请ID
|
||||
private String applicationNumber; // 申请编号
|
||||
private Long creditId; // 债权ID
|
||||
private Long financialInstitutionId; // 金融机构ID
|
||||
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private BigDecimal requestAmount; // 申请金额(加密)
|
||||
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private BigDecimal approvedAmount; // 批准金额(加密)
|
||||
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private Double interestRate; // 利率(加密)
|
||||
|
||||
private String applicationStatus; // 申请状态
|
||||
private Date applicationDate; // 申请日期
|
||||
private Date approvalDate; // 审批日期
|
||||
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private String approvalComments; // 审批意见(加密)
|
||||
|
||||
private Date createTime; // 创建时间
|
||||
private Date updateTime; // 更新时间
|
||||
private String accessLog; // 访问日志ID
|
||||
}
|
||||
```
|
||||
|
||||
#### 资金监管账户 (EscrowAccount)
|
||||
```java
|
||||
public class EscrowAccount {
|
||||
private Long accountId; // 账户ID
|
||||
private String accountNumber; // 账户号码
|
||||
private Long applicationId; // 关联融资申请ID
|
||||
private BigDecimal totalAmount; // 总金额
|
||||
private BigDecimal availableAmount; // 可用金额
|
||||
private BigDecimal frozenAmount; // 冻结金额
|
||||
private String accountStatus; // 账户状态
|
||||
private Date createTime; // 创建时间
|
||||
private Date updateTime; // 更新时间
|
||||
}
|
||||
```
|
||||
|
||||
#### 资金流转记录 (FundTransfer)
|
||||
```java
|
||||
public class FundTransfer {
|
||||
private Long transferId; // 流转ID
|
||||
private String transferNumber; // 流转编号
|
||||
private Long fromAccountId; // 转出账户ID
|
||||
private Long toAccountId; // 转入账户ID
|
||||
private BigDecimal transferAmount; // 转账金额
|
||||
private String transferType; // 转账类型
|
||||
private String transferStatus; // 转账状态
|
||||
private String description; // 描述
|
||||
private Date transferTime; // 转账时间
|
||||
private String blockchainTxHash; // 区块链交易哈希
|
||||
}
|
||||
```
|
||||
|
||||
### 数据库设计
|
||||
|
||||
系统将在现有RuoYi数据库基础上新增以下表结构:
|
||||
|
||||
#### 核心业务表 (ruoyi-credit模块)
|
||||
- `dc_service_contract`: 服务合同表
|
||||
- `dc_digital_credit`: 数字债权凭证表
|
||||
- `dc_financing_application`: 融资申请表
|
||||
- `dc_company_info`: 公司信息表
|
||||
- `dc_contract_attachment`: 合同附件表
|
||||
|
||||
#### 支付结算表 (ruoyi-payment模块)
|
||||
- `dc_escrow_account`: 资金监管账户表
|
||||
- `dc_fund_transfer`: 资金流转记录表
|
||||
- `dc_payment_record`: 支付记录表
|
||||
- `dc_account_balance`: 账户余额表
|
||||
- `dc_transaction_log`: 交易日志表
|
||||
|
||||
#### 区块链集成表 (ruoyi-blockchain模块)
|
||||
- `dc_blockchain_transaction`: 区块链交易表
|
||||
- `dc_smart_contract`: 智能合约表
|
||||
- `dc_chain_event`: 链上事件表
|
||||
- `dc_hash_mapping`: 哈希映射表
|
||||
|
||||
#### 安全管理表 (ruoyi-security模块)
|
||||
- `dc_audit_log`: 审计日志表
|
||||
- `dc_security_event`: 安全事件表
|
||||
- `dc_encryption_key`: 加密密钥表
|
||||
- `dc_mfa_token`: 多因素认证令牌表
|
||||
- `dc_access_control`: 访问控制表
|
||||
|
||||
#### 通知服务表 (ruoyi-notification模块)
|
||||
- `dc_notification_log`: 通知日志表
|
||||
- `dc_message_template`: 消息模板表
|
||||
- `dc_scheduled_task`: 定时任务表
|
||||
- `dc_delivery_status`: 投递状态表
|
||||
|
||||
#### 报表分析表 (ruoyi-analytics模块)
|
||||
- `dc_report_config`: 报表配置表
|
||||
- `dc_report_instance`: 报表实例表
|
||||
- `dc_dashboard_widget`: 仪表板组件表
|
||||
- `dc_statistics_cache`: 统计缓存表
|
||||
|
||||
#### 工作流管理表 (ruoyi-workflow模块)
|
||||
- `dc_workflow_definition`: 工作流定义表
|
||||
- `dc_workflow_instance`: 工作流实例表
|
||||
- `dc_workflow_task`: 工作流任务表
|
||||
- `dc_approval_record`: 审批记录表
|
||||
|
||||
#### 集成适配表 (ruoyi-integration模块)
|
||||
- `dc_external_system`: 外部系统表
|
||||
- `dc_integration_config`: 集成配置表
|
||||
- `dc_api_call_log`: API调用日志表
|
||||
- `dc_webhook_config`: Webhook配置表
|
||||
|
||||
#### 系统监控表 (ruoyi-monitor模块)
|
||||
- `dc_system_monitor`: 系统监控表
|
||||
- `dc_performance_metric`: 性能指标表
|
||||
- `dc_cache_statistics`: 缓存统计表
|
||||
- `dc_backup_record`: 备份记录表
|
||||
|
||||
## 正确性属性
|
||||
|
||||
*属性是指在系统的所有有效执行中都应该成立的特征或行为——本质上是关于系统应该做什么的正式声明。属性作为人类可读规范和机器可验证正确性保证之间的桥梁。*
|
||||
|
||||
### 合同管理属性
|
||||
|
||||
**属性 1: 合同创建完整性**
|
||||
*对于任何*有效的合同信息,创建合同后系统必须生成唯一的合同记录并发送确认通知
|
||||
**验证需求: 1.1**
|
||||
|
||||
**属性 2: 合同状态一致性**
|
||||
*对于任何*合同确认操作,系统必须正确更新合同状态为"已确认"并记录准确的确认时间
|
||||
**验证需求: 1.2**
|
||||
|
||||
**属性 3: 债权生成触发**
|
||||
*对于任何*已确认且服务完成的合同,系统必须自动生成对应的应收账款债权记录
|
||||
**验证需求: 1.3**
|
||||
|
||||
### 债权管理属性
|
||||
|
||||
**属性 4: 债权凭证完整性**
|
||||
*对于任何*生成的债权记录,系统必须创建包含完整合同详情、金额和到期日的数字债权凭证
|
||||
**验证需求: 1.4**
|
||||
|
||||
**属性 5: 区块链不可篡改性**
|
||||
*对于任何*上链的数字债权凭证,其数据哈希在区块链上必须保持不可篡改
|
||||
**验证需求: 1.5**
|
||||
|
||||
**属性 6: 债权验证准确性**
|
||||
*对于任何*融资申请,系统必须准确验证关联数字债权凭证的有效性和完整性
|
||||
**验证需求: 2.1**
|
||||
|
||||
### 融资管理属性
|
||||
|
||||
**属性 7: API数据提供完整性**
|
||||
*对于任何*有效的API请求,系统必须提供完整准确的链上债权数据用于信用评估
|
||||
**验证需求: 2.2**
|
||||
|
||||
**属性 8: 审批结果记录**
|
||||
*对于任何*通过的融资申请,系统必须准确记录审批结果并创建相应的融资合约
|
||||
**验证需求: 2.3**
|
||||
|
||||
**属性 9: 资金监管存储**
|
||||
*对于任何*到账的融资资金,系统必须将其正确存入指定的资金监管账户
|
||||
**验证需求: 2.4**
|
||||
|
||||
**属性 10: 智能合约执行优先级**
|
||||
*对于任何*进入监管账户的资金,系统必须通过智能合约优先保障安保人员薪资支付
|
||||
**验证需求: 2.5**
|
||||
|
||||
### 结算管理属性
|
||||
|
||||
**属性 11: 付款提醒及时性**
|
||||
*对于任何*临近到期的合同,系统必须自动发送付款提醒给相关甲方单位
|
||||
**验证需求: 3.1**
|
||||
|
||||
**属性 12: 收款确认触发**
|
||||
*对于任何*支付到监管专户的款项,系统必须确认收款并自动触发智能合约执行
|
||||
**验证需求: 3.2**
|
||||
|
||||
**属性 13: 资金分配优先级**
|
||||
*对于任何*启动的资金分配程序,系统必须首先偿还金融机构的贷款本金和利息
|
||||
**验证需求: 3.3**
|
||||
|
||||
**属性 14: 剩余资金处理**
|
||||
*对于任何*贷款偿还完成后的剩余资金,系统必须将其正确转至安保公司账户
|
||||
**验证需求: 3.4**
|
||||
|
||||
**属性 15: 债权状态更新**
|
||||
*对于任何*完成债务结清的债权,系统必须将数字债权凭证状态更新为"已结清"
|
||||
**验证需求: 3.5**
|
||||
|
||||
### 系统管理属性
|
||||
|
||||
**属性 16: 操作日志完整性**
|
||||
*对于任何*债权相关操作,系统必须记录包含完整操作详情的审计轨迹
|
||||
**验证需求: 4.1**
|
||||
|
||||
**属性 17: 异常告警及时性**
|
||||
*对于任何*系统异常情况,系统必须立即发送告警通知给相关管理人员
|
||||
**验证需求: 4.2**
|
||||
|
||||
**属性 18: 查询数据实时性**
|
||||
*对于任何*债权状态查询请求,系统必须提供实时准确的债权流转状态和历史记录
|
||||
**验收需求: 4.3**
|
||||
|
||||
**属性 19: 数据备份一致性**
|
||||
*对于任何*数据备份操作,系统必须确保区块链数据和业务数据的完全一致性
|
||||
**验证需求: 4.4**
|
||||
|
||||
### API接口属性
|
||||
|
||||
**属性 20: API标准化响应**
|
||||
*对于任何*金融机构的债权信息请求,系统必须通过RESTful API提供标准化格式的数据
|
||||
**验证需求: 5.1**
|
||||
|
||||
**属性 21: 身份认证验证**
|
||||
*对于任何*包含有效认证信息的API调用,系统必须正确验证调用方身份并授权数据访问
|
||||
**验证需求: 5.2**
|
||||
|
||||
**属性 22: 风险评估数据完整性**
|
||||
*对于任何*债权数据响应,系统必须包含合同金额、信用历史、还款能力等所有风险评估要素
|
||||
**验证需求: 5.3**
|
||||
|
||||
**属性 23: 审批结果接收**
|
||||
*对于任何*金融机构提交的审批结果,系统必须正确接收并完整记录审批决定和相关条件
|
||||
**验证需求: 5.4**
|
||||
|
||||
**属性 24: 数据传输安全性**
|
||||
*对于任何*数据传输过程,系统必须使用加密协议确保传输安全
|
||||
**验证需求: 5.5**
|
||||
|
||||
### 财务管理属性
|
||||
|
||||
**属性 25: 债权查询完整性**
|
||||
*对于任何*特定债权的查询请求,系统必须提供包含创建时间、金额、状态变更历史的完整信息
|
||||
**验证需求: 6.2**
|
||||
|
||||
**属性 26: 资金流转实时更新**
|
||||
*对于任何*资金流转操作,系统必须实时更新资金流向记录并发送相应通知
|
||||
**验证需求: 6.3**
|
||||
|
||||
**属性 27: 财务报表数据完整性**
|
||||
*对于任何*财务报表生成请求,系统必须提供完整的债权统计和收益分析等财务数据
|
||||
**验证需求: 6.4**
|
||||
|
||||
**属性 28: 数据导出格式支持**
|
||||
*对于任何*数据导出请求,系统必须支持Excel、PDF等多种格式的数据导出功能
|
||||
**验证需求: 6.5**
|
||||
|
||||
## 数据安全与隐私保护
|
||||
|
||||
### 敏感数据加密
|
||||
|
||||
#### 数据分类
|
||||
- **高敏感数据**: 合同金额、银行账户信息、身份证号码、数字签名私钥
|
||||
- **中敏感数据**: 公司名称、联系方式、合同内容详情
|
||||
- **低敏感数据**: 合同状态、创建时间、公开的合同编号
|
||||
|
||||
#### 加密策略
|
||||
- **数据库加密**: 使用AES-256对高敏感字段进行字段级加密
|
||||
- **传输加密**: 所有API通信使用TLS 1.3协议
|
||||
- **存储加密**: 文件存储使用透明数据加密(TDE)
|
||||
- **密钥管理**: 采用密钥轮换机制,定期更新加密密钥
|
||||
|
||||
#### 加密实现
|
||||
```java
|
||||
// 敏感字段加密注解
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private String bankAccountNumber;
|
||||
|
||||
@EncryptedField(algorithm = "AES-256-GCM")
|
||||
private BigDecimal contractAmount;
|
||||
```
|
||||
|
||||
### 数据泄露防护
|
||||
|
||||
#### 访问控制
|
||||
- **角色权限**: 基于RuoYi的RBAC模型,细化到字段级权限控制
|
||||
- **数据脱敏**: 非授权用户查看时自动脱敏显示
|
||||
- **审计日志**: 记录所有敏感数据访问和操作日志
|
||||
- **会话管理**: 实现安全的会话超时和强制登出机制
|
||||
- **登录失败处理**: 连续登录失败时自动清理缓存数据和临时会话信息
|
||||
|
||||
#### 登录安全机制
|
||||
- **失败计数**: 记录连续登录失败次数,超过阈值(如5次)触发安全措施
|
||||
- **账户锁定**: 登录失败达到上限时临时锁定账户(如30分钟)
|
||||
- **数据清理**: 登录失败时立即清理以下数据:
|
||||
- 清除浏览器缓存中的敏感信息
|
||||
- 注销临时会话和Token
|
||||
- 清理内存中的用户数据
|
||||
- 删除临时文件和下载记录
|
||||
- **安全日志**: 记录所有登录失败事件,包括IP地址、时间戳、失败原因
|
||||
- **异常检测**: 检测异常登录模式(如异地登录、频繁失败)并触发告警
|
||||
|
||||
#### 多因素认证(MFA)
|
||||
- **双因素认证**: 支持短信验证码、邮箱验证码、TOTP等
|
||||
- **生物识别**: 支持指纹、人脸识别等生物特征认证
|
||||
- **硬件Token**: 支持USB Key、智能卡等硬件认证设备
|
||||
- **风险评估**: 基于用户行为和环境风险动态调整认证强度
|
||||
|
||||
#### 网络安全防护
|
||||
- **防火墙**: 部署Web应用防火墙(WAF)防护常见攻击
|
||||
- **DDoS防护**: 实施分布式拒绝服务攻击防护
|
||||
- **入侵检测**: 部署IDS/IPS系统监控网络异常
|
||||
- **SSL/TLS**: 强制使用HTTPS,禁用弱加密算法
|
||||
- **API安全**: 实施API限流、签名验证、IP白名单
|
||||
|
||||
#### 数据备份与恢复
|
||||
- **定期备份**: 自动化数据备份,支持增量和全量备份
|
||||
- **异地备份**: 备份数据存储在不同地理位置
|
||||
- **备份加密**: 备份文件使用独立密钥加密
|
||||
- **恢复测试**: 定期进行数据恢复演练
|
||||
- **版本控制**: 保留多个备份版本,支持时间点恢复
|
||||
|
||||
#### 安全监控与审计
|
||||
- **实时监控**: 7x24小时安全事件监控
|
||||
- **行为分析**: 用户行为异常检测和分析
|
||||
- **威胁情报**: 集成外部威胁情报源
|
||||
- **合规审计**: 满足等保、ISO27001等合规要求
|
||||
- **事件响应**: 建立安全事件应急响应机制
|
||||
|
||||
#### 代码安全
|
||||
- **静态扫描**: 代码提交前进行安全漏洞扫描
|
||||
- **依赖检查**: 检查第三方组件的安全漏洞
|
||||
- **代码混淆**: 对关键代码进行混淆保护
|
||||
- **运行时保护**: 部署RASP运行时应用自我保护
|
||||
|
||||
#### 数据脱敏规则
|
||||
```java
|
||||
// 银行账户脱敏: 1234****5678
|
||||
// 金额脱敏: ****万元
|
||||
// 身份证脱敏: 3301**********1234
|
||||
```
|
||||
|
||||
#### 防泄露措施
|
||||
- **水印标记**: 在导出文档中嵌入用户水印
|
||||
- **下载限制**: 限制敏感数据的批量下载
|
||||
- **屏幕截图防护**: 在敏感页面禁用截图和打印
|
||||
- **网络隔离**: 敏感数据处理在内网环境中进行
|
||||
- **DLP防护**: 部署数据丢失防护系统,监控数据外传
|
||||
- **USB管控**: 禁用或限制USB设备访问
|
||||
- **邮件监控**: 监控包含敏感数据的邮件发送
|
||||
|
||||
### 区块链隐私保护
|
||||
|
||||
#### 链上数据最小化
|
||||
- **哈希存储**: 仅将数据哈希值存储在区块链上
|
||||
- **零知识证明**: 使用zk-SNARKs验证数据完整性而不暴露原始数据
|
||||
- **私有链**: 采用联盟链架构,限制节点访问权限
|
||||
|
||||
#### 隐私计算
|
||||
- **同态加密**: 支持在加密状态下进行数据计算
|
||||
- **安全多方计算**: 多方协作验证而不泄露各方数据
|
||||
- **差分隐私**: 在数据统计分析中保护个体隐私
|
||||
- **联邦学习**: 在不共享原始数据的情况下进行模型训练
|
||||
|
||||
#### 智能合约安全
|
||||
- **合约审计**: 智能合约部署前进行安全审计
|
||||
- **权限控制**: 实施细粒度的合约权限管理
|
||||
- **升级机制**: 支持安全的合约升级和回滚
|
||||
- **Gas优化**: 防止Gas耗尽攻击和重入攻击
|
||||
- **Oracle安全**: 确保外部数据源的可信性
|
||||
|
||||
## 错误处理
|
||||
|
||||
### 异常分类
|
||||
|
||||
1. **业务异常**: 合同状态不符、债权验证失败、资金不足等
|
||||
2. **系统异常**: 数据库连接失败、区块链网络异常、第三方服务不可用等
|
||||
3. **安全异常**: 身份认证失败、权限不足、数据篡改检测、加密解密失败、登录失败超限等
|
||||
4. **隐私异常**: 数据泄露检测、非授权访问、敏感数据暴露、数据清理失败等
|
||||
|
||||
### 错误处理策略
|
||||
|
||||
- **统一异常处理**: 使用RuoYi框架的全局异常处理机制
|
||||
- **业务回滚**: 关键业务操作支持事务回滚
|
||||
- **重试机制**: 对于网络异常等临时性错误实现自动重试
|
||||
- **降级处理**: 在系统负载过高时提供基础功能保障
|
||||
- **安全响应**: 检测到安全威胁时自动触发防护措施
|
||||
- **隐私保护**: 发生数据泄露风险时立即启动应急响应
|
||||
- **登录失败处理**: 登录失败时立即执行数据清理和会话注销
|
||||
- **自动清理**: 系统异常时自动清理敏感数据缓存和临时文件
|
||||
|
||||
## 测试策略
|
||||
|
||||
### 双重测试方法
|
||||
|
||||
系统采用单元测试和基于属性的测试相结合的综合测试策略:
|
||||
|
||||
#### 单元测试
|
||||
- 验证特定示例、边界情况和错误条件
|
||||
- 测试组件间的集成点
|
||||
- 单元测试有助于发现具体的错误,但应避免编写过多,因为基于属性的测试负责覆盖大量输入
|
||||
|
||||
#### 基于属性的测试
|
||||
- 使用**JUnit 5**和**jqwik**库进行基于属性的测试
|
||||
- 每个基于属性的测试配置为运行最少100次迭代,因为属性测试过程是随机的
|
||||
- 每个基于属性的测试必须用注释明确引用设计文档中的正确性属性
|
||||
- 每个基于属性的测试使用以下确切格式标记:'**Feature: digital-credit-service, Property {number}: {property_text}**'
|
||||
- 每个正确性属性必须由单个基于属性的测试实现
|
||||
- 基于属性的测试验证应该在所有输入中保持的通用属性
|
||||
|
||||
#### 测试库和工具
|
||||
- **单元测试**: JUnit 5, Mockito, Spring Boot Test
|
||||
- **基于属性的测试**: jqwik (Java的属性测试库)
|
||||
- **集成测试**: TestContainers (用于数据库和区块链测试)
|
||||
- **API测试**: RestAssured, WireMock
|
||||
|
||||
#### 测试要求
|
||||
- 基于属性的测试必须在实现过程中尽可能接近实现,以便及早发现错误
|
||||
- 每个正确性属性必须有对应的基于属性的测试实现
|
||||
- 测试必须验证真实功能,不得使用模拟或虚假数据来通过测试
|
||||
- 如果测试在3-4次尝试后仍然失败,必须解释问题并寻求指导
|
||||
89
.kiro/specs/digital-credit-service/requirements.md
Normal file
@ -0,0 +1,89 @@
|
||||
# 数字债权服务系统需求文档
|
||||
|
||||
## 简介
|
||||
|
||||
数字债权服务系统是一个基于区块链技术的安保服务债权管理平台,旨在为安保公司提供服务确权、融资申请和到期结算的完整解决方案。系统通过三个核心阶段实现服务合同的数字化管理和债权流转。
|
||||
|
||||
## 术语表
|
||||
|
||||
- **安信平台**: 数字债权服务管理平台
|
||||
- **甲方单位**: 购买安保服务的客户方
|
||||
- **安保公司**: 提供安保服务的服务方
|
||||
- **数字债权凭证**: 基于区块链技术生成的不可篡改债权证明
|
||||
- **金融机构**: 提供融资服务的银行或其他金融服务机构
|
||||
- **资金监管账户**: 专门用于资金托管和分配的银行账户
|
||||
- **智能合约**: 自动执行合约条款的区块链程序
|
||||
|
||||
## 需求
|
||||
|
||||
### 需求 1
|
||||
|
||||
**用户故事:** 作为安保公司,我希望能够在平台上提交服务合同并获得甲方确认,以便生成可信的数字债权凭证。
|
||||
|
||||
#### 验收标准
|
||||
|
||||
1. 安保公司提交服务合同和服务内容后,系统必须创建合同记录并通知甲方单位进行确认
|
||||
2. 甲方单位确认交易意向后,系统必须更新合同状态为"已确认"并记录确认时间
|
||||
3. 服务完成且甲方确认服务履行情况后,系统必须自动生成应收账款债权记录
|
||||
4. 债权记录生成后,系统必须创建包含合同详情、金额、到期日的数字债权凭证
|
||||
5. 数字债权凭证创建后,系统必须利用区块链技术确保凭证数据不可篡改
|
||||
|
||||
### 需求 2
|
||||
|
||||
**用户故事:** 作为安保公司,我希望能够使用数字债权凭证向金融机构申请融资,以便获得资金支持。
|
||||
|
||||
#### 验收标准
|
||||
|
||||
1. 安保公司提交融资申请后,系统必须验证数字债权凭证的有效性和完整性
|
||||
2. 金融机构通过API接口请求债权数据时,系统必须提供链上相关数据用于信用评估
|
||||
3. 金融机构审批通过融资申请后,系统必须记录审批结果并创建融资合约
|
||||
4. 融资资金到账后,系统必须将资金存入指定的资金监管账户
|
||||
5. 资金进入监管账户后,系统必须通过智能合约实现定向支付并优先保障安保人员薪资
|
||||
|
||||
### 需求 3
|
||||
|
||||
**用户故事:** 作为甲方单位,我希望系统能够在合同到期时自动提醒付款并处理资金分配,以便确保债务按时清偿。
|
||||
|
||||
#### 验收标准
|
||||
|
||||
1. 合同付款日临近时,系统必须自动发送付款提醒给甲方单位
|
||||
2. 甲方单位支付款项到资金监管专户后,系统必须确认收款并触发智能合约
|
||||
3. 智能合约启动资金分配程序后,系统必须首先偿还金融机构贷款本金和利息
|
||||
4. 贷款偿还完成且有剩余资金时,系统必须将剩余资金转至安保公司账户
|
||||
5. 所有债务结清后,系统必须更新数字债权凭证状态为"已结清"
|
||||
|
||||
### 需求 4
|
||||
|
||||
**用户故事:** 作为系统管理员,我希望能够监控和管理整个债权流转过程,以便确保系统安全稳定运行。
|
||||
|
||||
#### 验收标准
|
||||
|
||||
1. 系统处理任何债权相关操作时,必须记录详细的操作日志和审计轨迹
|
||||
2. 发生异常情况时,系统必须立即发送告警通知给相关管理人员
|
||||
3. 管理员查询债权状态时,系统必须提供实时的债权流转状态和历史记录
|
||||
4. 系统进行数据备份时,必须确保区块链数据和业务数据的一致性
|
||||
5. 执行系统维护时,系统必须在不影响核心业务的情况下进行升级和维护
|
||||
|
||||
### 需求 5
|
||||
|
||||
**用户故事:** 作为金融机构,我希望能够通过标准化API接口获取债权信息并进行风险评估,以便做出准确的放贷决策。
|
||||
|
||||
#### 验收标准
|
||||
|
||||
1. 金融机构请求债权信息时,系统必须通过RESTful API提供标准化的数据接口
|
||||
2. API调用包含有效的认证信息时,系统必须验证调用方身份并授权数据访问
|
||||
3. 返回债权数据时,系统必须包含合同金额、信用历史、还款能力等风险评估要素
|
||||
4. 金融机构提交审批结果时,系统必须接收并记录审批决定和相关条件
|
||||
5. 数据传输过程中,系统必须使用加密协议确保数据传输安全
|
||||
|
||||
### 需求 6
|
||||
|
||||
**用户故事:** 作为安保公司财务人员,我希望能够实时查看债权状态和资金流向,以便进行财务规划和管理。
|
||||
|
||||
#### 验收标准
|
||||
|
||||
1. 财务人员登录系统后,系统必须显示当前所有债权的状态概览
|
||||
2. 查询特定债权详情时,系统必须提供包含创建时间、金额、状态变更历史的完整信息
|
||||
3. 资金发生流转时,系统必须实时更新资金流向记录并发送通知
|
||||
4. 生成财务报表时,系统必须提供债权统计、收益分析等财务数据
|
||||
5. 导出数据时,系统必须支持Excel、PDF等格式的数据导出功能
|
||||
370
.kiro/specs/digital-credit-service/tasks.md
Normal file
@ -0,0 +1,370 @@
|
||||
# 数字债权服务系统实施计划
|
||||
|
||||
## 实施概述
|
||||
|
||||
将需求和设计转换为一系列代码生成任务,每个任务都基于前一个任务构建,最终完成完整的数字债权服务系统集成。重点关注编写、修改或测试代码的任务。
|
||||
|
||||
## 任务列表
|
||||
|
||||
- [x] 1. 项目结构搭建和基础配置
|
||||
- 在RuoYi框架基础上创建9个新模块:ruoyi-credit、ruoyi-blockchain、ruoyi-payment、ruoyi-security、ruoyi-notification、ruoyi-analytics、ruoyi-workflow、ruoyi-integration、ruoyi-monitor
|
||||
- 配置Maven依赖,包括区块链集成、加密库、jqwik测试框架、缓存组件
|
||||
- 设置数据库连接和基础配置文件,配置Redis缓存
|
||||
- 创建32个数据库表的DDL脚本
|
||||
- _需求: 1.1, 2.1, 3.1_
|
||||
|
||||
- [x] 2. 数据模型和实体类实现
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- [x] 2.1 创建核心实体类和数据库表结构
|
||||
|
||||
|
||||
|
||||
- 实现所有32个数据库表对应的实体类,包括ServiceContract、DigitalCredit、FinancingApplication等
|
||||
- 添加@EncryptedField注解到敏感字段,实现AES-256-GCM加密
|
||||
- 创建对应的数据库表、索引和外键约束
|
||||
- 实现数据验证注解和业务规则检查
|
||||
- _需求: 1.1, 1.4, 2.1_
|
||||
|
||||
- [x] 2.2 编写实体类属性测试
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- **属性 4: 债权凭证完整性**
|
||||
- **验证需求: 1.4**
|
||||
|
||||
- [x] 2.3 实现数据访问层(Mapper)
|
||||
|
||||
|
||||
|
||||
- 创建32个实体类对应的MyBatis Mapper接口和XML文件
|
||||
- 实现基础CRUD操作、复杂查询、分页查询、统计查询
|
||||
- 添加数据加密解密的自动处理逻辑
|
||||
- 实现跨模块的关联查询和数据同步
|
||||
- _需求: 1.1, 1.2, 1.3_
|
||||
|
||||
- [x] 2.4 编写数据访问层属性测试
|
||||
|
||||
|
||||
|
||||
|
||||
- **属性 1: 合同创建完整性**
|
||||
- **验证需求: 1.1**
|
||||
|
||||
- [ ] 3. 安全管理组件实现
|
||||
- [ ] 3.1 实现数据加密解密服务
|
||||
- 创建SecurityManager组件的EncryptionService
|
||||
- 实现AES-256-GCM加密算法和密钥管理
|
||||
- 添加密钥轮换机制和HSM硬件安全模块集成
|
||||
- 实现字段级加密的自动处理和透明解密
|
||||
- 添加加密性能监控和密钥安全审计
|
||||
- _需求: 1.5, 2.1, 5.5_
|
||||
|
||||
- [ ] 3.2 编写加密服务属性测试
|
||||
- **属性 5: 区块链不可篡改性**
|
||||
- **验证需求: 1.5**
|
||||
|
||||
- [ ] 3.3 实现身份认证和权限管理
|
||||
- 扩展RuoYi的认证机制,实现MFA多因素认证(短信、邮箱、TOTP、生物识别)
|
||||
- 实现细粒度权限控制,支持字段级权限和数据脱敏
|
||||
- 添加登录失败处理、账户锁定、数据清理机制
|
||||
- 实现异常登录检测、IP白名单、设备指纹识别
|
||||
- 添加会话管理、强制登出、并发登录控制
|
||||
- _需求: 4.1, 5.2, 6.1_
|
||||
|
||||
- [ ] 3.4 编写认证授权属性测试
|
||||
- **属性 21: 身份认证验证**
|
||||
- **验证需求: 5.2**
|
||||
|
||||
- [ ] 4. 合同管理服务实现
|
||||
- [ ] 4.1 实现合同创建和确认服务
|
||||
- 创建ContractService处理合同生命周期
|
||||
- 实现合同创建、确认、状态更新功能
|
||||
- 添加合同数据验证和业务规则检查
|
||||
- _需求: 1.1, 1.2_
|
||||
|
||||
- [ ] 4.2 编写合同管理属性测试
|
||||
- **属性 2: 合同状态一致性**
|
||||
- **验证需求: 1.2**
|
||||
|
||||
- [ ] 4.3 实现债权生成服务
|
||||
- 创建CreditService处理数字债权凭证
|
||||
- 实现从合同到债权的自动转换
|
||||
- 添加债权验证和状态管理
|
||||
- _需求: 1.3, 1.4, 2.1_
|
||||
|
||||
- [ ] 4.4 编写债权生成属性测试
|
||||
- **属性 3: 债权生成触发**
|
||||
- **验证需求: 1.3**
|
||||
|
||||
- [ ] 5. 区块链集成实现
|
||||
- [ ] 5.1 实现区块链连接和数据上链
|
||||
- 创建BlockchainIntegrator组件处理链上操作
|
||||
- 实现联盟链连接、数据哈希计算和上链存储
|
||||
- 添加链上数据验证、查询功能和事件监控
|
||||
- 实现零知识证明和同态加密的隐私保护
|
||||
- 添加区块链网络监控和异常恢复机制
|
||||
- _需求: 1.5, 2.2_
|
||||
|
||||
- [ ] 5.2 编写区块链集成属性测试
|
||||
- **属性 6: 债权验证准确性**
|
||||
- **验证需求: 2.1**
|
||||
|
||||
- [ ] 5.3 实现智能合约集成
|
||||
- 实现智能合约部署、执行和升级机制
|
||||
- 实现资金分配和支付优先级的智能合约逻辑
|
||||
- 添加合约安全审计、权限控制和Gas优化
|
||||
- 实现Oracle数据源集成和外部数据验证
|
||||
- 添加合约执行监控、异常处理和回滚机制
|
||||
- _需求: 2.5, 3.2, 3.3_
|
||||
|
||||
- [ ] 5.4 编写智能合约属性测试
|
||||
- **属性 10: 智能合约执行优先级**
|
||||
- **验证需求: 2.5**
|
||||
|
||||
- [ ] 6. 融资管理服务实现
|
||||
- [ ] 6.1 实现融资申请和审批服务
|
||||
- 创建FinancingService处理融资流程
|
||||
- 实现申请提交、审批处理、结果记录
|
||||
- 添加风险评估和信用检查
|
||||
- _需求: 2.1, 2.3, 2.4_
|
||||
|
||||
- [ ] 6.2 编写融资管理属性测试
|
||||
- **属性 8: 审批结果记录**
|
||||
- **验证需求: 2.3**
|
||||
|
||||
- [ ] 6.3 实现资金监管账户管理
|
||||
- 创建EscrowAccountService处理资金托管
|
||||
- 实现资金存入、分配、转账功能
|
||||
- 添加账户状态监控和资金流向跟踪
|
||||
- _需求: 2.4, 2.5, 3.4_
|
||||
|
||||
- [ ] 6.4 编写资金管理属性测试
|
||||
- **属性 9: 资金监管存储**
|
||||
- **验证需求: 2.4**
|
||||
|
||||
- [ ] 7. 支付结算服务实现
|
||||
- [ ] 7.1 实现支付处理和确认服务
|
||||
- 创建PaymentService处理支付流程
|
||||
- 实现收款确认、智能合约触发
|
||||
- 添加支付状态跟踪和异常处理
|
||||
- _需求: 3.1, 3.2_
|
||||
|
||||
- [ ] 7.2 编写支付处理属性测试
|
||||
- **属性 12: 收款确认触发**
|
||||
- **验证需求: 3.2**
|
||||
|
||||
- [ ] 7.3 实现资金分配和结算服务
|
||||
- 实现贷款偿还优先级逻辑
|
||||
- 添加剩余资金分配和债权状态更新
|
||||
- 实现完整的结算流程自动化
|
||||
- _需求: 3.3, 3.4, 3.5_
|
||||
|
||||
- [ ] 7.4 编写资金分配属性测试
|
||||
- **属性 13: 资金分配优先级**
|
||||
- **验证需求: 3.3**
|
||||
|
||||
- [ ] 7.5 编写剩余资金处理属性测试
|
||||
- **属性 14: 剩余资金处理**
|
||||
- **验证需求: 3.4**
|
||||
|
||||
- [ ] 8. 通知和提醒服务实现
|
||||
- [ ] 8.1 实现通知服务和消息推送
|
||||
- 创建NotificationService组件处理各类通知
|
||||
- 实现多渠道消息推送(邮件、短信、微信、系统消息、APP推送)
|
||||
- 添加消息模板管理、个性化配置和批量发送
|
||||
- 实现消息投递状态跟踪和失败重试机制
|
||||
- 添加消息优先级管理和流量控制
|
||||
- _需求: 1.1, 3.1, 4.2_
|
||||
|
||||
- [ ] 8.2 编写通知服务属性测试
|
||||
- **属性 11: 付款提醒及时性**
|
||||
- **验证需求: 3.1**
|
||||
|
||||
- [ ] 8.3 实现定时任务和提醒机制
|
||||
- 集成RuoYi的定时任务框架
|
||||
- 实现合同到期提醒、状态检查等定时任务
|
||||
- 添加任务调度和执行监控
|
||||
- _需求: 3.1, 4.3_
|
||||
|
||||
- [ ] 8.4 编写定时任务属性测试
|
||||
- **属性 17: 异常告警及时性**
|
||||
- **验证需求: 4.2**
|
||||
|
||||
- [ ] 9. API接口层实现
|
||||
- [ ] 9.1 实现RESTful API控制器
|
||||
- 创建各业务模块的Controller类
|
||||
- 实现标准化的API接口和响应格式
|
||||
- 添加API文档和Swagger集成
|
||||
- _需求: 5.1, 5.3, 6.2_
|
||||
|
||||
- [ ] 9.2 编写API接口属性测试
|
||||
- **属性 20: API标准化响应**
|
||||
- **验证需求: 5.1**
|
||||
|
||||
- [ ] 9.3 实现API安全和限流机制
|
||||
- 添加API认证、签名验证、IP白名单
|
||||
- 实现API限流和防护机制
|
||||
- 添加API调用监控和日志记录
|
||||
- _需求: 5.2, 5.4, 5.5_
|
||||
|
||||
- [ ] 9.4 编写API安全属性测试
|
||||
- **属性 24: 数据传输安全性**
|
||||
- **验证需求: 5.5**
|
||||
|
||||
- [ ] 10. 报表和数据分析实现
|
||||
- [ ] 10.1 实现财务报表生成服务
|
||||
- 创建ReportAnalyzer组件处理报表生成和数据分析
|
||||
- 实现债权统计、收益分析、风险评估等多维度财务报表
|
||||
- 添加报表定时生成、多格式导出(Excel、PDF、Word)功能
|
||||
- 实现数据可视化图表和交互式仪表板
|
||||
- 添加趋势预测和智能分析功能
|
||||
- _需求: 6.4, 6.5_
|
||||
|
||||
- [ ] 10.2 编写报表生成属性测试
|
||||
- **属性 27: 财务报表数据完整性**
|
||||
- **验证需求: 6.4**
|
||||
|
||||
- [ ] 10.3 实现数据查询和展示服务
|
||||
- 实现债权状态查询、历史记录查看
|
||||
- 添加实时数据更新和通知机制
|
||||
- 实现用户个性化仪表板
|
||||
- _需求: 4.3, 6.1, 6.2, 6.3_
|
||||
|
||||
- [ ] 10.4 编写数据查询属性测试
|
||||
- **属性 18: 查询数据实时性**
|
||||
- **验证需求: 4.3**
|
||||
|
||||
- [ ] 10.5 编写数据导出属性测试
|
||||
- **属性 28: 数据导出格式支持**
|
||||
- **验证需求: 6.5**
|
||||
|
||||
- [ ] 11. 系统监控和日志实现
|
||||
- [ ] 11.1 实现审计日志和操作记录
|
||||
- 扩展RuoYi的日志框架
|
||||
- 实现详细的操作审计和数据变更记录
|
||||
- 添加日志查询和分析功能
|
||||
- _需求: 4.1, 4.4_
|
||||
|
||||
- [ ] 11.2 编写审计日志属性测试
|
||||
- **属性 16: 操作日志完整性**
|
||||
- **验证需求: 4.1**
|
||||
|
||||
- [ ] 11.3 实现系统监控和告警机制
|
||||
- 添加系统性能监控和健康检查
|
||||
- 实现异常检测和自动告警
|
||||
- 集成监控仪表板和报警通知
|
||||
- _需求: 4.2, 4.5_
|
||||
|
||||
- [ ] 11.4 编写系统监控属性测试
|
||||
- **属性 19: 数据备份一致性**
|
||||
- **验证需求: 4.4**
|
||||
|
||||
- [ ] 11.5 实现工作流引擎服务
|
||||
- 创建WorkflowEngine组件处理业务流程自动化
|
||||
- 实现工作流定义、实例管理、任务分配和审批
|
||||
- 添加流程监控、异常处理和回滚机制
|
||||
- 集成业务规则引擎和决策表
|
||||
- _需求: 2.3, 3.1, 4.1_
|
||||
|
||||
- [ ] 11.6 实现集成适配服务
|
||||
- 创建IntegrationAdapter组件处理外部系统集成
|
||||
- 实现金融机构API、支付网关、第三方服务的适配
|
||||
- 添加数据转换、格式映射和协议适配
|
||||
- 实现Webhook管理和回调处理
|
||||
- 添加集成监控和健康检查
|
||||
- _需求: 2.2, 5.1, 5.4_
|
||||
|
||||
- [ ] 11.7 实现缓存管理服务
|
||||
- 创建CacheManager组件处理系统缓存
|
||||
- 实现Redis分布式缓存和本地缓存策略
|
||||
- 添加缓存预加载、失效管理和性能监控
|
||||
- 实现缓存一致性保证和数据同步
|
||||
- _需求: 4.3, 6.2, 6.3_
|
||||
|
||||
- [ ] 11.8 实现数据管理服务
|
||||
- 创建DataManager组件处理数据生命周期
|
||||
- 实现数据备份、恢复、归档和清理
|
||||
- 添加数据质量监控和完整性验证
|
||||
- 实现跨节点数据同步和一致性保证
|
||||
- _需求: 4.4, 4.5_
|
||||
|
||||
- [ ] 12. 前端界面集成
|
||||
- [ ] 12.1 实现债权管理前端页面
|
||||
- 基于RuoYi-Vue3创建债权管理界面
|
||||
- 实现合同创建、确认、债权查看等页面
|
||||
- 添加数据脱敏和权限控制
|
||||
- _需求: 1.1, 1.2, 6.1, 6.2_
|
||||
|
||||
- [ ] 12.2 实现融资管理前端页面
|
||||
- 创建融资申请、审批、资金管理界面
|
||||
- 实现实时状态更新和进度跟踪
|
||||
- 添加风险评估和数据可视化
|
||||
- _需求: 2.1, 2.3, 6.3_
|
||||
|
||||
- [ ] 12.3 实现财务报表和仪表板
|
||||
- 创建财务数据展示和报表界面
|
||||
- 实现数据导出和打印功能
|
||||
- 添加交互式图表和数据钻取
|
||||
- _需求: 6.4, 6.5_
|
||||
|
||||
- [ ] 12.4 实现系统管理和监控界面
|
||||
- 创建系统监控、日志查看、用户管理界面
|
||||
- 实现安全事件监控和告警管理界面
|
||||
- 添加工作流管理和任务审批界面
|
||||
- 实现系统配置和参数管理界面
|
||||
- _需求: 4.1, 4.2, 4.3_
|
||||
|
||||
- [ ] 13. 集成测试和系统测试
|
||||
- [ ] 13.1 实现端到端集成测试
|
||||
- 编写完整业务流程的集成测试
|
||||
- 测试三个核心阶段的完整流转
|
||||
- 验证数据一致性和业务规则
|
||||
- _需求: 1.1-1.5, 2.1-2.5, 3.1-3.5_
|
||||
|
||||
- [ ] 13.2 编写系统级属性测试
|
||||
- **属性 25: 债权查询完整性**
|
||||
- **验证需求: 6.2**
|
||||
|
||||
- [ ] 13.3 编写资金流转属性测试
|
||||
- **属性 26: 资金流转实时更新**
|
||||
- **验证需求: 6.3**
|
||||
|
||||
- [ ] 13.4 实现性能测试和压力测试
|
||||
- 测试系统在高并发下的性能表现
|
||||
- 验证数据库查询和API响应性能
|
||||
- 测试区块链集成的稳定性
|
||||
- _需求: 4.5, 5.1_
|
||||
|
||||
- [ ] 14. 部署配置和上线准备
|
||||
- [ ] 14.1 配置生产环境部署
|
||||
- 配置生产数据库和区块链网络连接
|
||||
- 设置安全证书和加密密钥
|
||||
- 配置负载均衡和高可用架构
|
||||
- _需求: 4.4, 4.5, 5.5_
|
||||
|
||||
- [ ] 14.2 实现数据迁移和初始化
|
||||
- 编写32个数据库表的初始化脚本和索引
|
||||
- 实现现有数据的迁移和转换,包括数据加密处理
|
||||
- 添加系统配置、基础数据、权限数据的导入
|
||||
- 实现数据迁移的回滚和验证机制
|
||||
- _需求: 4.4_
|
||||
|
||||
- [ ] 14.3 实现安全加固和合规配置
|
||||
- 配置WAF防火墙、DDoS防护、IDS/IPS系统
|
||||
- 实施SSL/TLS加密、API安全、网络隔离
|
||||
- 配置安全监控、威胁检测、事件响应
|
||||
- 实现等保合规、ISO27001认证要求
|
||||
- 添加安全审计和渗透测试
|
||||
- _需求: 4.2, 5.5_
|
||||
|
||||
- [ ] 15. 最终检查点 - 确保所有测试通过
|
||||
- 确保所有测试通过,如有问题请咨询用户
|
||||
4
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"java.compile.nullAnalysis.mode": "automatic",
|
||||
"java.configuration.updateBuildConfiguration": "interactive"
|
||||
}
|
||||
8
RuoYi-Vue3/.env.development
Normal file
@ -0,0 +1,8 @@
|
||||
# 页面标题
|
||||
VITE_APP_TITLE = 若依管理系统
|
||||
|
||||
# 开发环境配置
|
||||
VITE_APP_ENV = 'development'
|
||||
|
||||
# 若依管理系统/开发环境
|
||||
VITE_APP_BASE_API = '/dev-api'
|
||||
11
RuoYi-Vue3/.env.production
Normal file
@ -0,0 +1,11 @@
|
||||
# 页面标题
|
||||
VITE_APP_TITLE = 若依管理系统
|
||||
|
||||
# 生产环境配置
|
||||
VITE_APP_ENV = 'production'
|
||||
|
||||
# 若依管理系统/生产环境
|
||||
VITE_APP_BASE_API = '/prod-api'
|
||||
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
VITE_BUILD_COMPRESS = gzip
|
||||
11
RuoYi-Vue3/.env.staging
Normal file
@ -0,0 +1,11 @@
|
||||
# 页面标题
|
||||
VITE_APP_TITLE = 若依管理系统
|
||||
|
||||
# 生产环境配置
|
||||
VITE_APP_ENV = 'staging'
|
||||
|
||||
# 若依管理系统/生产环境
|
||||
VITE_APP_BASE_API = '/stage-api'
|
||||
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
VITE_BUILD_COMPRESS = gzip
|
||||
1
RuoYi-Vue3/.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1 @@
|
||||
custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html
|
||||
20
RuoYi-Vue3/LICENSE
Normal file
@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2018 RuoYi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
108
RuoYi-Vue3/README.md
Normal file
@ -0,0 +1,108 @@
|
||||
<p align="center">
|
||||
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
|
||||
</p>
|
||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.9.0</h1>
|
||||
<h4 align="center">基于SpringBoot+Vue3前后端分离的Java快速开发框架</h4>
|
||||
<p align="center">
|
||||
<a href="https://gitee.com/y_project/RuoYi-Vue/stargazers"><img src="https://gitee.com/y_project/RuoYi-Vue/badge/star.svg?theme=dark"></a>
|
||||
<a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.9.0-brightgreen.svg"></a>
|
||||
<a href="https://gitee.com/y_project/RuoYi-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
|
||||
</p>
|
||||
|
||||
## 平台简介
|
||||
|
||||
* 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
|
||||
* 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) 或 [RuoYi-Vue-fast](https://gitcode.com/yangzongzhuan/RuoYi-Vue-fast) 版本。
|
||||
* 前端技术栈([Vue2](https://cn.vuejs.org) + [Element](https://github.com/ElemeFE/element) + [Vue CLI](https://cli.vuejs.org/zh)),请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue/tree/master/ruoyi-ui)。
|
||||
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)
|
||||
|
||||
## 前端运行
|
||||
|
||||
```bash
|
||||
# 克隆项目
|
||||
git clone https://github.com/yangzongzhuan/RuoYi-Vue3.git
|
||||
|
||||
# 进入项目目录
|
||||
cd RuoYi-Vue3
|
||||
|
||||
# 安装依赖
|
||||
yarn --registry=https://registry.npmmirror.com
|
||||
|
||||
# 启动服务
|
||||
yarn dev
|
||||
|
||||
# 构建测试环境 yarn build:stage
|
||||
# 构建生产环境 yarn build:prod
|
||||
# 前端访问地址 http://localhost:80
|
||||
```
|
||||
|
||||
## 内置功能
|
||||
|
||||
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
|
||||
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
|
||||
3. 岗位管理:配置系统用户所属担任职务。
|
||||
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
|
||||
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
|
||||
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
|
||||
7. 参数管理:对系统动态配置常用参数。
|
||||
8. 通知公告:系统通知公告信息发布维护。
|
||||
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
|
||||
10. 登录日志:系统登录日志记录查询包含登录异常。
|
||||
11. 在线用户:当前系统中活跃用户状态监控。
|
||||
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
|
||||
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
|
||||
14. 系统接口:根据业务代码自动生成相关的api接口文档。
|
||||
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
|
||||
16. 缓存监控:对系统的缓存信息查询,命令统计等。
|
||||
17. 在线构建器:拖动表单元素生成相应的HTML代码。
|
||||
18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
|
||||
|
||||
## 在线体验
|
||||
|
||||
- admin/admin123
|
||||
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
|
||||
|
||||
演示地址:http://vue.ruoyi.vip
|
||||
文档地址:http://doc.ruoyi.vip
|
||||
|
||||
## 演示图
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
## 若依前后端分离交流群
|
||||
|
||||
QQ群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [](https://jq.qq.com/?_wv=1027&k=SpyH2875) [](https://jq.qq.com/?_wv=1027&k=tKEt51dz) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZFAPAbp09S2ltvwrJzp7wGlbopsc0rwi&authKey=HB2cxpxP2yspk%2Bo3WKTBfktRCccVkU26cgi5B16u0KcAYrVu7sBaE7XSEqmMdFQp&noverify=0&group_code=174951577) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Fn2aF5IHpwsy8j6VlalNJK6qbwFLFHat&authKey=uyIT%2B97x2AXj3odyXpsSpVaPMC%2Bidw0LxG5MAtEqlrcBcWJUA%2FeS43rsF1Tg7IRJ&noverify=0&group_code=161281055) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DkugnCg68PevlycJSKSwjhFqfIgrWWwR&authKey=pR1Pa5lPIeGF%2FFtIk6d%2FGB5qFi0EdvyErtpQXULzo03zbhopBHLWcuqdpwY241R%2F&noverify=0&group_code=151450850) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=F58bgRa-Dp-rsQJThiJqIYv8t4-lWfXh&authKey=UmUs4CVG5OPA1whvsa4uSespOvyd8%2FAr9olEGaWAfdLmfKQk%2FVBp2YU3u2xXXt76&noverify=0&group_code=224622315) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Nxb2EQ5qozWa218Wbs7zgBnjLSNk_tVT&authKey=obBKXj6SBKgrFTJZx0AqQnIYbNOvBB2kmgwWvGhzxR67RoRr84%2Bus5OadzMcdJl5&noverify=0&group_code=287842588) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=numtK1M_I4eVd2Gvg8qtbuL8JgX42qNh&authKey=giV9XWMaFZTY%2FqPlmWbkB9g3fi0Ev5CwEtT9Tgei0oUlFFCQLDp4ozWRiVIzubIm&noverify=0&group_code=187944233) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G6r5KGCaa3pqdbUSXNIgYloyb8e0_L0D&authKey=4w8tF1eGW7%2FedWn%2FHAypQksdrML%2BDHolQSx7094Agm7Luakj9EbfPnSTxSi2T1LQ&noverify=0&group_code=228578329) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=GsOo-OLz53J8y_9TPoO6XXSGNRTgbFxA&authKey=R7Uy%2Feq%2BZsoKNqHvRKhiXpypW7DAogoWapOawUGHokJSBIBIre2%2FoiAZeZBSLuBc&noverify=0&group_code=191164766) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=PmYavuzsOthVqfdAPbo4uAeIbu7Ttjgc&authKey=p52l8%2FXa4PS1JcEmS3VccKSwOPJUZ1ZfQ69MEKzbrooNUljRtlKjvsXf04bxNp3G&noverify=0&group_code=174569686) 点击按钮入群。
|
||||
@ -7,6 +7,6 @@ echo.
|
||||
cd %~dp0
|
||||
|
||||
cd ..
|
||||
npm run build:prod
|
||||
yarn build:prod
|
||||
|
||||
pause
|
||||
@ -7,6 +7,6 @@ echo.
|
||||
cd %~dp0
|
||||
|
||||
cd ..
|
||||
npm install --registry=https://registry.npmmirror.com
|
||||
yarn --registry=https://registry.npmmirror.com
|
||||
|
||||
pause
|
||||
12
RuoYi-Vue3/bin/run-web.bat
Normal file
@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
echo.
|
||||
echo [信息] 使用 Vite 命令运行 Web 工程。
|
||||
echo.
|
||||
|
||||
%~d0
|
||||
cd %~dp0
|
||||
|
||||
cd ..
|
||||
yarn dev
|
||||
|
||||
pause
|
||||
@ -1,12 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<title><%= webpackConfig.name %></title>
|
||||
<link rel="icon" href="/favicon.ico">
|
||||
<title>%VITE_APP_TITLE%</title>
|
||||
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
|
||||
<style>
|
||||
html,
|
||||
@ -16,6 +17,7 @@
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.chromeframe {
|
||||
margin: 0.2em 0;
|
||||
background: #ccc;
|
||||
@ -92,6 +94,7 @@
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
@ -105,6 +108,7 @@
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
@ -194,8 +198,9 @@
|
||||
opacity: 0.5;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<div id="loader-wrapper">
|
||||
<div id="loader"></div>
|
||||
@ -204,5 +209,7 @@
|
||||
<div class="load_title">正在加载系统资源,请耐心等待</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
51
RuoYi-Vue3/package.json
Normal file
@ -0,0 +1,51 @@
|
||||
{
|
||||
"name": "ruoyi",
|
||||
"version": "3.9.0",
|
||||
"description": "若依管理系统",
|
||||
"author": "若依",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build:prod": "vite build",
|
||||
"build:stage": "vite build --mode staging",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://gitee.com/y_project/RuoYi-Vue.git"
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "2.3.1",
|
||||
"@vueup/vue-quill": "1.2.0",
|
||||
"@vueuse/core": "13.3.0",
|
||||
"axios": "1.9.0",
|
||||
"clipboard": "2.0.11",
|
||||
"echarts": "5.6.0",
|
||||
"element-plus": "2.10.7",
|
||||
"file-saver": "2.0.5",
|
||||
"fuse.js": "6.6.2",
|
||||
"js-beautify": "1.14.11",
|
||||
"js-cookie": "3.0.5",
|
||||
"jsencrypt": "3.3.2",
|
||||
"nprogress": "0.2.0",
|
||||
"pinia": "3.0.2",
|
||||
"splitpanes": "4.0.4",
|
||||
"vue": "3.5.16",
|
||||
"vue-cropper": "1.1.1",
|
||||
"vue-router": "4.5.1",
|
||||
"vuedraggable": "4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "5.2.4",
|
||||
"sass-embedded": "1.89.1",
|
||||
"unplugin-auto-import": "0.18.6",
|
||||
"unplugin-vue-setup-extend-plus": "1.0.1",
|
||||
"vite": "6.3.5",
|
||||
"vite-plugin-compression": "0.5.1",
|
||||
"vite-plugin-svg-icons": "2.0.1"
|
||||
},
|
||||
"overrides": {
|
||||
"quill": "2.0.2"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
15
RuoYi-Vue3/src/App.vue
Normal file
@ -0,0 +1,15 @@
|
||||
<template>
|
||||
<router-view />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import useSettingsStore from '@/store/modules/settings'
|
||||
import { handleThemeStyle } from '@/utils/theme'
|
||||
|
||||
onMounted(() => {
|
||||
nextTick(() => {
|
||||
// 初始化主题样式
|
||||
handleThemeStyle(useSettingsStore().theme)
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 954 B After Width: | Height: | Size: 954 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 179 B After Width: | Height: | Size: 179 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 971 B After Width: | Height: | Size: 971 B |
|
Before Width: | Height: | Size: 717 B After Width: | Height: | Size: 717 B |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 418 B After Width: | Height: | Size: 418 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 356 B After Width: | Height: | Size: 356 B |
|
Before Width: | Height: | Size: 724 B After Width: | Height: | Size: 724 B |
|
Before Width: | Height: | Size: 818 B After Width: | Height: | Size: 818 B |
|
Before Width: | Height: | Size: 627 B After Width: | Height: | Size: 627 B |
|
Before Width: | Height: | Size: 347 B After Width: | Height: | Size: 347 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 497 B After Width: | Height: | Size: 497 B |
|
Before Width: | Height: | Size: 459 B After Width: | Height: | Size: 459 B |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 944 B After Width: | Height: | Size: 944 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 421 B After Width: | Height: | Size: 421 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 320 B After Width: | Height: | Size: 320 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 744 B After Width: | Height: | Size: 744 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 285 B After Width: | Height: | Size: 285 B |
|
Before Width: | Height: | Size: 1017 B After Width: | Height: | Size: 1017 B |
|
Before Width: | Height: | Size: 444 B After Width: | Height: | Size: 444 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 669 B After Width: | Height: | Size: 669 B |
|
Before Width: | Height: | Size: 335 B After Width: | Height: | Size: 335 B |
|
Before Width: | Height: | Size: 883 B After Width: | Height: | Size: 883 B |
1
RuoYi-Vue3/src/assets/icons/svg/moon.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1733303018722" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1447" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M368.832 67.2c51.328-16.384 89.216 34.112 75.712 76.416a346.816 346.816 0 0 0 435.84 435.84c42.304-13.44 92.8 24.384 76.48 75.712A467.968 467.968 0 1 1 368.832 67.2z m-35.776 122.688a368.832 368.832 0 1 0 501.056 501.056 445.952 445.952 0 0 1-501.056-501.056z" p-id="1448"></path></svg>
|
||||
|
After Width: | Height: | Size: 619 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 821 B After Width: | Height: | Size: 821 B |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 731 B After Width: | Height: | Size: 731 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |