全国区块链职业技能大赛第7套后端源码
全国区块链职业技能大赛样题第七套后端源码
目录
背景描述
2022年8月,XXX保险公司正在使用区块链为航空旅客提供自动航班延迟赔偿。
保险公司将区块链用于记录保险产品购买以及通过使用区块链上的智能合约来触发自动支付。该智能合约与记录飞行状态的飞行和空中交通数据库相连。当航班延误超过2小时,赔偿机制将会自动执行,直接发送投保人的“信用卡”账户中,无需实际申领即可获得。这种涵盖航班延误的保险,保险条款清晰,报销程序自动。客户不必亲自去保险公司索赔。也不需要出示任何文件。所有需要的信息已经在保险订阅期间记录。
区块链航班延误险系统业务流程图
现在利用区块链技术实现航班延误险系统,将乘机人、航空公司、保险公司加入到区块链网络中,将购买、航班、保险、保单等信息存储在区块链的分布式网络中,永久有效,无法篡改。在机票延误险场景中,乘机人购买机票之后在系统上预存10元保费;保险公司再在系统上预存相应的赔偿金1000元;如果保险公司没有按时预存赔偿金,系统就直接将保费退还给用户;如果保险公司预存了赔偿金,若航班没有延误,或者延误时间少于4h,系统就将乘机人预存的保费转账给保险公司,同时退还保险公司预存的赔偿金。如果航班延误超过4h,系统也会将保费转账给保险公司,但是会将保险公司预存的赔偿金赔偿给乘机人。
区块链航班延误险系统架构图
数据库表设计
该数据库设计用于航班延误保险系统,包含四个核心表结构。tx_user表存储用户基本信息,包括用户名、密码、身份证号、联系方式及区块链地址;tx_flight表管理航班信息,记录航班号、计划与实际起飞/到达时间;tx_ticket表关联用户与航班,存储机票购买时间、座位号等购票信息;tx_insurance表处理保险业务,包含保险费、赔偿金额、保单内容等字段。数据库采用MySQL 8.0版本,使用utf8mb4字符集,支持完整的航班延误保险业务流程,从用户注册到保险理赔的全链路数据管理。
fdis.sql
/*
Navicat MySQL Data Transfer
Source Server : root
Source Server Version : 80032
Source Host : localhost:3306
Source Database : fdis
Target Server Type : MYSQL
Target Server Version : 80032
File Encoding : 65001
Date: 2024-04-09 17:32:08
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tx_flight
-- ----------------------------
DROP TABLE IF EXISTS `tx_flight`;
CREATE TABLE `tx_flight` (
`id` int NOT NULL AUTO_INCREMENT,
`idNumber` varchar(30) COLLATE utf8mb4_general_ci NOT NULL COMMENT '航班号',
`scheduledDepartureTime` datetime DEFAULT NULL COMMENT '计划起飞时间',
`actualDepartureTime` datetime DEFAULT NULL COMMENT '实际起飞时间',
`scheduledArrivalTime` datetime DEFAULT NULL COMMENT '预计到达时间',
`actualArrivalTime` datetime DEFAULT NULL COMMENT '实际到的时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of tx_flight
-- ----------------------------
INSERT INTO `tx_flight` VALUES ('4', '37070320040818', '2024-02-24 19:37:13', '2024-02-25 00:38:16', '2024-02-25 00:38:16', '2024-02-25 01:38:16');
-- ----------------------------
-- Table structure for tx_insurance
-- ----------------------------
DROP TABLE IF EXISTS `tx_insurance`;
CREATE TABLE `tx_insurance` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '保险单号',
`premium` int NOT NULL COMMENT '保险费',
`compensation` int NOT NULL COMMENT '赔偿金额',
`depositTime` datetime NOT NULL COMMENT '存入赔偿金额的时间',
`policyContent` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '保单内容',
`user_id` int NOT NULL COMMENT '用户id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of tx_insurance
-- ----------------------------
-- ----------------------------
-- Table structure for tx_ticket
-- ----------------------------
DROP TABLE IF EXISTS `tx_ticket`;
CREATE TABLE `tx_ticket` (
`id` int NOT NULL AUTO_INCREMENT,
`ticketPurchaseTime` datetime NOT NULL COMMENT '购买机票时间',
`seatNumber` varchar(4) COLLATE utf8mb4_general_ci NOT NULL COMMENT '座位号',
`user_id` int NOT NULL COMMENT '用户id',
`flight_id` int NOT NULL COMMENT '航班id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of tx_ticket
-- ----------------------------
-- ----------------------------
-- Table structure for tx_user
-- ----------------------------
DROP TABLE IF EXISTS `tx_user`;
CREATE TABLE `tx_user` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(30) COLLATE utf8mb4_general_ci NOT NULL,
`password` varchar(30) COLLATE utf8mb4_general_ci NOT NULL,
`cardId` varchar(30) COLLATE utf8mb4_general_ci NOT NULL,
`phone` varchar(30) COLLATE utf8mb4_general_ci NOT NULL,
`email` varchar(30) COLLATE utf8mb4_general_ci NOT NULL,
`address` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Records of tx_user
-- ----------------------------
INSERT INTO `tx_user` VALUES ('1', 'admin', '123456', '******', '15069680202', 'qhx@163.com', '0x07621d184ce9ad4c6b1301945e5058f682c38795');
INSERT INTO `tx_user` VALUES ('5', 'qhx2006', '1234326', '370703200408182619', '15069680202', 'qhx2004@163.com', '0x6c14ff52c1d70858f6a863ed4ed52c12a6213793');
后端
这是一个基于Go语言开发的航班延误保险系统后端服务,采用Gin框架构建RESTful API。项目集成了FISCO BCOS区块链平台,支持智能合约交互,使用JWT进行身份认证。主要功能模块包括:用户管理(登录注册、账户信息查询)、航班管理(创建航班、修改时间、查询航班列表)、保险管理(创建/删除保险、修改赔偿金额、查询保险信息)。代码结构清晰,采用MVC架构模式,包含控制器层、服务层、工具类等,支持中间件拦截器进行全局处理、分页查询等功能。系统运行在8070端口,提供完整的航班延误保险业务API接口。
func main() {
// 1.创建路由
r := gin.Default()
r.Use(interceptor.Global())
// token中间件
r.Use(interceptor.Token())
// page
r.Use(interceptor.Page())
// test
r.GET(controller.Test.Path, controller.Test.Fun)
{
// 登录、注册
r.POST(controller.Login.Path, controller.Login.Fun)
r.POST(controller.Register.Path, controller.Register.Fun)
r.GET(controller.GetAccountBaseInfo.Path, controller.GetAccountBaseInfo.Fun)
// 航班管理
r.POST(controller.CreateFlight.Path, controller.CreateFlight.Fun)
r.POST(controller.ChangeFlightTime.Path, controller.ChangeFlightTime.Fun)
r.GET(controller.GetAllFlight.Path, controller.GetAllFlight.Fun)
// 保险管理
r.POST(controller.CreateInsurance.Path, controller.CreateInsurance.Fun)
r.POST(controller.RemoveInsurance.Path, controller.RemoveInsurance.Fun)
r.POST(controller.ChangeInsuranceCompensation.Path, controller.ChangeInsuranceCompensation.Fun)
r.POST(controller.ChangeInsuranceActualAmount.Path, controller.ChangeInsuranceActualAmount.Fun)
r.GET(controller.GetAllInsurance.Path, controller.GetAllInsurance.Fun)
r.GET(controller.GetAssignInsuranceList.Path, controller.GetAssignInsuranceList.Fun)
}
r.Run(":8070")
}
更多推荐
所有评论(0)