From 3535dc2bc35776d208a73083a1368b44d6f7ba31 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期三, 12 七月 2023 10:34:00 +0800
Subject: [PATCH] add

---
 api/v1/index.go              |    2 
 model/salesReturn.go         |   79 +++++
 pkg/ecode/code.go            |    7 
 router/salesReturn.go        |   19 +
 docs/swagger.yaml            |  119 ++++++++
 docs/docs.go                 |  185 +++++++++++++
 api/v1/salesReturn.go        |  152 ++++++++++
 docs/swagger.json            |  185 +++++++++++++
 model/response/response.go   |    4 
 service/index.go             |    1 
 model/request/salesReturn.go |   23 +
 model/index.go               |    1 
 router/index.go              |    2 
 service/salesReturn.go       |   54 +++
 14 files changed, 825 insertions(+), 8 deletions(-)

diff --git a/api/v1/index.go b/api/v1/index.go
index 9c6b130..2d16f27 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -35,6 +35,7 @@
 	MasterOrderApi
 	SubOrderApi
 	SalesDetailsApi
+	SalesReturnApi
 }
 
 var ApiGroup = new(Group)
@@ -69,4 +70,5 @@
 	masterOrderService       = service.ServiceGroup.MasterOrderService
 	subOrderService          = service.ServiceGroup.SubOrderService
 	salesDetailsService      = service.ServiceGroup.SalesDetailsService
+	salesReturnService       = service.ServiceGroup.SalesReturnService
 )
diff --git a/api/v1/salesReturn.go b/api/v1/salesReturn.go
new file mode 100644
index 0000000..bcc4692
--- /dev/null
+++ b/api/v1/salesReturn.go
@@ -0,0 +1,152 @@
+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 SalesReturnApi struct{}
+
+// Add
+//
+//	@Tags		SalesReturn
+//	@Summary	娣诲姞閿�鍞��璐�
+//	@Produce	application/json
+//	@Param		object	body		request.AddSalesReturnRequest	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/salesReturn/add [post]
+func (s *SalesReturnApi) Add(c *gin.Context) {
+	var params request.AddSalesReturnRequest
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode, salesReturn := checkSalesReturnParams(params.SalesReturn)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	errCode = salesReturnService.AddSalesReturn(&salesReturn)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+//
+//	@Tags		SalesReturn
+//	@Summary	鍒犻櫎閿�鍞��璐�
+//	@Produce	application/json
+//	@Param		id	path		int	true	"鏌ヨ鍙傛暟"
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/salesReturn/delete/{id} [delete]
+func (s *SalesReturnApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := salesReturnService.DeleteSalesReturn(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+//
+//	@Tags		SalesReturn
+//	@Summary	鏇存柊閿�鍞��璐�
+//	@Produce	application/json
+//	@Param		object	body		request.UpdateSalesReturnRequest	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/salesReturn/update/{id} [put]
+func (s *SalesReturnApi) Update(c *gin.Context) {
+	var params request.UpdateSalesReturnRequest
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode, salesReturn := checkSalesReturnParams(params.SalesReturn)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	errCode = salesReturnService.UpdateSalesReturn(&salesReturn)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+
+}
+
+// List
+//
+//	@Tags		SalesReturn
+//	@Summary	鑾峰彇閿�鍞��璐у垪琛�
+//	@Produce	application/json
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/salesReturn/list [get]
+func (s *SalesReturnApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	salesReturns, errCode := salesReturnService.GetSalesReturnList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.SalesReturnResponse{
+		List: salesReturns,
+	})
+}
+
+func checkSalesReturnParams(salesReturn request.SalesReturn) (errCode int, s model.SalesReturn) {
+	if salesReturn.Number == "" {
+		return ecode.InvalidParams, s
+	}
+
+	if salesReturn.Repository == "" {
+		return ecode.InvalidParams, s
+	}
+
+	if salesReturn.MemberId == 0 {
+		return ecode.InvalidParams, s
+	}
+
+	t, err := checkTimeFormat(salesReturn.ReturnDate)
+	if err != nil {
+		return ecode.InvalidParams, s
+	}
+
+	s.ClientId = salesReturn.ClientId
+	s.ReturnDate = t
+	s.Number = salesReturn.Number
+	s.Repository = salesReturn.Repository
+	s.MemberId = salesReturn.MemberId
+	s.Status = salesReturn.Status
+	s.Reason = salesReturn.Reason
+	s.Products = salesReturn.Products
+
+	return ecode.OK, s
+}
diff --git a/docs/docs.go b/docs/docs.go
index 849e893..fcdb128 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -3056,6 +3056,113 @@
                 }
             }
         },
