From 80fa90e29844947b26d41c16fb1a48516ec018f8 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期一, 10 七月 2023 20:28:46 +0800
Subject: [PATCH] add

---
 api/v1/index.go              |    2 
 model/request/masterOrder.go |   19 +
 api/v1/masterOrder.go        |  158 +++++++++
 service/masterOrder.go       |   54 +++
 pkg/ecode/code.go            |    8 
 model/quotation.go           |    1 
 docs/swagger.yaml            |  135 ++++++++
 docs/docs.go                 |  214 +++++++++++++
 docs/swagger.json            |  214 +++++++++++++
 model/masterOrder.go         |   80 +++++
 model/response/response.go   |    4 
 service/index.go             |    1 
 router/masterOrder.go        |   19 +
 model/index.go               |    1 
 router/index.go              |    2 
 15 files changed, 912 insertions(+), 0 deletions(-)

diff --git a/api/v1/index.go b/api/v1/index.go
index ccc3d5e..a226025 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -32,6 +32,7 @@
 	PossibilityApi
 	StatusApi
 	QuotationApi
+	MasterOrderApi
 }
 
 var ApiGroup = new(Group)
@@ -63,4 +64,5 @@
 	possibilityService       = service.ServiceGroup.PossibilityService
 	statusService            = service.ServiceGroup.StatusService
 	quotationService         = service.ServiceGroup.QuotationService
+	masterOrderService       = service.ServiceGroup.MasterOrderService
 )
diff --git a/api/v1/masterOrder.go b/api/v1/masterOrder.go
new file mode 100644
index 0000000..0cb3a5d
--- /dev/null
+++ b/api/v1/masterOrder.go
@@ -0,0 +1,158 @@
+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 MasterOrderApi struct{}
+
+// Add
+//
+//	@Tags		MasterOrder
+//	@Summary	娣诲姞涓昏鍗�
+//	@Produce	application/json
+//	@Param		object	body		request.AddMasterOrder	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/masterOrder/add [post]
+func (s *MasterOrderApi) Add(c *gin.Context) {
+	var params request.AddMasterOrder
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode, masterOrder := checkMasterOrderParams(params.MasterOrder)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	errCode = masterOrderService.AddMasterOrder(&masterOrder)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+//
+//	@Tags		MasterOrder
+//	@Summary	鍒犻櫎涓昏鍗�
+//	@Produce	application/json
+//	@Param		id	path		int	true	"鏌ヨ鍙傛暟"
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/masterOrder/delete/{id} [delete]
+func (s *MasterOrderApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := masterOrderService.DeleteMasterOrder(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+//
+//	@Tags		MasterOrder
+//	@Summary	鏇存柊涓昏鍗�
+//	@Produce	application/json
+//	@Param		object	body		request.UpdateMasterOrder	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/masterOrder/update [put]
+func (s *MasterOrderApi) Update(c *gin.Context) {
+	var params request.UpdateMasterOrder
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode, masterOrder := checkMasterOrderParams(params.MasterOrder)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	masterOrder.Id = params.Id
+
+	errCode = masterOrderService.UpdateMasterOrder(&masterOrder)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+//
+//	@Tags		MasterOrder
+//	@Summary	涓昏鍗曞垪琛�
+//	@Produce	application/json
+//	@Success	200	{object}	contextx.Response{data=response.MasterOrderResponse}
+//	@Router		/api/masterOrder/list [get]
+func (s *MasterOrderApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	list, errCode := masterOrderService.GetMasterOrderList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.MasterOrderResponse{
+		List: list,
+	})
+}
+
+// checkMasterOrderParams
+// 妫�鏌ヤ富璁㈠崟鍙傛暟
+func checkMasterOrderParams(masterOrder request.MasterOrder) (errCode int, masterOrderModel model.MasterOrder) {
+	if masterOrder.Number == "" {
+		return ecode.InvalidParams, masterOrderModel
+	}
+
+	if masterOrder.MemberId == 0 {
+		return ecode.InvalidParams, masterOrderModel
+	}
+
+	t, err := checkTimeFormat(masterOrder.StartTime)
+	if err != nil {
+		return ecode.InvalidParams, masterOrderModel
+	}
+	masterOrderModel.StartTime = t
+
+	t, err = checkTimeFormat(masterOrder.EndTime)
+	if err != nil {
+		return ecode.InvalidParams, masterOrderModel
+	}
+	masterOrderModel.EndTime = t
+
+	masterOrderModel.Number = masterOrder.Number
+	masterOrderModel.MemberId = masterOrder.MemberId
+	masterOrderModel.ClientId = masterOrder.ClientId
+	f, err := strconv.ParseFloat(masterOrder.Money, 64)
+	if err != nil {
+		return ecode.InvalidParams, masterOrderModel
+	}
+	masterOrderModel.Money = f
+
+	return ecode.OK, masterOrderModel
+}
diff --git a/docs/docs.go b/docs/docs.go
index 9a8241c..d9ffe10 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1580,6 +1580,125 @@
                 }
             }
         },
