记账有助于自己:1、消费限制、2、智能账单、3、消费计划4、重点消费。
不少人对于自己的消费没有节制,以致于即使不在自己消费能力之内也去过度消费,从而导致了生活压力的不断增加,严重影响了正常的生活方式。
因此市场上的记账类APP应用如雨后春笋般出现。那么如果要自己开发一款记账类APP的话,需要如何进行数据库存储方案及接口的设计呢?
接下来作者将带着你实操多租户记账类APP数据接口的设计方案
一、数据库表设计(四个库表)
订单表
CREATE TABLE `ngs_bill` (
`BILL_ID` varchar(64) NOT NULL DEFAULT 'UUID()' COMMENT '订单ID',
`BILL_COST` decimal(32,2) DEFAULT NULL COMMENT '花费金额',
`BILL_CONTENT` varchar(32) DEFAULT NULL COMMENT '备注',
`USER_ID` varchar(32) DEFAULT NULL COMMENT '用户ID',
`BILL_TYPE` varchar(32) DEFAULT NULL COMMENT '类型(1:收入,2:支出)',
`BUS_TYPE` varchar(32) DEFAULT NULL COMMENT '用途类型,数据字典BUS_TYPE',
`PAY_TYPE` varchar(32) DEFAULT NULL COMMENT '支付方式,数据字典PAY_TYPE',
`TENANT_ID` varchar(64) DEFAULT NULL COMMENT '所属住户',
`CREATED_BY` varchar(32) DEFAULT NULL COMMENT '创建人',
`CREATED_TIME` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`UPDATED_BY` varchar(32) DEFAULT NULL COMMENT '更新人',
`UPDATED_TIME` datetime DEFAULT NULL COMMENT '更新时间',
`IS_DELETE` varchar(10) DEFAULT '0' COMMENT '是否删除,1:删除',
PRIMARY KEY (`BILL_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表 '
字典表
CREATE TABLE `ngs_dict` (
`DICT_ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典主键',
`DICT_NAME` varchar(64) DEFAULT NULL COMMENT '字典名称',
`DICT_TYPE` varchar(32) DEFAULT NULL COMMENT '字典编码',
`DICT_STATUS` varchar(32) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`TENANT_ID` varchar(64) DEFAULT NULL COMMENT '所属租户',
`SORT_ID` int(11) DEFAULT NULL COMMENT '排序',
`CREATED_BY` varchar(32) DEFAULT NULL COMMENT '创建人',
`CREATED_TIME` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`UPDATED_BY` varchar(32) DEFAULT NULL COMMENT '更新人',
`UPDATED_TIME` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`DICT_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='数据字典
字典子项表
CREATE TABLE `ngs_dict_data` (
`DICT_DATA_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '字典子项主键',
`DICT_DATA_LABEL` varchar(32) DEFAULT NULL COMMENT '字典标签',
`DICT_DATA_VALUE` varchar(32) DEFAULT NULL COMMENT '字典键值',
`DICT_TYPE` varchar(255) DEFAULT NULL COMMENT '字典类型',
`DICT_DATA_STATUS` varchar(32) DEFAULT '0' COMMENT '状态(0正常 ,1停用)',
`SORT_ID` int(11) DEFAULT NULL COMMENT '排序',
`TENANT_ID` varchar(64) DEFAULT NULL COMMENT '所属租户',
`CREATED_BY` varchar(32) DEFAULT NULL COMMENT '创建人',
`CREATED_TIME` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`UPDATED_BY` varchar(32) DEFAULT NULL COMMENT '更新人',
`UPDATED_TIME` datetime DEFAULT NULL COMMENT '更新时间',
`DICT_DATA_IMG` varchar(255) DEFAULT NULL COMMENT '字典子项图片',
`IN_OR_OUT` varchar(10) DEFAULT NULL COMMENT '默认全部,收入:IN,支出:out',
PRIMARY KEY (`DICT_DATA_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COMMENT='数据字典子项 '
用户表
CREATE TABLE `ngs_user` (
`USER_ID` varchar(128) NOT NULL DEFAULT 'UUID()' COMMENT '用户ID',
`USER_NAME` varchar(128) DEFAULT NULL COMMENT '名称',
`LOGIN_ID` varchar(128) DEFAULT NULL COMMENT '登录账号',
`PASS_WORD` varchar(128) DEFAULT NULL COMMENT '密码',
`USER_EMAIL` varchar(32) DEFAULT NULL COMMENT '用户邮箱',
`MOBILE_PHONE` varchar(32) DEFAULT NULL COMMENT '用户电话',
`USER_SEX` varchar(32) DEFAULT NULL COMMENT '用户性别(男,女)',
`BIRTHDAY` date DEFAULT NULL COMMENT '用户生日',
`USER_STATUS` varchar(32) DEFAULT '1' COMMENT '用户状态(1:启用,2:停用)',
`TENANT_ID` varchar(64) DEFAULT NULL COMMENT '所属租户',
`USER_PHOTO` varchar(1024) DEFAULT NULL COMMENT '用户头像',
`CREATED_BY` varchar(32) DEFAULT NULL COMMENT '创建人',
`CREATED_TIME` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`UPDATED_BY` varchar(32) DEFAULT NULL COMMENT '更新人',
`UPDATED_TIME` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`USER_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表 '
二、初始化数据
#一、数据库表
#1、用户表
#NGS_USER
INSERT INTO NGS_USER(USER_ID,USER_NAME,LOGIN_ID,PASS_WORD,USER_EMAIL,MOBILE_PHONE,USER_SEX,BIRTHDAY,TENANT_ID,USER_PHOTO)
VALUES('dijia','迪迦','dijia','dijia','dijia@qq.com','1376087997','男','1992-10-10','e32734cdbad84e3c8d9aca99e39eb836','dijia.jpg');
#2、字典表
#NGS_DICT
INSERT INTO `ngs_dict`(DICT_NAME,DICT_TYPE,TENANT_ID,SORT_ID) VALUES('记账类型','BILL_TYPE','e32734cdbad84e3c8d9aca99e39eb836',1);
INSERT INTO `ngs_dict`(DICT_NAME,DICT_TYPE,TENANT_ID,SORT_ID) VALUES('用途类型','BUS_TYPE','e32734cdbad84e3c8d9aca99e39eb836',2);
INSERT INTO `ngs_dict`(DICT_NAME,DICT_TYPE,TENANT_ID,SORT_ID) VALUES('支付方式','PAY_TYPE','e32734cdbad84e3c8d9aca99e39eb836',3);
#NGS_DICT_DATA
INSERT INTO `ngs_dict_data`(DICT_DATA_LABEL,DICT_DATA_VALUE,DICT_TYPE,SORT_ID,TENANT_ID,DICT_DATA_IMG) VALUES('收入','IN','BILL_TYPE',1,'e32734cdbad84e3c8d9aca99e39eb836','IN.png');
INSERT INTO `ngs_dict_data`(DICT_DATA_LABEL,DICT_DATA_VALUE,DICT_TYPE,SORT_ID,TENANT_ID,DICT_DATA_IMG) VALUES('支出','OUT','BILL_TYPE',2,'e32734cdbad84e3c8d9aca99e39eb836','OUT.png');
INSERT INTO `ngs_dict_data`(DICT_DATA_LABEL,DICT_DATA_VALUE,DICT_TYPE,SORT_ID,TENANT_ID,DICT_DATA_IMG) VALUES('微信','WX','PAY_TYPE',1,'e32734cdbad84e3c8d9aca99e39eb836','wx.png');
INSERT INTO `ngs_dict_data`(DICT_DATA_LABEL,DICT_DATA_VALUE,DICT_TYPE,SORT_ID,TENANT_ID,DICT_DATA_IMG) VALUES('支付宝','ZFB','PAY_TYPE',2,'e32734cdbad84e3c8d9aca99e39eb836','zfb.png');
INSERT INTO `ngs_dict_data`(DICT_DATA_LABEL,DICT_DATA_VALUE,DICT_TYPE,SORT_ID,TENANT_ID,DICT_DATA_IMG) VALUES('银行卡','YHK','PAY_TYPE',1,'e32734cdbad84e3c8d9aca99e39eb836','YHK.png');
INSERT INTO `ngs_dict_data`(DICT_DATA_LABEL,DICT_DATA_VALUE,DICT_TYPE,SORT_ID,TENANT_ID,DICT_DATA_IMG,IN_OR_OUT) VALUES('吃饭','CF','BUS_TYPE',1,'e32734cdbad84e3c8d9aca99e39eb836','wx.png','OUT');
INSERT INTO `ngs_dict_data`(DICT_DATA_LABEL,DICT_DATA_VALUE,DICT_TYPE,SORT_ID,TENANT_ID,DICT_DATA_IMG,IN_OR_OUT) VALUES('兼职','JZ','BUS_TYPE',2,'e32734cdbad84e3c8d9aca99e39eb836','zfb.png','IN');
INSERT INTO `ngs_dict_data`(DICT_DATA_LABEL,DICT_DATA_VALUE,DICT_TYPE,SORT_ID,TENANT_ID,DICT_DATA_IMG) VALUES('其他','QT','BUS_TYPE',1,'e32734cdbad84e3c8d9aca99e39eb836','YHK.png');
#3、账单表 NGS_BILL
INSERT INTO NGS_BILL(BILL_COST,BILL_CONTENT,USER_ID,BILL_TYPE,BUS_TYPE,PAY_TYPE,TENANT_ID)
VALUES(100,'吃饭请客','dijia','支出','吃饭','微信','e32734cdbad84e3c8d9aca99e39eb836');
三、接口设计(18个接口)

接口明细
一、低代码平台接口开发规则
如果是=判断,则需要用对应的:字段=#param#,前端传入参数需要拼接单引号
如果是in方式,则需要用:字段 in($param$),前端入参时,需要在每个参数的两边拼接上单引号。
对于能确定的参数是必传的,则需要把该参数两边的大括号“}”去掉
#select * from dual l where {l.type =#type#} and status in($data1$)
#二、接口
#1、用户(3个)
#注册接口
INSERT INTO NGS_USER(USER_ID,USER_NAME,LOGIN_ID,PASS_WORD,USER_EMAIL,MOBILE_PHONE,USER_SEX,BIRTHDAY,TENANT_ID,USER_PHOTO) VALUES(
#USER_ID#,#USER_NAME#,#LOGIN_ID#,#PASS_WORD#,#USER_EMAIL#,#MOBILE_PHONE#,#USER_SEX#,#BIRTHDAY#,#TENANT_ID#,#USER_PHOTO#)
#登录接口/获取用户信息接口
SELECT * FROM NGS_USER R WHERE R.USER_ID=#USER_ID# AND R.PASS_WORD=#PASS_WORD#
#修改用户信息接口
UPDATE NGS_USER SET
USER_NAME=#USER_NAME#,USER_EMAIL=#USER_EMAIL#,USER_SEX=#USER_SEX#,BIRTHDAY=#BIRTHDAY#,USER_PHOTO=#USER_PHOTO# WHERE TENANT_ID=#TENANT_ID# AND USER_ID=#USER_ID#
#2、数据字典(6个)
#新增数据字典接口
INSERT INTO ngs_dict(DICT_NAME,DICT_TYPE,TENANT_ID,SORT_ID) VALUES(#DICT_NAME#,#DICT_TYPE#,#TENANT_ID#,#SORT_ID#)
#修改数据字典接口
UPDATE ngs_dict SET DICT_NAME=#DICT_NAME# ,SORT_ID=#SORT_ID# WHERE DICT_ID=#DICT_ID#
#查询数据字典接口
SELECT * FROM ngs_dict D WHERE D.TENANT_ID =#TENANT_ID#
#新增数据字典子项接口
INSERT INTO ngs_dict_data(DICT_DATA_LABEL,DICT_DATA_VALUE,DICT_TYPE,SORT_ID,TENANT_ID,DICT_DATA_IMG) VALUES(
#DICT_DATA_LABEL#,#DICT_DATA_VALUE#,#DICT_TYPE#,#SORT_ID#,#TENANT_ID#,#DICT_DATA_IMG#)
#修改数据字典子项接口
UPDATE ngs_dict_data SET DICT_DATA_LABEL=#DICT_DATA_LABEL# , DICT_DATA_VALUE=#DICT_DATA_VALUE#,SORT_ID=#SORT_ID#,DICT_DATA_IMG=#DICT_DATA_IMG# WHERE TENANT_ID=#TENANT_ID# AND DICT_DATA_ID=#DICT_DATA_ID#
#查询数据字典子项列表接口
SELECT * FROM ngs_dict_data D WHERE D.TENANT_ID=#TENANT_ID# AND D.DICT_TYPE=#DICT_TYPE#
#3、支付方式数据字典(4个)
#查询支付方式接口
SELECT * FROM ngs_dict_data WHERE TENANT_ID=#TENANT_ID# AND DICT_TYPE='PAY_TYPE'
#查询支出用途接口
SELECT * FROM ngs_dict_data WHERE TENANT_ID=#TENANT_ID# AND DICT_TYPE='BILL_TYPE' AND (IN_OR_OUT IS NULL OR IN_OR_OUT='OUT')
#查询收入用途接口
SELECT * FROM ngs_dict_data WHERE TENANT_ID=#TENANT_ID# AND DICT_TYPE='BILL_TYPE' AND (IN_OR_OUT IS NULL OR IN_OR_OUT='IN')
#查询用途接口
SELECT * FROM ngs_dict_data WHERE TENANT_ID=#TENANT_ID# AND DICT_TYPE='BUS_TYPE'
#4、账单(4个)
#新增账单接口
INSERT INTO NGS_BILL(BILL_COST,BILL_CONTENT,USER_ID,BILL_TYPE,BUS_TYPE,PAY_TYPE,TENANT_ID)
VALUES(#BILL_COST#,#BILL_CONTENT#,#USER_ID#,#BILL_TYPE#,#BUS_TYPE#,#PAY_TYPE#,#TENANT_ID#)
#修改账单接口
UPDATE NGS_BILL SET BILL_COST=#BILL_COST#,BILL_CONTENT=#BILL_CONTENT#,USER_ID=#USER_ID#BILL_TYPE=#BILL_TYPE#,BUS_TYPE=#BUS_TYPE#,PAY_TYPE=#PAY_TYPE#
WHERE TENANT_ID=#TENANT_ID# AND BILL_ID=#BILL_ID#
#查询账单接口
SELECT * FROM NGS_BILL WHERE TENANT_ID=#TENANT_ID# { AND BILL_ID=#BILL_ID# }
#删除账单接口
DELETE FROM NGS_BILL WHERE TENANT_ID=#TENANT_ID# AND BILL_ID=#BILL_ID#
下一篇文章将以视频实操的方式给大家介绍一下如何在不写代码,只通过写SQL来快速开发一套多租户记账工具的数据接口服务。