+        "/api/salesReturn/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SalesReturn"
+                ],
+                "summary": "娣诲姞閿�鍞��璐�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddSalesReturnRequest"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/salesReturn/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SalesReturn"
+                ],
+                "summary": "鍒犻櫎閿�鍞��璐�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/salesReturn/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SalesReturn"
+                ],
+                "summary": "鑾峰彇閿�鍞��璐у垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/salesReturn/update/{id}": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SalesReturn"
+                ],
+                "summary": "鏇存柊閿�鍞��璐�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateSalesReturnRequest"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/salesSources/add": {
             "post": {
                 "produces": [
@@ -5210,6 +5317,14 @@
                 }
             }
         },
+        "request.AddSalesReturnRequest": {
+            "type": "object",
+            "properties": {
+                "salesReturn": {
+                    "$ref": "#/definitions/request.SalesReturn"
+                }
+            }
+        },
         "request.AddSalesSources": {
             "type": "object",
             "required": [
@@ -5498,9 +5613,6 @@
                 "deliveryDate": {
                     "type": "string"
                 },
-                "id": {
-                    "type": "integer"
-                },
                 "memberId": {
                     "type": "integer"
                 },
@@ -5529,6 +5641,38 @@
                     "type": "string"
                 },
                 "wechatOrderStatus": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.SalesReturn": {
+            "type": "object",
+            "properties": {
+                "clientId": {
+                    "type": "integer"
+                },
+                "memberId": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "products": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
+                },
+                "reason": {
+                    "type": "string"
+                },
+                "repository": {
+                    "type": "string"
+                },
+                "returnDate": {
+                    "type": "string"
+                },
+                "status": {
                     "type": "integer"
                 }
             }
@@ -6438,6 +6582,41 @@
                 }
             }
         },
+        "request.UpdateSalesReturnRequest": {
+            "type": "object",
+            "properties": {
+                "clientId": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "memberId": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "products": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
+                },
+                "reason": {
+                    "type": "string"
+                },
+                "repository": {
+                    "type": "string"
+                },
+                "returnDate": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.UpdateSalesSources": {
             "type": "object",
             "required": [
diff --git a/docs/swagger.json b/docs/swagger.json
index 6434c7b..609ea9b 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -3044,6 +3044,113 @@
                 }
             }
         },
+        "/api/salesReturn/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SalesReturn"
+                ],
+                "summary": "娣诲姞閿�鍞��璐�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddSalesReturnRequest"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/salesReturn/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SalesReturn"
+                ],
+                "summary": "鍒犻櫎閿�鍞��璐�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/salesReturn/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SalesReturn"
+                ],
+                "summary": "鑾峰彇閿�鍞��璐у垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/salesReturn/update/{id}": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SalesReturn"
+                ],
+                "summary": "鏇存柊閿�鍞��璐�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateSalesReturnRequest"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/salesSources/add": {
             "post": {
                 "produces": [
@@ -5198,6 +5305,14 @@
                 }
             }
         },
+        "request.AddSalesReturnRequest": {
+            "type": "object",
+            "properties": {
+                "salesReturn": {
+                    "$ref": "#/definitions/request.SalesReturn"
+                }
+            }
+        },
         "request.AddSalesSources": {
             "type": "object",
             "required": [
@@ -5486,9 +5601,6 @@
                 "deliveryDate": {
                     "type": "string"
                 },
-                "id": {
-                    "type": "integer"
-                },
                 "memberId": {
                     "type": "integer"
                 },
@@ -5517,6 +5629,38 @@
                     "type": "string"
                 },
                 "wechatOrderStatus": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.SalesReturn": {
+            "type": "object",
+            "properties": {
+                "clientId": {
+                    "type": "integer"
+                },
+                "memberId": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "products": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
+                },
+                "reason": {
+                    "type": "string"
+                },
+                "repository": {
+                    "type": "string"
+                },
+                "returnDate": {
+                    "type": "string"
+                },
+                "status": {
                     "type": "integer"
                 }
             }
