New file |
| | |
| | | package service |
| | | |
| | | import ( |
| | | "context" |
| | | "errors" |
| | | "wms/constvar" |
| | | "wms/models" |
| | | "wms/pkg/logx" |
| | | "wms/proto/code" |
| | | "wms/proto/init_client" |
| | | ) |
| | | |
| | | func GetAutoCode(codeType constvar.CodeStandardType) (autoCode string, codeStandard *code.CodeStandard, maxAutoIncr int, err error) { |
| | | client := code.NewCodeServiceClient(init_client.ApsConn) |
| | | list, err := client.GetCodeList(context.Background(), &code.GetCodeListRequest{ |
| | | Page: 1, |
| | | PageSize: 1, |
| | | Type: string(codeType), |
| | | }) |
| | | if err != nil { |
| | | logx.Errorf("rpc GetCodeList err: %v", err.Error()) |
| | | return |
| | | } |
| | | |
| | | if len(list.List) == 0 { |
| | | logx.Errorf("rpc GetCodeList err: %v", err.Error()) |
| | | err = errors.New("没有找到编码规范") |
| | | return |
| | | } |
| | | |
| | | codeStandard = list.List[0] |
| | | switch codeType { |
| | | case constvar.CodeStandardType_Material: |
| | | maxAutoIncr, err = models.NewMaterialSearch().MaxAutoIncr() |
| | | case constvar.CodeStandardType_Incoming: |
| | | maxAutoIncr, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeIncoming).MaxAutoIncr() |
| | | case constvar.CodeStandardType_Outgoing: |
| | | maxAutoIncr, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeOutgoing).MaxAutoIncr() |
| | | case constvar.CodeStandardType_Internal: |
| | | maxAutoIncr, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeInternal).MaxAutoIncr() |
| | | case constvar.CodeStandardType_Disuse: |
| | | maxAutoIncr, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeDisuse).MaxAutoIncr() |
| | | default: |
| | | err = errors.New("编码规则不存在") |
| | | return |
| | | } |
| | | |
| | | if err != nil { |
| | | err = errors.New("编码规则不存在") |
| | | return |
| | | } |
| | | |
| | | autoCode = models.GetAutoCode(maxAutoIncr, codeStandard) |
| | | maxAutoIncr = maxAutoIncr + 1 |
| | | return |
| | | } |
| | |
| | | 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 |
| | |
| | | } |
| | | operation := &models.Operation{ |
| | | Id: 0, |
| | | Number: "", |
| | | Number: autoCode, |
| | | SourceNumber: output.SourceNumber, |
| | | OperationTypeId: opTypeMap[output.WarehouseID].Id, |
| | | OperationTypeName: opTypeMap[output.WarehouseID].Name, |
| | |
| | | LocationID: output.LocationID, |
| | | } |
| | | operations = append(operations, operation) |
| | | autoCode = models.GetAutoCode(maxAutoIncr, codeStandard) |
| | | maxAutoIncr++ |
| | | } |
| | | |
| | | return models.NewOperationSearch().CreateBatch(operations) |