From f67698f7abf35689f24fdb17827249de79034a95 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 10 八月 2023 17:23:12 +0800
Subject: [PATCH] 服务单增加筛选条件

---
 model/serviceContract.go      |    2 
 model/serviceOrder.go         |   74 +++++++++---
 model/salesDetails.go         |    2 
 service/serviceOrder.go       |   11 +
 constvar/serviceOrder.go      |   10 +
 api/v1/serviceOrder.go        |    6 
 docs/swagger.yaml             |   66 +++++++++++
 docs/docs.go                  |   87 ++++++++++++++
 docs/swagger.json             |   87 ++++++++++++++
 model/request/serviceOrder.go |    6 
 10 files changed, 322 insertions(+), 29 deletions(-)

diff --git a/api/v1/serviceOrder.go b/api/v1/serviceOrder.go
index 426dcef..e482d3c 100644
--- a/api/v1/serviceOrder.go
+++ b/api/v1/serviceOrder.go
@@ -99,15 +99,17 @@
 // @Tags		鏈嶅姟鍗曠鐞�
 // @Summary	鑾峰彇鏈嶅姟鍗曞垪琛�
 // @Produce	application/json
+// @Param		object	query		request.GetServiceOrderList	true	"鍙傛暟"
 // @Success	200	{object}	response.ListResponse{data=[]model.ServiceOrder}
 // @Router		/api/serviceOrder/list [get]
 func (s *ServiceOrderApi) List(c *gin.Context) {
-	ctx, ok := contextx.NewContext(c, nil)
+	var params request.GetServiceOrderList
+	ctx, ok := contextx.NewContext(c, &params)
 	if !ok {
 		return
 	}
 
-	serviceOrder, total, errCode := service.NewServiceOrderService().GetServiceOrderList()
+	serviceOrder, total, errCode := service.NewServiceOrderService().GetServiceOrderList(params.Page, params.PageSize, params.QueryClass, params.KeywordType, params.Keyword)
 	if errCode != ecode.OK {
 		ctx.Fail(errCode)
 		return
diff --git a/constvar/serviceOrder.go b/constvar/serviceOrder.go
index 959e402..0e67d54 100644
--- a/constvar/serviceOrder.go
+++ b/constvar/serviceOrder.go
@@ -1,4 +1,5 @@
 package constvar
+
 type ServiceOrderQueryClass string
 
 const (
@@ -8,5 +9,12 @@
 type ServiceOrderKeywordType string
 
 const (
-	ServiceOrderKeywordCustomerName   ServiceOrderKeywordType = ""
+	ServiceOrderKeywordOrderNumber     ServiceOrderKeywordType = "鏈嶅姟鍗曠紪鍙�"
+	ServiceOrderKeywordSubject         ServiceOrderKeywordType = "涓婚"
+	ServiceOrderKeywordClientName      ServiceOrderKeywordType = "瀹㈡埛鍚嶇О"
+	ServiceOrderKeywordRealProcessTime ServiceOrderKeywordType = "瀹為檯澶勭悊鏃堕棿"
+	ServiceOrderKeywordServiceMan      ServiceOrderKeywordType = "鏈嶅姟浜哄憳"
+	ServiceOrderKeywordServiceType     ServiceOrderKeywordType = "鏈嶅姟鏂瑰紡"
+	ServiceOrderKeywordProductType     ServiceOrderKeywordType = "浜у搧绫诲埆"
+	ServiceOrderKeywordFaultType       ServiceOrderKeywordType = "鏁呴殰绫诲埆"
 )
diff --git a/docs/docs.go b/docs/docs.go
index aa11e95..5b72437 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -8275,6 +8275,61 @@
                     "鏈嶅姟鍗曠鐞�"
                 ],
                 "summary": "鑾峰彇鏈嶅姟鍗曞垪琛�",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "name": "keyword",
+                        "in": "query"
+                    },
+                    {
+                        "enum": [
+                            "鏈嶅姟鍗曠紪鍙�",
+                            "涓婚",
+                            "瀹㈡埛鍚嶇О",
+                            "瀹為檯澶勭悊鏃堕棿",
+                            "鏈嶅姟浜哄憳",
+                            "鏈嶅姟鏂瑰紡",
+                            "浜у搧绫诲埆",
+                            "鏁呴殰绫诲埆"
+                        ],
+                        "type": "string",
+                        "x-enum-varnames": [
+                            "ServiceOrderKeywordOrderNumber",
+                            "ServiceOrderKeywordSubject",
+                            "ServiceOrderKeywordClientName",
+                            "ServiceOrderKeywordRealProcessTime",
+                            "ServiceOrderKeywordServiceMan",
+                            "ServiceOrderKeywordServiceType",
+                            "ServiceOrderKeywordProductType",
+                            "ServiceOrderKeywordFaultType"
+                        ],
+                        "name": "keywordType",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    },
+                    {
+                        "enum": [
+                            ""
+                        ],
+                        "type": "string",
+                        "x-enum-varnames": [
+                            "ServiceOrderQueryClassExpireLessThen60Days"
+                        ],
+                        "name": "queryClass",
+                        "in": "query"
+                    }
+                ],
                 "responses": {
                     "200": {
                         "description": "OK",
@@ -9965,6 +10020,38 @@
                 "ServiceFollowupKeywordSatisfactionDegree"
             ]
         },