@@ -6426,6 +6570,41 @@
                 }
             }
         },
+        "request.UpdateSalesReturnRequest": {
+            "type": "object",
+            "properties": {
+                "clientId": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "memberId": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "products": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Product"
+                    }
+                },
+                "reason": {
+                    "type": "string"
+                },
+                "repository": {
+                    "type": "string"
+                },
+                "returnDate": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.UpdateSalesSources": {
             "type": "object",
             "required": [
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 0b2fc53..38dad52 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -1044,6 +1044,11 @@
         description: 鍟嗘満鏉ユ簮ID
         type: integer
     type: object
+  request.AddSalesReturnRequest:
+    properties:
+      salesReturn:
+        $ref: '#/definitions/request.SalesReturn'
+    type: object
   request.AddSalesSources:
     properties:
       name:
@@ -1245,8 +1250,6 @@
         type: string
       deliveryDate:
         type: string
-      id:
-        type: integer
       memberId:
         type: integer
       number:
@@ -1266,6 +1269,27 @@
       signTime:
         type: string
       wechatOrderStatus:
+        type: integer
+    type: object
+  request.SalesReturn:
+    properties:
+      clientId:
+        type: integer
+      memberId:
+        type: integer
+      number:
+        type: string
+      products:
+        items:
+          $ref: '#/definitions/model.Product'
+        type: array
+      reason:
+        type: string
+      repository:
+        type: string
+      returnDate:
+        type: string
+      status:
         type: integer
     type: object
   request.SetCity:
@@ -1879,6 +1903,29 @@
         type: integer
       sales_sources_id:
         description: 鍟嗘満鏉ユ簮ID
+        type: integer
+    type: object
+  request.UpdateSalesReturnRequest:
+    properties:
+      clientId:
+        type: integer
+      id:
+        type: integer
+      memberId:
+        type: integer
+      number:
+        type: string
+      products:
+        items:
+          $ref: '#/definitions/model.Product'
+        type: array
+      reason:
+        type: string
+      repository:
+        type: string
+      returnDate:
+        type: string
+      status:
         type: integer
     type: object
   request.UpdateSalesSources:
@@ -3999,6 +4046,74 @@
       summary: 鏇存柊閿�鍞嚎绱�
       tags:
       - SalesLeads
+  /api/salesReturn/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddSalesReturnRequest'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞閿�鍞��璐�
+      tags:
+      - SalesReturn
+  /api/salesReturn/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:
+      - SalesReturn
+  /api/salesReturn/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鑾峰彇閿�鍞��璐у垪琛�
+      tags:
+      - SalesReturn
+  /api/salesReturn/update/{id}:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateSalesReturnRequest'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊閿�鍞��璐�
+      tags:
+      - SalesReturn
   /api/salesSources/add:
     post:
       parameters:
diff --git a/model/index.go b/model/index.go
index 2d29e86..0c2846c 100644
--- a/model/index.go
+++ b/model/index.go
@@ -51,6 +51,7 @@
 		SubOrder{},
 		Product{},
 		SalesDetails{},
+		SalesReturn{},
 	)
 	return err
 }
