This commit is contained in:
2024-08-26 17:20:13 +08:00
commit 51090658a2
39 changed files with 2231 additions and 0 deletions

9
repository/enter.go Normal file
View File

@@ -0,0 +1,9 @@
package repository
import "energy-management-system/repository/peak-valley"
type groupRepository struct {
peak_valley.PeakValley
}
var GroupRepositorys = new(groupRepository)

View File

@@ -0,0 +1,53 @@
package peak_valley
import (
"energy-management-system/form"
"energy-management-system/global"
peak_valley_model "energy-management-system/model/peak-valley"
"gorm.io/gorm"
)
type PeakValley struct {
}
// 一天的完整谷峰规则
// 发电 (光伏)
// 用电 (电机、生产)
//新建规则
//
//选择时间段 设置电价
//(将时间段 转化为十分钟区块 查找到对应十分钟区块 创建该规则的电价)
func (r *PeakValley) CreatePeakValleyRule(tx *gorm.DB, d *peak_valley_model.PeakValleyRule) error {
return tx.Create(d).Error
}
func (r *PeakValley) UpdatePeakValleyRule(tx *gorm.DB, d *peak_valley_model.PeakValleyRule) error {
return tx.Save(d).Error
}
func (r *PeakValley) GetOnePeakValleyRule(qr map[string]interface{}) (d *peak_valley_model.PeakValleyRule, err error) {
db := global.Db
for key, value := range qr {
db = db.Where(key, value)
}
err = db.First(&d).Error
//if errors.Is(err, gorm.ErrRecordNotFound) {
// d = nil
//}
return
}
func (r *PeakValley) GetPeakValleyRulePage(req *form.PeakValleyRuleListReq) (count int64, list []*peak_valley_model.PeakValleyRule, err error) {
db := global.Db.Model(&peak_valley_model.PeakValleyRule{})
//for key, value := range qr {
// db = db.Where(key, value)
//}
err = db.Count(&count).Error
if err != nil {
return
}
err = db.Offset((req.Page.GetPageIndex() - 1) * req.Page.GetPageSize()).Limit(req.Page.GetPageSize()).Order("rule_id desc").Find(&list).Error
return
}

View File

@@ -0,0 +1,34 @@
package peak_valley
import (
"energy-management-system/global"
peak_valley_model "energy-management-system/model/peak-valley"
"gorm.io/gorm"
)
func (r *PeakValley) GetTimeBlockIdsByTimeBlock(tx *gorm.DB, startTime, endTime uint) (ids []uint, err error) {
err = tx.Model(&peak_valley_model.PeakValleyTimeBlock{}).
Where("start_time < ? AND end_time > ?", endTime, startTime).
Pluck("block_index", &ids).Error
return ids, err
}
// GetBlockStartTime 获取最小开始时间
func (r *PeakValley) GetBlockStartTime(blockId int) (startTime uint, err error) {
var peakValleyTimeBlockModel peak_valley_model.PeakValleyTimeBlock
err = global.Db.First(&peakValleyTimeBlockModel, blockId).Error
if err != nil {
return 0, err
}
return peakValleyTimeBlockModel.StartTime, nil
}
// GetBlockEndTime 获取最大结束时间
func (r *PeakValley) GetBlockEndTime(blockId int) (endTime uint, err error) {
var peakValleyTimeBlockModel peak_valley_model.PeakValleyTimeBlock
err = global.Db.First(&peakValleyTimeBlockModel, blockId).Error
if err != nil {
return 0, err
}
return peakValleyTimeBlockModel.EndTime, nil
}

View File

