From 3c921c53c2b4dcd617a4ec88bd2a78fe69f2b600 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期四, 10 八月 2023 19:34:33 +0800
Subject: [PATCH] temp

---
 model/collectionProjection.go         |   17 +
 service/collectionProjection.go       |   28 +++
 model/saleChance.go                   |   71 ++++---
 router/colletionProjection.go         |    8 
 api/v1/collectionProjection.go        |  102 +++++++++++
 model/index.go                        |    1 
 router/index.go                       |    2 
 docs/swagger.yaml                     |   69 +++++++
 model/request/collectionProjection.go |   11 +
 docs/docs.go                          |  107 +++++++++++
 docs/swagger.json                     |  107 +++++++++++
 model/response/response.go            |    5 
 12 files changed, 481 insertions(+), 47 deletions(-)

diff --git a/api/v1/collectionProjection.go b/api/v1/collectionProjection.go
index 7556283..49fb8a1 100644
--- a/api/v1/collectionProjection.go
+++ b/api/v1/collectionProjection.go
@@ -3,9 +3,11 @@
 import (
 	"aps_crm/model"
 	"aps_crm/model/request"
+	"aps_crm/model/response"
 	"aps_crm/pkg/contextx"
 	"aps_crm/pkg/ecode"
 	"github.com/gin-gonic/gin"
+	"strconv"
 )
 
 type CollectionProjectionApi struct{}
@@ -27,8 +29,14 @@
 
 	tmp := new(model.CollectionProjection)
 	tmp.EstimatedCollectionAmount = params.CollectionProjection.EstimatedCollectionAmount
-	tmp.EstimatedCollectionDate = params.CollectionProjection.EstimatedCollectionTime
-	tmp.SaleChanceId = params.CollectionProjection.SaleChanceId
+
+	if params.EstimatedCollectionTime == "" {
+		tmp.EstimatedCollectionDate = nil
+	} else {
+		tmp.EstimatedCollectionDate = &params.CollectionProjection.EstimatedCollectionTime
+	}
+
+	tmp.SaleChanceId = params.SaleChanceId
 
 	errCode := collectionProjectionService.AddCollectionProjection(tmp)
 	if errCode != ecode.OK {
@@ -38,3 +46,93 @@
 
 	ctx.Ok()
 }
+
+// Delete
+//
+//	@Tags		CollectionProjection
+//	@Summary	鍒犻櫎鏀舵棰勬祴
+//	@Produce	application/json
+//	@Param		id	path		int	true	"鏌ヨ鍙傛暟"
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/collectionProjection/delete/{id} [delete]
+func (cp *CollectionProjectionApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, err := strconv.Atoi(c.Param("id"))
+	if err != nil {
+		ctx.Fail(ecode.InvalidParams)
+		return
+	}
+
+	errCode := collectionProjectionService.DeleteCollectionProjection(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+//
+//	@Tags		CollectionProjection
+//	@Summary	鏇存柊鏀舵棰勬祴
+//	@Produce	application/json
+//	@Param		object	body		request.UpdateCollectionProjection	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/collectionProjection/update [put]
+func (cp *CollectionProjectionApi) Update(c *gin.Context) {
+	var params request.UpdateCollectionProjection
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	tmp := new(model.CollectionProjection)
+	tmp.EstimatedCollectionAmount = params.CollectionProjection.EstimatedCollectionAmount
+	tmp.Id = params.Id
+
+	if params.EstimatedCollectionTime == "" {
+		tmp.EstimatedCollectionDate = nil
+	} else {
+		tmp.EstimatedCollectionDate = &params.CollectionProjection.EstimatedCollectionTime
+	}
+
+	errCode := collectionProjectionService.UpdateCollectionProjection(tmp)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+//
+//	@Tags		CollectionProjection
+//	@Summary	鑾峰彇鏀舵棰勬祴鍒楄〃
+//	@Produce	application/json
+//	@Param		object	query		request.GetCollectionProjectionList	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/collectionProjection/list [post]
+func (cp *CollectionProjectionApi) List(c *gin.Context) {
+	var params request.GetCollectionProjectionList
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	total, errCode, list := collectionProjectionService.GetCollectionProjectionList(params.Page, params.PageSize)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.CollectionProjectionListResponse{
+		List:  list,
+		Count: int(total),
+	})
+}
diff --git a/docs/docs.go b/docs/docs.go
index c23e327..b034d29 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1272,6 +1272,97 @@
                 }
             }
         },
