81 lines
2.9 KiB
Go
81 lines
2.9 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.GreaterThanOrEqual(decimal.Zero)
|
|
}
|
|
|
|
type MeterReadingFormWithCode struct {
|
|
Code string `json:"code"`
|
|
MeterReadingForm
|
|
}
|
|
|
|
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,
|
|
}
|
|
}
|