From f2c7c7aa3218cd5ef688975ea9b5a0f3a6e5e74f Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期四, 10 八月 2023 16:38:41 +0800
Subject: [PATCH] temp

---
 api/v1/index.go                       |    2 
 api/v1/collectionProjection.go        |   40 +++
 pkg/ecode/code.go                     |    5 
 docs/swagger.yaml                     |   54 ++++
 model/request/collectionProjection.go |   11 +
 docs/docs.go                          |   79 +++++++
 docs/swagger.json                     |   79 +++++++
 model/collectionProjection.go         |   85 +++++++
 service/index.go                      |    1 
 service/collectionProjection.go       |   17 +
 router/colletionProjection.go         |   19 +
 model/index.go                        |  216 +++++++++---------
 router/index.go                       |    3 
 13 files changed, 499 insertions(+), 112 deletions(-)

diff --git a/api/v1/collectionProjection.go b/api/v1/collectionProjection.go
new file mode 100644
index 0000000..7556283
--- /dev/null
+++ b/api/v1/collectionProjection.go
@@ -0,0 +1,40 @@
+package v1
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"github.com/gin-gonic/gin"
+)
+
+type CollectionProjectionApi struct{}
+
+// Add
+//
+//	@Tags		CollectionProjection
+//	@Summary	娣诲姞鏀舵棰勬祴
+//	@Produce	application/json
+//	@Param		object	body		request.AddCollectionProjection	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/collectionProjection/add [post]
+func (cp *CollectionProjectionApi) Add(c *gin.Context) {
+	var params request.AddCollectionProjection
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	tmp := new(model.CollectionProjection)
+	tmp.EstimatedCollectionAmount = params.CollectionProjection.EstimatedCollectionAmount
+	tmp.EstimatedCollectionDate = params.CollectionProjection.EstimatedCollectionTime
+	tmp.SaleChanceId = params.CollectionProjection.SaleChanceId
+
+	errCode := collectionProjectionService.AddCollectionProjection(tmp)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
diff --git a/api/v1/index.go b/api/v1/index.go
index 00c8f70..b1d7c1e 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -65,6 +65,7 @@
 	VettingApi
 	SatisfactionApi
 	AssignApi
+	CollectionProjectionApi
 }
 
 var ApiGroup = new(Group)
@@ -130,4 +131,5 @@
 	quotationStatusService       = service.ServiceGroup.QuotationStatusService
 	currencyService              = service.ServiceGroup.CurrencyService
 	assignService                = service.ServiceGroup.AssignService
+	collectionProjectionService  = service.ServiceGroup.CollectionProjectionService
 )
diff --git a/docs/docs.go b/docs/docs.go
index e39c3f4..aa46c54 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1242,6 +1242,36 @@
                 }
             }
         },