+        "/api/collectionProjection/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CollectionProjection"
+                ],
+                "summary": "鍒犻櫎鏀舵棰勬祴",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/collectionProjection/list": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CollectionProjection"
+                ],
+                "summary": "鑾峰彇鏀舵棰勬祴鍒楄〃",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/collectionProjection/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CollectionProjection"
+                ],
+                "summary": "鏇存柊鏀舵棰勬祴",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateCollectionProjection"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/contact/add": {
             "post": {
                 "produces": [
@@ -14954,6 +15045,22 @@
                 }
             }
         },
+        "request.UpdateCollectionProjection": {
+            "type": "object",
+            "properties": {
+                "estimated_collection_amount": {
+                    "description": "棰勮鏀舵閲戦",
+                    "type": "number"
+                },
+                "estimated_collection_time": {
+                    "description": "棰勮鏀舵鏃堕棿",
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.UpdateContact": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 56da808..ae236c1 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -1260,6 +1260,97 @@
                 }
             }
         },
+        "/api/collectionProjection/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CollectionProjection"
+                ],
+                "summary": "鍒犻櫎鏀舵棰勬祴",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/collectionProjection/list": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CollectionProjection"
+                ],
+                "summary": "鑾峰彇鏀舵棰勬祴鍒楄〃",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/collectionProjection/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CollectionProjection"
+                ],
+                "summary": "鏇存柊鏀舵棰勬祴",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateCollectionProjection"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/contact/add": {
             "post": {
                 "produces": [
@@ -14942,6 +15033,22 @@
                 }
             }
         },
+        "request.UpdateCollectionProjection": {
+            "type": "object",
+            "properties": {
+                "estimated_collection_amount": {
+                    "description": "棰勮鏀舵閲戦",
+                    "type": "number"
+                },
+                "estimated_collection_time": {
+                    "description": "棰勮鏀舵鏃堕棿",
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.UpdateContact": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index f9f1d1f..81560ca 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -3590,6 +3590,17 @@
     required:
     - client_types
     type: object
+  request.UpdateCollectionProjection:
+    properties:
+      estimated_collection_amount:
+        description: 棰勮鏀舵閲戦
+        type: number
+      estimated_collection_time:
+        description: 棰勮鏀舵鏃堕棿
+        type: string
+      id:
+        type: integer
+    type: object
   request.UpdateContact:
     properties:
       birthday:
@@ -6222,6 +6233,64 @@
       summary: 娣诲姞鏀舵棰勬祴
       tags:
       - CollectionProjection
+  /api/collectionProjection/delete/{id}:
+    delete:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: path
+        name: id
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鍒犻櫎鏀舵棰勬祴
+      tags:
+      - CollectionProjection
+  /api/collectionProjection/list:
+    post:
+      parameters:
+      - description: 椤电爜
+        in: query
+        name: page
+        type: integer
+      - description: 姣忛〉澶у皬
+        in: query
+        name: pageSize
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鑾峰彇鏀舵棰勬祴鍒楄〃
+      tags:
+      - CollectionProjection
+  /api/collectionProjection/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateCollectionProjection'
+      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
index c289864..e6d758b 100644
--- a/model/collectionProjection.go
+++ b/model/collectionProjection.go
@@ -11,7 +11,7 @@
 		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:棰勮鏀舵鏃ユ湡"`
+		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
 	}
@@ -63,10 +63,19 @@
 	return
 }
 
-func (slf *CollectionProjectionSearch) Find() (record CollectionProjection, err error) {
+func (slf *CollectionProjectionSearch) Find() (int64, error, []*CollectionProjection) {
 	var db = slf.build()
-	err = db.First(&record).Error
-	return
+	var records = make([]*CollectionProjection, 0)
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		return total, err, records
+	}
+	if slf.PageNum > 0 && slf.PageSize > 0 {
+		db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+	}
+
+	err := db.Find(&records).Error
+	return total, err, records
 }
 
 func (slf *CollectionProjectionSearch) SetID(id int) *CollectionProjectionSearch {
diff --git a/model/index.go b/model/index.go
index 7a90d35..0da8fa8 100644
--- a/model/index.go
+++ b/model/index.go
@@ -83,6 +83,7 @@
 		Repository{},
 		QuotationStatus{},
 		Currency{},
+		CollectionProjection{},
 	)
 	return err
 }
