From c42cff043c049c0b12aca91bca31cd0799ea6f7a Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 11 八月 2023 13:54:19 +0800
Subject: [PATCH] 增删改收款单时更改销售明细和服务合同应收金额

---
 model/serviceContract.go |   37 ++
 constvar/receipt.go      |   13 
 model/interface.go       |    8 
 model/salesDetails.go    |   42 +++
 docs/swagger.yaml        |  153 ++++++++++
 docs/docs.go             |  236 ++++++++++++++++
 docs/swagger.json        |  236 ++++++++++++++++
 service/receipt.go       |   62 +++
 model/receipt.go         |   25 +
 9 files changed, 783 insertions(+), 29 deletions(-)

diff --git a/constvar/receipt.go b/constvar/receipt.go
index df8e86e..d0d04a8 100644
--- a/constvar/receipt.go
+++ b/constvar/receipt.go
@@ -1,4 +1,5 @@
 package constvar
+
 type ReceiptQueryClass string
 
 const (
@@ -8,5 +9,15 @@
 type ReceiptKeywordType string
 
 const (
-	ReceiptKeywordCustomerName   ReceiptKeywordType = ""
+	ReceiptKeywordCustomerName ReceiptKeywordType = ""
+)
+
+type ReceiptSourceType int //鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級
+
+const (
+	ReceiptSourceTypeSalesDetails    ReceiptSourceType = 1
+	ReceiptSourceTypeServiceContract ReceiptSourceType = 2
+	ReceiptSourceTypeInvoice         ReceiptSourceType = 3
+	ReceiptSourceTypeCollectionPlan  ReceiptSourceType = 4
+	ReceiptSourceTypeChuKuDan        ReceiptSourceType = 5
 )
diff --git a/docs/docs.go b/docs/docs.go
index ab95e71..e018b2a 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -8341,6 +8341,169 @@
                 }
             }
         },
+        "/api/serviceOrderStatus/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠姸鎬�"
+                ],
+                "summary": "娣诲姞鏈嶅姟鍗曠姸鎬�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddServiceOrderStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrderStatus/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠姸鎬�"
+                ],
+                "summary": "鍒犻櫎鏈嶅姟鍗曠姸鎬�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrderStatus/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠姸鎬�"
+                ],
+                "summary": "鑾峰彇鏈嶅姟鍗曠姸鎬佸垪琛�",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "name": "keyword",
+                        "in": "query"
+                    },
+                    {
+                        "enum": [
+                            ""
+                        ],
+                        "type": "string",
+                        "x-enum-varnames": [
+                            "ServiceOrderStatusKeywordCustomerName"
+                        ],
+                        "name": "keywordType",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    },
+                    {
+                        "enum": [
+                            ""
+                        ],
+                        "type": "string",
+                        "x-enum-varnames": [
+                            "ServiceOrderStatusQueryClassExpireLessThen60Days"
+                        ],
+                        "name": "queryClass",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.ServiceOrderStatus"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrderStatus/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠姸鎬�"
+                ],
+                "summary": "鏇存柊鏈嶅姟鍗曠姸鎬�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateServiceOrderStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/serviceType/add": {
             "post": {
                 "produces": [
@@ -10008,6 +10171,24 @@
                 "ServiceOrderQueryClassExpireLessThen60Days"
             ]
         },
+        "constvar.ServiceOrderStatusKeywordType": {
+            "type": "string",
+            "enum": [
+                ""
+            ],
+            "x-enum-varnames": [
+                "ServiceOrderStatusKeywordCustomerName"
+            ]
+        },
+        "constvar.ServiceOrderStatusQueryClass": {
+            "type": "string",
+            "enum": [
+                ""
+            ],
+            "x-enum-varnames": [
+                "ServiceOrderStatusQueryClassExpireLessThen60Days"
+            ]
+        },
         "constvar.UserType": {
             "type": "integer",
             "enum": [
@@ -11050,6 +11231,10 @@
         "model.Receipt": {
             "type": "object",
             "properties": {
+                "amount": {
+                    "description": "鏀舵閲戦",
+                    "type": "string"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -11660,6 +11845,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "contact": {
+                    "$ref": "#/definitions/model.Contact"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -11862,11 +12050,11 @@
                     "type": "string"
                 },
                 "carFare": {
-                    "description": "浜ら�氳垂",
+                    "description": "浜ら�氳垂                                                                 // 浜ら�氳垂",
                     "type": "number"
                 },
                 "chargeAmount": {
-                    "description": "鏀惰垂閲戦",
+                    "description": "鏀惰垂閲戦                                                       // 鏀惰垂閲戦",
                     "type": "number"
                 },
                 "client": {
@@ -11959,6 +12147,9 @@
                     "description": "鏈嶅姟鍗曠紪鍙�",
                     "type": "string"
                 },
+                "serviceOrderStatus": {
+                    "$ref": "#/definitions/model.ServiceOrderStatus"
+                },
                 "serviceType": {
                     "$ref": "#/definitions/model.ServiceType"
                 },
@@ -11991,6 +12182,17 @@
                 "timeSpentId": {
                     "description": "鑺辫垂鏃堕棿",
                     "type": "integer"
+                }
+            }
+        },
+        "model.ServiceOrderStatus": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
                 }
             }
         },
@@ -12858,6 +13060,10 @@
         "request.AddReceipt": {
             "type": "object",
             "properties": {
+                "amount": {
+                    "description": "鏀舵閲戦",
+                    "type": "string"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -13601,6 +13807,17 @@
                 "timeSpentId": {
                     "description": "鑺辫垂鏃堕棿",
                     "type": "integer"
+                }
+            }
+        },
+        "request.AddServiceOrderStatus": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
                 }
             }
         },
