From 9984c2c7cef1cca16055ae5d49d5ad275a7981ab Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 29 八月 2023 21:08:43 +0800
Subject: [PATCH] 按采购编号查询质检单列表

---
 proto/quality_inspect.proto                |   15 
 model/purchase/purchase.go                 |   59 ++-
 model/purchase/request/purchase.go         |   36 +-
 api/v1/purchase/quality_inspection.go      |  137 +++++++++
 service/purchase/quality_inspect.go        |   61 ++++
 proto/qualityinspect/quality_inspect.pb.go |  233 +++++++++------
 docs/swagger.yaml                          |   42 ++
 docs/docs.go                               |   69 ++++
 docs/swagger.json                          |   69 ++++
 api/v1/purchase/purchase.go                |   13 
 router/purchase/purchase.go                |    8 
 utils/structx.go                           |   16 +
 model/purchase/response/purchase.go        |   22 +
 service/purchase/purchase.go               |   84 +++--
 14 files changed, 671 insertions(+), 193 deletions(-)

diff --git a/api/v1/purchase/purchase.go b/api/v1/purchase/purchase.go
index 67aec20..0a5c918 100644
--- a/api/v1/purchase/purchase.go
+++ b/api/v1/purchase/purchase.go
@@ -3,7 +3,6 @@
 import (
 	"fmt"
 	"github.com/gin-gonic/gin"
-	"github.com/mitchellh/mapstructure"
 	"go.uber.org/zap"
 	"gorm.io/gorm"
 	"srm/global"
@@ -44,7 +43,7 @@
 	}
 
 	var purchaseRecord purchase.Purchase
-	if err := mapstructure.Decode(params.Purchase, &purchaseRecord); err != nil {
+	if err := utils.AssignTo(params.Purchase, &purchaseRecord); err != nil {
 		global.GVA_LOG.Error("Add Purchase failed", zap.Error(err))
 		response.FailWithMessage(err.Error(), c)
 		return
@@ -75,7 +74,7 @@
 			return
 		}
 		global.GVA_LOG.Error("鍒涘缓澶辫触!", zap.Error(err))
-		response.FailWithMessage("鍒涘缓澶辫触", c)
+		response.FailWithMessage(err.Error(), c)
 		return
 	}
 	response.OkWithMessage("鍒涘缓鎴愬姛", c)
@@ -123,7 +122,7 @@
 	}
 
 	var purchaseRecord purchase.Purchase
-	if err := mapstructure.Decode(params.Purchase, &purchaseRecord); err != nil {
+	if err := utils.AssignTo(params.Purchase, &purchaseRecord); err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
@@ -167,7 +166,7 @@
 		return
 	}
 	respProductList := make([]*purchaseRes.PurchaseProducts, len(productList))
-	err = mapstructure.Decode(productList, &respProductList)
+	err = utils.AssignTo(productList, &respProductList)
 	if err != nil {
 		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
 		response.FailWithMessage("鑾峰彇澶辫触", c)
@@ -177,7 +176,7 @@
 		respProductList[k].Amount = item.Amount
 		respProductList[k].Price = item.Price
 		respProductList[k].Total = item.Total
-		err = mapstructure.Decode(item.Product, &respProductList[k])
+		err = utils.AssignTo(item.Product, &respProductList[k])
 		if err != nil {
 			global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
 			response.FailWithMessage("鑾峰彇澶辫触", c)
@@ -265,7 +264,7 @@
 	}
 
 	purchaseTypeList := make([]*purchase.PurchaseType, 0, len(params))
-	if err := mapstructure.Decode(params, &purchaseTypeList); err != nil {
+	if err := utils.AssignTo(params, &purchaseTypeList); err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
diff --git a/api/v1/purchase/quality_inspection.go b/api/v1/purchase/quality_inspection.go
new file mode 100644
index 0000000..803f593
--- /dev/null
+++ b/api/v1/purchase/quality_inspection.go
@@ -0,0 +1,137 @@
+package purchase
+
+import (
+	"context"
+	"github.com/gin-gonic/gin"
+	"go.uber.org/zap"
+	"srm/global"
+	"srm/model/common/request"
+	"srm/model/common/response"
+	"srm/model/purchase"
+	purchaseRes "srm/model/purchase/response"
+	"srm/proto/qualityinspect"
+	service "srm/service/purchase"
+	"srm/utils"
+)
+
+type QualityInspectApi struct{}
+
+// GetQualityInspectList
+// @Tags      QualityInspect
+// @Summary   鍒嗛〉鑾峰彇璐ㄦ鍗曞垪琛�
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @Param     data  query     request.PageInfo                                        true  "椤电爜, 姣忛〉澶у皬"
+// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "鍒嗛〉鑾峰彇璐ㄦ鍗曞垪琛�,杩斿洖鍖呮嫭鍒楄〃,鎬绘暟,椤电爜,姣忛〉鏁伴噺"
+// @Router    /purchase/qualityInspectList [get]
+func (e *QualityInspectApi) GetQualityInspectList(c *gin.Context) {
+	var pageInfo request.PageInfo
+	err := c.ShouldBindQuery(&pageInfo)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	err = utils.Verify(pageInfo, utils.PageInfoVerify)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	list, total, err := service.NewPurchaseService().GetPurchaseList(pageInfo)
+	purchaseList := list.([]*purchase.Purchase)
+	purchaseNumbers := make([]string, 0, len(purchaseList))
+	for _, item := range purchaseList {
+		purchaseNumbers = append(purchaseNumbers, item.Number)
+	}
+	resultList := make([]*purchaseRes.QualityInspectList, 0, len(purchaseList))
+	if len(purchaseList) == 0 {
+		err = utils.AssignTo(purchaseList, &resultList)
+		if err != nil {
+			global.GVA_LOG.Error("mapStructure decode", zap.Error(err))
+			response.FailWithMessage("鍐呴儴閿欒", c)
+			return
+		}
+
+		client := qualityinspect.NewQualityInspectServiceClient(qualityinspect.Conn)
+		inspectList, err := client.GetInspectList(context.Background(), &qualityinspect.GetInspectListRequest{
+			PurchaseOrderId: purchaseNumbers,
+		})
+		if err != nil {
+			global.GVA_LOG.Error("GetInspectList", zap.Error(err))
+			response.FailWithMessage("鍐呴儴閿欒", c)
+			return
+		}
+
+		inspectUnFinishedMap := make(map[string]bool, len(purchaseNumbers)) //榛樿瀹屾垚
+		for _, inspectItem := range inspectList.List {
+			if inspectItem.Status != qualityinspect.InspectStatus_InspectStatusInspectFinish {
+				inspectUnFinishedMap[inspectItem.PurchaseOrderId] = true
+			}
+		}
+
+		for _, result := range resultList {
+			if inspectUnFinishedMap[result.Number] {
+				result.InspectStatus = "寰呰川妫�"
+			} else {
+				result.InspectStatus = "宸插畬鎴�"
+			}
+		}
+	}
+
+	response.OkWithDetailed(response.PageResult{
+		List:     resultList,
+		Total:    total,
+		Page:     pageInfo.Page,
+		PageSize: pageInfo.PageSize,
+	}, "鑾峰彇鎴愬姛", c)
+}
+
+//
+//// GetQualityInspect
+//// @Tags      QualityInspect
+//// @Summary   鑾峰彇鍗曚竴璐ㄦ鍗曚俊鎭�
+//// @Security  ApiKeyAuth
+//// @accept    application/json
+//// @Produce   application/json
+//// @Param		id	path		int	true	"璐ㄦ鍗旾D"                                           true  "璐ㄦ鍗旾D"
+//// @Success   200   {object}  response.Response{data=QualityInspectRes.QualityInspectResponse,msg=string}  "鑾峰彇鍗曚竴璐ㄦ鍗曚俊鎭�,杩斿洖鍖呮嫭璐ㄦ鍗曡鎯�"
+//// @Router    /purchase/qualityInspect/{id} [get]
+//func (e *QualityInspectApi) GetQualityInspect(c *gin.Context) {
+//	id, _ := strconv.Atoi(c.Param("id"))
+//	if id == 0 {
+//		response.FailWithMessage("鍙傛暟缂哄け", c)
+//		return
+//	}
+//	data, err := service.NewPurchaseService().GetPurchase(uint(id))
+//	if err != nil {
+//		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+//		response.FailWithMessage("鑾峰彇澶辫触", c)
+//		return
+//	}
+//	productList, err := service.NewPurchaseService().GetPurchaseProductList(uint(id))
+//	if err != nil {
+//		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+//		response.FailWithMessage("鑾峰彇澶辫触", c)
+//		return
+//	}
+//	respProductList := make([]*purchaseRes.PurchaseProducts, len(productList))
+//	err = mapstructure.Decode(productList, &respProductList)
+//	if err != nil {
+//		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+//		response.FailWithMessage("鑾峰彇澶辫触", c)
+//		return
+//	}
+//	for k, item := range productList {
+//		respProductList[k].Amount = item.Amount
+//		respProductList[k].Price = item.Price
+//		respProductList[k].Total = item.Total
+//		err = mapstructure.Decode(item.Product, &respProductList[k])
+//		if err != nil {
+//			global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+//			response.FailWithMessage("鑾峰彇澶辫触", c)
+//			return
+//		}
+//	}
+//
+//	response.OkWithDetailed(purchaseRes.PurchaseResponse{Purchase: data, ProductList: respProductList}, "鑾峰彇鎴愬姛", c)
+//}
diff --git a/docs/docs.go b/docs/docs.go
index 42749da..9156122 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -4917,6 +4917,68 @@
                 }
             }
         },
