From 34ef7217a034599217a7fdd1e28e1ae6910e1b4b Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期三, 11 十月 2023 20:15:21 +0800
Subject: [PATCH] 菜单获取编码规则

---
 model/request/masterOrder.go     |   16 
 model/request/salesDetails.go    |   37 
 docs/swagger.yaml                |  252 +++++
 api/v1/salesReturn.go            |    8 
 model/request/serviceOrder.go    |   57 
 model/request/contract.go        |   16 
 api/v1/salesRefund.go            |    9 
 api/v1/salesLeads.go             |    8 
 model/util.go                    |   28 
 model/request/salesReturn.go     |    3 
 model/subOrder.go                |    5 
 model/salesReturn.go             |    6 
 model/salesLeads.go              |    1 
 api/v1/masterOrder.go            |    9 
 model/request/saleChance.go      |   62 
 api/v1/code.go                   |   73 +
 docs/docs.go                     |  368 ++++++++
 model/followRecord.go            |    5 
 constvar/const.go                |   72 +
 model/serviceOrder.go            |    6 
 model/request/code_request.go    |   32 
 model/request/salesRefund.go     |    3 
 main.go                          |    2 
 api/v1/serviceFollowup.go        |    8 
 model/request/quotation.go       |   27 
 model/request/contact.go         |   34 
 proto/code/code.pb.go            |  584 +++++++++++++
 api/v1/client.go                 |    8 
 model/contract.go                |    5 
 api/v1/contact.go                |    8 
 model/request/subOrder.go        |   17 
 api/v1/contract.go               |    9 
 model/contact.go                 |   29 
 api/v1/quotation.go              |    9 
 model/masterOrder.go             |   21 
 model/serviceFollowup.go         |    6 
 model/request/serviceFollowup.go |   33 
 api/v1/salesDetails.go           |    9 
 model/client.go                  |    1 
 proto/code/code_grpc.pb.go       |  101 ++
 model/request/followRecord.go    |   32 
 model/request/salesLeads.go      |   25 
 proto/code.proto                 |   48 +
 api/v1/subOrder.go               |    8 
 model/saleChance.go              |    5 
 model/request/client.go          |   34 
 model/quotation.go               |    1 
 api/v1/serviceOrder.go           |    7 
 docs/swagger.json                |  368 ++++++++
 model/serviceContract.go         |    1 
 api/v1/saleChance.go             |    9 
 model/salesDetails.go            |    1 
 api/v1/serviceContract.go        |    8 
 model/request/serviceContract.go |   39 
 model/salesRefund.go             |    6 
 router/index.go                  |    6 
 api/v1/followRecord.go           |    8 
 57 files changed, 2,381 insertions(+), 212 deletions(-)

diff --git a/api/v1/client.go b/api/v1/client.go
index e2c09de..839083a 100644
--- a/api/v1/client.go
+++ b/api/v1/client.go
@@ -45,6 +45,13 @@
 		ctx.Fail(errCode)
 		return
 	}
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(client.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewClientSearch(nil).SetId(client.Id).UpdateByMap(m)
+	}
 
 	ctx.Ok()
 }
@@ -106,6 +113,7 @@
 	client.Business.EnterpriseNatureId = params.EnterpriseNatureId
 	client.Business.EnterpriseScaleId = params.EnterpriseScaleId
 	client.MemberId = params.MemberId
+	client.CodeStandID = params.CodeStandID
 
 	//if params.Contact.Name != "" {
 	// assign the client's member id to contact when adding
diff --git a/api/v1/code.go b/api/v1/code.go
new file mode 100644
index 0000000..bb8ae8b
--- /dev/null
+++ b/api/v1/code.go
@@ -0,0 +1,73 @@
+package v1
+
+import (
+	"aps_crm/conf"
+	"aps_crm/model/request"
+	"aps_crm/model/response"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"aps_crm/pkg/logx"
+	"aps_crm/proto/code"
+	"github.com/gin-gonic/gin"
+	"github.com/spf13/cast"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/credentials/insecure"
+)
+
+type CodeApi struct{}
+
+var (
+	codeServiceConn *grpc.ClientConn
+)
+
+func InitCodeServiceConn() {
+	var err error
+	codeServiceConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.Aps, grpc.WithTransportCredentials(insecure.NewCredentials()))
+	if err != nil {
+		logx.Errorf("grpc dial product service error: %v", err.Error())
+		return
+	}
+}
+
+func CloseCodeServiceConn() {
+	if codeServiceConn != nil {
+		codeServiceConn.Close()
+	}
+}
+
+// GetCodeList
+//
+// @Tags		缂栫爜
+// @Summary	鑾峰彇缂栫爜鍒楄〃
+// @Produce	application/json
+// @Param		object	query		request.GetCodeList	true	"鍙傛暟"
+// @Success	200	{object}	response.ListResponse
+//
+//	@Router		/api/code/getCodeList [get]
+func (ca *CodeApi) GetCodeList(c *gin.Context) {
+	var params request.GetCodeList
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+	params.CodeStandID = c.Query("codeStandID")
+	params.Name = c.Query("name")
+	params.Type = c.Query("type")
+	client := code.NewCodeServiceClient(codeServiceConn)
+	list, err := client.GetCodeList(ctx.GetCtx(), &code.GetCodeListRequest{
+		Page:        cast.ToInt32(params.Page),
+		PageSize:    cast.ToInt32(params.PageSize),
+		CodeStandID: params.CodeStandID,
+		Name:        params.Name,
+		Type:        params.Type,
+	})
+	if err != nil {
+		logx.Errorf("GetCodeList err: %v", err.Error())
+		ctx.FailWithMsg(ecode.UnknownErr, "grpc璋冪敤閿欒")
+		return
+	}
+	ctx.OkWithDetailed(response.ListResponse{
+		Data:  list.List,
+		Count: list.Total,
+	})
+}
diff --git a/api/v1/contact.go b/api/v1/contact.go
index 7daace8..0766523 100644
--- a/api/v1/contact.go
+++ b/api/v1/contact.go
@@ -37,6 +37,13 @@
 		ctx.Fail(errCode)
 		return
 	}
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(contact.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewContactSearch(nil).SetId(contact.Id).UpdateByMap(m)
+	}
 
 	ctx.Ok()
 }
@@ -141,6 +148,7 @@
 	contact.Birthday = t
 	contact.Wechat = params.Wechat
 	contact.IsFirst = params.IsFirst
+	contact.CodeStandID = params.CodeStandID
 	return ecode.OK, contact
 }
 
diff --git a/api/v1/contract.go b/api/v1/contract.go
index ff42186..98b4ee9 100644
--- a/api/v1/contract.go
+++ b/api/v1/contract.go
@@ -38,6 +38,14 @@
 		return
 	}
 
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(contract.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewContractSearch().SetId(contract.Id).UpdateByMap(m)
+	}
+
 	ctx.Ok()
 }
 
@@ -113,6 +121,7 @@
 		QuotationId: contract.QuotationId,
 		StatusId:    contract.StatusId,
 		File:        contract.File,
+		CodeStandID: contract.CodeStandID,
 	}
 
 	return ecode.OK, contractModel
diff --git a/api/v1/followRecord.go b/api/v1/followRecord.go
index 0960dcf..6a4d6f8 100644
--- a/api/v1/followRecord.go
+++ b/api/v1/followRecord.go
@@ -39,6 +39,13 @@
 		ctx.Fail(errCode)
 		return
 	}
+	if params.FollowRecord.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(followRecord.Id, &params.FollowRecord.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewFollowRecordSearch().SetId(followRecord.Id).UpdateMap(m)
+	}
 
 	ctx.Ok()
 }
@@ -167,6 +174,7 @@
 	followRecordModel.Purpose = followRecord.Purpose
 	followRecordModel.Content = followRecord.Content
 	followRecordModel.Record = followRecord.Record
+	followRecordModel.CodeStandID = followRecord.CodeStandID
 
 	return ecode.OK, &followRecordModel
 }
diff --git a/api/v1/masterOrder.go b/api/v1/masterOrder.go
index ec53bae..c72c089 100644
--- a/api/v1/masterOrder.go
+++ b/api/v1/masterOrder.go
@@ -38,6 +38,14 @@
 		return
 	}
 
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(masterOrder.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewContactSearch(nil).SetId(masterOrder.Id).UpdateByMap(m)
+	}
+
 	ctx.Ok()
 }
 
@@ -124,6 +132,7 @@
 	masterOrderModel.MemberId = masterOrder.MemberId
 	masterOrderModel.ClientId = masterOrder.ClientId
 	masterOrderModel.Money = masterOrder.Money
+	masterOrderModel.CodeStandID = masterOrder.CodeStandID
 
 	return ecode.OK, masterOrderModel
 }
diff --git a/api/v1/quotation.go b/api/v1/quotation.go
index a99f69a..a26d4e9 100644
--- a/api/v1/quotation.go
+++ b/api/v1/quotation.go
@@ -38,6 +38,14 @@
 		return
 	}
 
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(quotation.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewQuotationSearch(nil).SetId(quotation.Id).Updates(m)
+	}
+
 	ctx.Ok()
 }
 
@@ -140,6 +148,7 @@
 	quotationModel.Conditions = quotation.Conditions
 	quotationModel.File = quotation.File
 	quotationModel.Products = quotation.Products
+	quotationModel.CodeStandID = quotation.CodeStandID
 
 	return ecode.OK, quotationModel
 
diff --git a/api/v1/saleChance.go b/api/v1/saleChance.go
index 6c9d8dc..b7bedb5 100644
--- a/api/v1/saleChance.go
+++ b/api/v1/saleChance.go
@@ -38,6 +38,14 @@
 		return
 	}
 
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(saleChance.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewSaleChanceSearch().SetId(saleChance.Id).UpdateByMap(m)
+	}
+
 	ctx.Ok()
 }
 
@@ -179,6 +187,7 @@
 	sc.Address.CityId = saleChance.Address.CityId
 	sc.Address.CountryId = saleChance.Address.CountryId
 	sc.Address.ProvinceId = saleChance.Address.ProvinceId
+	sc.CodeStandID = saleChance.CodeStandID
 
 	return ecode.OK, sc
 }
diff --git a/api/v1/salesDetails.go b/api/v1/salesDetails.go
index 24a27a1..218dd0e 100644
--- a/api/v1/salesDetails.go
+++ b/api/v1/salesDetails.go
@@ -39,6 +39,14 @@
 		return
 	}
 
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(salesDetails.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewSalesDetailsSearch().SetId(salesDetails.Id).UpdateByMap(m)
+	}
+
 	ctx.OkWithDetailed(salesDetails)
 }
 
@@ -138,6 +146,7 @@
 	salesDetailsModel.LogisticCompany = salesDetails.LogisticCompany
 	salesDetailsModel.LogisticNumber = salesDetails.LogisticNumber
 	salesDetailsModel.LogisticCost = salesDetails.LogisticCost
+	salesDetailsModel.CodeStandID = salesDetails.CodeStandID
 
 	return ecode.OK, salesDetailsModel
 }
diff --git a/api/v1/salesLeads.go b/api/v1/salesLeads.go
index 1e751b5..c1dc6e4 100644
--- a/api/v1/salesLeads.go
+++ b/api/v1/salesLeads.go
@@ -38,6 +38,13 @@
 		ctx.Fail(errCode)
 		return
 	}
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(salesLeads.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewSalesLeadsSearch(nil).SetId(salesLeads.Id).UpdateMap(m)
+	}
 
 	ctx.Ok()
 }
@@ -125,6 +132,7 @@
 		SalesSourcesId:  params.SalesSourcesId,
 		MemberId:        params.MemberId,
 		Desc:            params.Desc,
+		CodeStandID:     params.CodeStandID,
 		Address: model.Address{
 			ProvinceId: params.ProvinceId,
 			CityId:     params.CityId,
diff --git a/api/v1/salesRefund.go b/api/v1/salesRefund.go
index 866b9dc..39e2743 100644
--- a/api/v1/salesRefund.go
+++ b/api/v1/salesRefund.go
@@ -40,6 +40,14 @@
 		return
 	}
 
+	if params.SalesRefund.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(salesRefund.Id, &params.SalesRefund.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewSalesRefundSearch().SetId(salesRefund.Id).UpdateByMap(m)
+	}
+
 	ctx.Ok()
 }
 
@@ -142,6 +150,7 @@
 	salesRefundRes.Products = salesRefund.Products
 	salesRefundRes.SourceType = salesRefund.SourceType
 	salesRefundRes.SourceId = salesRefund.SourceId
+	salesRefundRes.CodeStandID = salesRefund.CodeStandID
 
 	return ecode.OK, salesRefundRes
 }
diff --git a/api/v1/salesReturn.go b/api/v1/salesReturn.go
index afc1355..5d3c004 100644
--- a/api/v1/salesReturn.go
+++ b/api/v1/salesReturn.go
@@ -41,6 +41,14 @@
 		return
 	}
 
+	if params.SalesReturn.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(salesReturn.Id, &params.SalesReturn.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewSalesReturnSearch().SetId(salesReturn.Id).UpdateByMap(m)
+	}
+
 	ctx.Ok()
 }
 
diff --git a/api/v1/serviceContract.go b/api/v1/serviceContract.go
index 012aa4b..216d4d3 100644
--- a/api/v1/serviceContract.go
+++ b/api/v1/serviceContract.go
@@ -39,6 +39,14 @@
 		return
 	}
 
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(serviceContract.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewServiceContractSearch().SetId(serviceContract.Id).UpdateByMap(m)
+	}
+
 	ctx.Ok()
 }
 
diff --git a/api/v1/serviceFollowup.go b/api/v1/serviceFollowup.go
index ea4f641..410de2d 100644
--- a/api/v1/serviceFollowup.go
+++ b/api/v1/serviceFollowup.go
@@ -37,6 +37,13 @@
 		ctx.Fail(errCode)
 		return
 	}
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(serviceFollowup.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewServiceFollowupSearch().SetId(serviceFollowup.Id).UpdateByMap(m)
+	}
 
 	ctx.Ok()
 }
@@ -121,6 +128,7 @@
 		OldMemberId:    serviceFollowup.OldMemberId,
 		Remark:         serviceFollowup.Remark,
 		File:           serviceFollowup.File,
+		CodeStandID:    serviceFollowup.CodeStandID,
 	}
 
 	return ecode.OK, serviceFollowupModel
diff --git a/api/v1/serviceOrder.go b/api/v1/serviceOrder.go
index 887979d..8bdd218 100644
--- a/api/v1/serviceOrder.go
+++ b/api/v1/serviceOrder.go
@@ -39,6 +39,13 @@
 		ctx.Fail(errCode)
 		return
 	}
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(serviceOrder.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewServiceOrderSearch().SetId(serviceOrder.Id).UpdateByMap(m)
+	}
 
 	ctx.Ok()
 }
