12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package data
- import (
- "server/dao"
- "time"
- )
- type ProcessedPowerData struct {
- TotalActivePower float64
- UploadTime time.Time
- }
- func parseTime(uploadTimeString string) (time.Time, error) {
- parsedTime, err := time.Parse("2006-01-02 15:04:05", uploadTimeString)
- if err != nil {
- return time.Time{}, err
- }
- return parsedTime, nil
- }
- func PreprocessData(data []dao.InductanceDetails) ([]ProcessedPowerData, error) {
- processedData := make([]ProcessedPowerData, len(data))
- for i, d := range data {
- t, err := parseTime(d.UploadTime)
- if err != nil {
- return nil, err
- }
- processedData[i] = ProcessedPowerData{
- TotalActivePower: float64(d.TotalActivePower),
- UploadTime: t,
- }
- }
- return processedData, nil
- }
- func CalculateDailyEnergyConsumption(data []ProcessedPowerData) float64 {
- if len(data) < 2 {
- // 如果数据不足,根据实际情况返回值或进行估算
- return 0 // 或者其它逻辑
- }
- var totalEnergy float64 = 0
- for i := 0; i < len(data)-1; i++ {
- current := data[i]
- next := data[i+1]
- duration := next.UploadTime.Sub(current.UploadTime).Minutes() // 时间差(分钟)
- if duration > 10 { // 如果间隔超过10分钟,则用最后一次上报的功率估算缺失部分
- missingIntervals := int(duration / 10)
- for j := 0; j < missingIntervals; j++ {
- totalEnergy += (current.TotalActivePower * 10 / 60 / 1000) // 计算每个10分钟的能量消耗
- }
- } else {
- energy := ((current.TotalActivePower + next.TotalActivePower) / 2) * duration / 60 / 1000 // 平均功率乘以时间转换为kW·h
- totalEnergy += energy
- }
- }
- return totalEnergy
- }
|