完善季度

This commit is contained in:
2024-08-29 09:05:26 +08:00
parent 2622876c70
commit a27c5f702f
13 changed files with 292 additions and 58 deletions

View File

@@ -12,17 +12,52 @@ import (
type PeakValley struct{} type PeakValley struct{}
// PeakValleyQuarterPage 季度列表
func (r *PeakValley) PeakValleyQuarterPage(c *gin.Context) {
var req form.PeakValleyQuarterListReq
request.BindParam(c, &req)
respData := service.GroupServices.PeakValley.PeakValleyQuarterPage(&req)
response.SuccessData(respData, c)
}
// CreatePeakValleyQuarter 创建季度
func (r *PeakValley) CreatePeakValleyQuarter(c *gin.Context) {
var req form.CreatePeakValleyQuarterReq
request.BindJson(c, &req)
service.GroupServices.PeakValley.CreatePeakValleyQuarter(&req)
response.Success(c)
}
// UpdatePeakValleyQuarter 修改季度
func (r *PeakValley) UpdatePeakValleyQuarter(c *gin.Context) {
var req form.UpdatePeakValleyQuarterReq
request.BindJson(c, &req)
service.GroupServices.PeakValley.UpdatePeakValleyQuarter(&req)
response.Success(c)
}
// PeakValleyQuarterEditDetail 查看季度
func (r *PeakValley) PeakValleyQuarterEditDetail(c *gin.Context) {
var req form.PeakValleyQuarterEditDetailReq
id, err := strconv.Atoi(c.Param("id"))
exception.PanicMsgBool(err != nil, "参数有误")
req.Id = id
respData := service.GroupServices.PeakValley.PeakValleyQuarterEditDetail(&req)
response.SuccessData(respData, c)
}
// GetPeakValleyTypes 获取峰谷类型 // GetPeakValleyTypes 获取峰谷类型
func (r *PeakValley) GetPeakValleyTypes(c *gin.Context) { func (r *PeakValley) GetPeakValleyTypes(c *gin.Context) {
types := service.GroupServices.PeakValley.GetPeakValleyType() types := service.GroupServices.PeakValley.GetPeakValleyType()
response.SuccessData(gin.H{"types": types}, c) response.SuccessData(gin.H{"types": types}, c)
} }
// PeakValleyRuleList 谷峰规则列表 // GetPeakValleyRulePage 谷峰规则列表
func (r *PeakValley) PeakValleyRuleList(c *gin.Context) { func (r *PeakValley) GetPeakValleyRulePage(c *gin.Context) {
var req form.PeakValleyRuleListReq var req form.PeakValleyRuleListReq
request.BindParam(c, &req) request.BindParam(c, &req)
respData := service.GroupServices.PeakValley.PeakValleyRuleList(&req) respData := service.GroupServices.PeakValley.GetPeakValleyRulePage(&req)
response.SuccessData(respData, c) response.SuccessData(respData, c)
} }
@@ -39,7 +74,7 @@ func (r *PeakValley) UpdatePeakValleyRule(c *gin.Context) {
var req form.UpdatePeakValleyRuleReq var req form.UpdatePeakValleyRuleReq
request.BindJson(c, &req) request.BindJson(c, &req)
service.GroupServices.PeakValley.UpdatePeakValleyRule(&req) service.GroupServices.PeakValley.UpdatePeakValleyRule(&req)
//response.Success(c) response.Success(c)
} }
// PeakValleyRuleDetail 谷峰规则详情 // PeakValleyRuleDetail 谷峰规则详情

View File