diff --git a/api/v1/subOrder.go b/api/v1/subOrder.go
index d6bdf6c..3d6a0a1 100644
--- a/api/v1/subOrder.go
+++ b/api/v1/subOrder.go
@@ -38,6 +38,13 @@
 		return
 	}
 
+	if params.CodeRule.Method == 1 {
+		autoCode := model.GetAutoCode(subOrder.Id, &params.CodeRule)
+		m := map[string]interface{}{
+			"number": autoCode,
+		}
+		_ = model.NewSubOrderSearch(nil).SetId(subOrder.Id).UpdateByMap(m)
+	}
 	ctx.Ok()
 }
 
@@ -113,6 +120,7 @@
 	newSubOrder.MemberId = subOrder.MemberId
 
 	newSubOrder.Products = subOrder.Product
+	newSubOrder.CodeStandID = subOrder.CodeStandID
 
 	return ecode.OK, newSubOrder
 }
diff --git a/constvar/const.go b/constvar/const.go
index b70189e..20784bc 100644
--- a/constvar/const.go
+++ b/constvar/const.go
@@ -132,3 +132,75 @@
 	ServiceFeeKeywordProductName    ServiceFeeKeywordType = "浜у搧鍚嶇О"
 	ServiceFeeKeywordServiceEndDate ServiceFeeKeywordType = "鏈嶅姟鍒版湡鏃�"
 )
+
+// CodeStandardType 缂栫爜绫诲瀷
+type CodeStandardType string
+
+const (
+	CodeStandardTypeSaleLead       CodeStandardType = "閿�鍞嚎绱㈢紪鐮�"
+	CodeStandardTypeCustom         CodeStandardType = "瀹㈡埛缂栫爜"
+	CodeStandardTypeContact        CodeStandardType = "鑱旂郴浜虹紪鐮�"
+	CodeStandardTypeFollowRecord   CodeStandardType = "璺熻繘璁板綍缂栫爜"
+	CodeStandardTypeSaleKey        CodeStandardType = "閿�鍞満浼氱紪鐮�"
+	CodeStandardTypeQuotation      CodeStandardType = "鎶ヤ环缂栫爜"
+	CodeStandardTypeSaleTotalOrder CodeStandardType = "閿�鍞�诲崟缂栫爜"
+	CodeStandardTypeSaleSuborder   CodeStandardType = "閿�鍞瓙鍗曠紪鐮�"
+	CodeStandardTypeSaleRefund     CodeStandardType = "閿�鍞��娆剧紪鐮�"
+	CodeStandardTypeContract       CodeStandardType = "鍚堝悓缂栫爜"
+	CodeStandardTypeServerContract CodeStandardType = "鏈嶅姟鍚堝悓缂栫爜"
+	CodeStandardTypeServerFollow   CodeStandardType = "鏈嶅姟鍥炶缂栫爜"
+)
+
+func (t CodeStandardType) Valid() bool {
+	if t != CodeStandardTypeSaleLead &&
+		t != CodeStandardTypeCustom &&
+		t != CodeStandardTypeContact &&
+		t != CodeStandardTypeFollowRecord &&
+		t != CodeStandardTypeSaleKey &&
+		t != CodeStandardTypeQuotation &&
+		t != CodeStandardTypeSaleTotalOrder &&
+		t != CodeStandardTypeSaleSuborder &&
+		t != CodeStandardTypeSaleRefund &&
+		t != CodeStandardTypeContract &&
+		t != CodeStandardTypeServerContract &&
+		t != CodeStandardTypeServerFollow {
+		return false
+	}
+	return true
+}
+
+// CodeGenerateMethod 缂栫爜鐢熸垚鏂瑰紡
+type CodeGenerateMethod int
+
+const (
+	CodeGenerateMethodManual CodeGenerateMethod = iota // 鎵嬪姩鐢熸垚
+	CodeGenerateMethodAuto                             // 鑷姩鐢熸垚
+)
+
+func (t CodeGenerateMethod) Valid() bool {
+	if t < CodeGenerateMethodManual ||
+		t > CodeGenerateMethodAuto {
+		return false
+	}
+	return true
+}
+
+// CommonStatus 甯哥敤鐘舵��
+type CommonStatus string
+
+const (
+	CommonStatusEnable  CommonStatus = "鍚敤"
+	CommonStatusDisable CommonStatus = "鏈惎鐢�"
+	CommonStatusScraped CommonStatus = "宸叉姤搴�"
+	CommonStatusUsing   CommonStatus = "浣跨敤涓�"
+)
+
+func (s CommonStatus) Valid() bool {
+	if s != CommonStatusEnable &&
+		s != CommonStatusDisable &&
+		s != CommonStatusScraped &&
+		s != CommonStatusUsing {
+		return false
+	}
+	return true
+}
diff --git a/docs/docs.go b/docs/docs.go
index 049bf2e..ed04f35 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1272,6 +1272,54 @@
                 }
             }
         },
+        "/api/code/getCodeList": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "缂栫爜"
+                ],
+                "summary": "鑾峰彇缂栫爜鍒楄〃",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "name": "codeStandID",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "name": "name",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "name": "type",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.ListResponse"
+                        }
+                    }
+                }
+            }
+        },
         "/api/collectionProjection/add": {
             "post": {
                 "produces": [
@@ -10243,6 +10291,69 @@
         }
     },
     "definitions": {
+        "code.CodeAuto": {
+            "type": "object",
+            "properties": {
+                "AutoLength": {
+                    "type": "integer"
+                },
+                "Desc": {
+                    "type": "string"
+                },
+                "PrefixMethod": {
+                    "type": "integer"
+                },
+                "PrefixValue": {
+                    "type": "string"
+                },
+                "SuffixMethod": {
+                    "type": "integer"
+                }
+            }
+        },
+        "code.CodeRule": {
+            "type": "object",
+            "properties": {
+                "Desc": {
+                    "type": "string"
+                },
+                "Length": {
+                    "type": "integer"
+                },
+                "Name": {
+                    "type": "string"
+                }
+            }
+        },
+        "code.CodeStandard": {
+            "type": "object",
+            "properties": {
+                "AutoRule": {
+                    "$ref": "#/definitions/code.CodeAuto"
+                },
+                "ID": {
+                    "type": "string"
+                },
+                "List": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/code.CodeRule"
+                    }
+                },
+                "Method": {
+                    "type": "integer"
+                },
+                "Name": {
+                    "type": "string"
+                },
+                "Status": {
+                    "type": "string"
+                },
+                "Type": {
+                    "type": "string"
+                }
+            }
+        },
         "constvar.BankAccountKeywordType": {
             "type": "string",
             "enum": [
@@ -10869,6 +10980,9 @@
                 "client_type_id": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "contacts": {
                     "type": "array",
                     "items": {
@@ -11064,6 +11178,9 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "country": {
                     "$ref": "#/definitions/model.Country"
                 },
@@ -11134,6 +11251,9 @@
                 },
                 "client_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "country": {
                     "$ref": "#/definitions/model.Country"
@@ -11213,6 +11333,9 @@
                 },
                 "clientId": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "created_at": {
                     "description": "The date when the item was created\nexample: 2023-08-10 15:48:25",
@@ -11360,6 +11483,9 @@
                 },
                 "client_status_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "contact": {
                     "$ref": "#/definitions/model.Contact"
@@ -11558,6 +11684,9 @@
                 },
                 "client_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "end_time": {
                     "type": "string"
@@ -11783,6 +11912,9 @@
                 },
                 "client_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "conditions": {
                     "type": "string"
@@ -12022,6 +12154,9 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "collection_projections": {
                     "type": "array",
                     "items": {
@@ -12207,6 +12342,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "conditions": {
                     "type": "string"
                 },
@@ -12283,6 +12421,9 @@
                 },
                 "city_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "contact_name": {
                     "type": "string"
@@ -12375,6 +12516,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "createTime": {
                     "type": "string"
                 },
@@ -12459,6 +12603,9 @@
                 },
                 "clientId": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "createTime": {
                     "type": "string"
@@ -12666,6 +12813,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/model.Contact"
                 },
@@ -12806,6 +12956,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/model.Contact"
                 },
