| | |
| | | |
| | | import ( |
| | | "context" |
| | | "errors" |
| | | "github.com/shopspring/decimal" |
| | | "strconv" |
| | | "time" |
| | |
| | | |
| | | 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 |
| | | } |
| | |
| | | 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 |
| | | } |
| | |
| | | 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 |
| | |
| | | } |
| | | 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 |
| | | } |