@@ -1,6 +1,7 @@
package core package core
import ( import (
init_db_data "energy-management-system/core/init-db-data"
"energy-management-system/global" "energy-management-system/global"
peak_valley "energy-management-system/model/peak-valley" peak_valley "energy-management-system/model/peak-valley"
"fmt" "fmt"
@@ -62,7 +63,8 @@ func AutoMigrate(db *gorm.DB) {
err := db.AutoMigrate( err := db.AutoMigrate(
new(peak_valley.PeakValleyTimeBlock), new(peak_valley.PeakValleyTimeBlock),
new(peak_valley.PeakValleyTimeBlockPrice), new(peak_valley.PeakValleyTimeBlockPrice),
new(peak_valley.PeakValleyQuarterRule),
new(peak_valley.PeakValleyQuarter),
new(peak_valley.PeakValleyRule), new(peak_valley.PeakValleyRule),
//new(model.Role), //new(model.Role),
//new(model.UserRole), //new(model.UserRole),
@@ -76,3 +78,7 @@ func AutoMigrate(db *gorm.DB) {
os.Exit(0) os.Exit(0)
} }
} }
func AutoInitDbData() {
init_db_data.InitDbData()
}

31
core/init-db-data/init.go Normal file
View File

@@ -0,0 +1,31 @@
package init_db_data
import (
"fmt"
"os"
)
type InitDBFunc interface {
Init() (err error)
}
// 初始化数据库
func initDB(InitDBFunctions ...InitDBFunc) (err error) {
for _, v := range InitDBFunctions {
err = v.Init()
if err != nil {
return err
}
}
return nil
}
func InitDbData() {
err := initDB(initPeakValleyTimeBlockData)
if err != nil {
fmt.Println("[-]初始化基础数据失败:", err)
os.Exit(0)
}
}
//

View File

@@ -0,0 +1,56 @@
package init_db_data
import (
"energy-management-system/global"
peak_valley_model "energy-management-system/model/peak-valley"
"github.com/gookit/color"
"gorm.io/gorm"
)
type InitPeakValleyTimeBlockData struct{}
var initPeakValleyTimeBlockData = new(InitPeakValleyTimeBlockData)
// type api struct{}
func buildData() (dataList []*peak_valley_model.PeakValleyTimeBlock) {
// 一天有24小时即1440分钟
totalMinutes := 24 * 60
// 时间块的持续时间10分钟
blockDuration := 10
// 遍历一天中的所有时间块
for i := 0; i < totalMinutes; i += blockDuration {
startTime := i
endTime := i + blockDuration
dataList = append(dataList, &peak_valley_model.PeakValleyTimeBlock{
StartTime: uint(startTime),
EndTime: uint(endTime),
})
}
return dataList
}
// Init 初始化用户数据
func (i *InitPeakValleyTimeBlockData) Init() error {
return global.Db.Transaction(func(tx *gorm.DB) error {
m := &peak_valley_model.PeakValleyTimeBlock{}
var count int64
err := tx.Model(&peak_valley_model.PeakValleyTimeBlock{}).Count(&count).Error
if err != nil {
return err
}
if count == 144 {
color.Danger.Println("\n[PGSQL] --> " + m.TableName() + " 表的初始数据已存在!")
return nil
}
dataList := buildData()
if err := tx.Create(&dataList).Error; err != nil { // 遇到错误时回滚事务
return err
}
color.Info.Println("\n[PGSQL] --> " + m.TableName() + "表初始数据成功!")
return nil
})
}

View File

@@ -1,13 +1,26 @@
package form package form
// 一天的完整谷峰规则 type PeakValleyQuarterListReq struct {
// 发电 (光伏) Page `json:"page"`
// 用电 (电机、生产) }
//新建规则 type PeakValleyQuarterEditDetailReq struct {
// Id int `form:"id" json:"id"`
//选择时间段 设置电价 }
//(将时间段 转化为十分钟区块 查找到对应十分钟区块 创建该规则的电价) type CreatePeakValleyQuarterReq struct {
QuarterName string `json:"quarter_name"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
RuleId uint `json:"rule_id"`
}
type UpdatePeakValleyQuarterReq struct {
Id int `json:"id" binding:"required"`
QuarterName string `json:"quarter_name"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
RuleId uint `json:"rule_id"`
}
type PeakValleyRuleListReq struct { type PeakValleyRuleListReq struct {
Page `json:"page"` Page `json:"page"`

10
main.go
View File

@@ -15,12 +15,16 @@ import (
) )
func init() { func init() {
// 配置
core.InitViper() core.InitViper()
// 数据库
core.InitGorm() core.InitGorm()
//init_model_data.InitDbData() // gin验证器
//core.InitCasbin()
request.InitTrans() request.InitTrans()
//core.AutoMigrate(global.Db) // 可选初始化表结构
core.AutoMigrate(global.Db)
// 可选初始化表数据
core.AutoInitDbData()
} }
func main() { func main() {

View File

@@ -0,0 +1,23 @@
package peak_valley
import (
"energy-management-system/global"
"gorm.io/gorm"
"time"
)
type PeakValleyQuarter struct {
Id uint `gorm:"column:id;primaryKey" json:"id"`
QuarterName string `gorm:"column:quarter_name;comment:季度名称" json:"quarter_name"`
StartTime time.Time `gorm:"column:start_time;type:date;comment:开始时间" json:"start_time"`
EndTime time.Time `gorm:"column:end_time;type:date;comment:结束时间" json:"end_time"`
Rid uint `gorm:"column:rid;comment:季度使用规则" json:"rid"`
Created time.Time `gorm:"column:created;autoCreateTime;comment:创建时间" json:"created"`
Updated time.Time `gorm:"column:updated;autoUpdateTime;comment:修改时间" json:"updated"`
DeletedAt gorm.DeletedAt `gorm:"index;comment:删除时间" json:"-"`
Rule PeakValleyRule `gorm:"foreignKey:rid;references:rule_id"`
}
func (r *PeakValleyQuarter) TableName() string {
return global.AppConf.Db.TablePrefix + "peak_valley_quarters"
}

View File

@@ -1,26 +0,0 @@
package peak_valley
import (
"energy-management-system/global"
"gorm.io/gorm"
"time"
)
// 季度谷峰规则
// 开始时间
// 结束时间
// 谷峰规则ID
type PeakValleyQuarterRule struct {
RuleId uint `gorm:"column:rule_id;primaryKey" json:"rule_id"`
StartTime uint `gorm:"column:start_time;comment:开始时间" json:"start_time"`
EndTime uint `gorm:"column:end_time;comment:结束时间" json:"end_time"`
Created time.Time `gorm:"column:created;autoCreateTime;comment:创建时间" json:"created"`
Updated time.Time `gorm:"column:updated;autoUpdateTime;comment:修改时间" json:"updated"`
DeletedAt gorm.DeletedAt `gorm:"index;comment:删除时间" json:"-"`
}
func (r *PeakValleyQuarterRule) TableName() string {
return global.AppConf.Db.TablePrefix + "peak_valley_quarter_rules"
}

View File

@@ -0,0 +1,43 @@
package peak_valley
import (
"energy-management-system/form"
"energy-management-system/global"
peak_valley_model "energy-management-system/model/peak-valley"
)
// 季度谷峰规则
// 开始时间
// 结束时间
// 谷峰规则ID
func (r *PeakValley) GetPeakValleyQuarterPage(req *form.PeakValleyQuarterListReq) (count int64, list []*peak_valley_model.PeakValleyQuarter, err error) {
db := global.Db.Model(&peak_valley_model.PeakValleyQuarter{})
//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("id desc").Preload("Rule").Find(&list).Error
return
}
func (r *PeakValley) CreatePeakValleyQuarter(d *peak_valley_model.PeakValleyQuarter) error {
return global.Db.Create(d).Error
}
func (r *PeakValley) UpdatePeakValleyQuarter(d *peak_valley_model.PeakValleyQuarter) error {
return global.Db.Save(d).Error
}
func (r *PeakValley) GetOnePeakValleyQuarter(qr map[string]interface{}) (d *peak_valley_model.PeakValleyQuarter, err error) {
db := global.Db
for key, value := range qr {
db = db.Where(key, value)
}
err = db.First(&d).Error
return
}

View File

@@ -19,11 +19,11 @@ type PeakValley struct {
//选择时间段 设置电价 //选择时间段 设置电价
//(将时间段 转化为十分钟区块 查找到对应十分钟区块 创建该规则的电价) //(将时间段 转化为十分钟区块 查找到对应十分钟区块 创建该规则的电价)
func (r *PeakValley) CreatePeakValleyRule(tx *gorm.DB, d *peak_valley_model.PeakValleyRule) error { func (r *PeakValley) CreatePeakValleyRuleTx(tx *gorm.DB, d *peak_valley_model.PeakValleyRule) error {
return tx.Create(d).Error return tx.Create(d).Error
} }
func (r *PeakValley) UpdatePeakValleyRule(tx *gorm.DB, d *peak_valley_model.PeakValleyRule) error { func (r *PeakValley) UpdatePeakValleyRuleTx(tx *gorm.DB, d *peak_valley_model.PeakValleyRule) error {
return tx.Save(d).Error return tx.Save(d).Error
} }

View File

@@ -75,13 +75,3 @@ func (r *PeakValley) GetPeakValleyRuleCustomName(ruleId int) (list []*peak_valle
Find(&list).Error Find(&list).Error
return 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 // 升序排序
//}

View File

@@ -12,12 +12,17 @@ func (r *PeakValley) InitPeakValley(Router *gin.RouterGroup) {
{ {
peakValleyApi.GET("types", v1.Controllers.PeakValley.GetPeakValleyTypes) peakValleyApi.GET("types", v1.Controllers.PeakValley.GetPeakValleyTypes)
peakValleyApi.GET("ruleList", v1.Controllers.PeakValley.PeakValleyRuleList) peakValleyApi.GET("rulePage", v1.Controllers.PeakValley.GetPeakValleyRulePage)
peakValleyApi.POST("createRule", v1.Controllers.PeakValley.CreatePeakValleyRule) peakValleyApi.POST("createRule", v1.Controllers.PeakValley.CreatePeakValleyRule)
peakValleyApi.PUT("updateRule", v1.Controllers.PeakValley.UpdatePeakValleyRule) peakValleyApi.PUT("updateRule", v1.Controllers.PeakValley.UpdatePeakValleyRule)
peakValleyApi.GET("ruleDetail/:id", v1.Controllers.PeakValley.PeakValleyRuleDetail) peakValleyApi.GET("ruleDetail/:id", v1.Controllers.PeakValley.PeakValleyRuleDetail)
peakValleyApi.GET("ruleEditDetail/:id", v1.Controllers.PeakValley.PeakValleyRuleEditDetail) peakValleyApi.GET("ruleEditDetail/:id", v1.Controllers.PeakValley.PeakValleyRuleEditDetail)
peakValleyApi.GET("quarterPage", v1.Controllers.PeakValley.PeakValleyQuarterPage)
peakValleyApi.POST("createQuarter", v1.Controllers.PeakValley.CreatePeakValleyQuarter)
peakValleyApi.PUT("updateQuarter", v1.Controllers.PeakValley.UpdatePeakValleyQuarter)
peakValleyApi.GET("quarterEditDetail/:id", v1.Controllers.PeakValley.PeakValleyQuarterEditDetail)
//userapi.DELETE(":id", api.Controllers.UserApi.DeleteUser) //userapi.DELETE(":id", api.Controllers.UserApi.DeleteUser)
//// 个人信息管理 //// 个人信息管理

View File

@@ -11,10 +11,64 @@ import (
"fmt" "fmt"
"sort" "sort"
"strconv" "strconv"
"time"
) )
type PeakValley struct{} type PeakValley struct{}
// PeakValleyQuarterPage 季度列表
func (r *PeakValley) PeakValleyQuarterPage(req *form.PeakValleyQuarterListReq) map[string]interface{} {
count, list, err := repository.GroupRepositorys.PeakValley.GetPeakValleyQuarterPage(req)
if err != nil {
exception.PanicMsgErr(err, "获取列表失败")
//return
}
ListRsp := make(map[string]interface{})
ListRsp["total"] = count
ListRsp["list"] = list
return ListRsp
}
// PeakValleyQuarterEditDetail 获取季度详情-编辑使用
func (r *PeakValley) PeakValleyQuarterEditDetail(req *form.PeakValleyQuarterEditDetailReq) *peak_valley_model.PeakValleyQuarter {
pvq, err := repository.GroupRepositorys.PeakValley.GetOnePeakValleyQuarter(map[string]interface{}{"id": req.Id})
exception.PanicMsgBool(err != nil, "获取季度详情失败")
return pvq
}
// CreatePeakValleyQuarter 创建季度
func (r *PeakValley) CreatePeakValleyQuarter(req *form.CreatePeakValleyQuarterReq) {
var err error
pvq := &peak_valley_model.PeakValleyQuarter{}
pvq.QuarterName = req.QuarterName
pvq.Rid = req.RuleId
startTime, err := time.Parse("2006-01-02", req.StartTime)
endTime, err := time.Parse("2006-01-02", req.EndTime)
exception.PanicMsgBool(err != nil, "时间解析失败")
pvq.StartTime = startTime
pvq.EndTime = endTime
err = repository.GroupRepositorys.PeakValley.CreatePeakValleyQuarter(pvq)
exception.PanicMsgBool(err != nil, "创建季度失败")
return
}
// UpdatePeakValleyQuarter 修改季度
func (r *PeakValley) UpdatePeakValleyQuarter(req *form.UpdatePeakValleyQuarterReq) {
var err error
pvq, err := repository.GroupRepositorys.PeakValley.GetOnePeakValleyQuarter(map[string]interface{}{"id": req.Id})
exception.PanicMsgBool(err != nil, "修改季度失败")
startTime, err := time.Parse("2006-01-02", req.StartTime)
endTime, err := time.Parse("2006-01-02", req.EndTime)
exception.PanicMsgBool(err != nil, "时间解析失败")
pvq.QuarterName = req.QuarterName
pvq.Rid = req.RuleId
pvq.StartTime = startTime
pvq.EndTime = endTime
err = repository.GroupRepositorys.PeakValley.UpdatePeakValleyQuarter(pvq)
exception.PanicMsgBool(err != nil, "修改季度失败")
return
}
// GetPeakValleyType 获取峰谷类型 // GetPeakValleyType 获取峰谷类型
func (r *PeakValley) GetPeakValleyType() (typeList []*peak_valley_model.PeakValleyType) { func (r *PeakValley) GetPeakValleyType() (typeList []*peak_valley_model.PeakValleyType) {
types := repository.GroupRepositorys.PeakValley.GetPeakValleyTypes() types := repository.GroupRepositorys.PeakValley.GetPeakValleyTypes()
@@ -51,7 +105,7 @@ func (r *PeakValley) CreatePeakValleyRule(req *form.CreatePeakValleyRuleReq) {
pvr := &peak_valley_model.PeakValleyRule{} pvr := &peak_valley_model.PeakValleyRule{}
pvr.RuleName = req.RuleName pvr.RuleName = req.RuleName
pvr.Description = req.Description pvr.Description = req.Description
err = repository.GroupRepositorys.PeakValley.CreatePeakValleyRule(tx, pvr) err = repository.GroupRepositorys.PeakValley.CreatePeakValleyRuleTx(tx, pvr)
if err != nil { if err != nil {
return return
} }
@@ -130,7 +184,7 @@ func (r *PeakValley) UpdatePeakValleyRule(req *form.UpdatePeakValleyRuleReq) {
} }
pvr.RuleName = req.RuleName pvr.RuleName = req.RuleName
pvr.Description = req.Description pvr.Description = req.Description
err = repository.GroupRepositorys.PeakValley.UpdatePeakValleyRule(tx, pvr) err = repository.GroupRepositorys.PeakValley.UpdatePeakValleyRuleTx(tx, pvr)
if err != nil { if err != nil {
return return
} }
@@ -186,8 +240,8 @@ func (r *PeakValley) UpdatePeakValleyRule(req *form.UpdatePeakValleyRuleReq) {
return return
} }
// PeakValleyRuleList 峰谷规则列表 // GetPeakValleyRulePage 峰谷规则列表
func (r *PeakValley) PeakValleyRuleList(req *form.PeakValleyRuleListReq) map[string]interface{} { func (r *PeakValley) GetPeakValleyRulePage(req *form.PeakValleyRuleListReq) map[string]interface{} {
count, list, err := repository.GroupRepositorys.PeakValley.GetPeakValleyRulePage(req) count, list, err := repository.GroupRepositorys.PeakValley.GetPeakValleyRulePage(req)
if err != nil { if err != nil {
exception.PanicMsgErr(err, "获取列表失败") exception.PanicMsgErr(err, "获取列表失败")