From a27c5f702fa574fb37ed752e4f5118e41ce5951b Mon Sep 17 00:00:00 2001 From: iuu <2167162990@qq.com> Date: Thu, 29 Aug 2024 09:05:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=AD=A3=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/peak_valley.go | 43 +++++++++++-- core/gorm.go | 8 ++- core/init-db-data/init.go | 31 ++++++++++ core/init-db-data/peak_valley_time_block.go | 56 +++++++++++++++++ form/peak_valley_rule.go | 27 +++++--- main.go | 10 ++- model/peak-valley/peak_valley_quarter.go | 23 +++++++ model/peak-valley/peak_valley_quarter_rule.go | 26 -------- repository/peak-valley/peak_valley_quarter.go | 43 +++++++++++++ repository/peak-valley/peak_valley_rule.go | 4 +- .../peak_valley_time_block_price.go | 10 --- router/routes/peak_valley.go | 7 ++- service/peak_valley.go | 62 +++++++++++++++++-- 13 files changed, 292 insertions(+), 58 deletions(-) create mode 100644 core/init-db-data/init.go create mode 100644 core/init-db-data/peak_valley_time_block.go create mode 100644 model/peak-valley/peak_valley_quarter.go delete mode 100644 model/peak-valley/peak_valley_quarter_rule.go create mode 100644 repository/peak-valley/peak_valley_quarter.go diff --git a/api/v1/peak_valley.go b/api/v1/peak_valley.go index bc788df..c9bae35 100644 --- a/api/v1/peak_valley.go +++ b/api/v1/peak_valley.go @@ -12,17 +12,52 @@ import ( 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 获取峰谷类型 func (r *PeakValley) GetPeakValleyTypes(c *gin.Context) { types := service.GroupServices.PeakValley.GetPeakValleyType() response.SuccessData(gin.H{"types": types}, c) } -// PeakValleyRuleList 谷峰规则列表 -func (r *PeakValley) PeakValleyRuleList(c *gin.Context) { +// GetPeakValleyRulePage 谷峰规则列表 +func (r *PeakValley) GetPeakValleyRulePage(c *gin.Context) { var req form.PeakValleyRuleListReq request.BindParam(c, &req) - respData := service.GroupServices.PeakValley.PeakValleyRuleList(&req) + respData := service.GroupServices.PeakValley.GetPeakValleyRulePage(&req) response.SuccessData(respData, c) } @@ -39,7 +74,7 @@ func (r *PeakValley) UpdatePeakValleyRule(c *gin.Context) { var req form.UpdatePeakValleyRuleReq request.BindJson(c, &req) service.GroupServices.PeakValley.UpdatePeakValleyRule(&req) - //response.Success(c) + response.Success(c) } // PeakValleyRuleDetail 谷峰规则详情 diff --git a/core/gorm.go b/core/gorm.go index fc6483b..a5cff6f 100644 --- a/core/gorm.go +++ b/core/gorm.go @@ -1,6 +1,7 @@ package core import ( + init_db_data "energy-management-system/core/init-db-data" "energy-management-system/global" peak_valley "energy-management-system/model/peak-valley" "fmt" @@ -62,7 +63,8 @@ func AutoMigrate(db *gorm.DB) { err := db.AutoMigrate( new(peak_valley.PeakValleyTimeBlock), new(peak_valley.PeakValleyTimeBlockPrice), - new(peak_valley.PeakValleyQuarterRule), + + new(peak_valley.PeakValleyQuarter), new(peak_valley.PeakValleyRule), //new(model.Role), //new(model.UserRole), @@ -76,3 +78,7 @@ func AutoMigrate(db *gorm.DB) { os.Exit(0) } } + +func AutoInitDbData() { + init_db_data.InitDbData() +} diff --git a/core/init-db-data/init.go b/core/init-db-data/init.go new file mode 100644 index 0000000..2f1028e --- /dev/null +++ b/core/init-db-data/init.go @@ -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) + } +} + +// diff --git a/core/init-db-data/peak_valley_time_block.go b/core/init-db-data/peak_valley_time_block.go new file mode 100644 index 0000000..fe111d4 --- /dev/null +++ b/core/init-db-data/peak_valley_time_block.go @@ -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 + }) +} diff --git a/form/peak_valley_rule.go b/form/peak_valley_rule.go index dabbc9e..c7528bc 100644 --- a/form/peak_valley_rule.go +++ b/form/peak_valley_rule.go @@ -1,13 +1,26 @@ 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 { Page `json:"page"` diff --git a/main.go b/main.go index edc1304..d8abad0 100644 --- a/main.go +++ b/main.go @@ -15,12 +15,16 @@ import ( ) func init() { + // 配置 core.InitViper() + // 数据库 core.InitGorm() - //init_model_data.InitDbData() - //core.InitCasbin() + // gin验证器 request.InitTrans() - //core.AutoMigrate(global.Db) + // 可选初始化表结构 + core.AutoMigrate(global.Db) + // 可选初始化表数据 + core.AutoInitDbData() } func main() { diff --git a/model/peak-valley/peak_valley_quarter.go b/model/peak-valley/peak_valley_quarter.go new file mode 100644 index 0000000..dff99f9 --- /dev/null +++ b/model/peak-valley/peak_valley_quarter.go @@ -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" +} diff --git a/model/peak-valley/peak_valley_quarter_rule.go b/model/peak-valley/peak_valley_quarter_rule.go deleted file mode 100644 index 55919fa..0000000 --- a/model/peak-valley/peak_valley_quarter_rule.go +++ /dev/null @@ -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" -} diff --git a/repository/peak-valley/peak_valley_quarter.go b/repository/peak-valley/peak_valley_quarter.go new file mode 100644 index 0000000..92f72ca --- /dev/null +++ b/repository/peak-valley/peak_valley_quarter.go @@ -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 +} diff --git a/repository/peak-valley/peak_valley_rule.go b/repository/peak-valley/peak_valley_rule.go index 82a1aa3..80fa8ed 100644 --- a/repository/peak-valley/peak_valley_rule.go +++ b/repository/peak-valley/peak_valley_rule.go @@ -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 } -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 } diff --git a/repository/peak-valley/peak_valley_time_block_price.go b/repository/peak-valley/peak_valley_time_block_price.go index 5fb40ae..1f0a876 100644 --- a/repository/peak-valley/peak_valley_time_block_price.go +++ b/repository/peak-valley/peak_valley_time_block_price.go @@ -75,13 +75,3 @@ func (r *PeakValley) GetPeakValleyRuleCustomName(ruleId int) (list []*peak_valle 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 // 升序排序 -//} diff --git a/router/routes/peak_valley.go b/router/routes/peak_valley.go index d75ace9..c996c03 100644 --- a/router/routes/peak_valley.go +++ b/router/routes/peak_valley.go @@ -12,12 +12,17 @@ func (r *PeakValley) InitPeakValley(Router *gin.RouterGroup) { { 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.PUT("updateRule", v1.Controllers.PeakValley.UpdatePeakValleyRule) peakValleyApi.GET("ruleDetail/:id", v1.Controllers.PeakValley.PeakValleyRuleDetail) 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) //// 个人信息管理 diff --git a/service/peak_valley.go b/service/peak_valley.go index 93350be..557528b 100644 --- a/service/peak_valley.go +++ b/service/peak_valley.go @@ -11,10 +11,64 @@ import ( "fmt" "sort" "strconv" + "time" ) 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 获取峰谷类型 func (r *PeakValley) GetPeakValleyType() (typeList []*peak_valley_model.PeakValleyType) { types := repository.GroupRepositorys.PeakValley.GetPeakValleyTypes() @@ -51,7 +105,7 @@ func (r *PeakValley) CreatePeakValleyRule(req *form.CreatePeakValleyRuleReq) { pvr := &peak_valley_model.PeakValleyRule{} pvr.RuleName = req.RuleName pvr.Description = req.Description - err = repository.GroupRepositorys.PeakValley.CreatePeakValleyRule(tx, pvr) + err = repository.GroupRepositorys.PeakValley.CreatePeakValleyRuleTx(tx, pvr) if err != nil { return } @@ -130,7 +184,7 @@ func (r *PeakValley) UpdatePeakValleyRule(req *form.UpdatePeakValleyRuleReq) { } pvr.RuleName = req.RuleName pvr.Description = req.Description - err = repository.GroupRepositorys.PeakValley.UpdatePeakValleyRule(tx, pvr) + err = repository.GroupRepositorys.PeakValley.UpdatePeakValleyRuleTx(tx, pvr) if err != nil { return } @@ -186,8 +240,8 @@ func (r *PeakValley) UpdatePeakValleyRule(req *form.UpdatePeakValleyRuleReq) { return } -// PeakValleyRuleList 峰谷规则列表 -func (r *PeakValley) PeakValleyRuleList(req *form.PeakValleyRuleListReq) map[string]interface{} { +// GetPeakValleyRulePage 峰谷规则列表 +func (r *PeakValley) GetPeakValleyRulePage(req *form.PeakValleyRuleListReq) map[string]interface{} { count, list, err := repository.GroupRepositorys.PeakValley.GetPeakValleyRulePage(req) if err != nil { exception.PanicMsgErr(err, "获取列表失败")