鸿蒙金融理财全栈:风控、合规与产品实现
这部分把金融理财项目里最容易被忽略的三块拎出来:风险控制、合规审计和产品创新。代码还是沿着 ArkTS 的分层思路写,接口各自独立,后面接页面时不会互相拖累。
一、风险控制
风控这块别做得太满,核心是把评估、监控、预警拆开。这样一来,规则变了只改对应模块,不用整条链路一起动。
1.1 风险评估
先把用户风险评估封装成一个单例工具类。这里保留异步初始化,是为了避免页面一进来就碰到未初始化的 helper。
// entry/src/main/ets/utils/RiskAssessmentUtil.ets
import risk from '@ohos.risk';
export class RiskAssessmentUtil {
private static instance: RiskAssessmentUtil | null = null;
private riskHelper: risk.RiskHelper | null = null;
static getInstance(): RiskAssessmentUtil {
if (!RiskAssessmentUtil.instance) {
RiskAssessmentUtil.instance = new RiskAssessmentUtil();
}
return RiskAssessmentUtil.instance;
}
async init(): Promise<void> {
if (!this.riskHelper) {
this.riskHelper = risk.createRiskHelper();
}
}
async assessUserRisk(): Promise<risk.RiskAssessmentResult> {
if (!this.riskHelper) return null;
const result = await this.riskHelper.assessUserRisk();
return result;
}
async getUserRiskAssessmentReport(): Promise<risk.UserRiskAssessmentReport> {
if (!this.riskHelper) return null;
const result = await this.riskHelper.getUserRiskAssessmentReport();
return result;
}
}
页面层只负责触发和展示,不把业务逻辑塞进去。初始化放在 aboutToAppear,这是个很普通但省心的处理方式,至少不会在按钮点击时才暴露空指针问题。
// entry/src/main/ets/pages/RiskAssessmentPage.ets
import { RiskAssessmentUtil } from '../utils/RiskAssessmentUtil';
@Entry
@Component
struct RiskAssessmentPage {
@State riskAssessmentResult: risk.RiskAssessmentResult | null = null;
build() {
Column({ space: 16 }) {
Text('风险评估').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
ButtonComponent({
text: '进行风险评估',
onClick: async () => {
await this.assessUserRisk();
},
disabled: false
});
if (this.riskAssessmentResult) {
Text(`风险等级:${this.riskAssessmentResult.riskLevel}`).fontSize(14).textColor('#000000');
Text(`风险得分:${this.riskAssessmentResult.riskScore}`).fontSize(14).textColor('#666666');
Text(`风险描述:${this.riskAssessmentResult.riskDescription}`).fontSize(14).textColor('#666666');
}
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
RiskAssessmentUtil.getInstance().init();
}
async assessUserRisk(): Promise<void> {
this.riskAssessmentResult = await RiskAssessmentUtil.getInstance().assessUserRisk();
}
}
1.2 风险监控与预警
监控负责盯住产品状态,预警负责把异常抛出来。两层分开写,后面想换通知方式也不用改监控逻辑。
风险监控工具类
// entry/src/main/ets/utils/RiskMonitoringUtil.ets
import monitoring from '@ohos.monitoring';
export class RiskMonitoringUtil {
private static instance: RiskMonitoringUtil | null = null;
private monitoringHelper: monitoring.MonitoringHelper | null = null;
static getInstance(): RiskMonitoringUtil {
if (!RiskMonitoringUtil.instance) {
RiskMonitoringUtil.instance = new RiskMonitoringUtil();
}
return RiskMonitoringUtil.instance;
}
async init(): Promise<void> {
if (!this.monitoringHelper) {
this.monitoringHelper = monitoring.createMonitoringHelper();
}
}
async monitorFinancialProductRisk(): Promise<Array<monitoring.FinancialProductRisk>> {
if (!this.monitoringHelper) return [];
const result = await this.monitoringHelper.monitorFinancialProductRisk();
return result;
}
async getFinancialProductRiskReport(productId: number): Promise<monitoring.FinancialProductRiskReport> {
if (!this.monitoringHelper) return null;
const result = await this.monitoringHelper.getFinancialProductRiskReport(productId);
return result;
}
}