+        "/purchase/qualityInspectList": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "QualityInspect"
+                ],
+                "summary": "鍒嗛〉鑾峰彇璐ㄦ鍗曞垪琛�",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "鍏抽敭瀛�",
+                        "name": "keyword",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鍒嗛〉鑾峰彇璐ㄦ鍗曞垪琛�,杩斿洖鍖呮嫭鍒楄〃,鎬绘暟,椤电爜,姣忛〉鏁伴噺",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.PageResult"
+                                        },
+                                        "msg": {
+                                            "type": "string"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
         "/purchase/submit/{id}": {
             "post": {
                 "security": [
@@ -8496,6 +8558,10 @@
                         }
                     ]
                 },
+                "principal": {
+                    "description": "閲囪喘璐熻矗浜�",
+                    "type": "string"
+                },
                 "purchaseType": {
                     "$ref": "#/definitions/purchase.PurchaseType"
                 },
@@ -8629,17 +8695,14 @@
         "purchase.WholeDiscountType": {
             "type": "integer",
             "enum": [
-                0,
                 1,
                 2
             ],
             "x-enum-comments": {
-                "WholeDiscountTypeDefault": "鏃犳姌鎵�",
                 "WholeDiscountTypeDiscount": "鐩存帴闄嶄环",
                 "WholeDiscountTypePercent": "鐧惧垎姣旈檷浠�"
             },
             "x-enum-varnames": [
-                "WholeDiscountTypeDefault",
                 "WholeDiscountTypePercent",
                 "WholeDiscountTypeDiscount"
             ]
diff --git a/docs/swagger.json b/docs/swagger.json
index 7710747..c0e042f 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -4908,6 +4908,68 @@
                 }
             }
         },
