From ac5468a5ce91c4a9ba7c9610c6bef78e24bf6dce Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期一, 10 七月 2023 11:14:18 +0800
Subject: [PATCH] add

---
 api/v1/index.go              |    2 
 model/saleChance.go          |    2 
 pkg/ecode/code.go            |    7 
 docs/swagger.yaml            |  115 ++++++++
 docs/docs.go                 |  183 +++++++++++++
 router/possibilities.go      |   19 +
 docs/swagger.json            |  183 +++++++++++++
 model/possibilities.go       |   86 ++++++
 model/response/response.go   |    4 
 model/request/possibility.go |   14 +
 api/v1/saleChance.go         |    2 
 service/possibilities.go     |   59 ++++
 service/index.go             |    1 
 model/index.go               |    1 
 api/v1/possibilities.go      |  110 +++++++
 logs/aps-admin.err.log       |    1 
 router/index.go              |    2 
 17 files changed, 786 insertions(+), 5 deletions(-)

diff --git a/api/v1/index.go b/api/v1/index.go
index febef50..3c575ef 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -29,6 +29,7 @@
 	SaleStageApi
 	SaleTypeApi
 	RegularCustomersApi
+	PossibilityApi
 }
 
 var ApiGroup = new(Group)
@@ -57,4 +58,5 @@
 	saleStageService         = service.ServiceGroup.SaleStageService
 	saleTypeService          = service.ServiceGroup.SaleTypeService
 	regularCustomersService  = service.ServiceGroup.RegularCustomersService
+	possibilityService       = service.ServiceGroup.PossibilityService
 )
diff --git a/api/v1/possibilities.go b/api/v1/possibilities.go
new file mode 100644
index 0000000..66cc1dd
--- /dev/null
+++ b/api/v1/possibilities.go
@@ -0,0 +1,110 @@
+package v1
+
+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 PossibilityApi struct{}
+
+// Add
+//
+//	@Tags		Possibility
+//	@Summary	娣诲姞鍟嗘満鍙兘鎬�
+//	@Produce	application/json
+//	@Param		object	body		request.AddPossibility	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/possibility/add [post]
+func (s *PossibilityApi) Add(c *gin.Context) {
+	var params request.AddPossibility
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	possibility := new(model.Possibility)
+	possibility.Name = params.Name
+
+	errCode := possibilityService.AddPossibility(possibility)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+//
+//	@Tags		Possibility
+//	@Summary	鍒犻櫎鍟嗘満鍙兘鎬�
+//	@Produce	application/json
+//	@Param		id	path		int	true	"鏌ヨ鍙傛暟"
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/possibility/delete/{id} [delete]
+func (s *PossibilityApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := possibilityService.DeletePossibility(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+//
+//	@Tags		Possibility
+//	@Summary	鏇存柊鍟嗘満鍙兘鎬�
+//	@Produce	application/json
+//	@Param		object	body		request.UpdatePossibilities	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/possibility/update [put]
+func (s *PossibilityApi) Update(c *gin.Context) {
+	var params request.UpdatePossibilities
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := possibilityService.UpdatePossibility(params.Possibilities)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+//
+//	@Tags		Possibility
+//	@Summary	鍟嗘満鍙兘鎬у垪琛�
+//	@Produce	application/json
+//	@Success	200	{object}	contextx.Response{data=response.PossibilityResponse}
+//	@Router		/api/possibility/list [get]
+func (s *PossibilityApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	possibilityList, errCode := possibilityService.GetPossibilityList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.PossibilityResponse{List: possibilityList})
+}
diff --git a/api/v1/saleChance.go b/api/v1/saleChance.go
index 72438f3..7e91845 100644
--- a/api/v1/saleChance.go
+++ b/api/v1/saleChance.go
@@ -183,7 +183,7 @@
 	sc.MemberId = saleChance.MemberId
 	sc.RegularCustomersId = saleChance.RegularCustomersId
 	sc.Competitors = saleChance.Competitors
-	sc.Possibilities = saleChance.Possibilities
+	sc.PossibilitiesId = saleChance.Possibilities
 	sc.Budget = saleChance.Budget
 	sc.ProjectedAmount = saleChance.ProjectedAmount
 	sc.Currency = constvar.CurrencyType(saleChance.Currency)
diff --git a/docs/docs.go b/docs/docs.go
index 4200359..e2eca69 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1580,6 +1580,125 @@
                 }
             }
         },