+        "/api/collectionProjection/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CollectionProjection"
+                ],
+                "summary": "娣诲姞鏀舵棰勬祴",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddCollectionProjection"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/contact/add": {
             "post": {
                 "produces": [
@@ -10457,6 +10487,12 @@
                     "description": "閿�鍞礋璐d汉id",
                     "type": "integer"
                 },
+                "products": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
+                },
                 "sourceId": {
                     "description": "婧愬崟id",
                     "type": "integer"
@@ -10706,7 +10742,7 @@
             "type": "object",
             "properties": {
                 "amount": {
-                    "type": "integer"
+                    "type": "number"
                 },
                 "desc": {
                     "type": "string"
@@ -11380,6 +11416,13 @@
                 "amountReceived": {
                     "description": "宸叉敹閲戦",
                     "type": "number"
+                },
+                "amountUnInvoiced": {
+                    "description": "鏈紑绁ㄩ噾棰�",
+                    "type": "number"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
                 },
                 "clientId": {
                     "type": "integer"
@@ -12060,6 +12103,23 @@
                 }
             }
         },
+        "request.AddCollectionProjection": {
+            "type": "object",
+            "properties": {
+                "estimated_collection_amount": {
+                    "description": "棰勮鏀舵閲戦",
+                    "type": "number"
+                },
+                "estimated_collection_time": {
+                    "description": "棰勮鏀舵鏃堕棿",
+                    "type": "string"
+                },
+                "sale_chance_id": {
+                    "description": "閿�鍞満浼歩d",
+                    "type": "integer"
+                }
+            }
+        },
         "request.AddContact": {
             "type": "object",
             "properties": {
@@ -12311,6 +12371,13 @@
                 "principalId": {
                     "description": "閿�鍞礋璐d汉id",
                     "type": "integer"
+                },
+                "products": {
+                    "description": "鍙戠エ瀵瑰簲浜у搧锛屼粠鐩稿簲婧愬崟閲岃幏鍙�",
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
                 },
                 "sourceId": {
                     "description": "婧愬崟id",
@@ -14907,6 +14974,9 @@
         },
         "request.UpdateInvoice": {
             "type": "object",
+            "required": [
+                "id"
+            ],
             "properties": {
                 "clientId": {
                     "description": "瀹㈡埛id",
@@ -14943,6 +15013,13 @@
                     "description": "閿�鍞礋璐d汉id",
                     "type": "integer"
                 },
+                "products": {
+                    "description": "鍙戠エ瀵瑰簲浜у搧锛屼粠鐩稿簲婧愬崟閲岃幏鍙�",
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
+                },
                 "sourceId": {
                     "description": "婧愬崟id",
                     "type": "integer"
diff --git a/docs/swagger.json b/docs/swagger.json
index 97e2fca..a976d71 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -1230,6 +1230,36 @@
                 }
             }
         },
+        "/api/collectionProjection/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CollectionProjection"
+                ],
+                "summary": "娣诲姞鏀舵棰勬祴",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddCollectionProjection"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/contact/add": {
             "post": {
                 "produces": [
@@ -10445,6 +10475,12 @@
                     "description": "閿�鍞礋璐d汉id",
                     "type": "integer"
                 },
+                "products": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
+                },
                 "sourceId": {
                     "description": "婧愬崟id",
                     "type": "integer"
@@ -10694,7 +10730,7 @@
             "type": "object",
             "properties": {
                 "amount": {
-                    "type": "integer"
+                    "type": "number"
                 },
                 "desc": {
                     "type": "string"
@@ -11368,6 +11404,13 @@
                 "amountReceived": {
                     "description": "宸叉敹閲戦",
                     "type": "number"
+                },
+                "amountUnInvoiced": {
+                    "description": "鏈紑绁ㄩ噾棰�",
+                    "type": "number"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
                 },
                 "clientId": {
                     "type": "integer"
@@ -12048,6 +12091,23 @@
                 }
             }
         },
+        "request.AddCollectionProjection": {
+            "type": "object",
+            "properties": {
+                "estimated_collection_amount": {
+                    "description": "棰勮鏀舵閲戦",
+                    "type": "number"
+                },
+                "estimated_collection_time": {
+                    "description": "棰勮鏀舵鏃堕棿",
+                    "type": "string"
+                },
+                "sale_chance_id": {
+                    "description": "閿�鍞満浼歩d",
+                    "type": "integer"
+                }
+            }
+        },
         "request.AddContact": {
             "type": "object",
             "properties": {
@@ -12299,6 +12359,13 @@
                 "principalId": {
                     "description": "閿�鍞礋璐d汉id",
                     "type": "integer"
+                },
+                "products": {
+                    "description": "鍙戠エ瀵瑰簲浜у搧锛屼粠鐩稿簲婧愬崟閲岃幏鍙�",
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
                 },
                 "sourceId": {
                     "description": "婧愬崟id",
@@ -14895,6 +14962,9 @@
         },
         "request.UpdateInvoice": {
             "type": "object",
+            "required": [
+                "id"
+            ],
             "properties": {
                 "clientId": {
                     "description": "瀹㈡埛id",
@@ -14931,6 +15001,13 @@
                     "description": "閿�鍞礋璐d汉id",
                     "type": "integer"
                 },
+                "products": {
+                    "description": "鍙戠エ瀵瑰簲浜у搧锛屼粠鐩稿簲婧愬崟閲岃幏鍙�",
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
+                },
                 "sourceId": {
                     "description": "婧愬崟id",
                     "type": "integer"
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 058fde4..fb0cc54 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -670,6 +670,10 @@
       principalId:
         description: 閿�鍞礋璐d汉id
         type: integer
+      products:
+        items:
+          $ref: '#/definitions/model.Product'
+        type: array
       sourceId:
         description: 婧愬崟id
         type: integer
@@ -832,7 +836,7 @@
   model.Product:
     properties:
       amount:
-        type: integer
+        type: number
       desc:
         type: string
       id:
@@ -1281,6 +1285,11 @@
       amountReceived:
         description: 宸叉敹閲戦
         type: number
+      amountUnInvoiced:
+        description: 鏈紑绁ㄩ噾棰�
+        type: number
+      client:
+        $ref: '#/definitions/model.Client'
       clientId:
         type: integer
       contactId:
@@ -1744,6 +1753,18 @@
     required:
     - name
     type: object
+  request.AddCollectionProjection:
+    properties:
+      estimated_collection_amount:
+        description: 棰勮鏀舵閲戦
+        type: number
+      estimated_collection_time:
+        description: 棰勮鏀舵鏃堕棿
+        type: string
+      sale_chance_id:
+        description: 閿�鍞満浼歩d
+        type: integer
+    type: object
   request.AddContact:
     properties:
       birthday:
@@ -1916,6 +1937,11 @@
       principalId:
         description: 閿�鍞礋璐d汉id
         type: integer
+      products:
+        description: 鍙戠エ瀵瑰簲浜у搧锛屼粠鐩稿簲婧愬崟閲岃幏鍙�
+        items:
+          $ref: '#/definitions/model.Product'
+        type: array
       sourceId:
         description: 婧愬崟id
         type: integer
@@ -3711,6 +3737,11 @@
       principalId:
         description: 閿�鍞礋璐d汉id
         type: integer
+      products:
+        description: 鍙戠エ瀵瑰簲浜у搧锛屼粠鐩稿簲婧愬崟閲岃幏鍙�
+        items:
+          $ref: '#/definitions/model.Product'
+        type: array
       sourceId:
         description: 婧愬崟id
         type: integer
@@ -3723,6 +3754,8 @@
       taxpayerIdNumber:
         description: 绾崇◣璇嗗埆鍙�
         type: string
+    required:
+    - id
     type: object
   request.UpdateInvoiceStatus:
     properties:
@@ -6067,6 +6100,25 @@
       summary: 鏇存柊瀹㈡埛绫诲瀷
       tags:
       - ClientType
+  /api/collectionProjection/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddCollectionProjection'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞鏀舵棰勬祴
+      tags:
+      - CollectionProjection
   /api/contact/add:
     post:
       parameters:
diff --git a/model/collectionProjection.go b/model/collectionProjection.go
new file mode 100644
index 0000000..c289864
--- /dev/null
+++ b/model/collectionProjection.go
@@ -0,0 +1,85 @@
+package model
+
+import (
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+)
+
+type (
+	CollectionProjection struct {
+		Id                        int     `json:"id" gorm:"column:id;primaryKey;autoIncrement;not null"`
+		SaleChanceId              int     `json:"sale_chance_id" gorm:"column:sale_chance_id;type:int(11);comment:閿�鍞満浼歩d"`
+		Creator                   int     `json:"creator" gorm:"column:creator;type:int(11);comment:鍒涘缓浜�"`
+		Modifier                  int     `json:"modifier" gorm:"column:modifier;type:int(11);comment:淇敼浜�"`
+		EstimatedCollectionDate   string  `json:"estimated_collection_date" gorm:"column:estimated_collection_date;type:datetime;comment:棰勮鏀舵鏃ユ湡"`
+		EstimatedCollectionAmount float64 `json:"estimated_collection_amount" gorm:"column:estimated_collection_amount;type:decimal(10,2);comment:棰勮鏀舵閲戦"`
+		gorm.Model
+	}
+
+	CollectionProjectionSearch struct {
+		CollectionProjection
+
+		Orm      *gorm.DB
+		OrderBy  string
+		PageNum  int
+		PageSize int
+	}
+)
+
+func (CollectionProjection) TableName() string {
+	return "collection_projection"
+}
+
+func NewCollectionProjectionSearch() *CollectionProjectionSearch {
+	return &CollectionProjectionSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *CollectionProjectionSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&CollectionProjection{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+
+	return db
+}
+
+func (slf *CollectionProjectionSearch) Create(record *CollectionProjection) (err error) {
+	var db = slf.build()
+	err = db.Create(record).Error
+	return
+}
+
+func (slf *CollectionProjectionSearch) Update(record *CollectionProjection) (err error) {
+	var db = slf.build()
+	err = db.Updates(record).Error
+	return
+}
+
+func (slf *CollectionProjectionSearch) Delete() (err error) {
+	var db = slf.build()
+	err = db.Delete(&CollectionProjection{}).Error
+	return
+}
+
+func (slf *CollectionProjectionSearch) Find() (record CollectionProjection, err error) {
+	var db = slf.build()
+	err = db.First(&record).Error
+	return
+}
+
+func (slf *CollectionProjectionSearch) SetID(id int) *CollectionProjectionSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *CollectionProjectionSearch) SetSaleChanceId(saleChanceId int) *CollectionProjectionSearch {
+	slf.SaleChanceId = saleChanceId
+	return slf
+}
+
+func (slf *CollectionProjectionSearch) SetPage(page, size int) *CollectionProjectionSearch {
+	slf.PageNum, slf.PageSize = page, size
+	return slf
+}
diff --git a/model/index.go b/model/index.go
index 04856fa..7a90d35 100644
--- a/model/index.go
+++ b/model/index.go
@@ -1,108 +1,108 @@
-package model
-
-import (
-	"aps_crm/conf"
-	"aps_crm/pkg/logx"
-	"aps_crm/pkg/mysqlx"
-	"aps_crm/pkg/safe"
-	"gorm.io/gorm/schema"
-)
-
-func Init() error {
-	if err := mysqlx.Init(&conf.Conf.Mysql, logx.GetLogger()); err != nil {
-		return err
-	}
-
-	if err := RegisterTables(); err != nil {
-		return err
-	}
-	safe.Go(func() {
-		InsertDefaultData()
-	})
-	return nil
-}
-
-func RegisterTables() error {
-	db := mysqlx.GetDB()
-	err := db.AutoMigrate(
-		User{},
-		Menu{},
-		JwtBlacklist{},
-		Country{},
-		Province{},
-		City{},
-		Client{},
-		ClientLevel{},
-		ClientOrigin{},
-		ClientStatus{},
-		ClientType{},
-		Contact{},
-		EnterpriseNature{},
-		EnterpriseScale{},
-		FollowRecord{},
-		Industry{},
-		RegisteredCapital{},
-		SaleChance{},
-		SalesLeads{},
-		SalesSources{},
-		SaleStage{},
-		SaleType{},
-		RegularCustomers{},
-		Possibility{},
-		Status{},
-		Quotation{},
-		MasterOrder{},
-		SubOrder{},
-		Product{},
-		SalesDetails{},
-		SalesReturn{},
-		SalesRefund{},
-		Contract{},
-		Plan{},
-		ServiceContract{},
-		OrderManage{},
-		ServiceFollowup{},
-		CustomerServiceSheet{},
-		ServiceFeeManage{},
-		Authority{},
-		Api{},
-		Department{},
-		Satisfaction{},
-		TimelyRate{},
-		SolveRate{},
-		IsVisit{},
-		IsVisit{},
-		ReportSource{},
-		OrderType{},
-		ServiceContractStatus{},
-		ServiceContractType{},
-		RefundMethod{},
-		IsInvoice{},
-		AccountId{},
-		SalesReturnStatus{},
-		Repository{},
-		QuotationStatus{},
-		Currency{},
-	)
-	return err
-}
-
-type InitDefaultData interface {
-	InitDefaultData() error
-}
-
-func InsertDefaultData() {
-	models := []interface{}{
-		NewServiceTypeSearch(),
-		NewPriorityLevelSearch(),
-		NewSeveritySearch(),
-		NewTimeSpentSearch(),
-	}
-	for _, model := range models {
-		if id, ok := model.(InitDefaultData); ok {
-			if err := id.InitDefaultData(); err != nil {
-				logx.Errorf("InitDefaultData for table: %v, err :%v", model.(schema.Tabler).TableName(), err.Error())
-			}
-		}
-	}
-}
+package model
+
+import (
+	"aps_crm/conf"
+	"aps_crm/pkg/logx"
+	"aps_crm/pkg/mysqlx"
+	"aps_crm/pkg/safe"
+	"gorm.io/gorm/schema"
+)
+
+func Init() error {
+	if err := mysqlx.Init(&conf.Conf.Mysql, logx.GetLogger()); err != nil {
+		return err
+	}
+
+	if err := RegisterTables(); err != nil {
+		return err
+	}
+	safe.Go(func() {
+		InsertDefaultData()
+	})
+	return nil
+}
+
+func RegisterTables() error {
+	db := mysqlx.GetDB()
+	err := db.AutoMigrate(
+		User{},
+		Menu{},
+		JwtBlacklist{},
+		Country{},
+		Province{},
+		City{},
+		Client{},
+		ClientLevel{},
+		ClientOrigin{},
+		ClientStatus{},
+		ClientType{},
+		Contact{},
+		EnterpriseNature{},
+		EnterpriseScale{},
+		FollowRecord{},
+		Industry{},
+		RegisteredCapital{},
+		SaleChance{},
+		SalesLeads{},
+		SalesSources{},
+		SaleStage{},
+		SaleType{},
+		RegularCustomers{},
+		Possibility{},
+		Status{},
+		Quotation{},
+		MasterOrder{},
+		SubOrder{},
+		Product{},
+		SalesDetails{},
+		SalesReturn{},
+		SalesRefund{},
+		Contract{},
+		Plan{},
+		ServiceContract{},
+		OrderManage{},
+		ServiceFollowup{},
+		CustomerServiceSheet{},
+		ServiceFeeManage{},
+		Authority{},
+		Api{},
+		Department{},
+		Satisfaction{},
+		TimelyRate{},
+		SolveRate{},
+		IsVisit{},
+		IsVisit{},
+		ReportSource{},
+		OrderType{},
+		ServiceContractStatus{},
+		ServiceContractType{},
+		RefundMethod{},
+		IsInvoice{},
+		AccountId{},
+		SalesReturnStatus{},
+		Repository{},
+		QuotationStatus{},
+		Currency{},
+	)
+	return err
+}
+
+type InitDefaultData interface {
+	InitDefaultData() error
+}
+
+func InsertDefaultData() {
+	models := []interface{}{
+		NewServiceTypeSearch(),
+		NewPriorityLevelSearch(),
+		NewSeveritySearch(),
+		NewTimeSpentSearch(),
+	}
+	for _, model := range models {
+		if id, ok := model.(InitDefaultData); ok {
+			if err := id.InitDefaultData(); err != nil {
+				logx.Errorf("InitDefaultData for table: %v, err :%v", model.(schema.Tabler).TableName(), err.Error())
+			}
+		}
+	}
+}
diff --git a/model/request/collectionProjection.go b/model/request/collectionProjection.go
new file mode 100644
index 0000000..e5f1202
--- /dev/null
+++ b/model/request/collectionProjection.go
@@ -0,0 +1,11 @@
+package request
+
+type AddCollectionProjection struct {
+	CollectionProjection
+}
+
+type CollectionProjection struct {
+	EstimatedCollectionAmount float64 `json:"estimated_collection_amount"` // 棰勮鏀舵閲戦
+	EstimatedCollectionTime   string  `json:"estimated_collection_time"`   // 棰勮鏀舵鏃堕棿
+	SaleChanceId              int     `json:"sale_chance_id"`              // 閿�鍞満浼歩d
+}
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index 6a3d1a2..9701a5a 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -393,4 +393,9 @@
 	AssignWrongId        = 5700003 // 鍒嗛厤澶辫触锛屽垎閰嶅璞′负绌�
 	AssignWrongModelType = 5700004 // 鍒嗛厤澶辫触锛屽垎閰嶅璞$被鍨嬩负绌�
 
+	CollectionProjectionExist     = 5800001 // 鏀舵棰勬祴宸插瓨鍦�
+	CollectionProjectionNotExist  = 5800002 // 鏀舵棰勬祴涓嶅瓨鍦�
+	CollectionProjectionListErr   = 5800003 // 鑾峰彇鏀舵棰勬祴鍒楄〃澶辫触
+	CollectionProjectionSetErr    = 5800004 // 璁剧疆鏀舵棰勬祴澶辫触
+	CollectionProjectionUpdateErr = 5800005 // 鏇存柊鏀舵棰勬祴澶辫触
 )
diff --git a/router/colletionProjection.go b/router/colletionProjection.go
new file mode 100644
index 0000000..80e463e
--- /dev/null
+++ b/router/colletionProjection.go
@@ -0,0 +1,19 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type CollectionProjectionRouter struct{}
+
+func (c *CollectionProjectionRouter) InitCollectionProjectionRouter(router *gin.RouterGroup) {
+	collectionProjectionRouter := router.Group("collectionProjection")
+	collectionProjectionApi := v1.ApiGroup.CollectionProjectionApi
+	{
+		collectionProjectionRouter.POST("add", collectionProjectionApi.Add) // 娣诲姞鏀舵棰勬祴
+		//collectionProjectionRouter.DELETE("delete", collectionProjectionApi.Delete)     // 鍒犻櫎鏀舵棰勬祴
+		//collectionProjectionRouter.PUT("update", collectionProjectionApi.Update)        // 鏇存柊鏀舵棰勬祴
+		//collectionProjectionRouter.POST("list", collectionProjectionApi.List)            // 鑾峰彇鏀舵棰勬祴鍒楄〃
+	}
+}
diff --git a/router/index.go b/router/index.go
index 1b0ecd3..bc3afe4 100644
--- a/router/index.go
+++ b/router/index.go
@@ -70,6 +70,7 @@
 	DepartmentRouter
 	SatisfactionRouter
 	AssignRouter
+	CollectionProjectionRouter
 }
 
 func InitRouter() *gin.Engine {
@@ -176,7 +177,7 @@
 		InitInvoiceTypeRouter(PrivateGroup)
 		InitCourierCompanyRouter(PrivateGroup)
 		InitProductRouter(PrivateGroup)
-
+		InitServiceCollectionPlanRouter(PrivateGroup)
 	}
 	return Router
 }
diff --git a/service/collectionProjection.go b/service/collectionProjection.go
new file mode 100644
index 0000000..b86d98b
--- /dev/null
+++ b/service/collectionProjection.go
@@ -0,0 +1,17 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/pkg/ecode"
+)
+
+type CollectionProjectionService struct{}
+
+func (CollectionProjectionService) AddCollectionProjection(collectionProjection *model.CollectionProjection) int {
+	err := model.NewCollectionProjectionSearch().Create(collectionProjection)
+	if err != nil {
+		return ecode.CollectionProjectionExist
+	}
+
+	return ecode.OK
+}
diff --git a/service/index.go b/service/index.go
index ae1c0c6..e76998e 100644
--- a/service/index.go
+++ b/service/index.go
@@ -61,6 +61,7 @@
 	QuotationStatusService
 	CurrencyService
 	AssignService
+	CollectionProjectionService
 }
 
 var ServiceGroup = new(Group)

--
Gitblit v1.8.0