| | |
| | | "errors" |
| | | "github.com/shopspring/decimal" |
| | | "strconv" |
| | | "strings" |
| | | "time" |
| | | "wms/constvar" |
| | | "wms/models" |
| | | "wms/pkg/timex" |
| | | "wms/service" |
| | | ) |
| | | |
| | | type Server struct { |
| | |
| | | if len(details) == 0 { |
| | | return resp, nil |
| | | } |
| | | var locationIds []int |
| | | var locationId int |
| | | for _, detail := range details { |
| | | productIds = append(productIds, detail.ProductId) |
| | | locationIds = append(locationIds, detail.LocationId) |
| | | locationId = detail.LocationId |
| | | } |
| | | //查询产品信息 |
| | |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | //查询位置信息 |
| | | location, err := models.NewLocationSearch().SetID(locationId).First() |
| | | locationHouseMap, houseLocations, houseMap, err := service.GetWarehouseByLocationIds(locationIds) |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | //根据仓库缩写查询仓库 |
| | | code := strings.Split(location.JointName, "/")[0] |
| | | warehouse, err := models.NewWarehouseSearch().SetCode(code).First() |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | //统计仓库下所有位置的产品在库数量 |
| | | locations, err := models.NewLocationSearch().SetJointName(code).FindNotTotal() |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | var locationIds []int |
| | | for _, l := range locations { |
| | | locationIds = append(locationIds, l.Id) |
| | | } |
| | | amounts, err := models.NewLocationProductAmountSearch().SetProductIds(productIds).SetLocationIds(locationIds).Find() |
| | | warehouse := locationHouseMap[locationId] |
| | | amounts, err := models.NewLocationProductAmountSearch().SetProductIds(productIds).SetLocationIds(locationIds).SetPreload(true).Find() |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | |
| | | products = append(products, &p) |
| | | } |
| | | resp.ProductList = products |
| | | |
| | | if req.GroupByWarehouse { |
| | | canUseMap := make(map[int]map[string]decimal.Decimal) //map[locationID]map[productID]decimal |
| | | for _, v := range canUse { |
| | | if canUseMap[v.LocationId] == nil { |
| | | canUseMap[v.LocationId] = make(map[string]decimal.Decimal) |
| | | } |
| | | canUseMap[v.LocationId][v.ProductId] = canUseMap[v.LocationId][v.ProductId].Add(v.Amount) |
| | | } |
| | | locationProductAmounts := make(map[int][]*models.LocationProductAmount) |
| | | for _, v := range amounts { |
| | | if locationProductAmounts[v.LocationId] == nil { |
| | | locationProductAmounts[v.LocationId] = make([]*models.LocationProductAmount, 0) |
| | | } |
| | | locationProductAmounts[v.LocationId] = append(locationProductAmounts[v.LocationId], v) |
| | | } |
| | | |
| | | materialMap := service.MaterialMap(materials) |
| | | |
| | | var warehouseProductsList []*WarehouseProducts |
| | | for houseID, locationIDs := range houseLocations { |
| | | house := houseMap[houseID] |
| | | productAmountMap := make(map[string]decimal.Decimal, 0) |
| | | productAvailableNumberMap := make(map[string]decimal.Decimal, 0) |
| | | productInfoList := make([]*ProductInfo, 0) |
| | | |
| | | houseProductAmounts := make([]*models.LocationProductAmount, 0) |
| | | for _, lid := range locationIDs { |
| | | houseProductAmounts = append(houseProductAmounts, locationProductAmounts[lid]...) |
| | | } |
| | | for _, v := range houseProductAmounts { |
| | | productAmountMap[v.ProductId] = productAmountMap[v.ProductId].Add(v.Amount) |
| | | productAvailableNumberMap[v.ProductId] = productAvailableNumberMap[v.ProductId].Add(canUseMap[v.LocationId][v.ProductId]) |
| | | } |
| | | for productID, amount := range productAvailableNumberMap { |
| | | productInfoList = append(productInfoList, &ProductInfo{ |
| | | Number: productID, |
| | | Name: materialMap[productID].Name, |
| | | Unit: materialMap[productID].Unit, |
| | | Amount: productAmountMap[productID].String(), |
| | | AvailableNumber: amount.String(), |
| | | }) |
| | | } |
| | | |
| | | warehouseProducts := &WarehouseProducts{ |
| | | WarehouseID: house.Code, |
| | | WarehouseName: house.Name, |
| | | ProductList: productInfoList, |
| | | } |
| | | warehouseProductsList = append(warehouseProductsList, warehouseProducts) |
| | | } |
| | | resp.WarehouseProductsList = warehouseProductsList |
| | | } |
| | | |
| | | return resp, nil |
| | | } |
| | | |