+        "constvar.ServiceOrderKeywordType": {
+            "type": "string",
+            "enum": [
+                "鏈嶅姟鍗曠紪鍙�",
+                "涓婚",
+                "瀹㈡埛鍚嶇О",
+                "瀹為檯澶勭悊鏃堕棿",
+                "鏈嶅姟浜哄憳",
+                "鏈嶅姟鏂瑰紡",
+                "浜у搧绫诲埆",
+                "鏁呴殰绫诲埆"
+            ],
+            "x-enum-varnames": [
+                "ServiceOrderKeywordOrderNumber",
+                "ServiceOrderKeywordSubject",
+                "ServiceOrderKeywordClientName",
+                "ServiceOrderKeywordRealProcessTime",
+                "ServiceOrderKeywordServiceMan",
+                "ServiceOrderKeywordServiceType",
+                "ServiceOrderKeywordProductType",
+                "ServiceOrderKeywordFaultType"
+            ]
+        },
+        "constvar.ServiceOrderQueryClass": {
+            "type": "string",
+            "enum": [
+                ""
+            ],
+            "x-enum-varnames": [
+                "ServiceOrderQueryClassExpireLessThen60Days"
+            ]
+        },
         "constvar.UserType": {
             "type": "integer",
             "enum": [
diff --git a/docs/swagger.json b/docs/swagger.json
index 0fe48cc..04fbdf9 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -8263,6 +8263,61 @@
                     "鏈嶅姟鍗曠鐞�"
                 ],
                 "summary": "鑾峰彇鏈嶅姟鍗曞垪琛�",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "name": "keyword",
+                        "in": "query"
+                    },
+                    {
+                        "enum": [
+                            "鏈嶅姟鍗曠紪鍙�",
+                            "涓婚",
+                            "瀹㈡埛鍚嶇О",
+                            "瀹為檯澶勭悊鏃堕棿",
+                            "鏈嶅姟浜哄憳",
+                            "鏈嶅姟鏂瑰紡",
+                            "浜у搧绫诲埆",
+                            "鏁呴殰绫诲埆"
+                        ],
+                        "type": "string",
+                        "x-enum-varnames": [
+                            "ServiceOrderKeywordOrderNumber",
+                            "ServiceOrderKeywordSubject",
+                            "ServiceOrderKeywordClientName",
+                            "ServiceOrderKeywordRealProcessTime",
+                            "ServiceOrderKeywordServiceMan",
+                            "ServiceOrderKeywordServiceType",
+                            "ServiceOrderKeywordProductType",
+                            "ServiceOrderKeywordFaultType"
+                        ],
+                        "name": "keywordType",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "椤电爜",
+                        "name": "page",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "姣忛〉澶у皬",
+                        "name": "pageSize",
+                        "in": "query"
+                    },
+                    {
+                        "enum": [
+                            ""
+                        ],
+                        "type": "string",
+                        "x-enum-varnames": [
+                            "ServiceOrderQueryClassExpireLessThen60Days"
+                        ],
+                        "name": "queryClass",
+                        "in": "query"
+                    }
+                ],
                 "responses": {
                     "200": {
                         "description": "OK",
@@ -9953,6 +10008,38 @@
                 "ServiceFollowupKeywordSatisfactionDegree"
             ]
         },