+        "/api/masterOrder/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "MasterOrder"
+                ],
+                "summary": "娣诲姞涓昏鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddMasterOrder"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/masterOrder/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "MasterOrder"
+                ],
+                "summary": "鍒犻櫎涓昏鍗�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/masterOrder/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "MasterOrder"
+                ],
+                "summary": "涓昏鍗曞垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.MasterOrderResponse"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/masterOrder/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "MasterOrder"
+                ],
+                "summary": "鏇存柊涓昏鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateMasterOrder"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/possibility/add": {
             "post": {
                 "produces": [
@@ -3789,6 +3908,32 @@
                 }
             }
         },
+        "model.MasterOrder": {
+            "type": "object",
+            "properties": {
+                "client_id": {
+                    "type": "integer"
+                },
+                "end_time": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "member_id": {
+                    "type": "integer"
+                },
+                "money": {
+                    "type": "number"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "start_time": {
+                    "type": "string"
+                }
+            }
+        },
         "model.Possibility": {
             "type": "object",
             "properties": {
@@ -3820,11 +3965,17 @@
         "model.Quotation": {
             "type": "object",
             "properties": {
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
                 "client_id": {
                     "type": "integer"
                 },
                 "conditions": {
                     "type": "string"
+                },
+                "contact": {
+                    "$ref": "#/definitions/model.Contact"
                 },
                 "contact_id": {
                     "type": "integer"
@@ -3843,6 +3994,9 @@
                 },
                 "quotation_status_id": {
                     "type": "integer"
+                },
+                "sale_chance": {
+                    "$ref": "#/definitions/model.SaleChance"
                 },
                 "sale_chance_id": {
                     "type": "integer"
@@ -4426,6 +4580,29 @@
             ],
             "properties": {
                 "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddMasterOrder": {
+            "type": "object",
+            "properties": {
+                "client_id": {
+                    "type": "integer"
+                },
+                "end_time": {
+                    "type": "string"
+                },
+                "member_id": {
+                    "type": "integer"
+                },
+                "money": {
+                    "type": "string"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "start_time": {
                     "type": "string"
                 }
             }
@@ -5406,6 +5583,32 @@
                 }
             }
         },
+        "request.UpdateMasterOrder": {
+            "type": "object",
+            "properties": {
+                "client_id": {
+                    "type": "integer"
+                },
+                "end_time": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "member_id": {
+                    "type": "integer"
+                },
+                "money": {
+                    "type": "string"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "start_time": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdatePossibilities": {
             "type": "object",
             "required": [
@@ -5990,6 +6193,17 @@
                 }
             }
         },
+        "response.MasterOrderResponse": {
+            "type": "object",
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.MasterOrder"
+                    }
+                }
+            }
+        },
         "response.PageResult": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index f5a60ea..c0e0598 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -1568,6 +1568,125 @@
                 }
             }
         },
+        "/api/masterOrder/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "MasterOrder"
+                ],
+                "summary": "娣诲姞涓昏鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddMasterOrder"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/masterOrder/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "MasterOrder"
+                ],
+                "summary": "鍒犻櫎涓昏鍗�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/masterOrder/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "MasterOrder"
+                ],
+                "summary": "涓昏鍗曞垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/contextx.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.MasterOrderResponse"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/masterOrder/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "MasterOrder"
+                ],
+                "summary": "鏇存柊涓昏鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateMasterOrder"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/possibility/add": {
             "post": {
                 "produces": [
@@ -3777,6 +3896,32 @@
                 }
             }
         },