+        "/api/possibility/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Possibility"
+                ],
+                "summary": "娣诲姞鍟嗘満鍙兘鎬�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddPossibility"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/possibility/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Possibility"
+                ],
+                "summary": "鍒犻櫎鍟嗘満鍙兘鎬�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/possibility/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Possibility"
+                ],
+                "summary": "鍟嗘満鍙兘鎬у垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.PossibilityResponse"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/possibility/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Possibility"
+                ],
+                "summary": "鏇存柊鍟嗘満鍙兘鎬�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdatePossibilities"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/province/add": {
             "post": {
                 "produces": [
@@ -3444,6 +3563,17 @@
                 }
             }
         },
+        "model.Possibility": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.Province": {
             "type": "object",
             "properties": {
@@ -3566,7 +3696,7 @@
                 "pain_points": {
                     "type": "string"
                 },
-                "possibilities": {
+                "possibilities_id": {
                     "type": "integer"
                 },
                 "process": {
@@ -4029,6 +4159,17 @@
             }
         },
         "request.AddIndustry": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddPossibility": {
             "type": "object",
             "required": [
                 "name"
@@ -4961,6 +5102,35 @@
                 }
             }
         },
+        "request.UpdatePossibilities": {
+            "type": "object",
+            "required": [
+                "possibilities"
+            ],
+            "properties": {
+                "possibilities": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.UpdatePossibility"
+                    }
+                }
+            }
+        },
+        "request.UpdatePossibility": {
+            "type": "object",
+            "required": [
+                "id",
+                "name"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateProvince": {
             "type": "object",
             "properties": {
@@ -5467,6 +5637,17 @@
                 }
             }
         },
+        "response.PossibilityResponse": {
+            "type": "object",
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Possibility"
+                    }
+                }
+            }
+        },
         "response.ProvinceResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 16de0c0..6f711d6 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -1568,6 +1568,125 @@
                 }
             }
         },
+        "/api/possibility/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Possibility"
+                ],
+                "summary": "娣诲姞鍟嗘満鍙兘鎬�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddPossibility"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/possibility/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Possibility"
+                ],
+                "summary": "鍒犻櫎鍟嗘満鍙兘鎬�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/possibility/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Possibility"
+                ],
+                "summary": "鍟嗘満鍙兘鎬у垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.PossibilityResponse"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/possibility/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Possibility"
+                ],
+                "summary": "鏇存柊鍟嗘満鍙兘鎬�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdatePossibilities"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/province/add": {
             "post": {
                 "produces": [
@@ -3432,6 +3551,17 @@
                 }
             }
         },
+        "model.Possibility": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.Province": {
             "type": "object",
             "properties": {
@@ -3554,7 +3684,7 @@
                 "pain_points": {
                     "type": "string"
                 },
-                "possibilities": {
+                "possibilities_id": {
                     "type": "integer"
                 },
                 "process": {
@@ -4017,6 +4147,17 @@
             }
         },
         "request.AddIndustry": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddPossibility": {
             "type": "object",
             "required": [
                 "name"
@@ -4949,6 +5090,35 @@
                 }
             }
         },
+        "request.UpdatePossibilities": {
+            "type": "object",
+            "required": [
+                "possibilities"
+            ],
+            "properties": {
+                "possibilities": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.UpdatePossibility"
+                    }
+                }
+            }
+        },
+        "request.UpdatePossibility": {
+            "type": "object",
+            "required": [
+                "id",
+                "name"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateProvince": {
             "type": "object",
             "properties": {
@@ -5455,6 +5625,17 @@
                 }
             }
         },