diff --git a/model/request/salesReturn.go b/model/request/salesReturn.go
new file mode 100644
index 0000000..9be348a
--- /dev/null
+++ b/model/request/salesReturn.go
@@ -0,0 +1,23 @@
+package request
+
+import "aps_crm/model"
+
+type AddSalesReturnRequest struct {
+	SalesReturn SalesReturn
+}
+
+type SalesReturn struct {
+	ClientId   int             `json:"clientId" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
+	Number     string          `json:"number" gorm:"column:number;type:varchar(255);comment:閫�璐у崟鍙�"`
+	Repository string          `json:"repository" gorm:"column:repository;type:varchar(255);comment:浠撳簱"`
+	MemberId   int             `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
+	ReturnDate string          `json:"returnDate" gorm:"column:return_date;type:datetime;comment:閫�璐ф棩鏈�"`
+	Status     int             `json:"status" gorm:"column:status;type:int;comment:閫�璐х姸鎬�"`
+	Reason     string          `json:"reason" gorm:"column:reason;type:varchar(255);comment:閫�璐у師鍥�"`
+	Products   []model.Product `json:"products" gorm:"many2many:salesReturn_product;"`
+}
+
+type UpdateSalesReturnRequest struct {
+	Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+	SalesReturn
+}
diff --git a/model/response/response.go b/model/response/response.go
index ef188e4..666cad4 100644
--- a/model/response/response.go
+++ b/model/response/response.go
@@ -137,4 +137,8 @@
 	SalesDetailsResponse struct {
 		List []*model.SalesDetails `json:"list"`
 	}
+
+	SalesReturnResponse struct {
+		List []*model.SalesReturn `json:"list"`
+	}
 )