diff --git a/model/request/collectionProjection.go b/model/request/collectionProjection.go
index e5f1202..f60a1b1 100644
--- a/model/request/collectionProjection.go
+++ b/model/request/collectionProjection.go
@@ -2,10 +2,19 @@
 
 type AddCollectionProjection struct {
 	CollectionProjection
+	SaleChanceId int `json:"sale_chance_id"` // 閿�鍞満浼歩d
 }
 
 type CollectionProjection struct {
 	EstimatedCollectionAmount float64 `json:"estimated_collection_amount"` // 棰勮鏀舵閲戦
 	EstimatedCollectionTime   string  `json:"estimated_collection_time"`   // 棰勮鏀舵鏃堕棿
-	SaleChanceId              int     `json:"sale_chance_id"`              // 閿�鍞満浼歩d
+}
+
+type UpdateCollectionProjection struct {
+	Id int `json:"id"`
+	CollectionProjection
+}
+
+type GetCollectionProjectionList struct {
+	PageInfo
 }
diff --git a/model/response/response.go b/model/response/response.go
index 46774ab..cc15773 100644
--- a/model/response/response.go
+++ b/model/response/response.go
@@ -344,4 +344,9 @@
 	CurrencyResponse struct {
 		List []*model.Currency `json:"list"`
 	}
+
+	CollectionProjectionListResponse struct {
+		List  []*model.CollectionProjection `json:"list"`
+		Count int                           `json:"count"`
+	}
 )