+        "response.PossibilityResponse": {
+            "type": "object",
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Possibility"
+                    }
+                }
+            }
+        },
         "response.ProvinceResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 55dbd57..219a2f8 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -331,6 +331,13 @@
       name:
         type: string
     type: object
+  model.Possibility:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
   model.Province:
     properties:
       cities:
@@ -411,7 +418,7 @@
         type: string
       pain_points:
         type: string
-      possibilities:
+      possibilities_id:
         type: integer
       process:
         type: string
@@ -728,6 +735,13 @@
     - follow_record
     type: object
   request.AddIndustry:
+    properties:
+      name:
+        type: string
+    required:
+    - name
+    type: object
+  request.AddPossibility:
     properties:
       name:
         type: string
@@ -1369,6 +1383,25 @@
     - id
     - name
     type: object
+  request.UpdatePossibilities:
+    properties:
+      possibilities:
+        items:
+          $ref: '#/definitions/request.UpdatePossibility'
+        type: array
+    required:
+    - possibilities
+    type: object
+  request.UpdatePossibility:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    required:
+    - id
+    - name
+    type: object
   request.UpdateProvince:
     properties:
       id:
@@ -1702,6 +1735,13 @@
         type: integer
       total:
         type: integer
+    type: object
+  response.PossibilityResponse:
+    properties:
+      list:
+        items:
+          $ref: '#/definitions/model.Possibility'
+        type: array
     type: object
   response.ProvinceResponse:
     properties:
@@ -2721,6 +2761,79 @@
       summary: 鏇存柊琛屼笟
       tags:
       - Industry
+  /api/possibility/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddPossibility'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞鍟嗘満鍙兘鎬�
+      tags:
+      - Possibility
+  /api/possibility/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:
+      - Possibility
+  /api/possibility/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/contextx.Response'
+            - properties:
+                data:
+                  $ref: '#/definitions/response.PossibilityResponse'
+              type: object
+      summary: 鍟嗘満鍙兘鎬у垪琛�
+      tags:
+      - Possibility
+  /api/possibility/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdatePossibilities'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊鍟嗘満鍙兘鎬�
+      tags:
+      - Possibility
   /api/province/add:
     post:
       parameters:
diff --git a/logs/aps-admin.err.log b/logs/aps-admin.err.log
index 734c0c9..ff4e4b6 100644
--- a/logs/aps-admin.err.log
+++ b/logs/aps-admin.err.log
@@ -331,3 +331,4 @@
 [2023-07-06 13:52:52]	[error]	[main.main:29]	model Init err:Error 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length
 [2023-07-06 13:55:26]	[error]	[gorm.io/driver/mysql.Migrator.AlterColumn.func1:59]	trace	{"error": "Error 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length", "elapsed": 0.0007354, "rows": 0, "sql": "ALTER TABLE `client_level` MODIFY COLUMN `name` longtext"}
 [2023-07-06 13:55:26]	[error]	[main.main:29]	model Init err:Error 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length
+[2023-07-10 11:06:33]	[error]	[aps_crm/model.(*PossibilitySearch).Create:46]	trace	{"error": "Error 1146 (42S02): Table 'aps_crm.possibility' doesn't exist", "elapsed": 0.0032687, "rows": 0, "sql": "INSERT INTO `possibility` (`name`) VALUES ('10')"}
diff --git a/model/index.go b/model/index.go
index 7f7b1bc..27988b4 100644
--- a/model/index.go
+++ b/model/index.go
@@ -44,6 +44,7 @@
 		SaleStage{},
 		SaleType{},
 		RegularCustomers{},
+		Possibility{},
 	)
 	return err
 }
