| | |
| | | import ( |
| | | "errors" |
| | | "github.com/gin-gonic/gin" |
| | | "strconv" |
| | | "strings" |
| | | "wms/extend/code" |
| | | "wms/extend/util" |
| | | "wms/models" |
| | |
| | | type LocationController struct { |
| | | } |
| | | |
| | | func (slf LocationController) ListLocationByType(c *gin.Context) { |
| | | var params request.LocationByType |
| | | // AddLocation |
| | | // @Tags 位置 |
| | | // @Summary 添加位置信息 |
| | | // @Produce application/json |
| | | // @Param object body models.Location true "位置信息" |
| | | // @Success 200 {object} util.Response "成功" |
| | | // @Router /api-wms/v1/location/addLocation [post] |
| | | func (slf LocationController) AddLocation(c *gin.Context) { |
| | | var params models.Location |
| | | if err := c.BindJSON(¶ms); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "参数绑定失败") |
| | | util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误:"+err.Error()) |
| | | return |
| | | } |
| | | if err := slf.CheckLocationByTypeParams(params); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, err.Error()) |
| | | } |
| | | search := models.NewLocationSearch() |
| | | search.SetType(params.Type) |
| | | if params.Keyword != "" { |
| | | search.SetKeyword(params.Keyword) |
| | | if err := slf.CheckLocation(params); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, err) |
| | | return |
| | | } |
| | | if params.ParentId != 0 { |
| | | search.SetParentId(params.ParentId) |
| | | //查询上级名称 |
| | | first, err := models.NewLocationSearch().SetID(params.ParentId).First() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "查询上级名称失败") |
| | | return |
| | | } |
| | | params.JointName = first.JointName + "/" + params.Name |
| | | if first.WarehouseId != 0 { |
| | | params.WarehouseId = first.Id |
| | | } else { |
| | | //根据仓库缩写查询仓库 |
| | | houseCode := strings.Split(first.JointName, "/")[0] |
| | | warehouse, err := models.NewWarehouseSearch().SetCode(houseCode).First() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, err) |
| | | return |
| | | } |
| | | params.WarehouseId = warehouse.Id |
| | | } |
| | | |
| | | } else { |
| | | params.JointName = params.Name |
| | | } |
| | | if params.CompanyId != 0 { |
| | | search.SetCompanyId(params.CompanyId) |
| | | } |
| | | res, err := search.SetOrder("created_at desc").FindAll() |
| | | |
| | | err := models.NewLocationSearch().Create(¶ms) |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestError, err.Error()) |
| | | util.ResponseFormat(c, code.RequestParamError, "创建失败") |
| | | return |
| | | } |
| | | util.ResponseFormat(c, code.Success, res) |
| | | util.ResponseFormat(c, code.Success, "创建成功") |
| | | } |
| | | |
| | | func (slf LocationController) CheckLocationByTypeParams(params request.LocationByType) error { |
| | | // GetLocationList |
| | | // @Tags 位置 |
| | | // @Summary 获取位置列表 |
| | | // @Produce application/json |
| | | // @Param object body request.GetLocationList true "查询参数" |
| | | // @Success 200 {object} util.ResponseList{data=[]models.Location} "成功" |
| | | // @Router /api-wms/v1/location/getLocationList [post] |
| | | func (slf LocationController) GetLocationList(c *gin.Context) { |
| | | var params request.GetLocationList |
| | | if err := c.BindJSON(¶ms); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误") |
| | | return |
| | | } |
| | | search := models.NewLocationSearch() |
| | | if params.PageInfo.Check() { |
| | | search.SetPage(params.Page, params.PageSize) |
| | | } |
| | | list, total, err := search.SetKeyword(params.KeyWord).SetType(params.Type).SetJointName(params.JointName). |
| | | SetIsScrapLocation(params.IsScrapLocation).SetOrder("created_at desc").Find() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "查找失败") |
| | | return |
| | | } |
| | | |
| | | util.ResponseFormatList(c, code.Success, list, int(total)) |
| | | } |
| | | |
| | | // GetLocationTreeList |
| | | // @Tags 位置 |
| | | // @Summary 获取位置列表树 |
| | | // @Produce application/json |
| | | // @Success 200 {object} util.ResponseList{data=[]models.Location} "成功" |
| | | // @Router /api-wms/v1/location/getLocationTreeList [get] |
| | | func (slf LocationController) GetLocationTreeList(c *gin.Context) { |
| | | all, err := models.NewLocationSearch().SetType(3).FindAll() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "查找失败") |
| | | return |
| | | } |
| | | var tree []*models.Location |
| | | m := make(map[int]*models.Location) |
| | | for _, location := range all { |
| | | m[location.Id] = location |
| | | } |
| | | for _, location := range all { |
| | | if location.ParentId == 0 { |
| | | tree = append(tree, location) |
| | | } else { |
| | | if _, ok := m[location.ParentId]; !ok { |
| | | tree = append(tree, location) |
| | | continue |
| | | } |
| | | if m[location.ParentId].Children == nil { |
| | | m[location.ParentId].Children = make([]*models.Location, 0) |
| | | } |
| | | |
| | | m[location.ParentId].Children = append(m[location.ParentId].Children, location) |
| | | } |
| | | } |
| | | |
| | | util.ResponseFormat(c, code.Success, tree) |
| | | } |
| | | |
| | | // GetLocationDetails |
| | | // @Tags 位置 |
| | | // @Summary 获取位置详情 |
| | | // @Produce application/json |
| | | // @Param id path string true "id" "查询参数" |
| | | // @Success 200 {object} util.Response{data=models.Location} "成功" |
| | | // @Router /api-wms/v1/location/getLocationDetails/{id} [get] |
| | | func (slf LocationController) GetLocationDetails(c *gin.Context) { |
| | | id, _ := strconv.Atoi(c.Param("id")) |
| | | if id == 0 { |
| | | util.ResponseFormat(c, code.RequestParamError, "无效id") |
| | | return |
| | | } |
| | | location, err := models.NewLocationSearch().SetID(id).First() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "查找失败") |
| | | return |
| | | } |
| | | util.ResponseFormat(c, code.Success, location) |
| | | } |
| | | |
| | | // UpdateLocation |
| | | // @Tags 位置 |
| | | // @Summary 修改位置 |
| | | // @Produce application/json |
| | | // @Param object body models.Location true "产品信息" |
| | | // @Success 200 {object} util.Response "成功" |
| | | // @Router /api-wms/v1/location/updateLocation [post] |
| | | func (slf LocationController) UpdateLocation(c *gin.Context) { |
| | | var params models.Location |
| | | if err := c.BindJSON(¶ms); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误") |
| | | return |
| | | } |
| | | if err := slf.CheckLocation(params); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, err) |
| | | return |
| | | } |
| | | //index := strings.LastIndex(params.JointName, "/") |
| | | //if index > 0 { |
| | | // jn := params.JointName[:index] |
| | | // oldName := params.JointName[index+1:] |
| | | // if oldName != params.Name { |
| | | // params.JointName = jn + "/" + params.Name |
| | | // } |
| | | //} |
| | | if params.ParentId != 0 { |
| | | //查询上级名称 |
| | | first, err := models.NewLocationSearch().SetID(params.ParentId).First() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "查询上级名称失败") |
| | | return |
| | | } |
| | | params.JointName = first.JointName + "/" + params.Name |
| | | } else { |
| | | params.JointName = strings.Split(params.JointName, "/")[0] + "/" + params.Name |
| | | } |
| | | err := models.NewLocationSearch().Update(¶ms) |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "位置信息更新失败") |
| | | return |
| | | } |
| | | util.ResponseFormat(c, code.Success, "更新成功") |
| | | } |
| | | |
| | | // DeleteLocation |
| | | // @Tags 位置 |
| | | // @Summary 删除位置 |
| | | // @Produce application/json |
| | | // @Param id path string true "id" "查询参数" |
| | | // @Success 200 {object} util.Response "成功" |
| | | // @Router /api-wms/v1/location/deleteLocation/{id} [delete] |
| | | func (slf LocationController) DeleteLocation(c *gin.Context) { |
| | | id, _ := strconv.Atoi(c.Param("id")) |
| | | if id == 0 { |
| | | util.ResponseFormat(c, code.RequestParamError, "无效id") |
| | | return |
| | | } |
| | | err := models.NewLocationSearch().SetID(id).Delete() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "删除失败") |
| | | return |
| | | } |
| | | util.ResponseFormat(c, code.Success, "删除成功") |
| | | } |
| | | |
| | | func (slf LocationController) CheckLocation(params models.Location) error { |
| | | if params.Name == "" { |
| | | return errors.New("名称不能为空") |
| | | } |
| | | if params.Type == 0 { |
| | | return errors.New("请选择正确的位置类型") |
| | | } |
| | | if params.ParentId < 0 { |
| | | return errors.New("错误参数ParentId") |
| | | } |
| | | if params.CompanyId < 0 { |
| | | return errors.New("错误参数CompanyId") |
| | | } |
| | | return nil |
| | | } |