# fm **Repository Path**: liuqiuming/fm ## Basic Information - **Project Name**: fm - **Description**: 财务管理后台 - **Primary Language**: Go - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2021-05-08 - **Last Updated**: 2024-10-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 财务管理-后端 #### 一、功能介绍 1、实现用户注册、登录、修改用户信息、注销用户等API ------ ``` //创建一个路由 r := gin.Default() //新增一个用户路由组,用于注册,登录,更新用户数据以及删除用户 user := r.Group("/user") { user.POST("/register", api.RegisterHandler) /****************************************************** url: http://192.168.0.1:8080/user/register method:POST headers: Content-Type application/json { "user_name":"user", "password": "pass123", "mobile":"18800008888", "email":"exapmle@abc.com", "nick_name":"牛B" } *********************************************************/ user.POST("/login", api.LoginHandler) /******************************************************* request url: http://192.168.0.1:8080/user/login method:POST headers: Content-Type application/json { "user_name":user", "password":"pass123" } response: { "status": true, "token": "eyJhbGciOiJI6cC9tCO3X-r8IXvDdmclBo", "user_id": 340916030, "user_name": "user" } ********************************************************/ user.Use(api.NeedToken) //更新和删除用户需要已登录,检查用户令牌 user.POST("/update", api.UpdateUserHandler) user.DELETE("/delete", api.DelUserHandler) user.GET("/query", api.QueryUserHandler) } ``` 2、实现新建账户、删除账户API ``` account := r.Group("/account") { account.GET("/new",api.NewAccountHandler) account.DELETE("/del",api.DelAccountHandler) } ``` 3、向账户新增记录、删除记录、修改记录,比如收入(income)、支出(expenses)、转账(transfer)、借贷(loans) ``` account.POST("/addrecord",api.AddRecordHandler) account.POST("/delrecord",api.AddRecordHandler) account.POST("/updaterecord",api.AddRecordHandler) ``` 4、各账户记录格式: - 债权债务: - 借出记录: - 银行存款 ¥-1000.00 cause:借出 - 债权债务 ¥+1000.00 cause:借出 债务人:xxx - 收回记录: - 银行账记 ¥+1000.00 cause:收回 - 债权债务 ¥-1000.00 cause:收回 债务人:xxx - 借款记录: - 银得账户 ¥+1000.00 cause:借入 - 债权债务 ¥-1000.00 cause:借入 债权人:xxx - 还款记录: - 银行账户:¥-1000.00 cause:还款 - 债权债务:¥+1000.00 cause:还款 债权人:xxx - 转账记录: - A账户:-1000 - B账户:+1000 - 收入记录: - A账户:+1000 - 支出记录: - A账户:-1000 - 投资记录: - 买入: - 投资账户:-1000 - 投资标的:xxx 增加 数量x - 卖出: - 投资账户:+2000 - 投资标的:xxx 减少 数量y #### 二、数据库设计 1、golang +Mysql 开发 2、数据库连接: ``` package database const ( USERNAME = "fm" PASSWORD = "fm" NETWORK = "tcp" SERVER = "192.168.101.100" PORT = 3306 DATABASE = "fm" ) mysql> show tables; +--------------+ | Tables_in_fm | +--------------+ | accounts | | accounts_log | | expense | | income | | org | | person | | user | +--------------+ ``` 3、user表格: ``` mysql> desc user; +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | user_id | int(11) | NO | PRI | NULL | | | user_name | varchar(50) | YES | UNI | NULL | | | nick_name | varchar(80) | YES | | NULL | | | password_hash | varchar(255) | YES | | NULL | | | mobile | varchar(20) | YES | UNI | NULL | | | email | varchar(50) | YES | UNI | NULL | | | weixin | varchar(50) | YES | UNI | NULL | | | qq | varchar(20) | YES | UNI | NULL | | | created_at | int(11) | YES | | NULL | | | deleted_at | int(11) | YES | | NULL | | | deleted | tinyint(4) | NO | | 0 | | +---------------+--------------+------+-----+---------+-------+ 11 rows in set (0.00 sec) mysql> select * from user; +---------+-----------+-----------+--------------------------------------------------------------+-------------+----------------+-------------+---------+------------+------------+---------+ | user_id | user_name | nick_name | password_hash | mobile | email | weixin | qq | created_at | deleted_at | deleted | +---------+-----------+-----------+--------------------------------------------------------------+-------------+----------------+-------------+---------+------------+------------+---------+ | 0 | system | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | | 1 | liuqm | 牛牛 | $2a$10$UKF0fnTcJJ32fH5EPrRV9u472jHkrjfxASja2vARh5cUL9VjJ4vfG | 13377516603 | 7609369@qq.com | liuqiumings | 7609369 | 1622968273 | 0 | 0 | +---------+-----------+-----------+--------------------------------------------------------------+-------------+----------------+-------------+---------+------------+------------+---------+ 2 rows in set (0.01 sec) ``` 4、accounts表格: ``` mysql> desc accounts; +------------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+----------------+ | account_id | int(11) | NO | PRI | NULL | auto_increment | | user_id | int(11) | NO | MUL | NULL | | | name | varchar(80) | NO | | NULL | | | org_id | int(11) | YES | MUL | NULL | | | person_id | int(11) | YES | MUL | NULL | | | balance | decimal(10,2) | NO | | 0.00 | | | deleted | tinyint(4) | YES | | 0 | | +------------+---------------+------+-----+---------+----------------+ mysql> select * from accounts; +------------+---------+-----------+--------+-----------+---------+---------+ | account_id | user_id | name | org_id | person_id | balance | deleted | +------------+---------+-----------+--------+-----------+---------+---------+ | 1 | 1 | 现金 | NULL | 1 | 7113.21 | 0 | | 2 | 1 | 工行卡 | 1 | 1 | 5299.78 | 0 | +------------+---------+-----------+--------+-----------+---------+---------+ ``` 5、账户记录数据表: ``` mysql> desc accounts_log; +-------------+---------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_id | int(11) | NO | MUL | NULL | | | account_id | int(11) | NO | MUL | NULL | | | tradetime | datetime | NO | | CURRENT_TIMESTAMP | | | modifytime | datetime | YES | | CURRENT_TIMESTAMP | | | amount | decimal(10,2) | NO | | NULL | | | summary | varchar(80) | YES | | NULL | | | category | varchar(20) | NO | | NULL | | | category_id | int(11) | YES | | NULL | | | org_id | int(11) | YES | MUL | NULL | | | person_id | int(11) | YES | MUL | NULL | | +-------------+---------------+------+-----+-------------------+----------------+ mysql> select * from accounts_log; +----+---------+------------+---------------------+---------------------+----------+--------------+----------+-------------+--------+-----------+ | id | user_id | account_id | tradetime | modifytime | amount | summary | category | category_id | org_id | person_id | +----+---------+------------+---------------------+---------------------+----------+--------------+----------+-------------+--------+-----------+ | 1 | 1 | 1 | 2021-06-06 16:35:46 | 2021-06-06 16:34:40 | 1000.00 | 余额调整 | adjust | NULL | NULL | 1 | | 2 | 1 | 2 | 2021-06-06 16:37:07 | 2021-06-06 16:36:04 | 2000.00 | 余额调整 | adjust | NULL | 2 | 1 | | 3 | 1 | 1 | 2021-06-06 16:39:07 | 2021-06-06 16:37:23 | -200.21 | 消费 | expense | 1 | NULL | 1 | | 4 | 1 | 2 | 2021-06-06 16:40:40 | 2021-06-06 16:39:38 | 5000.00 | 工资收入 | income | 1 | 2 | 1 | | 5 | 1 | 2 | 2021-06-06 16:42:20 | 2021-06-06 16:41:19 | -500.22 | 消费 | expense | 15 | 2 | 1 | | 6 | 1 | 2 | 2021-06-06 16:43:29 | 2021-06-06 16:42:40 | -1200.00 | 转账 | transfer | NULL | NULL | 1 | | 7 | 1 | 1 | 2021-06-06 16:44:15 | 2021-06-06 16:43:41 | 1200.00 | 转账 | transfer | NULL | NULL | 1 | | 8 | 1 | 1 | 2021-06-07 20:29:51 | 2021-06-07 20:29:51 | 120.33 | 其它收入 | income | NULL | NULL | NULL | | 9 | 1 | 1 | 2021-06-08 21:54:06 | 2021-06-08 21:54:06 | 200.33 | 收入 | income | 0 | 2 | 1 | | 10 | 1 | 1 | 2021-06-08 21:58:05 | 2021-06-08 21:58:05 | 3000.00 | 收入 | income | 0 | 2 | 1 | | 11 | 1 | 1 | 2021-06-10 19:14:03 | 2021-06-10 19:14:03 | 300.98 | 收入 | income | NULL | 2 | 1 | | 12 | 1 | 1 | 2021-06-10 19:18:17 | 2021-06-10 19:18:17 | 400.98 | 收入 | income | NULL | 2 | 1 | | 13 | 1 | 1 | 2021-06-10 19:19:23 | 2021-06-10 19:56:06 | 101.98 | 收入 | income | NULL | 2 | 1 | | 18 | 1 | 1 | 2021-06-12 15:16:18 | 2021-06-12 15:16:18 | -1010.18 | 支出 | expense | 1 | 2 | 1 | | 19 | 1 | 1 | 2021-06-12 15:17:03 | 2021-06-12 15:17:03 | 1000.00 | 支出 | expense | 1 | 2 | 1 | | 20 | 1 | 1 | 2021-06-15 19:32:56 | 2021-06-15 19:32:56 | 999.00 | 支出 | expense | 1 | 2 | 1 | +----+---------+------------+---------------------+---------------------+----------+--------------+----------+-------------+--------+-----------+ ``` 6、收支明细表: ``` mysql> select * from income; +----+---------+--------------+--------------+ | id | user_id | name_level1 | name_level2 | +----+---------+--------------+--------------+ | 1 | 0 | 职业工薪 | 工资 | | 2 | 0 | 职业工薪 | 奖金 | | 3 | 0 | 职业工薪 | 加班工资 | | 4 | 0 | 职业工薪 | 补助津贴 | | 5 | 0 | 职业工薪 | 其它 | | 6 | 0 | 业余收入 | 兼职收入 | | 7 | 0 | 业余收入 | 稿费版税 | | 8 | 0 | 业余收入 | 业余项目 | | 9 | 0 | 业余收入 | 其它 | | 10 | 0 | 人情收入 | 红包 | | 11 | 0 | 人情收入 | 礼金 | | 12 | 0 | 人情收入 | 其它 | | 13 | 0 | 人情收入 | 赡养费 | | 14 | 0 | 人情收入 | 抚养费 | | 15 | 0 | 意外所得 | NULL | | 16 | 0 | 租金收入 | NULL | | 17 | 0 | 分红 | NULL | | 18 | 0 | 其它收入 | NULL | | 19 | 0 | 投资收益 | NULL | | 20 | 0 | 利息收入 | NULL | | 21 | 0 | 对账收入 | NULL | | 22 | 0 | 坏账收入 | NULL | | 23 | 0 | 售物收入 | NULL | | 24 | 0 | 红利 | NULL | | 25 | 0 | 债权利息 | NULL | | 26 | 0 | 保险收入 | NULL | | 27 | 0 | 资金清理 | NULL | +----+---------+--------------+--------------+ mysql> select * from expense; +----+---------+--------------------+--------------------+ | id | user_id | name_level1 | name_level2 | +----+---------+--------------------+--------------------+ | 1 | 0 | 伙食费 | NULL | | 2 | 0 | 食物 | NULL | | 3 | 0 | 餐费 | NULL | | 4 | 0 | 交通 | 公交 | | 5 | 0 | 交通 | 出租车 | | 6 | 0 | 交通 | 地铁 | | 7 | 0 | 交通 | 飞机 | | 8 | 0 | 交通 | 火车 | | 9 | 0 | 交通 | 长途汽车 | | 10 | 0 | 交通 | 汽油费 | | 11 | 0 | 交通 | 停车费 | | 12 | 0 | 交通 | 过路费 | | 13 | 0 | 交通 | 养路费 | | 14 | 0 | 交通 | 违章交费 | | 15 | 0 | 交通 | 车辆维护 | | 16 | 0 | 交通 | 车辆年检 | | 17 | 0 | 交通 | 驾照年检 | | 18 | 0 | 交通 | 车辆保险 | | 19 | 0 | 交通 | 车库管理费 | | 20 | 0 | 交通 | 其它 | | 21 | 0 | 日常用品 | 卫浴洗涤用品 | | 22 | 0 | 日常用品 | 家居物品 | | 23 | 0 | 日常用品 | 厨房用具 | | 24 | 0 | 日常用品 | 其它 | | 25 | 0 | 服装鞋帽 | 衣服 | | 26 | 0 | 服装鞋帽 | 鞋类 | | 27 | 0 | 服装鞋帽 | 帽类 | | 28 | 0 | 服装鞋帽 | 饰品 | | 29 | 0 | 服装鞋帽 | 其它 | | 30 | 0 | 通迅费 | 电话费 | | 31 | 0 | 通迅费 | 手机费 | | 32 | 0 | 通迅费 | 上网费 | | 33 | 0 | 通迅费 | 邮寄费 | | 34 | 0 | 通迅费 | 其它 | | 35 | 0 | 医疗保健 | 药品 | | 36 | 0 | 医疗保健 | 门诊 | | 37 | 0 | 医疗保健 | 住院 | | 38 | 0 | 医疗保健 | 治疗费 | | 39 | 0 | 医疗保健 | 体检 | | 40 | 0 | 医疗保健 | 保健护理用品 | | 41 | 0 | 医疗保健 | 其它 | | 42 | 0 | 休闲娱乐 | 外出就餐 | | 43 | 0 | 休闲娱乐 | 娱乐费 | | 44 | 0 | 休闲娱乐 | 宠物支出 | | 45 | 0 | 休闲娱乐 | 旅游度假 | | 46 | 0 | 休闲娱乐 | 其它 | | 47 | 0 | 物管 | 电费 | | 48 | 0 | 物管 | 燃气费 | | 49 | 0 | 物管 | 水费 | | 50 | 0 | 物管 | 房租 | | 51 | 0 | 物管 | 暖气费 | | 52 | 0 | 物管 | 物业管理费 | | 53 | 0 | 物管 | 卫生费 | | 54 | 0 | 物管 | 其它 | | 55 | 0 | 人情支出 | 礼品礼金 | | 56 | 0 | 人情支出 | 请客 | | 57 | 0 | 人情支出 | 交际费用 | | 58 | 0 | 人情支出 | 人情往来 | | 59 | 0 | 人情支出 | 其它 | | 60 | 0 | 美容健身 | 健身 | | 61 | 0 | 美容健身 | 美容美发 | | 62 | 0 | 美容健身 | 化妆保养品 | | 63 | 0 | 美容健身 | 其它 | | 64 | 0 | 父母赡养 | 每月供养 | | 65 | 0 | 父母赡养 | 医疗保健 | | 66 | 0 | 父母赡养 | 其它 | | 67 | 0 | 教育培训 | 文化用品 | | 68 | 0 | 教育培训 | 软件 | | 69 | 0 | 教育培训 | 会费 | | 70 | 0 | 教育培训 | 其它 | | 71 | 0 | 维修保养 | 电器 | | 72 | 0 | 维修保养 | 房屋 | | 73 | 0 | 维修保养 | 家具 | | 74 | 0 | 维修保养 | 其它 | | 75 | 0 | 生儿育女 | 产检费 | | 76 | 0 | 生儿育女 | 生育费 | | 77 | 0 | 生儿育女 | 托儿费 | | 78 | 0 | 生儿育女 | 保姆费 | | 79 | 0 | 生儿育女 | 喂哺用具 | | 80 | 0 | 生儿育女 | 儿保费 | | 81 | 0 | 生儿育女 | 学杂费 | | 82 | 0 | 生儿育女 | 玩具 | | 83 | 0 | 生儿育女 | 其它 | | 84 | 0 | 慈善捐助 | NULL | | 85 | 0 | 意外损失 | NULL | | 86 | 0 | 其它支出 | NULL | | 87 | 0 | 手续费 | NULL | | 88 | 0 | 利息支出 | NULL | | 89 | 0 | 对账支出 | NULL | | 90 | 0 | 坏账支出 | NULL | | 91 | 0 | 购物费用 | NULL | | 92 | 0 | 投资杂费 | NULL | | 93 | 0 | 资产费用 | NULL | | 94 | 0 | 债务利息支出 | NULL | | 95 | 0 | 保险支出 | NULL | | 96 | 0 | 投资亏损 | NULL | +----+---------+--------------------+--------------------+ ``` 7、组织与个人列表: ``` mysql> select * from org; +--------+---------+--------------+ | org_id | user_id | name | +--------+---------+--------------+ | 1 | 1 | 工商银行 | | 2 | 1 | 建设银行 | | 3 | 1 | 广发银行 | | 4 | 1 | 中国银行 | | 5 | 1 | 农业银行 | | 6 | 1 | 广发证券 | | 7 | 1 | 东莞证券 | | 10 | 1 | 银河证券 | | 11 | 1 | 东方财富 | | 13 | 1 | 腾讯 | | 14 | 1 | 阿里巴巴 | +--------+---------+--------------+ mysql> select * from person; +-----------+---------+--------+--------+------+ | person_id | user_id | name | gender | age | +-----------+---------+--------+--------+------+ | 1 | 1 | 小牛 | 男 | 20 | | 2 | 1 | 牛爸 | 男 | 45 | | 3 | 1 | 牛妈 | 女 | 43 | | 4 | 1 | 小刚 | 男 | 19 | +-----------+---------+--------+--------+------+ ```