From fe56ce587f42b1e2e490d6bee3dcf4e80fc4d828 Mon Sep 17 00:00:00 2001 From: Shikong <919411476@qq.com> Date: Tue, 14 Mar 2023 20:19:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=97=B6=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/record/location/loaction.go | 17 ++++++++---- backend/golang/matrix-middle-service/main.go | 2 ++ .../pkg/database/database.go | 2 ++ .../pkg/database/driver/mysql/mysql.go | 11 +++++++- .../pkg/database/model/locationRecord.go | 26 +++++++++++++++++++ .../pkg/utils/time/time.go | 3 ++- 6 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 backend/golang/matrix-middle-service/pkg/database/model/locationRecord.go diff --git a/backend/golang/matrix-middle-service/internel/controller/record/location/loaction.go b/backend/golang/matrix-middle-service/internel/controller/record/location/loaction.go index a6c0a58..77dc2a1 100644 --- a/backend/golang/matrix-middle-service/internel/controller/record/location/loaction.go +++ b/backend/golang/matrix-middle-service/internel/controller/record/location/loaction.go @@ -2,10 +2,12 @@ package location import ( "github.com/gofiber/fiber/v2" + "matrix-middle-service/pkg/database" + "matrix-middle-service/pkg/database/model" "matrix-middle-service/pkg/logger" response "matrix-middle-service/pkg/resp" "matrix-middle-service/pkg/resp/errorx" - utils "matrix-middle-service/pkg/utils/json" + "matrix-middle-service/pkg/utils/sonyflake" "matrix-middle-service/pkg/utils/time" ) @@ -47,15 +49,20 @@ type Data struct { // @Router /record/location/post [post] func postLocation(api fiber.Router) { api.Post("/post", func(ctx *fiber.Ctx) error { - data := &Data{} + data := &model.LocationRecord{} err := ctx.BodyParser(data) if err != nil { logger.Log().Error(err) return ctx.JSON(errorx.ParseError(err)) } - logger.Log().Debug(utils.Json(data)) - - return ctx.JSON(response.NewResponse(data)) + data.Id = sonyflake.NextStrId() + return database.Exec(func(db database.DataBase) error { + err := db.RecordLocation(data) + if err = errorx.ParseError(err); err != nil { + return ctx.JSON(err) + } + return ctx.JSON(response.NewResponse(data)) + }) }) } diff --git a/backend/golang/matrix-middle-service/main.go b/backend/golang/matrix-middle-service/main.go index 6435ec5..4c8a95d 100644 --- a/backend/golang/matrix-middle-service/main.go +++ b/backend/golang/matrix-middle-service/main.go @@ -4,6 +4,7 @@ import ( "matrix-middle-service/cmd/service" _ "matrix-middle-service/pkg/database/driver/mysql" _ "matrix-middle-service/pkg/logger" + "time" ) // @title matrix-middle-service API @@ -16,5 +17,6 @@ import ( // @license.url http://www.apache.org/licenses/LICENSE-2.0.html // @BasePath / func main() { + _, _ = time.LoadLocation("Asia/Shanghai") service.Main() } diff --git a/backend/golang/matrix-middle-service/pkg/database/database.go b/backend/golang/matrix-middle-service/pkg/database/database.go index 3e6e800..d83a39d 100644 --- a/backend/golang/matrix-middle-service/pkg/database/database.go +++ b/backend/golang/matrix-middle-service/pkg/database/database.go @@ -19,6 +19,8 @@ type DataBase interface { GetAllBotTypes() ([]*model.BotType, error) AddBotType(bt *model.BotType) error DeleteBotTypeById(id string) error + + RecordLocation(record *model.LocationRecord) error } func Init(conf []interface{}) { diff --git a/backend/golang/matrix-middle-service/pkg/database/driver/mysql/mysql.go b/backend/golang/matrix-middle-service/pkg/database/driver/mysql/mysql.go index 7a1a0a8..548f0ac 100644 --- a/backend/golang/matrix-middle-service/pkg/database/driver/mysql/mysql.go +++ b/backend/golang/matrix-middle-service/pkg/database/driver/mysql/mysql.go @@ -14,6 +14,7 @@ import ( "matrix-middle-service/pkg/logger" fib "matrix-middle-service/pkg/utils/fiber" "strings" + "time" "xorm.io/xorm" ) @@ -40,6 +41,8 @@ func init() { if err != nil { logger.Log().Fatal(err) } + dbEngine.TZLocation, _ = time.LoadLocation("Asia/Shanghai") // 本程序时区设置为上海 + dbEngine.DatabaseTZ, _ = time.LoadLocation("Asia/Shanghai") // 数据库时区设置为上海 dbInst = &db{ db: dbEngine, @@ -55,6 +58,11 @@ type db struct { config *conf.Config } +func (d *db) RecordLocation(record *model.LocationRecord) error { + _, err := d.db.Insert(record) + return err +} + func (d *db) DeleteBotTypeById(id string) error { if strutil.IsBlank(id) { return errors.New(fmt.Sprintf("id 不能为空")) @@ -126,7 +134,8 @@ func (d *db) Open() (err error) { &model.QQBot{}, &model.WebHook{}, &model.BotType{}, - &model.BotAccess{}) + &model.BotAccess{}, + &model.LocationRecord{}) if err != nil { logger.Log().Fatal(err) diff --git a/backend/golang/matrix-middle-service/pkg/database/model/locationRecord.go b/backend/golang/matrix-middle-service/pkg/database/model/locationRecord.go new file mode 100644 index 0000000..fa9b81c --- /dev/null +++ b/backend/golang/matrix-middle-service/pkg/database/model/locationRecord.go @@ -0,0 +1,26 @@ +package model + +import "matrix-middle-service/pkg/utils/time" + +type LocationRecord struct { + Id string `xorm:"NOT NULL VARCHAR(255) pk"` + CallbackTime time.Time `xorm:"DATETIME" json:"callbackTime"` + LocationTime time.Time `xorm:"DATETIME" json:"locationTime"` + LocationType int `json:"locationType,omitempty"` + Latitude float64 `json:"latitude,omitempty"` + Longitude float64 `json:"longitude,omitempty"` + Accuracy float64 `json:"accuracy,omitempty"` + Altitude float64 `json:"altitude,omitempty"` + Bearing float64 `json:"bearing,omitempty"` + Speed float64 `json:"speed,omitempty"` + Country string `json:"country,omitempty"` + Province string `json:"province,omitempty"` + City string `json:"city,omitempty"` + District string `json:"district,omitempty"` + Street string `json:"street,omitempty"` + StreetNumber string `json:"streetNumber,omitempty"` + CityCode string `json:"cityCode,omitempty"` + AdCode string `json:"adCode,omitempty"` + Address string `json:"address,omitempty"` + Description string `json:"description,omitempty"` +} diff --git a/backend/golang/matrix-middle-service/pkg/utils/time/time.go b/backend/golang/matrix-middle-service/pkg/utils/time/time.go index 1f373fc..14085ce 100644 --- a/backend/golang/matrix-middle-service/pkg/utils/time/time.go +++ b/backend/golang/matrix-middle-service/pkg/utils/time/time.go @@ -25,7 +25,8 @@ func (t *Time) UnmarshalJSON(data []byte) error { } // Fractional seconds are handled implicitly by Parse. var err error - rawT, err := time.Parse(`"`+timeFormat+`"`, string(data)) + loc, _ := time.LoadLocation("Asia/Shanghai") + rawT, err := time.ParseInLocation(`"`+timeFormat+`"`, string(data), loc) *t = Time(rawT) return err }