跑批调额系统说明文档

简介

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

流程主要包含四个部分:

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

相关推荐
一只乔哇噻1 小时前
java后端工程师+AI大模型开发进修ing(研一版‖day61)
java·开发语言·学习·算法·语言模型
拾忆,想起1 小时前
Dubbo服务降级全攻略:构建韧性微服务系统的守护盾
java·前端·网络·微服务·架构·dubbo
速易达网络1 小时前
ASP.NET MVC 前后端商城系统介绍
后端·asp.net·mvc
inrgihc1 小时前
Spring Boot 注册 Servlet 的五种方法
spring boot·后端·servlet
zlpzlpzyd1 小时前
jetbrains系工具idea和webstorm默认编辑器设置
java·intellij-idea·webstorm
@YDWLCloud1 小时前
谷歌云 Compute Engine 实操手册:虚拟机配置与负载均衡全流程
java·运维·服务器·云计算·负载均衡·googlecloud
ldmd2841 小时前
Go语言实战:入门篇-6:锁、测试、反射和低级编程
开发语言·后端·golang
武子康1 小时前
大数据-178 Elasticsearch 7.3 Java 实战:索引与文档 CRUD 全流程示例
大数据·后端·elasticsearch
bing.shao1 小时前
Golang中实现基于角色的访问控制(RBAC)
开发语言·后端·golang