feat(report):安排部分基本报表计算。
This commit is contained in:
parent
17c9dee24f
commit
0eb3be025c
|
@ -1,6 +1,10 @@
|
|||
package model
|
||||
|
||||
import "github.com/shopspring/decimal"
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type EndUserDetail struct {
|
||||
CreatedAndModified `xorm:"extends"`
|
||||
|
@ -32,6 +36,7 @@ type EndUserDetail struct {
|
|||
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"`
|
||||
|
@ -52,3 +57,23 @@ type EndUserDetail struct {
|
|||
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))
|
||||
}
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
package model
|
||||
|
||||
import "github.com/shopspring/decimal"
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type ReportSummary struct {
|
||||
ReportId string `xorm:"varchar(120) pk not null" json:"-"`
|
||||
Overall decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"overall"`
|
||||
OverallFee decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"overallFee"`
|
||||
OverallPrice decimal.Decimal `xorm:"numeric(16,8)" json:"overallPrice"`
|
||||
OverallPrice decimal.NullDecimal `xorm:"numeric(16,8)" json:"overallPrice"`
|
||||
Critical decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"critical"`
|
||||
CriticalFee decimal.Decimal `xorm:"numeric(14,2) not null default 0" json:"criticalFee"`
|
||||
CriticalPrice decimal.NullDecimal `xorm:"numeric(16,8)" json:"criticalPrice"`
|
||||
|
@ -35,3 +39,41 @@ type ReportSummary struct {
|
|||
func (ReportSummary) TableName() string {
|
||||
return "report_summary"
|
||||
}
|
||||
|
||||
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.OverallPrice = decimal.NewNullDecimal(s.OverallFee.Div(s.Overall).RoundBank(8))
|
||||
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.OverallFee.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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/shopspring/decimal"
|
||||
"xorm.io/builder"
|
||||
)
|
||||
|
||||
|
@ -155,13 +154,3 @@ func (_ReportService) RetreiveParkSummary(rid string) (*model.ReportSummary, err
|
|||
}
|
||||
return summary, nil
|
||||
}
|
||||
|
||||
func (_ReportService) CheckSummaryOverall(summary model.ReportSummary) bool {
|
||||
var sum = decimal.Sum(summary.Critical, summary.Peak, summary.Valley)
|
||||
return sum.LessThan(summary.Overall)
|
||||
}
|
||||
|
||||
func (_ReportService) CheckSummaryOverallFee(summary model.ReportSummary) bool {
|
||||
var sum = decimal.Sum(summary.CriticalFee, summary.PeakFee, summary.ValleyFee)
|
||||
return sum.LessThan(summary.OverallFee)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user