From a48e63d7985535c22638635425d8bec49c196cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Mon, 15 Aug 2022 11:17:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(charge):=E5=A2=9E=E5=8A=A0=E8=AE=A1?= =?UTF-8?q?=E8=B4=B9=E8=AE=B0=E5=BD=95=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=BE=85=E6=B5=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/charge.go | 48 +++++++++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 2 ++ model/user_charges.go | 9 ++++++++ repository/charge.go | 52 +++++++++++++++++++++++++++++++++++++++++++ service/charge.go | 5 +++++ 6 files changed, 117 insertions(+) create mode 100644 controller/charge.go create mode 100644 repository/charge.go create mode 100644 service/charge.go diff --git a/controller/charge.go b/controller/charge.go new file mode 100644 index 0000000..3603310 --- /dev/null +++ b/controller/charge.go @@ -0,0 +1,48 @@ +package controller + +import ( + "electricity_bill_calc/repository" + "electricity_bill_calc/response" + "electricity_bill_calc/security" + "net/http" + "strconv" + + "github.com/gin-gonic/gin" +) + +type _ChargesController struct { + Router *gin.Engine +} + +var ChargesController *_ChargesController + +func InitializeChargesController(router *gin.Engine) { + ChargesController = &_ChargesController{ + Router: router, + } + + ChargesController.Router.GET("/charges", security.OPSAuthorize, listAllCharges) + +} + +func listAllCharges(c *gin.Context) { + result := response.NewResult(c) + requestPage, err := strconv.Atoi(c.DefaultQuery("page", "1")) + if err != nil { + result.NotAccept("查询参数[page]格式不正确。") + return + } + requestKeyword := c.DefaultQuery("keyword", "") + requestBeginDate := c.DefaultQuery("begin", "") + requestEndDate := c.DefaultQuery("end", "") + charges, total, err := repository.ChargeRepo.ListPagedChargeRecord(requestKeyword, requestBeginDate, requestEndDate, requestPage) + if err != nil { + result.NotFound(err.Error()) + return + } + result.Json( + http.StatusOK, "已获取到符合条件的计费记录。", + response.NewPagedResponse(requestPage, total).ToMap(), + gin.H{"records": charges}, + ) +} diff --git a/go.mod b/go.mod index 055f02e..32c1b4e 100644 --- a/go.mod +++ b/go.mod @@ -28,6 +28,7 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect + github.com/jinzhu/copier v0.3.5 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/magiconair/properties v1.8.6 // indirect diff --git a/go.sum b/go.sum index 754290d..508969c 100644 --- a/go.sum +++ b/go.sum @@ -308,6 +308,8 @@ github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= +github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= diff --git a/model/user_charges.go b/model/user_charges.go index 9403128..3f8ab12 100644 --- a/model/user_charges.go +++ b/model/user_charges.go @@ -22,3 +22,12 @@ type UserCharge struct { func (UserCharge) TableName() string { return "user_charge" } + +type ChargeWithName struct { + UserDetail `xorm:"extends"` + UserCharge `xorm:"extends"` +} + +func (ChargeWithName) TableName() string { + return "user_charge" +} diff --git a/repository/charge.go b/repository/charge.go new file mode 100644 index 0000000..cdcfa6d --- /dev/null +++ b/repository/charge.go @@ -0,0 +1,52 @@ +package repository + +import ( + "electricity_bill_calc/config" + "electricity_bill_calc/global" + "electricity_bill_calc/model" + "time" + + "xorm.io/builder" +) + +type _ChargeRepository struct{} + +var ChargeRepo _ChargeRepository + +func (_ChargeRepository) ListPagedChargeRecord(keyword, beginDate, endDate string, page int) ([]model.ChargeWithName, int64, error) { + var cond = builder.NewCond() + if len(keyword) != 0 { + cond.And(builder.Like{"u.name", keyword}) + } + if len(beginDate) != 0 { + beginTime, err := time.Parse("2006-01-02", beginDate) + if err != nil { + return make([]model.ChargeWithName, 0), 0, err + } + cond.And(builder.Gte{"c.created_at": beginTime}) + } + if len(endDate) != 0 { + endTime, err := time.Parse("2006-01-02", endDate) + if err != nil { + return make([]model.ChargeWithName, 0), 0, err + } + cond.And(builder.Lte{"c.created_at": endTime}) + } + startItem := (page - 1) * config.ServiceSettings.ItemsPageSize + total, err := global.DBConn. + Table("user_charge").Alias("c"). + Join("INNER", []string{"user_detail", "d"}, "c.user_id=d.id"). + Where(cond). + Count(&model.ChargeWithName{}) + if err != nil { + return nil, -1, err + } + charges := make([]model.ChargeWithName, 0) + err = global.DBConn. + Table("user_charge").Alias("c"). + Join("INNER", []string{"user_detail", "d"}, "c.user_id=d.id"). + Where(cond). + Limit(config.ServiceSettings.ItemsPageSize, startItem). + Find(&charges) + return charges, total, err +} diff --git a/service/charge.go b/service/charge.go new file mode 100644 index 0000000..31ee260 --- /dev/null +++ b/service/charge.go @@ -0,0 +1,5 @@ +package service + +type _ChargeService struct{} + +var ChargeService _ChargeService