daShangDao_psiServer/controllers/car.go
2026-06-18 13:01:56 +08:00

164 lines
4.2 KiB
Go

package controllers
import (
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"net/http"
"psi/constant"
"psi/database"
systemReq "psi/models/request"
systemRes "psi/models/response"
"psi/service"
"psi/utils"
)
type CarApi struct{}
var carService = service.CarService{}
// GetCarList 获取小车列表
func (r *CarApi) GetCarList(c *gin.Context) {
var req systemReq.QueryCarRequest
if err := c.ShouldBindQuery(&req); err != nil {
ValidAndFail(constant.LoggerChannelRequest, "查询小车列表请求参数异常", "参数错误: "+err.Error(), c, err)
return
}
list, total, err := carService.GetCarList(req, database.GetDB(c))
if err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "查询小车列表异常", err, c, req)
return
}
c.JSON(http.StatusOK, gin.H{
"code": 0,
"data": gin.H{
"list": list,
"total": total,
"page": req.Page,
"page_size": req.PageSize,
},
"msg": "查询成功",
})
}
// GetCarDetail 获取小车详情
func (r *CarApi) GetCarDetail(c *gin.Context) {
idStr := c.Param("id")
if idStr == "" {
utils.ErrorLog(constant.LoggerChannelRequest, logrus.Fields{
"source": "获取小车详情请求参数异常",
"err_msg": "ID参数不能为空",
})
systemRes.FailWithValidateMessage("参数错误: ID不能为空", c)
return
}
var id int64
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil || id <= 0 {
utils.ErrorLog(constant.LoggerChannelRequest, logrus.Fields{
"source": "获取小车详情请求参数异常",
"err_msg": "ID格式错误: " + idStr,
})
systemRes.FailWithValidateMessage("参数错误: ID格式不正确", c)
return
}
car, err := carService.GetCarByID(id, database.GetDB(c))
if err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "查询小车详情异常", err, c, gin.H{"id": id})
return
}
systemRes.OkWithDetailed(car, "查询成功", c)
}
func (r *CarApi) CreateCar(c *gin.Context) {
var req systemReq.CreateCarRequest
if err := c.ShouldBind(&req); err != nil {
ValidAndFail(constant.LoggerChannelRequest, "创建小车请求参数异常", "参数错误: "+err.Error(), c, err)
return
}
if len(req.ShopInfo) == 0 {
info, err := parseInfo(c)
if err != nil {
systemRes.FailWithValidateMessage("参数错误: "+err.Error(), c)
return
}
req.ShopInfo = info
}
userInfo := utils.GetUserInfo(c)
id, err := carService.CreateCar(req, userInfo.ID, database.GetDB(c))
if err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "创建小车异常", err, c, req)
return
}
systemRes.OkWithDetailed(gin.H{"id": id}, "创建成功", c)
}
func (r *CarApi) UpdateCar(c *gin.Context) {
var req systemReq.UpdateCarRequest
if err := c.ShouldBind(&req); err != nil {
ValidAndFail(constant.LoggerChannelRequest, "更新小车请求参数异常", "参数错误: "+err.Error(), c, err)
return
}
if len(req.ShopInfo) == 0 {
info, err := parseInfo(c)
if err != nil {
systemRes.FailWithValidateMessage("参数错误: "+err.Error(), c)
return
}
req.ShopInfo = info
}
userInfo := utils.GetUserInfo(c)
if err := carService.UpdateCar(req, userInfo.ID, database.GetDB(c)); err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "更新小车异常", err, c, req)
return
}
systemRes.OkWithMessage("更新成功", c)
}
func (r *CarApi) DeleteCar(c *gin.Context) {
var req systemReq.DeleteCarRequest
if err := c.ShouldBind(&req); err != nil {
ValidAndFail(constant.LoggerChannelRequest, "删除小车请求参数异常", "参数错误: "+err.Error(), c, err)
return
}
if err := carService.DeleteCar(req.ID, database.GetDB(c)); err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "删除小车异常", err, c, req)
return
}
systemRes.OkWithMessage("删除成功", c)
}
func parseInfo(c *gin.Context) ([]map[string]interface{}, error) {
var info []map[string]interface{}
for i := 0; i < 100; i++ {
infoStr := c.PostForm(fmt.Sprintf("shop_info[%d]", i))
if infoStr == "" {
break
}
var parsedData map[string]interface{}
if err := json.Unmarshal([]byte(infoStr), &parsedData); err != nil {
return nil, fmt.Errorf("第%d个shop_info参数JSON解析失败: %v", i, err)
}
info = append(info, parsedData)
}
return info, nil
}