+        "model.MasterOrder": {
+            "type": "object",
+            "properties": {
+                "client_id": {
+                    "type": "integer"
+                },
+                "end_time": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "member_id": {
+                    "type": "integer"
+                },
+                "money": {
+                    "type": "number"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "start_time": {
+                    "type": "string"
+                }
+            }
+        },
         "model.Possibility": {
             "type": "object",
             "properties": {
@@ -3808,11 +3953,17 @@
         "model.Quotation": {
             "type": "object",
             "properties": {
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
                 "client_id": {
                     "type": "integer"
                 },
                 "conditions": {
                     "type": "string"
+                },
+                "contact": {
+                    "$ref": "#/definitions/model.Contact"
                 },
                 "contact_id": {
                     "type": "integer"
@@ -3831,6 +3982,9 @@
                 },
                 "quotation_status_id": {
                     "type": "integer"
+                },
+                "sale_chance": {
+                    "$ref": "#/definitions/model.SaleChance"
                 },
                 "sale_chance_id": {
                     "type": "integer"
@@ -4414,6 +4568,29 @@
             ],
             "properties": {
                 "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddMasterOrder": {
+            "type": "object",
+            "properties": {
+                "client_id": {
+                    "type": "integer"
+                },
+                "end_time": {
+                    "type": "string"
+                },
+                "member_id": {
+                    "type": "integer"
+                },
+                "money": {
+                    "type": "string"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "start_time": {
                     "type": "string"
                 }
             }
@@ -5394,6 +5571,32 @@
                 }
             }
         },
+        "request.UpdateMasterOrder": {
+            "type": "object",
+            "properties": {
+                "client_id": {
+                    "type": "integer"
+                },
+                "end_time": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "member_id": {
+                    "type": "integer"
+                },
+                "money": {
+                    "type": "string"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "start_time": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdatePossibilities": {
             "type": "object",
             "required": [
@@ -5978,6 +6181,17 @@
                 }
             }
         },
+        "response.MasterOrderResponse": {
+            "type": "object",
+            "properties": {
+                "list": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.MasterOrder"
+                    }
+                }
+            }
+        },
         "response.PageResult": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index d6bb274..176ac93 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -331,6 +331,23 @@
       name:
         type: string
     type: object
+  model.MasterOrder:
+    properties:
+      client_id:
+        type: integer
+      end_time:
+        type: string
+      id:
+        type: integer
+      member_id:
+        type: integer
+      money:
+        type: number
+      number:
+        type: string
+      start_time:
+        type: string
+    type: object
   model.Possibility:
     properties:
       id:
@@ -351,10 +368,14 @@
     type: object
   model.Quotation:
     properties:
+      client:
+        $ref: '#/definitions/model.Client'
       client_id:
         type: integer
       conditions:
         type: string
+      contact:
+        $ref: '#/definitions/model.Contact'
       contact_id:
         type: integer
       file:
@@ -367,6 +388,8 @@
         type: string
       quotation_status_id:
         type: integer
+      sale_chance:
+        $ref: '#/definitions/model.SaleChance'
       sale_chance_id:
         type: integer
       validity_date:
@@ -763,6 +786,21 @@
         type: string
     required:
     - name
+    type: object
+  request.AddMasterOrder:
+    properties:
+      client_id:
+        type: integer
+      end_time:
+        type: string
+      member_id:
+        type: integer
+      money:
+        type: string
+      number:
+        type: string
+      start_time:
+        type: string
     type: object
   request.AddPossibility:
     properties:
@@ -1434,6 +1472,23 @@
     - id
     - name
     type: object
+  request.UpdateMasterOrder:
+    properties:
+      client_id:
+        type: integer
+      end_time:
+        type: string
+      id:
+        type: integer
+      member_id:
+        type: integer
+      money:
+        type: string
+      number:
+        type: string
+      start_time:
+        type: string
+    type: object
   request.UpdatePossibilities:
     properties:
       possibilities:
@@ -1818,6 +1873,13 @@
         type: string
       user:
         $ref: '#/definitions/model.User'
+    type: object
+  response.MasterOrderResponse:
+    properties:
+      list:
+        items:
+          $ref: '#/definitions/model.MasterOrder'
+        type: array
     type: object
   response.PageResult:
     properties:
@@ -2861,6 +2923,79 @@
       summary: 鏇存柊琛屼笟
       tags:
       - Industry
+  /api/masterOrder/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddMasterOrder'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞涓昏鍗�
+      tags:
+      - MasterOrder
+  /api/masterOrder/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:
+      - MasterOrder
+  /api/masterOrder/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/contextx.Response'
+            - properties:
+                data:
+                  $ref: '#/definitions/response.MasterOrderResponse'
+              type: object
+      summary: 涓昏鍗曞垪琛�
+      tags:
+      - MasterOrder
+  /api/masterOrder/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateMasterOrder'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊涓昏鍗�
+      tags:
+      - MasterOrder
   /api/possibility/add:
     post:
       parameters:
diff --git a/model/index.go b/model/index.go
index 584e114..cda1221 100644
--- a/model/index.go
+++ b/model/index.go
@@ -47,6 +47,7 @@
 		Possibility{},
 		Status{},
 		Quotation{},
+		MasterOrder{},
 	)
 	return err
 }
diff --git a/model/masterOrder.go b/model/masterOrder.go
new file mode 100644
index 0000000..bd0a02c
--- /dev/null
+++ b/model/masterOrder.go
@@ -0,0 +1,80 @@
+package model
+
+import (
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+	"time"
+)
+
+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"`
+		MemberId   int       `json:"member_id" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
+		StartTime  time.Time `json:"start_time" gorm:"column:start_time;type:datetime;comment:寮�濮嬫椂闂�"`
+		EndTime    time.Time `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:"-"`
+	}
+
+	// MasterOrderSearch 閿�鍞�诲崟鎼滅储鏉′欢
+	MasterOrderSearch struct {
+		MasterOrder
+		Orm *gorm.DB
+	}
+)
+
+func (MasterOrder) TableName() string {
+	return "master_order"
+}
+
+func NewMasterOrderSearch() *MasterOrderSearch {
+	return &MasterOrderSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *MasterOrderSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&MasterOrder{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+
+	return db
+}
+
+func (slf *MasterOrderSearch) Create(record *MasterOrder) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *MasterOrderSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&MasterOrder{}).Error
+}
+
+func (slf *MasterOrderSearch) Update(record *MasterOrder) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *MasterOrderSearch) Find() (*MasterOrder, error) {
+	var db = slf.build()
+	var record = new(MasterOrder)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *MasterOrderSearch) FindAll() ([]*MasterOrder, error) {
+	var db = slf.build()
+	var records = make([]*MasterOrder, 0)
+	err := db.Find(&records).Error
+	return records, err
+}
+
+func (slf *MasterOrderSearch) SetId(id int) *MasterOrderSearch {
+	slf.Id = id
+	return slf
+}
diff --git a/model/quotation.go b/model/quotation.go
index d5fdec8..878f211 100644
--- a/model/quotation.go
+++ b/model/quotation.go
@@ -22,6 +22,7 @@
 		Client            Client     `json:"client" gorm:"foreignKey:ClientId"`
 		Contact           Contact    `json:"contact" gorm:"foreignKey:ContactId"`
 		SaleChance        SaleChance `json:"sale_chance" gorm:"foreignKey:SaleChanceId"`
+		gorm.Model        `json:"-"`
 	}
 
 	// QuotationSearch 鎶ヤ环鍗曟悳绱㈡潯浠�
diff --git a/model/request/masterOrder.go b/model/request/masterOrder.go
new file mode 100644
index 0000000..f024b3c
--- /dev/null
+++ b/model/request/masterOrder.go
@@ -0,0 +1,19 @@
+package request
+
+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     string `json:"money"`
+}
+
+type UpdateMasterOrder struct {
+	Id int `json:"id"`
+	MasterOrder
+}
diff --git a/model/response/response.go b/model/response/response.go
index 51423c7..2142098 100644
--- a/model/response/response.go
+++ b/model/response/response.go
@@ -125,4 +125,8 @@
 	QuotationResponse struct {
 		List []*model.Quotation `json:"list"`
 	}
+
+	MasterOrderResponse struct {
+		List []*model.MasterOrder `json:"list"`
+	}
 )
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index d0f5a81..e16bafd 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -183,4 +183,12 @@
 	QuotationSetErr    = 2500004 // 璁剧疆鎶ヤ环鍗曞け璐�
 	QuotationUpdateErr = 2500005 // 鏇存柊鎶ヤ环鍗曞け璐�
 	QuotationDeleteErr = 2500006 // 鍒犻櫎鎶ヤ环鍗曞け璐�
+
+	MasterOrderExist     = 2600001 // 涓昏鍗曞凡瀛樺湪
+	MasterOrderNotExist  = 2600002 // 涓昏鍗曚笉瀛樺湪
+	MasterOrderListErr   = 2600003 // 鑾峰彇涓昏鍗曞垪琛ㄥけ璐�
+	MasterOrderSetErr    = 2600004 // 璁剧疆涓昏鍗曞け璐�
+	MasterOrderUpdateErr = 2600005 // 鏇存柊涓昏鍗曞け璐�
+	MasterOrderDeleteErr = 2600006 // 鍒犻櫎涓昏鍗曞け璐�
+
 )
diff --git a/router/index.go b/router/index.go
index be18007..9346158 100644
--- a/router/index.go
+++ b/router/index.go
@@ -38,6 +38,7 @@
 	PossibilityRouter
 	StatusRouter
 	QuotationRouter
+	MasterOrderRouter
 }
 
 func InitRouter() *gin.Engine {
@@ -93,6 +94,7 @@
 		routerGroup.InitPossibilityRouter(PrivateGroup)       // 娉ㄥ唽possibility璺敱
 		routerGroup.InitStatusRouter(PrivateGroup)            // 娉ㄥ唽status璺敱
 		routerGroup.InitQuotationRouter(PrivateGroup)         // 娉ㄥ唽quotation璺敱
+		routerGroup.InitMasterOrderRouter(PrivateGroup)       // 娉ㄥ唽masterOrder璺敱
 	}
 	return Router
 }
diff --git a/router/masterOrder.go b/router/masterOrder.go
new file mode 100644
index 0000000..d3d4cf6
--- /dev/null
+++ b/router/masterOrder.go
@@ -0,0 +1,19 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type MasterOrderRouter struct{}
+
+func (s *MasterOrderRouter) InitMasterOrderRouter(router *gin.RouterGroup) {
+	masterOrderRouter := router.Group("masterOrder")
+	masterOrderApi := v1.ApiGroup.MasterOrderApi
+	{
+		masterOrderRouter.POST("add", masterOrderApi.Add)             // 娣诲姞涓昏鍗�
+		masterOrderRouter.DELETE("delete/:id", masterOrderApi.Delete) // 鍒犻櫎涓昏鍗�
+		masterOrderRouter.PUT("update", masterOrderApi.Update)        // 鏇存柊涓昏鍗�
+		masterOrderRouter.GET("list", masterOrderApi.List)            // 鑾峰彇涓昏鍗曞垪琛�
+	}
+}
diff --git a/service/index.go b/service/index.go
index c055e22..26577e4 100644
--- a/service/index.go
+++ b/service/index.go
@@ -27,6 +27,7 @@
 	PossibilityService
 	StatusService
 	QuotationService
+	MasterOrderService
 }
 
 var ServiceGroup = new(Group)
diff --git a/service/masterOrder.go b/service/masterOrder.go
new file mode 100644
index 0000000..c1255a1
--- /dev/null
+++ b/service/masterOrder.go
@@ -0,0 +1,54 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/pkg/ecode"
+)
+
+type MasterOrderService struct{}
+
+func (MasterOrderService) AddMasterOrder(masterOrder *model.MasterOrder) int {
+	err := model.NewMasterOrderSearch().Create(masterOrder)
+	if err != nil {
+		return ecode.MasterOrderExist
+	}
+
+	return ecode.OK
+}
+
+func (MasterOrderService) DeleteMasterOrder(id int) int {
+	_, err := model.NewMasterOrderSearch().SetId(id).Find()
+	if err != nil {
+		return ecode.MasterOrderNotExist
+	}
+
+	err = model.NewMasterOrderSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.MasterOrderNotExist
+	}
+	return ecode.OK
+}
+
+func (MasterOrderService) GetMasterOrderList() ([]*model.MasterOrder, int) {
+	list, err := model.NewMasterOrderSearch().FindAll()
+	if err != nil {
+		return nil, ecode.MasterOrderListErr
+	}
+
+	return list, ecode.OK
+}
+
+func (MasterOrderService) UpdateMasterOrder(masterOrder *model.MasterOrder) int {
+	// check masterOrder exist
+	_, err := model.NewMasterOrderSearch().SetId(masterOrder.Id).Find()
+	if err != nil {
+		return ecode.MasterOrderNotExist
+	}
+
+	err = model.NewMasterOrderSearch().SetId(masterOrder.Id).Update(masterOrder)
+	if err != nil {
+		return ecode.MasterOrderSetErr
+	}
+
+	return ecode.OK
+}

--
Gitblit v1.8.0