diff --git a/model/salesReturn.go b/model/salesReturn.go
new file mode 100644
index 0000000..d72c54c
--- /dev/null
+++ b/model/salesReturn.go
@@ -0,0 +1,79 @@
+package model
+
+import (
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+	"time"
+)
+
+type (
+	SalesReturn struct {
+		Id         int       `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		ClientId   int       `json:"clientId" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
+		Number     string    `json:"number" gorm:"column:number;type:varchar(255);comment:閫�璐у崟鍙�"`
+		Repository string    `json:"repository" gorm:"column:repository;type:varchar(255);comment:浠撳簱"`
+		MemberId   int       `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
+		ReturnDate time.Time `json:"returnDate" gorm:"column:return_date;type:datetime;comment:閫�璐ф棩鏈�"`
+		Status     int       `json:"status" gorm:"column:status;type:int;comment:閫�璐х姸鎬�"`
+		Reason     string    `json:"reason" gorm:"column:reason;type:varchar(255);comment:閫�璐у師鍥�"`
+		Products   []Product `json:"products" gorm:"many2many:salesReturn_product;"`
+	}
+
+	SalesReturnSearch struct {
+		SalesReturn
+		Orm *gorm.DB
+	}
+)
+
+func (SalesReturn) TableName() string {
+	return "sales_return"
+}
+
+func NewSalesReturnSearch() *SalesReturnSearch {
+	return &SalesReturnSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *SalesReturnSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&SalesReturn{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+
+	return db
+}
+
+func (slf *SalesReturnSearch) Create(record *SalesReturn) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *SalesReturnSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&SalesReturn{}).Error
+}
+
+func (slf *SalesReturnSearch) Update(record *SalesReturn) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *SalesReturnSearch) Find() (*SalesReturn, error) {
+	var db = slf.build()
+	var record = new(SalesReturn)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *SalesReturnSearch) FindAll() ([]*SalesReturn, error) {
+	var db = slf.build()
+	var record = make([]*SalesReturn, 0)
+	err := db.Preload("Products").Find(&record).Error
+	return record, err
+}
+
+func (slf *SalesReturnSearch) SetId(id int) *SalesReturnSearch {
+	slf.Id = id
+	return slf
+}
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index b4008d2..1808279 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -205,4 +205,11 @@
 	SalesDetailsUpdateErr = 2800005 // 鏇存柊閿�鍞槑缁嗗け璐�
 	SalesDetailsDeleteErr = 2800006 // 鍒犻櫎閿�鍞槑缁嗗け璐�
 
+	SalesReturnExist     = 2900001 // 閿�鍞��璐у崟宸插瓨鍦�
+	SalesReturnNotExist  = 2900002 // 閿�鍞��璐у崟涓嶅瓨鍦�
+	SalesReturnListErr   = 2900003 // 鑾峰彇閿�鍞��璐у崟鍒楄〃澶辫触
+	SalesReturnSetErr    = 2900004 // 璁剧疆閿�鍞��璐у崟澶辫触
+	SalesReturnUpdateErr = 2900005 // 鏇存柊閿�鍞��璐у崟澶辫触
+	SalesReturnDeleteErr = 2900006 // 鍒犻櫎閿�鍞��璐у崟澶辫触
+
 )
diff --git a/router/index.go b/router/index.go
index 6b96a23..8fc92b1 100644
--- a/router/index.go
+++ b/router/index.go
@@ -41,6 +41,7 @@
 	MasterOrderRouter
 	SubOrderRouter
 	SalesDetailsRouter
+	SalesReturnRouter
 }
 
 func InitRouter() *gin.Engine {
@@ -99,6 +100,7 @@
 		routerGroup.InitMasterOrderRouter(PrivateGroup)       // 娉ㄥ唽masterOrder璺敱
 		routerGroup.InitSubOrderRouter(PrivateGroup)          // 娉ㄥ唽subOrder璺敱
 		routerGroup.InitSalesDetailsRouter(PrivateGroup)      // 娉ㄥ唽salesDetails璺敱
+		routerGroup.InitSalesReturnRouter(PrivateGroup)       // 娉ㄥ唽salesReturn璺敱
 	}
 	return Router
 }
diff --git a/router/salesReturn.go b/router/salesReturn.go
new file mode 100644
index 0000000..8c73643
--- /dev/null
+++ b/router/salesReturn.go
@@ -0,0 +1,19 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type SalesReturnRouter struct{}
+
+func (s *SalesReturnRouter) InitSalesReturnRouter(router *gin.RouterGroup) {
+	salesReturnRouter := router.Group("salesReturn")
+	salesReturnApi := v1.ApiGroup.SalesReturnApi
+	{
+		salesReturnRouter.POST("add", salesReturnApi.Add)             // 娣诲姞閿�鍞��璐�
+		salesReturnRouter.DELETE("delete/:id", salesReturnApi.Delete) // 鍒犻櫎閿�鍞��璐�
+		salesReturnRouter.PUT("update", salesReturnApi.Update)        // 鏇存柊閿�鍞��璐�
+		salesReturnRouter.GET("list", salesReturnApi.List)            // 鑾峰彇閿�鍞��璐у垪琛�
+	}
+}
diff --git a/service/index.go b/service/index.go
index fd6af9f..b7c5f56 100644
--- a/service/index.go
+++ b/service/index.go
@@ -30,6 +30,7 @@
 	MasterOrderService
 	SubOrderService
 	SalesDetailsService
+	SalesReturnService
 }
 
 var ServiceGroup = new(Group)
diff --git a/service/salesReturn.go b/service/salesReturn.go
new file mode 100644
index 0000000..f354d2d
--- /dev/null
+++ b/service/salesReturn.go
@@ -0,0 +1,54 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/pkg/ecode"
+)
+
+type SalesReturnService struct{}
+
+func (SalesReturnService) AddSalesReturn(salesReturn *model.SalesReturn) int {
+	err := model.NewSalesReturnSearch().Create(salesReturn)
+	if err != nil {
+		return ecode.SalesReturnExist
+	}
+
+	return ecode.OK
+}
+
+func (SalesReturnService) DeleteSalesReturn(id int) int {
+	_, err := model.NewSalesReturnSearch().SetId(id).Find()
+	if err != nil {
+		return ecode.SalesReturnNotExist
+	}
+
+	err = model.NewSalesReturnSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.SalesReturnNotExist
+	}
+	return ecode.OK
+}
+
+func (SalesReturnService) GetSalesReturnList() ([]*model.SalesReturn, int) {
+	list, err := model.NewSalesReturnSearch().FindAll()
+	if err != nil {
+		return nil, ecode.SalesReturnListErr
+	}
+
+	return list, ecode.OK
+}
+
+func (SalesReturnService) UpdateSalesReturn(salesReturn *model.SalesReturn) int {
+	// check salesReturn exist
+	_, err := model.NewSalesReturnSearch().SetId(salesReturn.Id).Find()
+	if err != nil {
+		return ecode.SalesReturnNotExist
+	}
+
+	err = model.NewSalesReturnSearch().SetId(salesReturn.Id).Update(salesReturn)
+	if err != nil {
+		return ecode.SalesReturnSetErr
+	}
+
+	return ecode.OK
+}

--
Gitblit v1.8.0