@@ -15703,6 +15920,10 @@
         "request.UpdateReceipt": {
             "type": "object",
             "properties": {
+                "amount": {
+                    "description": "鏀舵閲戦",
+                    "type": "string"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -16698,6 +16919,17 @@
                 }
             }
         },
+        "request.UpdateServiceOrderStatus": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateServiceType": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index ee2af69..ed88e15 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -8329,6 +8329,169 @@
                 }
             }
         },
+        "/api/serviceOrderStatus/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠姸鎬�"
+                ],
+                "summary": "娣诲姞鏈嶅姟鍗曠姸鎬�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddServiceOrderStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrderStatus/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠姸鎬�"
+                ],
+                "summary": "鍒犻櫎鏈嶅姟鍗曠姸鎬�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrderStatus/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠姸鎬�"
+                ],
+                "summary": "鑾峰彇鏈嶅姟鍗曠姸鎬佸垪琛�",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "name": "keyword",
+                        "in": "query"
+                    },
+                    {
+                        "enum": [
+                            ""
+                        ],
+                        "type": "string",
+                        "x-enum-varnames": [
+                            "ServiceOrderStatusKeywordCustomerName"
+                        ],
+                        "name": "keywordType",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    },
+                    {
+                        "enum": [
+                            ""
+                        ],
+                        "type": "string",
+                        "x-enum-varnames": [
+                            "ServiceOrderStatusQueryClassExpireLessThen60Days"
+                        ],
+                        "name": "queryClass",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.ServiceOrderStatus"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrderStatus/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠姸鎬�"
+                ],
+                "summary": "鏇存柊鏈嶅姟鍗曠姸鎬�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateServiceOrderStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/serviceType/add": {
             "post": {
                 "produces": [
@@ -9996,6 +10159,24 @@
                 "ServiceOrderQueryClassExpireLessThen60Days"
             ]
         },
+        "constvar.ServiceOrderStatusKeywordType": {
+            "type": "string",
+            "enum": [
+                ""
+            ],
+            "x-enum-varnames": [
+                "ServiceOrderStatusKeywordCustomerName"
+            ]
+        },
+        "constvar.ServiceOrderStatusQueryClass": {
+            "type": "string",
+            "enum": [
+                ""
+            ],
+            "x-enum-varnames": [
+                "ServiceOrderStatusQueryClassExpireLessThen60Days"
+            ]
+        },
         "constvar.UserType": {
             "type": "integer",
             "enum": [
@@ -11038,6 +11219,10 @@
         "model.Receipt": {
             "type": "object",
             "properties": {
+                "amount": {
+                    "description": "鏀舵閲戦",
+                    "type": "string"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -11648,6 +11833,9 @@
                 "clientId": {
                     "type": "integer"
                 },
+                "contact": {
+                    "$ref": "#/definitions/model.Contact"
+                },
                 "contactId": {
                     "type": "integer"
                 },
@@ -11850,11 +12038,11 @@
                     "type": "string"
                 },
                 "carFare": {
-                    "description": "浜ら�氳垂",
+                    "description": "浜ら�氳垂                                                                 // 浜ら�氳垂",
                     "type": "number"
                 },
                 "chargeAmount": {
-                    "description": "鏀惰垂閲戦",
+                    "description": "鏀惰垂閲戦                                                       // 鏀惰垂閲戦",
                     "type": "number"
                 },
                 "client": {
@@ -11947,6 +12135,9 @@
                     "description": "鏈嶅姟鍗曠紪鍙�",
                     "type": "string"
                 },
+                "serviceOrderStatus": {
+                    "$ref": "#/definitions/model.ServiceOrderStatus"
+                },
                 "serviceType": {
                     "$ref": "#/definitions/model.ServiceType"
                 },
@@ -11979,6 +12170,17 @@
                 "timeSpentId": {
                     "description": "鑺辫垂鏃堕棿",
                     "type": "integer"
+                }
+            }
+        },
+        "model.ServiceOrderStatus": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
                 }
             }
         },