diff --git a/model/saleChance.go b/model/saleChance.go
index 320cafb..9efbc3d 100644
--- a/model/saleChance.go
+++ b/model/saleChance.go
@@ -8,39 +8,40 @@
 
 type (
 	SaleChance 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:閿�鍞嚎绱㈢紪鍙�"`
-		ContactId          int       `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:鑱旂郴浜篒D"`
-		ClientId           int       `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛ID"`
-		SalesSourcesId     int       `json:"sales_sources_id" gorm:"column:sales_sources_id;type:int(11);comment:鍟嗘満鏉ユ簮ID"`
-		SaleTypeId         int       `json:"sale_type_id" gorm:"column:sale_type_id;type:int(11);comment:鍟嗘満绫诲瀷ID"`
-		SaleStageId        int       `json:"sale_stage_id" gorm:"column:sale_stage_id;type:int(11);comment:鍟嗘満闃舵ID"`
-		MemberId           int       `json:"member_id" gorm:"column:member_id;type:int(11);comment:閿�鍞礋璐d汉ID"`
-		RegularCustomersId int       `json:"regular_customers_id" gorm:"column:regular_customers_id;type:int(11);comment:甯稿ID"`
-		Competitors        string    `json:"competitors" gorm:"column:competitors;type:varchar(255);comment:绔炰簤瀵规墜"`
-		PossibilitiesId    int       `json:"possibilities_id" gorm:"column:possibilities_id;type:int(11);comment:鍙兘鎬D"`
-		Budget             float64   `json:"budget" gorm:"column:budget;type:decimal(10,2);comment:棰勭畻"`
-		ProjectedAmount    float64   `json:"projected_amount" gorm:"column:projected_amount;type:decimal(10,2);comment:棰勮閲戦"`
-		Currency           int       `json:"currency" gorm:"column:currency;type:int(11);comment:甯佺"`
-		ExpectedTime       time.Time `json:"expected_time" gorm:"column:expected_time;type:datetime;comment:棰勮鎴愪氦鏃堕棿"`
-		StatusId           int       `json:"status_id" gorm:"column:status_id;type:int(11);comment:鐘舵�両D"`
-		PainPoints         string    `json:"pain_points" gorm:"column:pain_points;type:text;comment:鐥涚偣"`
-		WhetherEstablished string    `json:"whether_established" gorm:"column:whether_established;type:text;comment:鏄惁鎴愮珛"`
-		CapitalBudget      string    `json:"capital_budget" gorm:"column:capital_budget;type:text;comment:璧勯噾棰勭畻"`
-		KeyMaker           string    `json:"key_maker" gorm:"column:key_maker;type:text;comment:鍏抽敭浜�"`
-		KeyFactors         string    `json:"key_factors" gorm:"column:key_factors;type:text;comment:鍏抽敭鍥犵礌"`
-		Process            string    `json:"process" gorm:"column:process;type:text;comment:鍐崇瓥娴佺▼"`
-		Solutions          string    `json:"solutions" gorm:"column:solutions;type:text;comment:绔炰簤瀵规墜瑙e喅鏂规"`
-		Advantages         string    `json:"advantages" gorm:"column:advantages;type:text;comment:绔炰簤浼樺娍"`
-		Disadvantages      string    `json:"disadvantages" gorm:"column:disadvantages;type:text;comment:绔炰簤鍔e娍"`
-		Opportunities      string    `json:"opportunities" gorm:"column:opportunities;type:text;comment:绔炰簤鏈轰細"`
-		Threats            string    `json:"threats" gorm:"column:threats;type:text;comment:绔炰簤濞佽儊"`
-		DetailAddress      string    `json:"detail_address" gorm:"column:detail_address;type:text;comment:璇︾粏鍦板潃"`
-		Remark             string    `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
-		Contact            Contact   `json:"contact" gorm:"foreignKey:ContactId;references:Id"`
-		Client             Client    `json:"client" gorm:"foreignKey:ClientId;references:Id"`
-		SalesSources       SalesSources
+		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:閿�鍞嚎绱㈢紪鍙�"`
+		ContactId             int                    `json:"contact_id" gorm:"column:contact_id;type:int(11);comment:鑱旂郴浜篒D"`
+		ClientId              int                    `json:"client_id" gorm:"column:client_id;type:int(11);comment:瀹㈡埛ID"`
+		SalesSourcesId        int                    `json:"sales_sources_id" gorm:"column:sales_sources_id;type:int(11);comment:鍟嗘満鏉ユ簮ID"`
+		SaleTypeId            int                    `json:"sale_type_id" gorm:"column:sale_type_id;type:int(11);comment:鍟嗘満绫诲瀷ID"`
+		SaleStageId           int                    `json:"sale_stage_id" gorm:"column:sale_stage_id;type:int(11);comment:鍟嗘満闃舵ID"`
+		MemberId              int                    `json:"member_id" gorm:"column:member_id;type:int(11);comment:閿�鍞礋璐d汉ID"`
+		RegularCustomersId    int                    `json:"regular_customers_id" gorm:"column:regular_customers_id;type:int(11);comment:甯稿ID"`
+		Competitors           string                 `json:"competitors" gorm:"column:competitors;type:varchar(255);comment:绔炰簤瀵规墜"`
+		PossibilitiesId       int                    `json:"possibilities_id" gorm:"column:possibilities_id;type:int(11);comment:鍙兘鎬D"`
+		Budget                float64                `json:"budget" gorm:"column:budget;type:decimal(10,2);comment:棰勭畻"`
+		ProjectedAmount       float64                `json:"projected_amount" gorm:"column:projected_amount;type:decimal(10,2);comment:棰勮閲戦"`
+		Currency              int                    `json:"currency" gorm:"column:currency;type:int(11);comment:甯佺"`
+		ExpectedTime          time.Time              `json:"expected_time" gorm:"column:expected_time;type:datetime;comment:棰勮鎴愪氦鏃堕棿"`
+		StatusId              int                    `json:"status_id" gorm:"column:status_id;type:int(11);comment:鐘舵�両D"`
+		PainPoints            string                 `json:"pain_points" gorm:"column:pain_points;type:text;comment:鐥涚偣"`
+		WhetherEstablished    string                 `json:"whether_established" gorm:"column:whether_established;type:text;comment:鏄惁鎴愮珛"`
+		CapitalBudget         string                 `json:"capital_budget" gorm:"column:capital_budget;type:text;comment:璧勯噾棰勭畻"`
+		KeyMaker              string                 `json:"key_maker" gorm:"column:key_maker;type:text;comment:鍏抽敭浜�"`
+		KeyFactors            string                 `json:"key_factors" gorm:"column:key_factors;type:text;comment:鍏抽敭鍥犵礌"`
+		Process               string                 `json:"process" gorm:"column:process;type:text;comment:鍐崇瓥娴佺▼"`
+		Solutions             string                 `json:"solutions" gorm:"column:solutions;type:text;comment:绔炰簤瀵规墜瑙e喅鏂规"`
+		Advantages            string                 `json:"advantages" gorm:"column:advantages;type:text;comment:绔炰簤浼樺娍"`
+		Disadvantages         string                 `json:"disadvantages" gorm:"column:disadvantages;type:text;comment:绔炰簤鍔e娍"`
+		Opportunities         string                 `json:"opportunities" gorm:"column:opportunities;type:text;comment:绔炰簤鏈轰細"`
+		Threats               string                 `json:"threats" gorm:"column:threats;type:text;comment:绔炰簤濞佽儊"`
+		DetailAddress         string                 `json:"detail_address" gorm:"column:detail_address;type:text;comment:璇︾粏鍦板潃"`
+		Remark                string                 `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
+		Contact               Contact                `json:"contact" gorm:"foreignKey:ContactId;references:Id"`
+		Client                Client                 `json:"client" gorm:"foreignKey:ClientId;references:Id"`
+		CollectionProjections []CollectionProjection `json:"collection_projections" gorm:"foreignKey:SaleChanceId"`
+		SalesSources          SalesSources
 		Address
 		gorm.Model `json:"-"`
 	}
@@ -114,7 +115,7 @@
 		db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize)
 	}
 
-	err := db.Preload("Client").Preload("Contact").Find(&records).Error
+	err := db.Preload("CollectionProjections").Preload("Client").Preload("Contact").Find(&records).Error
 	return records, total, err
 }
 
@@ -141,4 +142,4 @@
 func (slf *SaleChanceSearch) SetOrder(order string) *SaleChanceSearch {
 	slf.OrderBy = order
 	return slf
-}
\ No newline at end of file
+}
diff --git a/router/colletionProjection.go b/router/colletionProjection.go
index 80e463e..7a6f098 100644
--- a/router/colletionProjection.go
+++ b/router/colletionProjection.go
@@ -11,9 +11,9 @@
 	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)            // 鑾峰彇鏀舵棰勬祴鍒楄〃
+		collectionProjectionRouter.POST("add", collectionProjectionApi.Add)             // 娣诲姞鏀舵棰勬祴
+		collectionProjectionRouter.DELETE("delete/:id", collectionProjectionApi.Delete) // 鍒犻櫎鏀舵棰勬祴
+		collectionProjectionRouter.PUT("update", collectionProjectionApi.Update)        // 鏇存柊鏀舵棰勬祴
+		collectionProjectionRouter.POST("list", collectionProjectionApi.List)           // 鑾峰彇鏀舵棰勬祴鍒楄〃
 	}
 }
diff --git a/router/index.go b/router/index.go
index bc3afe4..8f21017 100644
--- a/router/index.go
+++ b/router/index.go
@@ -177,7 +177,7 @@
 		InitInvoiceTypeRouter(PrivateGroup)
 		InitCourierCompanyRouter(PrivateGroup)
 		InitProductRouter(PrivateGroup)
-		InitServiceCollectionPlanRouter(PrivateGroup)
+		routerGroup.InitCollectionProjectionRouter(PrivateGroup)
 	}
 	return Router
 }
diff --git a/service/collectionProjection.go b/service/collectionProjection.go
index b86d98b..7da5f09 100644
--- a/service/collectionProjection.go
+++ b/service/collectionProjection.go
@@ -15,3 +15,31 @@
 
 	return ecode.OK
 }
+
+func (CollectionProjectionService) UpdateCollectionProjection(collectionProjection *model.CollectionProjection) int {
+	err := model.NewCollectionProjectionSearch().SetID(collectionProjection.Id).Update(collectionProjection)
+	if err != nil {
+		return ecode.CollectionProjectionUpdateErr
+	}
+
+	return ecode.OK
+}
+
+func (CollectionProjectionService) DeleteCollectionProjection(id int) int {
+	err := model.NewCollectionProjectionSearch().SetID(id).Delete()
+	if err != nil {
+		return ecode.CollectionProjectionNotExist
+	}
+
+	return ecode.OK
+}
+
+func (CollectionProjectionService) GetCollectionProjectionList(page, pageSize int) (int64, int, []*model.CollectionProjection) {
+
+	total, err, list := model.NewCollectionProjectionSearch().SetPage(page, pageSize).Find()
+	if err != nil {
+		return total, ecode.CollectionProjectionListErr, list
+	}
+
+	return total, ecode.OK, list
+}

--
Gitblit v1.8.0