package service import ( "github.com/shopspring/decimal" "time" "wms/constvar" "wms/models" ) type OutputInfo struct { LocationID int WarehouseID int Products []*ProductInfo OperationID int SourceNumber string } type ProductInfo struct { ProductID string Amount decimal.Decimal } func AddOutputOperations(outputList []*OutputInfo) (err error) { //查找operationID warehouseIds := make([]int, 0) for _, output := range outputList { warehouseIds = append(warehouseIds, output.WarehouseID) } opTypes, err := models.NewOperationTypeSearch().SetWarehouseIds(warehouseIds).SetBaseOperationType(constvar.BaseOperationTypeOutgoing).FindNotTotal() if err != nil { return err } opTypeMap := make(map[int]*models.OperationType, len(opTypes)) for _, opType := range opTypes { opTypeMap[opType.WarehouseId] = opType } operations := make([]*models.Operation, 0, len(outputList)) for _, output := range outputList { details := make([]*models.OperationDetails, 0, len(output.Products)) for _, product := range output.Products { details = append(details, &models.OperationDetails{ OperationID: 0, ProductId: product.ProductID, Amount: product.Amount, FromLocationID: output.LocationID, }) } if opTypeMap[output.WarehouseID] == nil { continue } operation := &models.Operation{ Id: 0, Number: "", SourceNumber: output.SourceNumber, OperationTypeId: opTypeMap[output.WarehouseID].Id, OperationTypeName: opTypeMap[output.WarehouseID].Name, Status: constvar.OperationStatus_Ready, OperationDate: time.Now().Format("2006-01-02 15:04:05"), ContacterID: 0, ContacterName: "", CompanyID: 0, CompanyName: "", Comment: "crm发货申请", LogisticCompanyId: "", LogisticCompany: models.LogisticCompany{}, WaybillNumber: "", Weight: decimal.Decimal{}, LogisticWeight: decimal.Decimal{}, Source: "crm", Details: details, BaseOperationType: constvar.BaseOperationTypeOutgoing, LocationID: output.LocationID, } operations = append(operations, operation) } return models.NewOperationSearch().CreateBatch(operations) }