diff --git a/model/possibilities.go b/model/possibilities.go
new file mode 100644
index 0000000..ae0dce8
--- /dev/null
+++ b/model/possibilities.go
@@ -0,0 +1,86 @@
+package model
+
+import (
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+)
+
+type (
+	// Possibility 鍟嗘満鍙兘鎬�
+	Possibility struct {
+		Id   int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name string `json:"name" gorm:"column:name;type:varchar(255);comment:鍟嗘満鍙兘鎬у悕绉�"`
+	}
+
+	// PossibilitySearch 鍟嗘満鍙兘鎬ф悳绱㈡潯浠�
+	PossibilitySearch struct {
+		Possibility
+		Orm *gorm.DB
+	}
+)
+
+func (Possibility) TableName() string {
+	return "possibility"
+}
+
+func NewPossibilitySearch() *PossibilitySearch {
+	return &PossibilitySearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *PossibilitySearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&Possibility{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+	if slf.Name != "" {
+		db = db.Where("name = ?", slf.Name)
+	}
+
+	return db
+}
+
+func (slf *PossibilitySearch) Create(record *Possibility) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *PossibilitySearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&Possibility{}).Error
+}
+
+func (slf *PossibilitySearch) Update(record *Possibility) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *PossibilitySearch) Find() (*Possibility, error) {
+	var db = slf.build()
+	var record = new(Possibility)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *PossibilitySearch) FindAll() ([]*Possibility, error) {
+	var db = slf.build()
+	var records = make([]*Possibility, 0)
+	err := db.Find(&records).Error
+	return records, err
+}
+
+func (slf *PossibilitySearch) SetId(id int) *PossibilitySearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *PossibilitySearch) SetName(name string) *PossibilitySearch {
+	slf.Name = name
+	return slf
+}
+
+func (slf *PossibilitySearch) Updates(data map[string]interface{}) error {
+	var db = slf.build()
+	return db.Updates(data).Error
+}
diff --git a/model/request/possibility.go b/model/request/possibility.go
new file mode 100644
index 0000000..6f96821
--- /dev/null
+++ b/model/request/possibility.go
@@ -0,0 +1,14 @@
+package request
+
+type AddPossibility struct {
+	Name string `json:"name" binding:"required"`
+}
+
+type UpdatePossibility struct {
+	Id   int    `json:"id" binding:"required"`
+	Name string `json:"name" binding:"required"`
+}
+
+type UpdatePossibilities struct {
+	Possibilities []*UpdatePossibility `json:"possibilities" binding:"required"`
+}
diff --git a/model/response/response.go b/model/response/response.go
index d298bb2..71e7f48 100644
--- a/model/response/response.go
+++ b/model/response/response.go
@@ -113,4 +113,8 @@
 	RegularCustomersResponse struct {
 		List []*model.RegularCustomers `json:"list"`
 	}
+
+	PossibilityResponse struct {
+		List []*model.Possibility `json:"list"`
+	}
 )
diff --git a/model/saleChance.go b/model/saleChance.go
index 2bc6a2b..40f3d40 100644
--- a/model/saleChance.go
+++ b/model/saleChance.go
@@ -20,7 +20,7 @@
 		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:绔炰簤瀵规墜"`
