简介
业务想对贷后的人员贷款金额进行适当的调整,来优化贷后流程并且精准投放贷款给特定的人群。
流程主要包含四个部分:
- 数仓出数到 SFTP 系统
- Spark 作业加载数据到 TIDB 表中
- 联机主任务和子任务处理数据库数据(该文档的核心工作)
- 贷后进行额度的审批调额(其他组的工作)
核心流程图:

跑批调额系统表设计
输入表:
sql
DROP TABLE IF EXISTS `input_info_table_0`;
CREATE TABLE `input_info_table_0` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
`lmt_id` decimal(50, 2) NOT NULL COMMENT '子额度',
`comment` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of input_info_table_0(读者自己去建表1,2,3 等等的表)
-- ----------------------------
INSERT INTO `input_info_table_0` VALUES (1, 23.23, 'ssss');
INSERT INTO `input_info_table_0` VALUES (2, 24.09, 'test');
INSERT INTO `input_info_table_0` VALUES (3, 87.20, 'test');
INSERT INTO `input_info_table_0` VALUES (4, 23.21, 'test');
INSERT INTO `input_info_table_0` VALUES (5, 872.20, 'test');
INSERT INTO `input_info_table_0` VALUES (6, 654.20, 'test');
INSERT INTO `input_info_table_0` VALUES (7, 87.00, 'test');
INSERT INTO `input_info_table_0` VALUES (8, 98.00, 'test');
INSERT INTO `input_info_table_0` VALUES (9, 90.00, 'test');
INSERT INTO `input_info_table_0` VALUES (10, 654.98, 'test');
INSERT INTO `input_info_table_0` VALUES (11, 998.23, 'test');
INSERT INTO `input_info_table_0` VALUES (12, 100.00, 'test');
INSERT INTO `input_info_table_0` VALUES (13, 99.43, 'test');
主任务表:
sql
DROP TABLE IF EXISTS `batch_maintask_info`;
CREATE TABLE `batch_maintask_info` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
`main_taskId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主任务id',
`dw_snsh_dt` datetime NULL DEFAULT NULL COMMENT '数据快照日期',
`start_time` datetime NULL DEFAULT NULL COMMENT '开始时间',
`end_time` datetime NULL DEFAULT NULL COMMENT '结束时间',
`input_table_total_count` int NOT NULL COMMENT '输入表总数据量',
`inc_count` int NOT NULL COMMENT '调增记录总数',
`dec_count` int NOT NULL COMMENT '调减记录总数',
`status` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主任务状态',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- 自测数据
INSERT INTO `batch_maintask_info` VALUES (1, 'main_taskId', '2025-07-27 10:58:38', '2025-07-27 10:58:34', '2025-07-28 10:58:41', 10, 0, 0, 'RUNNING', '2025-07-27 10:59:35');
子任务表:
sql
DROP TABLE IF EXISTS `batch_subtask_info`;
CREATE TABLE `batch_subtask_info` (
`sub_taskId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '子任务id',
`main_taskId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主任务id',
`input_table_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '输入表名',
`input_table_total_count` int NOT NULL COMMENT '输入表记录总数',
`input_table_start` int NOT NULL COMMENT '该子任务负责的区间记录的起始索引',
`input_table_end` int NOT NULL COMMENT '该子任务负责的区间记录的末尾索引',
`already_running_count` int NULL DEFAULT NULL COMMENT '子任务已运行记录条数',
`status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '状态流程',
`last_query_key` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '查询的最后一条记录(用于续传)',
`error_msg` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '错误信息',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`sub_taskId`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
--自测数据
INSERT INTO `batch_subtask_info` VALUES ('sub_taskId_0', 'main_taskId', 'input_info_table_0', 13, 0, 13, 0, 'INIT', '', NULL, '2025-07-27 17:37:14');
批量调额明细结果表:
sql
DROP TABLE IF EXISTS `batch_ter_result`;
CREATE TABLE `batch_ter_result` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
`sub_taskId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '子任务id',
`main_taskId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主任务id',
`dw_snsh_dt` datetime NULL DEFAULT NULL COMMENT '数据快照日期',
`clt_num` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户编号',
`root_lmt_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '根额度编号',
`lmt_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '子额度编号',
`lmt_chk_rst` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '额度结论',
`old_lmt` decimal(10, 2) NOT NULL COMMENT '旧额度',
`new_lmt` decimal(10, 2) NOT NULL COMMENT '新额度',
`rate_chk_rst` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '利率结论',
`old_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '旧利率\r\n',
`new_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '新利率',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
发起主任务功能
请求报文:
http
post:http://localhost:8088/batchmaintask/putDatas
json
{
"taskId": "main_taskId_0",
"inputCount": 100,
"status": "INIT"
}
响应报文:
json
{
"code": 200,
"data": {
"insertNum": 1
},
"message": ""
}
发起子任务功能
这个功能是由主任务调起的,但是方便测试,也可以单独调起。
请求报文:
http
post:http://localhost:8088/batchsubtask/putDatas
响应报文:
json
{
"subTaskId":"sub_taskId_0"
}