@@ -0,0 +1,87 @@
package peak_valley
import (
"energy-management-system/global"
peak_valley_model "energy-management-system/model/peak-valley"
"gorm.io/gorm"
)
func (r *PeakValley) CreatePeakValleyTimeBlockPrices(tx *gorm.DB, ds []*peak_valley_model.PeakValleyTimeBlockPrice) error {
return tx.Create(ds).Error
}
func (r *PeakValley) DeletePeakValleyTimeBlockPricesByRuleId(tx *gorm.DB, ruleId uint, unscoped bool) error {
db := tx.Where("peak_valley_rule_id", ruleId)
if unscoped {
db = db.Unscoped()
}
return db.Delete(&peak_valley_model.PeakValleyTimeBlockPrice{}).Error
}
func (r *PeakValley) GetPeakValleyTypes() map[int]string {
return peak_valley_model.PeakValleyTypes
}
// 获取指定规则的某个类型的时间段
func (r *PeakValley) GetPeakValleyRulePriceByTypeAndRuleID(ruleId uint, pvType uint) (blockIds []int, err error) {
db := global.Db.Model(&peak_valley_model.PeakValleyTimeBlockPrice{})
//for key, value := range qr {
db = db.Where("peak_valley_rule_id = ?", ruleId)
db = db.Where("peak_valley_type = ?", pvType)
err = db.Order("block_id ASC").Pluck("block_id", &blockIds).Error
return
}
// 获取指定规则的某个类型的时间段
func (r *PeakValley) GetPeakValleyRulePriceByCustomNameAndRuleID(ruleId uint, customName string) (blockIds []int, err error) {
db := global.Db.Model(&peak_valley_model.PeakValleyTimeBlockPrice{})
//for key, value := range qr {
db = db.Where("peak_valley_rule_id = ?", ruleId)
db = db.Where("custom_name = ?", customName)
err = db.Order("block_id ASC").Pluck("block_id", &blockIds).Error
return
}
func (r *PeakValley) GetPeakValleyRulePriceCustomName(blockId int, ruleId uint) (customName string, err error) {
var peakValleyTimeBlockPriceModel peak_valley_model.PeakValleyTimeBlockPrice
err = global.Db.Model(&peak_valley_model.PeakValleyTimeBlockPrice{}).
Where("block_id = ?", blockId).
Where("peak_valley_rule_id = ?", ruleId).
First(&peakValleyTimeBlockPriceModel).Error
if err != nil {
return "", err
}
return peakValleyTimeBlockPriceModel.CustomName, nil
}
// GetPeakValleyRuleTypes 获取规则下 五种类型
func (r *PeakValley) GetPeakValleyRuleTypes(ruleId int) (list []*peak_valley_model.PeakValleyRuleType, err error) {
// 查询指定规则下的所有不同的 peak_valley_type
err = global.Db.Model(&peak_valley_model.PeakValleyTimeBlockPrice{}).
//Select("DISTINCT peak_valley_type,custom_name").
Select("DISTINCT peak_valley_type,price").
Where("peak_valley_rule_id = ?", ruleId).
Find(&list).Error
return
}
// GetPeakValleyRuleCustomName 规则下 五种类型 + 自定义名称 + 价格
func (r *PeakValley) GetPeakValleyRuleCustomName(ruleId int) (list []*peak_valley_model.PeakValleyRuleCustomName, err error) {
// 查询指定规则下的所有不同的 peak_valley_type
err = global.Db.Model(&peak_valley_model.PeakValleyTimeBlockPrice{}).
//Select("DISTINCT peak_valley_type,custom_name").
Select("DISTINCT custom_name,peak_valley_type,price").
Where("peak_valley_rule_id = ?", ruleId).
Find(&list).Error
return
}
//type ByCustomNameNumber []*peak_valley_model.PeakValleyRuleCustomName
//
//func (a ByCustomNameNumber) Len() int { return len(a) }
//func (a ByCustomNameNumber) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
//func (a ByCustomNameNumber) Less(i, j int) bool {
// numI, _ := utils.ExtractNumber(a[i].CustomName)
// numJ, _ := utils.ExtractNumber(a[j].CustomName)
// return numI < numJ // 升序排序
//}