-		Possibilities      int                   `json:"possibilities" gorm:"column:possibilities;type:int(11);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           constvar.CurrencyType `json:"currency" gorm:"column:currency;type:int(11);comment:璐у竵绫诲瀷"`
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index 4fefc1f..1307751 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -163,4 +163,11 @@
 	RegularCustomersUpdateErr = 2200005 // 鏇存柊鍥哄畾瀹㈡埛澶辫触
 	RegularCustomersDeleteErr = 2200006 // 鍒犻櫎鍥哄畾瀹㈡埛澶辫触
 
+	PossibilityExist     = 2300001 // 閿�鍞満浼氬彲鑳芥�у凡瀛樺湪
+	PossibilityNotExist  = 2300002 // 閿�鍞満浼氬彲鑳芥�т笉瀛樺湪
+	PossibilityListErr   = 2300003 // 鑾峰彇閿�鍞満浼氬彲鑳芥�у垪琛ㄥけ璐�
+	PossibilitySetErr    = 2300004 // 璁剧疆閿�鍞満浼氬彲鑳芥�уけ璐�
+	PossibilityUpdateErr = 2300005 // 鏇存柊閿�鍞満浼氬彲鑳芥�уけ璐�
+	PossibilityDeleteErr = 2300006 // 鍒犻櫎閿�鍞満浼氬彲鑳芥�уけ璐�
+
 )
diff --git a/router/index.go b/router/index.go
index 8787204..52471eb 100644
--- a/router/index.go
+++ b/router/index.go
@@ -35,6 +35,7 @@
 	SaleStageRouter
 	SaleTypeRouter
 	RegularCustomersRouter
+	PossibilityRouter
 }
 
 func InitRouter() *gin.Engine {
@@ -87,6 +88,7 @@
 		routerGroup.InitSaleStageRouter(PrivateGroup)         // 娉ㄥ唽saleStage璺敱
 		routerGroup.InitSaleTypeRouter(PrivateGroup)          // 娉ㄥ唽saleType璺敱
 		routerGroup.InitRegularCustomersRouter(PrivateGroup)  // 娉ㄥ唽regularCustomers璺敱
+		routerGroup.InitPossibilityRouter(PrivateGroup)       // 娉ㄥ唽possibility璺敱
 	}
 	return Router
 }
diff --git a/router/possibilities.go b/router/possibilities.go
new file mode 100644
index 0000000..ab50e99
--- /dev/null
+++ b/router/possibilities.go
@@ -0,0 +1,19 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type PossibilityRouter struct{}
+
+func (p *PossibilityRouter) InitPossibilityRouter(router *gin.RouterGroup) {
+	possibilityRouter := router.Group("possibility")
+	possibilityApi := v1.ApiGroup.PossibilityApi
+	{
+		possibilityRouter.POST("add", possibilityApi.Add)             // 娣诲姞閿�鍞嚎绱�
+		possibilityRouter.DELETE("delete/:id", possibilityApi.Delete) // 鍒犻櫎閿�鍞嚎绱�
+		possibilityRouter.PUT("update", possibilityApi.Update)        // 鏇存柊閿�鍞嚎绱�
+		possibilityRouter.GET("list", possibilityApi.List)            // 鑾峰彇閿�鍞嚎绱㈠垪琛�
+	}
+}
diff --git a/service/index.go b/service/index.go
index c5091d2..60ed2a6 100644
--- a/service/index.go
+++ b/service/index.go
@@ -24,6 +24,7 @@
 	SaleStageService
 	SaleTypeService
 	RegularCustomersService
+	PossibilityService
 }
 
 var ServiceGroup = new(Group)
diff --git a/service/possibilities.go b/service/possibilities.go
new file mode 100644
index 0000000..cb05d9c
--- /dev/null
+++ b/service/possibilities.go
@@ -0,0 +1,59 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/ecode"
+)
+
+type PossibilityService struct{}
+
+func (PossibilityService) AddPossibility(possibility *model.Possibility) int {
+	err := model.NewPossibilitySearch().Create(possibility)
+	if err != nil {
+		return ecode.PossibilityExist
+	}
+
+	return ecode.OK
+}
+
+func (PossibilityService) DeletePossibility(id int) int {
+	_, err := model.NewPossibilitySearch().SetId(id).Find()
+	if err != nil {
+		return ecode.PossibilityNotExist
+	}
+
+	err = model.NewPossibilitySearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.PossibilityNotExist
+	}
+	return ecode.OK
+}
+
+func (PossibilityService) GetPossibilityList() ([]*model.Possibility, int) {
+	list, err := model.NewPossibilitySearch().FindAll()
+	if err != nil {
+		return nil, ecode.PossibilityListErr
+	}
+
+	return list, ecode.OK
+}
+
+func (PossibilityService) UpdatePossibility(possibilities []*request.UpdatePossibility) int {
+	for _, v := range possibilities {
+		// check possibility exist
+		_, err := model.NewPossibilitySearch().SetId(v.Id).Find()
+		if err != nil {
+			return ecode.PossibilityNotExist
+		}
+
+		err = model.NewPossibilitySearch().SetId(v.Id).Updates(map[string]interface{}{
+			"name": v.Name,
+		})
+		if err != nil {
+			return ecode.PossibilitySetErr
+		}
+	}
+
+	return ecode.OK
+}

--
Gitblit v1.8.0