From e1ec7e077a10938ce795c766915c5c5673dcf282 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期三, 20 三月 2024 19:08:10 +0800
Subject: [PATCH] crm发货申请补充发货单号

---
 service/code.go      |   56 ++++++++++++++++++++++++++++
 service/operation.go |   10 ++++
 2 files changed, 65 insertions(+), 1 deletions(-)

diff --git a/service/code.go b/service/code.go
new file mode 100644
index 0000000..bb17a77
--- /dev/null
+++ b/service/code.go
@@ -0,0 +1,56 @@
+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
+}
diff --git a/service/operation.go b/service/operation.go
index e0456d4..dd5a9ea 100644
--- a/service/operation.go
+++ b/service/operation.go
@@ -30,6 +30,12 @@
 	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
@@ -50,7 +56,7 @@
 		}
 		operation := &models.Operation{
 			Id:                0,
-			Number:            "",
+			Number:            autoCode,
 			SourceNumber:      output.SourceNumber,
 			OperationTypeId:   opTypeMap[output.WarehouseID].Id,
 			OperationTypeName: opTypeMap[output.WarehouseID].Name,
@@ -72,6 +78,8 @@
 			LocationID:        output.LocationID,
 		}
 		operations = append(operations, operation)
+		autoCode = models.GetAutoCode(maxAutoIncr, codeStandard)
+		maxAutoIncr++
 	}
 
 	return models.NewOperationSearch().CreateBatch(operations)

--
Gitblit v1.8.0