实现Update接口
This commit is contained in:
@@ -5,14 +5,12 @@ package feed
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/controller"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/logs"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/model"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/storage/repository"
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// Controller 饲料控制器
|
||||
@@ -80,6 +78,22 @@ func (c *Controller) ListPlans(ctx *gin.Context) {
|
||||
controller.SendSuccessResponse(ctx, "success", resp)
|
||||
}
|
||||
|
||||
// UpdateRequest 更新计划请求结构体
|
||||
type UpdateRequest struct {
|
||||
ID uint `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
Type model.FeedingPlanType `json:"type"`
|
||||
Enabled bool `json:"enabled"`
|
||||
ScheduleCron *string `json:"scheduleCron"`
|
||||
ExecutionLimit int `json:"executionLimit"`
|
||||
ParentID *uint `json:"parentID"`
|
||||
OrderInParent *int `json:"orderInParent"`
|
||||
IsMaster bool `json:"isMaster"`
|
||||
Steps []FeedingPlanStep `json:"steps"`
|
||||
SubPlans []UpdateRequest `json:"subPlans"`
|
||||
}
|
||||
|
||||
// DetailResponse 喂料计划主表
|
||||
type DetailResponse struct {
|
||||
// ID 计划ID
|
||||
@@ -109,18 +123,6 @@ type DetailResponse struct {
|
||||
// OrderInParent 在父计划中的执行顺序
|
||||
OrderInParent *int `json:"orderInParent"`
|
||||
|
||||
// IsMaster 是否为主计划(主计划可以包含子计划)
|
||||
IsMaster bool `json:"isMaster"`
|
||||
|
||||
// CreatedAt 创建时间
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
|
||||
// UpdatedAt 更新时间
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
|
||||
// DeletedAt 删除时间(用于软删除)
|
||||
DeletedAt gorm.DeletedAt `json:"deletedAt"`
|
||||
|
||||
// Steps 计划步骤列表
|
||||
Steps []FeedingPlanStep `json:"steps"`
|
||||
|
||||
@@ -153,15 +155,6 @@ type FeedingPlanStep struct {
|
||||
|
||||
// ExecutionLimit 步骤执行次数限制(0表示无限制)
|
||||
ExecutionLimit int `json:"executionLimit"`
|
||||
|
||||
// CreatedAt 创建时间
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
|
||||
// UpdatedAt 更新时间
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
|
||||
// DeletedAt 删除时间(用于软删除)
|
||||
DeletedAt gorm.DeletedAt `json:"deletedAt"`
|
||||
}
|
||||
|
||||
// Detail 获取饲料计划列细节
|
||||
@@ -188,6 +181,65 @@ func (c *Controller) Detail(ctx *gin.Context) {
|
||||
controller.SendSuccessResponse(ctx, "success", resp)
|
||||
}
|
||||
|
||||
// Update 更新饲料计划
|
||||
func (c *Controller) Update(ctx *gin.Context) {
|
||||
var req UpdateRequest
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "请求参数错误: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 转换请求结构体为模型
|
||||
plan := c.convertToUpdateModel(&req)
|
||||
|
||||
// 调用仓库更新计划
|
||||
if err := c.feedPlanRepo.UpdateFeedingPlan(plan); err != nil {
|
||||
c.logger.Error("更新计划失败: " + err.Error())
|
||||
controller.SendErrorResponse(ctx, controller.InternalServerErrorCode, "更新计划失败")
|
||||
return
|
||||
}
|
||||
|
||||
controller.SendSuccessResponse(ctx, "更新计划成功", nil)
|
||||
}
|
||||
|
||||
// convertToUpdateModel 将更新请求结构体转换为数据库模型
|
||||
func (c *Controller) convertToUpdateModel(req *UpdateRequest) *model.FeedingPlan {
|
||||
plan := &model.FeedingPlan{
|
||||
ID: req.ID,
|
||||
Name: req.Name,
|
||||
Description: req.Description,
|
||||
Type: req.Type,
|
||||
Enabled: req.Enabled,
|
||||
ScheduleCron: req.ScheduleCron,
|
||||
ExecutionLimit: req.ExecutionLimit,
|
||||
ParentID: req.ParentID,
|
||||
OrderInParent: req.OrderInParent,
|
||||
Steps: make([]model.FeedingPlanStep, len(req.Steps)),
|
||||
SubPlans: make([]model.FeedingPlan, len(req.SubPlans)),
|
||||
}
|
||||
|
||||
// 转换步骤
|
||||
for i, step := range req.Steps {
|
||||
plan.Steps[i] = model.FeedingPlanStep{
|
||||
ID: step.ID,
|
||||
PlanID: step.PlanID,
|
||||
StepOrder: step.StepOrder,
|
||||
DeviceID: step.DeviceID,
|
||||
TargetValue: step.TargetValue,
|
||||
Action: step.Action,
|
||||
ScheduleCron: step.ScheduleCron,
|
||||
ExecutionLimit: step.ExecutionLimit,
|
||||
}
|
||||
}
|
||||
|
||||
// 转换子计划
|
||||
for i, subReq := range req.SubPlans {
|
||||
plan.SubPlans[i] = *c.convertToUpdateModel(&subReq)
|
||||
}
|
||||
|
||||
return plan
|
||||
}
|
||||
|
||||
// convertToDetailResponse 将数据库模型转换为响应结构体
|
||||
func (c *Controller) convertToDetailResponse(plan *model.FeedingPlan) *DetailResponse {
|
||||
resp := &DetailResponse{
|
||||
@@ -200,10 +252,6 @@ func (c *Controller) convertToDetailResponse(plan *model.FeedingPlan) *DetailRes
|
||||
ExecutionLimit: plan.ExecutionLimit,
|
||||
ParentID: plan.ParentID,
|
||||
OrderInParent: plan.OrderInParent,
|
||||
IsMaster: plan.IsMaster,
|
||||
CreatedAt: plan.CreatedAt,
|
||||
UpdatedAt: plan.UpdatedAt,
|
||||
DeletedAt: plan.DeletedAt,
|
||||
Steps: make([]FeedingPlanStep, len(plan.Steps)),
|
||||
SubPlans: make([]DetailResponse, len(plan.SubPlans)),
|
||||
}
|
||||
@@ -219,9 +267,6 @@ func (c *Controller) convertToDetailResponse(plan *model.FeedingPlan) *DetailRes
|
||||
Action: step.Action,
|
||||
ScheduleCron: step.ScheduleCron,
|
||||
ExecutionLimit: step.ExecutionLimit,
|
||||
CreatedAt: step.CreatedAt,
|
||||
UpdatedAt: step.UpdatedAt,
|
||||
DeletedAt: step.DeletedAt,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -238,10 +283,6 @@ func (c *Controller) convertToDetailResponse(plan *model.FeedingPlan) *DetailRes
|
||||
ExecutionLimit: subPlan.ExecutionLimit,
|
||||
ParentID: subPlan.ParentID,
|
||||
OrderInParent: subPlan.OrderInParent,
|
||||
IsMaster: subPlan.IsMaster,
|
||||
CreatedAt: subPlan.CreatedAt,
|
||||
UpdatedAt: subPlan.UpdatedAt,
|
||||
DeletedAt: subPlan.DeletedAt,
|
||||
Steps: subPlan.Steps,
|
||||
SubPlans: subPlan.SubPlans,
|
||||
}
|
||||
|
||||
@@ -45,9 +45,6 @@ type FeedingPlan struct {
|
||||
// OrderInParent 在父计划中的执行顺序
|
||||
OrderInParent *int `gorm:"column:order_in_parent" json:"order_in_parent,omitempty"`
|
||||
|
||||
// IsMaster 是否为主计划(主计划可以包含子计划)
|
||||
IsMaster bool `gorm:"not null;default:false;column:is_master" json:"is_master"`
|
||||
|
||||
// CreatedAt 创建时间
|
||||
CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user