跑批调额系统说明文档

简介

业务想对贷后的人员贷款金额进行适当的调整,来优化贷后流程并且精准投放贷款给特定的人群。

流程主要包含四个部分:

  • 数仓出数到 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"
}

代码地址

gitee.com/spicy-hot-w...

相关推荐
oak隔壁找我几秒前
SpringBoot 将项目打包成 Fat JAR(肥包),核心原理
后端
言慢行善33 分钟前
sqlserver模糊查询问题
java·数据库·sqlserver
专吃海绵宝宝菠萝屋的派大星38 分钟前
使用Dify对接自己开发的mcp
java·服务器·前端
大数据新鸟1 小时前
操作系统之虚拟内存
java·服务器·网络
Tong Z1 小时前
常见的限流算法和实现原理
java·开发语言
凭君语未可1 小时前
Java 中的实现类是什么
java·开发语言
He少年1 小时前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
克里斯蒂亚诺更新1 小时前
myeclipse的pojie
java·ide·myeclipse
迷藏4942 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构