From 6e87a1f6795af50133b10fa853fd6c2d14bb698c Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期日, 13 八月 2023 15:20:27 +0800
Subject: [PATCH] 完善退款单

---
 api/v1/salesRefund.go        |   31 ---
 model/salesRefund.go         |   34 ++-
 service/salesRefund.go       |   36 ++++
 model/request/salesRefund.go |   25 +-
 pkg/ecode/code.go            |   14 +
 constvar/salesRefund.go      |    7 
 docs/swagger.yaml            |   68 +++++++
 docs/docs.go                 |  103 ++++++++++++
 docs/swagger.json            |  103 ++++++++++++
 pkg/ecode/msg.go             |    2 
 model/receipt.go             |    9 
 11 files changed, 353 insertions(+), 79 deletions(-)

diff --git a/api/v1/salesRefund.go b/api/v1/salesRefund.go
index 8da5dd5..1027e34 100644
--- a/api/v1/salesRefund.go
+++ b/api/v1/salesRefund.go
@@ -98,34 +98,13 @@
 	ctx.Ok()
 }
 
-
 func checkSalesRefundParams(salesRefund request.SalesRefund) (errCode int, salesRefundRes model.SalesRefund) {
-	//if salesRefund.ClientId == 0 {
-	//	return ecode.InvalidParams, salesRefundRes
-	//}
-	//
-	//if salesRefund.Number == "" {
-	//	return ecode.InvalidParams, salesRefundRes
-	//}
-	//
-	//if salesRefund.MemberId == 0 {
-	//	return ecode.InvalidParams, salesRefundRes
-	//}
-	//
-	//if salesRefund.RefundDate == "" {
-	//	return ecode.InvalidParams, salesRefundRes
-	//}
-
-	t, err := checkTimeFormat(salesRefund.RefundDate)
-	if err != nil {
-		return ecode.InvalidParams, salesRefundRes
-	}
-	salesRefundRes.RefundDate = t
+	salesRefundRes.RefundDate = salesRefund.RefundDate
 	salesRefundRes.ClientId = salesRefund.ClientId
 	salesRefundRes.Number = salesRefund.Number
 	salesRefundRes.MemberId = salesRefund.MemberId
-	salesRefundRes.RefundMethod = salesRefund.RefundMethod
-	salesRefundRes.AccountId = salesRefund.AccountId
+	salesRefundRes.PaymentTypeId = salesRefund.PaymentTypeId
+	salesRefundRes.BankAccountId = salesRefund.BankAccountId
 	salesRefundRes.IsInvoice = salesRefund.IsInvoice
 	salesRefundRes.Reason = salesRefund.Reason
 	salesRefundRes.Products = salesRefund.Products
@@ -155,7 +134,7 @@
 	}
 
 	ctx.OkWithDetailed(response.SalesRefundResponse{
-		List: salesRefunds,
+		List:  salesRefunds,
 		Count: int(total),
 	})
-}
\ No newline at end of file
+}
diff --git a/constvar/salesRefund.go b/constvar/salesRefund.go
new file mode 100644
index 0000000..0f65a91
--- /dev/null
+++ b/constvar/salesRefund.go
@@ -0,0 +1,7 @@
+package constvar
+
+type RefundSourceType int //鏉ユ簮绫诲瀷锛�1閿�鍞��璐э級
+
+const (
+	RefundSourceTypeSalesReturn RefundSourceType = 1 //閿�鍞��璐�
+)
diff --git a/docs/docs.go b/docs/docs.go
index 23edc3c..b96c515 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -10028,6 +10028,18 @@
                 "ReceiptSourceTypeChuKuDan"
             ]
         },
