feat: 添加和删除养护事项
This commit is contained in:
@@ -206,3 +206,47 @@ func (a *MyPlantApi) DeletePlans(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
response.OkWithMsg("删除任务成功", c)
|
response.OkWithMsg("删除任务成功", c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddCarePlan 添加养护事项
|
||||||
|
// @Tags 我的植物
|
||||||
|
// @Summary 添加养护事项
|
||||||
|
// @Security BearerAuth
|
||||||
|
// @accept json
|
||||||
|
// @Produce application/json
|
||||||
|
// @Param data body plantReq.CreateCarePlan true "添加养护事项"
|
||||||
|
// @Success 200 {string} string "{"success":true,"data":{},"msg":"添加成功"}"
|
||||||
|
// @Router /plant/plan/add [post]
|
||||||
|
func (a *MyPlantApi) AddCarePlan(c *gin.Context) {
|
||||||
|
var req plantReq.AddPlans
|
||||||
|
err := c.ShouldBindJSON(&req)
|
||||||
|
if err != nil {
|
||||||
|
response.FailWithMsg("请求参数错误", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = plantService.AddCarePlan(req)
|
||||||
|
if err != nil {
|
||||||
|
global.Logger.Error("添加任务失败", zap.Error(err))
|
||||||
|
response.FailWithMsg("添加任务失败", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.OkWithMsg("添加任务成功", c)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeletePlan 删除养护事项
|
||||||
|
// @Tags 我的植物
|
||||||
|
// @Summary 删除养护事项
|
||||||
|
// @Security BearerAuth
|
||||||
|
// @Produce application/json
|
||||||
|
// @Param id query string true "id"
|
||||||
|
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
|
||||||
|
// @Router /plant/plan/delete [get]
|
||||||
|
func (a *MyPlantApi) DeletePlan(c *gin.Context) {
|
||||||
|
id := c.Query("id")
|
||||||
|
err := plantService.DeletePlan(id)
|
||||||
|
if err != nil {
|
||||||
|
global.Logger.Error("删除任务失败", zap.Error(err))
|
||||||
|
response.FailWithMsg("删除任务失败", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.OkWithMsg("删除任务成功", c)
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"sundynix-go/model/commom/response"
|
"sundynix-go/model/commom/response"
|
||||||
"sundynix-go/model/system"
|
"sundynix-go/model/system"
|
||||||
systemReq "sundynix-go/model/system/request"
|
systemReq "sundynix-go/model/system/request"
|
||||||
|
"sundynix-go/utils/auth"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@@ -14,6 +15,24 @@ import (
|
|||||||
type UserApi struct {
|
type UserApi struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CurrentUser
|
||||||
|
// @tags 用户管理
|
||||||
|
// @Summary 当前登录用户
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @Produce json
|
||||||
|
// @Success 200 {object} response.Response "{"code": 200, "data": {}, "msg": "添加成功"}"
|
||||||
|
// @Router /user/info [get]
|
||||||
|
func (u *UserApi) CurrentUser(c *gin.Context) {
|
||||||
|
userId := auth.GetUserId(c)
|
||||||
|
user, err := userService.GetUserById(userId)
|
||||||
|
if err != nil {
|
||||||
|
global.Logger.Error("获取用户信息失败!", zap.Error(err))
|
||||||
|
response.FailWithMsg(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.OkWithData(user, c)
|
||||||
|
}
|
||||||
|
|
||||||
// SaveUser
|
// SaveUser
|
||||||
// @tags 用户管理
|
// @tags 用户管理
|
||||||
// @Summary 新增用户
|
// @Summary 新增用户
|
||||||
|
|||||||
@@ -5,6 +5,15 @@ type CarePlan struct {
|
|||||||
Name string `json:"name"` // 农事名称
|
Name string `json:"name"` // 农事名称
|
||||||
Period int `json:"period"` // 周期
|
Period int `json:"period"` // 周期
|
||||||
}
|
}
|
||||||
|
type CreateCarePlan struct {
|
||||||
|
PlantId string `json:"plantId" binding:"required"`
|
||||||
|
Icon string `json:"icon"` // icon信息
|
||||||
|
Name string `json:"name"` // 农事名称
|
||||||
|
Period int `json:"period"` // 周期
|
||||||
|
}
|
||||||
|
type AddPlans struct {
|
||||||
|
CarePlan []CreateCarePlan `json:"carePlan"`
|
||||||
|
}
|
||||||
|
|
||||||
// CreateMyPlant 创建植物
|
// CreateMyPlant 创建植物
|
||||||
type CreateMyPlant struct {
|
type CreateMyPlant struct {
|
||||||
|
|||||||
@@ -12,10 +12,15 @@ func (c *MyPlantRouter) InitPlantRouter(Router *gin.RouterGroup) {
|
|||||||
myPlantRouter.POST("add", myPlantApi.AddPlant) // 添加植物
|
myPlantRouter.POST("add", myPlantApi.AddPlant) // 添加植物
|
||||||
myPlantRouter.POST("page", myPlantApi.PlantPage) // 分页获取我的植物
|
myPlantRouter.POST("page", myPlantApi.PlantPage) // 分页获取我的植物
|
||||||
myPlantRouter.GET("detail", myPlantApi.PlantDetail) // 获取植物详情
|
myPlantRouter.GET("detail", myPlantApi.PlantDetail) // 获取植物详情
|
||||||
myPlantRouter.POST("update", myPlantApi.UpdatePlant) // 修改基本信息
|
myPlantRouter.POST("update", myPlantApi.UpdatePlant) // 修改植物信息(可以修改养护事项)
|
||||||
myPlantRouter.POST("deletePlant", myPlantApi.DeletePlants) // 删除植物
|
myPlantRouter.POST("deletePlant", myPlantApi.DeletePlants) // 删除植物
|
||||||
myPlantRouter.POST("deletePlan", myPlantApi.DeletePlans) // 删除计划
|
myPlantRouter.POST("deletePlan", myPlantApi.DeletePlans) // 删除计划
|
||||||
|
|
||||||
|
//养护事项
|
||||||
|
myPlantRouter.POST("/plan/add", myPlantApi.AddCarePlan) //添加养护计划
|
||||||
|
myPlantRouter.GET("/plan/delete", myPlantApi.DeletePlan) //删除事项
|
||||||
|
|
||||||
|
//任务
|
||||||
myPlantRouter.GET("todayTask", myPlantApi.TodayTask) // 获取今日任务
|
myPlantRouter.GET("todayTask", myPlantApi.TodayTask) // 获取今日任务
|
||||||
myPlantRouter.POST("completeTask", myPlantApi.CompleteTask) // 完成任务
|
myPlantRouter.POST("completeTask", myPlantApi.CompleteTask) // 完成任务
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ type UserRouter struct {
|
|||||||
func (s *UserRouter) InitUserRouter(Router *gin.RouterGroup) {
|
func (s *UserRouter) InitUserRouter(Router *gin.RouterGroup) {
|
||||||
userRouter := Router.Group("user")
|
userRouter := Router.Group("user")
|
||||||
{
|
{
|
||||||
|
userRouter.POST("info", userApi.CurrentUser)
|
||||||
userRouter.POST("save", userApi.SaveUser)
|
userRouter.POST("save", userApi.SaveUser)
|
||||||
userRouter.POST("update", userApi.UpdateUser)
|
userRouter.POST("update", userApi.UpdateUser)
|
||||||
userRouter.POST("getUserList", userApi.GetUserList)
|
userRouter.POST("getUserList", userApi.GetUserList)
|
||||||
|
|||||||
@@ -112,6 +112,11 @@ func (s *MyPlantService) PlantDetail(id string) (p plant.MyPlant, err error) {
|
|||||||
|
|
||||||
func (s *MyPlantService) UpdatePlant(req plantReq.UpdateMyPlant) error {
|
func (s *MyPlantService) UpdatePlant(req plantReq.UpdateMyPlant) error {
|
||||||
return global.DB.Transaction(func(tx *gorm.DB) error {
|
return global.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
|
var myPlant plant.MyPlant
|
||||||
|
err := tx.Where("id = ?", req.Id).First(&myPlant).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
// 以map形式更新 先构建map
|
// 以map形式更新 先构建map
|
||||||
updateMap := map[string]interface{}{
|
updateMap := map[string]interface{}{
|
||||||
"name": req.Name,
|
"name": req.Name,
|
||||||
@@ -122,19 +127,40 @@ func (s *MyPlantService) UpdatePlant(req plantReq.UpdateMyPlant) error {
|
|||||||
"sunlight": req.Sunlight,
|
"sunlight": req.Sunlight,
|
||||||
}
|
}
|
||||||
//1.修改基本信息
|
//1.修改基本信息
|
||||||
err := tx.Model(&plant.MyPlant{}).Where("id = ?", req.Id).Updates(updateMap).Error
|
err = tx.Model(&plant.MyPlant{}).Where("id = ?", req.Id).Updates(updateMap).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
//2.修改计划
|
//2.修改计划
|
||||||
if len(req.CarePlans) > 0 {
|
if len(req.CarePlans) > 0 {
|
||||||
|
today := timer.GetZeroTime()
|
||||||
for _, plan := range req.CarePlans {
|
for _, plan := range req.CarePlans {
|
||||||
err = tx.Model(&plant.CarePlan{}).Where("id = ?", plan.Id).Updates(map[string]interface{}{
|
err = tx.Model(&plant.CarePlan{}).Where("id = ?", plan.Id).Updates(map[string]interface{}{
|
||||||
"icon": plan.Icon,
|
"icon": plan.Icon,
|
||||||
"name": plan.Name,
|
"name": plan.Name,
|
||||||
"period": plan.Period,
|
"period": plan.Period,
|
||||||
}).Error
|
}).Error
|
||||||
//3.重新生成任务 使用钩子函数自动执行
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//3.重新生成任务 CarePlans 结构体中使用钩子函数自动执行
|
||||||
|
//3.1 删除旧任务
|
||||||
|
err = tx.Where("plan_id = ?", plan.Id).Unscoped().Delete(&plant.CareTask{}).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//3.2 创建新任务
|
||||||
|
dueDate := today.AddDate(0, 0, plan.Period)
|
||||||
|
task := plant.CareTask{
|
||||||
|
UserId: myPlant.UserId,
|
||||||
|
PlantId: myPlant.Id,
|
||||||
|
PlanId: plan.Id,
|
||||||
|
Name: plan.Name,
|
||||||
|
Icon: plan.Icon,
|
||||||
|
DueDate: dueDate,
|
||||||
|
Status: 1,
|
||||||
|
}
|
||||||
|
err = tx.Create(&task).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -142,7 +168,6 @@ func (s *MyPlantService) UpdatePlant(req plantReq.UpdateMyPlant) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TodayTask 今日任务
|
// TodayTask 今日任务
|
||||||
@@ -285,3 +310,68 @@ func (s *MyPlantService) DeletePlans(req common.IdsReq) error {
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddCarePlan 添加CarePlan
|
||||||
|
func (s *MyPlantService) AddCarePlan(req plantReq.AddPlans) error {
|
||||||
|
return global.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
|
for _, plan := range req.CarePlan {
|
||||||
|
var myPlant plant.MyPlant
|
||||||
|
err := tx.Where("id = ?", plan.PlantId).First(&myPlant).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//1.新增计划
|
||||||
|
newPlan := plant.CarePlan{
|
||||||
|
UserId: myPlant.UserId,
|
||||||
|
PlantId: myPlant.Id,
|
||||||
|
Name: plan.Name,
|
||||||
|
Icon: plan.Icon,
|
||||||
|
Period: plan.Period,
|
||||||
|
}
|
||||||
|
err = tx.Create(&newPlan).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//2.新增任务
|
||||||
|
today := timer.GetZeroTime()
|
||||||
|
dueDate := today.AddDate(0, 0, plan.Period)
|
||||||
|
task := plant.CareTask{
|
||||||
|
UserId: myPlant.UserId,
|
||||||
|
PlantId: myPlant.Id,
|
||||||
|
PlanId: newPlan.Id,
|
||||||
|
Name: plan.Name,
|
||||||
|
Icon: plan.Icon,
|
||||||
|
DueDate: dueDate,
|
||||||
|
Status: 1,
|
||||||
|
}
|
||||||
|
err = tx.Create(&task).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeletePlan 删除CarePlan
|
||||||
|
func (s *MyPlantService) DeletePlan(id string) error {
|
||||||
|
return global.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
|
var plan plant.CarePlan
|
||||||
|
if err := tx.Where("id = ?", id).First(&plan).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
var tasks []plant.CareTask
|
||||||
|
if err := tx.Where("plan_id = ?", plan.Id).Find(&tasks).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err := tx.Unscoped().Delete(&plan).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = tx.Unscoped().Delete(&tasks).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user