@@ -12846,6 +13048,10 @@
         "request.AddReceipt": {
             "type": "object",
             "properties": {
+                "amount": {
+                    "description": "鏀舵閲戦",
+                    "type": "string"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -13589,6 +13795,17 @@
                 "timeSpentId": {
                     "description": "鑺辫垂鏃堕棿",
                     "type": "integer"
+                }
+            }
+        },
+        "request.AddServiceOrderStatus": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
                 }
             }
         },
@@ -15691,6 +15908,10 @@
         "request.UpdateReceipt": {
             "type": "object",
             "properties": {
+                "amount": {
+                    "description": "鏀舵閲戦",
+                    "type": "string"
+                },
                 "bankAccountId": {
                     "description": "璐︽埛id",
                     "type": "integer"
@@ -16686,6 +16907,17 @@
                 }
             }
         },
+        "request.UpdateServiceOrderStatus": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateServiceType": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 2a99e5b..bd69224 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -264,6 +264,18 @@
     type: string
     x-enum-varnames:
     - ServiceOrderQueryClassExpireLessThen60Days
+  constvar.ServiceOrderStatusKeywordType:
+    enum:
+    - ""
+    type: string
+    x-enum-varnames:
+    - ServiceOrderStatusKeywordCustomerName
+  constvar.ServiceOrderStatusQueryClass:
+    enum:
+    - ""
+    type: string
+    x-enum-varnames:
+    - ServiceOrderStatusQueryClassExpireLessThen60Days
   constvar.UserType:
     enum:
     - 1
@@ -951,6 +963,9 @@
     type: object
   model.Receipt:
     properties:
+      amount:
+        description: 鏀舵閲戦
+        type: string
       bankAccountId:
         description: 璐︽埛id
         type: integer
@@ -1360,6 +1375,8 @@
         $ref: '#/definitions/model.Client'
       clientId:
         type: integer
+      contact:
+        $ref: '#/definitions/model.Contact'
       contactId:
         type: integer
       endTime:
@@ -1494,10 +1511,12 @@
         description: 棰勭害涓婇棬鏃堕棿
         type: string
       carFare:
-        description: 浜ら�氳垂
+        description: 浜ら�氳垂                                                                 //
+          浜ら�氳垂
         type: number
       chargeAmount:
-        description: 鏀惰垂閲戦
+        description: 鏀惰垂閲戦                                                       //
+          鏀惰垂閲戦
         type: number
       client:
         $ref: '#/definitions/model.Client'
@@ -1564,6 +1583,8 @@
       serviceNumber:
         description: 鏈嶅姟鍗曠紪鍙�
         type: string
+      serviceOrderStatus:
+        $ref: '#/definitions/model.ServiceOrderStatus'
       serviceType:
         $ref: '#/definitions/model.ServiceType'
       serviceTypeId:
@@ -1588,6 +1609,13 @@
       timeSpentId:
         description: 鑺辫垂鏃堕棿
         type: integer
+    type: object
+  model.ServiceOrderStatus:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
     type: object
   model.ServiceType:
     properties:
@@ -2168,6 +2196,9 @@
     type: object
   request.AddReceipt:
     properties:
+      amount:
+        description: 鏀舵閲戦
+        type: string
       bankAccountId:
         description: 璐︽埛id
         type: integer
@@ -2678,6 +2709,13 @@
       timeSpentId:
         description: 鑺辫垂鏃堕棿
         type: integer
+    type: object
+  request.AddServiceOrderStatus:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
     type: object
   request.AddServiceType:
     properties:
