| | |
| | | } |
| | | |
| | | type ProductAndLocationInfo struct { |
| | | ProductId string `json:"productId"` |
| | | Amount decimal.Decimal `json:"amount"` |
| | | LocationId int `json:"locationId"` |
| | | ProductId string `json:"productId"` |
| | | Amount decimal.Decimal `json:"amount"` |
| | | LocationId int `json:"locationId"` |
| | | Number string `json:"number"` |
| | | WaybillNumber string `json:"waybillNumber"` |
| | | Name string `json:"name"` |
| | | } |
| | | |
| | | func (s *Server) GetInventoryProductInfo(ctx context.Context, req *GetInventoryProductInfoRequest) (*GetInventoryProductInfoResponse, error) { |
| | |
| | | //查询产品id |
| | | var details []ProductAndLocationInfo |
| | | var productIds []string |
| | | resp := new(GetInventoryProductInfoResponse) |
| | | err := models.NewOperationDetailsSearch().Orm.Model(&models.OperationDetails{}). |
| | | Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation.from_location_id as location_id"). |
| | | Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation_details.from_location_id as location_id,"+ |
| | | "wms_operation.number,wms_operation.waybill_number, logistic_company.name"). |
| | | Joins("left join wms_operation on wms_operation.id = wms_operation_details.operation_id"). |
| | | Joins("left join logistic_company on logistic_company.id = wms_operation.logistic_company_id"). |
| | | Where("wms_operation.source_number = ?", req.Number).Find(&details).Error |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | if len(details) == 0 { |
| | | return resp, nil |
| | | } |
| | | var locationId int |
| | | for _, detail := range details { |
| | |
| | | Select("wms_operation_details.product_id, wms_operation_details.amount"). |
| | | Joins("left join wms_operation on wms_operation_details.operation_id = wms_operation.id"). |
| | | Where("wms_operation_details.product_id in (?)", productIds). |
| | | Where("wms_operation.from_location_id in (?)", locationIds).Where("wms_operation.status = ?", constvar.OperationStatus_Ready). |
| | | Where("wms_operation.base_operation_type in (?)", []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal}). |
| | | Where("wms_operation_details.from_location_id in (?)", locationIds).Where("wms_operation.status = ?", constvar.OperationStatus_Ready). |
| | | Where("wms_operation.base_operation_type in (?)", []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal, constvar.BaseOperationTypeDisuse}). |
| | | Find(&canUse).Error |
| | | if err != nil { |
| | | return nil, err |
| | |
| | | products := make([]*ProductInfo, 0) |
| | | for _, material := range materials { |
| | | var p ProductInfo |
| | | p.Id = material.ID |
| | | p.Number = material.ID |
| | | p.Name = material.Name |
| | | for _, detail := range details { |
| | | if material.ID == detail.ProductId { |
| | | p.OrderAmount = detail.Amount.String() |
| | | p.Valorem = detail.Amount.Mul(material.SalePrice).String() |
| | | p.Invoice = detail.Number |
| | | p.Carrier = detail.Name |
| | | p.Waybill = detail.WaybillNumber |
| | | break |
| | | } |
| | | } |
| | |
| | | cu = cu.Add(info.Amount) |
| | | } |
| | | } |
| | | cu = at.Sub(cu) |
| | | p.AvailableNumber = cu.String() |
| | | |
| | | products = append(products, &p) |
| | | } |
| | | resp := new(GetInventoryProductInfoResponse) |
| | | resp.ProductList = products |
| | | return resp, nil |
| | | } |
| | |
| | | } |
| | | operation.OperationTypeName = operationType.Name |
| | | operation.OperationTypeId = operationType.Id |
| | | location, err := models.NewLocationSearch().SetJointNames([]string{warehouse.Code}).First() |
| | | location, err := models.NewLocationSearch().SetID(warehouse.LocationId).First() |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | operation.FromLocationID = location.Id |
| | | |
| | | first, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeCustomer)).First() |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | operation.ToLocationID = first.Id |
| | | operation.LocationID = location.Id |
| | | operation.BaseOperationType = constvar.BaseOperationTypeOutgoing |
| | | operation.ReceiverName = req.Addressee |
| | | operation.ReceiverPhone = req.Phone |
| | | operation.ReceiverAddr = req.Address |
| | | operation.Source = req.Source |
| | | operation.CompanyID = int(req.ClientId) |
| | | operation.CompanyName = req.ClientName |
| | | if req.DeliverType == 1 { |
| | | for _, product := range req.ProductList { |
| | | var detail models.OperationDetails |
| | | detail.ProductId = product.Id |
| | | amount, _ := decimal.NewFromString(product.Amount) |
| | | detail.Amount = amount |
| | | detail.FromLocationID = location.Id |
| | | detail.ToLocationID = first.Id |
| | | details = append(details, &detail) |
| | | } |
| | | operation.Details = details |
| | |
| | | detail.ProductId = product.Id |
| | | amount, _ := decimal.NewFromString(product.Amount) |
| | | detail.Amount = amount |
| | | details = append(details, &detail) |
| | | detail.FromLocationID = location.Id |
| | | detail.ToLocationID = first.Id |
| | | newOperation.Details = append(newOperation.Details, &detail) |
| | | operations = append(operations, &newOperation) |
| | | } |