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
|
}
|
|
autoCode, codeStandard, maxAutoIncr, err := GetAutoCode(constvar.CodeStandardType_Outgoing)
|
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 {
|
location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeCustomer)).First()
|
if err != nil {
|
return err
|
}
|
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,
|
ToLocationID: location.Id,
|
})
|
}
|
if opTypeMap[output.WarehouseID] == nil {
|
continue
|
}
|
operation := &models.Operation{
|
Id: 0,
|
Number: autoCode,
|
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,
|
OperationSource: constvar.OperationSourceSaleDelivery,
|
}
|
operations = append(operations, operation)
|
autoCode = models.GetAutoCode(maxAutoIncr, codeStandard)
|
maxAutoIncr++
|
}
|
|
return models.NewOperationSearch().CreateBatch(operations)
|
}
|