+        "constvar.ServiceOrderKeywordType": {
+            "type": "string",
+            "enum": [
+                "鏈嶅姟鍗曠紪鍙�",
+                "涓婚",
+                "瀹㈡埛鍚嶇О",
+                "瀹為檯澶勭悊鏃堕棿",
+                "鏈嶅姟浜哄憳",
+                "鏈嶅姟鏂瑰紡",
+                "浜у搧绫诲埆",
+                "鏁呴殰绫诲埆"
+            ],
+            "x-enum-varnames": [
+                "ServiceOrderKeywordOrderNumber",
+                "ServiceOrderKeywordSubject",
+                "ServiceOrderKeywordClientName",
+                "ServiceOrderKeywordRealProcessTime",
+                "ServiceOrderKeywordServiceMan",
+                "ServiceOrderKeywordServiceType",
+                "ServiceOrderKeywordProductType",
+                "ServiceOrderKeywordFaultType"
+            ]
+        },
+        "constvar.ServiceOrderQueryClass": {
+            "type": "string",
+            "enum": [
+                ""
+            ],
+            "x-enum-varnames": [
+                "ServiceOrderQueryClassExpireLessThen60Days"
+            ]
+        },
         "constvar.UserType": {
             "type": "integer",
             "enum": [
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index f47fa36..aa5fcc2 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -238,6 +238,32 @@
     - ServiceFollowupKeywordCustomerServiceNo
     - ServiceFollowupKeywordVisitor
     - ServiceFollowupKeywordSatisfactionDegree
+  constvar.ServiceOrderKeywordType:
+    enum:
+    - 鏈嶅姟鍗曠紪鍙�
+    - 涓婚
+    - 瀹㈡埛鍚嶇О
+    - 瀹為檯澶勭悊鏃堕棿
+    - 鏈嶅姟浜哄憳
+    - 鏈嶅姟鏂瑰紡
+    - 浜у搧绫诲埆
+    - 鏁呴殰绫诲埆
+    type: string
+    x-enum-varnames:
+    - ServiceOrderKeywordOrderNumber
+    - ServiceOrderKeywordSubject
+    - ServiceOrderKeywordClientName
+    - ServiceOrderKeywordRealProcessTime
+    - ServiceOrderKeywordServiceMan
+    - ServiceOrderKeywordServiceType
+    - ServiceOrderKeywordProductType
+    - ServiceOrderKeywordFaultType
+  constvar.ServiceOrderQueryClass:
+    enum:
+    - ""
+    type: string
+    x-enum-varnames:
+    - ServiceOrderQueryClassExpireLessThen60Days
   constvar.UserType:
     enum:
     - 1
@@ -10515,6 +10541,46 @@
       - 鏈嶅姟鍗曠鐞�
   /api/serviceOrder/list:
     get:
+      parameters:
+      - in: query
+        name: keyword
+        type: string
+      - enum:
+        - 鏈嶅姟鍗曠紪鍙�
+        - 涓婚
+        - 瀹㈡埛鍚嶇О
+        - 瀹為檯澶勭悊鏃堕棿
+        - 鏈嶅姟浜哄憳
+        - 鏈嶅姟鏂瑰紡
+        - 浜у搧绫诲埆
+        - 鏁呴殰绫诲埆
+        in: query
+        name: keywordType
+        type: string
+        x-enum-varnames:
+        - ServiceOrderKeywordOrderNumber
+        - ServiceOrderKeywordSubject
+        - ServiceOrderKeywordClientName
+        - ServiceOrderKeywordRealProcessTime
+        - ServiceOrderKeywordServiceMan
+        - ServiceOrderKeywordServiceType
+        - ServiceOrderKeywordProductType
+        - ServiceOrderKeywordFaultType
+      - description: 椤电爜
+        in: query
+        name: page
+        type: integer
+      - description: 姣忛〉澶у皬
+        in: query
+        name: pageSize
+        type: integer
+      - enum:
+        - ""
+        in: query
+        name: queryClass
+        type: string
+        x-enum-varnames:
+        - ServiceOrderQueryClassExpireLessThen60Days
       produces:
       - application/json
       responses:
diff --git a/model/request/serviceOrder.go b/model/request/serviceOrder.go
index 869fd9a..d4f2b3e 100644
--- a/model/request/serviceOrder.go
+++ b/model/request/serviceOrder.go
@@ -40,7 +40,7 @@
 
 type GetServiceOrderList struct {
 	PageInfo
-	QueryClass  constvar.ServiceOrderQueryClass  `json:"queryClass"`
-	KeywordType constvar.ServiceOrderKeywordType `json:"keywordType"`
-	Keyword     string                           `json:"keyword"`
+	QueryClass  constvar.ServiceOrderQueryClass  `json:"queryClass" form:"queryClass"`
+	KeywordType constvar.ServiceOrderKeywordType `json:"keywordType" form:"keywordType"`
+	Keyword     string                           `json:"keyword" form:"keyword"`
 }
diff --git a/model/salesDetails.go b/model/salesDetails.go
index 8deea7f..b318ab7 100644
--- a/model/salesDetails.go
+++ b/model/salesDetails.go
@@ -77,7 +77,7 @@
 	case constvar.SalesDetailsKeywordTypePrincipal:
 		db = db.Joins("left join user on user.id = sales_details.member_id").Where("user.username like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
 	case constvar.SalesDetailsKeywordTypeProductName:
-		//db = db.Joins("left join sales_details_product sdp on sdp.sales_details_id = sales_details.id left join product").Where("user.username like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+		db = db.Joins("left join sales_details_product sdp on sdp.sales_details_id = sales_details.id left join products on sdp.product_id = products.id").Where("products.name like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
 
 	}
 	if slf.Preload {
diff --git a/model/serviceContract.go b/model/serviceContract.go
index 14a5e7a..1ecbb1a 100644
--- a/model/serviceContract.go
+++ b/model/serviceContract.go
@@ -96,7 +96,7 @@
 	case constvar.ServiceContractKeywordPrincipal:
 		db = db.Joins("left join user on user.id = service_contract.member_id").Where("user.username like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
 	case constvar.ServiceContractKeywordProductName:
-		db = db.Joins("Products", clause.LeftJoin).Where("Products.name like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+		db = db.Joins("left join service_contract_product scp on scp.service_contract_id = service_contract.id left join products on scp.product_id = products.id").Where("products.name like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
 	case constvar.ServiceContractKeywordServiceBeginDate:
 		db = db.Where("start_time = ?", slf.Keyword)
 	case constvar.ServiceContractKeywordServiceEndDate:
diff --git a/model/serviceOrder.go b/model/serviceOrder.go
index 4e30c5a..2e4ae18 100644
--- a/model/serviceOrder.go
+++ b/model/serviceOrder.go
@@ -6,6 +6,7 @@
 	"errors"
 	"fmt"
 	"gorm.io/gorm"
+	"gorm.io/gorm/clause"
 )
 
 type (
@@ -32,25 +33,24 @@
 		PriorityLevel   PriorityLevel `gorm:"foreignKey:PriorityLevelId"`
 		AppointmentTime string        `gorm:"appointment_time" json:"appointmentTime"` // 棰勭害涓婇棬鏃堕棿
 		SaleChanceId    int           `gorm:"sale_leads" json:"saleChanceId"`          // 閿�鍞満浼歩d
-
-		SaleChance     SaleChance `gorm:"foreignKey:SaleChanceId"`
-		FaultTypeId    int        `gorm:"severity_id" json:"faultTypeId"` // 鏁呴殰绫诲埆id
-		FaultType      FaultType  `gorm:"foreignKey:FaultTypeId"`
-		SeverityId     int        `gorm:"severity_id" json:"severity"` // 涓ラ噸绋嬪害id
-		Severity       Severity   `gorm:"foreignKey:SeverityId"`
-		Status         int        `gorm:"status" json:"status"`              // 澶勭悊鐘舵��
-		ExpectTime     string     `gorm:"expect_time" json:"expectTime"`     // 甯屾湜澶勭悊鏃堕棿
-		RealTime       string     `gorm:"real_time" json:"realTime"`         // 瀹為檯澶勭悊鏃堕棿
-		CarFare        float64    `gorm:"car_fare" json:"carFare"`           // 浜ら�氳垂
-		ChargeAmount   float64    `gorm:"charge_amount" json:"chargeAmount"` // 鏀惰垂閲戦
-		TimeSpentId    int        `gorm:"time_spent_id" json:"timeSpentId"`  // 鑺辫垂鏃堕棿
-		TimeSpent      TimeSpent  `gorm:"foreignKey:TimeSpentId"`
-		FaqId          int        `gorm:"problem_id" json:"faqId"` // 甯歌闂id
-		Faq            Faq        `gorm:"foreignKey:FaqId"`
-		ProblemDesc    string     `gorm:"problem_desc" json:"problemDesc"`       // 闂鎻忚堪
-		Solution       string     `gorm:"solution" json:"solution"`              // 瑙e喅鏂规硶
-		SolutionRemark string     `gorm:"solution_remark" json:"solutionRemark"` // 鍐呴儴澶囨敞
-		Remark         string     `gorm:"remark" json:"remark"`                  // 澶囨敞
+		SaleChance      SaleChance    `gorm:"foreignKey:SaleChanceId"`
+		FaultTypeId     int           `gorm:"severity_id" json:"faultTypeId"` // 鏁呴殰绫诲埆id
+		FaultType       FaultType     `gorm:"foreignKey:FaultTypeId"`
+		SeverityId      int           `gorm:"severity_id" json:"severity"` // 涓ラ噸绋嬪害id
+		Severity        Severity      `gorm:"foreignKey:SeverityId"`
+		Status          int           `gorm:"status" json:"status"`              // 澶勭悊鐘舵��
+		ExpectTime      string        `gorm:"expect_time" json:"expectTime"`     // 甯屾湜澶勭悊鏃堕棿
+		RealTime        string        `gorm:"real_time" json:"realTime"`         // 瀹為檯澶勭悊鏃堕棿
+		CarFare         float64       `gorm:"car_fare" json:"carFare"`           // 浜ら�氳垂
+		ChargeAmount    float64       `gorm:"charge_amount" json:"chargeAmount"` // 鏀惰垂閲戦
+		TimeSpentId     int           `gorm:"time_spent_id" json:"timeSpentId"`  // 鑺辫垂鏃堕棿
+		TimeSpent       TimeSpent     `gorm:"foreignKey:TimeSpentId"`
+		FaqId           int           `gorm:"problem_id" json:"faqId"` // 甯歌闂id
+		Faq             Faq           `gorm:"foreignKey:FaqId"`
+		ProblemDesc     string        `gorm:"problem_desc" json:"problemDesc"`       // 闂鎻忚堪
+		Solution        string        `gorm:"solution" json:"solution"`              // 瑙e喅鏂规硶
+		SolutionRemark  string        `gorm:"solution_remark" json:"solutionRemark"` // 鍐呴儴澶囨敞
+		Remark          string        `gorm:"remark" json:"remark"`                  // 澶囨敞
 	}
 
 	// ServiceOrderSearch 鏈嶅姟鍗曟悳绱㈡潯浠�
@@ -94,6 +94,22 @@
 			Preload("Severity").
 			Preload("Faq")
 	}
+	switch slf.KeywordType {
+	case constvar.ServiceOrderKeywordClientName:
+		db = db.Joins("Client", clause.LeftJoin).Where("Client.name like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+	case constvar.ServiceOrderKeywordOrderNumber:
+		db = db.Where("service_number = ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+	case constvar.ServiceOrderKeywordSubject:
+		db = db.Where("subject = ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+	case constvar.ServiceOrderKeywordRealProcessTime:
+		db = db.Where("real_time = ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+	case constvar.ServiceOrderKeywordServiceMan:
+		db = db.Joins("left join user on user.id = service_order.service_man_id").Where("user.username like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+	case constvar.ServiceOrderKeywordServiceType:
+		db = db.Joins("ServiceType", clause.LeftJoin).Where("ServiceType.name like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+	case constvar.ServiceOrderKeywordFaultType:
+		db = db.Joins("FaultType", clause.LeftJoin).Where("FaultType.name like ?", fmt.Sprintf("%%%s%%", slf.Keyword))
+	}
 
 	return db
 }
@@ -125,6 +141,26 @@
 	return slf
 }
 
+func (slf *ServiceOrderSearch) SetPage(page, size int) *ServiceOrderSearch {
+	slf.PageNum, slf.PageSize = page, size
+	return slf
+}
+
+func (slf *ServiceOrderSearch) SetKeywordType(keyword constvar.ServiceOrderKeywordType) *ServiceOrderSearch {
+	slf.KeywordType = keyword
+	return slf
+}
+
+func (slf *ServiceOrderSearch) SetQueryClass(queryClass constvar.ServiceOrderQueryClass) *ServiceOrderSearch {
+	slf.QueryClass = queryClass
+	return slf
+}
+
+func (slf *ServiceOrderSearch) SetKeyword(keyword string) *ServiceOrderSearch {
+	slf.Keyword = keyword
+	return slf
+}
+
 func (slf *ServiceOrderSearch) SetPreload(preload bool) *ServiceOrderSearch {
 	slf.Preload = preload
 	return slf
diff --git a/service/serviceOrder.go b/service/serviceOrder.go
index c33f292..cdfe5d9 100644
--- a/service/serviceOrder.go
+++ b/service/serviceOrder.go
@@ -1,6 +1,7 @@
 package service
 
 import (
+	"aps_crm/constvar"
 	"aps_crm/model"
 	"aps_crm/model/request"
 	"aps_crm/pkg/ecode"
@@ -29,8 +30,14 @@
 	return ecode.OK
 }
 
-func (ServiceOrderService) GetServiceOrderList() ([]*model.ServiceOrder, int64, int) {
-	list, total, err := model.NewServiceOrderSearch().SetPreload(true).Find()
+func (ServiceOrderService) GetServiceOrderList(page, pageSize int, queryClass constvar.ServiceOrderQueryClass, keywordType constvar.ServiceOrderKeywordType, keyword string) ([]*model.ServiceOrder, int64, int) {
+	list, total, err := model.NewServiceOrderSearch().
+		SetPage(page, pageSize).
+		SetKeyword(keyword).
+		SetKeywordType(keywordType).
+		SetQueryClass(queryClass).
+		SetPreload(true).
+		Find()
 	if err != nil {
 		return nil, 0, ecode.DBErr
 	}

--
Gitblit v1.8.0