From 724674c54da32406a16264850c3719b2553aada6 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期四, 10 八月 2023 19:35:36 +0800
Subject: [PATCH] Merge branch 'master' into fly

---
 model/timeSpent.go            |   14 
 router/serviceOrder.go        |    2 
 service/serviceOrder.go       |   11 
 api/v1/serviceOrder.go        |    8 
 docs/swagger.yaml             |   66 +++++
 service/serviceFollowup.go    |    4 
 docs/docs.go                  |   91 ++++++
 docs/swagger.json             |   91 ++++++
 model/request/serviceOrder.go |    6 
 model/serviceFollowup.go      |  317 +++++++++++++-----------
 model/serviceContract.go      |    8 
 model/serviceOrder.go         |  100 +++++--
 model/salesDetails.go         |    2 
 constvar/serviceOrder.go      |   10 
 14 files changed, 527 insertions(+), 203 deletions(-)

diff --git a/api/v1/serviceOrder.go b/api/v1/serviceOrder.go
index 426dcef..1eec84f 100644
--- a/api/v1/serviceOrder.go
+++ b/api/v1/serviceOrder.go
@@ -99,15 +99,17 @@
 // @Tags		鏈嶅姟鍗曠鐞�
 // @Summary	鑾峰彇鏈嶅姟鍗曞垪琛�
 // @Produce	application/json
+// @Param		object	body		request.GetServiceOrderList	true	"鍙傛暟"
 // @Success	200	{object}	response.ListResponse{data=[]model.ServiceOrder}
