转供电电费服务系统(后端项目)
Go to file
2023-08-04 14:38:03 +08:00
.idea a 2023-07-25 10:09:53 +08:00
.vscode build(debug):增加允许在VSCode中使用jsoniter进行编译的功能。 2022-09-19 08:52:25 +08:00
cache enhance(cache):放开缓存管理中对于构造缓存键的方法。 2023-06-16 10:43:06 +08:00
config 完成获取系统基准线损率功能 2023-07-26 10:03:01 +08:00
controller [天神模式]删除符合条件表计完成 2023-07-31 10:15:14 +08:00
excel enhance(meter):调整输出表计抄表模板中数值的格式。 2023-06-13 15:54:06 +08:00
exceptions enahnce(error):增强未成功完成操作的错误描述。 2023-06-17 10:43:51 +08:00
global new:新增withdraw请求,该暂无真实数据 2023-07-18 16:07:56 +08:00
logger enhance(log):调整日志系统配置。 2023-06-12 17:09:13 +08:00
model [计算相关]计算线损以及调整线损(完成) 2023-08-04 09:39:59 +08:00
repository [计算相关]获取所有的物业表计,然后对所有的物业表计电量进行计算。(完成) 2023-08-03 16:59:58 +08:00
response new:新增withdraw请求,该暂无真实数据 2023-07-18 16:07:56 +08:00
router [天神模式]删除指定商户完成 2023-07-27 14:01:45 +08:00
security enahnce(security):改进对于令牌的获取。 2023-06-11 17:35:50 +08:00
service enhance(calculate): 增加方法:计算商户的合计电费信息,并归总与商户相关关联的表计记录 2023-08-04 14:38:03 +08:00
tools [计算相关]获取所有的物业表计,然后对所有的物业表计电量进行计算。(完成) 2023-08-03 16:59:58 +08:00
types enhance(types):增加区间类型中关于空区间的判断。 2023-06-27 17:00:44 +08:00
vo 修改分页检索核算报表一些细节,完成审核撤回报表功能 2023-07-25 15:31:35 +08:00
.gitignore chore(project):增加版本库文件屏蔽,加入运行配置。 2022-09-15 09:05:38 +08:00
Dockerfile build(container):编译用容器镜像改用国内镜像。 2023-06-20 13:19:36 +08:00
go.mod build(deps):升级部分依赖库的版本。 2023-06-13 20:43:24 +08:00
go.sum build(deps):升级部分依赖库的版本。 2023-06-13 20:43:24 +08:00
main.go refactor(types):将日期时间类型提取到公共的类型定义包中。 2023-06-05 21:53:05 +08:00
Readme.md doc(readme):更新数据嵌套的说明。 2022-09-19 14:38:48 +08:00
regions.csv feat(region):完成行政区划获取的功能。 2022-08-13 20:11:16 +08:00
settings.yaml 完成获取系统基准线损率功能 2023-07-26 10:03:01 +08:00

转供电电费服务项目(后端项目)

该项目为华昌宝能发布的采用众包模式承接的小型Web服务系统项目。

项目采用以下技术框架:

  • Golang 1.19
  • Gin
  • Xorm

项目详细设计方案见详细设计方案,该设计方案未经许可,禁止私自修改。

项目任务分配与状态概览表见任务概况

项目代码编写要点

数据库访问

项目所式的数据库框架采用的是Bun该框架采用贴近SQL语句的数据库方式但是在使用过程中需注意以下几点。

  1. 要执行一个语句,必须提供一个context.Context类型的上下文,推荐采用context.WithTimeout()生成。上下文中携带的超时时间应该能覆盖超时时间所需要运行的全部语句。
  2. 语句中用来指定操作目标数据表的Model()方法其接受的是一个目标变量的地址如果传入的是一个slice那么就一定需要使用&获取其地址,如果是使用&struct{}或者new()初始化的,则可以直接作为参数传入。
  3. 数据库中的时间字段都是带有时区的但是bun中都是使用UTC时间的对于数据库中timestamptz类型的字段,可以正常的按照数据库配置的时区保存时间,但是对于没有携带时区的date类型,就不能直接向其中传入time.Time类型的参数了,必须手工将其转化为字符串形式。
  4. 使用Relation关联获取其他数据表内容的时候Relation()提及的数据表中配置的alias名称将不起作用语句中的数据别名实际上是被关联字段名称的snake_case形式。
  5. 需要进行嵌套Relation选择的时候嵌套的Relation可以采用Relation("A.B")的形式来指示使用数据模型A中的Relation B。
  6. 如果需要只从Relation关联数据表中选择一部分字段不能直接在主查询语句中使用Column()方法,必须在Relation()方法的第二个参数中声明。
  7. 如果需要对Relation关联表中的字段设置Where条件子句,那么就必须使用relation_name__column_name的双下划线字段选择形式,直接在Relation()方法中设定Where子句行不通。
  8. 定义数据模型的时候数据字段尽可能不要提供默认值如果确实需要默认值要首先考虑在数据库中定义默认值约束其次选择使用Hook来赋予默认值。直接定义在struct tag中的默认值可能会造成bun形成查询语句时意外的空值。