@@ -4108,6 +4146,9 @@
     type: object
   request.UpdateReceipt:
     properties:
+      amount:
+        description: 鏀舵閲戦
+        type: string
       bankAccountId:
         description: 璐︽埛id
         type: integer
@@ -4786,6 +4827,13 @@
       timeSpentId:
         description: 鑺辫垂鏃堕棿
         type: integer
+    type: object
+  request.UpdateServiceOrderStatus:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
     type: object
   request.UpdateServiceType:
     properties:
@@ -10615,6 +10663,107 @@
       summary: 鏇存柊鏈嶅姟鍗�
       tags:
       - 鏈嶅姟鍗曠鐞�
+  /api/serviceOrderStatus/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddServiceOrderStatus'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞鏈嶅姟鍗曠姸鎬�
+      tags:
+      - 鏈嶅姟鍗曠姸鎬�
+  /api/serviceOrderStatus/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:
+      - 鏈嶅姟鍗曠姸鎬�
+  /api/serviceOrderStatus/list:
+    get:
+      parameters:
+      - in: query
+        name: keyword
+        type: string
+      - enum:
+        - ""
+        in: query
+        name: keywordType
+        type: string
+        x-enum-varnames:
+        - ServiceOrderStatusKeywordCustomerName
+      - description: 椤电爜
+        in: query
+        name: page
+        type: integer
+      - description: 姣忛〉澶у皬
+        in: query
+        name: pageSize
+        type: integer
+      - enum:
+        - ""
+        in: query
+        name: queryClass
+        type: string
+        x-enum-varnames:
+        - ServiceOrderStatusQueryClassExpireLessThen60Days
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/response.ListResponse'
+            - properties:
+                data:
+                  items:
+                    $ref: '#/definitions/model.ServiceOrderStatus'
+                  type: array
+              type: object
+      summary: 鑾峰彇鏈嶅姟鍗曠姸鎬佸垪琛�
+      tags:
+      - 鏈嶅姟鍗曠姸鎬�
+  /api/serviceOrderStatus/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateServiceOrderStatus'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊鏈嶅姟鍗曠姸鎬�
+      tags:
+      - 鏈嶅姟鍗曠姸鎬�
   /api/serviceType/add:
     post:
       parameters:
diff --git a/model/interface.go b/model/interface.go
index c7b70d4..2b8847d 100644
--- a/model/interface.go
+++ b/model/interface.go
@@ -6,8 +6,8 @@
 )
 
 type MoneyAdder interface {
-	AmountReceivableAdd(*gorm.DB, decimal.Decimal)
-	AmountReceivedAdd(*gorm.DB, decimal.Decimal)
-	AmountInvoicedAdd(*gorm.DB, decimal.Decimal)
-	AmountNotInvoicedAdd(*gorm.DB, decimal.Decimal)
+	AmountReceivableAdd(tx *gorm.DB, id int, amount decimal.Decimal) error
+	AmountReceivedAdd(tx *gorm.DB, id int, amount decimal.Decimal) error
+	AmountInvoicedAdd(tx *gorm.DB, id int, amount decimal.Decimal) error
+	AmountNotInvoicedAdd(tx *gorm.DB, id int, amount decimal.Decimal) error
 }
diff --git a/model/receipt.go b/model/receipt.go
index 60d1d2a..bd862ba 100644
--- a/model/receipt.go
+++ b/model/receipt.go
@@ -5,23 +5,26 @@
 	"aps_crm/pkg/mysqlx"
 	"errors"
 	"fmt"
