zhangqian
2024-07-01 73b6baf6af3d88cdcb0e2df7932a9bd96b0b85c5
proto/inventory_order/server.go
@@ -2,6 +2,7 @@
import (
   "context"
   "errors"
   "github.com/shopspring/decimal"
   "strconv"
   "time"
@@ -16,7 +17,11 @@
func (s *Server) CreateOperationList(ctx context.Context, req *CreateOperationListRequest) (*CreateOperationListResponse, error) {
   var operations []*models.Operation
   warehouse, err := models.NewWarehouseSearch().First()
   id := 0
   if req.WarehouseId != "" {
      id, _ = strconv.Atoi(req.WarehouseId)
   }
   warehouse, err := models.NewWarehouseSearch().SetID(id).First()
   if err != nil {
      return nil, err
   }
@@ -44,18 +49,28 @@
   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.SalesDetailsNumber = list.SalesDetailsNumber
      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
      operation.OperationSource = constvar.OperationSource(req.OperationSource)
      operation.LocationID = fromLocation.Id
      if req.OperationType == 1 {
         operation.LocationID = toLocation.Id
      }
      or.WorkOrderId = operation.SourceNumber
      or.Number = operation.Number
      operationResp = append(operationResp, &or)
      if req.OperationType == 1 {
         operation.BaseOperationType = constvar.BaseOperationTypeIncoming
      }
@@ -63,6 +78,8 @@
         var detail models.OperationDetails
         detail.ProductId = product.ProductNumber
         detail.Amount = decimal.NewFromInt(product.Amount)
         detail.FromLocationID = fromLocation.Id
         detail.ToLocationID = toLocation.Id
         details = append(details, &detail)
      }
      operation.Details = details
@@ -70,5 +87,49 @@
   }
   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
}
func (s *Server) GetOperationInfo(ctx context.Context, req *GetOperationInfoRequest) (*GetOperationInfoResponse, error) {
   if len(req.SourceNumber) == 0 && len(req.SalesDetailsNumber) == 0 {
      return nil, errors.New("来源编码和销售明细编码不能同时为空")
   }
   operations, err := models.NewOperationSearch().SetSourceNumbers(req.SourceNumber).SetSalesDetailsNumbers(req.SalesDetailsNumber).
      SetStatus(constvar.OperationStatus(req.Status)).SetPreload(true).FindNotTotal()
   if err != nil {
      return nil, err
   }
   resp := new(GetOperationInfoResponse)
   list := make([]*OperationInfo, 0)
   for _, operation := range operations {
      var ol OperationInfo
      ol.SourceNumber = operation.SourceNumber
      ol.SalesDetailsNumber = operation.SalesDetailsNumber
      for _, detail := range operation.Details {
         o := ol
         o.ProductId = detail.ProductId
         o.Amount = detail.Amount.IntPart()
         list = append(list, &o)
      }
   }
   resp.List = list
   return resp, nil
}