引言
以前一直在公司写业务代码, 从来没有通过技术实现自己变现。 最近正好有一个机会。
接手了一个外包项目。 主要面向的行业是助贷。
其实也不是很难, 类似于一个贷款系统,但更多的的功能是客户关联相关的业务开发。
其中最核心的就是整个贷款审批流程如何在系统中进行实现。
涉及业务核心秘密,本文以一个简单的业务流程来模拟说明实现过程。
用户画像
角色 | 场景 | 功能 |
---|---|---|
客户 | 申请页面 | 填写贷款信息,身份认证,人脸识别,家庭资料 |
信审 | 信审页面 | 电话回访,约访客户, 填写综合评估 |
财务 | 放款 页面 | 进行打款操作 |
以上场景描述针对于贷款申请提交的流程,其他各个方向的业务流程也是同样的分析。
业务建模
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_11ipbjg" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.10.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.19.0">
<bpmn:collaboration id="Collaboration_1kvnfde">
<bpmn:documentation>泳道图</bpmn:documentation>
<bpmn:participant id="Participant_0parxuu" name="贷款审批系统1" processRef="Process_0kqpuin" />
</bpmn:collaboration>
<bpmn:process id="Process_0kqpuin" name="贷款审批系统1" isExecutable="true">
<bpmn:laneSet id="LaneSet_0zjm3ye">
<bpmn:lane id="Lane_06ydaco" name="客户">
<bpmn:flowNodeRef>StartEvent_1</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Activity_0te11um</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Activity_0abw2mm</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Event_1b3ej7k</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="Lane_1pga0np" name="审批员">
<bpmn:flowNodeRef>Activity_0u5947u</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Activity_1by69vy</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Event_027qbxn</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Event_0781ryj</bpmn:flowNodeRef>
</bpmn:lane>
</bpmn:laneSet>
<bpmn:sequenceFlow id="Flow_034d6w0" sourceRef="StartEvent_1" targetRef="Activity_0te11um" />
<bpmn:sequenceFlow id="Flow_1saiyww" sourceRef="Activity_0te11um" targetRef="Activity_0abw2mm" />
<bpmn:sequenceFlow id="Flow_1cjgd14" sourceRef="Activity_0abw2mm" targetRef="Event_1b3ej7k" />
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_034d6w0</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:userTask id="Activity_0te11um" name="贷款申请" camunda:assignee="${general}">
<bpmn:extensionElements>
<camunda:formData>
<camunda:formField id="numValue" label="数字" type="long" />
<camunda:formField id="textValue" label="文本" type="string" />
</camunda:formData>
</bpmn:extensionElements>
<bpmn:incoming>Flow_034d6w0</bpmn:incoming>
<bpmn:outgoing>Flow_1saiyww</bpmn:outgoing>
</bpmn:userTask>
<bpmn:serviceTask id="Activity_0abw2mm" name="身份认证" camunda:delegateExpression="${identityTask}">
<bpmn:incoming>Flow_1saiyww</bpmn:incoming>
<bpmn:outgoing>Flow_1cjgd14</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:endEvent id="Event_1b3ej7k">
<bpmn:incoming>Flow_1cjgd14</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_0gtexbo" sourceRef="Event_0781ryj" targetRef="Activity_0u5947u" />
<bpmn:userTask id="Activity_0u5947u" name="初审1" camunda:assignee="${leader}">
<bpmn:extensionElements>
<camunda:formData>
<camunda:formField id="comment" label="评论" type="string" />
<camunda:formField id="imageUrl" label="图片" type="string" />
</camunda:formData>
</bpmn:extensionElements>
<bpmn:incoming>Flow_0gtexbo</bpmn:incoming>
<bpmn:outgoing>Flow_0l8stkn</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_0l8stkn" sourceRef="Activity_0u5947u" targetRef="Activity_1by69vy" />
<bpmn:serviceTask id="Activity_1by69vy" name="放款通知" camunda:delegateExpression="${lookDoctor}">
<bpmn:incoming>Flow_0l8stkn</bpmn:incoming>
<bpmn:outgoing>Flow_1o8n4yy</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:endEvent id="Event_027qbxn">
<bpmn:incoming>Flow_1o8n4yy</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_1o8n4yy" sourceRef="Activity_1by69vy" targetRef="Event_027qbxn" />
<bpmn:startEvent id="Event_0781ryj" camunda:initiator="starter">
<bpmn:outgoing>Flow_0gtexbo</bpmn:outgoing>
<bpmn:messageEventDefinition id="MessageEventDefinition_1st0cs0" messageRef="Message_3cu91hu" />
</bpmn:startEvent>
</bpmn:process>
<bpmn:message id="Message_3cu91hu" name="Message_3cu91hu" />
</bpmn:definitions>
以上建模是一个简单版本,主要将角色分为两类, 客户角色在提交表单之后。
流转到身份认证节点(实际有好几个节点包括人脸识别,公司信息,家庭信息等)。
在身份认证节点结束后, 将发送消息到信审环节。
关于身份认证代码如下:
@Component("identityTask")
@Slf4j
public class IdentityTask implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) throws Exception {
String businessKey = String.valueOf(delegateExecution.getVariable("businessKey"));
String general = String.valueOf(delegateExecution.getVariable("general"));
RuntimeService runtimeService = delegateExecution.getProcessEngine().getRuntimeService();
IdentityService identityService = delegateExecution.getProcessEngine().getIdentityService();
identityService.setAuthenticatedUserId(general);
Map<String, Object> params = new HashMap<>(4);
params.put("leader", "刘备");
params.put("starter", general);
params.put("number", 12);
params.put("numValue", 12);
params.put("textValue", "测试");
params.put("city", "测试");
//此处将消息发送,启动另外一个信审的流程。
runtimeService.startProcessInstanceByMessage("Message_3cu91hu", businessKey, params);
}
}