@@ -12902,6 +13055,9 @@
                 "clientId": {
                     "description": "瀹㈡埛id",
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "contact": {
                     "$ref": "#/definitions/model.Contact"
@@ -13108,6 +13264,9 @@
                 },
                 "clientId": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "id": {
                     "type": "integer"
@@ -13348,6 +13507,13 @@
                     "description": "瀹㈡埛绫诲瀷ID",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/request.Contact"
                 },
@@ -13492,6 +13658,13 @@
                     "description": "鎵�灞炲叕鍙窱D",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "country_id": {
                     "description": "鍥藉ID",
                     "type": "integer"
@@ -13547,6 +13720,13 @@
             "properties": {
                 "client_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "file": {
                     "type": "string"
@@ -13807,6 +13987,13 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "end_time": {
                     "type": "string"
                 },
@@ -13922,6 +14109,13 @@
             "properties": {
                 "client_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "conditions": {
                     "type": "string"
@@ -14138,6 +14332,13 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "competitors": {
                     "type": "string"
                 },
@@ -14258,6 +14459,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "conditions": {
                     "type": "string"
                 },
@@ -14310,6 +14518,13 @@
             "properties": {
                 "city_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contact_name": {
                     "description": "鑱旂郴浜哄鍚�",
@@ -14430,6 +14645,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -14534,6 +14756,13 @@
                     "description": "瀹㈡埛绫诲瀷ID",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/request.Contact"
                 },
@@ -14624,6 +14853,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -14684,6 +14920,13 @@
                 "clientId": {
                     "description": "瀹㈡埛id",
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contactId": {
                     "description": "鑱旂郴浜篿d",
@@ -14835,6 +15078,13 @@
             "properties": {
                 "clientId": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "masterOrderId": {
                     "type": "integer"
@@ -15023,6 +15273,13 @@
                 "client_id": {
                     "description": "鎵�灞炲叕鍙窱D",
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "country_id": {
                     "description": "鍥藉ID",
@@ -15259,6 +15516,12 @@
                 },
                 "client_status_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "contact_id": {
                     "type": "integer"
@@ -15828,6 +16091,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "conditions": {
                     "type": "string"
                 },
@@ -15889,6 +16159,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "isInvoice": {
                     "type": "string"
                 },
@@ -15933,6 +16210,13 @@
             "properties": {
                 "clientId": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "memberId": {
                     "type": "integer"
@@ -16128,6 +16412,13 @@
                 "client_type_id": {
                     "description": "瀹㈡埛绫诲瀷ID",
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contact": {
                     "$ref": "#/definitions/request.Contact"
@@ -16355,6 +16646,13 @@
                     "description": "鎵�灞炲叕鍙窱D",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "country_id": {
                     "description": "鍥藉ID",
                     "type": "integer"
@@ -16413,6 +16711,13 @@
             "properties": {
                 "client_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "file": {
                     "type": "string"
@@ -16808,6 +17113,13 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "end_time": {
                     "type": "string"
                 },
@@ -16984,6 +17296,13 @@
             "properties": {
                 "client_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "conditions": {
                     "type": "string"
@@ -17327,6 +17646,13 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "competitors": {
                     "type": "string"
                 },
@@ -17490,6 +17816,13 @@
             "properties": {
                 "city_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contact_name": {
                     "description": "鑱旂郴浜哄鍚�",
@@ -17740,6 +18073,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -17865,6 +18205,13 @@
                     "description": "瀹㈡埛绫诲瀷ID",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/request.Contact"
                 },
@@ -17956,6 +18303,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -18019,6 +18373,13 @@
                 "clientId": {
                     "description": "瀹㈡埛id",
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contactId": {
                     "description": "鑱旂郴浜篿d",
@@ -18210,6 +18571,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "id": {
                     "type": "integer"
                 },
diff --git a/docs/swagger.json b/docs/swagger.json
index 47c9204..52a2c3a 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -1260,6 +1260,54 @@
                 }
             }
         },
+        "/api/code/getCodeList": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "缂栫爜"
+                ],
+                "summary": "鑾峰彇缂栫爜鍒楄〃",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "name": "codeStandID",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "name": "name",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "name": "type",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.ListResponse"
+                        }
+                    }
+                }
+            }
+        },
         "/api/collectionProjection/add": {
             "post": {
                 "produces": [
@@ -10231,6 +10279,69 @@
         }
     },
     "definitions": {
+        "code.CodeAuto": {
+            "type": "object",
+            "properties": {
+                "AutoLength": {
+                    "type": "integer"
+                },
+                "Desc": {
+                    "type": "string"
+                },
+                "PrefixMethod": {
+                    "type": "integer"
+                },
+                "PrefixValue": {
+                    "type": "string"
+                },
+                "SuffixMethod": {
+                    "type": "integer"
+                }
+            }
+        },
+        "code.CodeRule": {
+            "type": "object",
+            "properties": {
+                "Desc": {
+                    "type": "string"
+                },
+                "Length": {
+                    "type": "integer"
+                },
+                "Name": {
+                    "type": "string"
+                }
+            }
+        },
+        "code.CodeStandard": {
+            "type": "object",
+            "properties": {
+                "AutoRule": {
+                    "$ref": "#/definitions/code.CodeAuto"
+                },
+                "ID": {
+                    "type": "string"
+                },
+                "List": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/code.CodeRule"
+                    }
+                },
+                "Method": {
+                    "type": "integer"
+                },
+                "Name": {
+                    "type": "string"
+                },
+                "Status": {
+                    "type": "string"
+                },
+                "Type": {
+                    "type": "string"
+                }
+            }
+        },
         "constvar.BankAccountKeywordType": {
             "type": "string",
             "enum": [
@@ -10857,6 +10968,9 @@
                 "client_type_id": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "contacts": {
                     "type": "array",
                     "items": {
@@ -11052,6 +11166,9 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "country": {
                     "$ref": "#/definitions/model.Country"
                 },
@@ -11122,6 +11239,9 @@
                 },
                 "client_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "country": {
                     "$ref": "#/definitions/model.Country"
@@ -11201,6 +11321,9 @@
                 },
                 "clientId": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "created_at": {
                     "description": "The date when the item was created\nexample: 2023-08-10 15:48:25",
@@ -11348,6 +11471,9 @@
                 },
                 "client_status_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "contact": {
                     "$ref": "#/definitions/model.Contact"
@@ -11546,6 +11672,9 @@
                 },
                 "client_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "end_time": {
                     "type": "string"
@@ -11771,6 +11900,9 @@
                 },
                 "client_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "conditions": {
                     "type": "string"
@@ -12010,6 +12142,9 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "collection_projections": {
                     "type": "array",
                     "items": {
@@ -12195,6 +12330,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "conditions": {
                     "type": "string"
                 },
@@ -12271,6 +12409,9 @@
                 },
                 "city_id": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "contact_name": {
                     "type": "string"
@@ -12363,6 +12504,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "createTime": {
                     "type": "string"
                 },
@@ -12447,6 +12591,9 @@
                 },
                 "clientId": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "createTime": {
                     "type": "string"
@@ -12654,6 +12801,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/model.Contact"
                 },
@@ -12794,6 +12944,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeStandID": {
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/model.Contact"
                 },
@@ -12890,6 +13043,9 @@
                 "clientId": {
                     "description": "瀹㈡埛id",
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "contact": {
                     "$ref": "#/definitions/model.Contact"
@@ -13096,6 +13252,9 @@
                 },
                 "clientId": {
                     "type": "integer"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "id": {
                     "type": "integer"
@@ -13336,6 +13495,13 @@
                     "description": "瀹㈡埛绫诲瀷ID",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/request.Contact"
                 },
@@ -13480,6 +13646,13 @@
                     "description": "鎵�灞炲叕鍙窱D",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "country_id": {
                     "description": "鍥藉ID",
                     "type": "integer"
@@ -13535,6 +13708,13 @@
             "properties": {
                 "client_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "file": {
                     "type": "string"
@@ -13795,6 +13975,13 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "end_time": {
                     "type": "string"
                 },
@@ -13910,6 +14097,13 @@
             "properties": {
                 "client_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "conditions": {
                     "type": "string"
@@ -14126,6 +14320,13 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "competitors": {
                     "type": "string"
                 },
@@ -14246,6 +14447,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "conditions": {
                     "type": "string"
                 },
@@ -14298,6 +14506,13 @@
             "properties": {
                 "city_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contact_name": {
                     "description": "鑱旂郴浜哄鍚�",
@@ -14418,6 +14633,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -14522,6 +14744,13 @@
                     "description": "瀹㈡埛绫诲瀷ID",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/request.Contact"
                 },
@@ -14612,6 +14841,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -14672,6 +14908,13 @@
                 "clientId": {
                     "description": "瀹㈡埛id",
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contactId": {
                     "description": "鑱旂郴浜篿d",
@@ -14823,6 +15066,13 @@
             "properties": {
                 "clientId": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "masterOrderId": {
                     "type": "integer"
@@ -15011,6 +15261,13 @@
                 "client_id": {
                     "description": "鎵�灞炲叕鍙窱D",
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "country_id": {
                     "description": "鍥藉ID",
@@ -15247,6 +15504,12 @@
                 },
                 "client_status_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "type": "string"
                 },
                 "contact_id": {
                     "type": "integer"
@@ -15816,6 +16079,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "conditions": {
                     "type": "string"
                 },
@@ -15877,6 +16147,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "isInvoice": {
                     "type": "string"
                 },
@@ -15921,6 +16198,13 @@
             "properties": {
                 "clientId": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "memberId": {
                     "type": "integer"
@@ -16116,6 +16400,13 @@
                 "client_type_id": {
                     "description": "瀹㈡埛绫诲瀷ID",
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contact": {
                     "$ref": "#/definitions/request.Contact"
@@ -16343,6 +16634,13 @@
                     "description": "鎵�灞炲叕鍙窱D",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "country_id": {
                     "description": "鍥藉ID",
                     "type": "integer"
@@ -16401,6 +16699,13 @@
             "properties": {
                 "client_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "file": {
                     "type": "string"
@@ -16796,6 +17101,13 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "end_time": {
                     "type": "string"
                 },
@@ -16972,6 +17284,13 @@
             "properties": {
                 "client_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "conditions": {
                     "type": "string"
@@ -17315,6 +17634,13 @@
                 "client_id": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "competitors": {
                     "type": "string"
                 },
@@ -17478,6 +17804,13 @@
             "properties": {
                 "city_id": {
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contact_name": {
                     "description": "鑱旂郴浜哄鍚�",
@@ -17728,6 +18061,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -17853,6 +18193,13 @@
                     "description": "瀹㈡埛绫诲瀷ID",
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contact": {
                     "$ref": "#/definitions/request.Contact"
                 },
@@ -17944,6 +18291,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -18007,6 +18361,13 @@
                 "clientId": {
                     "description": "瀹㈡埛id",
                     "type": "integer"
+                },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
                 },
                 "contactId": {
                     "description": "鑱旂郴浜篿d",
@@ -18198,6 +18559,13 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "codeRule": {
+                    "$ref": "#/definitions/code.CodeStandard"
+                },
+                "codeStandID": {
+                    "description": "缂栫爜id",
+                    "type": "string"
+                },
                 "id": {
                     "type": "integer"
                 },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 939b48c..32cbcec 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -1,4 +1,45 @@
 definitions:
+  code.CodeAuto:
+    properties:
+      AutoLength:
+        type: integer
+      Desc:
+        type: string
+      PrefixMethod:
+        type: integer
+      PrefixValue:
+        type: string
+      SuffixMethod:
+        type: integer
+    type: object
+  code.CodeRule:
+    properties:
+      Desc:
+        type: string
+      Length:
+        type: integer
+      Name:
+        type: string
+    type: object
+  code.CodeStandard:
+    properties:
+      AutoRule:
+        $ref: '#/definitions/code.CodeAuto'
+      ID:
+        type: string
+      List:
+        items:
+          $ref: '#/definitions/code.CodeRule'
+        type: array
+      Method:
+        type: integer
+      Name:
+        type: string
+      Status:
+        type: string
+      Type:
+        type: string
+    type: object
   constvar.BankAccountKeywordType:
     enum:
     - ""
@@ -467,6 +508,8 @@
         $ref: '#/definitions/model.ClientType'
       client_type_id:
         type: integer
+      codeStandID:
+        type: string
       contacts:
         items:
           $ref: '#/definitions/model.Contact'
@@ -602,6 +645,8 @@
         type: integer
       client_id:
         type: integer
+      codeStandID:
+        type: string
       country:
         $ref: '#/definitions/model.Country'
       country_id:
@@ -649,6 +694,8 @@
         $ref: '#/definitions/model.Client'
       client_id:
         type: integer
+      codeStandID:
+        type: string
       country:
         $ref: '#/definitions/model.Country'
       country_id:
@@ -701,6 +748,8 @@
         $ref: '#/definitions/model.Client'
       clientId:
         type: integer
+      codeStandID:
+        type: string
       created_at:
         description: |-
           The date when the item was created
@@ -803,6 +852,8 @@
         $ref: '#/definitions/model.ClientStatus'
       client_status_id:
         type: integer
+      codeStandID:
+        type: string
       contact:
         $ref: '#/definitions/model.Contact'
       contact_id:
@@ -935,6 +986,8 @@
         $ref: '#/definitions/model.Client'
       client_id:
         type: integer
+      codeStandID:
+        type: string
       end_time:
         type: string
       id:
@@ -1082,6 +1135,8 @@
         $ref: '#/definitions/model.Client'
       client_id:
         type: integer
+      codeStandID:
+        type: string
       conditions:
         type: string
       contact:
@@ -1237,6 +1292,8 @@
         $ref: '#/definitions/model.Client'
       client_id:
         type: integer
+      codeStandID:
+        type: string
       collection_projections:
         items:
           $ref: '#/definitions/model.CollectionProjection'
@@ -1361,6 +1418,8 @@
         $ref: '#/definitions/model.Client'
       clientId:
         type: integer
+      codeStandID:
+        type: string
       conditions:
         type: string
       createTime:
@@ -1412,6 +1471,8 @@
         $ref: '#/definitions/model.City'
       city_id:
         type: integer
+      codeStandID:
+        type: string
       contact_name:
         type: string
       contact_phone:
@@ -1473,6 +1534,8 @@
         $ref: '#/definitions/model.Client'
       clientId:
         type: integer
+      codeStandID:
+        type: string
       createTime:
         type: string
       creatorName:
@@ -1528,6 +1591,8 @@
         $ref: '#/definitions/model.Client'
       clientId:
         type: integer
+      codeStandID:
+        type: string
       createTime:
         type: string
       creatorName:
@@ -1666,6 +1731,8 @@
         $ref: '#/definitions/model.Client'
       clientId:
         type: integer
+      codeStandID:
+        type: string
       contact:
         $ref: '#/definitions/model.Contact'
       contactId:
@@ -1758,6 +1825,8 @@
         $ref: '#/definitions/model.Client'
       clientId:
         type: integer
+      codeStandID:
+        type: string
       contact:
         $ref: '#/definitions/model.Contact'
       contactId:
@@ -1826,6 +1895,8 @@
       clientId:
         description: 瀹㈡埛id
         type: integer
+      codeStandID:
+        type: string
       contact:
         $ref: '#/definitions/model.Contact'
       contactId:
@@ -1967,6 +2038,8 @@
         $ref: '#/definitions/model.Client'
       clientId:
         type: integer
+      codeStandID:
+        type: string
       id:
         type: integer
       masterOrder:
@@ -2129,6 +2202,11 @@
       client_type_id:
         description: 瀹㈡埛绫诲瀷ID
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contact:
         $ref: '#/definitions/request.Contact'
       contact_id:
@@ -2231,6 +2309,11 @@
       client_id:
         description: 鎵�灞炲叕鍙窱D
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       country_id:
         description: 鍥藉ID
         type: integer
@@ -2272,6 +2355,11 @@
     properties:
       client_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       file:
         type: string
       member_id:
@@ -2442,6 +2530,11 @@
     properties:
       client_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       end_time:
         type: string
       member_id:
@@ -2517,6 +2610,11 @@
     properties:
       client_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       conditions:
         type: string
       contact_id:
@@ -2657,6 +2755,11 @@
         type: integer
       client_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       competitors:
         type: string
       contact_id:
@@ -2736,6 +2839,11 @@
         type: string
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       conditions:
         type: string
       deliveryDate:
@@ -2771,6 +2879,11 @@
     properties:
       city_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contact_name:
         description: 鑱旂郴浜哄鍚�
         type: string
@@ -2849,6 +2962,11 @@
     properties:
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contactId:
         type: integer
       endTime:
@@ -2921,6 +3039,11 @@
       client_type_id:
         description: 瀹㈡埛绫诲瀷ID
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contact:
         $ref: '#/definitions/request.Contact'
       contact_id:
@@ -2986,6 +3109,11 @@
     properties:
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contactId:
         type: integer
       file:
@@ -3028,6 +3156,11 @@
       clientId:
         description: 瀹㈡埛id
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contactId:
         description: 鑱旂郴浜篿d
         type: integer
@@ -3134,6 +3267,11 @@
     properties:
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       masterOrderId:
         type: integer
       memberId:
@@ -3263,6 +3401,11 @@
       client_id:
         description: 鎵�灞炲叕鍙窱D
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       country_id:
         description: 鍥藉ID
         type: integer
@@ -3422,6 +3565,10 @@
         type: integer
       client_status_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        type: string
       contact_id:
         type: integer
       contact_information_id:
@@ -3835,6 +3982,11 @@
         type: string
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       conditions:
         type: string
       deliveryDate:
@@ -3873,6 +4025,11 @@
         type: integer
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       isInvoice:
         type: string
       memberId:
@@ -3905,6 +4062,11 @@
     properties:
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       memberId:
         type: integer
       number:
@@ -4037,6 +4199,11 @@
       client_type_id:
         description: 瀹㈡埛绫诲瀷ID
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contact:
         $ref: '#/definitions/request.Contact'
       contact_id:
@@ -4193,6 +4360,11 @@
       client_id:
         description: 鎵�灞炲叕鍙窱D
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       country_id:
         description: 鍥藉ID
         type: integer
@@ -4236,6 +4408,11 @@
     properties:
       client_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       file:
         type: string
       id:
@@ -4498,6 +4675,11 @@
     properties:
       client_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       end_time:
         type: string
       id:
@@ -4614,6 +4796,11 @@
     properties:
       client_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       conditions:
         type: string
       contact_id:
@@ -4837,6 +5024,11 @@
         type: integer
       client_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       competitors:
         type: string
       contact_id:
@@ -4947,6 +5139,11 @@
     properties:
       city_id:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contact_name:
         description: 鑱旂郴浜哄鍚�
         type: string
@@ -5112,6 +5309,11 @@
     properties:
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contactId:
         type: integer
       endTime:
@@ -5198,6 +5400,11 @@
       client_type_id:
         description: 瀹㈡埛绫诲瀷ID
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contact:
         $ref: '#/definitions/request.Contact'
       contact_id:
@@ -5263,6 +5470,11 @@
     properties:
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contactId:
         type: integer
       file:
@@ -5307,6 +5519,11 @@
       clientId:
         description: 瀹㈡埛id
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       contactId:
         description: 鑱旂郴浜篿d
         type: integer
@@ -5439,6 +5656,11 @@
     properties:
       clientId:
         type: integer
+      codeRule:
+        $ref: '#/definitions/code.CodeStandard'
+      codeStandID:
+        description: 缂栫爜id
+        type: string
       id:
         type: integer
       masterOrderId:
@@ -6863,6 +7085,36 @@
       summary: 鏇存柊瀹㈡埛绫诲瀷
       tags:
       - ClientType
+  /api/code/getCodeList:
+    get:
+      parameters:
+      - in: query
+        name: codeStandID
+        type: string
+      - in: query
+        name: name
+        type: string
+      - description: 椤电爜
+        in: query
+        name: page
+        type: integer
+      - description: 姣忛〉澶у皬
+        in: query
+        name: pageSize
+        type: integer
+      - in: query
+        name: type
+        type: string
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.ListResponse'
+      summary: 鑾峰彇缂栫爜鍒楄〃
+      tags:
+      - 缂栫爜
   /api/collectionProjection/add:
     post:
       parameters:
diff --git a/main.go b/main.go
index 4fc671d..fc4488d 100644
--- a/main.go
+++ b/main.go
@@ -48,6 +48,7 @@
 
 	go v1.InitProductServiceConn()
 	go service.InitUserConn()
+	go v1.InitCodeServiceConn()
 
 	//c := cron.New()
 	//c.AddFunc("@every 15s", service.SyncUserInfo) // 姣�15绉掑悓姝ヤ竴娆�
@@ -63,6 +64,7 @@
 
 	v1.CloseProductServiceConn()
 	service.CloseUserConn()
+	v1.CloseCodeServiceConn()
 
 	logx.Infof("aps-crm exited...")
 	os.Exit(0)
diff --git a/model/client.go b/model/client.go
index f425230..9e91558 100644
--- a/model/client.go
+++ b/model/client.go
@@ -31,6 +31,7 @@
 		NextVisitTime     *CustomTime    `json:"next_visit_time" gorm:"column:next_visit_time;type:datetime;comment:涓嬫鍥炶鏃堕棿"`
 		LatestServiceTime *CustomTime    `json:"latest_service_time" gorm:"column:latest_service_time;type:datetime;comment:鏈�鏅氭湇鍔℃椂闂�"`
 		FollowRecord      []FollowRecord `json:"follow_record" gorm:"foreignKey:ClientId"`
+		CodeStandID       string         `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		Address
 		Business
 		CrmModel
diff --git a/model/contact.go b/model/contact.go
index 01c2732..9961a42 100644
--- a/model/contact.go
+++ b/model/contact.go
@@ -7,20 +7,21 @@
 
 type (
 	Contact struct {
-		Id       int         `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		Name     string      `json:"name" gorm:"column:name;type:varchar(255);comment:鑱旂郴浜哄鍚�"`
-		Number   string      `json:"number" gorm:"column:number;type:varchar(255);comment:鑱旂郴浜虹紪鍙�"`
-		ClientId int         `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛ID"`
-		Client   Client      `json:"-" gorm:"foreignKey:ClientId"`
-		Position string      `json:"position" gorm:"column:position;type:varchar(255);comment:鑱屼綅"`
-		Phone    string      `json:"phone" gorm:"column:phone;type:varchar(255);comment:鐢佃瘽"`
-		MemberId int         `json:"member_id" gorm:"column:member_id;type:int(11);comment:璐熻矗浜篒D"`
-		Member   User        `json:"member" gorm:"foreignKey:MemberId"`
-		IsFirst  bool        `json:"is_first" gorm:"column:is_first;type:tinyint(1);comment:鏄惁棣栬鑱旂郴浜�"`
-		Wechat   string      `json:"wechat" gorm:"column:wechat;type:varchar(255);comment:寰俊"`
-		Birthday *CustomTime `json:"birthday" gorm:"column:birthday;type:datetime;comment:鐢熸棩"`
-		Email    string      `json:"email" gorm:"column:email;type:varchar(255);comment:閭"`
-		Desc     string      `json:"desc" gorm:"column:desc;type:varchar(255);comment:澶囨敞"`
+		Id          int         `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name        string      `json:"name" gorm:"column:name;type:varchar(255);comment:鑱旂郴浜哄鍚�"`
+		Number      string      `json:"number" gorm:"column:number;type:varchar(255);comment:鑱旂郴浜虹紪鍙�"`
+		ClientId    int         `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛ID"`
+		Client      Client      `json:"-" gorm:"foreignKey:ClientId"`
+		Position    string      `json:"position" gorm:"column:position;type:varchar(255);comment:鑱屼綅"`
+		Phone       string      `json:"phone" gorm:"column:phone;type:varchar(255);comment:鐢佃瘽"`
+		MemberId    int         `json:"member_id" gorm:"column:member_id;type:int(11);comment:璐熻矗浜篒D"`
+		Member      User        `json:"member" gorm:"foreignKey:MemberId"`
+		IsFirst     bool        `json:"is_first" gorm:"column:is_first;type:tinyint(1);comment:鏄惁棣栬鑱旂郴浜�"`
+		Wechat      string      `json:"wechat" gorm:"column:wechat;type:varchar(255);comment:寰俊"`
+		Birthday    *CustomTime `json:"birthday" gorm:"column:birthday;type:datetime;comment:鐢熸棩"`
+		Email       string      `json:"email" gorm:"column:email;type:varchar(255);comment:閭"`
+		Desc        string      `json:"desc" gorm:"column:desc;type:varchar(255);comment:澶囨敞"`
+		CodeStandID string      `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		Address
 		gorm.Model `json:"-"`
 	}
diff --git a/model/contract.go b/model/contract.go
index 2597428..35a23a7 100644
--- a/model/contract.go
+++ b/model/contract.go
@@ -19,6 +19,7 @@
 		ServiceContractStatus ServiceContractStatus `json:"serviceContractStatus" gorm:"foreignKey:StatusId;references:Id"`
 		File                  string                `json:"file" gorm:"column:file;type:varchar(255);comment:鍚堝悓鏂囦欢"`
 		CreatedAt             *CustomTime           `json:"created_at" gorm:"column:created_at;type:datetime;comment:鍒涘缓鏃堕棿"`
+		CodeStandID           string                `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		gormModel
 	}
 
@@ -141,3 +142,7 @@
 	slf.Orm = slf.Orm.Where("id in (?)", ids)
 	return slf
 }
+func (slf *ContractSearch) UpdateByMap(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/model/followRecord.go b/model/followRecord.go
index 67352b6..dc51c46 100644
--- a/model/followRecord.go
+++ b/model/followRecord.go
@@ -29,6 +29,7 @@
 		Client               Client             `json:"client" gorm:"foreignKey:ClientId"`
 		Contact              Contact            `json:"contact" gorm:"foreignKey:ContactId"`
 		ContactInformation   ContactInformation `json:"contact_information" gorm:"foreignKey:ContactInformationId"`
+		CodeStandID          string             `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		gorm.Model           `json:"-"`
 	}
 
@@ -196,3 +197,7 @@
 	slf.SearchMap = data
 	return slf
 }
+func (slf *FollowRecordSearch) SetOrm(tx *gorm.DB) *FollowRecordSearch {
+	slf.Orm = tx
+	return slf
+}
diff --git a/model/masterOrder.go b/model/masterOrder.go
index f33fd6c..dd7e52b 100644
--- a/model/masterOrder.go
+++ b/model/masterOrder.go
@@ -8,16 +8,17 @@
 type (
 	// MasterOrder 閿�鍞�诲崟
 	MasterOrder struct {
-		Id         int         `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		Number     string      `json:"number" gorm:"column:number;type:varchar(255);comment:閿�鍞�诲崟鍙�"`
-		ClientId   int         `json:"client_id" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
-		Client     Client      `json:"client" gorm:"foreignKey:ClientId"`
-		MemberId   int         `json:"member_id" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
-		Member     User        `json:"member" gorm:"foreignKey:MemberId"`
-		StartTime  *CustomTime `json:"start_time" gorm:"column:start_time;type:datetime;comment:寮�濮嬫椂闂�"`
-		EndTime    *CustomTime `json:"end_time" gorm:"column:end_time;type:datetime;comment:缁撴潫鏃堕棿"`
-		Money      float64     `json:"money" gorm:"column:money;type:decimal(10,2);comment:鎬婚噾棰�"`
-		gorm.Model `json:"-"`
+		Id          int         `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Number      string      `json:"number" gorm:"column:number;type:varchar(255);comment:閿�鍞�诲崟鍙�"`
+		ClientId    int         `json:"client_id" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
+		Client      Client      `json:"client" gorm:"foreignKey:ClientId"`
+		MemberId    int         `json:"member_id" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
+		Member      User        `json:"member" gorm:"foreignKey:MemberId"`
+		StartTime   *CustomTime `json:"start_time" gorm:"column:start_time;type:datetime;comment:寮�濮嬫椂闂�"`
+		EndTime     *CustomTime `json:"end_time" gorm:"column:end_time;type:datetime;comment:缁撴潫鏃堕棿"`
+		Money       float64     `json:"money" gorm:"column:money;type:decimal(10,2);comment:鎬婚噾棰�"`
+		CodeStandID string      `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
+		gorm.Model  `json:"-"`
 	}
 
 	// MasterOrderSearch 閿�鍞�诲崟鎼滅储鏉′欢
diff --git a/model/quotation.go b/model/quotation.go
index 091c34b..24257f4 100644
--- a/model/quotation.go
+++ b/model/quotation.go
@@ -24,6 +24,7 @@
 		Contact           Contact         `json:"contact" gorm:"foreignKey:ContactId"`
 		SaleChance        SaleChance      `json:"sale_chance" gorm:"foreignKey:SaleChanceId"`
 		Products          []Product       `json:"products" gorm:"many2many:quotation_product"`
+		CodeStandID       string          `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		gorm.Model        `json:"-"`
 	}
 
diff --git a/model/request/client.go b/model/request/client.go
index 48caa0c..08b32ea 100644
--- a/model/request/client.go
+++ b/model/request/client.go
@@ -1,25 +1,29 @@
 package request
 
+import "aps_crm/proto/code"
+
 type AddClient struct {
 	Client
 }
 
 type Client struct {
-	Name              string  `json:"name"`                // 鍏徃鍚嶇О
-	Number            string  `json:"number"`              // 鍏徃缂栧彿
-	ClientStatusId    int     `json:"client_status_id"`    // 瀹㈡埛鐘舵�両D
-	ClientTypeId      int     `json:"client_type_id"`      // 瀹㈡埛绫诲瀷ID
-	ClientOriginId    int     `json:"client_origin_id"`    // 瀹㈡埛鏉ユ簮ID
-	ClientLevelId     int     `json:"client_level_id"`     // 瀹㈡埛绛夌骇ID
-	MemberId          int     `json:"member_id"`           // 閿�鍞礋璐d汉ID
-	ServiceMemberId   int     `json:"service_member_id"`   // 鏈嶅姟璐熻矗浜篒D
-	DetailAddress     string  `json:"detail_address"`      // 璇︾粏鍦板潃
-	Remark            string  `json:"remark"`              // 澶囨敞
-	NextVisitTime     string  `json:"next_visit_time"`     // 涓嬫鍥炶鏃堕棿
-	LatestServiceTime string  `json:"latest_service_time"` // 鏈�鏅氭湇鍔℃椂闂�
-	Contact           Contact `json:"contact"`
-	SalesLeadsId      int     `json:"sales_leads_id"` // 閿�鍞嚎绱D
-	ContactId         int     `json:"contact_id"`     // 鑱旂郴浜篒D
+	Name              string            `json:"name"`                // 鍏徃鍚嶇О
+	Number            string            `json:"number"`              // 鍏徃缂栧彿
+	ClientStatusId    int               `json:"client_status_id"`    // 瀹㈡埛鐘舵�両D
+	ClientTypeId      int               `json:"client_type_id"`      // 瀹㈡埛绫诲瀷ID
+	ClientOriginId    int               `json:"client_origin_id"`    // 瀹㈡埛鏉ユ簮ID
+	ClientLevelId     int               `json:"client_level_id"`     // 瀹㈡埛绛夌骇ID
+	MemberId          int               `json:"member_id"`           // 閿�鍞礋璐d汉ID
+	ServiceMemberId   int               `json:"service_member_id"`   // 鏈嶅姟璐熻矗浜篒D
+	DetailAddress     string            `json:"detail_address"`      // 璇︾粏鍦板潃
+	Remark            string            `json:"remark"`              // 澶囨敞
+	NextVisitTime     string            `json:"next_visit_time"`     // 涓嬫鍥炶鏃堕棿
+	LatestServiceTime string            `json:"latest_service_time"` // 鏈�鏅氭湇鍔℃椂闂�
+	Contact           Contact           `json:"contact"`
+	SalesLeadsId      int               `json:"sales_leads_id"` // 閿�鍞嚎绱D
+	ContactId         int               `json:"contact_id"`     // 鑱旂郴浜篒D
+	CodeStandID       string            `json:"codeStandID"`    //缂栫爜id
+	CodeRule          code.CodeStandard `json:"codeRule"`
 	Address
 	Business
 }
diff --git a/model/request/code_request.go b/model/request/code_request.go
new file mode 100644
index 0000000..ecc73fa
--- /dev/null
+++ b/model/request/code_request.go
@@ -0,0 +1,32 @@
+package request
+
+type GetCodeList struct {
+	PageInfo
+	CodeStandID string `json:"codeStandID"`
+	Name        string `json:"name"`
+	Type        string `json:"type"`
+}
+
+type CodeStandard struct {
+	ID       string      `json:"id"`
+	Name     string      `json:"name"`
+	Type     string      `json:"type"`
+	Method   int32       `json:"method"`
+	Status   string      `json:"status"`
+	List     []*CodeRule `json:"list"`
+	AutoRule *CodeAuto   `json:"autoRule"`
+}
+
+type CodeRule struct {
+	Name   string `json:"name"`
+	Length int32  `json:"length"`
+	Desc   string `json:"desc"`
+}
+
+type CodeAuto struct {
+	PrefixMethod int32  `json:"prefixMethod"`
+	PrefixValue  string `json:"prefixValue"`
+	SuffixMethod int32  `json:"suffixMethod"`
+	AutoLength   int32  `json:"autoLength"`
+	Desc         string `json:"desc"`
+}
diff --git a/model/request/contact.go b/model/request/contact.go
index de6601f..2a788d5 100644
--- a/model/request/contact.go
+++ b/model/request/contact.go
@@ -1,25 +1,29 @@
 package request
 
+import "aps_crm/proto/code"
+
 type AddContact struct {
 	Contact
 }
 
 type Contact struct {
-	Name       string `json:"name"`                                   // 鑱旂郴浜哄悕绉�
-	Number     string `json:"number"`                                 // 鑱旂郴浜虹紪鍙�
-	MemberId   int    `json:"member_id"`                              // 鎵�灞炴垚鍛業D
-	ClientId   int    `json:"client_id"`                              // 鎵�灞炲叕鍙窱D
-	Position   string `json:"position"`                               // 鑱屼綅
-	Phone      string `json:"phone"`                                  // 鎵嬫満鍙�
-	IsFirst    bool   `json:"is_first"`                               // 鏄惁棣栬鑱旂郴浜�
-	Wechat     string `json:"wechat"`                                 // 寰俊鍙�
-	Birthday   string `json:"birthday" example:"1970-01-01 08:00:00"` // 鐢熸棩
-	Email      string `json:"email"`                                  // 閭
-	Desc       string `json:"desc"`                                   // 澶囨敞
-	CountryId  int    `json:"country_id"`                             // 鍥藉ID
-	ProvinceId int    `json:"province_id"`                            // 鐪佷唤ID
-	CityId     int    `json:"city_id"`                                // 鍩庡競ID
-	RegionId   int    `json:"region_id"`                              // 鍖哄煙ID
+	Name        string            `json:"name"`                                   // 鑱旂郴浜哄悕绉�
+	Number      string            `json:"number"`                                 // 鑱旂郴浜虹紪鍙�
+	MemberId    int               `json:"member_id"`                              // 鎵�灞炴垚鍛業D
+	ClientId    int               `json:"client_id"`                              // 鎵�灞炲叕鍙窱D
+	Position    string            `json:"position"`                               // 鑱屼綅
+	Phone       string            `json:"phone"`                                  // 鎵嬫満鍙�
+	IsFirst     bool              `json:"is_first"`                               // 鏄惁棣栬鑱旂郴浜�
+	Wechat      string            `json:"wechat"`                                 // 寰俊鍙�
+	Birthday    string            `json:"birthday" example:"1970-01-01 08:00:00"` // 鐢熸棩
+	Email       string            `json:"email"`                                  // 閭
+	Desc        string            `json:"desc"`                                   // 澶囨敞
+	CountryId   int               `json:"country_id"`                             // 鍥藉ID
+	ProvinceId  int               `json:"province_id"`                            // 鐪佷唤ID
+	CityId      int               `json:"city_id"`                                // 鍩庡競ID
+	RegionId    int               `json:"region_id"`                              // 鍖哄煙ID
+	CodeStandID string            `json:"codeStandID"`                            //缂栫爜id
+	CodeRule    code.CodeStandard `json:"codeRule"`
 }
 
 type UpdateContact struct {
diff --git a/model/request/contract.go b/model/request/contract.go
index 701f75c..e9e9c43 100644
--- a/model/request/contract.go
+++ b/model/request/contract.go
@@ -1,16 +1,20 @@
 package request
 
+import "aps_crm/proto/code"
+
 type AddContract struct {
 	Contract
 }
 
 type Contract struct {
-	ClientId    int    `json:"client_id"`
-	MemberId    int    `json:"member_id"`
-	Number      string `json:"number"`
-	QuotationId int    `json:"quotation_id"`
-	StatusId    int    `json:"status_id"`
-	File        string `json:"file"`
+	ClientId    int               `json:"client_id"`
+	MemberId    int               `json:"member_id"`
+	Number      string            `json:"number"`
+	QuotationId int               `json:"quotation_id"`
+	StatusId    int               `json:"status_id"`
+	File        string            `json:"file"`
+	CodeStandID string            `json:"codeStandID"` //缂栫爜id
+	CodeRule    code.CodeStandard `json:"codeRule"`
 }
 
 type UpdateContract struct {
diff --git a/model/request/followRecord.go b/model/request/followRecord.go
index 3c64a93..e84169d 100644
--- a/model/request/followRecord.go
+++ b/model/request/followRecord.go
@@ -1,24 +1,28 @@
 package request
 
+import "aps_crm/proto/code"
+
 type AddFollowRecord struct {
 	FollowRecord FollowRecord `json:"follow_record" binding:"required"`
 }
 
 type FollowRecord struct {
-	ClientId             int    `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛id"`
-	ClientStatusId       int    `json:"client_status_id" gorm:"column:client_status_id;type:int(11);comment:瀹㈡埛鐘舵�乮d"`
-	MemberId             int    `json:"member_id" gorm:"column:member_id;type:int(11);comment:璺熻繘浜篿d"`
-	Number               string `json:"number" gorm:"column:number;type:varchar(255);comment:璺熻繘缂栧彿"`
-	ContactId            int    `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:鑱旂郴浜篿d"`
-	Topic                string `json:"topic" gorm:"column:topic;type:varchar(255);comment:璺熻繘涓婚"`
-	Record               string `json:"record" gorm:"column:record;type:MEDIUMTEXT;comment:璺熻繘璁板綍"`
-	SaleChanceId         int    `json:"sale_chance_id" gorm:"column:sale_chance_id;type:int(11);comment:閿�鍞満浼歩d"`
-	SalesLeadsId         int    `json:"sales_leads_id" gorm:"column:sales_leads_id;type:int(11);comment:閿�鍞嚎绱d"`
-	ContactInformationId int    `json:"contact_information_id" gorm:"column:contact_information_id;type:int(11);comment:鑱旂郴鏂瑰紡id"`
-	FollowTime           string `json:"follow_time" gorm:"column:follow_time;type:datetime;comment:璺熻繘鏃堕棿"`
-	NextFollowTime       string `json:"next_follow_time" gorm:"column:next_follow_time;type:datetime;comment:涓嬫璺熻繘鏃堕棿"`
-	Purpose              string `json:"purpose" gorm:"column:purpose;type:varchar(255);comment:璺熻繘鐩殑"`
-	Content              string `json:"content" gorm:"column:content;type:varchar(255);comment:璺熻繘鍐呭"`
+	ClientId             int               `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛id"`
+	ClientStatusId       int               `json:"client_status_id" gorm:"column:client_status_id;type:int(11);comment:瀹㈡埛鐘舵�乮d"`
+	MemberId             int               `json:"member_id" gorm:"column:member_id;type:int(11);comment:璺熻繘浜篿d"`
+	Number               string            `json:"number" gorm:"column:number;type:varchar(255);comment:璺熻繘缂栧彿"`
+	ContactId            int               `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:鑱旂郴浜篿d"`
+	Topic                string            `json:"topic" gorm:"column:topic;type:varchar(255);comment:璺熻繘涓婚"`
+	Record               string            `json:"record" gorm:"column:record;type:MEDIUMTEXT;comment:璺熻繘璁板綍"`
+	SaleChanceId         int               `json:"sale_chance_id" gorm:"column:sale_chance_id;type:int(11);comment:閿�鍞満浼歩d"`
+	SalesLeadsId         int               `json:"sales_leads_id" gorm:"column:sales_leads_id;type:int(11);comment:閿�鍞嚎绱d"`
+	ContactInformationId int               `json:"contact_information_id" gorm:"column:contact_information_id;type:int(11);comment:鑱旂郴鏂瑰紡id"`
+	FollowTime           string            `json:"follow_time" gorm:"column:follow_time;type:datetime;comment:璺熻繘鏃堕棿"`
+	NextFollowTime       string            `json:"next_follow_time" gorm:"column:next_follow_time;type:datetime;comment:涓嬫璺熻繘鏃堕棿"`
+	Purpose              string            `json:"purpose" gorm:"column:purpose;type:varchar(255);comment:璺熻繘鐩殑"`
+	Content              string            `json:"content" gorm:"column:content;type:varchar(255);comment:璺熻繘鍐呭"`
+	CodeStandID          string            `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
+	CodeRule             code.CodeStandard `json:"codeRule"`
 }
 
 type UpdateFollowRecord struct {
diff --git a/model/request/masterOrder.go b/model/request/masterOrder.go
index 6cecb35..00317c8 100644
--- a/model/request/masterOrder.go
+++ b/model/request/masterOrder.go
@@ -1,16 +1,20 @@
 package request
 
+import "aps_crm/proto/code"
+
 type AddMasterOrder struct {
 	MasterOrder
 }
 
 type MasterOrder struct {
-	Number    string  `json:"number"`
-	ClientId  int     `json:"client_id"`
-	MemberId  int     `json:"member_id"`
-	StartTime string  `json:"start_time"`
-	EndTime   string  `json:"end_time"`
-	Money     float64 `json:"money"`
+	Number      string            `json:"number"`
+	ClientId    int               `json:"client_id"`
+	MemberId    int               `json:"member_id"`
+	StartTime   string            `json:"start_time"`
+	EndTime     string            `json:"end_time"`
+	Money       float64           `json:"money"`
+	CodeStandID string            `json:"codeStandID"` //缂栫爜id
+	CodeRule    code.CodeStandard `json:"codeRule"`
 }
 
 type UpdateMasterOrder struct {
diff --git a/model/request/quotation.go b/model/request/quotation.go
index 468b1fb..729b825 100644
--- a/model/request/quotation.go
+++ b/model/request/quotation.go
@@ -1,22 +1,27 @@
 package request
 
-import "aps_crm/model"
+import (
+	"aps_crm/model"
+	"aps_crm/proto/code"
+)
 
 type AddQuotation struct {
 	Quotation
 }
 
 type Quotation struct {
-	ClientId          int             `json:"client_id"`
-	Number            string          `json:"number"`
-	QuotationStatusId int             `json:"quotation_status_id"`
-	ValidityDate      string          `json:"validity_date"`
-	ContactId         int             `json:"contact_id"`
-	MemberId          int             `json:"member_id"`
-	SaleChanceId      int             `json:"sale_chance_id"`
-	Conditions        string          `json:"conditions"`
-	File              string          `json:"file"`
-	Products          []model.Product `json:"products"`
+	ClientId          int               `json:"client_id"`
+	Number            string            `json:"number"`
+	QuotationStatusId int               `json:"quotation_status_id"`
+	ValidityDate      string            `json:"validity_date"`
+	ContactId         int               `json:"contact_id"`
+	MemberId          int               `json:"member_id"`
+	SaleChanceId      int               `json:"sale_chance_id"`
+	Conditions        string            `json:"conditions"`
+	File              string            `json:"file"`
+	CodeStandID       string            `json:"codeStandID"` //缂栫爜id
+	CodeRule          code.CodeStandard `json:"codeRule"`
+	Products          []model.Product   `json:"products"`
 }
 
 type UpdateQuotation struct {
diff --git a/model/request/saleChance.go b/model/request/saleChance.go
index 6b7fe11..20d4619 100644
--- a/model/request/saleChance.go
+++ b/model/request/saleChance.go
@@ -1,39 +1,43 @@
 package request
 
+import "aps_crm/proto/code"
+
 type AddSaleChance struct {
 	SaleChance
 }
 
 type SaleChance struct {
-	Name               string  `json:"name"`
-	ClientId           int     `json:"client_id"`
-	Number             string  `json:"number"`
-	ContactId          int     `json:"contact_id"`
-	SalesSourcesId     int     `json:"sales_sources_id"`
-	SaleTypeId         int     `json:"sale_type_id"`
-	SaleStageId        int     `json:"sale_stage_id"`
-	MemberId           int     `json:"member_id"`
-	RegularCustomersId int     `json:"regular_customers_id"`
-	Competitors        string  `json:"competitors"`
-	Possibilities      int     `json:"possibilities"`
-	Budget             float64 `json:"budget"`
-	ProjectedAmount    float64 `json:"projected_amount"`
-	Currency           int     `json:"currency"`
-	ExpectedTime       string  `json:"expected_time"`
-	StatusId           int     `json:"status_id"`
-	PainPoints         string  `json:"pain_points"`
-	WhetherEstablished string  `json:"whether_established"`
-	CapitalBudget      string  `json:"capital_budget"`
-	KeyMaker           string  `json:"key_maker"`
-	KeyFactors         string  `json:"key_factors"`
-	Process            string  `json:"process"`
-	Solutions          string  `json:"solutions"`
-	Advantages         string  `json:"advantages"`
-	Disadvantages      string  `json:"disadvantages"`
-	Opportunities      string  `json:"opportunities"`
-	Threats            string  `json:"threats"`
-	Remark             string  `json:"remark"`
-	DetailAddress      string  `json:"detail_address"`
+	Name               string            `json:"name"`
+	ClientId           int               `json:"client_id"`
+	Number             string            `json:"number"`
+	ContactId          int               `json:"contact_id"`
+	SalesSourcesId     int               `json:"sales_sources_id"`
+	SaleTypeId         int               `json:"sale_type_id"`
+	SaleStageId        int               `json:"sale_stage_id"`
+	MemberId           int               `json:"member_id"`
+	RegularCustomersId int               `json:"regular_customers_id"`
+	Competitors        string            `json:"competitors"`
+	Possibilities      int               `json:"possibilities"`
+	Budget             float64           `json:"budget"`
+	ProjectedAmount    float64           `json:"projected_amount"`
+	Currency           int               `json:"currency"`
+	ExpectedTime       string            `json:"expected_time"`
+	StatusId           int               `json:"status_id"`
+	PainPoints         string            `json:"pain_points"`
+	WhetherEstablished string            `json:"whether_established"`
+	CapitalBudget      string            `json:"capital_budget"`
+	KeyMaker           string            `json:"key_maker"`
+	KeyFactors         string            `json:"key_factors"`
+	Process            string            `json:"process"`
+	Solutions          string            `json:"solutions"`
+	Advantages         string            `json:"advantages"`
+	Disadvantages      string            `json:"disadvantages"`
+	Opportunities      string            `json:"opportunities"`
+	Threats            string            `json:"threats"`
+	Remark             string            `json:"remark"`
+	DetailAddress      string            `json:"detail_address"`
+	CodeStandID        string            `json:"codeStandID"` //缂栫爜id
+	CodeRule           code.CodeStandard `json:"codeRule"`
 	Address
 }
 
diff --git a/model/request/salesDetails.go b/model/request/salesDetails.go
index 7758bf6..c339c9a 100644
--- a/model/request/salesDetails.go
+++ b/model/request/salesDetails.go
@@ -3,6 +3,7 @@
 import (
 	"aps_crm/constvar"
 	"aps_crm/model"
+	"aps_crm/proto/code"
 )
 
 type AddSalesDetails struct {
@@ -10,23 +11,25 @@
 }
 
 type SalesDetails struct {
-	ClientId            int              `json:"clientId" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
-	Number              string           `json:"number" gorm:"column:number;type:varchar(255);comment:閿�鍞瓙鍗曞彿"`
-	SaleChanceId        int              `json:"saleChanceId" gorm:"column:sale_chance_id;type:int;comment:閿�鍞満浼歩d"`
-	SaleType            int              `json:"saleType" gorm:"column:sale_type;type:int;comment:閿�鍞被鍨�"`
-	SignTime            string           `json:"signTime" gorm:"column:sign_time;type:datetime;comment:绛惧崟鏃堕棿"`
-	MemberId            int              `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
-	DeliveryDate        string           `json:"deliveryDate" gorm:"column:delivery_date;type:datetime;comment:浜よ揣鏃ユ湡"`
-	WechatOrderStatusId int              `json:"wechatOrderStatusId" gorm:"column:wechat_order_status_id;type:int;comment:寰俊璁㈠崟鐘舵�乮d"`
-	Address             string           `json:"address" gorm:"column:address;type:varchar(255);comment:鍦板潃"`
-	Phone               string           `json:"phone" gorm:"column:phone;type:varchar(255);comment:鐢佃瘽"`
-	Addressee           string           `json:"addressee" gorm:"column:addressee;type:varchar(255);comment:鏀朵欢浜�"`
-	Conditions          string           `json:"conditions" gorm:"column:conditions;type:text;comment:鏉′欢"`
-	Remark              string           `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
-	Products            []*model.Product `json:"products" gorm:"many2many:sales_details_product;"`
-	LogisticCompany     string           `json:"logisticCompany" gorm:"column:logistic_company;type:varchar(255);comment:鐗╂祦鍏徃"`
-	LogisticNumber      string           `json:"logisticNumber" gorm:"column:logistic_number;type:varchar(255);comment:鐗╂祦鍗曞彿"`
-	LogisticCost        float64          `json:"logisticCost" gorm:"column:logistic_cost;type:decimal(10,2);comment:鐗╂祦璐圭敤"`
+	ClientId            int               `json:"clientId" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
+	Number              string            `json:"number" gorm:"column:number;type:varchar(255);comment:閿�鍞瓙鍗曞彿"`
+	SaleChanceId        int               `json:"saleChanceId" gorm:"column:sale_chance_id;type:int;comment:閿�鍞満浼歩d"`
+	SaleType            int               `json:"saleType" gorm:"column:sale_type;type:int;comment:閿�鍞被鍨�"`
+	SignTime            string            `json:"signTime" gorm:"column:sign_time;type:datetime;comment:绛惧崟鏃堕棿"`
+	MemberId            int               `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
+	DeliveryDate        string            `json:"deliveryDate" gorm:"column:delivery_date;type:datetime;comment:浜よ揣鏃ユ湡"`
+	WechatOrderStatusId int               `json:"wechatOrderStatusId" gorm:"column:wechat_order_status_id;type:int;comment:寰俊璁㈠崟鐘舵�乮d"`
+	Address             string            `json:"address" gorm:"column:address;type:varchar(255);comment:鍦板潃"`
+	Phone               string            `json:"phone" gorm:"column:phone;type:varchar(255);comment:鐢佃瘽"`
+	Addressee           string            `json:"addressee" gorm:"column:addressee;type:varchar(255);comment:鏀朵欢浜�"`
+	Conditions          string            `json:"conditions" gorm:"column:conditions;type:text;comment:鏉′欢"`
+	Remark              string            `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
+	Products            []*model.Product  `json:"products" gorm:"many2many:sales_details_product;"`
+	LogisticCompany     string            `json:"logisticCompany" gorm:"column:logistic_company;type:varchar(255);comment:鐗╂祦鍏徃"`
+	LogisticNumber      string            `json:"logisticNumber" gorm:"column:logistic_number;type:varchar(255);comment:鐗╂祦鍗曞彿"`
+	LogisticCost        float64           `json:"logisticCost" gorm:"column:logistic_cost;type:decimal(10,2);comment:鐗╂祦璐圭敤"`
+	CodeStandID         string            `json:"codeStandID"` //缂栫爜id
+	CodeRule            code.CodeStandard `json:"codeRule"`
 }
 
 type UpdateSalesDetails struct {
diff --git a/model/request/salesLeads.go b/model/request/salesLeads.go
index b29c4fb..821be06 100644
--- a/model/request/salesLeads.go
+++ b/model/request/salesLeads.go
@@ -1,21 +1,26 @@
 package request
 
-import "aps_crm/constvar"
+import (
+	"aps_crm/constvar"
+	"aps_crm/proto/code"
+)
 
 type AddSalesLeads struct {
 	SalesLeads
 }
 
 type SalesLeads struct {
-	Name            string `json:"name"`             // 鍏徃鍚嶇О
-	Number          string `json:"number"`           // 閿�鍞嚎绱㈢紪鍙�
-	ContactName     string `json:"contact_name"`     // 鑱旂郴浜哄鍚�
-	ContactPhone    string `json:"contact_phone"`    // 鑱旂郴浜虹數璇�
-	ContactPosition string `json:"contact_position"` // 鑱旂郴浜鸿亴浣�
-	SalesSourcesId  int    `json:"sales_sources_id"` // 鍟嗘満鏉ユ簮ID
-	MemberId        int    `json:"member_id"`        // 閿�鍞礋璐d汉ID
-	Desc            string `json:"desc"`             // 澶囨敞
-	DetailAddress   string `json:"detail_address"`   // 璇︾粏鍦板潃
+	Name            string            `json:"name"`             // 鍏徃鍚嶇О
+	Number          string            `json:"number"`           // 閿�鍞嚎绱㈢紪鍙�
+	ContactName     string            `json:"contact_name"`     // 鑱旂郴浜哄鍚�
+	ContactPhone    string            `json:"contact_phone"`    // 鑱旂郴浜虹數璇�
+	ContactPosition string            `json:"contact_position"` // 鑱旂郴浜鸿亴浣�
+	SalesSourcesId  int               `json:"sales_sources_id"` // 鍟嗘満鏉ユ簮ID
+	MemberId        int               `json:"member_id"`        // 閿�鍞礋璐d汉ID
+	Desc            string            `json:"desc"`             // 澶囨敞
+	DetailAddress   string            `json:"detail_address"`   // 璇︾粏鍦板潃
+	CodeStandID     string            `json:"codeStandID"`      //缂栫爜id
+	CodeRule        code.CodeStandard `json:"codeRule"`
 	Address
 }
 
diff --git a/model/request/salesRefund.go b/model/request/salesRefund.go
index 0f132db..2fdb91e 100644
--- a/model/request/salesRefund.go
+++ b/model/request/salesRefund.go
@@ -3,6 +3,7 @@
 import (
 	"aps_crm/constvar"
 	"aps_crm/model"
+	"aps_crm/proto/code"
 )
 
 type AddSalesRefundRequest struct {
@@ -21,6 +22,8 @@
 	IsInvoice     string                    `json:"isInvoice"`
 	Reason        string                    `json:"reason"`
 	Products      []*model.Product          `json:"products"`
+	CodeStandID   string                    `json:"codeStandID"` //缂栫爜id
+	CodeRule      code.CodeStandard         `json:"codeRule"`
 }
 
 type UpdateSalesRefundRequest struct {
diff --git a/model/request/salesReturn.go b/model/request/salesReturn.go
index b451ee1..5ec8c49 100644
--- a/model/request/salesReturn.go
+++ b/model/request/salesReturn.go
@@ -3,6 +3,7 @@
 import (
 	"aps_crm/constvar"
 	"aps_crm/model"
+	"aps_crm/proto/code"
 )
 
 type AddSalesReturnRequest struct {
@@ -22,6 +23,8 @@
 	Creator             User                           `json:"-"  gorm:"foreignKey:CreatorId"`                                                 //鍒涘缓浜轰俊鎭�
 	Reason              string                         `json:"reason" gorm:"column:reason;type:varchar(255);comment:閫�璐у師鍥�"`                     //閫�璐у師鍥�
 	Products            []*model.Product               `json:"products" gorm:"many2many:salesReturn_product;"`                                 //閫�璐т骇鍝�
+	CodeStandID         string                         `json:"codeStandID"`                                                                    //缂栫爜id
+	CodeRule            code.CodeStandard              `json:"codeRule"`
 }
 
 type UpdateSalesReturnRequest struct {
diff --git a/model/request/serviceContract.go b/model/request/serviceContract.go
index dddcfd5..422983d 100644
--- a/model/request/serviceContract.go
+++ b/model/request/serviceContract.go
@@ -3,6 +3,7 @@
 import (
 	"aps_crm/constvar"
 	"aps_crm/model"
+	"aps_crm/proto/code"
 )
 
 type AddServiceContract struct {
@@ -10,24 +11,26 @@
 }
 
 type ServiceContract struct {
-	ClientId                int              `json:"clientId"`
-	Number                  string           `json:"number"`
-	MemberId                int              `json:"memberId" binding:"required"`
-	ContactId               int              `json:"contactId"`
-	SaleChanceId            int              `json:"saleChanceId"`
-	SalesDetailsId          int              `json:"salesDetailsId"`
-	QuotationId             int              `json:"quotationId"`
-	TypeId                  int              `json:"typeId"`
-	SignTime                string           `json:"signTime" binding:"datetime=2006-01-02"`
-	StartTime               string           `json:"startTime"`
-	EndTime                 string           `json:"endTime"`
-	StatusId                int              `json:"statusId"`
-	ServiceTimes            int              `json:"serviceTimes"`
-	Terms                   string           `json:"terms"`
-	Remark                  string           `json:"remark"`
-	Products                []*model.Product `json:"products"`
-	ServiceContractTypeId   int              `json:"serviceContractTypeId"`
-	ServiceContractStatusId int              `json:"serviceContractStatusId"`
+	ClientId                int               `json:"clientId"`
+	Number                  string            `json:"number"`
+	MemberId                int               `json:"memberId" binding:"required"`
+	ContactId               int               `json:"contactId"`
+	SaleChanceId            int               `json:"saleChanceId"`
+	SalesDetailsId          int               `json:"salesDetailsId"`
+	QuotationId             int               `json:"quotationId"`
+	TypeId                  int               `json:"typeId"`
+	SignTime                string            `json:"signTime" binding:"datetime=2006-01-02"`
+	StartTime               string            `json:"startTime"`
+	EndTime                 string            `json:"endTime"`
+	StatusId                int               `json:"statusId"`
+	ServiceTimes            int               `json:"serviceTimes"`
+	Terms                   string            `json:"terms"`
+	Remark                  string            `json:"remark"`
+	Products                []*model.Product  `json:"products"`
+	ServiceContractTypeId   int               `json:"serviceContractTypeId"`
+	ServiceContractStatusId int               `json:"serviceContractStatusId"`
+	CodeStandID             string            `json:"codeStandID"` //缂栫爜id
+	CodeRule                code.CodeStandard `json:"codeRule"`
 }
 
 type UpdateServiceContract struct {
diff --git a/model/request/serviceFollowup.go b/model/request/serviceFollowup.go
index cd45528..b5628e8 100644
--- a/model/request/serviceFollowup.go
+++ b/model/request/serviceFollowup.go
@@ -1,25 +1,30 @@
 package request
 
-import "aps_crm/constvar"
+import (
+	"aps_crm/constvar"
+	"aps_crm/proto/code"
+)
 
 type AddServiceFollowup struct {
 	ServiceFollowup
 }
 
 type ServiceFollowup struct {
-	ClientId       int    `json:"clientId"`
-	Number         string `json:"number"`
-	ContactId      int    `json:"contactId"`
-	ServiceOrderId int    `json:"serviceOrderId"`
-	MemberId       int    `json:"memberId"`
-	PlanId         int    `json:"planId"`
-	Satisfaction   int    `json:"satisfaction"`
-	TimelyRate     int    `json:"timelyRate"`
-	SolveRate      int    `json:"solveRate"`
-	IsVisit        int    `json:"isVisit"`
-	OldMemberId    int    `json:"oldMemberId"`
-	Remark         string `json:"remark"`
-	File           string `json:"file"`
+	ClientId       int               `json:"clientId"`
+	Number         string            `json:"number"`
+	ContactId      int               `json:"contactId"`
+	ServiceOrderId int               `json:"serviceOrderId"`
+	MemberId       int               `json:"memberId"`
+	PlanId         int               `json:"planId"`
+	Satisfaction   int               `json:"satisfaction"`
+	TimelyRate     int               `json:"timelyRate"`
+	SolveRate      int               `json:"solveRate"`
+	IsVisit        int               `json:"isVisit"`
+	OldMemberId    int               `json:"oldMemberId"`
+	Remark         string            `json:"remark"`
+	File           string            `json:"file"`
+	CodeStandID    string            `json:"codeStandID"` //缂栫爜id
+	CodeRule       code.CodeStandard `json:"codeRule"`
 }
 
 type UpdateServiceFollowup struct {
diff --git a/model/request/serviceOrder.go b/model/request/serviceOrder.go
index 81b6677..3b59202 100644
--- a/model/request/serviceOrder.go
+++ b/model/request/serviceOrder.go
@@ -2,36 +2,39 @@
 
 import (
 	"aps_crm/constvar"
+	"aps_crm/proto/code"
 )
 
 type AddServiceOrder struct {
-	ServiceNumber        string  `gorm:"service_number" json:"serviceNumber"`                                                                    // 鏈嶅姟鍗曠紪鍙�
-	ClientId             int     `gorm:"client_id" json:"clientId"`                                                                              // 瀹㈡埛id
-	ServiceContractId    int     `gorm:"service_contract_id" json:"serviceContractId"`                                                           // 鍚堝悓id
-	SalesDetailsId       int     `gorm:"sales_details_id" json:"salesDetailsId"`                                                                 // 閿�鍞鍗昳d
-	Subject              string  `gorm:"subject" json:"subject"`                                                                                 // 涓婚
-	ProductTypeName      string  `json:"productTypeName"`                                                                                        // 浜у搧鍒嗙被鍚嶇О
-	ProductName          string  `json:"productName"`                                                                                            // 浜у搧鍚嶇О
-	ServiceTypeId        int     `gorm:"service_type_id" json:"serviceTypeId"`                                                                   // 鏈嶅姟鏂瑰紡id
-	ServiceManId         int     `gorm:"service_man_id" json:"serviceManId"`                                                                     // 鏈嶅姟浜哄憳
-	ContactId            int     `gorm:"linkman_id" json:"contactId"`                                                                            // 鑱旂郴浜篿d
-	Address              string  `gorm:"address" json:"address"`                                                                                 // 涓婇棬鍦板潃
-	PriorityLevelId      int     `gorm:"priority_level_id" json:"priorityLevelId"`                                                               // 浼樺厛绾у埆id
-	AppointmentTime      string  `gorm:"appointment_time" json:"appointmentTime"`                                                                // 棰勭害涓婇棬鏃堕棿
-	SaleChanceId         int     `gorm:"sale_leads" json:"saleChanceId"`                                                                         // 閿�鍞満浼歩d
-	FaultTypeId          int     `gorm:"severity_id" json:"faultTypeId"`                                                                         // 鏁呴殰绫诲埆id
-	SeverityId           int     `gorm:"severity_id" json:"severity"`                                                                            // 涓ラ噸绋嬪害id
-	ServiceOrderStatusId int     `gorm:"column:service_order_status_id;type:int;not null;default:0;comment:鏈嶅姟鍗曠姸鎬乮d" json:"serviceOrderStatusId"` // 澶勭悊鐘舵��
-	ExpectTime           string  `gorm:"expect_time" json:"expectTime"`                                                                          // 甯屾湜澶勭悊鏃堕棿
-	RealTime             string  `gorm:"real_time" json:"realTime"`                                                                              // 瀹為檯澶勭悊鏃堕棿
-	CarFare              float64 `gorm:"car_fare" json:"carFare"`                                                                                // 浜ら�氳垂
-	ChargeAmount         float64 `gorm:"charge_amount" json:"chargeAmount"`                                                                      // 鏀惰垂閲戦
-	TimeSpentId          int     `gorm:"time_spent_id" json:"timeSpentId"`                                                                       // 鑺辫垂鏃堕棿
-	FaqId                int     `gorm:"problem_id" json:"faqId"`                                                                                // 甯歌闂id
-	ProblemDesc          string  `gorm:"problem_desc" json:"problemDesc"`                                                                        // 闂鎻忚堪
-	Solution             string  `gorm:"solution" json:"solution"`                                                                               // 瑙e喅鏂规硶
-	SolutionRemark       string  `gorm:"solution_remark" json:"solutionRemark"`                                                                  // 鍐呴儴澶囨敞
-	Remark               string  `gorm:"remark" json:"remark"`                                                                                   // 澶囨敞
+	ServiceNumber        string            `gorm:"service_number" json:"serviceNumber"`                                                                    // 鏈嶅姟鍗曠紪鍙�
+	ClientId             int               `gorm:"client_id" json:"clientId"`                                                                              // 瀹㈡埛id
+	ServiceContractId    int               `gorm:"service_contract_id" json:"serviceContractId"`                                                           // 鍚堝悓id
+	SalesDetailsId       int               `gorm:"sales_details_id" json:"salesDetailsId"`                                                                 // 閿�鍞鍗昳d
+	Subject              string            `gorm:"subject" json:"subject"`                                                                                 // 涓婚
+	ProductTypeName      string            `json:"productTypeName"`                                                                                        // 浜у搧鍒嗙被鍚嶇О
+	ProductName          string            `json:"productName"`                                                                                            // 浜у搧鍚嶇О
+	ServiceTypeId        int               `gorm:"service_type_id" json:"serviceTypeId"`                                                                   // 鏈嶅姟鏂瑰紡id
+	ServiceManId         int               `gorm:"service_man_id" json:"serviceManId"`                                                                     // 鏈嶅姟浜哄憳
+	ContactId            int               `gorm:"linkman_id" json:"contactId"`                                                                            // 鑱旂郴浜篿d
+	Address              string            `gorm:"address" json:"address"`                                                                                 // 涓婇棬鍦板潃
+	PriorityLevelId      int               `gorm:"priority_level_id" json:"priorityLevelId"`                                                               // 浼樺厛绾у埆id
+	AppointmentTime      string            `gorm:"appointment_time" json:"appointmentTime"`                                                                // 棰勭害涓婇棬鏃堕棿
+	SaleChanceId         int               `gorm:"sale_leads" json:"saleChanceId"`                                                                         // 閿�鍞満浼歩d
+	FaultTypeId          int               `gorm:"severity_id" json:"faultTypeId"`                                                                         // 鏁呴殰绫诲埆id
+	SeverityId           int               `gorm:"severity_id" json:"severity"`                                                                            // 涓ラ噸绋嬪害id
+	ServiceOrderStatusId int               `gorm:"column:service_order_status_id;type:int;not null;default:0;comment:鏈嶅姟鍗曠姸鎬乮d" json:"serviceOrderStatusId"` // 澶勭悊鐘舵��
+	ExpectTime           string            `gorm:"expect_time" json:"expectTime"`                                                                          // 甯屾湜澶勭悊鏃堕棿
+	RealTime             string            `gorm:"real_time" json:"realTime"`                                                                              // 瀹為檯澶勭悊鏃堕棿
+	CarFare              float64           `gorm:"car_fare" json:"carFare"`                                                                                // 浜ら�氳垂
+	ChargeAmount         float64           `gorm:"charge_amount" json:"chargeAmount"`                                                                      // 鏀惰垂閲戦
+	TimeSpentId          int               `gorm:"time_spent_id" json:"timeSpentId"`                                                                       // 鑺辫垂鏃堕棿
+	FaqId                int               `gorm:"problem_id" json:"faqId"`                                                                                // 甯歌闂id
+	ProblemDesc          string            `gorm:"problem_desc" json:"problemDesc"`                                                                        // 闂鎻忚堪
+	Solution             string            `gorm:"solution" json:"solution"`                                                                               // 瑙e喅鏂规硶
+	SolutionRemark       string            `gorm:"solution_remark" json:"solutionRemark"`                                                                  // 鍐呴儴澶囨敞
+	Remark               string            `gorm:"remark" json:"remark"`                                                                                   // 澶囨敞
+	CodeStandID          string            `json:"codeStandID"`                                                                                            //缂栫爜id
+	CodeRule             code.CodeStandard `json:"codeRule"`
 }
 
 type UpdateServiceOrder struct {
diff --git a/model/request/subOrder.go b/model/request/subOrder.go
index f077528..556f4e0 100644
--- a/model/request/subOrder.go
+++ b/model/request/subOrder.go
@@ -1,17 +1,22 @@
 package request
 
-import "aps_crm/model"
+import (
+	"aps_crm/model"
+	"aps_crm/proto/code"
+)
 
 type AddSubOrder struct {
 	SubOrder
 }
 
 type SubOrder struct {
-	ClientId      int             `json:"clientId"`
-	MasterOrderId int             `json:"masterOrderId"`
-	Number        string          `json:"number"`
-	MemberId      int             `json:"memberId"`
-	Product       []model.Product `json:"product"`
+	ClientId      int               `json:"clientId"`
+	MasterOrderId int               `json:"masterOrderId"`
+	Number        string            `json:"number"`
+	MemberId      int               `json:"memberId"`
+	Product       []model.Product   `json:"product"`
+	CodeStandID   string            `json:"codeStandID"` //缂栫爜id
+	CodeRule      code.CodeStandard `json:"codeRule"`
 }
 
 type UpdateSubOrder struct {
diff --git a/model/saleChance.go b/model/saleChance.go
index 99df3df..bc5ef40 100644
--- a/model/saleChance.go
+++ b/model/saleChance.go
@@ -46,6 +46,7 @@
 		Client                Client                 `json:"client" gorm:"foreignKey:ClientId;references:Id"`
 		CollectionProjections []CollectionProjection `json:"collection_projections" gorm:"foreignKey:SaleChanceId"`
 		SalesSources          SalesSources           `json:"sales_sources"`
+		CodeStandID           string                 `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		Address
 		gorm.Model `json:"-"`
 	}
@@ -189,3 +190,7 @@
 	slf.Orm = slf.Orm.Where("id in (?)", ids)
 	return slf
 }
+func (slf *SaleChanceSearch) UpdateByMap(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/model/salesDetails.go b/model/salesDetails.go
index ed81fab..fe13d5e 100644
--- a/model/salesDetails.go
+++ b/model/salesDetails.go
@@ -39,6 +39,7 @@
 		AmountInvoiced      decimal.Decimal   `gorm:"column:amount_invoiced;type:decimal(12,2);comment:宸插紑绁ㄩ噾棰�" json:"amountInvoiced"`       // 宸插紑绁ㄩ噾棰�
 		AmountUnInvoiced    decimal.Decimal   `gorm:"column:amount_not_invoiced;type:decimal(12,2);comment:鏈紑绁ㄩ噾棰�" json:"amountUnInvoiced"` // 鏈紑绁ㄩ噾棰�
 		AmountTotal         decimal.Decimal   `gorm:"column:amount_total;type:decimal(12,2);comment:浠风◣鍚堣" json:"amountTotal"`              // 浠风◣鍚堣
+		CodeStandID         string            `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		CrmModel
 	}
 
diff --git a/model/salesLeads.go b/model/salesLeads.go
index 75ff864..60b9017 100644
--- a/model/salesLeads.go
+++ b/model/salesLeads.go
@@ -24,6 +24,7 @@
 		Reason          string               `json:"reason" gorm:"column:reason;type:text;comment:澶辫触鍘熷洜"`
 		FollowRecord    []FollowRecord       `gorm:"foreignKey:SalesLeadsId"`
 		DetailAddress   string               `json:"detail_address" gorm:"column:detail_address;type:varchar(255);comment:璇︾粏鍦板潃"`
+		CodeStandID     string               `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		Address
 		gorm.Model `json:"-"`
 	}
diff --git a/model/salesRefund.go b/model/salesRefund.go
index c68a0e9..5218841 100644
--- a/model/salesRefund.go
+++ b/model/salesRefund.go
@@ -29,6 +29,7 @@
 		Reason        string                    `json:"reason" gorm:"column:reason;type:varchar(255);comment:閫�娆惧師鍥�"`
 		Products      []*Product                `json:"products" gorm:"many2many:salesRefund_product;"`
 		AmountTotal   decimal.Decimal           `gorm:"column:amount_total;type:decimal(12,2);comment:浠风◣鍚堣" json:"amountTotal"` // 浠风◣鍚堣
+		CodeStandID   string                    `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		CrmModel
 	}
 
@@ -205,3 +206,8 @@
 	slf.OrderBy = order
 	return slf
 }
+
+func (slf *SalesRefundSearch) UpdateByMap(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/model/salesReturn.go b/model/salesReturn.go
index e82a367..e8babad 100644
--- a/model/salesReturn.go
+++ b/model/salesReturn.go
@@ -31,6 +31,7 @@
 		AmountShouldRefund  decimal.Decimal                `gorm:"column:amount_should_refund;type:decimal(12,2);comment:搴旈��娆鹃噾棰�" json:"amountShouldRefund"` // 搴旈��娆鹃噾棰�
 		AmountHasRefund     decimal.Decimal                `gorm:"column:amount_has_refund;type:decimal(12,2);comment:宸查��娆鹃噾棰�" json:"amountHasRefund"`       // 宸查��娆鹃噾棰�
 		AmountTotal         decimal.Decimal                `gorm:"column:amount_total;type:decimal(12,2);comment:閫�璐т骇鍝佹�婚噾棰�" json:"-"`
+		CodeStandID         string                         `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		CrmModel
 	}
 
@@ -188,3 +189,8 @@
 	slf.Preload = preload
 	return slf
 }
+
+func (slf *SalesReturnSearch) UpdateByMap(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/model/serviceContract.go b/model/serviceContract.go
index d4b8744..34a6251 100644
--- a/model/serviceContract.go
+++ b/model/serviceContract.go
@@ -42,6 +42,7 @@
 		AmountUnInvoiced        decimal.Decimal       `gorm:"column:amount_not_invoiced;type:decimal(12,2);comment:鏈紑绁ㄩ噾棰�" json:"amountUnInvoiced"` // 鏈紑绁ㄩ噾棰�
 		AmountTotal             decimal.Decimal       `gorm:"column:amount_total;type:decimal(12,2);comment:浠风◣鍚堣" json:"amountTotal"`              // 浠风◣鍚堣
 		Products                []*Product            `json:"products" gorm:"many2many:service_contract_product;"`
+		CodeStandID             string                `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		CrmModel
 	}
 
diff --git a/model/serviceFollowup.go b/model/serviceFollowup.go
index fc3b09d..3f457a6 100644
--- a/model/serviceFollowup.go
+++ b/model/serviceFollowup.go
@@ -33,6 +33,7 @@
 		OldMember      User         `json:"oldMember" gorm:"foreignKey:OldMemberId"`
 		Remark         string       `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
 		File           string       `json:"file" gorm:"column:file;type:varchar(255);comment:闄勪欢"`
+		CodeStandID    string       `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		CrmModel
 	}
 
@@ -174,3 +175,8 @@
 	slf.Orm = slf.Orm.Where("id in (?)", ids)
 	return slf
 }
+
+func (slf *ServiceFollowupSearch) UpdateByMap(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/model/serviceOrder.go b/model/serviceOrder.go
index e5a5f6e..95cfbb0 100644
--- a/model/serviceOrder.go
+++ b/model/serviceOrder.go
@@ -54,6 +54,7 @@
 		Solution             string             `gorm:"column:solution;type:varchar(255);not null;default:'';comment:瑙e喅鏂规硶" json:"solution"`              // 瑙e喅鏂规硶
 		SolutionRemark       string             `gorm:"column:solution_remark;type:varchar(255);not null;default:'';comment:鍐呴儴澶囨敞" json:"solutionRemark"` // 鍐呴儴澶囨敞
 		Remark               string             `gorm:"column:remark;type:varchar(255);not null;default:'';comment:澶囨敞" json:"remark"`                    // 澶囨敞
+		CodeStandID          string             `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		CrmModel
 	}
 
@@ -235,3 +236,8 @@
 	err := db.Find(&records).Error
 	return records, total, err
 }
+
+func (slf *ServiceOrderSearch) UpdateByMap(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/model/subOrder.go b/model/subOrder.go
index d798b86..b7d5869 100644
--- a/model/subOrder.go
+++ b/model/subOrder.go
@@ -16,6 +16,7 @@
 		MasterOrder   MasterOrder `json:"masterOrder" gorm:"foreignKey:MasterOrderId"`
 		Number        string      `json:"number" gorm:"column:number;type:varchar(255);comment:閿�鍞瓙鍗曞彿"`
 		Products      []Product   `json:"products" gorm:"many2many:subOrder_product;"`
+		CodeStandID   string      `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:缂栫爜id"`
 		gorm.Model    `json:"-"`
 	}
 
@@ -139,3 +140,7 @@
 	slf.Orm = slf.Orm.Where("id in (?)", ids)
 	return slf
 }
+func (slf *SubOrderSearch) UpdateByMap(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/model/util.go b/model/util.go
index 9e738d9..8ac7156 100644
--- a/model/util.go
+++ b/model/util.go
@@ -2,8 +2,11 @@
 
 import (
 	"aps_crm/pkg/mysqlx"
+	"aps_crm/proto/code"
 	"fmt"
 	"gorm.io/gorm"
+	"strconv"
+	"time"
 )
 
 // WithTransaction 锛� var funcs []func(db *gorm.DB) error锛屾妸鐩稿叧鍑芥暟娣诲姞杩涘幓
@@ -26,3 +29,28 @@
 	err = tx.Commit().Error
 	return
 }
+
+func GetAutoCode(id int, codeStandard *code.CodeStandard) string {
+	autoCode := ""
+	var prefixValue string
+	if codeStandard.AutoRule.PrefixMethod == 2 { // 鏉ユ簮鍗曟嵁
+		prefixValue = ""
+	} else { // 鍥哄畾鍊�
+		prefixValue = codeStandard.AutoRule.PrefixValue
+	}
+	strMaxAutoIncr := strconv.Itoa(id)
+	count := int(codeStandard.AutoRule.AutoLength) - len(strMaxAutoIncr)
+	for i := 0; i < count; i++ {
+		strMaxAutoIncr = "0" + strMaxAutoIncr
+	}
+
+	var suffixValue string
+	if codeStandard.AutoRule.SuffixMethod == 2 { // 骞存湀鏃�+鑷闀�
+		suffixValue = fmt.Sprintf("%v%v", time.Now().Format("20060102"), strMaxAutoIncr)
+	} else { // 鑷闀�
+		suffixValue = strMaxAutoIncr
+	}
+
+	autoCode = prefixValue + suffixValue
+	return autoCode
+}
diff --git a/proto/code.proto b/proto/code.proto
new file mode 100644
index 0000000..e394b43
--- /dev/null
+++ b/proto/code.proto
@@ -0,0 +1,48 @@
+syntax = "proto3";
+
+option go_package = "./code";
+
+service codeService {
+  rpc GetCodeList(GetCodeListRequest) returns(GetCodeListResponse) {}
+}
+
+message CodeStandard {
+  string ID = 1;
+  string Name = 2;
+  string Type = 3;
+  int32  Method = 4;
+  string Status = 5;
+  repeated CodeRule List = 6;
+  CodeAuto AutoRule = 7;
+}
+
+message CodeRule {
+  string Name = 1;
+  int32 Length = 2;
+  string Desc = 3;
+}
+
+message CodeAuto {
+  int32 PrefixMethod = 1;
+  string PrefixValue = 2;
+  int32 SuffixMethod = 3;
+  int32 AutoLength = 4;
+  string Desc = 5;
+}
+
+
+
+message GetCodeListRequest{
+  int32 page = 1;
+  int32 pageSize = 2;
+  string CodeStandID = 3;
+  string Name = 4;
+  string Type = 5;
+}
+
+message GetCodeListResponse{
+  int32   Code = 1;
+  string  Msg = 2;
+  repeated CodeStandard List = 3;
+  int64 Total = 4;
+}
\ No newline at end of file
diff --git a/proto/code/code.pb.go b/proto/code/code.pb.go
new file mode 100644
index 0000000..adb2ca8
--- /dev/null
+++ b/proto/code/code.pb.go
@@ -0,0 +1,584 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.26.0
+// 	protoc        v4.24.0
+// source: code.proto
+
+package code
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type CodeStandard struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ID       string      `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
+	Name     string      `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"`
+	Type     string      `protobuf:"bytes,3,opt,name=Type,proto3" json:"Type,omitempty"`
+	Method   int32       `protobuf:"varint,4,opt,name=Method,proto3" json:"Method,omitempty"`
+	Status   string      `protobuf:"bytes,5,opt,name=Status,proto3" json:"Status,omitempty"`
+	List     []*CodeRule `protobuf:"bytes,6,rep,name=List,proto3" json:"List,omitempty"`
+	AutoRule *CodeAuto   `protobuf:"bytes,7,opt,name=AutoRule,proto3" json:"AutoRule,omitempty"`
+}
+
+func (x *CodeStandard) Reset() {
+	*x = CodeStandard{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_code_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CodeStandard) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CodeStandard) ProtoMessage() {}
+
+func (x *CodeStandard) ProtoReflect() protoreflect.Message {
+	mi := &file_code_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CodeStandard.ProtoReflect.Descriptor instead.
+func (*CodeStandard) Descriptor() ([]byte, []int) {
+	return file_code_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *CodeStandard) GetID() string {
+	if x != nil {
+		return x.ID
+	}
+	return ""
+}
+
+func (x *CodeStandard) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *CodeStandard) GetType() string {
+	if x != nil {
+		return x.Type
+	}
+	return ""
+}
+
+func (x *CodeStandard) GetMethod() int32 {
+	if x != nil {
+		return x.Method
+	}
+	return 0
+}
+
+func (x *CodeStandard) GetStatus() string {
+	if x != nil {
+		return x.Status
+	}
+	return ""
+}
+
+func (x *CodeStandard) GetList() []*CodeRule {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+func (x *CodeStandard) GetAutoRule() *CodeAuto {
+	if x != nil {
+		return x.AutoRule
+	}
+	return nil
+}
+
+type CodeRule struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name   string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
+	Length int32  `protobuf:"varint,2,opt,name=Length,proto3" json:"Length,omitempty"`
+	Desc   string `protobuf:"bytes,3,opt,name=Desc,proto3" json:"Desc,omitempty"`
+}
+
+func (x *CodeRule) Reset() {
+	*x = CodeRule{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_code_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CodeRule) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CodeRule) ProtoMessage() {}
+
+func (x *CodeRule) ProtoReflect() protoreflect.Message {
+	mi := &file_code_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CodeRule.ProtoReflect.Descriptor instead.
+func (*CodeRule) Descriptor() ([]byte, []int) {
+	return file_code_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *CodeRule) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *CodeRule) GetLength() int32 {
+	if x != nil {
+		return x.Length
+	}
+	return 0
+}
+
+func (x *CodeRule) GetDesc() string {
+	if x != nil {
+		return x.Desc
+	}
+	return ""
+}
+
+type CodeAuto struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	PrefixMethod int32  `protobuf:"varint,1,opt,name=PrefixMethod,proto3" json:"PrefixMethod,omitempty"`
+	PrefixValue  string `protobuf:"bytes,2,opt,name=PrefixValue,proto3" json:"PrefixValue,omitempty"`
+	SuffixMethod int32  `protobuf:"varint,3,opt,name=SuffixMethod,proto3" json:"SuffixMethod,omitempty"`
+	AutoLength   int32  `protobuf:"varint,4,opt,name=AutoLength,proto3" json:"AutoLength,omitempty"`
+	Desc         string `protobuf:"bytes,5,opt,name=Desc,proto3" json:"Desc,omitempty"`
+}
+
+func (x *CodeAuto) Reset() {
+	*x = CodeAuto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_code_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CodeAuto) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CodeAuto) ProtoMessage() {}
+
+func (x *CodeAuto) ProtoReflect() protoreflect.Message {
+	mi := &file_code_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CodeAuto.ProtoReflect.Descriptor instead.
+func (*CodeAuto) Descriptor() ([]byte, []int) {
+	return file_code_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *CodeAuto) GetPrefixMethod() int32 {
+	if x != nil {
+		return x.PrefixMethod
+	}
+	return 0
+}
+
+func (x *CodeAuto) GetPrefixValue() string {
+	if x != nil {
+		return x.PrefixValue
+	}
+	return ""
+}
+
+func (x *CodeAuto) GetSuffixMethod() int32 {
+	if x != nil {
+		return x.SuffixMethod
+	}
+	return 0
+}
+
+func (x *CodeAuto) GetAutoLength() int32 {
+	if x != nil {
+		return x.AutoLength
+	}
+	return 0
+}
+
+func (x *CodeAuto) GetDesc() string {
+	if x != nil {
+		return x.Desc
+	}
+	return ""
+}
+
+type GetCodeListRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Page        int32  `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"`
+	PageSize    int32  `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
+	CodeStandID string `protobuf:"bytes,3,opt,name=CodeStandID,proto3" json:"CodeStandID,omitempty"`
+	Name        string `protobuf:"bytes,4,opt,name=Name,proto3" json:"Name,omitempty"`
+	Type        string `protobuf:"bytes,5,opt,name=Type,proto3" json:"Type,omitempty"`
+}
+
+func (x *GetCodeListRequest) Reset() {
+	*x = GetCodeListRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_code_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetCodeListRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetCodeListRequest) ProtoMessage() {}
+
+func (x *GetCodeListRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_code_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetCodeListRequest.ProtoReflect.Descriptor instead.
+func (*GetCodeListRequest) Descriptor() ([]byte, []int) {
+	return file_code_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *GetCodeListRequest) GetPage() int32 {
+	if x != nil {
+		return x.Page
+	}
+	return 0
+}
+
+func (x *GetCodeListRequest) GetPageSize() int32 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *GetCodeListRequest) GetCodeStandID() string {
+	if x != nil {
+		return x.CodeStandID
+	}
+	return ""
+}
+
+func (x *GetCodeListRequest) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GetCodeListRequest) GetType() string {
+	if x != nil {
+		return x.Type
+	}
+	return ""
+}
+
+type GetCodeListResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Code  int32           `protobuf:"varint,1,opt,name=Code,proto3" json:"Code,omitempty"`
+	Msg   string          `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"`
+	List  []*CodeStandard `protobuf:"bytes,3,rep,name=List,proto3" json:"List,omitempty"`
+	Total int64           `protobuf:"varint,4,opt,name=Total,proto3" json:"Total,omitempty"`
+}
+
+func (x *GetCodeListResponse) Reset() {
+	*x = GetCodeListResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_code_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetCodeListResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetCodeListResponse) ProtoMessage() {}
+
+func (x *GetCodeListResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_code_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetCodeListResponse.ProtoReflect.Descriptor instead.
+func (*GetCodeListResponse) Descriptor() ([]byte, []int) {
+	return file_code_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GetCodeListResponse) GetCode() int32 {
+	if x != nil {
+		return x.Code
+	}
+	return 0
+}
+
+func (x *GetCodeListResponse) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+func (x *GetCodeListResponse) GetList() []*CodeStandard {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+func (x *GetCodeListResponse) GetTotal() int64 {
+	if x != nil {
+		return x.Total
+	}
+	return 0
+}
+
+var File_code_proto protoreflect.FileDescriptor
+
+var file_code_proto_rawDesc = []byte{
+	0x0a, 0x0a, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbc, 0x01, 0x0a,
+	0x0c, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a,
+	0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a,
+	0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d,
+	0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x16, 0x0a,
+	0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04,
+	0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x75, 0x6c, 0x65,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x75, 0x74,
+	0x6f, 0x52, 0x08, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x4a, 0x0a, 0x08, 0x43,
+	0x6f, 0x64, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4c,
+	0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x65, 0x6e,
+	0x67, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x65, 0x73, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x04, 0x44, 0x65, 0x73, 0x63, 0x22, 0xa8, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65,
+	0x41, 0x75, 0x74, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4d, 0x65,
+	0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x50, 0x72, 0x65, 0x66,
+	0x69, 0x78, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x66,
+	0x69, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x50,
+	0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x75,
+	0x66, 0x66, 0x69, 0x78, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x0c, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1e,
+	0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x12,
+	0x0a, 0x04, 0x44, 0x65, 0x73, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x65,
+	0x73, 0x63, 0x22, 0x8e, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a,
+	0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x64,
+	0x65, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
+	0x43, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54,
+	0x79, 0x70, 0x65, 0x22, 0x74, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f,
+	0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10,
+	0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67,
+	0x12, 0x21, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d,
+	0x2e, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x52, 0x04, 0x4c,
+	0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x32, 0x49, 0x0a, 0x0b, 0x63, 0x6f, 0x64,
+	0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43,
+	0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x13, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64,
+	0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x47,
+	0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x00, 0x42, 0x08, 0x5a, 0x06, 0x2e, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_code_proto_rawDescOnce sync.Once
+	file_code_proto_rawDescData = file_code_proto_rawDesc
+)
+
+func file_code_proto_rawDescGZIP() []byte {
+	file_code_proto_rawDescOnce.Do(func() {
+		file_code_proto_rawDescData = protoimpl.X.CompressGZIP(file_code_proto_rawDescData)
+	})
+	return file_code_proto_rawDescData
+}
+
+var file_code_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
+var file_code_proto_goTypes = []interface{}{
+	(*CodeStandard)(nil),        // 0: CodeStandard
+	(*CodeRule)(nil),            // 1: CodeRule
+	(*CodeAuto)(nil),            // 2: CodeAuto
+	(*GetCodeListRequest)(nil),  // 3: GetCodeListRequest
+	(*GetCodeListResponse)(nil), // 4: GetCodeListResponse
+}
+var file_code_proto_depIdxs = []int32{
+	1, // 0: CodeStandard.List:type_name -> CodeRule
+	2, // 1: CodeStandard.AutoRule:type_name -> CodeAuto
+	0, // 2: GetCodeListResponse.List:type_name -> CodeStandard
+	3, // 3: codeService.GetCodeList:input_type -> GetCodeListRequest
+	4, // 4: codeService.GetCodeList:output_type -> GetCodeListResponse
+	4, // [4:5] is the sub-list for method output_type
+	3, // [3:4] is the sub-list for method input_type
+	3, // [3:3] is the sub-list for extension type_name
+	3, // [3:3] is the sub-list for extension extendee
+	0, // [0:3] is the sub-list for field type_name
+}
+
+func init() { file_code_proto_init() }
+func file_code_proto_init() {
+	if File_code_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_code_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CodeStandard); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_code_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CodeRule); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_code_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CodeAuto); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_code_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetCodeListRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_code_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetCodeListResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_code_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   5,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_code_proto_goTypes,
+		DependencyIndexes: file_code_proto_depIdxs,
+		MessageInfos:      file_code_proto_msgTypes,
+	}.Build()
+	File_code_proto = out.File
+	file_code_proto_rawDesc = nil
+	file_code_proto_goTypes = nil
+	file_code_proto_depIdxs = nil
+}
diff --git a/proto/code/code_grpc.pb.go b/proto/code/code_grpc.pb.go
new file mode 100644
index 0000000..eafdff8
--- /dev/null
+++ b/proto/code/code_grpc.pb.go
@@ -0,0 +1,101 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package code
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// CodeServiceClient is the client API for CodeService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type CodeServiceClient interface {
+	GetCodeList(ctx context.Context, in *GetCodeListRequest, opts ...grpc.CallOption) (*GetCodeListResponse, error)
+}
+
+type codeServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCodeServiceClient(cc grpc.ClientConnInterface) CodeServiceClient {
+	return &codeServiceClient{cc}
+}
+
+func (c *codeServiceClient) GetCodeList(ctx context.Context, in *GetCodeListRequest, opts ...grpc.CallOption) (*GetCodeListResponse, error) {
+	out := new(GetCodeListResponse)
+	err := c.cc.Invoke(ctx, "/codeService/GetCodeList", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CodeServiceServer is the server API for CodeService service.
+// All implementations must embed UnimplementedCodeServiceServer
+// for forward compatibility
+type CodeServiceServer interface {
+	GetCodeList(context.Context, *GetCodeListRequest) (*GetCodeListResponse, error)
+	mustEmbedUnimplementedCodeServiceServer()
+}
+
+// UnimplementedCodeServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedCodeServiceServer struct {
+}
+
+func (UnimplementedCodeServiceServer) GetCodeList(context.Context, *GetCodeListRequest) (*GetCodeListResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCodeList not implemented")
+}
+func (UnimplementedCodeServiceServer) mustEmbedUnimplementedCodeServiceServer() {}
+
+// UnsafeCodeServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to CodeServiceServer will
+// result in compilation errors.
+type UnsafeCodeServiceServer interface {
+	mustEmbedUnimplementedCodeServiceServer()
+}
+
+func RegisterCodeServiceServer(s grpc.ServiceRegistrar, srv CodeServiceServer) {
+	s.RegisterService(&CodeService_ServiceDesc, srv)
+}
+
+func _CodeService_GetCodeList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCodeListRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CodeServiceServer).GetCodeList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/codeService/GetCodeList",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CodeServiceServer).GetCodeList(ctx, req.(*GetCodeListRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// CodeService_ServiceDesc is the grpc.ServiceDesc for CodeService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var CodeService_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "codeService",
+	HandlerType: (*CodeServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCodeList",
+			Handler:    _CodeService_GetCodeList_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "code.proto",
+}
diff --git a/router/index.go b/router/index.go
index ea98b63..2cbe48e 100644
--- a/router/index.go
+++ b/router/index.go
@@ -1,6 +1,7 @@
 package router
 
 import (
+	v1 "aps_crm/api/v1"
 	"aps_crm/conf"
 	_ "aps_crm/docs"
 	"aps_crm/middleware"
@@ -183,5 +184,10 @@
 		routerGroup.InitCollectionProjectionRouter(PrivateGroup)
 		routerGroup.InitContactInformationRouter(PrivateGroup)
 	}
+	codeGroup := PrivateGroup.Group("code")
+	codeApi := v1.CodeApi{}
+	{
+		codeGroup.GET("getCodeList", codeApi.GetCodeList) //鑾峰彇缂栫爜鍒楄〃
+	}
 	return Router
 }

--
Gitblit v1.8.0