package inventory_order
|
|
import (
|
"context"
|
"github.com/shopspring/decimal"
|
"strconv"
|
"time"
|
"wms/constvar"
|
"wms/models"
|
"wms/pkg/timex"
|
)
|
|
type Server struct {
|
UnimplementedInventoryOrderServiceServer
|
}
|
|
func (s *Server) CreateOperationList(ctx context.Context, req *CreateOperationListRequest) (*CreateOperationListResponse, error) {
|
var operations []*models.Operation
|
warehouse, err := models.NewWarehouseSearch().First()
|
if err != nil {
|
return nil, err
|
}
|
fromLocation, err := models.NewLocationSearch().SetID(warehouse.LocationId).First()
|
if err != nil {
|
return nil, err
|
}
|
toLocation, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeCustomer)).First()
|
if err != nil {
|
return nil, err
|
}
|
tp := constvar.BaseOperationTypeOutgoing
|
if req.OperationType == 1 {
|
tp = constvar.BaseOperationTypeIncoming
|
fromLocation, err = models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First()
|
if err != nil {
|
return nil, err
|
}
|
toLocation, err = models.NewLocationSearch().SetID(warehouse.LocationId).First()
|
if err != nil {
|
return nil, err
|
}
|
}
|
operationType, err := models.NewOperationTypeSearch().SetWarehouseId(warehouse.Id).SetBaseOperationType(tp).First()
|
if err != nil {
|
return nil, err
|
}
|
operationResp := make([]*OperationResponse, 0)
|
for _, list := range req.List {
|
var operation models.Operation
|
var details []*models.OperationDetails
|
var or OperationResponse
|
operation.SourceNumber = list.SourceNumber
|
operation.OperationDate = timex.TimeToString2(time.Now())
|
operation.Number = strconv.FormatInt(time.Now().Unix(), 10)
|
operation.Status = constvar.OperationStatus_Ready
|
operation.OperationTypeName = operationType.Name
|
operation.OperationTypeId = operationType.Id
|
operation.FromLocationID = fromLocation.Id
|
operation.ToLocationID = toLocation.Id
|
operation.BaseOperationType = constvar.BaseOperationTypeOutgoing
|
operation.Source = req.Source
|
or.WorkOrderId = operation.SourceNumber
|
or.Number = operation.Number
|
operationResp = append(operationResp, &or)
|
if req.OperationType == 1 {
|
operation.BaseOperationType = constvar.BaseOperationTypeIncoming
|
}
|
for _, product := range list.Products {
|
var detail models.OperationDetails
|
detail.ProductId = product.ProductNumber
|
detail.Amount = decimal.NewFromInt(product.Amount)
|
details = append(details, &detail)
|
}
|
operation.Details = details
|
operations = append(operations, &operation)
|
}
|
err = models.NewOperationSearch().CreateBatch(operations)
|
resp := new(CreateOperationListResponse)
|
resp.List = operationResp
|
return resp, err
|
}
|
|
func (s *Server) GetWarehouseInfo(ctx context.Context, req *GetWarehouseInfoRequest) (*GetWarehouseInfoResponse, error) {
|
warehouses, err := models.NewWarehouseSearch().FindNotTotal()
|
if err != nil {
|
return nil, err
|
}
|
list := make([]*WarehouseInfo, 0)
|
for _, warehouse := range warehouses {
|
var wi WarehouseInfo
|
wi.Id = strconv.Itoa(warehouse.Id)
|
wi.Name = warehouse.Name
|
list = append(list, &wi)
|
}
|
resp := new(GetWarehouseInfoResponse)
|
resp.List = list
|
return resp, nil
|
}
|