forked from free-lancers/electricity_bill_calc_service
		
	refactor(changes):暂时删除全部内容,并完成基本数据库连接的创建。
This commit is contained in:
		| @@ -1,133 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| type EndUserDetail struct { | ||||
| 	bun.BaseModel         `bun:"table:end_user_detail,alias:eud"` | ||||
| 	CreatedAndModified    `bun:"extend"` | ||||
| 	ReportId              string              `bun:",pk,notnull" json:"reportId"` | ||||
| 	ParkId                string              `bun:",pk,notnull" json:"parkId"` | ||||
| 	MeterId               string              `bun:"meter_04kv_id,pk,notnull" json:"meterId"` | ||||
| 	Seq                   int64               `bun:"type:bigint,notnull" json:"seq"` | ||||
| 	Ratio                 decimal.Decimal     `bun:"type:numeric,notnull" json:"ratio"` | ||||
| 	Address               *string             `json:"address"` | ||||
| 	CustomerName          *string             `json:"customerName"` | ||||
| 	ContactName           *string             `json:"contactName"` | ||||
| 	ContactPhone          *string             `json:"contactPhone"` | ||||
| 	IsPublicMeter         bool                `bun:"public_meter,notnull" json:"isPublicMeter"` | ||||
| 	LastPeriodOverall     decimal.Decimal     `bun:"type:numeric,notnull" json:"lastPeriodOverall"` | ||||
| 	LastPeriodCritical    decimal.Decimal     `bun:"type:numeric,notnull" json:"lastPeriodCritical"` | ||||
| 	LastPeriodPeak        decimal.Decimal     `bun:"type:numeric,notnull" json:"lastPeriodPeak"` | ||||
| 	LastPeriodFlat        decimal.Decimal     `bun:"type:numeric,notnull" json:"lastPeriodFlat"` | ||||
| 	LastPeriodValley      decimal.Decimal     `bun:"type:numeric,notnull" json:"lastPeriodValley"` | ||||
| 	CurrentPeriodOverall  decimal.Decimal     `bun:"type:numeric,notnull" json:"currentPeriodOverall"` | ||||
| 	CurrentPeriodCritical decimal.Decimal     `bun:"type:numeric,notnull" json:"currentPeriodCritical"` | ||||
| 	CurrentPeriodPeak     decimal.Decimal     `bun:"type:numeric,notnull" json:"currentPeriodPeak"` | ||||
| 	CurrentPeriodFlat     decimal.Decimal     `bun:"type:numeric,notnull" json:"currentPeriodFlat"` | ||||
| 	CurrentPeriodValley   decimal.Decimal     `bun:"type:numeric,notnull" json:"currentPeriodValley"` | ||||
| 	AdjustOverall         decimal.Decimal     `bun:"type:numeric,notnull" json:"adjustOverall"` | ||||
| 	AdjustCritical        decimal.Decimal     `bun:"type:numeric,notnull" json:"adjustCritical"` | ||||
| 	AdjustPeak            decimal.Decimal     `bun:"type:numeric,notnull" json:"adjustPeak"` | ||||
| 	AdjustFlat            decimal.Decimal     `bun:"type:numeric,notnull" json:"adjustFlat"` | ||||
| 	AdjustValley          decimal.Decimal     `bun:"type:numeric,notnull" json:"adjustValley"` | ||||
| 	Overall               decimal.NullDecimal `bun:"type:numeric" json:"overall"` | ||||
| 	OverallFee            decimal.NullDecimal `bun:"type:numeric" json:"overallFee"` | ||||
| 	OverallProportion     decimal.Decimal     `bun:"type:numeric,notnull" json:"-"` | ||||
| 	Critical              decimal.NullDecimal `bun:"type:numeric" json:"critical"` | ||||
| 	CriticalFee           decimal.NullDecimal `bun:"type:numeric" json:"criticalFee"` | ||||
| 	Peak                  decimal.NullDecimal `bun:"type:numeric" json:"peak"` | ||||
| 	PeakFee               decimal.NullDecimal `bun:"type:numeric" json:"peakFee"` | ||||
| 	Flat                  decimal.NullDecimal `bun:"type:numeric" json:"flat"` | ||||
| 	FlatFee               decimal.NullDecimal `bun:"type:numeric" json:"flatFee"` | ||||
| 	Valley                decimal.NullDecimal `bun:"type:numeric" json:"valley"` | ||||
| 	ValleyFee             decimal.NullDecimal `bun:"type:numeric" json:"valleyFee"` | ||||
| 	BasicFeeDiluted       decimal.NullDecimal `bun:"type:numeric" json:"basicFeeDiluted"` | ||||
| 	AdjustFeeDiluted      decimal.NullDecimal `bun:"type:numeric" json:"adjustFeeDiluted"` | ||||
| 	LossDiluted           decimal.NullDecimal `bun:"type:numeric" json:"lossDiluted"` | ||||
| 	LossFeeDiluted        decimal.NullDecimal `bun:"type:numeric" json:"lossFeeDiluted"` | ||||
| 	FinalDiluted          decimal.NullDecimal `bun:"type:numeric" json:"finalDiluted"` | ||||
| 	FinalCharge           decimal.NullDecimal `bun:"type:numeric" json:"finalCharge"` | ||||
| 	Initialize            bool                `bun:"-" json:"-"` | ||||
| 	Origin                *Meter04KV          `bun:"rel:belongs-to,join:park_id=park_id,join:meter_04kv_id=code" json:"-"` | ||||
| 	Report                *Report             `bun:"rel:belongs-to,join:report_id=id" json:"-"` | ||||
| 	Park                  *Park               `bun:"rel:belongs-to,join:park_id=id" json:"-"` | ||||
| } | ||||
|  | ||||
| var _ bun.BeforeAppendModelHook = (*EndUserDetail)(nil) | ||||
|  | ||||
| func (d *EndUserDetail) BeforeAppendModel(ctx context.Context, query bun.Query) error { | ||||
| 	oprTime := time.Now() | ||||
| 	switch query.(type) { | ||||
| 	case *bun.InsertQuery: | ||||
| 		d.CreatedAt = oprTime | ||||
| 		d.LastModifiedAt = &oprTime | ||||
| 	case *bun.UpdateQuery: | ||||
| 		d.LastModifiedAt = &oprTime | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (d EndUserDetail) Validate() (bool, error) { | ||||
| 	lastPeriodSum := decimal.Sum(d.LastPeriodCritical, d.LastPeriodPeak, d.LastPeriodValley) | ||||
| 	if lastPeriodSum.GreaterThan(d.LastPeriodOverall) { | ||||
| 		return false, errors.New("上期峰谷计量总量大于上期总计电量") | ||||
| 	} | ||||
| 	currentPeriodSum := decimal.Sum(d.CurrentPeriodCritical, d.CurrentPeriodPeak, d.CurrentPeriodValley) | ||||
| 	if currentPeriodSum.GreaterThan(d.CurrentPeriodOverall) { | ||||
| 		return false, errors.New("本期峰谷计量总量大于本期总计电量") | ||||
| 	} | ||||
| 	return true, nil | ||||
| } | ||||
|  | ||||
| func (d *EndUserDetail) CalculatePeriod() { | ||||
| 	d.LastPeriodFlat = d.LastPeriodOverall.Sub(d.LastPeriodCritical).Sub(d.LastPeriodPeak).Sub(d.LastPeriodValley) | ||||
| 	d.CurrentPeriodFlat = d.CurrentPeriodOverall.Sub(d.CurrentPeriodCritical).Sub(d.CurrentPeriodPeak).Sub(d.CurrentPeriodValley) | ||||
| 	d.Overall = decimal.NewNullDecimal(d.CurrentPeriodOverall.Sub(d.LastPeriodOverall).Mul(d.Ratio).Add(d.AdjustOverall).RoundBank(2)) | ||||
| 	d.Critical = decimal.NewNullDecimal(d.CurrentPeriodCritical.Sub(d.LastPeriodCritical).Mul(d.Ratio).Add(d.AdjustCritical).RoundBank(2)) | ||||
| 	d.Peak = decimal.NewNullDecimal(d.CurrentPeriodPeak.Sub(d.LastPeriodPeak).Mul(d.Ratio).Add(d.AdjustPeak).RoundBank(2)) | ||||
| 	d.Flat = decimal.NewNullDecimal(d.CurrentPeriodFlat.Sub(d.LastPeriodFlat).Mul(d.Ratio).Add(d.AdjustFlat).RoundBank(2)) | ||||
| 	d.Valley = decimal.NewNullDecimal(d.CurrentPeriodValley.Sub(d.LastPeriodValley).Mul(d.Ratio).Add(d.AdjustValley).RoundBank(2)) | ||||
| } | ||||
|  | ||||
| type EndUserImport struct { | ||||
| 	MeterId               string              `excel:"meterId"` | ||||
| 	LastPeriodOverall     decimal.Decimal     `excel:"lastPeriodOverall"` | ||||
| 	CurrentPeriodOverall  decimal.Decimal     `excel:"currentPeriodOverall"` | ||||
| 	LastPeriodCritical    decimal.NullDecimal `excel:"lastPeriodCritical"` | ||||
| 	LastPeriodPeak        decimal.NullDecimal `excel:"lastPeriodPeak"` | ||||
| 	LastPeriodValley      decimal.NullDecimal `excel:"lastPeriodValley"` | ||||
| 	CurrentPeriodCritical decimal.NullDecimal `excel:"currentPeriodCritical"` | ||||
| 	CurrentPeriodPeak     decimal.NullDecimal `excel:"currentPeriodPeak"` | ||||
| 	CurrentPeriodValley   decimal.NullDecimal `excel:"currentPeriodValley"` | ||||
| 	AdjustOverall         decimal.Decimal     `excel:"adjustOverall"` | ||||
| 	AdjustCritical        decimal.NullDecimal `excel:"adjustCritical"` | ||||
| 	AdjustPeak            decimal.NullDecimal `excel:"adjustPeak"` | ||||
| 	AdjustFlat            decimal.NullDecimal `excel:"adjustFlat"` | ||||
| 	AdjustValley          decimal.NullDecimal `excel:"adjustValley"` | ||||
| } | ||||
|  | ||||
| type EndUserPeriodStat struct { | ||||
| 	CustomerName     string              `json:"customerName"` | ||||
| 	Address          string              `json:"address"` | ||||
| 	ParkId           string              `json:"parkId"` | ||||
| 	MeterId          string              `bun:"meter_04kv_id" json:"meterId"` | ||||
| 	IsPublicMeter    bool                `bun:"public_meter" json:"isPublicMeter"` | ||||
| 	Kind             int8                `bun:"-" json:"pvKind"` | ||||
| 	Overall          decimal.NullDecimal `json:"overall"` | ||||
| 	Critical         decimal.NullDecimal `json:"critical"` | ||||
| 	Peak             decimal.NullDecimal `json:"peak"` | ||||
| 	Valley           decimal.NullDecimal `json:"valley"` | ||||
| 	OverallFee       decimal.NullDecimal `json:"overallFee"` | ||||
| 	CriticalFee      decimal.NullDecimal `json:"criticalFee"` | ||||
| 	PeakFee          decimal.NullDecimal `json:"peakFee"` | ||||
| 	ValleyFee        decimal.NullDecimal `json:"valleyFee"` | ||||
| 	AdjustFee        decimal.NullDecimal `bun:"final_diluted" json:"adjustFee"` | ||||
| 	AdjustProportion decimal.NullDecimal `bun:"-" json:"adjustProportion"` | ||||
| } | ||||
| @@ -1,48 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| type MaintenanceFee struct { | ||||
| 	bun.BaseModel      `bun:"table:maintenance_fee,alias:m"` | ||||
| 	CreatedAndModified `bun:"extend"` | ||||
| 	Deleted            `bun:"extend"` | ||||
| 	Id                 string          `bun:",pk,notnull" json:"id"` | ||||
| 	ParkId             string          `bun:",notnull" json:"parkId"` | ||||
| 	Name               string          `bun:",notnull" json:"name"` | ||||
| 	Period             string          `bun:",notnull" json:"period"` | ||||
| 	Fee                decimal.Decimal `bun:"type:numeric,notnull" json:"fee"` | ||||
| 	Memo               *string         `bun:"type:text" json:"memo"` | ||||
| 	Enabled            bool            `bun:",notnull" json:"enabled"` | ||||
| 	Park               Park            `bun:"rel:belongs-to,join:park_id=id"` | ||||
| } | ||||
|  | ||||
| var _ bun.BeforeAppendModelHook = (*MaintenanceFee)(nil) | ||||
|  | ||||
| func (f *MaintenanceFee) BeforeAppendModel(ctx context.Context, query bun.Query) error { | ||||
| 	oprTime := time.Now() | ||||
| 	switch query.(type) { | ||||
| 	case *bun.InsertQuery: | ||||
| 		f.CreatedAt = oprTime | ||||
| 		f.LastModifiedAt = &oprTime | ||||
| 	case *bun.UpdateQuery: | ||||
| 		f.LastModifiedAt = &oprTime | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type AdditionalCharge struct { | ||||
| 	ParkId          string               `json:"parkId"` | ||||
| 	Period          string               `json:"period"` | ||||
| 	Fee             decimal.Decimal      `json:"fee"` | ||||
| 	Price           decimal.Decimal      `json:"price"` | ||||
| 	QuarterPrice    decimal.Decimal      `json:"quarterPrice"` | ||||
| 	SemiAnnualPrice decimal.Decimal      `json:"semiAnnualPrice"` | ||||
| 	Enterprise      UserDetailSimplified `json:"user"` | ||||
| 	Park            Park                 `json:"park"` | ||||
| } | ||||
| @@ -1,39 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| type Meter04KV struct { | ||||
| 	bun.BaseModel      `bun:"table:meter_04kv,alias:mt"` | ||||
| 	CreatedAndModified `bun:"extend"` | ||||
| 	Code               string          `bun:",pk,notnull" json:"code" excel:"code"` | ||||
| 	ParkId             string          `bun:",pk,notnull" json:"parkId"` | ||||
| 	Address            *string         `json:"address" excel:"address"` | ||||
| 	CustomerName       *string         `json:"customerName" excel:"name"` | ||||
| 	ContactName        *string         `json:"contactName" excel:"contact"` | ||||
| 	ContactPhone       *string         `json:"contactPhone" excel:"phone"` | ||||
| 	Ratio              decimal.Decimal `bun:"type:numeric,notnull" json:"ratio" excel:"ratio"` | ||||
| 	Seq                int64           `bun:"type:bigint,notnull" json:"seq" excel:"seq"` | ||||
| 	IsPublicMeter      bool            `bun:"public_meter,notnull" json:"isPublicMeter" excel:"public"` | ||||
| 	Enabled            bool            `bun:",notnull" json:"enabled"` | ||||
| 	ParkDetail         *Park           `bun:"rel:belongs-to,join:park_id=id" json:"-"` | ||||
| } | ||||
|  | ||||
| var _ bun.BeforeAppendModelHook = (*Meter04KV)(nil) | ||||
|  | ||||
| func (m *Meter04KV) BeforeAppendModel(ctx context.Context, query bun.Query) error { | ||||
| 	oprTime := time.Now() | ||||
| 	switch query.(type) { | ||||
| 	case *bun.InsertQuery: | ||||
| 		m.CreatedAt = oprTime | ||||
| 		m.LastModifiedAt = &oprTime | ||||
| 	case *bun.UpdateQuery: | ||||
| 		m.LastModifiedAt = &oprTime | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| @@ -1,89 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/jinzhu/copier" | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	CATEGORY_TWO_PART int8 = iota | ||||
| 	CATEGORY_SINGLE_PV | ||||
| 	CATEGORY_SINGLE_NON_PV | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	CUSTOMER_METER_NON_PV int8 = iota | ||||
| 	CUSTOMER_METER_PV | ||||
| ) | ||||
|  | ||||
| type Park struct { | ||||
| 	bun.BaseModel      `bun:"table:park,alias:p"` | ||||
| 	CreatedAndModified `bun:"extend"` | ||||
| 	Deleted            `bun:"extend"` | ||||
| 	Id                 string              `bun:",pk,notnull" json:"id"` | ||||
| 	UserId             string              `bun:",notnull" json:"userId"` | ||||
| 	Name               string              `bun:",notnull" json:"name"` | ||||
| 	Abbr               *string             `json:"abbr"` | ||||
| 	Area               decimal.NullDecimal `bun:"type:numeric" json:"area"` | ||||
| 	TenementQuantity   decimal.NullDecimal `bun:"type:numeric" json:"tenement"` | ||||
| 	Capacity           decimal.NullDecimal `bun:"type:numeric" json:"capacity"` | ||||
| 	Category           int8                `bun:"type:smallint,notnull" json:"category"` | ||||
| 	SubmeterType       int8                `bun:"meter_04kv_type,type:smallint,notnull" json:"meter04kvType"` | ||||
| 	Region             *string             `json:"region"` | ||||
| 	Address            *string             `json:"address"` | ||||
| 	Contact            *string             `json:"contact"` | ||||
| 	Phone              *string             `json:"phone"` | ||||
| 	Enabled            bool                `bun:",notnull" json:"enabled"` | ||||
| 	EnterpriseIndex    *User               `bun:"rel:belongs-to,join:user_id=id" json:"-"` | ||||
| 	Enterprise         *UserDetail         `bun:"rel:belongs-to,join:user_id=id" json:"-"` | ||||
| 	MaintenanceFees    []*MaintenanceFee   `bun:"rel:has-many,join:id=park_id" json:"-"` | ||||
| 	Meters             []*Meter04KV        `bun:"rel:has-many,join:id=park_id" json:"-"` | ||||
| 	Reports            []*Report           `bun:"rel:has-many,join:id=park_id" json:"-"` | ||||
| } | ||||
|  | ||||
| type ParkSimplified struct { | ||||
| 	bun.BaseModel    `bun:"table:park,alias:p"` | ||||
| 	Id               string              `bun:",pk,notnull" json:"id"` | ||||
| 	UserId           string              `bun:",notnull" json:"userId"` | ||||
| 	Name             string              `bun:",notnull" json:"name"` | ||||
| 	Abbr             *string             `json:"abbr"` | ||||
| 	Area             decimal.NullDecimal `json:"area"` | ||||
| 	TenementQuantity decimal.NullDecimal `json:"tenement"` | ||||
| 	Capacity         decimal.NullDecimal `json:"capacity"` | ||||
| 	Category         int8                `bun:"type:smallint,notnull" json:"category"` | ||||
| 	SubmeterType     int8                `bun:"meter_04kv_type,type:smallint,notnull" json:"meter04kvType"` | ||||
| 	Region           *string             `json:"region"` | ||||
| 	Address          *string             `json:"address"` | ||||
| 	Contact          *string             `json:"contact"` | ||||
| 	Phone            *string             `json:"phone"` | ||||
| } | ||||
|  | ||||
| type ParkPeriodStatistics struct { | ||||
| 	Id     string `bun:"park__id,notnull" json:"id"` | ||||
| 	Name   string `bun:"park__name,notnull" json:"name"` | ||||
| 	Period *Date  `bun:"type:date" json:"period"` | ||||
| } | ||||
|  | ||||
| func FromPark(park Park) ParkSimplified { | ||||
| 	dest := ParkSimplified{} | ||||
| 	copier.Copy(&dest, park) | ||||
| 	return dest | ||||
| } | ||||
|  | ||||
| var _ bun.BeforeAppendModelHook = (*Park)(nil) | ||||
|  | ||||
| func (p *Park) BeforeAppendModel(ctx context.Context, query bun.Query) error { | ||||
| 	oprTime := time.Now() | ||||
| 	switch query.(type) { | ||||
| 	case *bun.InsertQuery: | ||||
| 		p.CreatedAt = oprTime | ||||
| 		p.LastModifiedAt = &oprTime | ||||
| 	case *bun.UpdateQuery: | ||||
| 		p.LastModifiedAt = &oprTime | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| @@ -1,116 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import "github.com/shopspring/decimal" | ||||
|  | ||||
| type PaidPart struct { | ||||
| 	Overall        decimal.Decimal     `json:"overall"` | ||||
| 	OverallPrice   decimal.Decimal     `json:"overallPrice"` | ||||
| 	ConsumptionFee decimal.Decimal     `json:"consumptionFee"` | ||||
| 	OverallFee     decimal.Decimal     `json:"overallFee"` | ||||
| 	Critical       decimal.NullDecimal `json:"critical"` | ||||
| 	CriticalPrice  decimal.NullDecimal `json:"criticalPrice"` | ||||
| 	CriticalFee    decimal.NullDecimal `json:"criticalFee"` | ||||
| 	Peak           decimal.NullDecimal `json:"peak"` | ||||
| 	PeakPrice      decimal.NullDecimal `json:"peakPrice"` | ||||
| 	PeakFee        decimal.NullDecimal `json:"peakFee"` | ||||
| 	Flat           decimal.NullDecimal `json:"flat"` | ||||
| 	FlatPrice      decimal.NullDecimal `json:"flatPrice"` | ||||
| 	FlatFee        decimal.NullDecimal `json:"flatFee"` | ||||
| 	Valley         decimal.NullDecimal `json:"valley"` | ||||
| 	ValleyPrice    decimal.NullDecimal `json:"valleyPrice"` | ||||
| 	ValleyFee      decimal.NullDecimal `json:"valleyFee"` | ||||
| 	BasicFee       decimal.Decimal     `json:"basicFee"` | ||||
| 	AdjustFee      decimal.Decimal     `json:"adjustFee"` | ||||
| } | ||||
|  | ||||
| type EndUserOverallPart struct { | ||||
| 	Overall       decimal.Decimal     `json:"overall"` | ||||
| 	OverallPrice  decimal.Decimal     `json:"overallPrice"` | ||||
| 	OverallFee    decimal.Decimal     `json:"consumptionFee"` | ||||
| 	Critical      decimal.NullDecimal `json:"critical"` | ||||
| 	CriticalPrice decimal.NullDecimal `json:"criticalPrice"` | ||||
| 	CriticalFee   decimal.NullDecimal `json:"criticalFee"` | ||||
| 	Peak          decimal.NullDecimal `json:"peak"` | ||||
| 	PeakPrice     decimal.NullDecimal `json:"peakPrice"` | ||||
| 	PeakFee       decimal.NullDecimal `json:"peakFee"` | ||||
| 	Flat          decimal.NullDecimal `json:"flat"` | ||||
| 	FlatPrice     decimal.NullDecimal `json:"flatPrice"` | ||||
| 	FlatFee       decimal.NullDecimal `json:"flatFee"` | ||||
| 	Valley        decimal.NullDecimal `json:"valley"` | ||||
| 	ValleyPrice   decimal.NullDecimal `json:"valleyPrice"` | ||||
| 	ValleyFee     decimal.NullDecimal `json:"valleyFee"` | ||||
| } | ||||
|  | ||||
| type ConsumptionOverallPart struct { | ||||
| 	Overall        decimal.Decimal     `json:"overall"` | ||||
| 	OverallPrice   decimal.Decimal     `json:"overallPrice"` | ||||
| 	ConsumptionFee decimal.Decimal     `json:"consumptionFee"` | ||||
| 	OverallFee     decimal.Decimal     `json:"overallFee"` | ||||
| 	Critical       decimal.NullDecimal `json:"critical"` | ||||
| 	CriticalPrice  decimal.NullDecimal `json:"criticalPrice"` | ||||
| 	CriticalFee    decimal.NullDecimal `json:"criticalFee"` | ||||
| 	Peak           decimal.NullDecimal `json:"peak"` | ||||
| 	PeakPrice      decimal.NullDecimal `json:"peakPrice"` | ||||
| 	PeakFee        decimal.NullDecimal `json:"peakFee"` | ||||
| 	Flat           decimal.NullDecimal `json:"flat"` | ||||
| 	FlatPrice      decimal.NullDecimal `json:"flatPrice"` | ||||
| 	FlatFee        decimal.NullDecimal `json:"flatFee"` | ||||
| 	Valley         decimal.NullDecimal `json:"valley"` | ||||
| 	ValleyPrice    decimal.NullDecimal `json:"valleyPrice"` | ||||
| 	ValleyFee      decimal.NullDecimal `json:"valleyFee"` | ||||
| 	Proportion     decimal.Decimal     `json:"proportion"` | ||||
| } | ||||
|  | ||||
| type LossPart struct { | ||||
| 	Quantity                decimal.Decimal `json:"quantity"` | ||||
| 	Price                   decimal.Decimal `json:"price"` | ||||
| 	ConsumptionFee          decimal.Decimal `json:"consumptionFee"` | ||||
| 	Proportion              decimal.Decimal `json:"proportion"` | ||||
| 	AuthorizeQuantity       decimal.Decimal `json:"authorizeQuantity"` | ||||
| 	AuthorizeConsumptionFee decimal.Decimal `json:"authorizeConsumptionFee"` | ||||
| } | ||||
|  | ||||
| type OtherShouldCollectionPart struct { | ||||
| 	LossFee   decimal.NullDecimal `json:"lossFee"` | ||||
| 	BasicFees decimal.Decimal     `json:"basicFees"` | ||||
| } | ||||
|  | ||||
| type MaintenancePart struct { | ||||
| 	BasicFees        decimal.Decimal `json:"basicFees"` | ||||
| 	LossFee          decimal.Decimal `json:"lossFee"` | ||||
| 	AdjustFee        decimal.Decimal `json:"adjustFee"` | ||||
| 	LossProportion   decimal.Decimal `json:"lossProportion"` | ||||
| 	AdjustProportion decimal.Decimal `json:"adjustProportion"` | ||||
| 	AdjustPrice      decimal.Decimal `json:"adjustPrice"` | ||||
| } | ||||
|  | ||||
| type EndUserSummary struct { | ||||
| 	CustomerName  *string             `json:"customerName"` | ||||
| 	Address       *string             `json:"address"` | ||||
| 	MeterId       string              `json:"meterId"` | ||||
| 	IsPublicMeter bool                `json:"isPublicMeter"` | ||||
| 	Overall       decimal.Decimal     `json:"overall"` | ||||
| 	OverallPrice  decimal.Decimal     `json:"overallPrice"` | ||||
| 	OverallFee    decimal.Decimal     `json:"overallFee"` | ||||
| 	Critical      decimal.NullDecimal `json:"critical"` | ||||
| 	CriticalFee   decimal.NullDecimal `json:"criticalFee"` | ||||
| 	Peak          decimal.NullDecimal `json:"peak"` | ||||
| 	PeakFee       decimal.NullDecimal `json:"peakFee"` | ||||
| 	Valley        decimal.NullDecimal `json:"valley"` | ||||
| 	ValleyFee     decimal.NullDecimal `json:"valleyFee"` | ||||
| 	Loss          decimal.Decimal     `json:"loss"` | ||||
| 	LossFee       decimal.Decimal     `json:"lossFee"` | ||||
| } | ||||
|  | ||||
| type Publicity struct { | ||||
| 	Report                   Report                    `json:"index"` | ||||
| 	User                     UserDetail                `json:"enterprise"` | ||||
| 	Park                     Park                      `json:"park"` | ||||
| 	Paid                     PaidPart                  `json:"paid"` | ||||
| 	EndUser                  ConsumptionOverallPart    `json:"endUserSum"` | ||||
| 	Loss                     LossPart                  `json:"loss"` | ||||
| 	PublicConsumptionOverall ConsumptionOverallPart    `json:"public"` | ||||
| 	OtherCollections         OtherShouldCollectionPart `json:"others"` | ||||
| 	Maintenance              MaintenancePart           `json:"maintenance"` | ||||
| 	EndUserDetails           []EndUserSummary          `json:"endUser"` | ||||
| } | ||||
| @@ -1,11 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import "github.com/uptrace/bun" | ||||
|  | ||||
| type Region struct { | ||||
| 	bun.BaseModel `bun:"table:region,alias:r"` | ||||
| 	Code          string `bun:",pk,notnull" json:"code"` | ||||
| 	Name          string `bun:",notnull" json:"name"` | ||||
| 	Level         int    `bun:",notnull" json:"level"` | ||||
| 	Parent        string `bun:",notnull" json:"parent"` | ||||
| } | ||||
| @@ -1,99 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	REPORT_NOT_WITHDRAW int8 = iota | ||||
| 	REPORT_WITHDRAW_APPLIED | ||||
| 	REPORT_WITHDRAW_DENIED | ||||
| 	REPORT_WITHDRAW_GRANTED | ||||
| ) | ||||
|  | ||||
| type Report struct { | ||||
| 	bun.BaseModel         `bun:"table:report,alias:r"` | ||||
| 	CreatedAndModified    `bun:"extend"` | ||||
| 	Id                    string            `bun:",pk,notnull" json:"id"` | ||||
| 	ParkId                string            `bun:",notnull" json:"parkId"` | ||||
| 	Period                time.Time         `bun:"type:date,notnull" json:"period" time_format:"simple_date" time_location:"shanghai"` | ||||
| 	Category              int8              `bun:"type:smallint,notnull" json:"category"` | ||||
| 	SubmeterType          int8              `bun:"meter_04kv_type,type:smallint,notnull" json:"meter04kvType"` | ||||
| 	StepState             Steps             `bun:"type:jsonb,notnull" json:"stepState"` | ||||
| 	Published             bool              `bun:",notnull" json:"published"` | ||||
| 	PublishedAt           *time.Time        `bun:"type:timestamptz,nullzero" json:"publishedAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| 	Withdraw              int8              `bun:"type:smallint,notnull" json:"withdraw"` | ||||
| 	LastWithdrawAppliedAt *time.Time        `bun:"type:timestamptz,nullzero" json:"lastWithdrawAppliedAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| 	LastWithdrawAuditAt   *time.Time        `bun:"type:timestamptz,nullzero" json:"lastWithdrawAuditAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| 	Park                  *Park             `bun:"rel:belongs-to,join:park_id=id" json:"-"` | ||||
| 	Summary               *ReportSummary    `bun:"rel:has-one,join:id=report_id" json:"-"` | ||||
| 	WillDilutedFees       []*WillDilutedFee `bun:"rel:has-many,join:id=report_id" json:"-"` | ||||
| 	EndUsers              []*EndUserDetail  `bun:"rel:has-many,join:id=report_id,join:park_id=park_id" json:"-"` | ||||
| } | ||||
|  | ||||
| type Steps struct { | ||||
| 	Summary     bool `json:"summary"` | ||||
| 	WillDiluted bool `json:"willDiluted"` | ||||
| 	Submeter    bool `json:"submeter"` | ||||
| 	Calculate   bool `json:"calculate"` | ||||
| 	Preview     bool `json:"preview"` | ||||
| 	Publish     bool `json:"publish"` | ||||
| } | ||||
|  | ||||
| func NewSteps() Steps { | ||||
| 	return Steps{ | ||||
| 		Summary:     false, | ||||
| 		WillDiluted: false, | ||||
| 		Submeter:    false, | ||||
| 		Calculate:   false, | ||||
| 		Preview:     false, | ||||
| 		Publish:     false, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type ParkNewestReport struct { | ||||
| 	Park   Park    `bun:"extends" json:"park"` | ||||
| 	Report *Report `bun:"extends" json:"report"` | ||||
| } | ||||
|  | ||||
| func (p *ParkNewestReport) AfterLoad() { | ||||
| 	if p.Report != nil && len(p.Report.Id) == 0 { | ||||
| 		p.Report = nil | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type ReportIndexSimplified struct { | ||||
| 	bun.BaseModel         `bun:"table:report,alias:r"` | ||||
| 	Id                    string     `bun:",pk,notnull" json:"id"` | ||||
| 	ParkId                string     `bun:",notnull" json:"parkId"` | ||||
| 	Period                Date       `bun:"type:date,notnull" json:"period"` | ||||
| 	StepState             Steps      `bun:"type:jsonb,notnull" json:"stepState"` | ||||
| 	Published             bool       `bun:",notnull" json:"published"` | ||||
| 	PublishedAt           *time.Time `bun:"type:timestampz" json:"publishedAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| 	Withdraw              int8       `bun:"type:smallint,notnull" json:"withdraw"` | ||||
| 	LastWithdrawAppliedAt *time.Time `bun:"type:timestamptz" json:"lastWithdrawAppliedAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| 	LastWithdrawAuditAt   *time.Time `bun:"type:timestamptz" json:"lastWithdrawAuditAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| } | ||||
|  | ||||
| type JoinedReportForWithdraw struct { | ||||
| 	Report Report               `bun:"extends" json:"report"` | ||||
| 	Park   ParkSimplified       `bun:"extends" json:"park"` | ||||
| 	User   UserDetailSimplified `bun:"extends" json:"user"` | ||||
| } | ||||
|  | ||||
| var _ bun.BeforeAppendModelHook = (*Report)(nil) | ||||
|  | ||||
| func (p *Report) BeforeAppendModel(ctx context.Context, query bun.Query) error { | ||||
| 	oprTime := time.Now() | ||||
| 	switch query.(type) { | ||||
| 	case *bun.InsertQuery: | ||||
| 		p.CreatedAt = oprTime | ||||
| 		p.LastModifiedAt = &oprTime | ||||
| 	case *bun.UpdateQuery: | ||||
| 		p.LastModifiedAt = &oprTime | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| @@ -1,119 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
|  | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| type ReportSummary struct { | ||||
| 	bun.BaseModel                 `bun:"table:report_summary,alias:rs"` | ||||
| 	ReportId                      string              `bun:",pk,notnull" json:"-"` | ||||
| 	Overall                       decimal.Decimal     `bun:"type:numeric,notnull" json:"overall"` | ||||
| 	OverallFee                    decimal.Decimal     `bun:"type:numeric,notnull" json:"overallFee"` | ||||
| 	ConsumptionFee                decimal.NullDecimal `bun:"type:numeric" json:"consumptionFee"` | ||||
| 	OverallPrice                  decimal.NullDecimal `bun:"type:numeric" json:"overallPrice"` | ||||
| 	Critical                      decimal.Decimal     `bun:"type:numeric,notnull" json:"critical"` | ||||
| 	CriticalFee                   decimal.Decimal     `bun:"type:numeric,notnull" json:"criticalFee"` | ||||
| 	CriticalPrice                 decimal.NullDecimal `bun:"type:numeric" json:"criticalPrice"` | ||||
| 	Peak                          decimal.Decimal     `bun:"type:numeric,notnull" json:"peak"` | ||||
| 	PeakFee                       decimal.Decimal     `bun:"type:numeric,notnull" json:"peakFee"` | ||||
| 	PeakPrice                     decimal.NullDecimal `bun:"type:numeric" json:"peakPrice"` | ||||
| 	Flat                          decimal.Decimal     `bun:"type:numeric,notnull" json:"flat"` | ||||
| 	FlatFee                       decimal.Decimal     `bun:"type:numeric,notnull" json:"flatFee"` | ||||
| 	FlatPrice                     decimal.NullDecimal `bun:"type:numeric" json:"flatPrice"` | ||||
| 	Valley                        decimal.Decimal     `bun:"type:numeric,notnull" json:"valley"` | ||||
| 	ValleyFee                     decimal.Decimal     `bun:"type:numeric,notnull" json:"valleyFee"` | ||||
| 	ValleyPrice                   decimal.NullDecimal `bun:"type:numeric" json:"valleyPrice"` | ||||
| 	Loss                          decimal.NullDecimal `bun:"type:numeric" json:"loss"` | ||||
| 	LossFee                       decimal.NullDecimal `bun:"type:numeric" json:"lossFee"` | ||||
| 	LossProportion                decimal.NullDecimal `bun:"type:numeric" json:"lossProportion"` | ||||
| 	AuthorizeLoss                 decimal.NullDecimal `bun:"type:numeric" json:"authorizeLoss"` | ||||
| 	AuthorizeLossFee              decimal.NullDecimal `bun:"type:numeric" json:"authorizeLossFee"` | ||||
| 	AuthorizeLossProportion       decimal.NullDecimal `bun:"type:numeric" json:"authorizeLossProportion"` | ||||
| 	BasicFee                      decimal.Decimal     `bun:"type:numeric,notnull" json:"basicFee"` | ||||
| 	BasicDilutedPrice             decimal.NullDecimal `bun:"type:numeric" json:"basicDilutedPrice"` | ||||
| 	AdjustFee                     decimal.Decimal     `bun:"type:numeric,notnull" json:"adjustFee"` | ||||
| 	AdjustDilutedPrice            decimal.NullDecimal `bun:"type:numeric" json:"adjustDilutedPrice"` | ||||
| 	MaintenanceDilutedPrice       decimal.NullDecimal `bun:"type:numeric" json:"maintencanceDilutedPrice"` | ||||
| 	LossDilutedPrice              decimal.NullDecimal `bun:"type:numeric" json:"lossDilutedPrice"` | ||||
| 	PublicConsumptionDilutedPrice decimal.NullDecimal `bun:"type:numeric" json:"publicConsumptionDilutedPrice"` | ||||
| 	MaintenanceOverall            decimal.NullDecimal `bun:"type:numeric" json:"maintenanceOverall"` | ||||
| 	FinalDilutedOverall           decimal.NullDecimal `bun:"type:numeric" json:"finalDilutedOverall"` | ||||
| 	Customers                     Consumptions        `bun:"type:jsonb" json:"customers"` | ||||
| 	Publics                       Consumptions        `bun:"type:jsonb" json:"publics"` | ||||
| } | ||||
|  | ||||
| type Consumptions struct { | ||||
| 	Consumption    decimal.NullDecimal `json:"consumption"` | ||||
| 	ConsumptionFee decimal.NullDecimal `json:"fee"` | ||||
| 	Critical       decimal.NullDecimal `json:"critical"` | ||||
| 	CriticalFee    decimal.NullDecimal `json:"criticalFee"` | ||||
| 	Peak           decimal.NullDecimal `json:"peak"` | ||||
| 	PeakFee        decimal.NullDecimal `json:"peakFee"` | ||||
| 	Flat           decimal.NullDecimal `json:"flat"` | ||||
| 	FlatFee        decimal.NullDecimal `json:"flatFee"` | ||||
| 	Valley         decimal.NullDecimal `json:"valley"` | ||||
| 	ValleyFee      decimal.NullDecimal `json:"valleyFee"` | ||||
| 	Proportion     decimal.NullDecimal `json:"proportion"` | ||||
| } | ||||
|  | ||||
| func NewConsumptions() Consumptions { | ||||
| 	return Consumptions{ | ||||
| 		Consumption:    decimal.NewNullDecimal(decimal.Zero), | ||||
| 		ConsumptionFee: decimal.NewNullDecimal(decimal.Zero), | ||||
| 		Critical:       decimal.NewNullDecimal(decimal.Zero), | ||||
| 		Peak:           decimal.NewNullDecimal(decimal.Zero), | ||||
| 		PeakFee:        decimal.NewNullDecimal(decimal.Zero), | ||||
| 		Flat:           decimal.NewNullDecimal(decimal.Zero), | ||||
| 		CriticalFee:    decimal.NewNullDecimal(decimal.Zero), | ||||
| 		FlatFee:        decimal.NewNullDecimal(decimal.Zero), | ||||
| 		Valley:         decimal.NewNullDecimal(decimal.Zero), | ||||
| 		ValleyFee:      decimal.NewNullDecimal(decimal.Zero), | ||||
| 		Proportion:     decimal.NewNullDecimal(decimal.Zero), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s ReportSummary) Validate() (bool, error) { | ||||
| 	amountSum := decimal.Sum(s.Critical, s.Peak, s.Valley) | ||||
| 	if amountSum.GreaterThan(s.Overall) { | ||||
| 		return false, errors.New("峰谷计量总量大于总计电量") | ||||
| 	} | ||||
| 	feeSum := decimal.Sum(s.CriticalFee, s.PeakFee, s.ValleyFee) | ||||
| 	if feeSum.GreaterThan(s.OverallFee) { | ||||
| 		return false, errors.New("峰谷计量费用大于总计费用") | ||||
| 	} | ||||
| 	return true, nil | ||||
| } | ||||
|  | ||||
| func (s *ReportSummary) CalculatePrices() { | ||||
| 	s.ConsumptionFee = decimal.NewNullDecimal(s.OverallFee.Sub(s.BasicFee).Sub(s.AdjustFee)) | ||||
| 	if s.Overall.GreaterThan(decimal.Zero) { | ||||
| 		s.OverallPrice = decimal.NewNullDecimal(s.ConsumptionFee.Decimal.Div(s.Overall).RoundBank(8)) | ||||
| 	} else { | ||||
| 		s.OverallPrice = decimal.NewNullDecimal(decimal.Zero) | ||||
| 	} | ||||
| 	if s.Critical.GreaterThan(decimal.Zero) { | ||||
| 		s.CriticalPrice = decimal.NewNullDecimal(s.CriticalFee.Div(s.Critical).RoundBank(8)) | ||||
| 	} else { | ||||
| 		s.CriticalPrice = decimal.NewNullDecimal(decimal.Zero) | ||||
| 	} | ||||
| 	if s.Peak.GreaterThan(decimal.Zero) { | ||||
| 		s.PeakPrice = decimal.NewNullDecimal(s.PeakFee.Div(s.Peak).RoundBank(8)) | ||||
| 	} else { | ||||
| 		s.PeakPrice = decimal.NewNullDecimal(decimal.Zero) | ||||
| 	} | ||||
| 	if s.Valley.GreaterThan(decimal.Zero) { | ||||
| 		s.ValleyPrice = decimal.NewNullDecimal(s.ValleyFee.Div(s.Valley).RoundBank(8)) | ||||
| 	} else { | ||||
| 		s.ValleyPrice = decimal.NewNullDecimal(decimal.Zero) | ||||
| 	} | ||||
| 	s.Flat = s.Overall.Sub(s.Critical).Sub(s.Peak).Sub(s.Valley) | ||||
| 	s.FlatFee = s.ConsumptionFee.Decimal.Sub(s.CriticalFee).Sub(s.PeakFee).Sub(s.ValleyFee) | ||||
| 	if s.Flat.GreaterThan(decimal.Zero) { | ||||
| 		s.FlatPrice = decimal.NewNullDecimal(s.FlatFee.Div(s.Flat).RoundBank(8)) | ||||
| 	} else { | ||||
| 		s.FlatPrice = decimal.NewNullDecimal(decimal.Zero) | ||||
| 	} | ||||
| } | ||||
| @@ -1,32 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import "time" | ||||
|  | ||||
| type Created struct { | ||||
| 	CreatedAt time.Time `bun:"type:timestamptz,notnull" json:"createdAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| } | ||||
|  | ||||
| type CreatedWithUser struct { | ||||
| 	Created   `bun:"extend"` | ||||
| 	CreatedBy *string `json:"createdBy"` | ||||
| } | ||||
|  | ||||
| type Deleted struct { | ||||
| 	DeletedAt *time.Time `bun:"type:timestamptz,soft_delete,nullzero" json:"deletedAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| } | ||||
|  | ||||
| type DeletedWithUser struct { | ||||
| 	Deleted   `bun:"extend"` | ||||
| 	DeletedBy *string `json:"deletedBy"` | ||||
| } | ||||
|  | ||||
| type CreatedAndModified struct { | ||||
| 	Created        `bun:"extend"` | ||||
| 	LastModifiedAt *time.Time `bun:"type:timestamptz,nullzero" json:"lastModifiedAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| } | ||||
|  | ||||
| type CreatedAndModifiedWithUser struct { | ||||
| 	CreatedAndModified `bun:"extend"` | ||||
| 	CreatedBy          *string `json:"createdBy"` | ||||
| 	LastModifiedBy     *string `json:"lastModifiedBy"` | ||||
| } | ||||
| @@ -1,48 +1,7 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	USER_TYPE_ENT int8 = iota | ||||
| 	USER_TYPE_SUP | ||||
| 	USER_TYPE_OPS | ||||
| ) | ||||
|  | ||||
| type User struct { | ||||
| 	bun.BaseModel `bun:"table:user,alias:u"` | ||||
| 	Created       `bun:"extend"` | ||||
| 	Id            string        `bun:",pk,notnull" json:"id"` | ||||
| 	Username      string        `bun:",notnull" json:"username"` | ||||
| 	Password      string        `bun:",notnull" json:"-"` | ||||
| 	ResetNeeded   bool          `bun:",notnull" json:"resetNeeded"` | ||||
| 	Type          int8          `bun:"type:smallint,notnull" json:"type"` | ||||
| 	Enabled       bool          `bun:",notnull" json:"enabled"` | ||||
| 	Detail        *UserDetail   `bun:"rel:has-one,join:id=id" json:"-"` | ||||
| 	Charges       []*UserCharge `bun:"rel:has-many,join:id=user_id" json:"-"` | ||||
| } | ||||
|  | ||||
| type UserWithCredentials struct { | ||||
| 	bun.BaseModel `bun:"table:user,alias:u"` | ||||
| 	Created       `bun:"extend"` | ||||
| 	Id            string `bun:",pk,notnull" json:"id"` | ||||
| 	Username      string `bun:",notnull" json:"username"` | ||||
| 	Password      string `bun:",notnull" json:"credential"` | ||||
| 	ResetNeeded   bool   `bun:",notnull" json:"resetNeeded"` | ||||
| 	Type          int8   `bun:"type:smallint,notnull" json:"type"` | ||||
| 	Enabled       bool   `bun:",notnull" json:"enabled"` | ||||
| } | ||||
|  | ||||
| var _ bun.BeforeAppendModelHook = (*User)(nil) | ||||
|  | ||||
| func (u *User) BeforeAppendModel(ctx context.Context, query bun.Query) error { | ||||
| 	switch query.(type) { | ||||
| 	case *bun.InsertQuery: | ||||
| 		u.CreatedAt = time.Now() | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
| @@ -1,43 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| type UserCharge struct { | ||||
| 	bun.BaseModel `bun:"table:user_charge,alias:c"` | ||||
| 	Created       `bun:"extend"` | ||||
| 	Seq           int64               `bun:"type:bigint,pk,notnull,autoincrement" json:"seq"` | ||||
| 	UserId        string              `bun:",notnull" json:"userId"` | ||||
| 	Fee           decimal.NullDecimal `bun:"type:numeric" json:"fee"` | ||||
| 	Discount      decimal.NullDecimal `bun:"type:numeric" json:"discount"` | ||||
| 	Amount        decimal.NullDecimal `bun:"type:numeric" json:"amount"` | ||||
| 	ChargeTo      Date                `bun:"type:date,notnull" json:"chargeTo"` | ||||
| 	Settled       bool                `bun:",notnull" json:"settled"` | ||||
| 	SettledAt     *time.Time          `bun:"type:timestamptz" json:"settledAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| 	Cancelled     bool                `bun:",notnull" json:"cancelled"` | ||||
| 	CancelledAt   *time.Time          `bun:"type:timestamptz" json:"cancelledAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| 	Refunded      bool                `bun:",notnull" json:"refunded"` | ||||
| 	RefundedAt    *time.Time          `bun:"type:timestamptz" json:"refundedAt" time_format:"simple_datetime" time_location:"shanghai"` | ||||
| 	Detail        *UserDetail         `bun:"rel:belongs-to,join:user_id=id" json:"-"` | ||||
| } | ||||
|  | ||||
| type ChargeWithName struct { | ||||
| 	UserDetail `bun:"extend"` | ||||
| 	UserCharge `bun:"extend"` | ||||
| } | ||||
|  | ||||
| var _ bun.BeforeAppendModelHook = (*UserCharge)(nil) | ||||
|  | ||||
| func (uc *UserCharge) BeforeAppendModel(ctx context.Context, query bun.Query) error { | ||||
| 	oprTime := time.Now() | ||||
| 	switch query.(type) { | ||||
| 	case *bun.InsertQuery: | ||||
| 		uc.CreatedAt = oprTime | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| @@ -1,69 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/jinzhu/copier" | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| type UserDetail struct { | ||||
| 	bun.BaseModel              `bun:"table:user_detail,alias:d"` | ||||
| 	CreatedAndModifiedWithUser `bun:"extend"` | ||||
| 	DeletedWithUser            `bun:"extend"` | ||||
| 	Id                         string          `bun:",pk,notnull" json:"-"` | ||||
| 	Name                       *string         `json:"name"` | ||||
| 	Abbr                       *string         `json:"abbr"` | ||||
| 	Region                     *string         `json:"region"` | ||||
| 	Address                    *string         `json:"address"` | ||||
| 	Contact                    *string         `json:"contact"` | ||||
| 	Phone                      *string         `json:"phone"` | ||||
| 	UnitServiceFee             decimal.Decimal `bun:"type:numeric,notnull" json:"unitServiceFee"` | ||||
| 	ServiceExpiration          Date            `bun:"type:date,notnull" json:"serviceExpiration"` | ||||
| } | ||||
|  | ||||
| type JoinedUserDetail struct { | ||||
| 	UserDetail `bun:"extend"` | ||||
| 	Id         string `json:"id"` | ||||
| 	Username   string `json:"username"` | ||||
| 	Type       int8   `json:"type"` | ||||
| 	Enabled    bool   `json:"enabled"` | ||||
| } | ||||
|  | ||||
| type FullJoinedUserDetail struct { | ||||
| 	UserDetail `bun:"extend"` | ||||
| 	User       `bun:"extend"` | ||||
| } | ||||
|  | ||||
| type UserDetailSimplified struct { | ||||
| 	bun.BaseModel `bun:"table:user_detail,alias:d"` | ||||
| 	Id            string  `bun:",pk,notnull" json:"id"` | ||||
| 	Name          *string `json:"name"` | ||||
| 	Abbr          *string `json:"abbr"` | ||||
| 	Region        *string `json:"region"` | ||||
| 	Address       *string `json:"address"` | ||||
| 	Contact       *string `json:"contact"` | ||||
| 	Phone         *string `json:"phone"` | ||||
| } | ||||
|  | ||||
| func FromUserDetail(user UserDetail) UserDetailSimplified { | ||||
| 	dest := UserDetailSimplified{} | ||||
| 	copier.Copy(&dest, user) | ||||
| 	return dest | ||||
| } | ||||
|  | ||||
| var _ bun.BeforeAppendModelHook = (*UserDetail)(nil) | ||||
|  | ||||
| func (d *UserDetail) BeforeAppendModel(ctx context.Context, query bun.Query) error { | ||||
| 	oprTime := time.Now() | ||||
| 	switch query.(type) { | ||||
| 	case *bun.InsertQuery: | ||||
| 		d.CreatedAt = oprTime | ||||
| 		d.LastModifiedAt = &oprTime | ||||
| 	case *bun.UpdateQuery: | ||||
| 		d.LastModifiedAt = &oprTime | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| @@ -1,35 +0,0 @@ | ||||
| package model | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/uptrace/bun" | ||||
| ) | ||||
|  | ||||
| type WillDilutedFee struct { | ||||
| 	bun.BaseModel      `bun:"table:will_diluted_fee,alias:w"` | ||||
| 	CreatedAndModified `bun:"extend"` | ||||
| 	Id                 string          `bun:",pk,notnull" json:"diluteId"` | ||||
| 	ReportId           string          `bun:",notnull" json:"reportId"` | ||||
| 	SourceId           *string         `json:"sourceId"` | ||||
| 	Name               string          `bun:",notnull" json:"name"` | ||||
| 	Fee                decimal.Decimal `bun:"type:numeric,notnull" json:"fee"` | ||||
| 	Memo               *string         `bun:"type:text" json:"memo"` | ||||
| 	Origin             *MaintenanceFee `bun:"rel:belongs-to,join:source_id=id"` | ||||
| } | ||||
|  | ||||
| var _ bun.BeforeAppendModelHook = (*WillDilutedFee)(nil) | ||||
|  | ||||
| func (d *WillDilutedFee) BeforeAppendModel(ctx context.Context, query bun.Query) error { | ||||
| 	oprTime := time.Now() | ||||
| 	switch query.(type) { | ||||
| 	case *bun.InsertQuery: | ||||
| 		d.CreatedAt = oprTime | ||||
| 		d.LastModifiedAt = &oprTime | ||||
| 	case *bun.UpdateQuery: | ||||
| 		d.LastModifiedAt = &oprTime | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user