164 lines
4.2 KiB
Go
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
|
|
}
|