216 lines
9.7 KiB
Go
216 lines
9.7 KiB
Go
package model
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
"gen_transit_point/utils"
|
|
|
|
"github.com/lib/pq"
|
|
"github.com/opentracing/opentracing-go"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/schema"
|
|
)
|
|
|
|
type TransitPoint struct {
|
|
ID int64 `json:"id"`
|
|
CompanyID int64 `json:"company_id"`
|
|
CustomerID int64 `json:"customer_id"`
|
|
CustomerIDs []int64 `json:"customer_ids"`
|
|
TripGroupTransitPointID *int64 `json:"trip_group_transit_point_id"`
|
|
Status bool `json:"status"`
|
|
Blacklist bool `json:"blacklist"`
|
|
Latitude float64 `json:"latitude"`
|
|
Longitude float64 `json:"longitude"`
|
|
RegisterDate string `json:"register_date"`
|
|
UnregisterDate string `json:"unregister_date"`
|
|
CreatedDate string `json:"created_date"`
|
|
ModifiedDate string `json:"modified_date"`
|
|
Name string `json:"name"`
|
|
Code string `json:"code"`
|
|
Geocode string `json:"geocode"`
|
|
Address string `json:"address"`
|
|
CreatedBy string `json:"created_by"`
|
|
ModifiedBy string `json:"modified_by"`
|
|
PicName string `json:"pic_name"`
|
|
PicPhone string `json:"pic_phone"`
|
|
PicMobile string `json:"pic_mobile"`
|
|
TransitPointType string `json:"transit_point_type"`
|
|
Remark string `json:"remark"`
|
|
Coords string `json:"coords"`
|
|
Fax string `json:"fax"`
|
|
MobileNo string `json:"mobile_no"`
|
|
Phone string `json:"phone"`
|
|
Image string `json:"image"`
|
|
ZipCode string `json:"zip_code"`
|
|
GeomWkt string `json:"geom" gorm:"column:geom" validate:"required"`
|
|
GeomWkb string `json:"geom_wkb,omitempty" gorm:"-"`
|
|
CentroidLon float64 `json:"centroid_lon,omitempty" gorm:"-"`
|
|
CentroidLat float64 `json:"centroid_lat,omitempty" gorm:"-"`
|
|
}
|
|
|
|
type TransitPointDB struct {
|
|
ID sql.NullInt64 `json:"id"`
|
|
CompanyID sql.NullInt64 `json:"company_id"`
|
|
CustomerID sql.NullInt64 `json:"customer_id"`
|
|
CustomerIDs pq.Int64Array `json:"customer_ids" gorm:"type:bigint[];default:'{}'::bigint[]"`
|
|
TripGroupTransitPointID sql.NullInt64 `json:"trip_group_transit_point_id"`
|
|
Status sql.NullBool `json:"status"`
|
|
Blacklist sql.NullBool `json:"blacklist"`
|
|
Latitude sql.NullFloat64 `json:"latitude"`
|
|
Longitude sql.NullFloat64 `json:"longitude"`
|
|
RegisterDate sql.NullTime `json:"register_date"`
|
|
UnregisterDate sql.NullTime `json:"unregister_date"`
|
|
CreatedDate sql.NullTime `json:"created_date"`
|
|
ModifiedDate sql.NullTime `json:"modified_date"`
|
|
Name sql.NullString `json:"name"`
|
|
Code sql.NullString `json:"code"`
|
|
Geocode sql.NullString `json:"geocode"`
|
|
Address sql.NullString `json:"address"`
|
|
CreatedBy sql.NullString `json:"created_by"`
|
|
ModifiedBy sql.NullString `json:"modified_by"`
|
|
PicName sql.NullString `json:"pic_name"`
|
|
PicPhone sql.NullString `json:"pic_phone"`
|
|
PicMobile sql.NullString `json:"pic_mobile"`
|
|
TransitPointType sql.NullString `json:"transit_point_type"`
|
|
Remark sql.NullString `json:"remark"`
|
|
Coords sql.NullString `json:"coords"`
|
|
Fax sql.NullString `json:"fax"`
|
|
MobileNo sql.NullString `json:"mobile_no"`
|
|
Phone sql.NullString `json:"phone"`
|
|
Image sql.NullString `json:"image"`
|
|
ZipCode sql.NullString `json:"zip_code"`
|
|
GeomWkt sql.NullString `json:"geom_wkt" gorm:"column:geom"`
|
|
GeomWkb sql.NullString `json:"geom_wkb" gorm:"-"`
|
|
CentroidLon sql.NullFloat64 `json:"centroid_lon" gorm:"-"`
|
|
CentroidLat sql.NullFloat64 `json:"centroid_lat" gorm:"-"`
|
|
}
|
|
|
|
func (t *TransitPoint) BeforeCheck(ctx context.Context) *TransitPointDB {
|
|
checkLat := utils.ValidCoords(ctx, t.Latitude, utils.VALID_LATITUDE)
|
|
checkLon := utils.ValidCoords(ctx, t.Longitude, utils.VALID_LONGITUDE)
|
|
if !checkLat || !checkLon {
|
|
lat := t.Longitude
|
|
lon := t.Latitude
|
|
t.Latitude = lat
|
|
t.Longitude = lon
|
|
}
|
|
|
|
data := &TransitPointDB{
|
|
ID: utils.NewNullInt64(ctx, &t.ID),
|
|
CompanyID: utils.NewNullInt64(ctx, &t.CompanyID),
|
|
CustomerID: utils.NewNullInt64(ctx, &t.CustomerID),
|
|
CustomerIDs: pq.Int64Array(t.CustomerIDs),
|
|
TripGroupTransitPointID: utils.NewNullInt64(ctx, t.TripGroupTransitPointID),
|
|
Status: utils.NewNullBool(ctx, &t.Status),
|
|
Blacklist: utils.NewNullBool(ctx, &t.Blacklist),
|
|
Latitude: utils.NewNullFloat64(ctx, &t.Latitude),
|
|
Longitude: utils.NewNullFloat64(ctx, &t.Longitude),
|
|
RegisterDate: utils.NewNullStringTime(ctx, &t.RegisterDate),
|
|
UnregisterDate: utils.NewNullStringTime(ctx, &t.UnregisterDate),
|
|
CreatedDate: utils.NewNullStringTime(ctx, &t.CreatedDate),
|
|
ModifiedDate: utils.NewNullStringTime(ctx, &t.ModifiedDate),
|
|
Name: utils.NewNullString(ctx, &t.Name),
|
|
Code: utils.NewNullString(ctx, &t.Code),
|
|
Geocode: utils.NewNullString(ctx, &t.Geocode),
|
|
Address: utils.NewNullString(ctx, &t.Address),
|
|
CreatedBy: utils.NewNullString(ctx, &t.CreatedBy),
|
|
ModifiedBy: utils.NewNullString(ctx, &t.ModifiedBy),
|
|
PicName: utils.NewNullString(ctx, &t.PicName),
|
|
PicPhone: utils.NewNullString(ctx, &t.PicPhone),
|
|
PicMobile: utils.NewNullString(ctx, &t.PicMobile),
|
|
TransitPointType: utils.NewNullString(ctx, &t.TransitPointType),
|
|
Remark: utils.NewNullString(ctx, &t.Remark),
|
|
Coords: utils.NewNullString(ctx, &t.Coords),
|
|
Fax: utils.NewNullString(ctx, &t.Fax),
|
|
MobileNo: utils.NewNullString(ctx, &t.MobileNo),
|
|
Phone: utils.NewNullString(ctx, &t.Phone),
|
|
Image: utils.NewNullString(ctx, &t.Image),
|
|
ZipCode: utils.NewNullString(ctx, &t.ZipCode),
|
|
GeomWkt: utils.NewNullString(ctx, &t.GeomWkt),
|
|
GeomWkb: utils.NewNullString(ctx, &t.GeomWkb),
|
|
CentroidLon: utils.NewNullFloat64(ctx, &t.CentroidLon),
|
|
CentroidLat: utils.NewNullFloat64(ctx, &t.CentroidLat),
|
|
}
|
|
|
|
return data
|
|
}
|
|
|
|
func (t *TransitPointDB) TableName(ctx context.Context, alias ...string) func(db *gorm.DB) *gorm.DB {
|
|
span, spanCtx := opentracing.StartSpanFromContext(ctx, "tableName")
|
|
defer span.Finish()
|
|
return func(db *gorm.DB) *gorm.DB {
|
|
db = t.NamingStrategy(spanCtx, db)
|
|
table := db.Statement.Config.NamingStrategy.TableName("transit_point")
|
|
if len(alias) > 0 && alias[0] != "" {
|
|
return db.Table(fmt.Sprintf("%s AS %s", table, alias[0]))
|
|
}
|
|
return db.Table(table)
|
|
}
|
|
}
|
|
|
|
func (t *TransitPointDB) NamingStrategy(ctx context.Context, tx *gorm.DB) *gorm.DB {
|
|
span, spanCtx := opentracing.StartSpanFromContext(ctx, "namingStrategy")
|
|
defer span.Finish()
|
|
tx.Statement.Context = spanCtx
|
|
tx.Config.NamingStrategy = schema.NamingStrategy{
|
|
TablePrefix: "m_",
|
|
SingularTable: true,
|
|
}
|
|
return tx
|
|
}
|
|
|
|
func (t *TransitPointDB) Convert(ctx context.Context) *TransitPoint {
|
|
data := &TransitPoint{
|
|
ID: t.ID.Int64,
|
|
CompanyID: t.CompanyID.Int64,
|
|
CustomerID: t.CustomerID.Int64,
|
|
CustomerIDs: []int64(t.CustomerIDs),
|
|
TripGroupTransitPointID: &t.TripGroupTransitPointID.Int64,
|
|
Status: t.Status.Bool,
|
|
Blacklist: t.Blacklist.Bool,
|
|
Latitude: t.Latitude.Float64,
|
|
Longitude: t.Longitude.Float64,
|
|
RegisterDate: utils.FormatToWithoutTZ(ctx, t.RegisterDate.Time),
|
|
UnregisterDate: utils.FormatToWithoutTZ(ctx, t.UnregisterDate.Time),
|
|
CreatedDate: utils.FormatToWithoutTZ(ctx, t.CreatedDate.Time),
|
|
ModifiedDate: utils.FormatToWithoutTZ(ctx, t.ModifiedDate.Time),
|
|
Name: t.Name.String,
|
|
Code: t.Code.String,
|
|
Geocode: t.Geocode.String,
|
|
Address: t.Address.String,
|
|
CreatedBy: t.CreatedBy.String,
|
|
ModifiedBy: t.ModifiedBy.String,
|
|
PicName: t.PicName.String,
|
|
PicPhone: t.PicPhone.String,
|
|
PicMobile: t.PicMobile.String,
|
|
TransitPointType: t.TransitPointType.String,
|
|
Remark: t.Remark.String,
|
|
Coords: t.Coords.String,
|
|
Fax: t.Fax.String,
|
|
MobileNo: t.MobileNo.String,
|
|
Phone: t.Phone.String,
|
|
Image: t.Image.String,
|
|
ZipCode: t.ZipCode.String,
|
|
//GeomWkb: t.GeomWkb.String,
|
|
GeomWkt: t.GeomWkt.String,
|
|
//CentroidLon: t.CentroidLon.Float64,
|
|
//CentroidLat: t.CentroidLat.Float64,
|
|
}
|
|
checkLat := utils.ValidCoords(ctx, data.Latitude, utils.VALID_LATITUDE)
|
|
checkLon := utils.ValidCoords(ctx, data.Longitude, utils.VALID_LONGITUDE)
|
|
if !checkLat || !checkLon {
|
|
lat := data.Longitude
|
|
lon := data.Latitude
|
|
data.Latitude = lat
|
|
data.Longitude = lon
|
|
}
|
|
|
|
/* if data.Latitude == 0 || data.Longitude == 0 {
|
|
data.Latitude = data.CentroidLat
|
|
data.Longitude = data.CentroidLon
|
|
} */
|
|
|
|
return data
|
|
}
|