+        "constvar.RefundSourceType": {
+            "type": "integer",
+            "enum": [
+                1
+            ],
+            "x-enum-comments": {
+                "RefundSourceTypeSalesReturn": "閿�鍞��璐�"
+            },
+            "x-enum-varnames": [
+                "RefundSourceTypeSalesReturn"
+            ]
+        },
         "constvar.SalesDetailsKeywordType": {
             "type": "string",
             "enum": [
@@ -11282,6 +11294,9 @@
                     "description": "鏀舵閲戦",
                     "type": "number"
                 },
+                "bankAccount": {
+                    "$ref": "#/definitions/model.BankAccount"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -11301,9 +11316,20 @@
                     "description": "甯佺",
                     "type": "string"
                 },
+                "paymentType": {
+                    "$ref": "#/definitions/model.PaymentType"
+                },
                 "paymentTypeId": {
                     "description": "鏀舵鏂瑰紡ID",
                     "type": "integer"
+                },
+                "principal": {
+                    "description": "璐熻矗浜篿d",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/model.User"
+                        }
+                    ]
                 },
                 "principalId": {
                     "description": "璐熻矗浜篿d",
@@ -11721,8 +11747,15 @@
         "model.SalesRefund": {
             "type": "object",
             "properties": {
-                "accountId": {
+                "bankAccount": {
+                    "$ref": "#/definitions/model.BankAccount"
+                },
+                "bankAccountId": {
+                    "description": "璐︽埛id",
                     "type": "integer"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
                 },
                 "clientId": {
                     "type": "integer"
@@ -11739,6 +11772,13 @@
                 "number": {
                     "type": "string"
                 },
+                "paymentType": {
+                    "$ref": "#/definitions/model.PaymentType"
+                },
+                "paymentTypeId": {
+                    "description": "鏀舵鏂瑰紡ID",
+                    "type": "integer"
+                },
                 "products": {
                     "type": "array",
                     "items": {
@@ -11751,8 +11791,17 @@
                 "refundDate": {
                     "type": "string"
                 },
-                "refundMethod": {
-                    "type": "string"
+                "sourceId": {
+                    "description": "婧愬崟id",
+                    "type": "integer"
+                },
+                "sourceType": {
+                    "description": "鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.RefundSourceType"
+                        }
+                    ]
                 }
             }
         },
@@ -13187,6 +13236,9 @@
                     "description": "鏀舵閲戦",
                     "type": "number"
                 },
+                "bankAccount": {
+                    "$ref": "#/definitions/model.BankAccount"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -13206,9 +13258,20 @@
                     "description": "甯佺",
                     "type": "string"
                 },
+                "paymentType": {
+                    "$ref": "#/definitions/model.PaymentType"
+                },
                 "paymentTypeId": {
                     "description": "鏀舵鏂瑰紡ID",
                     "type": "integer"
+                },
+                "principal": {
+                    "description": "璐熻矗浜篿d",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/model.User"
+                        }
+                    ]
                 },
                 "principalId": {
                     "description": "璐熻矗浜篿d",
@@ -14933,7 +14996,8 @@
         "request.SalesRefund": {
             "type": "object",
             "properties": {
-                "accountId": {
+                "bankAccountId": {
+                    "description": "璐︽埛id",
                     "type": "integer"
                 },
                 "clientId": {
@@ -14948,6 +15012,10 @@
                 "number": {
                     "type": "string"
                 },
+                "paymentTypeId": {
+                    "description": "鏀舵鏂瑰紡ID",
+                    "type": "integer"
+                },
                 "products": {
                     "type": "array",
                     "items": {
@@ -14960,8 +15028,17 @@
                 "refundDate": {
                     "type": "string"
                 },
-                "refundMethod": {
-                    "type": "string"
+                "sourceId": {
+                    "description": "婧愬崟id",
+                    "type": "integer"
+                },
+                "sourceType": {
+                    "description": "鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.RefundSourceType"
+                        }
+                    ]
                 }
             }
         },
@@ -16067,6 +16144,9 @@
                     "description": "鏀舵閲戦",
                     "type": "number"
                 },
+                "bankAccount": {
+                    "$ref": "#/definitions/model.BankAccount"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -16086,10 +16166,21 @@
                     "description": "甯佺",
                     "type": "string"
                 },
+                "paymentType": {
+                    "$ref": "#/definitions/model.PaymentType"
+                },
                 "paymentTypeId": {
                     "description": "鏀舵鏂瑰紡ID",
                     "type": "integer"
                 },
+                "principal": {
+                    "description": "璐熻矗浜篿d",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/model.User"
+                        }
+                    ]
+                },
                 "principalId": {
                     "description": "璐熻矗浜篿d",
                     "type": "integer"
diff --git a/docs/swagger.json b/docs/swagger.json
index cc9cc72..b653cad 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -10016,6 +10016,18 @@
                 "ReceiptSourceTypeChuKuDan"
             ]
         },
+        "constvar.RefundSourceType": {
+            "type": "integer",
+            "enum": [
+                1
+            ],
+            "x-enum-comments": {
+                "RefundSourceTypeSalesReturn": "閿�鍞��璐�"
+            },
+            "x-enum-varnames": [
+                "RefundSourceTypeSalesReturn"
+            ]
+        },
         "constvar.SalesDetailsKeywordType": {
             "type": "string",
             "enum": [
@@ -11270,6 +11282,9 @@
                     "description": "鏀舵閲戦",
                     "type": "number"
                 },
+                "bankAccount": {
+                    "$ref": "#/definitions/model.BankAccount"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -11289,9 +11304,20 @@
                     "description": "甯佺",
                     "type": "string"
                 },
+                "paymentType": {
+                    "$ref": "#/definitions/model.PaymentType"
+                },
                 "paymentTypeId": {
                     "description": "鏀舵鏂瑰紡ID",
                     "type": "integer"
+                },
+                "principal": {
+                    "description": "璐熻矗浜篿d",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/model.User"
+                        }
+                    ]
                 },
                 "principalId": {
                     "description": "璐熻矗浜篿d",
@@ -11709,8 +11735,15 @@
         "model.SalesRefund": {
             "type": "object",
             "properties": {
-                "accountId": {
+                "bankAccount": {
+                    "$ref": "#/definitions/model.BankAccount"
+                },
+                "bankAccountId": {
+                    "description": "璐︽埛id",
                     "type": "integer"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
                 },
                 "clientId": {
                     "type": "integer"
@@ -11727,6 +11760,13 @@
                 "number": {
                     "type": "string"
                 },
+                "paymentType": {
+                    "$ref": "#/definitions/model.PaymentType"
+                },
+                "paymentTypeId": {
+                    "description": "鏀舵鏂瑰紡ID",
+                    "type": "integer"
+                },
                 "products": {
                     "type": "array",
                     "items": {
@@ -11739,8 +11779,17 @@
                 "refundDate": {
                     "type": "string"
                 },
-                "refundMethod": {
-                    "type": "string"
+                "sourceId": {
+                    "description": "婧愬崟id",
+                    "type": "integer"
+                },
+                "sourceType": {
+                    "description": "鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.RefundSourceType"
+                        }
+                    ]
                 }
             }
         },
@@ -13175,6 +13224,9 @@
                     "description": "鏀舵閲戦",
                     "type": "number"
                 },
+                "bankAccount": {
+                    "$ref": "#/definitions/model.BankAccount"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -13194,9 +13246,20 @@
                     "description": "甯佺",
                     "type": "string"
                 },
+                "paymentType": {
+                    "$ref": "#/definitions/model.PaymentType"
+                },
                 "paymentTypeId": {
                     "description": "鏀舵鏂瑰紡ID",
                     "type": "integer"
+                },
+                "principal": {
+                    "description": "璐熻矗浜篿d",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/model.User"
+                        }
+                    ]
                 },
                 "principalId": {
                     "description": "璐熻矗浜篿d",
@@ -14921,7 +14984,8 @@
         "request.SalesRefund": {
             "type": "object",
             "properties": {
-                "accountId": {
+                "bankAccountId": {
+                    "description": "璐︽埛id",
                     "type": "integer"
                 },
                 "clientId": {
@@ -14936,6 +15000,10 @@
                 "number": {
                     "type": "string"
                 },
+                "paymentTypeId": {
+                    "description": "鏀舵鏂瑰紡ID",
+                    "type": "integer"
+                },
                 "products": {
                     "type": "array",
                     "items": {
@@ -14948,8 +15016,17 @@
                 "refundDate": {
                     "type": "string"
                 },
-                "refundMethod": {
-                    "type": "string"
+                "sourceId": {
+                    "description": "婧愬崟id",
+                    "type": "integer"
+                },
+                "sourceType": {
+                    "description": "鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.RefundSourceType"
+                        }
+                    ]
                 }
             }
         },
@@ -16055,6 +16132,9 @@
                     "description": "鏀舵閲戦",
                     "type": "number"
                 },
+                "bankAccount": {
+                    "$ref": "#/definitions/model.BankAccount"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -16074,10 +16154,21 @@
                     "description": "甯佺",
                     "type": "string"
                 },
+                "paymentType": {
+                    "$ref": "#/definitions/model.PaymentType"
+                },
                 "paymentTypeId": {
                     "description": "鏀舵鏂瑰紡ID",
                     "type": "integer"
                 },
+                "principal": {
+                    "description": "璐熻矗浜篿d",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/model.User"
+                        }
+                    ]
+                },
                 "principalId": {
                     "description": "璐熻矗浜篿d",
                     "type": "integer"
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 787e7f1..6e74083 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -142,6 +142,14 @@
     - ReceiptSourceTypeInvoice
     - ReceiptSourceTypeCollectionPlan
     - ReceiptSourceTypeChuKuDan
+  constvar.RefundSourceType:
+    enum:
+    - 1
+    type: integer
+    x-enum-comments:
+      RefundSourceTypeSalesReturn: 閿�鍞��璐�
+    x-enum-varnames:
+    - RefundSourceTypeSalesReturn
   constvar.SalesDetailsKeywordType:
     enum:
     - 瀹㈡埛鍚嶇О
@@ -1002,6 +1010,8 @@
       amount:
         description: 鏀舵閲戦
         type: number
+      bankAccount:
+        $ref: '#/definitions/model.BankAccount'
       bankAccountId:
         description: 璐︽埛id
         type: integer
@@ -1016,9 +1026,15 @@
       moneyType:
         description: 甯佺
         type: string
+      paymentType:
+        $ref: '#/definitions/model.PaymentType'
       paymentTypeId:
         description: 鏀舵鏂瑰紡ID
         type: integer
+      principal:
+        allOf:
+        - $ref: '#/definitions/model.User'
+        description: 璐熻矗浜篿d
       principalId:
         description: 璐熻矗浜篿d
         type: integer
@@ -1294,8 +1310,13 @@
     type: object
   model.SalesRefund:
     properties:
-      accountId:
+      bankAccount:
+        $ref: '#/definitions/model.BankAccount'
+      bankAccountId:
+        description: 璐︽埛id
         type: integer
+      client:
+        $ref: '#/definitions/model.Client'
       clientId:
         type: integer
       id:
@@ -1306,6 +1327,11 @@
         type: integer
       number:
         type: string
+      paymentType:
+        $ref: '#/definitions/model.PaymentType'
+      paymentTypeId:
+        description: 鏀舵鏂瑰紡ID
+        type: integer
       products:
         items:
           $ref: '#/definitions/model.Product'
@@ -1314,8 +1340,13 @@
         type: string
       refundDate:
         type: string
-      refundMethod:
-        type: string
+      sourceId:
+        description: 婧愬崟id
+        type: integer
+      sourceType:
+        allOf:
+        - $ref: '#/definitions/constvar.RefundSourceType'
+        description: 鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級
     type: object
   model.SalesReturn:
     properties:
@@ -2283,6 +2314,8 @@
       amount:
         description: 鏀舵閲戦
         type: number
+      bankAccount:
+        $ref: '#/definitions/model.BankAccount'
       bankAccountId:
         description: 璐︽埛id
         type: integer
@@ -2297,9 +2330,15 @@
       moneyType:
         description: 甯佺
         type: string
+      paymentType:
+        $ref: '#/definitions/model.PaymentType'
       paymentTypeId:
         description: 鏀舵鏂瑰紡ID
         type: integer
+      principal:
+        allOf:
+        - $ref: '#/definitions/model.User'
+        description: 璐熻矗浜篿d
       principalId:
         description: 璐熻矗浜篿d
         type: integer
@@ -3482,7 +3521,8 @@
     type: object
   request.SalesRefund:
     properties:
-      accountId:
+      bankAccountId:
+        description: 璐︽埛id
         type: integer
       clientId:
         type: integer
@@ -3492,6 +3532,9 @@
         type: integer
       number:
         type: string
+      paymentTypeId:
+        description: 鏀舵鏂瑰紡ID
+        type: integer
       products:
         items:
           $ref: '#/definitions/model.Product'
@@ -3500,8 +3543,13 @@
         type: string
       refundDate:
         type: string
-      refundMethod:
-        type: string
+      sourceId:
+        description: 婧愬崟id
+        type: integer
+      sourceType:
+        allOf:
+        - $ref: '#/definitions/constvar.RefundSourceType'
+        description: 鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級
     type: object
   request.SalesReturn:
     properties:
@@ -4245,6 +4293,8 @@
       amount:
         description: 鏀舵閲戦
         type: number
+      bankAccount:
+        $ref: '#/definitions/model.BankAccount'
       bankAccountId:
         description: 璐︽埛id
         type: integer
@@ -4259,9 +4309,15 @@
       moneyType:
         description: 甯佺
         type: string
+      paymentType:
+        $ref: '#/definitions/model.PaymentType'
       paymentTypeId:
         description: 鏀舵鏂瑰紡ID
         type: integer
+      principal:
+        allOf:
+        - $ref: '#/definitions/model.User'
+        description: 璐熻矗浜篿d
       principalId:
         description: 璐熻矗浜篿d
         type: integer
diff --git a/model/receipt.go b/model/receipt.go
index bd862ba..c93385f 100644
--- a/model/receipt.go
+++ b/model/receipt.go
@@ -17,13 +17,16 @@
 		SourceType    constvar.ReceiptSourceType `gorm:"column:source_type;type:int;not null;default 0;comment:鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級" json:"sourceType"` // 鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級
 		SourceId      int                        `gorm:"column:source_id;type:int;not null;default 0;comment:婧愬崟id " json:"sourceId"`                               // 婧愬崟id
 		PrincipalId   int                        `gorm:"column:principal_id;type:int;not null;default 0;comment:璐熻矗浜篿d" json:"principalId"`                         // 璐熻矗浜篿d
+		Principal     User                       `gorm:"foreignKey:PrincipalId" json:"principal"`                                                                  // 璐熻矗浜篿d
 		ReceiptDate   string                     `gorm:"column:receipt_date;type:varchar(255);not null;default '';comment:鏀舵鏃ユ湡" json:"receiptDate"`                // 鏀舵鏃ユ湡
 		MoneyType     string                     `gorm:"column:money_type;type:varchar(255);not null;default '';comment:甯佺" json:"moneyType"`                      // 甯佺
 		Amount        decimal.Decimal            `gorm:"column:amount;type:decimal(12,2);not null;default '0.00';comment:鏀舵閲戦" json:"amount"`                      // 鏀舵閲戦
 		PaymentTypeId int                        `gorm:"column:payment_type_id;type:int;not null;default 0;comment:鏀舵鏂瑰紡ID" json:"paymentTypeId"`                   // 鏀舵鏂瑰紡ID
-		BankAccountId int                        `gorm:"column:bank_account_id;type:int;not null;default 0;comment:璐︽埛id" json:"bankAccountId"`                     // 璐︽埛id
-		Remark        string                     `gorm:"column:remark;type:varchar(255);not null;default '';comment:澶囨敞" json:"remark"`                             // 澶囨敞
-		FileId        int                        `gorm:"column:file_id;type:int;not null;default 0;comment:闄勪欢id" json:"fileId"`                                    // 闄勪欢id
+		PaymentType   PaymentType                `gorm:"foreignKey:PaymentTypeId" json:"paymentType"`
+		BankAccountId int                        `gorm:"column:bank_account_id;type:int;not null;default 0;comment:璐︽埛id" json:"bankAccountId"` // 璐︽埛id
+		BankAccount   BankAccount                `gorm:"foreignKey:BankAccountId" json:"bankAccount"`
+		Remark        string                     `gorm:"column:remark;type:varchar(255);not null;default '';comment:澶囨敞" json:"remark"` // 澶囨敞
+		FileId        int                        `gorm:"column:file_id;type:int;not null;default 0;comment:闄勪欢id" json:"fileId"`        // 闄勪欢id
 		gorm.Model    `json:"-"`
 	}
 
diff --git a/model/request/salesRefund.go b/model/request/salesRefund.go
index 04b792b..bc31ee5 100644
--- a/model/request/salesRefund.go
+++ b/model/request/salesRefund.go
@@ -1,21 +1,26 @@
 package request
 
-import "aps_crm/model"
+import (
+	"aps_crm/constvar"
+	"aps_crm/model"
+)
 
 type AddSalesRefundRequest struct {
 	SalesRefund SalesRefund `json:"salesRefund"`
 }
 
 type SalesRefund struct {
-	ClientId     int             `json:"clientId"`
-	Number       string          `json:"number"`
-	MemberId     int             `json:"memberId"`
-	RefundDate   string          `json:"refundDate"`
-	RefundMethod string          `json:"refundMethod"`
-	AccountId    int             `json:"accountId"`
-	IsInvoice    int             `json:"isInvoice"`
-	Reason       string          `json:"reason"`
-	Products     []model.Product `json:"products"`
+	ClientId      int                       `json:"clientId"`
+	Number        string                    `json:"number"`
+	MemberId      int                       `json:"memberId"`
+	SourceType    constvar.RefundSourceType `gorm:"column:source_type;type:int;not null;default 0;comment:鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級" json:"sourceType"` // 鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級
+	SourceId      int                       `gorm:"column:source_id;type:int;not null;default 0;comment:婧愬崟id " json:"sourceId"`                               // 婧愬崟id
+	RefundDate    string                    `json:"refundDate"`
+	PaymentTypeId int                       `gorm:"column:payment_type_id;type:int;not null;default 0;comment:鏀舵鏂瑰紡ID" json:"paymentTypeId"` // 鏀舵鏂瑰紡ID
+	BankAccountId int                       `gorm:"column:bank_account_id;type:int;not null;default 0;comment:璐︽埛id" json:"bankAccountId"`   // 璐︽埛id
+	IsInvoice     int                       `json:"isInvoice"`
+	Reason        string                    `json:"reason"`
+	Products      []*model.Product          `json:"products"`
 }
 
 type UpdateSalesRefundRequest struct {
diff --git a/model/salesRefund.go b/model/salesRefund.go
index e34be5b..0874372 100644
--- a/model/salesRefund.go
+++ b/model/salesRefund.go
@@ -1,35 +1,39 @@
 package model
 
 import (
+	"aps_crm/constvar"
 	"aps_crm/pkg/mysqlx"
 	"gorm.io/gorm"
-	"time"
 )
 
 type (
 	SalesRefund 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:閫�娆惧崟鍙�"`
-		MemberId     int       `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
-		RefundDate   time.Time `json:"refundDate" gorm:"column:refund_date;type:datetime;comment:閫�娆炬棩鏈�"`
-		RefundMethod string    `json:"refundMethod" gorm:"column:refund_method;type:varchar(255);comment:閫�娆炬柟寮�"`
-		AccountId    int       `json:"accountId" gorm:"column:account_id;type:int;comment:璐︽埛"`
-		IsInvoice    int       `json:"isInvoice" gorm:"column:is_invoice;type:int;comment:鏄惁寮�绁�"`
-		Reason       string    `json:"reason" gorm:"column:reason;type:varchar(255);comment:閫�娆惧師鍥�"`
-		Products     []Product `json:"products" gorm:"many2many:salesRefund_product;"`
-		gorm.Model   `json:"-"`
+		Id            int                       `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		ClientId      int                       `json:"clientId" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
+		Client        Client                    `json:"client" gorm:"foreignKey:ClientId"`
+		Number        string                    `json:"number" gorm:"column:number;type:varchar(255);comment:閫�娆惧崟鍙�"`
+		SourceType    constvar.RefundSourceType `gorm:"column:source_type;type:int;not null;default 0;comment:鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級" json:"sourceType"` // 鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級
+		SourceId      int                       `gorm:"column:source_id;type:int;not null;default 0;comment:婧愬崟id " json:"sourceId"`                               // 婧愬崟id
+		MemberId      int                       `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"`
+		RefundDate    string                    `json:"refundDate" gorm:"column:refund_date;type:datetime;comment:閫�娆炬棩鏈�"`
+		PaymentTypeId int                       `gorm:"column:payment_type_id;type:int;not null;default 0;comment:鏀舵鏂瑰紡ID" json:"paymentTypeId"` // 鏀舵鏂瑰紡ID
+		PaymentType   PaymentType               `gorm:"foreignKey:PaymentTypeId" json:"paymentType"`
+		BankAccountId int                       `gorm:"column:bank_account_id;type:int;not null;default 0;comment:璐︽埛id" json:"bankAccountId"` // 璐︽埛id
+		BankAccount   BankAccount               `gorm:"foreignKey:BankAccountId" json:"bankAccount"`
+		IsInvoice     int                       `json:"isInvoice" gorm:"column:is_invoice;type:int;comment:鏄惁寮�绁�"`
+		Reason        string                    `json:"reason" gorm:"column:reason;type:varchar(255);comment:閫�娆惧師鍥�"`
+		Products      []*Product                `json:"products" gorm:"many2many:salesRefund_product;"`
+		gorm.Model    `json:"-"`
 	}
 
 	SalesRefundSearch struct {
 		SalesRefund
 
-				Orm      *gorm.DB
+		Orm      *gorm.DB
 		Keyword  string
 		OrderBy  string
 		PageNum  int
 		PageSize int
-
 	}
 )
 
@@ -114,4 +118,4 @@
 func (slf *SalesRefundSearch) SetOrder(order string) *SalesRefundSearch {
 	slf.OrderBy = order
 	return slf
-}
\ No newline at end of file
+}
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index 6a3d1a2..45a6ee9 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -214,12 +214,14 @@
 	SalesReturnUpdateErr = 2900005 // 鏇存柊閿�鍞��璐у崟澶辫触
 	SalesReturnDeleteErr = 2900006 // 鍒犻櫎閿�鍞��璐у崟澶辫触
 
-	SalesRefundExist     = 3000001 // 閿�鍞��娆惧崟宸插瓨鍦�
-	SalesRefundNotExist  = 3000002 // 閿�鍞��娆惧崟涓嶅瓨鍦�
-	SalesRefundListErr   = 3000003 // 鑾峰彇閿�鍞��娆惧崟鍒楄〃澶辫触
-	SalesRefundSetErr    = 3000004 // 璁剧疆閿�鍞��娆惧崟澶辫触
-	SalesRefundUpdateErr = 3000005 // 鏇存柊閿�鍞��娆惧崟澶辫触
-	SalesRefundDeleteErr = 3000006 // 鍒犻櫎閿�鍞��娆惧崟澶辫触
+	SalesRefundExist                   = 3000001 // 閿�鍞��娆惧崟宸插瓨鍦�
+	SalesRefundNotExist                = 3000002 // 閿�鍞��娆惧崟涓嶅瓨鍦�
+	SalesRefundListErr                 = 3000003 // 鑾峰彇閿�鍞��娆惧崟鍒楄〃澶辫触
+	SalesRefundSetErr                  = 3000004 // 璁剧疆閿�鍞��娆惧崟澶辫触
+	SalesRefundUpdateErr               = 3000005 // 鏇存柊閿�鍞��娆惧崟澶辫触
+	SalesRefundDeleteErr               = 3000006 // 鍒犻櫎閿�鍞��娆惧崟澶辫触
+	SalesRefundProductNotExist         = 3000007 // 閫�璐т骇鍝佷笉瀛樺湪
+	SalesRefundProductPriceOrAmountErr = 3000009 // 閫�璐т骇鍝佷环鏍兼垨鏁伴噺閿欒
 
 	ContractExist     = 3100001 // 鍚堝悓宸插瓨鍦�
 	ContractNotExist  = 3100002 // 鍚堝悓涓嶅瓨鍦�
diff --git a/pkg/ecode/msg.go b/pkg/ecode/msg.go
index deeff57..f0df18e 100644
--- a/pkg/ecode/msg.go
+++ b/pkg/ecode/msg.go
@@ -23,6 +23,8 @@
 	SContractProductPriceLowerThanInvoiceAmountErr:             "浜у搧鎬讳环浣庝簬宸插紑绁ㄩ噾棰�",
 	SContractProductPriceLowerThanReceivedAmountErr:            "浜у搧鎬讳环浣庝簬宸叉敹閲戦",
 	SContractInvoiceProductPriceGreaterThanReceivableAmountErr: "寮�绁ㄦ�婚楂樹簬搴旀敹閲戦",
+	SalesRefundProductNotExist:                                 "閫�璐т骇鍝佷笉瀛樺湪",
+	SalesRefundProductPriceOrAmountErr:                         "閫�璐т骇鍝佷环鏍兼垨鏁伴噺閿欒",
 }
 
 func GetMsg(errCode int) (errMsg string) {
diff --git a/service/salesRefund.go b/service/salesRefund.go
index de91872..d3414df 100644
--- a/service/salesRefund.go
+++ b/service/salesRefund.go
@@ -8,11 +8,36 @@
 type SalesRefundService struct{}
 
 func (SalesRefundService) AddSalesRefund(salesRefund *model.SalesRefund) int {
-	err := model.NewSalesRefundSearch().Create(salesRefund)
+	salesReturnRecord, err := model.NewSalesReturnSearch().SetId(salesRefund.SourceId).Find()
+	if err != nil {
+		return ecode.SalesReturnNotExist
+	}
+
+	if code := CheckProduct(salesReturnRecord.Products, salesRefund.Products); code != ecode.OK {
+		return code
+	}
+
+	err = model.NewSalesRefundSearch().Create(salesRefund)
 	if err != nil {
 		return ecode.SalesRefundExist
 	}
 
+	return ecode.OK
+}
+
+func CheckProduct(returnProducts, refundProducts []*model.Product) int {
+	returnProductsMap := make(map[uint]*model.Product, len(returnProducts))
+	for _, product := range returnProducts {
+		returnProductsMap[product.Id] = product
+	}
+	for _, product := range refundProducts {
+		if returnProductsMap[product.Id] == nil {
+			return ecode.SalesRefundProductNotExist
+		}
+		if returnProductsMap[product.Id].Price != product.Price || product.Amount.GreaterThan(returnProductsMap[product.Id].Amount) {
+			return ecode.SalesRefundProductPriceOrAmountErr
+		}
+	}
 	return ecode.OK
 }
 
@@ -36,6 +61,15 @@
 		return ecode.SalesRefundNotExist
 	}
 
+	salesReturnRecord, err := model.NewSalesReturnSearch().SetId(salesRefund.SourceId).Find()
+	if err != nil {
+		return ecode.SalesReturnNotExist
+	}
+
+	if code := CheckProduct(salesReturnRecord.Products, salesRefund.Products); code != ecode.OK {
+		return code
+	}
+
 	err = model.NewSalesRefundSearch().SetId(salesRefund.Id).Update(salesRefund)
 	if err != nil {
 		return ecode.SalesRefundSetErr

--
Gitblit v1.8.0