electricity_bill_calc_service/vo/reading.go

76 lines
2.8 KiB
Go

package vo
import (
"electricity_bill_calc/model"
"electricity_bill_calc/types"
"fmt"
"github.com/shopspring/decimal"
)
type MeterReadingForm struct {
Overall decimal.Decimal `json:"overall"`
Critical decimal.Decimal `json:"critical"`
Peak decimal.Decimal `json:"peak"`
Flat decimal.Decimal `json:"flat"`
Valley decimal.Decimal `json:"valley"`
ReadAt *types.DateTime `json:"readAt"`
}
func (r MeterReadingForm) Validate() bool {
flat := r.Overall.Sub(r.Critical).Sub(r.Peak).Sub(r.Valley)
return flat.LessThan(decimal.Zero)
}
type MeterReadingDetailResponse struct {
Code string `json:"code"`
Park string `json:"parkId"`
Address *string `json:"address"`
Seq int64 `json:"seq"`
Ratio decimal.Decimal `json:"ratio"`
MeterType int16 `json:"type"`
Enabled bool `json:"enabled"`
Building *string `json:"building"`
BuildingName *string `json:"buildingName"`
OnFloor *string `json:"onFloor"`
Area decimal.Decimal `json:"area"`
AttachedAt *types.DateTime `json:"attachedAt"`
DetachedAt *types.DateTime `json:"detachedAt"`
CreatedAt types.DateTime `json:"createdAt"`
LastModifiedAt *types.DateTime `json:"lastModifiedAt"`
ReadAt types.DateTime `json:"readAt"`
ReadAtTimestamp string `json:"readAtTimestamp"`
Overall decimal.Decimal `json:"overall"`
Critical decimal.Decimal `json:"critical"`
Peak decimal.Decimal `json:"peak"`
Flat decimal.Decimal `json:"flat"`
Valley decimal.Decimal `json:"valley"`
}
func FromDetailedMeterReading(reading model.DetailedMeterReading) MeterReadingDetailResponse {
return MeterReadingDetailResponse{
Code: reading.Detail.Code,
Park: reading.Detail.Park,
Address: reading.Detail.Address,
Seq: reading.Detail.Seq,
Ratio: reading.Detail.Ratio,
MeterType: reading.Detail.MeterType,
Enabled: reading.Detail.Enabled,
Building: reading.Detail.Building,
BuildingName: reading.Detail.BuildingName,
OnFloor: reading.Detail.OnFloor,
Area: reading.Detail.Area.Decimal,
AttachedAt: reading.Detail.AttachedAt,
DetachedAt: (*types.DateTime)(reading.Detail.DetachedAt),
CreatedAt: types.DateTime(reading.Detail.CreatedAt),
LastModifiedAt: (*types.DateTime)(&reading.Detail.LastModifiedAt),
ReadAt: reading.Reading.ReadAt,
ReadAtTimestamp: fmt.Sprintf("%d", reading.Reading.ReadAt.UnixMicro()),
Overall: reading.Reading.Overall,
Critical: reading.Reading.Critical,
Peak: reading.Reading.Peak,
Flat: reading.Reading.Flat,
Valley: reading.Reading.Valley,
}
}