-// @Router		/api/serviceOrder/list [get]
+// @Router		/api/serviceOrder/list [post]
 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 b034d29..17994ca 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -8388,7 +8388,7 @@
             }
         },
         "/api/serviceOrder/list": {
-            "get": {
+            "post": {
                 "produces": [
                     "application/json"
                 ],
@@ -8396,6 +8396,17 @@
                     "鏈嶅姟鍗曠鐞�"
                 ],
                 "summary": "鑾峰彇鏈嶅姟鍗曞垪琛�",
+                "parameters": [
+                    {
+                        "description": "鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.GetServiceOrderList"
+                        }
+                    }
+                ],
                 "responses": {
                     "200": {
                         "description": "OK",
@@ -10084,6 +10095,38 @@
                 "ServiceFollowupKeywordCustomerServiceNo",
                 "ServiceFollowupKeywordVisitor",
                 "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": {
@@ -11854,8 +11897,17 @@
         "model.ServiceFollowup": {
             "type": "object",
             "properties": {
+                "Member": {
+                    "$ref": "#/definitions/model.User"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
                 "clientId": {
                     "type": "integer"
+                },
+                "contact": {
+                    "$ref": "#/definitions/model.Contact"
                 },
                 "contactId": {
                     "type": "integer"
@@ -11869,6 +11921,9 @@
                 "id": {
                     "type": "integer"
                 },
+                "isVisit": {
+                    "$ref": "#/definitions/model.IsVisit"
+                },
                 "isVisitId": {
                     "type": "integer"
                 },
@@ -11877,6 +11932,9 @@
                 },
                 "number": {
                     "type": "string"
+                },
+                "oldMember": {
+                    "$ref": "#/definitions/model.User"
                 },
                 "oldMemberId": {
                     "type": "integer"
@@ -11887,6 +11945,9 @@
                 "remark": {
                     "type": "string"
                 },
+                "satisfaction": {
+                    "$ref": "#/definitions/model.Satisfaction"
+                },
                 "satisfactionId": {
                     "type": "integer"
                 },
@@ -11896,8 +11957,14 @@
                 "serviceOrder": {
                     "$ref": "#/definitions/model.ServiceOrder"
                 },
+                "solveRate": {
+                    "$ref": "#/definitions/model.SolveRate"
+                },
                 "solveRateId": {
                     "type": "integer"
+                },
+                "timelyRate": {
+                    "$ref": "#/definitions/model.TimelyRate"
                 },
                 "timelyRateId": {
                     "type": "integer"
@@ -14425,6 +14492,28 @@
                 }
             }
         },
+        "request.GetServiceOrderList": {
+            "type": "object",
+            "properties": {
+                "keyword": {
+                    "type": "string"
+                },
+                "keywordType": {
+                    "$ref": "#/definitions/constvar.ServiceOrderKeywordType"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "queryClass": {
+                    "$ref": "#/definitions/constvar.ServiceOrderQueryClass"
+                }
+            }
+        },
         "request.GetSubOrderList": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index ae236c1..0b42f32 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -8376,7 +8376,7 @@
             }
         },
         "/api/serviceOrder/list": {
-            "get": {
+            "post": {
                 "produces": [
                     "application/json"
                 ],
@@ -8384,6 +8384,17 @@
                     "鏈嶅姟鍗曠鐞�"
                 ],
                 "summary": "鑾峰彇鏈嶅姟鍗曞垪琛�",
+                "parameters": [
+                    {
+                        "description": "鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.GetServiceOrderList"
+                        }
+                    }
+                ],
                 "responses": {
                     "200": {
                         "description": "OK",
@@ -10072,6 +10083,38 @@
                 "ServiceFollowupKeywordCustomerServiceNo",
                 "ServiceFollowupKeywordVisitor",
                 "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": {
@@ -11842,8 +11885,17 @@
         "model.ServiceFollowup": {
             "type": "object",
             "properties": {
+                "Member": {
+                    "$ref": "#/definitions/model.User"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
                 "clientId": {
                     "type": "integer"
+                },
+                "contact": {
+                    "$ref": "#/definitions/model.Contact"
                 },
                 "contactId": {
                     "type": "integer"
@@ -11857,6 +11909,9 @@
                 "id": {
                     "type": "integer"
                 },
+                "isVisit": {
+                    "$ref": "#/definitions/model.IsVisit"
+                },
                 "isVisitId": {
                     "type": "integer"
                 },
@@ -11865,6 +11920,9 @@
                 },
                 "number": {
                     "type": "string"
+                },
+                "oldMember": {
+                    "$ref": "#/definitions/model.User"
                 },
                 "oldMemberId": {
                     "type": "integer"
@@ -11875,6 +11933,9 @@
                 "remark": {
                     "type": "string"
                 },
+                "satisfaction": {
+                    "$ref": "#/definitions/model.Satisfaction"
+                },
                 "satisfactionId": {
                     "type": "integer"
                 },
@@ -11884,8 +11945,14 @@
                 "serviceOrder": {
                     "$ref": "#/definitions/model.ServiceOrder"
                 },
+                "solveRate": {
+                    "$ref": "#/definitions/model.SolveRate"
+                },
                 "solveRateId": {
                     "type": "integer"
+                },
+                "timelyRate": {
+                    "$ref": "#/definitions/model.TimelyRate"
                 },
                 "timelyRateId": {
                     "type": "integer"
@@ -14413,6 +14480,28 @@
                 }
             }
         },
+        "request.GetServiceOrderList": {
+            "type": "object",
+            "properties": {
+                "keyword": {
+                    "type": "string"
+                },
+                "keywordType": {
+                    "$ref": "#/definitions/constvar.ServiceOrderKeywordType"
+                },
+                "page": {
+                    "description": "椤电爜",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "description": "姣忛〉澶у皬",
+                    "type": "integer"
+                },
+                "queryClass": {
+                    "$ref": "#/definitions/constvar.ServiceOrderQueryClass"
+                }
+            }
+        },
         "request.GetSubOrderList": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 81560ca..1fcbadf 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
@@ -1410,8 +1436,14 @@
     type: object
   model.ServiceFollowup:
     properties:
+      Member:
+        $ref: '#/definitions/model.User'
+      client:
+        $ref: '#/definitions/model.Client'
       clientId:
         type: integer
+      contact:
+        $ref: '#/definitions/model.Contact'
       contactId:
         type: integer
       customerServiceSheet:
@@ -1420,26 +1452,36 @@
         type: string
       id:
         type: integer
+      isVisit:
+        $ref: '#/definitions/model.IsVisit'
       isVisitId:
         type: integer
       memberId:
         type: integer
       number:
         type: string
+      oldMember:
+        $ref: '#/definitions/model.User'
       oldMemberId:
         type: integer
       planId:
         type: integer
       remark:
         type: string
+      satisfaction:
+        $ref: '#/definitions/model.Satisfaction'
       satisfactionId:
         type: integer
       serviceId:
         type: integer
       serviceOrder:
         $ref: '#/definitions/model.ServiceOrder'
+      solveRate:
+        $ref: '#/definitions/model.SolveRate'
       solveRateId:
         type: integer
+      timelyRate:
+        $ref: '#/definitions/model.TimelyRate'
       timelyRateId:
         type: integer
     type: object
@@ -3171,6 +3213,21 @@
       pageSize:
         description: 姣忛〉澶у皬
         type: integer
+    type: object
+  request.GetServiceOrderList:
+    properties:
+      keyword:
+        type: string
+      keywordType:
+        $ref: '#/definitions/constvar.ServiceOrderKeywordType'
+      page:
+        description: 椤电爜
+        type: integer
+      pageSize:
+        description: 姣忛〉澶у皬
+        type: integer
+      queryClass:
+        $ref: '#/definitions/constvar.ServiceOrderQueryClass'
     type: object
   request.GetSubOrderList:
     properties:
@@ -10614,7 +10671,14 @@
       tags:
       - 鏈嶅姟鍗曠鐞�
   /api/serviceOrder/list:
-    get:
+    post:
+      parameters:
+      - description: 鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.GetServiceOrderList'
       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..0b64a4f 100644
--- a/model/serviceContract.go
+++ b/model/serviceContract.go
@@ -26,9 +26,9 @@
 		Quotation               Quotation             `json:"quotation" gorm:"foreignKey:QuotationId"`
 		ServiceContractTypeId   int                   `json:"serviceContractTypeId" gorm:"column:service_contract_type_id;type:int;comment:鍚堝悓绫诲瀷id"`
 		ServiceContractType     ServiceContractType   `json:"serviceContractType" gorm:"foreignKey:ServiceContractTypeId"`
-		SignTime                string                `json:"signTime" gorm:"column:sign_time;type:datetime;comment:绛剧害鏃堕棿"`
-		StartTime               string                `json:"startTime" gorm:"column:start_time;type:datetime;comment:寮�濮嬫椂闂�"`
-		EndTime                 string                `json:"endTime" gorm:"column:end_time;type:datetime;comment:缁撴潫鏃堕棿"`
+		SignTime                string                `json:"signTime" gorm:"column:sign_time;type:varchar(255);comment:绛剧害鏃堕棿"`
+		StartTime               string                `json:"startTime" gorm:"column:start_time;type:varchar(255);comment:寮�濮嬫椂闂�"`
+		EndTime                 string                `json:"endTime" gorm:"column:end_time;type:varchar(255);comment:缁撴潫鏃堕棿"`
 		ServiceContractStatusId int                   `json:"serviceContractStatusId" gorm:"column:service_contract_status_id;type:int;comment:鍚堝悓鐘舵�乮d"`
 		ServiceContractStatus   ServiceContractStatus `json:"serviceContractStatus" gorm:"foreignKey:ServiceContractStatusId"`
 		ServiceTimes            int                   `json:"serviceTimes" gorm:"column:service_times;type:int;comment:鏈嶅姟娆℃暟"`
@@ -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/serviceFollowup.go b/model/serviceFollowup.go
index d2d4ada..29e80f6 100644
--- a/model/serviceFollowup.go
+++ b/model/serviceFollowup.go
@@ -1,145 +1,172 @@
-package model
-
-import (
-	"aps_crm/constvar"
-	"aps_crm/pkg/mysqlx"
-	"gorm.io/gorm"
-)
-
-type (
-	ServiceFollowup struct {
-		Id                   int                  `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		ClientId             int                  `json:"clientId" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
-		Number               string               `json:"number" gorm:"column:number;type:varchar(255);comment:鍚堝悓缂栧彿"`
-		ContactId            int                  `json:"contactId" gorm:"column:contact_id;type:int;comment:鑱旂郴浜篿d"`
-		ServiceId            int                  `json:"serviceId" gorm:"column:service_id;type:int;comment:瀹㈡埛鏈嶅姟鍗昳d"`
-		ServiceOrder         ServiceOrder         `gorm:"foreignKey:ServiceId"`
-		CustomerServiceSheet CustomerServiceSheet `json:"customerServiceSheet" gorm:"foreignKey:ServiceId"`
-		MemberId             int                  `json:"memberId" gorm:"column:member_id;type:int;comment:鏈嶅姟浜哄憳id"`
-		PlanId               int                  `json:"planId" gorm:"column:plan_id;type:int;comment:鏈嶅姟璁″垝id"`
-		SatisfactionId       int                  `json:"satisfactionId" gorm:"column:satisfaction_id;type:int;comment:婊℃剰搴d"`
-		TimelyRateId         int                  `json:"timelyRateId" gorm:"column:timely_rate_id;type:int;comment:鍙婃椂鐜噄d"`
-		SolveRateId          int                  `json:"solveRateId" gorm:"column:solve_rate_id;type:int;comment:瑙e喅鐜噄d"`
-		IsVisitId            int                  `json:"isVisitId" gorm:"column:is_visit_id;type:int;comment:鏈嶅姟浜哄憳鏄惁鏉ヨ繃id"`
-		OldMemberId          int                  `json:"oldMemberId" gorm:"column:old_member_id;type:int;comment:鍘熸湇鍔′汉鍛�"`
-		Remark               string               `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
-		File                 string               `json:"file" gorm:"column:file;type:varchar(255);comment:闄勪欢"`
-
-		gorm.Model `json:"-"`
-	}
-
-	ServiceFollowupSearch struct {
-		ServiceFollowup
-		Orm         *gorm.DB
-		KeywordType constvar.ServiceFollowupKeywordType
-		Keyword     interface{}
-		OrderBy     string
-		PageNum     int
-		PageSize    int
-	}
-)
-
-func (ServiceFollowup) TableName() string {
-	return "service_followup"
-}
-
-func NewServiceFollowupSearch() *ServiceFollowupSearch {
-	return &ServiceFollowupSearch{
-		Orm: mysqlx.GetDB(),
-	}
-}
-
-func (slf *ServiceFollowupSearch) build() *gorm.DB {
-	var db = slf.Orm.Model(&ServiceFollowup{})
-	if slf.Id != 0 {
-		db = db.Where("id = ?", slf.Id)
-	}
-
-	switch slf.KeywordType {
-	case constvar.ServiceFollowupKeywordFollowupNo:
-		db = db.Where("number = ?", slf.Keyword)
-	case constvar.ServiceFollowupKeywordCustomerName:
-		db = db.Where("client_id = ?", slf.Keyword)
-	case constvar.ServiceFollowupKeywordContactName:
-		db = db.Where("contact_id = ?", slf.Keyword)
-	case constvar.ServiceFollowupKeywordCustomerServiceNo:
-		db = db.Where("service_id = ?", slf.Keyword)
-	case constvar.ServiceFollowupKeywordVisitor:
-		db = db.Where("member_id = ?", slf.Keyword)
-	case constvar.ServiceFollowupKeywordSatisfactionDegree:
-		db = db.Where("satisfaction_id = ?", slf.Keyword)
-
-	}
-
-	return db
-}
-
-func (slf *ServiceFollowupSearch) Create(record *ServiceFollowup) error {
-	var db = slf.build()
-	return db.Create(record).Error
-}
-
-func (slf *ServiceFollowupSearch) Update(record *ServiceFollowup) error {
-	var db = slf.build()
-	return db.Updates(record).Error
-}
-
-func (slf *ServiceFollowupSearch) Delete() error {
-	var db = slf.build()
-	return db.Delete(&ServiceFollowup{}).Error
-}
-
-func (slf *ServiceFollowupSearch) Find() (*ServiceFollowup, error) {
-	var db = slf.build()
-	var record = &ServiceFollowup{}
-	err := db.First(record).Error
-	return record, err
-}
-
-func (slf *ServiceFollowupSearch) FindAll() ([]*ServiceFollowup, int64, error) {
-	var db = slf.build()
-	var records = make([]*ServiceFollowup, 0)
-	var total int64
-	if err := db.Count(&total).Error; err != nil {
-		return records, total, err
-	}
-	if slf.PageNum > 0 && slf.PageSize > 0 {
-		db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize)
-	}
-
-	if slf.PageNum > 0 && slf.PageSize > 0 {
-		db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize)
-	}
-
-	err := db.Preload("CustomerServiceSheet").Preload("ServiceOrder").Find(&records).Error
-	return records, total, err
-}
-
-func (slf *ServiceFollowupSearch) SetId(id int) *ServiceFollowupSearch {
-	slf.Id = id
-	return slf
-}
-
-func (slf *ServiceFollowupSearch) SetKeywordType(keyword constvar.ServiceFollowupKeywordType) *ServiceFollowupSearch {
-	slf.KeywordType = keyword
-	return slf
-}
-
-func (slf *ServiceFollowupSearch) SetKeyword(keyword string) *ServiceFollowupSearch {
-	slf.Keyword = keyword
-	return slf
-}
-
-func (slf *ServiceFollowupSearch) SetPage(page, size int) *ServiceFollowupSearch {
-	slf.PageNum, slf.PageSize = page, size
-	return slf
-}
-
-func (slf *ServiceFollowupSearch) SetOrder(order string) *ServiceFollowupSearch {
-	slf.OrderBy = order
-	return slf
-}
-func (slf *ServiceFollowupSearch) SetIds(ids []int) *ServiceFollowupSearch {
-	slf.Orm = slf.Orm.Where("id in (?)", ids)
-	return slf
-}
+package model
+
+import (
+	"aps_crm/constvar"
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+)
+
+type (
+	ServiceFollowup struct {
+		Id                   int                  `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		ClientId             int                  `json:"clientId" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
+		Client               Client               `json:"client" gorm:"foreignKey:ClientId"`
+		Number               string               `json:"number" gorm:"column:number;type:varchar(255);comment:鍚堝悓缂栧彿"`
+		ContactId            int                  `json:"contactId" gorm:"column:contact_id;type:int;comment:鑱旂郴浜篿d"`
+		Contact              Contact              `json:"contact"  gorm:"foreignKey:ContactId"`
+		ServiceId            int                  `json:"serviceId" gorm:"column:service_id;type:int;comment:瀹㈡埛鏈嶅姟鍗昳d"`
+		ServiceOrder         ServiceOrder         `gorm:"foreignKey:ServiceId"`
+		CustomerServiceSheet CustomerServiceSheet `json:"customerServiceSheet" gorm:"foreignKey:ServiceId"`
+		MemberId             int                  `json:"memberId" gorm:"column:member_id;type:int;comment:鏈嶅姟浜哄憳id"`
+		Member               User                 `json:"Member" gorm:"foreignKey:MemberId"`
+		PlanId               int                  `json:"planId" gorm:"column:plan_id;type:int;comment:鏈嶅姟璁″垝id"`
+		SatisfactionId       int                  `json:"satisfactionId" gorm:"column:satisfaction_id;type:int;comment:婊℃剰搴d"`
+		Satisfaction         Satisfaction         `json:"satisfaction" gorm:"foreignKey:SatisfactionId"`
+		TimelyRateId         int                  `json:"timelyRateId" gorm:"column:timely_rate_id;type:int;comment:鍙婃椂鐜噄d"`
+		TimelyRate           TimelyRate           `json:"timelyRate" gorm:"foreignKey:TimelyRateId"`
+		SolveRateId          int                  `json:"solveRateId" gorm:"column:solve_rate_id;type:int;comment:瑙e喅鐜噄d"`
+		SolveRate            SolveRate            `json:"solveRate" gorm:"foreignKey:SolveRateId"`
+		IsVisitId            int                  `json:"isVisitId" gorm:"column:is_visit_id;type:int;comment:鏈嶅姟浜哄憳鏄惁鏉ヨ繃id"`
+		IsVisit              IsVisit              `json:"isVisit"  gorm:"foreignKey:IsVisitId"`
+		OldMemberId          int                  `json:"oldMemberId" gorm:"column:old_member_id;type:int;comment:鍘熸湇鍔′汉鍛�"`
+		OldMember            User                 `json:"oldMember" gorm:"foreignKey:OldMemberId"`
+		Remark               string               `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
+		File                 string               `json:"file" gorm:"column:file;type:varchar(255);comment:闄勪欢"`
+
+		gorm.Model `json:"-"`
+	}
+
+	ServiceFollowupSearch struct {
+		ServiceFollowup
+		Orm         *gorm.DB
+		KeywordType constvar.ServiceFollowupKeywordType
+		Keyword     interface{}
+		OrderBy     string
+		PageNum     int
+		PageSize    int
+		Preload     bool
+	}
+)
+
+func (ServiceFollowup) TableName() string {
+	return "service_followup"
+}
+
+func NewServiceFollowupSearch() *ServiceFollowupSearch {
+	return &ServiceFollowupSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *ServiceFollowupSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&ServiceFollowup{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+
+	switch slf.KeywordType {
+	case constvar.ServiceFollowupKeywordFollowupNo:
+		db = db.Where("number = ?", slf.Keyword)
+	case constvar.ServiceFollowupKeywordCustomerName:
+		db = db.Where("client_id = ?", slf.Keyword)
+	case constvar.ServiceFollowupKeywordContactName:
+		db = db.Where("contact_id = ?", slf.Keyword)
+	case constvar.ServiceFollowupKeywordCustomerServiceNo:
+		db = db.Where("service_id = ?", slf.Keyword)
+	case constvar.ServiceFollowupKeywordVisitor:
+		db = db.Where("member_id = ?", slf.Keyword)
+	case constvar.ServiceFollowupKeywordSatisfactionDegree:
+		db = db.Where("satisfaction_id = ?", slf.Keyword)
+
+	}
+
+	if slf.Preload {
+		db = db.Preload("CustomerServiceSheet").
+			Preload("ServiceOrder").
+			Preload("Client").
+			Preload("Contact").
+			Preload("Satisfaction").
+			Preload("TimelyRate").
+			Preload("SolveRate").
+			Preload("IsVisit").
+			Preload("OldMember").
+			Preload("Member")
+	}
+
+	return db
+}
+
+func (slf *ServiceFollowupSearch) Create(record *ServiceFollowup) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *ServiceFollowupSearch) Update(record *ServiceFollowup) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *ServiceFollowupSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&ServiceFollowup{}).Error
+}
+
+func (slf *ServiceFollowupSearch) Find() (*ServiceFollowup, error) {
+	var db = slf.build()
+	var record = &ServiceFollowup{}
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *ServiceFollowupSearch) FindAll() ([]*ServiceFollowup, int64, error) {
+	var db = slf.build()
+	var records = make([]*ServiceFollowup, 0)
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		return records, total, err
+	}
+	if slf.PageNum > 0 && slf.PageSize > 0 {
+		db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize)
+	}
+
+	if slf.PageNum > 0 && slf.PageSize > 0 {
+		db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize)
+	}
+
+	err := db.Find(&records).Error
+	return records, total, err
+}
+
+func (slf *ServiceFollowupSearch) SetId(id int) *ServiceFollowupSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *ServiceFollowupSearch) SetPreload(preload bool) *ServiceFollowupSearch {
+	slf.Preload = preload
+	return slf
+}
+
+func (slf *ServiceFollowupSearch) SetKeywordType(keyword constvar.ServiceFollowupKeywordType) *ServiceFollowupSearch {
+	slf.KeywordType = keyword
+	return slf
+}
+
+func (slf *ServiceFollowupSearch) SetKeyword(keyword string) *ServiceFollowupSearch {
+	slf.Keyword = keyword
+	return slf
+}
+
+func (slf *ServiceFollowupSearch) SetPage(page, size int) *ServiceFollowupSearch {
+	slf.PageNum, slf.PageSize = page, size
+	return slf
+}
+
+func (slf *ServiceFollowupSearch) SetOrder(order string) *ServiceFollowupSearch {
+	slf.OrderBy = order
+	return slf
+}
+func (slf *ServiceFollowupSearch) SetIds(ids []int) *ServiceFollowupSearch {
+	slf.Orm = slf.Orm.Where("id in (?)", ids)
+	return slf
+}
diff --git a/model/serviceOrder.go b/model/serviceOrder.go
index 4e30c5a..53fea15 100644
--- a/model/serviceOrder.go
+++ b/model/serviceOrder.go
@@ -6,51 +6,51 @@
 	"errors"
 	"fmt"
 	"gorm.io/gorm"
+	"gorm.io/gorm/clause"
 )
 
 type (
 	// ServiceOrder 鏈嶅姟鍗�
 	ServiceOrder struct {
 		Id              int           `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		ServiceNumber   string        `gorm:"service_number" json:"serviceNumber"` // 鏈嶅姟鍗曠紪鍙�
-		ClientId        int           `gorm:"client_id" json:"clientId"`           // 瀹㈡埛id
+		ServiceNumber   string        `gorm:"column:service_number;type:varchar(255);not null;default:'';comment:'鏈嶅姟鍗曠紪鍙�'" json:"serviceNumber"` // 鏈嶅姟鍗曠紪鍙�
+		ClientId        int           `gorm:"column:client_id;type:int;not null;default:0;comment:'瀹㈡埛id'" json:"clientId"`                      // 瀹㈡埛id
 		Client          Client        `gorm:"foreignKey:ClientId"`
-		ContractId      int           `gorm:"contract_id" json:"contractId"` // 鍚堝悓id
+		ContractId      int           `gorm:"column:contract_id;type:int;not null;default:0;comment:'鍚堝悓id'" json:"contractId"` // 鍚堝悓id
 		Contract        Contract      `gorm:"foreignKey:ContractId"`
-		OrderId         int           `gorm:"order_id" json:"orderId"` // 閿�鍞鍗昳d
+		OrderId         int           `gorm:"column:order_id;type:int;not null;default:0;comment:'閿�鍞鍗昳d'" json:"orderId"` // 閿�鍞鍗昳d
 		OrderManage     OrderManage   `gorm:"foreignKey:OrderId"`
-		Subject         string        `gorm:"subject" json:"subject"`      // 涓婚
-		ProductId       int           `gorm:"product_id" json:"productId"` // 浜у搧id
+		Subject         string        `gorm:"column:subject;type:varchar(255);not null;default:'';comment:'涓婚'" json:"subject"` // 涓婚
+		ProductId       int           `gorm:"column:product_id;type:int;not null;default:0;comment:'浜у搧id'" json:"productId"`    // 浜у搧id
 		Product         Product       `gorm:"foreignKey:ProductId"`
-		ServiceTypeId   int           `gorm:"service_type_id" json:"serviceTypeId"` // 鏈嶅姟鏂瑰紡id
+		ServiceTypeId   int           `gorm:"column:service_type_id;type:int;not null;default:0;comment:'鏈嶅姟鏂瑰紡id'" json:"serviceTypeId"` // 鏈嶅姟鏂瑰紡id
 		ServiceType     ServiceType   `gorm:"foreignKey:ServiceTypeId"`
-		ServiceManId    int           `gorm:"service_man_id" json:"serviceManId"` // 鏈嶅姟浜哄憳
-		ContactId       int           `gorm:"linkman_id" json:"contactId"`        // 鑱旂郴浜篿d
+		ServiceManId    int           `gorm:"column:service_man_id;type:int;not null;default:0;comment:'鏈嶅姟浜哄憳'" json:"serviceManId"` // 鏈嶅姟浜哄憳
+		ContactId       int           `gorm:"linkman_id" json:"contactId"`                                                          // 鑱旂郴浜篿d
 		Contact         Contact       `gorm:"foreignKey:ContactId"`
-		Address         string        `gorm:"address" json:"address"`                   // 涓婇棬鍦板潃
-		PriorityLevelId int           `gorm:"priority_level_id" json:"priorityLevelId"` // 浼樺厛绾у埆id
+		Address         string        `gorm:"column:address;type:varchar(255);not null;default:'';comment:'涓婇棬鍦板潃'" json:"address"`           // 涓婇棬鍦板潃
+		PriorityLevelId int           `gorm:"column:priority_level_id;type:int;not null;default:0;comment:'浼樺厛绾у埆id'" json:"priorityLevelId"` // 浼樺厛绾у埆id
 		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"`                  // 澶囨敞
+		AppointmentTime string        `gorm:"appointment_time" json:"appointmentTime"`                                                // 棰勭害涓婇棬鏃堕棿
+		SaleChanceId    int           `gorm:"column:sale_chance_id;type:int;not null;default:0;comment:'閿�鍞満浼歩d'" json:"saleChanceId"` // 閿�鍞満浼歩d
+		SaleChance      SaleChance    `gorm:"foreignKey:SaleChanceId"`
+		FaultTypeId     int           `gorm:"column:severity_id;type:int;not null;default:0;comment:'鏁呴殰绫诲埆id'" json:"faultTypeId"` // 鏁呴殰绫诲埆id
+		FaultType       FaultType     `gorm:"foreignKey:FaultTypeId"`
+		SeverityId      int           `gorm:"column:severity_id;type:int;not null;default:0;comment:'涓ラ噸绋嬪害id'" json:"severity"` // 涓ラ噸绋嬪害id
+		Severity        Severity      `gorm:"foreignKey:SeverityId"`
+		Status          int           `gorm:"status" json:"status"`                                                                        // 澶勭悊鐘舵��
+		ExpectTime      string        `gorm:"column:expect_time;type:varchar(255);not null;default:'';comment:'甯屾湜澶勭悊鏃堕棿'" json:"expectTime"` // 甯屾湜澶勭悊鏃堕棿
+		RealTime        string        `gorm:"column:real_time;type:varchar(255);not null;default:'';comment:'瀹為檯澶勭悊鏃堕棿'" json:"realTime"`     // 瀹為檯澶勭悊鏃堕棿
+		CarFare         float64       `gorm:"car_fare" json:"carFare"`                                                                     // 浜ら�氳垂
+		ChargeAmount    float64       `gorm:"charge_amount" json:"chargeAmount"`                                                           // 鏀惰垂閲戦
+		TimeSpentId     int           `gorm:"column:time_spent_id;type:int;not null;default:0;comment:'鑺辫垂鏃堕棿'" json:"timeSpentId"`          // 鑺辫垂鏃堕棿
+		TimeSpent       TimeSpent     `gorm:"foreignKey:TimeSpentId"`
+		FaqId           int           `gorm:"column:problem_id;type:int;not null;default:0;comment:'甯歌闂id'" json:"faqId"` // 甯歌闂id
+		Faq             Faq           `gorm:"foreignKey:FaqId"`
+		ProblemDesc     string        `gorm:"column:subject;type:varchar(255);not null;default:'';comment:'涓婚'problem_desc" json:"problemDesc"`  // 闂鎻忚堪
+		Solution        string        `gorm:"column:solution;type:varchar(255);not null;default:'';comment:'瑙e喅鏂规硶'" json:"solution"`              // 瑙e喅鏂规硶
+		SolutionRemark  string        `gorm:"column:solution_remark;type:varchar(255);not null;default:'';comment:'鍐呴儴澶囨敞'" json:"solutionRemark"` // 鍐呴儴澶囨敞
+		Remark          string        `gorm:"column:remark;type:varchar(255);not null;default:'';comment:'澶囨敞'" 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/model/timeSpent.go b/model/timeSpent.go
index de29623..6243445 100644
--- a/model/timeSpent.go
+++ b/model/timeSpent.go
@@ -12,18 +12,18 @@
 	// TimeSpent 鑺辫垂鏃堕棿
 	TimeSpent struct {
 		Id   int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		Name   string    `json:"name" gorm:"column:name"`
+		Name string `json:"name" gorm:"column:name;type:varchar(255);not null;default:'';comment:鍚嶇О"`
 	}
 
 	// TimeSpentSearch 鑺辫垂鏃堕棿鎼滅储鏉′欢
 	TimeSpentSearch struct {
 		TimeSpent
-		Orm *gorm.DB
-        QueryClass  constvar.TimeSpentQueryClass
-        KeywordType constvar.TimeSpentKeywordType
-        Keyword     string
-        PageNum  int
-        PageSize int
+		Orm         *gorm.DB
+		QueryClass  constvar.TimeSpentQueryClass
+		KeywordType constvar.TimeSpentKeywordType
+		Keyword     string
+		PageNum     int
+		PageSize    int
 	}
 )
 
diff --git a/router/serviceOrder.go b/router/serviceOrder.go
index 8efdc84..c9db554 100644
--- a/router/serviceOrder.go
+++ b/router/serviceOrder.go
@@ -12,6 +12,6 @@
 		ServiceOrderRouter.POST("add", ServiceOrderApi.Add)             // 娣诲姞鏈嶅姟鍗�
 		ServiceOrderRouter.DELETE("delete/:id", ServiceOrderApi.Delete) // 鍒犻櫎鏈嶅姟鍗�
 		ServiceOrderRouter.PUT("update", ServiceOrderApi.Update)        // 鏇存柊鏈嶅姟鍗�
-		ServiceOrderRouter.GET("list", ServiceOrderApi.List)            // 鑾峰彇鏈嶅姟鍗曞垪琛�
+		ServiceOrderRouter.POST("list", ServiceOrderApi.List)           // 鑾峰彇鏈嶅姟鍗曞垪琛�
 	}
 }
diff --git a/service/serviceFollowup.go b/service/serviceFollowup.go
index bdcb710..1ae3722 100644
--- a/service/serviceFollowup.go
+++ b/service/serviceFollowup.go
@@ -46,7 +46,9 @@
 	contacts, total, err := model.NewServiceFollowupSearch().
 		SetKeywordType(keywordType).
 		SetKeyword(keyword).
-		SetPage(page, pageSize).FindAll()
+		SetPage(page, pageSize).
+		SetPreload(true).
+		FindAll()
 	if err != nil {
 		return nil, 0, ecode.ServiceFollowupListErr
 	}
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