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{} 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": "查询成功", }) } 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 }