+	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
 )
 
 type (
 	// Receipt 鏀舵鍗�
 	Receipt struct {
-		Id            int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		ClientId      int    `gorm:"client_id" json:"clientId"`            // 瀹㈡埛id
-		SourceType    int    `gorm:"source_type" json:"sourceType"`        // 鏉ユ簮绫诲瀷锛�1閿�鍞槑缁嗗崟2鏈嶅姟鍚堝悓3閿�鍞彂绁�4鏀舵璁″垝5鍑哄簱鍗曪級
-		SourceId      int    `gorm:"source_id" json:"sourceId"`            // 婧愬崟id
-		PrincipalId   int    `gorm:"principal_id" json:"principalId"`      // 璐熻矗浜篿d
-		ReceiptDate   string `gorm:"receipt_date" json:"receiptDate"`      // 鏀舵鏃ユ湡
-		MoneyType     string `gorm:"money_type" json:"moneyType"`          // 甯佺
-		PaymentTypeId int    `gorm:"payment_type_id" json:"paymentTypeId"` // 鏀舵鏂瑰紡ID
-		BankAccountId int    `gorm:"bank_account_id" json:"bankAccountId"` // 璐︽埛id
-		Remark        string `gorm:"remark" json:"remark"`                 // 澶囨敞
-		FileId        int    `gorm:"file_id" json:"fileId"`                // 闄勪欢id
+		Id            int                        `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		ClientId      int                        `gorm:"column:client_id;type:int;not null;default 0;comment:瀹㈡埛id" json:"clientId"`                                // 瀹㈡埛id
+		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
+		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
+		gorm.Model    `json:"-"`
 	}
 
 	// ReceiptSearch 鏀舵鍗曟悳绱㈡潯浠�
diff --git a/model/salesDetails.go b/model/salesDetails.go
index ff92423..301794b 100644
--- a/model/salesDetails.go
+++ b/model/salesDetails.go
@@ -173,3 +173,45 @@
 
 	return nil
 }
+
+func (slf *SalesDetailsSearch) SetOrm(tx *gorm.DB) *SalesDetailsSearch {
+	slf.Orm = tx
+	return slf
+}
+
+func (slf *SalesDetailsSearch) AmountReceivableAdd(tx *gorm.DB, id int, amount decimal.Decimal) error {
+	slf.Orm = tx
+	record, err := slf.SetId(id).First()
+	if err != nil {
+		return err
+	}
+	amount = record.AmountReceivable.Add(amount)
+	return slf.UpdateByMap(map[string]interface{}{"amount_receivable": amount})
+}
+func (slf *SalesDetailsSearch) AmountReceivedAdd(tx *gorm.DB, id int, amount decimal.Decimal) error {
+	slf.Orm = tx
+	record, err := slf.SetId(id).First()
+	if err != nil {
+		return err
+	}
+	amount = record.AmountReceived.Add(amount)
+	return slf.UpdateByMap(map[string]interface{}{"amount_received": amount})
+}
+func (slf *SalesDetailsSearch) AmountInvoicedAdd(tx *gorm.DB, id int, amount decimal.Decimal) error {
+	slf.Orm = tx
+	record, err := slf.SetId(id).First()
+	if err != nil {
+		return err
+	}
+	amount = record.AmountInvoiced.Add(amount)
+	return slf.UpdateByMap(map[string]interface{}{"amount_invoiced": amount})
+}
+func (slf *SalesDetailsSearch) AmountNotInvoicedAdd(tx *gorm.DB, id int, amount decimal.Decimal) error {
+	slf.Orm = tx
+	record, err := slf.SetId(id).First()
+	if err != nil {
+		return err
+	}
+	amount = record.AmountUnInvoiced.Add(amount)
+	return slf.UpdateByMap(map[string]interface{}{"amount_not_invoiced": amount})
+}
diff --git a/model/serviceContract.go b/model/serviceContract.go
index 5eff55e..93ec9c8 100644
--- a/model/serviceContract.go
+++ b/model/serviceContract.go
@@ -216,3 +216,40 @@
 
 	return record, nil
 }
+
+func (slf *ServiceContractSearch) AmountReceivableAdd(tx *gorm.DB, id int, amount decimal.Decimal) error {
+	slf.Orm = tx
+	record, err := slf.SetId(id).First()
+	if err != nil {
+		return err
+	}
+	amount = record.AmountReceivable.Add(amount)
+	return slf.UpdateByMap(map[string]interface{}{"amount_receivable": amount})
+}
+func (slf *ServiceContractSearch) AmountReceivedAdd(tx *gorm.DB, id int, amount decimal.Decimal) error {
+	slf.Orm = tx
+	record, err := slf.SetId(id).First()
+	if err != nil {
+		return err
+	}
+	amount = record.AmountReceived.Add(amount)
+	return slf.UpdateByMap(map[string]interface{}{"amount_received": amount})
+}
+func (slf *ServiceContractSearch) AmountInvoicedAdd(tx *gorm.DB, id int, amount decimal.Decimal) error {
+	slf.Orm = tx
+	record, err := slf.SetId(id).First()
+	if err != nil {
+		return err
+	}
+	amount = record.AmountInvoiced.Add(amount)
+	return slf.UpdateByMap(map[string]interface{}{"amount_invoiced": amount})
+}
+func (slf *ServiceContractSearch) AmountNotInvoicedAdd(tx *gorm.DB, id int, amount decimal.Decimal) error {
+	slf.Orm = tx
+	record, err := slf.SetId(id).First()
+	if err != nil {
+		return err
+	}
+	amount = record.AmountUnInvoiced.Add(amount)
+	return slf.UpdateByMap(map[string]interface{}{"amount_not_invoiced": amount})
+}
diff --git a/service/receipt.go b/service/receipt.go
index 834c6df..386beb5 100644
--- a/service/receipt.go
+++ b/service/receipt.go
@@ -1,9 +1,12 @@
 package service
 
 import (
+	"aps_crm/constvar"
 	"aps_crm/model"
 	"aps_crm/model/request"
 	"aps_crm/pkg/ecode"
+	"github.com/shopspring/decimal"
+	"gorm.io/gorm"
 )
 
 type ReceiptService struct{}
@@ -13,16 +16,45 @@
 }
 
 func (ReceiptService) AddReceipt(receipt *model.Receipt) int {
-	err := model.NewReceiptSearch().Create(receipt)
+	var moneyAdder model.MoneyAdder
+	switch receipt.SourceType {
+	case constvar.ReceiptSourceTypeSalesDetails:
+		moneyAdder = model.NewSalesDetailsSearch()
+	case constvar.ReceiptSourceTypeServiceContract:
+		moneyAdder = model.NewServiceContractSearch()
+	}
+	err := model.WithTransaction(func(db *gorm.DB) error {
+		err := model.NewReceiptSearch().SetOrm(db).Create(receipt)
+		if err != nil {
+			return err
+		}
+		return moneyAdder.AmountReceivableAdd(db, receipt.SourceId, decimal.Zero.Sub(receipt.Amount).Round(2))
+	})
 	if err != nil {
 		return ecode.DBErr
 	}
-
 	return ecode.OK
 }
 
 func (ReceiptService) DeleteReceipt(id int) int {
-	err := model.NewReceiptSearch().SetId(id).Delete()
+	receipt, err := model.NewReceiptSearch().SetId(id).First()
+	if err != nil {
+		return ecode.DBErr
+	}
+	var moneyAdder model.MoneyAdder
+	switch receipt.SourceType {
+	case constvar.ReceiptSourceTypeSalesDetails:
+		moneyAdder = model.NewSalesDetailsSearch()
+	case constvar.ReceiptSourceTypeServiceContract:
+		moneyAdder = model.NewServiceContractSearch()
+	}
+	err = model.WithTransaction(func(db *gorm.DB) error {
+		err := model.NewReceiptSearch().SetId(id).Delete()
+		if err != nil {
+			return err
+		}
+		return moneyAdder.AmountReceivableAdd(db, receipt.SourceId, receipt.Amount.Round(2))
+	})
 	if err != nil {
 		return ecode.DBErr
 	}
@@ -46,9 +78,7 @@
 			return ecode.DBErr
 		}
 
-		err = model.NewReceiptSearch().SetId(v.Id).Updates(map[string]interface{}{
-
-		})
+		err = model.NewReceiptSearch().SetId(v.Id).Updates(map[string]interface{}{})
 		if err != nil {
 			return ecode.DBErr
 		}
@@ -58,9 +88,27 @@
 }
 
 func (ReceiptService) UpdateReceipt(receipt *model.Receipt) int {
+	old, err := model.NewReceiptSearch().SetId(receipt.Id).First()
+	if err != nil {
+		return ecode.DBErr
+	}
+	var moneyAdder model.MoneyAdder
+	switch receipt.SourceType {
+	case constvar.ReceiptSourceTypeSalesDetails:
+		moneyAdder = model.NewSalesDetailsSearch()
+	case constvar.ReceiptSourceTypeServiceContract:
+		moneyAdder = model.NewServiceContractSearch()
+	}
+	err = model.WithTransaction(func(db *gorm.DB) error {
 		err := model.NewReceiptSearch().SetId(receipt.Id).Save(receipt)
 		if err != nil {
-			return ecode.DBErr
+			return err
 		}
+		diffAmount := receipt.Amount.Sub(old.Amount)
+		return moneyAdder.AmountReceivableAdd(db, receipt.SourceId, diffAmount.Round(2))
+	})
+	if err != nil {
+		return ecode.DBErr
+	}
 	return ecode.OK
 }

--
Gitblit v1.8.0