94 lines
6.5 KiB
Go
94 lines
6.5 KiB
Go
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.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"`
|
|
CurrentPeriodOverall decimal.Decimal `excel:"currentPeriodOverall"`
|
|
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"`
|
|
}
|