package model import ( "errors" "github.com/shopspring/decimal" ) type EndUserDetail struct { CreatedAndModified `xorm:"extends"` ReportId string `xorm:"varchar(120) pk not null" json:"reportId"` ParkId string `xorm:"varchar(120) pk not null" json:"parkId"` MeterId string `xorm:"meter_04kv_id varchar(120) pk not null" json:"meterId"` Seq int64 `xorm:"bigint not null default 0" json:"seq"` Ratio decimal.Decimal `xorm:"numeric(8,4) not null default 1" json:"ratio"` Address *string `xorm:"varchar(100)" json:"address"` CustomerName *string `xorm:"varchar(100)" json:"customerName"` ContactName *string `xorm:"varchar(70)" json:"contactName"` ContactPhone *string `xorm:"varchar(50)" json:"contactPhone"` IsPublicMeter bool `xorm:"'public_meter' bool not null default false" json:"isPublicMeter"` WillDilute bool `xorm:"'dilute' bool not null default false" json:"willDilute"` LastPeriodOverall decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"lastPeriodOverall"` LastPeriodCritical decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"lastPeriodCritical"` LastPeriodPeak decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"lastPeriodPeak"` LastPeriodFlat decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"lastPeriodFlat"` LastPeriodValley decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"lastPeriodValley"` CurrentPeriodOverall decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"currentPeriodOverall"` CurrentPeriodCritical decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"currentPeriodCritical"` CurrentPeriodPeak decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"currentPeriodPeak"` CurrentPeriodFlat decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"currentPeriodFlat"` CurrentPeriodValley decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"currentPeriodValley"` AdjustOverall decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"adjustOverall"` AdjustCritical decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"adjustCritical"` AdjustPeak decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"adjustPeak"` AdjustFlat decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"adjustFlat"` AdjustValley decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"adjustValley"` Overall decimal.NullDecimal `xorm:"numeric(14,2)" json:"overall"` OverallFee decimal.NullDecimal `xorm:"numeric(14,2)" json:"overallFee"` OverallProporttion decimal.Decimal `xorm:"numeric(16,15) not null default 0" json:"-"` Critical decimal.NullDecimal `xorm:"numeric(14,2)" json:"critical"` CriticalFee decimal.NullDecimal `xorm:"numeric(18,8)" json:"criticalFee"` Peak decimal.NullDecimal `xorm:"numeric(14,2)" json:"peak"` PeakFee decimal.NullDecimal `xorm:"numeric(18,8)" json:"peakFee"` Flat decimal.NullDecimal `xorm:"numeric(14,2)" json:"flat"` FlatFee decimal.NullDecimal `xorm:"numeric(18,8)" json:"flatFee"` Valley decimal.NullDecimal `xorm:"numeric(14,2)" json:"valley"` ValleyFee decimal.NullDecimal `xorm:"numeric(18,8)" json:"valleyFee"` BasicFeeDiluted decimal.NullDecimal `xorm:"numeric(18,8)" json:"basicFeeDiluted"` AdjustFeeDiluted decimal.NullDecimal `xorm:"numeric(18,8)" json:"adjustFeeDiluted"` LossDiluted decimal.NullDecimal `xorm:"numeric(18,8)" json:"lossDiluted"` LossFeeDiluted decimal.NullDecimal `xorm:"numeric(18,8)" json:"lossFeeDiluted"` MaintenanceFeeDiluted decimal.NullDecimal `xorm:"numeric(18,8)" json:"maintenanceFeeDiluted"` PublicConsumptionDiluted decimal.NullDecimal `xorm:"numeric(18,8)" json:"publicConsumptionDiluted"` FinalCharge decimal.NullDecimal `xorm:"numeric(14,2)" json:"finalCharge"` } func (EndUserDetail) TableName() string { return "end_user_detail" } 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.Overall = decimal.NewNullDecimal(d.CurrentPeriodOverall.Sub(d.LastPeriodOverall).Add(d.AdjustOverall).RoundBank(2)) d.Critical = decimal.NewNullDecimal(d.CurrentPeriodCritical.Sub(d.LastPeriodCritical).Add(d.AdjustCritical).RoundBank(2)) d.Peak = decimal.NewNullDecimal(d.CurrentPeriodPeak.Sub(d.LastPeriodPeak).Add(d.AdjustPeak).RoundBank(2)) d.Flat = decimal.NewNullDecimal(d.CurrentPeriodFlat.Sub(d.LastPeriodFlat).Add(d.AdjustFlat).RoundBank(2)) d.Valley = decimal.NewNullDecimal(d.CurrentPeriodValley.Sub(d.LastPeriodValley).Add(d.AdjustValley).RoundBank(2)) }