| | |
| | | import ( |
| | | "context" |
| | | "github.com/shopspring/decimal" |
| | | "gorm.io/gorm" |
| | | "strconv" |
| | | "strings" |
| | | "time" |
| | | "wms/constvar" |
| | | "wms/models" |
| | |
| | | operation.Number = strconv.FormatInt(time.Now().Unix(), 10) |
| | | operation.Status = constvar.OperationStatus_Ready |
| | | operation.CompanyName = req.SupplierName |
| | | operation.Source = req.Source |
| | | warehouse, err := models.NewWarehouseSearch().First() |
| | | if err != nil { |
| | | return nil, err |
| | |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | operation.ToLocationID = location.Id |
| | | first, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First() |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | operation.FromLocationID = first.Id |
| | | operation.LocationID = location.Id |
| | | operation.BaseOperationType = constvar.BaseOperationTypeIncoming |
| | | for _, product := range req.Product { |
| | | var detail models.OperationDetails |
| | | detail.ProductId = product.Id |
| | | detail.Amount = decimal.NewFromInt(product.Amount) |
| | | detail.FromLocationID = first.Id |
| | | detail.ToLocationID = location.Id |
| | | details = append(details, &detail) |
| | | } |
| | | err = models.NewOperationSearch().Create(&operation) |
| | | return new(PurchaseToWmsResponse), err |
| | | err = models.WithTransaction(func(db *gorm.DB) error { |
| | | err := models.NewOperationSearch().SetOrm(db).Create(&operation) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | for _, detail := range details { |
| | | detail.OperationID = operation.Id |
| | | } |
| | | err = models.NewOperationDetailsSearch().SetOrm(db).CreateBatch(details) |
| | | return err |
| | | }) |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | resp := new(PurchaseToWmsResponse) |
| | | resp.Warehouse = warehouse.Name |
| | | return resp, nil |
| | | } |
| | | |
| | | func (s *Server) SrmGetWarehouseInfo(c context.Context, req *SrmGetWarehouseInfoRequest) (*SrmGetWarehouseInfoResponse, error) { |
| | | warehouses, err := models.NewWarehouseSearch().FindNotTotal() |
| | | resp := new(SrmGetWarehouseInfoResponse) |
| | | if err != nil { |
| | | return resp, err |
| | | } |
| | | for _, warehouse := range warehouses { |
| | | var info SrmWarehouseInfo |
| | | info.Name = warehouse.Name |
| | | info.Address = warehouse.Address |
| | | info.Principal = warehouse.Contacts |
| | | resp.Info = append(resp.Info, &info) |
| | | } |
| | | return resp, nil |
| | | } |
| | | |
| | | func (s *Server) SrmGetOperationInfo(c context.Context, req *SrmGetOperationInfoRequest) (*SrmGetOperationInfoResponse, error) { |
| | | operations, err := models.NewOperationSearch().SetSourceNumber(req.Number).SetPreload(true).FindNotTotal() |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | srm := make([]*SrmOperation, 0) |
| | | for _, operation := range operations { |
| | | var so SrmOperation |
| | | so.Number = operation.Number |
| | | index := strings.LastIndex(operation.OperationTypeName, "-") |
| | | so.WarehouseName = operation.OperationTypeName[:index] |
| | | so.Status = int64(operation.Status) |
| | | if operation.Status == constvar.OperationStatus_Finish { |
| | | so.OverTime = operation.UpdateTime |
| | | } |
| | | for _, detail := range operation.Details { |
| | | s := so |
| | | s.ProductId = detail.ProductId |
| | | s.Amount = detail.Amount.IntPart() |
| | | s.ProductName = detail.Product.Name |
| | | srm = append(srm, &s) |
| | | } |
| | | } |
| | | var resp = new(SrmGetOperationInfoResponse) |
| | | resp.Operations = srm |
| | | return resp, nil |
| | | } |