+        "/purchase/qualityInspectList": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "QualityInspect"
+                ],
+                "summary": "鍒嗛〉鑾峰彇璐ㄦ鍗曞垪琛�",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "鍏抽敭瀛�",
+                        "name": "keyword",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鍒嗛〉鑾峰彇璐ㄦ鍗曞垪琛�,杩斿洖鍖呮嫭鍒楄〃,鎬绘暟,椤电爜,姣忛〉鏁伴噺",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.PageResult"
+                                        },
+                                        "msg": {
+                                            "type": "string"
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
         "/purchase/submit/{id}": {
             "post": {
                 "security": [
@@ -8487,6 +8549,10 @@
                         }
                     ]
                 },
+                "principal": {
+                    "description": "閲囪喘璐熻矗浜�",
+                    "type": "string"
+                },
                 "purchaseType": {
                     "$ref": "#/definitions/purchase.PurchaseType"
                 },
@@ -8620,17 +8686,14 @@
         "purchase.WholeDiscountType": {
             "type": "integer",
             "enum": [
-                0,
                 1,
                 2
             ],
             "x-enum-comments": {
-                "WholeDiscountTypeDefault": "鏃犳姌鎵�",
                 "WholeDiscountTypeDiscount": "鐩存帴闄嶄环",
                 "WholeDiscountTypePercent": "鐧惧垎姣旈檷浠�"
             },
             "x-enum-varnames": [
-                "WholeDiscountTypeDefault",
                 "WholeDiscountTypePercent",
                 "WholeDiscountTypeDiscount"
             ]
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 391b1de..2df7b38 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -753,6 +753,9 @@
         allOf:
         - $ref: '#/definitions/purchase.PriceAdjustmentType'
         description: 浠锋牸璋冩暣绫诲瀷
+      principal:
+        description: 閲囪喘璐熻矗浜�
+        type: string
       purchaseType:
         $ref: '#/definitions/purchase.PurchaseType'
       purchaseTypeId:
@@ -846,16 +849,13 @@
     type: object
   purchase.WholeDiscountType:
     enum:
-    - 0
     - 1
     - 2
     type: integer
     x-enum-comments:
-      WholeDiscountTypeDefault: 鏃犳姌鎵�
       WholeDiscountTypeDiscount: 鐩存帴闄嶄环
       WholeDiscountTypePercent: 鐧惧垎姣旈檷浠�
     x-enum-varnames:
-    - WholeDiscountTypeDefault
     - WholeDiscountTypePercent
     - WholeDiscountTypeDiscount
   purchaserequest.AddPurchase:
@@ -4841,6 +4841,42 @@
       summary: 鑾峰彇閲囪喘绫诲瀷鍒楄〃
       tags:
       - Purchase
+  /purchase/qualityInspectList:
+    get:
+      consumes:
+      - application/json
+      parameters:
+      - description: 鍏抽敭瀛�
+        in: query
+        name: keyword
+        type: string
+      - description: 椤电爜
+        in: query
+        name: page
+        type: integer
+      - description: 姣忛〉澶у皬
+        in: query
+        name: pageSize
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鍒嗛〉鑾峰彇璐ㄦ鍗曞垪琛�,杩斿洖鍖呮嫭鍒楄〃,鎬绘暟,椤电爜,姣忛〉鏁伴噺
+          schema:
+            allOf:
+            - $ref: '#/definitions/response.Response'
+            - properties:
+                data:
+                  $ref: '#/definitions/response.PageResult'
+                msg:
+                  type: string
+              type: object
+      security:
+      - ApiKeyAuth: []
+      summary: 鍒嗛〉鑾峰彇璐ㄦ鍗曞垪琛�
+      tags:
+      - QualityInspect
   /purchase/submit/{id}:
     post:
       consumes:
diff --git a/model/purchase/purchase.go b/model/purchase/purchase.go
index 6f2f6c7..c690479 100644
--- a/model/purchase/purchase.go
+++ b/model/purchase/purchase.go
@@ -10,33 +10,33 @@
 	global.GVA_MODEL
 	PurchaseTypeId      int                 `json:"purchaseTypeId" form:"purchaseType" gorm:"type:int(11);not null;default 0;comment:閲囪喘绫诲瀷id"` // 閲囪喘绫诲瀷id
 	PurchaseType        PurchaseType        `json:"purchaseType" gorm:"foreignKey:PurchaseTypeId"`
-	OrderSource         string              `json:"orderSource" gorm:"type:varchar(255);not null;default '';comment:鍗曟嵁鏉ユ簮"`            // 鍗曟嵁鏉ユ簮
+	OrderSource         string              `json:"orderSource" gorm:"type:varchar(255);not null;default '';comment:鍗曟嵁鏉ユ簮"`             // 鍗曟嵁鏉ユ簮
 	SupplierId          int                 `json:"supplierId" form:"supplierId" gorm:"type:int(11);not null;default 0;comment:渚涘簲鍟唅d"` // 渚涘簲鍟唅d
 	Supplier            test.Supplier       `json:"supplier" gorm:"foreignKey:SupplierId"`
-	Number              string              `json:"number" form:"number" gorm:"unique;type:varchar(255);not null;default '';comment:閲囪喘缂栧彿"`                     // 閲囪喘缂栧彿
-	Name                string              `json:"name" form:"name" gorm:"type:varchar(255);not null;default '';comment:閲囪喘鍚嶇О"`                                // 閲囪喘鍚嶇О
-	Contact             string              `json:"contact" form:"contact" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜�"`                            // 鑱旂郴浜�
-	Phone               string              `json:"phone" form:"phone" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜虹數璇�"`                            // 鑱旂郴浜虹數璇�
-	SigningDate         string              `json:"signingDate" form:"signingDate" gorm:"type:varchar(255);not null;default '';comment:绛剧害鏃ユ湡"`                  // 绛剧害鏃ユ湡
-	DeliveryDate        string              `json:"deliveryDate" form:"deliveryDate" gorm:"type:varchar(255);not null;default '';comment:浜や粯鏃ユ湡"`                //浜や粯鏃ユ湡
-	Remark              string              `json:"remark" form:"remark" gorm:"type:varchar(1000);not null;default '';comment:澶囨敞"`                               //澶囨敞
-	Status              OrderStatus         `json:"status" form:"status" gorm:"type:tinyint(1);not null;default 0;comment:鐘舵��"`                                   //鐘舵��
-	HandledBy           string              `json:"handledBy" form:"handledBy" gorm:"type:varchar(255);not null;default '';comment:缁忓姙浜�"`                        //缁忓姙浜�
-	Creator             string              `json:"creator" form:"creator" gorm:"type:varchar(255);not null;default '';comment:鍒跺崟浜�"`                            //鍒跺崟浜�
-	Principal           string              `json:"principal" form:"principal" gorm:"type:varchar(255);not null;default '';comment:閲囪喘璐熻矗浜�"`                    //閲囪喘璐熻矗浜�
-	OrderType           string              `json:"orderType" form:"orderType" gorm:"type:varchar(255);not null;default '';comment:鍗曟嵁绫诲瀷"`                      //鍗曟嵁绫诲瀷
-	Warehouse           string              `json:"warehouse" form:"warehouse" gorm:"type:varchar(255);not null;default '';comment:鏀惰揣浠撳簱"`                      //鏀惰揣浠撳簱
-	Quantity            decimal.Decimal     `json:"quantity" form:"quantity" gorm:"type:decimal(12,4);not null;comment:閲囪喘鏁伴噺"`                                  // 閲囪喘鏁伴噺
-	TotalPrice          decimal.Decimal     `json:"totalPrice" form:"totalPrice" gorm:"type:decimal(12,2);not null;default '';comment:浠风◣鍚堣"`                   //浠风◣鍚堣
-	WholeDiscountType   WholeDiscountType   `json:"wholeDiscountType" form:"wholeDiscountType" gorm:"type:decimal(12,2);not null;default '';comment:鏁村崟鎶樻墸"`     //鏁村崟鎶樻墸绫诲瀷
-	WholeDiscount       decimal.Decimal     `json:"wholeDiscount" form:"wholeDiscount" gorm:"type:decimal(12,2);not null;default '';comment:鏁村崟鎶樻墸"`             //鏁村崟鎶樻墸鍊�
-	PriceAdjustmentType PriceAdjustmentType `json:"priceAdjustmentType" form:"priceAdjustmentType" gorm:"type:decimal(12,2);not null;default '';comment:浠锋牸璋冩暣"` //浠锋牸璋冩暣绫诲瀷
-	PriceAdjustment     decimal.Decimal     `json:"priceAdjustment" form:"priceAdjustment" gorm:"type:decimal(12,2);not null;default '';comment:浠锋牸璋冩暣"`         //浠锋牸璋冩暣鍊�
-	RealTotalPrice      decimal.Decimal     `json:"realTotalPrice" form:"realTotalPrice" gorm:"type:decimal(12,2);not null;default '';comment:鏈�缁堜环鏍�"`           //鏈�缁堜环鏍�
-	InvoiceAmount       decimal.Decimal     `json:"invoiceAmount" form:"invoiceAmount" gorm:"type:decimal(12,2);not null;default '';comment:宸叉敹绁ㄩ噾棰�"`           //宸叉敹绁ㄩ噾棰�
-	UnInvoiceAmount     decimal.Decimal     `json:"unInvoiceAmount" form:"unInvoiceAmount" gorm:"type:decimal(12,2);not null;default '';comment:鏈敹绁ㄩ噾棰�"`       //鏈敹绁ㄩ噾棰�
-	ShouldPayAmount     decimal.Decimal     `json:"shouldPayAmount" form:"shouldPayAmount" gorm:"type:decimal(12,2);not null;default '';comment:搴斾粯閲戦"`         //搴斾粯閲戦
-	PaidAmount          decimal.Decimal     `json:"paidAmount" form:"paidAmount" gorm:"type:decimal(12,2);not null;default '';comment:宸蹭粯閲戦"`                   //宸蹭粯閲戦
+	Number              string              `json:"number" form:"number" gorm:"unique;type:varchar(255);not null;default '';comment:閲囪喘缂栧彿"`                  // 閲囪喘缂栧彿
+	Name                string              `json:"name" form:"name" gorm:"type:varchar(255);not null;default '';comment:閲囪喘鍚嶇О"`                             // 閲囪喘鍚嶇О
+	Contact             string              `json:"contact" form:"contact" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜�"`                        // 鑱旂郴浜�
+	Phone               string              `json:"phone" form:"phone" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜虹數璇�"`                          // 鑱旂郴浜虹數璇�
+	SigningDate         string              `json:"signingDate" form:"signingDate" gorm:"type:varchar(255);not null;default '';comment:绛剧害鏃ユ湡"`               // 绛剧害鏃ユ湡
+	DeliveryDate        string              `json:"deliveryDate" form:"deliveryDate" gorm:"type:varchar(255);not null;default '';comment:浜や粯鏃ユ湡"`             //浜や粯鏃ユ湡
+	Remark              string              `json:"remark" form:"remark" gorm:"type:varchar(1000);not null;default '';comment:澶囨敞"`                          //澶囨敞
+	Status              OrderStatus         `json:"status" form:"status" gorm:"type:tinyint(1);not null;default 0;comment:鐘舵��"`                              //鐘舵��
+	HandledBy           string              `json:"handledBy" form:"handledBy" gorm:"type:varchar(255);not null;default '';comment:缁忓姙浜�"`                    //缁忓姙浜�
+	Creator             string              `json:"creator" form:"creator" gorm:"type:varchar(255);not null;default '';comment:鍒跺崟浜�"`                        //鍒跺崟浜�
+	Principal           string              `json:"principal" form:"principal" gorm:"type:varchar(255);not null;default '';comment:閲囪喘璐熻矗浜�"`                  //閲囪喘璐熻矗浜�
+	OrderType           string              `json:"orderType" form:"orderType" gorm:"type:varchar(255);not null;default '';comment:鍗曟嵁绫诲瀷"`                   //鍗曟嵁绫诲瀷
+	Warehouse           string              `json:"warehouse" form:"warehouse" gorm:"type:varchar(255);not null;default '';comment:鏀惰揣浠撳簱"`                   //鏀惰揣浠撳簱
+	Quantity            decimal.Decimal     `json:"quantity" form:"quantity" gorm:"type:decimal(12,4);not null;comment:閲囪喘鏁伴噺"`                               // 閲囪喘鏁伴噺
+	TotalPrice          decimal.Decimal     `json:"totalPrice" form:"totalPrice" gorm:"type:decimal(12,2);not null;default '';comment:浠风◣鍚堣"`                //浠风◣鍚堣
+	WholeDiscountType   WholeDiscountType   `json:"wholeDiscountType" form:"wholeDiscountType" gorm:"type:tinyint(1);not null;default '';comment:鏁村崟鎶樻墸"`     //鏁村崟鎶樻墸绫诲瀷
+	WholeDiscount       decimal.Decimal     `json:"wholeDiscount" form:"wholeDiscount" gorm:"type:decimal(12,2);not null;default '';comment:鏁村崟鎶樻墸"`          //鏁村崟鎶樻墸鍊�
+	PriceAdjustmentType PriceAdjustmentType `json:"priceAdjustmentType" form:"priceAdjustmentType" gorm:"type:tinyint(1);not null;default '';comment:浠锋牸璋冩暣"` //浠锋牸璋冩暣绫诲瀷
+	PriceAdjustment     decimal.Decimal     `json:"priceAdjustment" form:"priceAdjustment" gorm:"type:decimal(12,2);not null;default '';comment:浠锋牸璋冩暣"`      //浠锋牸璋冩暣鍊�
+	RealTotalPrice      decimal.Decimal     `json:"realTotalPrice" form:"realTotalPrice" gorm:"type:decimal(12,2);not null;default '';comment:鏈�缁堜环鏍�"`        //鏈�缁堜环鏍�
+	InvoiceAmount       decimal.Decimal     `json:"invoiceAmount" form:"invoiceAmount" gorm:"type:decimal(12,2);not null;default '';comment:宸叉敹绁ㄩ噾棰�"`         //宸叉敹绁ㄩ噾棰�
+	UnInvoiceAmount     decimal.Decimal     `json:"unInvoiceAmount" form:"unInvoiceAmount" gorm:"type:decimal(12,2);not null;default '';comment:鏈敹绁ㄩ噾棰�"`     //鏈敹绁ㄩ噾棰�
+	ShouldPayAmount     decimal.Decimal     `json:"shouldPayAmount" form:"shouldPayAmount" gorm:"type:decimal(12,2);not null;default '';comment:搴斾粯閲戦"`      //搴斾粯閲戦
+	PaidAmount          decimal.Decimal     `json:"paidAmount" form:"paidAmount" gorm:"type:decimal(12,2);not null;default '';comment:宸蹭粯閲戦"`                //宸蹭粯閲戦
 }
 
 type OrderStatus int
@@ -51,13 +51,15 @@
 type WholeDiscountType int
 
 const (
-	WholeDiscountTypeDefault  WholeDiscountType = 0 //鏃犳姌鎵�
 	WholeDiscountTypePercent  WholeDiscountType = 1 //鐧惧垎姣旈檷浠�
 	WholeDiscountTypeDiscount WholeDiscountType = 2 //鐩存帴闄嶄环
 )
 
 func (wdt WholeDiscountType) IsValid(totalPrice, value decimal.Decimal) bool {
-	if wdt != WholeDiscountTypePercent && wdt != WholeDiscountTypeDiscount && wdt != WholeDiscountTypeDefault {
+	if wdt == 0 {
+		return true
+	}
+	if wdt != WholeDiscountTypePercent && wdt != WholeDiscountTypeDiscount {
 		return false
 	}
 	if wdt == WholeDiscountTypeDiscount && value.GreaterThan(totalPrice) {
@@ -77,6 +79,9 @@
 )
 
 func (pat PriceAdjustmentType) IsValid(totalPrice, value decimal.Decimal) bool {
+	if pat == 0 {
+		return true
+	}
 	if pat != PriceAdjustmentTypeAdd && pat != PriceAdjustmentTypeSub {
 		return false
 	}
diff --git a/model/purchase/request/purchase.go b/model/purchase/request/purchase.go
index 19fe8c0..6bcea8b 100644
--- a/model/purchase/request/purchase.go
+++ b/model/purchase/request/purchase.go
@@ -24,22 +24,22 @@
 }
 
 type Purchase struct {
-	ID                  uint                         `gorm:"primarykey"`                                                                                                // 涓婚敭ID
-	PurchaseTypeId      int                          `json:"purchaseTypeId" form:"purchaseType" gorm:"type:int(11);not null;default 0;comment:閲囪喘绫诲瀷id"`                  // 閲囪喘绫诲瀷id
-	SupplierId          int                          `json:"supplierId" form:"supplierId" gorm:"type:int(11);not null;default 0;comment:渚涘簲鍟唅d"`                         // 渚涘簲鍟唅d
-	Number              string                       `json:"number" form:"number" gorm:"unique;type:varchar(255);not null;default '';comment:閲囪喘缂栧彿"`                     // 閲囪喘缂栧彿
-	Name                string                       `json:"name" form:"name" gorm:"type:varchar(255);not null;default '';comment:閲囪喘鍚嶇О"`                                // 閲囪喘鍚嶇О
-	Contact             string                       `json:"contact" form:"contact" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜�"`                           // 鑱旂郴浜�
-	Phone               string                       `json:"phone" form:"phone" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜虹數璇�"`                             // 鑱旂郴浜虹數璇�
-	SigningDate         string                       `json:"signingDate" form:"signingDate" gorm:"type:varchar(255);not null;default '';comment:绛剧害鏃ユ湡"`                  // 绛剧害鏃ユ湡
-	DeliveryDate        string                       `json:"deliveryDate" form:"deliveryDate" gorm:"type:varchar(255);not null;default '';comment:浜や粯鏃ユ湡"`                //浜や粯鏃ユ湡
-	Remark              string                       `json:"remark" form:"remark" gorm:"type:varchar(1000);not null;default '';comment:澶囨敞"`                             //澶囨敞
-	Status              purchase.OrderStatus         `json:"status" form:"status" gorm:"type:tinyint(1);not null;default 0;comment:鐘舵��"`                                 //鐘舵��
-	Quantity            decimal.Decimal              `json:"quantity" form:"quantity" gorm:"type:decimal(12,4);not null;comment:閲囪喘鏁伴噺"`                                  // 閲囪喘鏁伴噺
-	TotalPrice          decimal.Decimal              `json:"totalPrice" form:"totalPrice" gorm:"type:decimal(12,2);not null;default '';comment:浠风◣鍚堣"`                   //浠风◣鍚堣
-	WholeDiscountType   purchase.WholeDiscountType   `json:"wholeDiscountType" form:"wholeDiscountType" gorm:"type:decimal(12,2);not null;default '';comment:鏁村崟鎶樻墸"`     //鏁村崟鎶樻墸绫诲瀷
-	WholeDiscount       decimal.Decimal              `json:"wholeDiscount" form:"wholeDiscount" gorm:"type:decimal(12,2);not null;default '';comment:鏁村崟鎶樻墸"`             //鏁村崟鎶樻墸鍊�
-	PriceAdjustmentType purchase.PriceAdjustmentType `json:"priceAdjustmentType" form:"priceAdjustmentType" gorm:"type:decimal(12,2);not null;default '';comment:浠锋牸璋冩暣"` //浠锋牸璋冩暣绫诲瀷
-	PriceAdjustment     decimal.Decimal              `json:"priceAdjustment" form:"priceAdjustment" gorm:"type:decimal(12,2);not null;default '';comment:浠锋牸璋冩暣"`         //浠锋牸璋冩暣鍊�
-	RealTotalPrice      decimal.Decimal              `json:"realTotalPrice" form:"realTotalPrice" gorm:"type:decimal(12,2);not null;default '';comment:鏈�缁堜环鏍�"`           //鏈�缁堜环鏍�
+	ID                  uint                         `gorm:"primarykey"`                                                                                                 // 涓婚敭ID
+	PurchaseTypeId      int                          `json:"purchaseTypeId" form:"purchaseType" gorm:"type:int(11);not null;default 0;comment:閲囪喘绫诲瀷id"`                   // 閲囪喘绫诲瀷id
+	SupplierId          int                          `json:"supplierId" form:"supplierId" gorm:"type:int(11);not null;default 0;comment:渚涘簲鍟唅d"`                          // 渚涘簲鍟唅d
+	Number              string                       `json:"number" form:"number" gorm:"unique;type:varchar(255);not null;default '';comment:閲囪喘缂栧彿"`                      // 閲囪喘缂栧彿
+	Name                string                       `json:"name" form:"name" gorm:"type:varchar(255);not null;default '';comment:閲囪喘鍚嶇О"`                                 // 閲囪喘鍚嶇О
+	Contact             string                       `json:"contact" form:"contact" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜�"`                            // 鑱旂郴浜�
+	Phone               string                       `json:"phone" form:"phone" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜虹數璇�"`                              // 鑱旂郴浜虹數璇�
+	SigningDate         string                       `json:"signingDate" form:"signingDate" gorm:"type:varchar(255);not null;default '';comment:绛剧害鏃ユ湡"`                   // 绛剧害鏃ユ湡
+	DeliveryDate        string                       `json:"deliveryDate" form:"deliveryDate" gorm:"type:varchar(255);not null;default '';comment:浜や粯鏃ユ湡"`                 //浜や粯鏃ユ湡
+	Remark              string                       `json:"remark" form:"remark" gorm:"type:varchar(1000);not null;default '';comment:澶囨敞"`                              //澶囨敞
+	Status              purchase.OrderStatus         `json:"status" form:"status" gorm:"type:tinyint(1);not null;default 0;comment:鐘舵��"`                                  //鐘舵��
+	Quantity            decimal.Decimal              `json:"quantity" form:"quantity" gorm:"type:decimal(12,2);not null;default 0;comment:閲囪喘鏁伴噺"`                         // 閲囪喘鏁伴噺
+	TotalPrice          decimal.Decimal              `json:"totalPrice" form:"totalPrice" gorm:"type:decimal(12,2);not null;default 0.00;comment:浠风◣鍚堣"`                  //浠风◣鍚堣
+	WholeDiscountType   purchase.WholeDiscountType   `json:"wholeDiscountType" form:"wholeDiscountType" gorm:"type:decimal(12,2);not null;default 0.00;comment:鏁村崟鎶樻墸"`    //鏁村崟鎶樻墸绫诲瀷
+	WholeDiscount       decimal.Decimal              `json:"wholeDiscount" form:"wholeDiscount" gorm:"type:decimal(12,2);not null;default 0;comment:鏁村崟鎶樻墸"`               //鏁村崟鎶樻墸鍊�
+	PriceAdjustmentType purchase.PriceAdjustmentType `json:"priceAdjustmentType" form:"priceAdjustmentType" gorm:"type:decimal(12,2);not null;default 0;comment:浠锋牸璋冩暣绫诲瀷"` //浠锋牸璋冩暣绫诲瀷
+	PriceAdjustment     decimal.Decimal              `json:"priceAdjustment" form:"priceAdjustment" gorm:"type:decimal(12,2);not null;default 0.00;comment:浠锋牸璋冩暣"`        //浠锋牸璋冩暣鍊�
+	RealTotalPrice      decimal.Decimal              `json:"realTotalPrice" form:"realTotalPrice" gorm:"type:decimal(12,2);not null;default 0.00;comment:鏈�缁堜环鏍�"`          //鏈�缁堜环鏍�
 }
diff --git a/model/purchase/response/purchase.go b/model/purchase/response/purchase.go
index 2588e67..043729b 100644
--- a/model/purchase/response/purchase.go
+++ b/model/purchase/response/purchase.go
@@ -3,6 +3,7 @@
 import (
 	"github.com/shopspring/decimal"
 	"srm/model/purchase"
+	"srm/model/test"
 )
 
 type PurchaseResponse struct {
@@ -26,3 +27,24 @@
 	ModelNumber      string          `json:"modelNumber" form:"modelNumber" gorm:"column:model_number;comment:鍨嬪彿;size:255;"`
 	ProductType      string          `json:"productType" form:"productType" gorm:"column:product_type;comment:浜у搧绫诲埆;size:255;"`
 }
+
+type QualityInspectList struct {
+	PurchaseTypeId int             `json:"purchaseTypeId" form:"purchaseType" gorm:"type:int(11);not null;default 0;comment:閲囪喘绫诲瀷id"` // 閲囪喘绫诲瀷id
+	OrderSource    string          `json:"orderSource" gorm:"type:varchar(255);not null;default '';comment:鍗曟嵁鏉ユ簮"`                    // 鍗曟嵁鏉ユ簮
+	SupplierId     int             `json:"supplierId" form:"supplierId" gorm:"type:int(11);not null;default 0;comment:渚涘簲鍟唅d"`        // 渚涘簲鍟唅d
+	Supplier       test.Supplier   `json:"supplier" gorm:"foreignKey:SupplierId"`
+	Number         string          `json:"number" form:"number" gorm:"unique;type:varchar(255);not null;default '';comment:閲囪喘缂栧彿"`      // 閲囪喘缂栧彿
+	Name           string          `json:"name" form:"name" gorm:"type:varchar(255);not null;default '';comment:閲囪喘鍚嶇О"`                 // 閲囪喘鍚嶇О
+	Contact        string          `json:"contact" form:"contact" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜�"`            // 鑱旂郴浜�
+	Phone          string          `json:"phone" form:"phone" gorm:"type:varchar(255);not null;default '';comment:鑱旂郴浜虹數璇�"`              // 鑱旂郴浜虹數璇�
+	SigningDate    string          `json:"signingDate" form:"signingDate" gorm:"type:varchar(255);not null;default '';comment:绛剧害鏃ユ湡"`   // 绛剧害鏃ユ湡
+	DeliveryDate   string          `json:"deliveryDate" form:"deliveryDate" gorm:"type:varchar(255);not null;default '';comment:浜や粯鏃ユ湡"` //浜や粯鏃ユ湡
+	Remark         string          `json:"remark" form:"remark" gorm:"type:varchar(1000);not null;default '';comment:澶囨敞"`              //澶囨敞
+	HandledBy      string          `json:"handledBy" form:"handledBy" gorm:"type:varchar(255);not null;default '';comment:缁忓姙浜�"`        //缁忓姙浜�
+	Creator        string          `json:"creator" form:"creator" gorm:"type:varchar(255);not null;default '';comment:鍒跺崟浜�"`            //鍒跺崟浜�
+	Principal      string          `json:"principal" form:"principal" gorm:"type:varchar(255);not null;default '';comment:閲囪喘璐熻矗浜�"`      //閲囪喘璐熻矗浜�
+	OrderType      string          `json:"orderType" form:"orderType" gorm:"type:varchar(255);not null;default '';comment:鍗曟嵁绫诲瀷"`       //鍗曟嵁绫诲瀷
+	Warehouse      string          `json:"warehouse" form:"warehouse" gorm:"type:varchar(255);not null;default '';comment:鏀惰揣浠撳簱"`       //鏀惰揣浠撳簱
+	Quantity       decimal.Decimal `json:"quantity" form:"quantity" gorm:"type:decimal(12,4);not null;comment:閲囪喘鏁伴噺"`                   // 閲囪喘鏁伴噺
+	InspectStatus  string          `json:"inspectStatus" form:"inspectStatus"`                                                         //妫�娴嬬粨鏋�
+}
diff --git a/proto/quality_inspect.proto b/proto/quality_inspect.proto
index 3d8c695..9eb6165 100644
--- a/proto/quality_inspect.proto
+++ b/proto/quality_inspect.proto
@@ -26,7 +26,7 @@
   double report_amount = 13; // 鎶ユ鏁伴噺
   InspectMethod inspect_method = 14; // 妫�楠屾柟寮�
   double inspect_amount = 15; // 妫�楠屾暟閲�
-  int32 status = 16; // 鐘舵��
+  InspectStatus status = 16; // 鐘舵��
   string submit_id = 17; // 鎻愪氦浜篒D
   double reject_amount = 18; // 閫�璐ф暟閲�
   double exchange_amount = 19; // 鎹㈣揣鏁伴噺
@@ -60,6 +60,15 @@
 }
 
 
+// InspectStatus 妫�楠岀姸鎬�
+enum InspectStatus {
+  InspectStatusNull = 0;
+  InspectStatusWaitInspect   = 1; // 寰呮鏌�
+  InspectStatusAuditing      = 2; // 瀹℃牳涓�
+  InspectStatusAuditFinish   = 3; // 瀹℃牳瀹屾垚
+  InspectStatusInspectFinish = 4; // 妫�鏌ュ畬鎴�
+}
+
 
 message SendPurchaseInspectResponse {
   int32   Code  = 1;
@@ -68,9 +77,7 @@
 
 
 message GetInspectListRequest{
-  int32 page = 1;
-  int32 pageSize = 2;
-  string keyword = 3;
+  repeated string purchase_order_id = 1;
 }
 
 message GetInspectListResponse{
diff --git a/proto/qualityinspect/quality_inspect.pb.go b/proto/qualityinspect/quality_inspect.pb.go
index 7d05402..e1f671b 100644
--- a/proto/qualityinspect/quality_inspect.pb.go
+++ b/proto/qualityinspect/quality_inspect.pb.go
@@ -176,6 +176,62 @@
 	return file_quality_inspect_proto_rawDescGZIP(), []int{2}
 }
 
+// InspectStatus 妫�楠岀姸鎬�
+type InspectStatus int32
+
+const (
+	InspectStatus_InspectStatusNull          InspectStatus = 0
+	InspectStatus_InspectStatusWaitInspect   InspectStatus = 1 // 寰呮鏌�
+	InspectStatus_InspectStatusAuditing      InspectStatus = 2 // 瀹℃牳涓�
+	InspectStatus_InspectStatusAuditFinish   InspectStatus = 3 // 瀹℃牳瀹屾垚
+	InspectStatus_InspectStatusInspectFinish InspectStatus = 4 // 妫�鏌ュ畬鎴�
+)
+
+// Enum value maps for InspectStatus.
+var (
+	InspectStatus_name = map[int32]string{
+		0: "InspectStatusNull",
+		1: "InspectStatusWaitInspect",
+		2: "InspectStatusAuditing",
+		3: "InspectStatusAuditFinish",
+		4: "InspectStatusInspectFinish",
+	}
+	InspectStatus_value = map[string]int32{
+		"InspectStatusNull":          0,
+		"InspectStatusWaitInspect":   1,
+		"InspectStatusAuditing":      2,
+		"InspectStatusAuditFinish":   3,
+		"InspectStatusInspectFinish": 4,
+	}
+)
+
+func (x InspectStatus) Enum() *InspectStatus {
+	p := new(InspectStatus)
+	*p = x
+	return p
+}
+
+func (x InspectStatus) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (InspectStatus) Descriptor() protoreflect.EnumDescriptor {
+	return file_quality_inspect_proto_enumTypes[3].Descriptor()
+}
+
+func (InspectStatus) Type() protoreflect.EnumType {
+	return &file_quality_inspect_proto_enumTypes[3]
+}
+
+func (x InspectStatus) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use InspectStatus.Descriptor instead.
+func (InspectStatus) EnumDescriptor() ([]byte, []int) {
+	return file_quality_inspect_proto_rawDescGZIP(), []int{3}
+}
+
 type SendPurchaseInspectRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -243,7 +299,7 @@
 	ReportAmount    float64       `protobuf:"fixed64,13,opt,name=report_amount,json=reportAmount,proto3" json:"report_amount,omitempty"`                      // 鎶ユ鏁伴噺
 	InspectMethod   InspectMethod `protobuf:"varint,14,opt,name=inspect_method,json=inspectMethod,proto3,enum=InspectMethod" json:"inspect_method,omitempty"` // 妫�楠屾柟寮�
 	InspectAmount   float64       `protobuf:"fixed64,15,opt,name=inspect_amount,json=inspectAmount,proto3" json:"inspect_amount,omitempty"`                   // 妫�楠屾暟閲�
-	Status          int32         `protobuf:"varint,16,opt,name=status,proto3" json:"status,omitempty"`                                                       // 鐘舵��
+	Status          InspectStatus `protobuf:"varint,16,opt,name=status,proto3,enum=InspectStatus" json:"status,omitempty"`                                    // 鐘舵��
 	SubmitId        string        `protobuf:"bytes,17,opt,name=submit_id,json=submitId,proto3" json:"submit_id,omitempty"`                                    // 鎻愪氦浜篒D
 	RejectAmount    float64       `protobuf:"fixed64,18,opt,name=reject_amount,json=rejectAmount,proto3" json:"reject_amount,omitempty"`                      // 閫�璐ф暟閲�
 	ExchangeAmount  float64       `protobuf:"fixed64,19,opt,name=exchange_amount,json=exchangeAmount,proto3" json:"exchange_amount,omitempty"`                // 鎹㈣揣鏁伴噺
@@ -389,11 +445,11 @@
 	return 0
 }
 
-func (x *QualityInspect) GetStatus() int32 {
+func (x *QualityInspect) GetStatus() InspectStatus {
 	if x != nil {
 		return x.Status
 	}
-	return 0
+	return InspectStatus_InspectStatusNull
 }
 
 func (x *QualityInspect) GetSubmitId() string {
@@ -498,9 +554,7 @@
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Page     int32  `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"`
-	PageSize int32  `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
-	Keyword  string `protobuf:"bytes,3,opt,name=keyword,proto3" json:"keyword,omitempty"`
+	PurchaseOrderId []string `protobuf:"bytes,1,rep,name=purchase_order_id,json=purchaseOrderId,proto3" json:"purchase_order_id,omitempty"`
 }
 
 func (x *GetInspectListRequest) Reset() {
@@ -535,25 +589,11 @@
 	return file_quality_inspect_proto_rawDescGZIP(), []int{3}
 }
 
-func (x *GetInspectListRequest) GetPage() int32 {
+func (x *GetInspectListRequest) GetPurchaseOrderId() []string {
 	if x != nil {
-		return x.Page
+		return x.PurchaseOrderId
 	}
-	return 0
-}
-
-func (x *GetInspectListRequest) GetPageSize() int32 {
-	if x != nil {
-		return x.PageSize
-	}
-	return 0
-}
-
-func (x *GetInspectListRequest) GetKeyword() string {
-	if x != nil {
-		return x.Keyword
-	}
-	return ""
+	return nil
 }
 
 type GetInspectListResponse struct {
@@ -635,7 +675,7 @@
 	0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65,
 	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20,
 	0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x73,
-	0x70, 0x65, 0x63, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0xbe, 0x06, 0x0a, 0x0e, 0x51,
+	0x70, 0x65, 0x63, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0xce, 0x06, 0x0a, 0x0e, 0x51,
 	0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x0a,
 	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a,
 	0x0c, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20,
@@ -672,7 +712,8 @@
 	0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x73,
 	0x70, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28,
 	0x01, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74,
-	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05,
+	0x12, 0x26, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x0e, 0x2e, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
 	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x6d,
 	0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62,
 	0x6d, 0x69, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x5f,
@@ -692,54 +733,62 @@
 	0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f,
 	0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10,
 	0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67,
-	0x22, 0x61, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x69,
-	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a,
-	0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
-	0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79,
-	0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77,
-	0x6f, 0x72, 0x64, 0x22, 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63,
-	0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a,
-	0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64,
-	0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
-	0x4d, 0x73, 0x67, 0x12, 0x23, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65,
-	0x63, 0x74, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x61,
-	0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x2a, 0x86,
-	0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16,
-	0x0a, 0x12, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74,
-	0x54, 0x79, 0x70, 0x65, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63,
-	0x74, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x10, 0x01, 0x12, 0x17, 0x0a,
-	0x13, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x50, 0x75, 0x72, 0x63,
-	0x68, 0x61, 0x73, 0x65, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63,
-	0x74, 0x54, 0x79, 0x70, 0x65, 0x4f, 0x75, 0x74, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x10, 0x03,
-	0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52,
-	0x65, 0x6a, 0x65, 0x63, 0x74, 0x10, 0x04, 0x2a, 0x6c, 0x0a, 0x0c, 0x4d, 0x61, 0x74, 0x65, 0x72,
-	0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x65, 0x66, 0x61, 0x75,
-	0x6c, 0x74, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x10, 0x00,
-	0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65,
-	0x52, 0x61, 0x77, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
-	0x6c, 0x54, 0x79, 0x70, 0x65, 0x53, 0x65, 0x6d, 0x69, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x4d,
-	0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73,
-	0x68, 0x65, 0x64, 0x10, 0x03, 0x2a, 0x56, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74,
-	0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
-	0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x10, 0x00,
-	0x12, 0x14, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f,
-	0x64, 0x41, 0x6c, 0x6c, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63,
-	0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x70, 0x6f, 0x74, 0x10, 0x02, 0x32, 0xb0, 0x01,
-	0x0a, 0x15, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x50,
-	0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x12, 0x1b,
-	0x2e, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73,
-	0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x53, 0x65,
-	0x6e, 0x64, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0e, 0x47,
-	0x65, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e,
-	0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65,
-	0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x42, 0x12, 0x5a, 0x10, 0x2e, 0x2f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x69, 0x6e, 0x73,
-	0x70, 0x65, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x22, 0x43, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x75, 0x72,
+	0x63, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4f, 0x72,
+	0x64, 0x65, 0x72, 0x49, 0x64, 0x22, 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x70,
+	0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x23, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x73,
+	0x70, 0x65, 0x63, 0x74, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f,
+	0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c,
+	0x2a, 0x86, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65,
+	0x12, 0x16, 0x0a, 0x12, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65,
+	0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x73, 0x70,
+	0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x10, 0x01, 0x12,
+	0x17, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x50, 0x75,
+	0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x6e, 0x73, 0x70,
+	0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x4f, 0x75, 0x74, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x10, 0x04, 0x2a, 0x6c, 0x0a, 0x0c, 0x4d, 0x61, 0x74,
+	0x65, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x65, 0x66,
+	0x61, 0x75, 0x6c, 0x74, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65,
+	0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x79,
+	0x70, 0x65, 0x52, 0x61, 0x77, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x65, 0x72,
+	0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x53, 0x65, 0x6d, 0x69, 0x10, 0x02, 0x12, 0x18, 0x0a,
+	0x14, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6e,
+	0x69, 0x73, 0x68, 0x65, 0x64, 0x10, 0x03, 0x2a, 0x56, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x70, 0x65,
+	0x63, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x65, 0x66, 0x61,
+	0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64,
+	0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74,
+	0x68, 0x6f, 0x64, 0x41, 0x6c, 0x6c, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x73, 0x70,
+	0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x70, 0x6f, 0x74, 0x10, 0x02, 0x2a,
+	0x9d, 0x01, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x6e, 0x73, 0x70,
+	0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x57, 0x61, 0x69, 0x74, 0x49, 0x6e, 0x73,
+	0x70, 0x65, 0x63, 0x74, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63,
+	0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x75, 0x64, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x10,
+	0x02, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x41, 0x75, 0x64, 0x69, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x10, 0x03, 0x12,
+	0x1e, 0x0a, 0x1a, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x10, 0x04, 0x32,
+	0xb0, 0x01, 0x0a, 0x15, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x73, 0x70, 0x65,
+	0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x13, 0x53, 0x65, 0x6e,
+	0x64, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74,
+	0x12, 0x1b, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49,
+	0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e,
+	0x53, 0x65, 0x6e, 0x64, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x70,
+	0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a,
+	0x0e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12,
+	0x16, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73,
+	0x70, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x42, 0x12, 0x5a, 0x10, 0x2e, 0x2f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x69,
+	0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -754,33 +803,35 @@
 	return file_quality_inspect_proto_rawDescData
 }
 
-var file_quality_inspect_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
+var file_quality_inspect_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
 var file_quality_inspect_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
 var file_quality_inspect_proto_goTypes = []interface{}{
 	(InspectType)(0),                    // 0: InspectType
 	(MaterialType)(0),                   // 1: MaterialType
 	(InspectMethod)(0),                  // 2: InspectMethod
-	(*SendPurchaseInspectRequest)(nil),  // 3: SendPurchaseInspectRequest
-	(*QualityInspect)(nil),              // 4: QualityInspect
-	(*SendPurchaseInspectResponse)(nil), // 5: SendPurchaseInspectResponse
-	(*GetInspectListRequest)(nil),       // 6: GetInspectListRequest
-	(*GetInspectListResponse)(nil),      // 7: GetInspectListResponse
+	(InspectStatus)(0),                  // 3: InspectStatus
+	(*SendPurchaseInspectRequest)(nil),  // 4: SendPurchaseInspectRequest
+	(*QualityInspect)(nil),              // 5: QualityInspect
+	(*SendPurchaseInspectResponse)(nil), // 6: SendPurchaseInspectResponse
+	(*GetInspectListRequest)(nil),       // 7: GetInspectListRequest
+	(*GetInspectListResponse)(nil),      // 8: GetInspectListResponse
 }
 var file_quality_inspect_proto_depIdxs = []int32{
-	4, // 0: SendPurchaseInspectRequest.list:type_name -> QualityInspect
+	5, // 0: SendPurchaseInspectRequest.list:type_name -> QualityInspect
 	0, // 1: QualityInspect.inspect_type:type_name -> InspectType
 	1, // 2: QualityInspect.material_type:type_name -> MaterialType
 	2, // 3: QualityInspect.inspect_method:type_name -> InspectMethod
-	4, // 4: GetInspectListResponse.List:type_name -> QualityInspect
-	3, // 5: QualityInspectService.SendPurchaseInspect:input_type -> SendPurchaseInspectRequest
-	6, // 6: QualityInspectService.GetInspectList:input_type -> GetInspectListRequest
-	5, // 7: QualityInspectService.SendPurchaseInspect:output_type -> SendPurchaseInspectResponse
-	7, // 8: QualityInspectService.GetInspectList:output_type -> GetInspectListResponse
-	7, // [7:9] is the sub-list for method output_type
-	5, // [5:7] is the sub-list for method input_type
-	5, // [5:5] is the sub-list for extension type_name
-	5, // [5:5] is the sub-list for extension extendee
-	0, // [0:5] is the sub-list for field type_name
+	3, // 4: QualityInspect.status:type_name -> InspectStatus
+	5, // 5: GetInspectListResponse.List:type_name -> QualityInspect
+	4, // 6: QualityInspectService.SendPurchaseInspect:input_type -> SendPurchaseInspectRequest
+	7, // 7: QualityInspectService.GetInspectList:input_type -> GetInspectListRequest
+	6, // 8: QualityInspectService.SendPurchaseInspect:output_type -> SendPurchaseInspectResponse
+	8, // 9: QualityInspectService.GetInspectList:output_type -> GetInspectListResponse
+	8, // [8:10] is the sub-list for method output_type
+	6, // [6:8] is the sub-list for method input_type
+	6, // [6:6] is the sub-list for extension type_name
+	6, // [6:6] is the sub-list for extension extendee
+	0, // [0:6] is the sub-list for field type_name
 }
 
 func init() { file_quality_inspect_proto_init() }
@@ -855,7 +906,7 @@
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_quality_inspect_proto_rawDesc,
-			NumEnums:      3,
+			NumEnums:      4,
 			NumMessages:   5,
 			NumExtensions: 0,
 			NumServices:   1,
diff --git a/router/purchase/purchase.go b/router/purchase/purchase.go
index a7b3728..fc32f6a 100644
--- a/router/purchase/purchase.go
+++ b/router/purchase/purchase.go
@@ -18,4 +18,12 @@
 		purchaseRouter.POST("purchaseType", PurchaseApi.SavePurchaseType)       // 淇濆瓨閲囪喘绫诲瀷
 		purchaseRouter.GET("purchaseTypeList", PurchaseApi.GetPurchaseTypeList) // 鏌ヨ閲囪喘绫诲瀷
 	}
+
+	qualityInspectRouter := Router.Group("purchase")
+	qualityInspectApi := purchase.QualityInspectApi{}
+	{
+		//qualityInspectRouter.GET("purchase/:id", qualityInspectApi.GetPurchase)             // 鑾峰彇鍗曚竴閲囪喘鍗曚俊鎭�
+		qualityInspectRouter.GET("qualityInspectList", qualityInspectApi.GetQualityInspectList) // 鑾峰彇閲囪喘鍗曞垪琛�
+	}
+
 }
diff --git a/service/purchase/purchase.go b/service/purchase/purchase.go
index ffa39d2..2d72725 100644
--- a/service/purchase/purchase.go
+++ b/service/purchase/purchase.go
@@ -25,27 +25,11 @@
 //@return: err error
 
 func (slf *PurchaseService) CreatePurchase(record *purchase.Purchase, productList []*purchase.PurchaseProducts) (err error) {
+	err = DealPrice(record, productList)
+	if err != nil {
+		return err
+	}
 	err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
-		var quantity decimal.Decimal
-		var totalPrice decimal.Decimal
-		var realTotalPrice decimal.Decimal
-		for _, product := range productList {
-			quantity = quantity.Add(product.Amount)
-			totalPrice = totalPrice.Add(product.Price.Mul(product.Amount))
-		}
-		if !totalPrice.Equal(record.TotalPrice) {
-			return errors.New("浠风◣鎬昏璁$畻閿欒")
-		}
-		if !quantity.Equal(record.Quantity) {
-			return errors.New("浜у搧鏁伴噺璁$畻閿欒")
-		}
-		realTotalPrice = record.CalcRealTotalPrice()
-		if !realTotalPrice.Equal(record.RealTotalPrice) {
-			return errors.New("鏈�缁堜环鏍艰绠楅敊璇�")
-		}
-		record.UnInvoiceAmount = record.RealTotalPrice
-		record.ShouldPayAmount = record.RealTotalPrice
-
 		err = tx.Create(&record).Error
 		if err != nil {
 			return err
@@ -57,6 +41,29 @@
 	})
 
 	return err
+}
+
+func DealPrice(record *purchase.Purchase, productList []*purchase.PurchaseProducts) error {
+	var quantity decimal.Decimal
+	var totalPrice decimal.Decimal
+	var realTotalPrice decimal.Decimal
+	for _, product := range productList {
+		quantity = quantity.Add(product.Amount)
+		totalPrice = totalPrice.Add(product.Price.Mul(product.Amount))
+	}
+	if !totalPrice.Equal(record.TotalPrice) {
+		return errors.New("浠风◣鎬昏璁$畻閿欒")
+	}
+	if !quantity.Equal(record.Quantity) {
+		return errors.New("浜у搧鏁伴噺璁$畻閿欒")
+	}
+	realTotalPrice = record.CalcRealTotalPrice()
+	if !realTotalPrice.Equal(record.RealTotalPrice) {
+		return errors.New("鏈�缁堜环鏍艰绠楅敊璇�")
+	}
+	record.UnInvoiceAmount = record.RealTotalPrice
+	record.ShouldPayAmount = record.RealTotalPrice
+	return nil
 }
 
 //@function: DeletePurchase
@@ -81,12 +88,11 @@
 //@return: err error
 
 func (slf *PurchaseService) UpdatePurchase(params *purchase.Purchase, productList []*purchase.PurchaseProducts) (err error) {
+	err = DealPrice(params, productList)
+	if err != nil {
+		return err
+	}
 	err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
-		var quantity decimal.Decimal
-		for _, product := range productList {
-			quantity = quantity.Add(product.Amount)
-		}
-		params.Quantity = quantity
 		err = tx.Where("id = ?", params.ID).Updates(params).Error
 		if err != nil {
 			return err
@@ -131,7 +137,7 @@
 			Or("Product.name like ?", "%"+info.Keyword+"%").
 			Or("supplier.name like ?", "%"+info.Keyword+"%")
 	}
-	var purchaseList []purchase.Purchase
+	var purchaseList []*purchase.Purchase
 	err = db.Count(&total).Error
 	if err != nil {
 		return purchaseList, total, err
@@ -210,20 +216,24 @@
 			continue
 		}
 		inspectOrder := &qualityinspect.QualityInspect{
-			InspectType:   qualityinspect.InspectType_InspectTypePurchase,
-			MaterialType:  qualityinspect.MaterialType_MaterialTypeRaw,
-			MaterialName:  product.Name,
-			MaterialId:    product.Number,
-			MaterialTp:    product.ModelNumber,
-			MaterialUnit:  product.Unit,
-			Supplier:      record.Supplier.Name,
-			WarehouseName: "閲囪喘鎬讳粨",
-			ReportAmount:  productItem.Amount.InexactFloat64(),
-			InspectMethod: qualityinspect.InspectMethod_InspectMethodAll,
-			InspectAmount: productItem.Amount.InexactFloat64(),
+			InspectType:     qualityinspect.InspectType_InspectTypePurchase,
+			MaterialType:    qualityinspect.MaterialType_MaterialTypeRaw,
+			MaterialName:    product.Name,
+			MaterialId:      product.Number,
+			MaterialTp:      product.ModelNumber,
+			MaterialUnit:    product.Unit,
+			Supplier:        record.Supplier.Name,
+			WarehouseName:   "閲囪喘鎬讳粨",
+			ReportAmount:    productItem.Amount.InexactFloat64(),
+			InspectMethod:   qualityinspect.InspectMethod_InspectMethodAll,
+			InspectAmount:   productItem.Amount.InexactFloat64(),
+			PurchaseOrderId: record.Number,
 		}
 		inspectOrders = append(inspectOrders, inspectOrder)
 	}
+	if len(inspectOrders) == 0 {
+		return nil
+	}
 	inspectRequest := qualityinspect.SendPurchaseInspectRequest{List: inspectOrders}
 	_, err = qualityinspect.NewQualityInspectServiceClient(qualityinspect.Conn).SendPurchaseInspect(context.Background(), &inspectRequest)
 	return err
diff --git a/service/purchase/quality_inspect.go b/service/purchase/quality_inspect.go
new file mode 100644
index 0000000..ce17a43
--- /dev/null
+++ b/service/purchase/quality_inspect.go
@@ -0,0 +1,61 @@
+package purchase
+
+//
+//import (
+//	"srm/global"
+//	"srm/model/common/request"
+//)
+//
+//type QualityInspect struct{}
+//
+//func NewQualityInspect() *QualityInspect {
+//	return &QualityInspect{}
+//}
+//
+////@function: GetQualityInspect
+////@description: 鑾峰彇閲囪喘鍗曚俊鎭�
+////@param: id uint
+////@return: QualityInspect model.QualityInspect, err error
+//
+//func (slf *QualityInspect) GetQualityInspect(id uint) (QualityInspect QualityInspect.QualityInspect, err error) {
+//	err = global.GVA_DB.Where("id = ?", id).Preload("Supplier").First(&QualityInspect).Error
+//	return
+//}
+//
+////@function: GetQualityInspectList
+////@description: 鍒嗛〉鑾峰彇閲囪喘鍗曞垪琛�
+////@param: info request.PageInfo
+////@return: list interface{}, total int64, err error
+//
+//func (slf *QualityInspect) GetQualityInspectList(info request.PageInfo) (list interface{}, total int64, err error) {
+//	limit := info.PageSize
+//	offset := info.PageSize * (info.Page - 1)
+//	db := global.GVA_DB.Model(&QualityInspect.QualityInspect{})
+//	if info.Keyword != "" {
+//		db.Distinct("QualityInspects.id").Joins("left join QualityInspect_products on QualityInspect_products.QualityInspect_id = QualityInspects.id").
+//			Joins("left join Product on Product.Id = QualityInspect_products.product_id").
+//			Joins("left join supplier on supplier.Id = QualityInspects.supplier_id").
+//			Where("QualityInspects.name like ?", "%"+info.Keyword+"%").
+//			Or("Product.name like ?", "%"+info.Keyword+"%").
+//			Or("supplier.name like ?", "%"+info.Keyword+"%")
+//	}
+//	var QualityInspectList []QualityInspect.QualityInspect
+//	err = db.Count(&total).Error
+//	if err != nil {
+//		return QualityInspectList, total, err
+//	}
+//	err = db.Limit(limit).Offset(offset).Find(&QualityInspectList).Error
+//	return QualityInspectList, total, err
+//}
+//
+////@function: GetQualityInspectProductList
+////@description: 鍒嗛〉鑾峰彇閲囪喘鍗曚骇鍝佸垪琛�
+////@param: QualityInspectId int
+////@return: list interface{},  err error
+//
+//func (slf *QualityInspect) GetQualityInspectProductList(QualityInspectId uint) (list []*QualityInspect.QualityInspectProducts, err error) {
+//	db := global.GVA_DB.Model(&QualityInspect.QualityInspectProducts{})
+//	list = make([]*QualityInspect.QualityInspectProducts, 0)
+//	err = db.Where("QualityInspect_id = ?", QualityInspectId).Preload("Product").Find(&list).Error
+//	return list, err
+//}
diff --git a/utils/structx.go b/utils/structx.go
new file mode 100644
index 0000000..b7b0aec
--- /dev/null
+++ b/utils/structx.go
@@ -0,0 +1,16 @@
+package utils
+
+import "encoding/json"
+
+func AssignTo(from interface{}, to interface{}) error {
+	data, err := json.Marshal(from)
+	if err != nil {
+		return err
+	}
+
+	err = json.Unmarshal(data, to)
+	if err != nil {
+		return err
+	}
+	return nil
+}

--
Gitblit v1.8.0