From a89c3af49d0be3e635ef13b3bd3dd9410e4d6d46 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 03 八月 2023 20:03:12 +0800
Subject: [PATCH] 服务单管理

---
 model/severity.go              |  114 +
 router/serviceType.go          |   17 
 service/serviceOrder.go        |   66 
 service/priorityLevel.go       |   66 
 service/serviceType.go         |   66 
 docs/swagger.yaml              |  750 +++++++++
 router/priorityLevel.go        |   17 
 model/request/serviceOrder.go  |   22 
 model/serviceType.go           |  114 +
 api/v1/serviceType.go          |  109 +
 model/request/severity.go      |   22 
 router/faq.go                  |   17 
 constvar/severity.go           |   12 
 constvar/priorityLevel.go      |   12 
 constvar/faq.go                |   12 
 router/severity.go             |   17 
 router/serviceOrder.go         |   17 
 model/request/priorityLevel.go |   22 
 api/v1/serviceOrder.go         |  109 +
 docs/docs.go                   | 1144 ++++++++++++++
 model/priorityLevel.go         |  114 +
 docs/swagger.json              | 1144 ++++++++++++++
 service/severity.go            |   66 
 model/serviceOrder.go          |  163 ++
 api/v1/priorityLevel.go        |  106 +
 api/v1/faq.go                  |  106 +
 constvar/serviceOrder.go       |   12 
 model/request/faq.go           |   22 
 router/index.go                |    5 
 constvar/serviceType.go        |   12 
 api/v1/severity.go             |  109 +
 model/faq.go                   |  114 +
 model/request/serviceType.go   |   22 
 service/faq.go                 |   66 
 34 files changed, 4,778 insertions(+), 8 deletions(-)

diff --git a/api/v1/faq.go b/api/v1/faq.go
new file mode 100644
index 0000000..9995d36
--- /dev/null
+++ b/api/v1/faq.go
@@ -0,0 +1,106 @@
+package v1
+
+import (
+	"aps_crm/model/request"
+	"aps_crm/model/response"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"aps_crm/service"
+	"github.com/gin-gonic/gin"
+	"strconv"
+)
+
+type FaqApi struct{}
+
+// Add
+// @Tags		甯歌闂绠$悊
+// @Summary	娣诲姞甯歌闂
+// @Produce	application/json
+// @Param		object	body		request.AddFaq	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/faq/add [post]
+func (s *FaqApi) Add(c *gin.Context) {
+	var params request.AddFaq
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := service.NewFaqService().AddFaq(&params.Faq)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+// @Tags		甯歌闂绠$悊
+// @Summary	鍒犻櫎甯歌闂
+// @Produce	application/json
+// @Param		id	path		int	true	"鏌ヨ鍙傛暟"
+// @Success	200	{object}	contextx.Response{}
+// @Router		/api/faq/delete/{id} [delete]
+func (s *FaqApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := service.NewFaqService().DeleteFaq(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+// @Tags		甯歌闂绠$悊
+// @Summary	鏇存柊甯歌闂
+// @Produce	application/json
+// @Param		object	body		request.UpdateFaq	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/faq/update [put]
+func (s *FaqApi) Update(c *gin.Context) {
+	var params request.UpdateFaq
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := service.NewFaqService().UpdateFaq(&params.Faq)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+// @Tags		甯歌闂绠$悊
+// @Summary	鑾峰彇甯歌闂鍒楄〃
+// @Produce	application/json
+// @Success	200	{object}	response.ListResponse{data=[]model.Faq}
+// @Router		/api/faq/list [get]
+func (s *FaqApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	faq, total, errCode := service.NewFaqService().GetFaqList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.ListResponse{
+		Data: faq,
+		Count: total,
+	})
+}
diff --git a/api/v1/priorityLevel.go b/api/v1/priorityLevel.go
new file mode 100644
index 0000000..18ddfd4
--- /dev/null
+++ b/api/v1/priorityLevel.go
@@ -0,0 +1,106 @@
+package v1
+
+import (
+	"aps_crm/model/request"
+	"aps_crm/model/response"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"aps_crm/service"
+	"github.com/gin-gonic/gin"
+	"strconv"
+)
+
+type PriorityLevelApi struct{}
+
+// Add
+// @Tags		浼樺厛绾у埆绠$悊
+// @Summary	娣诲姞浼樺厛绾у埆
+// @Produce	application/json
+// @Param		object	body		request.AddPriorityLevel	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/priorityLevel/add [post]
+func (s *PriorityLevelApi) Add(c *gin.Context) {
+	var params request.AddPriorityLevel
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := service.NewPriorityLevelService().AddPriorityLevel(&params.PriorityLevel)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+// @Tags		浼樺厛绾у埆绠$悊
+// @Summary	鍒犻櫎浼樺厛绾у埆
+// @Produce	application/json
+// @Param		id	path		int	true	"鏌ヨ鍙傛暟"
+// @Success	200	{object}	contextx.Response{}
+// @Router		/api/priorityLevel/delete/{id} [delete]
+func (s *PriorityLevelApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := service.NewPriorityLevelService().DeletePriorityLevel(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+// @Tags		浼樺厛绾у埆绠$悊
+// @Summary	鏇存柊浼樺厛绾у埆
+// @Produce	application/json
+// @Param		object	body		request.UpdatePriorityLevel	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/priorityLevel/update [put]
+func (s *PriorityLevelApi) Update(c *gin.Context) {
+	var params request.UpdatePriorityLevel
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := service.NewPriorityLevelService().UpdatePriorityLevel(&params.PriorityLevel)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+// @Tags		浼樺厛绾у埆绠$悊
+// @Summary	鑾峰彇浼樺厛绾у埆鍒楄〃
+// @Produce	application/json
+// @Success	200	{object}	response.ListResponse{data=[]model.PriorityLevel}
+// @Router		/api/priorityLevel/list [get]
+func (s *PriorityLevelApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	priorityLevel, total, errCode := service.NewPriorityLevelService().GetPriorityLevelList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.ListResponse{
+		Data: priorityLevel,
+		Count: total,
+	})
+}
diff --git a/api/v1/serviceOrder.go b/api/v1/serviceOrder.go
new file mode 100644
index 0000000..3beabbd
--- /dev/null
+++ b/api/v1/serviceOrder.go
@@ -0,0 +1,109 @@
+package v1
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/model/response"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"aps_crm/service"
+	"github.com/gin-gonic/gin"
+	"strconv"
+)
+
+type ServiceOrderApi struct{}
+
+// Add
+// @Tags		鏈嶅姟鍗曠鐞�
+// @Summary	娣诲姞鏈嶅姟鍗�
+// @Produce	application/json
+// @Param		object	body		request.AddServiceOrder	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/serviceOrder/add [post]
+func (s *ServiceOrderApi) Add(c *gin.Context) {
+	var params request.AddServiceOrder
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	serviceOrder := new(model.ServiceOrder)
+
+	errCode := service.NewServiceOrderService().AddServiceOrder(serviceOrder)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+// @Tags		鏈嶅姟鍗曠鐞�
+// @Summary	鍒犻櫎鏈嶅姟鍗�
+// @Produce	application/json
+// @Param		id	path		int	true	"鏌ヨ鍙傛暟"
+// @Success	200	{object}	contextx.Response{}
+// @Router		/api/serviceOrder/delete/{id} [delete]
+func (s *ServiceOrderApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := service.NewServiceOrderService().DeleteServiceOrder(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+// @Tags		鏈嶅姟鍗曠鐞�
+// @Summary	鏇存柊鏈嶅姟鍗�
+// @Produce	application/json
+// @Param		object	body		request.UpdateServiceOrder	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/serviceOrder/update [put]
+func (s *ServiceOrderApi) Update(c *gin.Context) {
+	var params request.UpdateServiceOrder
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := service.NewServiceOrderService().UpdateServiceOrder(&params.ServiceOrder)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+// @Tags		鏈嶅姟鍗曠鐞�
+// @Summary	鑾峰彇鏈嶅姟鍗曞垪琛�
+// @Produce	application/json
+// @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)
+	if !ok {
+		return
+	}
+
+	serviceOrder, total, errCode := service.NewServiceOrderService().GetServiceOrderList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.ListResponse{
+		Data: serviceOrder,
+		Count: total,
+	})
+}
diff --git a/api/v1/serviceType.go b/api/v1/serviceType.go
new file mode 100644
index 0000000..5e4ba9f
--- /dev/null
+++ b/api/v1/serviceType.go
@@ -0,0 +1,109 @@
+package v1
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/model/response"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"aps_crm/service"
+	"github.com/gin-gonic/gin"
+	"strconv"
+)
+
+type ServiceTypeApi struct{}
+
+// Add
+// @Tags		鏈嶅姟绫诲瀷绠$悊
+// @Summary	娣诲姞鏈嶅姟绫诲瀷
+// @Produce	application/json
+// @Param		object	body		request.AddServiceType	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/serviceType/add [post]
+func (s *ServiceTypeApi) Add(c *gin.Context) {
+	var params request.AddServiceType
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	serviceType := new(model.ServiceType)
+
+	errCode := service.NewServiceTypeService().AddServiceType(serviceType)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+// @Tags		鏈嶅姟绫诲瀷绠$悊
+// @Summary	鍒犻櫎鏈嶅姟绫诲瀷
+// @Produce	application/json
+// @Param		id	path		int	true	"鏌ヨ鍙傛暟"
+// @Success	200	{object}	contextx.Response{}
+// @Router		/api/serviceType/delete/{id} [delete]
+func (s *ServiceTypeApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := service.NewServiceTypeService().DeleteServiceType(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+// @Tags		鏈嶅姟绫诲瀷绠$悊
+// @Summary	鏇存柊鏈嶅姟绫诲瀷
+// @Produce	application/json
+// @Param		object	body		request.UpdateServiceType	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/serviceType/update [put]
+func (s *ServiceTypeApi) Update(c *gin.Context) {
+	var params request.UpdateServiceType
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := service.NewServiceTypeService().UpdateServiceType(&params.ServiceType)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+// @Tags		鏈嶅姟绫诲瀷绠$悊
+// @Summary	鑾峰彇鏈嶅姟绫诲瀷鍒楄〃
+// @Produce	application/json
+// @Success	200	{object}	response.ListResponse{data=[]model.ServiceType}
+// @Router		/api/serviceType/list [get]
+func (s *ServiceTypeApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	serviceType, total, errCode := service.NewServiceTypeService().GetServiceTypeList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.ListResponse{
+		Data: serviceType,
+		Count: total,
+	})
+}
diff --git a/api/v1/severity.go b/api/v1/severity.go
new file mode 100644
index 0000000..e7f5e7a
--- /dev/null
+++ b/api/v1/severity.go
@@ -0,0 +1,109 @@
+package v1
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/model/response"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"aps_crm/service"
+	"github.com/gin-gonic/gin"
+	"strconv"
+)
+
+type SeverityApi struct{}
+
+// Add
+// @Tags		涓ラ噸绋嬪害绠$悊
+// @Summary	娣诲姞涓ラ噸绋嬪害
+// @Produce	application/json
+// @Param		object	body		request.AddSeverity	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/severity/add [post]
+func (s *SeverityApi) Add(c *gin.Context) {
+	var params request.AddSeverity
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	severity := new(model.Severity)
+
+	errCode := service.NewSeverityService().AddSeverity(severity)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+// @Tags		涓ラ噸绋嬪害绠$悊
+// @Summary	鍒犻櫎涓ラ噸绋嬪害
+// @Produce	application/json
+// @Param		id	path		int	true	"鏌ヨ鍙傛暟"
+// @Success	200	{object}	contextx.Response{}
+// @Router		/api/severity/delete/{id} [delete]
+func (s *SeverityApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := service.NewSeverityService().DeleteSeverity(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+// @Tags		涓ラ噸绋嬪害绠$悊
+// @Summary	鏇存柊涓ラ噸绋嬪害
+// @Produce	application/json
+// @Param		object	body		request.UpdateSeverity	true	"鏌ヨ鍙傛暟"
+// @Success	200		{object}	contextx.Response{}
+// @Router		/api/severity/update [put]
+func (s *SeverityApi) Update(c *gin.Context) {
+	var params request.UpdateSeverity
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode := service.NewSeverityService().UpdateSeverity(&params.Severity)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+// @Tags		涓ラ噸绋嬪害绠$悊
+// @Summary	鑾峰彇涓ラ噸绋嬪害鍒楄〃
+// @Produce	application/json
+// @Success	200	{object}	response.ListResponse{data=[]model.Severity}
+// @Router		/api/severity/list [get]
+func (s *SeverityApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	severity, total, errCode := service.NewSeverityService().GetSeverityList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.ListResponse{
+		Data: severity,
+		Count: total,
+	})
+}
diff --git a/constvar/faq.go b/constvar/faq.go
new file mode 100644
index 0000000..df1e10f
--- /dev/null
+++ b/constvar/faq.go
@@ -0,0 +1,12 @@
+package constvar
+type FaqQueryClass string
+
+const (
+	FaqQueryClassExpireLessThen60Days FaqQueryClass = ""
+)
+
+type FaqKeywordType string
+
+const (
+	FaqKeywordCustomerName   FaqKeywordType = ""
+)
diff --git a/constvar/priorityLevel.go b/constvar/priorityLevel.go
new file mode 100644
index 0000000..fab4303
--- /dev/null
+++ b/constvar/priorityLevel.go
@@ -0,0 +1,12 @@
+package constvar
+type PriorityLevelQueryClass string
+
+const (
+	PriorityLevelQueryClassExpireLessThen60Days PriorityLevelQueryClass = ""
+)
+
+type PriorityLevelKeywordType string
+
+const (
+	PriorityLevelKeywordCustomerName   PriorityLevelKeywordType = ""
+)
diff --git a/constvar/serviceOrder.go b/constvar/serviceOrder.go
new file mode 100644
index 0000000..959e402
--- /dev/null
+++ b/constvar/serviceOrder.go
@@ -0,0 +1,12 @@
+package constvar
+type ServiceOrderQueryClass string
+
+const (
+	ServiceOrderQueryClassExpireLessThen60Days ServiceOrderQueryClass = ""
+)
+
+type ServiceOrderKeywordType string
+
+const (
+	ServiceOrderKeywordCustomerName   ServiceOrderKeywordType = ""
+)
diff --git a/constvar/serviceType.go b/constvar/serviceType.go
new file mode 100644
index 0000000..3a8c856
--- /dev/null
+++ b/constvar/serviceType.go
@@ -0,0 +1,12 @@
+package constvar
+type ServiceTypeQueryClass string
+
+const (
+	ServiceTypeQueryClassExpireLessThen60Days ServiceTypeQueryClass = ""
+)
+
+type ServiceTypeKeywordType string
+
+const (
+	ServiceTypeKeywordCustomerName   ServiceTypeKeywordType = ""
+)
diff --git a/constvar/severity.go b/constvar/severity.go
new file mode 100644
index 0000000..f9781c7
--- /dev/null
+++ b/constvar/severity.go
@@ -0,0 +1,12 @@
+package constvar
+type SeverityQueryClass string
+
+const (
+	SeverityQueryClassExpireLessThen60Days SeverityQueryClass = ""
+)
+
+type SeverityKeywordType string
+
+const (
+	SeverityKeywordCustomerName   SeverityKeywordType = ""
+)
diff --git a/docs/docs.go b/docs/docs.go
index 9e3d7b1..041b0a8 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -2074,6 +2074,128 @@
                 }
             }
         },
+        "/api/faq/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "甯歌闂绠$悊"
+                ],
+                "summary": "娣诲姞甯歌闂",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddFaq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/faq/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "甯歌闂绠$悊"
+                ],
+                "summary": "鍒犻櫎甯歌闂",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/faq/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "甯歌闂绠$悊"
+                ],
+                "summary": "鑾峰彇甯歌闂鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.Faq"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/faq/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "甯歌闂绠$悊"
+                ],
+                "summary": "鏇存柊甯歌闂",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateFaq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/followRecord/add": {
             "post": {
                 "produces": [
@@ -3252,6 +3374,128 @@
                         "required": true,
                         "schema": {
                             "$ref": "#/definitions/request.UpdatePossibilities"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/priorityLevel/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浼樺厛绾у埆绠$悊"
+                ],
+                "summary": "娣诲姞浼樺厛绾у埆",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddPriorityLevel"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/priorityLevel/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浼樺厛绾у埆绠$悊"
+                ],
+                "summary": "鍒犻櫎浼樺厛绾у埆",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/priorityLevel/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浼樺厛绾у埆绠$悊"
+                ],
+                "summary": "鑾峰彇浼樺厛绾у埆鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.PriorityLevel"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/priorityLevel/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浼樺厛绾у埆绠$悊"
+                ],
+                "summary": "鏇存柊浼樺厛绾у埆",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdatePriorityLevel"
                         }
                     }
                 ],
@@ -6286,6 +6530,372 @@
                 }
             }
         },
+        "/api/serviceOrder/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠鐞�"
+                ],
+                "summary": "娣诲姞鏈嶅姟鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddServiceOrder"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrder/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠鐞�"
+                ],
+                "summary": "鍒犻櫎鏈嶅姟鍗�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrder/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠鐞�"
+                ],
+                "summary": "鑾峰彇鏈嶅姟鍗曞垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.ServiceOrder"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrder/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠鐞�"
+                ],
+                "summary": "鏇存柊鏈嶅姟鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateServiceOrder"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceType/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟绫诲瀷绠$悊"
+                ],
+                "summary": "娣诲姞鏈嶅姟绫诲瀷",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddServiceType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceType/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟绫诲瀷绠$悊"
+                ],
+                "summary": "鍒犻櫎鏈嶅姟绫诲瀷",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceType/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟绫诲瀷绠$悊"
+                ],
+                "summary": "鑾峰彇鏈嶅姟绫诲瀷鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.ServiceType"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceType/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟绫诲瀷绠$悊"
+                ],
+                "summary": "鏇存柊鏈嶅姟绫诲瀷",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateServiceType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/severity/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "涓ラ噸绋嬪害绠$悊"
+                ],
+                "summary": "娣诲姞涓ラ噸绋嬪害",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddSeverity"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/severity/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "涓ラ噸绋嬪害绠$悊"
+                ],
+                "summary": "鍒犻櫎涓ラ噸绋嬪害",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/severity/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "涓ラ噸绋嬪害绠$悊"
+                ],
+                "summary": "鑾峰彇涓ラ噸绋嬪害鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.Severity"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/severity/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "涓ラ噸绋嬪害绠$悊"
+                ],
+                "summary": "鏇存柊涓ラ噸绋嬪害",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateSeverity"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/solveRate/add": {
             "post": {
                 "produces": [
@@ -7231,9 +7841,6 @@
                 "code": {
                     "type": "integer"
                 },
-                "count": {
-                    "type": "integer"
-                },
                 "data": {},
                 "msg": {
                     "type": "string"
@@ -7715,6 +8322,17 @@
                 }
             }
         },
+        "model.Faq": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.FollowRecord": {
             "type": "object",
             "properties": {
@@ -7951,6 +8569,17 @@
             }
         },
         "model.Possibility": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.PriorityLevel": {
             "type": "object",
             "properties": {
                 "id": {
@@ -8668,6 +9297,156 @@
                 }
             }
         },
+        "model.ServiceOrder": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "description": "涓婇棬鍦板潃",
+                    "type": "string"
+                },
+                "appointment_time": {
+                    "description": "棰勭害涓婇棬鏃堕棿",
+                    "type": "string"
+                },
+                "car_fare": {
+                    "description": "浜ら�氳垂",
+                    "type": "number"
+                },
+                "charge_amount": {
+                    "description": "鏀惰垂閲戦",
+                    "type": "number"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
+                "client_id": {
+                    "description": "瀹㈡埛id",
+                    "type": "integer"
+                },
+                "contract": {
+                    "$ref": "#/definitions/model.Contract"
+                },
+                "contract_id": {
+                    "description": "鍚堝悓id",
+                    "type": "integer"
+                },
+                "expect_time": {
+                    "description": "甯屾湜澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "faq": {
+                    "$ref": "#/definitions/model.Faq"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "linkman_id": {
+                    "description": "鑱旂郴浜篿d",
+                    "type": "integer"
+                },
+                "order": {
+                    "$ref": "#/definitions/model.OrderManage"
+                },
+                "order_id": {
+                    "description": "閿�鍞鍗昳d",
+                    "type": "integer"
+                },
+                "priorityLevel": {
+                    "$ref": "#/definitions/model.PriorityLevel"
+                },
+                "priority_level_id": {
+                    "description": "浼樺厛绾у埆",
+                    "type": "integer"
+                },
+                "problem_desc": {
+                    "description": "闂鎻忚堪",
+                    "type": "string"
+                },
+                "problem_id": {
+                    "description": "甯歌闂id",
+                    "type": "integer"
+                },
+                "product": {
+                    "$ref": "#/definitions/model.Product"
+                },
+                "product_id": {
+                    "description": "浜у搧id",
+                    "type": "integer"
+                },
+                "real_time": {
+                    "description": "瀹為檯澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "remark": {
+                    "description": "澶囨敞",
+                    "type": "string"
+                },
+                "sale_leads": {
+                    "description": "閿�鍞満浼歩d",
+                    "type": "integer"
+                },
+                "serviceType": {
+                    "$ref": "#/definitions/model.ServiceType"
+                },
+                "service_man_id": {
+                    "description": "鏈嶅姟浜哄憳",
+                    "type": "integer"
+                },
+                "service_number": {
+                    "description": "鏈嶅姟鍗曠紪鍙�",
+                    "type": "string"
+                },
+                "service_type_id": {
+                    "description": "鏈嶅姟鏂瑰紡",
+                    "type": "integer"
+                },
+                "severity": {
+                    "$ref": "#/definitions/model.Severity"
+                },
+                "solution": {
+                    "description": "瑙e喅鏂规硶",
+                    "type": "string"
+                },
+                "solution_remark": {
+                    "description": "鍐呴儴澶囨敞",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "澶勭悊鐘舵��",
+                    "type": "integer"
+                },
+                "subject": {
+                    "description": "涓婚",
+                    "type": "string"
+                },
+                "time_spent_id": {
+                    "description": "鑺辫垂鏃堕棿",
+                    "type": "integer"
+                }
+            }
+        },
+        "model.ServiceType": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.Severity": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.SolveRate": {
             "type": "object",
             "properties": {
@@ -9110,6 +9889,17 @@
                 }
             }
         },
+        "request.AddFaq": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.AddFollowRecord": {
             "type": "object",
             "required": [
@@ -9234,6 +10024,17 @@
                 "name"
             ],
             "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddPriorityLevel": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
                 "name": {
                     "type": "string"
                 }
@@ -9808,6 +10609,156 @@
                 },
                 "timelyRate": {
                     "type": "integer"
+                }
+            }
+        },
+        "request.AddServiceOrder": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "description": "涓婇棬鍦板潃",
+                    "type": "string"
+                },
+                "appointment_time": {
+                    "description": "棰勭害涓婇棬鏃堕棿",
+                    "type": "string"
+                },
+                "car_fare": {
+                    "description": "浜ら�氳垂",
+                    "type": "number"
+                },
+                "charge_amount": {
+                    "description": "鏀惰垂閲戦",
+                    "type": "number"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
+                "client_id": {
+                    "description": "瀹㈡埛id",
+                    "type": "integer"
+                },
+                "contract": {
+                    "$ref": "#/definitions/model.Contract"
+                },
+                "contract_id": {
+                    "description": "鍚堝悓id",
+                    "type": "integer"
+                },
+                "expect_time": {
+                    "description": "甯屾湜澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "faq": {
+                    "$ref": "#/definitions/model.Faq"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "linkman_id": {
+                    "description": "鑱旂郴浜篿d",
+                    "type": "integer"
+                },
+                "order": {
+                    "$ref": "#/definitions/model.OrderManage"
+                },
+                "order_id": {
+                    "description": "閿�鍞鍗昳d",
+                    "type": "integer"
+                },
+                "priorityLevel": {
+                    "$ref": "#/definitions/model.PriorityLevel"
+                },
+                "priority_level_id": {
+                    "description": "浼樺厛绾у埆",
+                    "type": "integer"
+                },
+                "problem_desc": {
+                    "description": "闂鎻忚堪",
+                    "type": "string"
+                },
+                "problem_id": {
+                    "description": "甯歌闂id",
+                    "type": "integer"
+                },
+                "product": {
+                    "$ref": "#/definitions/model.Product"
+                },
+                "product_id": {
+                    "description": "浜у搧id",
+                    "type": "integer"
+                },
+                "real_time": {
+                    "description": "瀹為檯澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "remark": {
+                    "description": "澶囨敞",
+                    "type": "string"
+                },
+                "sale_leads": {
+                    "description": "閿�鍞満浼歩d",
+                    "type": "integer"
+                },
+                "serviceType": {
+                    "$ref": "#/definitions/model.ServiceType"
+                },
+                "service_man_id": {
+                    "description": "鏈嶅姟浜哄憳",
+                    "type": "integer"
+                },
+                "service_number": {
+                    "description": "鏈嶅姟鍗曠紪鍙�",
+                    "type": "string"
+                },
+                "service_type_id": {
+                    "description": "鏈嶅姟鏂瑰紡",
+                    "type": "integer"
+                },
+                "severity": {
+                    "$ref": "#/definitions/model.Severity"
+                },
+                "solution": {
+                    "description": "瑙e喅鏂规硶",
+                    "type": "string"
+                },
+                "solution_remark": {
+                    "description": "鍐呴儴澶囨敞",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "澶勭悊鐘舵��",
+                    "type": "integer"
+                },
+                "subject": {
+                    "description": "涓婚",
+                    "type": "string"
+                },
+                "time_spent_id": {
+                    "description": "鑺辫垂鏃堕棿",
+                    "type": "integer"
+                }
+            }
+        },
+        "request.AddServiceType": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddSeverity": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
                 }
             }
         },
@@ -11203,6 +12154,17 @@
                 }
             }
         },
+        "request.UpdateFaq": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateFollowRecord": {
             "type": "object",
             "required": [
@@ -11425,6 +12387,17 @@
                 "id",
                 "name"
             ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdatePriorityLevel": {
+            "type": "object",
             "properties": {
                 "id": {
                     "type": "integer"
@@ -12294,6 +13267,156 @@
                 }
             }
         },
+        "request.UpdateServiceOrder": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "description": "涓婇棬鍦板潃",
+                    "type": "string"
+                },
+                "appointment_time": {
+                    "description": "棰勭害涓婇棬鏃堕棿",
+                    "type": "string"
+                },
+                "car_fare": {
+                    "description": "浜ら�氳垂",
+                    "type": "number"
+                },
+                "charge_amount": {
+                    "description": "鏀惰垂閲戦",
+                    "type": "number"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
+                "client_id": {
+                    "description": "瀹㈡埛id",
+                    "type": "integer"
+                },
+                "contract": {
+                    "$ref": "#/definitions/model.Contract"
+                },
+                "contract_id": {
+                    "description": "鍚堝悓id",
+                    "type": "integer"
+                },
+                "expect_time": {
+                    "description": "甯屾湜澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "faq": {
+                    "$ref": "#/definitions/model.Faq"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "linkman_id": {
+                    "description": "鑱旂郴浜篿d",
+                    "type": "integer"
+                },
+                "order": {
+                    "$ref": "#/definitions/model.OrderManage"
+                },
+                "order_id": {
+                    "description": "閿�鍞鍗昳d",
+                    "type": "integer"
+                },
+                "priorityLevel": {
+                    "$ref": "#/definitions/model.PriorityLevel"
+                },
+                "priority_level_id": {
+                    "description": "浼樺厛绾у埆",
+                    "type": "integer"
+                },
+                "problem_desc": {
+                    "description": "闂鎻忚堪",
+                    "type": "string"
+                },
+                "problem_id": {
+                    "description": "甯歌闂id",
+                    "type": "integer"
+                },
+                "product": {
+                    "$ref": "#/definitions/model.Product"
+                },
+                "product_id": {
+                    "description": "浜у搧id",
+                    "type": "integer"
+                },
+                "real_time": {
+                    "description": "瀹為檯澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "remark": {
+                    "description": "澶囨敞",
+                    "type": "string"
+                },
+                "sale_leads": {
+                    "description": "閿�鍞満浼歩d",
+                    "type": "integer"
+                },
+                "serviceType": {
+                    "$ref": "#/definitions/model.ServiceType"
+                },
+                "service_man_id": {
+                    "description": "鏈嶅姟浜哄憳",
+                    "type": "integer"
+                },
+                "service_number": {
+                    "description": "鏈嶅姟鍗曠紪鍙�",
+                    "type": "string"
+                },
+                "service_type_id": {
+                    "description": "鏈嶅姟鏂瑰紡",
+                    "type": "integer"
+                },
+                "severity": {
+                    "$ref": "#/definitions/model.Severity"
+                },
+                "solution": {
+                    "description": "瑙e喅鏂规硶",
+                    "type": "string"
+                },
+                "solution_remark": {
+                    "description": "鍐呴儴澶囨敞",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "澶勭悊鐘舵��",
+                    "type": "integer"
+                },
+                "subject": {
+                    "description": "涓婚",
+                    "type": "string"
+                },
+                "time_spent_id": {
+                    "description": "鑺辫垂鏃堕棿",
+                    "type": "integer"
+                }
+            }
+        },
+        "request.UpdateServiceType": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdateSeverity": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateSolveRate": {
             "type": "object",
             "required": [
@@ -12882,6 +14005,21 @@
                 }
             }
         },
+        "response.ListResponse": {
+            "type": "object",
+            "properties": {
+                "code": {
+                    "type": "integer"
+                },
+                "count": {
+                    "type": "integer"
+                },
+                "data": {},
+                "msg": {
+                    "type": "string"
+                }
+            }
+        },
         "response.LoginResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 4c31b17..92d8014 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -2062,6 +2062,128 @@
                 }
             }
         },
+        "/api/faq/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "甯歌闂绠$悊"
+                ],
+                "summary": "娣诲姞甯歌闂",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddFaq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/faq/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "甯歌闂绠$悊"
+                ],
+                "summary": "鍒犻櫎甯歌闂",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/faq/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "甯歌闂绠$悊"
+                ],
+                "summary": "鑾峰彇甯歌闂鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.Faq"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/faq/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "甯歌闂绠$悊"
+                ],
+                "summary": "鏇存柊甯歌闂",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateFaq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/followRecord/add": {
             "post": {
                 "produces": [
@@ -3240,6 +3362,128 @@
                         "required": true,
                         "schema": {
                             "$ref": "#/definitions/request.UpdatePossibilities"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/priorityLevel/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浼樺厛绾у埆绠$悊"
+                ],
+                "summary": "娣诲姞浼樺厛绾у埆",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddPriorityLevel"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/priorityLevel/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浼樺厛绾у埆绠$悊"
+                ],
+                "summary": "鍒犻櫎浼樺厛绾у埆",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/priorityLevel/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浼樺厛绾у埆绠$悊"
+                ],
+                "summary": "鑾峰彇浼樺厛绾у埆鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.PriorityLevel"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/priorityLevel/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "浼樺厛绾у埆绠$悊"
+                ],
+                "summary": "鏇存柊浼樺厛绾у埆",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdatePriorityLevel"
                         }
                     }
                 ],
@@ -6274,6 +6518,372 @@
                 }
             }
         },
+        "/api/serviceOrder/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠鐞�"
+                ],
+                "summary": "娣诲姞鏈嶅姟鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddServiceOrder"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrder/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠鐞�"
+                ],
+                "summary": "鍒犻櫎鏈嶅姟鍗�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrder/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠鐞�"
+                ],
+                "summary": "鑾峰彇鏈嶅姟鍗曞垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.ServiceOrder"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceOrder/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟鍗曠鐞�"
+                ],
+                "summary": "鏇存柊鏈嶅姟鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateServiceOrder"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceType/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟绫诲瀷绠$悊"
+                ],
+                "summary": "娣诲姞鏈嶅姟绫诲瀷",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddServiceType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceType/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟绫诲瀷绠$悊"
+                ],
+                "summary": "鍒犻櫎鏈嶅姟绫诲瀷",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceType/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟绫诲瀷绠$悊"
+                ],
+                "summary": "鑾峰彇鏈嶅姟绫诲瀷鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.ServiceType"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/serviceType/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "鏈嶅姟绫诲瀷绠$悊"
+                ],
+                "summary": "鏇存柊鏈嶅姟绫诲瀷",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateServiceType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/severity/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "涓ラ噸绋嬪害绠$悊"
+                ],
+                "summary": "娣诲姞涓ラ噸绋嬪害",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddSeverity"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/severity/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "涓ラ噸绋嬪害绠$悊"
+                ],
+                "summary": "鍒犻櫎涓ラ噸绋嬪害",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/severity/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "涓ラ噸绋嬪害绠$悊"
+                ],
+                "summary": "鑾峰彇涓ラ噸绋嬪害鍒楄〃",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/response.ListResponse"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "type": "array",
+                                            "items": {
+                                                "$ref": "#/definitions/model.Severity"
+                                            }
+                                        }
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "/api/severity/update": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "涓ラ噸绋嬪害绠$悊"
+                ],
+                "summary": "鏇存柊涓ラ噸绋嬪害",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateSeverity"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/solveRate/add": {
             "post": {
                 "produces": [
@@ -7219,9 +7829,6 @@
                 "code": {
                     "type": "integer"
                 },
-                "count": {
-                    "type": "integer"
-                },
                 "data": {},
                 "msg": {
                     "type": "string"
@@ -7703,6 +8310,17 @@
                 }
             }
         },
+        "model.Faq": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.FollowRecord": {
             "type": "object",
             "properties": {
@@ -7939,6 +8557,17 @@
             }
         },
         "model.Possibility": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.PriorityLevel": {
             "type": "object",
             "properties": {
                 "id": {
@@ -8656,6 +9285,156 @@
                 }
             }
         },
+        "model.ServiceOrder": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "description": "涓婇棬鍦板潃",
+                    "type": "string"
+                },
+                "appointment_time": {
+                    "description": "棰勭害涓婇棬鏃堕棿",
+                    "type": "string"
+                },
+                "car_fare": {
+                    "description": "浜ら�氳垂",
+                    "type": "number"
+                },
+                "charge_amount": {
+                    "description": "鏀惰垂閲戦",
+                    "type": "number"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
+                "client_id": {
+                    "description": "瀹㈡埛id",
+                    "type": "integer"
+                },
+                "contract": {
+                    "$ref": "#/definitions/model.Contract"
+                },
+                "contract_id": {
+                    "description": "鍚堝悓id",
+                    "type": "integer"
+                },
+                "expect_time": {
+                    "description": "甯屾湜澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "faq": {
+                    "$ref": "#/definitions/model.Faq"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "linkman_id": {
+                    "description": "鑱旂郴浜篿d",
+                    "type": "integer"
+                },
+                "order": {
+                    "$ref": "#/definitions/model.OrderManage"
+                },
+                "order_id": {
+                    "description": "閿�鍞鍗昳d",
+                    "type": "integer"
+                },
+                "priorityLevel": {
+                    "$ref": "#/definitions/model.PriorityLevel"
+                },
+                "priority_level_id": {
+                    "description": "浼樺厛绾у埆",
+                    "type": "integer"
+                },
+                "problem_desc": {
+                    "description": "闂鎻忚堪",
+                    "type": "string"
+                },
+                "problem_id": {
+                    "description": "甯歌闂id",
+                    "type": "integer"
+                },
+                "product": {
+                    "$ref": "#/definitions/model.Product"
+                },
+                "product_id": {
+                    "description": "浜у搧id",
+                    "type": "integer"
+                },
+                "real_time": {
+                    "description": "瀹為檯澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "remark": {
+                    "description": "澶囨敞",
+                    "type": "string"
+                },
+                "sale_leads": {
+                    "description": "閿�鍞満浼歩d",
+                    "type": "integer"
+                },
+                "serviceType": {
+                    "$ref": "#/definitions/model.ServiceType"
+                },
+                "service_man_id": {
+                    "description": "鏈嶅姟浜哄憳",
+                    "type": "integer"
+                },
+                "service_number": {
+                    "description": "鏈嶅姟鍗曠紪鍙�",
+                    "type": "string"
+                },
+                "service_type_id": {
+                    "description": "鏈嶅姟鏂瑰紡",
+                    "type": "integer"
+                },
+                "severity": {
+                    "$ref": "#/definitions/model.Severity"
+                },
+                "solution": {
+                    "description": "瑙e喅鏂规硶",
+                    "type": "string"
+                },
+                "solution_remark": {
+                    "description": "鍐呴儴澶囨敞",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "澶勭悊鐘舵��",
+                    "type": "integer"
+                },
+                "subject": {
+                    "description": "涓婚",
+                    "type": "string"
+                },
+                "time_spent_id": {
+                    "description": "鑺辫垂鏃堕棿",
+                    "type": "integer"
+                }
+            }
+        },
+        "model.ServiceType": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.Severity": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "model.SolveRate": {
             "type": "object",
             "properties": {
@@ -9098,6 +9877,17 @@
                 }
             }
         },
+        "request.AddFaq": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.AddFollowRecord": {
             "type": "object",
             "required": [
@@ -9222,6 +10012,17 @@
                 "name"
             ],
             "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddPriorityLevel": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
                 "name": {
                     "type": "string"
                 }
@@ -9796,6 +10597,156 @@
                 },
                 "timelyRate": {
                     "type": "integer"
+                }
+            }
+        },
+        "request.AddServiceOrder": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "description": "涓婇棬鍦板潃",
+                    "type": "string"
+                },
+                "appointment_time": {
+                    "description": "棰勭害涓婇棬鏃堕棿",
+                    "type": "string"
+                },
+                "car_fare": {
+                    "description": "浜ら�氳垂",
+                    "type": "number"
+                },
+                "charge_amount": {
+                    "description": "鏀惰垂閲戦",
+                    "type": "number"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
+                "client_id": {
+                    "description": "瀹㈡埛id",
+                    "type": "integer"
+                },
+                "contract": {
+                    "$ref": "#/definitions/model.Contract"
+                },
+                "contract_id": {
+                    "description": "鍚堝悓id",
+                    "type": "integer"
+                },
+                "expect_time": {
+                    "description": "甯屾湜澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "faq": {
+                    "$ref": "#/definitions/model.Faq"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "linkman_id": {
+                    "description": "鑱旂郴浜篿d",
+                    "type": "integer"
+                },
+                "order": {
+                    "$ref": "#/definitions/model.OrderManage"
+                },
+                "order_id": {
+                    "description": "閿�鍞鍗昳d",
+                    "type": "integer"
+                },
+                "priorityLevel": {
+                    "$ref": "#/definitions/model.PriorityLevel"
+                },
+                "priority_level_id": {
+                    "description": "浼樺厛绾у埆",
+                    "type": "integer"
+                },
+                "problem_desc": {
+                    "description": "闂鎻忚堪",
+                    "type": "string"
+                },
+                "problem_id": {
+                    "description": "甯歌闂id",
+                    "type": "integer"
+                },
+                "product": {
+                    "$ref": "#/definitions/model.Product"
+                },
+                "product_id": {
+                    "description": "浜у搧id",
+                    "type": "integer"
+                },
+                "real_time": {
+                    "description": "瀹為檯澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "remark": {
+                    "description": "澶囨敞",
+                    "type": "string"
+                },
+                "sale_leads": {
+                    "description": "閿�鍞満浼歩d",
+                    "type": "integer"
+                },
+                "serviceType": {
+                    "$ref": "#/definitions/model.ServiceType"
+                },
+                "service_man_id": {
+                    "description": "鏈嶅姟浜哄憳",
+                    "type": "integer"
+                },
+                "service_number": {
+                    "description": "鏈嶅姟鍗曠紪鍙�",
+                    "type": "string"
+                },
+                "service_type_id": {
+                    "description": "鏈嶅姟鏂瑰紡",
+                    "type": "integer"
+                },
+                "severity": {
+                    "$ref": "#/definitions/model.Severity"
+                },
+                "solution": {
+                    "description": "瑙e喅鏂规硶",
+                    "type": "string"
+                },
+                "solution_remark": {
+                    "description": "鍐呴儴澶囨敞",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "澶勭悊鐘舵��",
+                    "type": "integer"
+                },
+                "subject": {
+                    "description": "涓婚",
+                    "type": "string"
+                },
+                "time_spent_id": {
+                    "description": "鑺辫垂鏃堕棿",
+                    "type": "integer"
+                }
+            }
+        },
+        "request.AddServiceType": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AddSeverity": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
                 }
             }
         },
@@ -11191,6 +12142,17 @@
                 }
             }
         },
+        "request.UpdateFaq": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateFollowRecord": {
             "type": "object",
             "required": [
@@ -11413,6 +12375,17 @@
                 "id",
                 "name"
             ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdatePriorityLevel": {
+            "type": "object",
             "properties": {
                 "id": {
                     "type": "integer"
@@ -12282,6 +13255,156 @@
                 }
             }
         },
+        "request.UpdateServiceOrder": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "description": "涓婇棬鍦板潃",
+                    "type": "string"
+                },
+                "appointment_time": {
+                    "description": "棰勭害涓婇棬鏃堕棿",
+                    "type": "string"
+                },
+                "car_fare": {
+                    "description": "浜ら�氳垂",
+                    "type": "number"
+                },
+                "charge_amount": {
+                    "description": "鏀惰垂閲戦",
+                    "type": "number"
+                },
+                "client": {
+                    "$ref": "#/definitions/model.Client"
+                },
+                "client_id": {
+                    "description": "瀹㈡埛id",
+                    "type": "integer"
+                },
+                "contract": {
+                    "$ref": "#/definitions/model.Contract"
+                },
+                "contract_id": {
+                    "description": "鍚堝悓id",
+                    "type": "integer"
+                },
+                "expect_time": {
+                    "description": "甯屾湜澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "faq": {
+                    "$ref": "#/definitions/model.Faq"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "linkman_id": {
+                    "description": "鑱旂郴浜篿d",
+                    "type": "integer"
+                },
+                "order": {
+                    "$ref": "#/definitions/model.OrderManage"
+                },
+                "order_id": {
+                    "description": "閿�鍞鍗昳d",
+                    "type": "integer"
+                },
+                "priorityLevel": {
+                    "$ref": "#/definitions/model.PriorityLevel"
+                },
+                "priority_level_id": {
+                    "description": "浼樺厛绾у埆",
+                    "type": "integer"
+                },
+                "problem_desc": {
+                    "description": "闂鎻忚堪",
+                    "type": "string"
+                },
+                "problem_id": {
+                    "description": "甯歌闂id",
+                    "type": "integer"
+                },
+                "product": {
+                    "$ref": "#/definitions/model.Product"
+                },
+                "product_id": {
+                    "description": "浜у搧id",
+                    "type": "integer"
+                },
+                "real_time": {
+                    "description": "瀹為檯澶勭悊鏃堕棿",
+                    "type": "string"
+                },
+                "remark": {
+                    "description": "澶囨敞",
+                    "type": "string"
+                },
+                "sale_leads": {
+                    "description": "閿�鍞満浼歩d",
+                    "type": "integer"
+                },
+                "serviceType": {
+                    "$ref": "#/definitions/model.ServiceType"
+                },
+                "service_man_id": {
+                    "description": "鏈嶅姟浜哄憳",
+                    "type": "integer"
+                },
+                "service_number": {
+                    "description": "鏈嶅姟鍗曠紪鍙�",
+                    "type": "string"
+                },
+                "service_type_id": {
+                    "description": "鏈嶅姟鏂瑰紡",
+                    "type": "integer"
+                },
+                "severity": {
+                    "$ref": "#/definitions/model.Severity"
+                },
+                "solution": {
+                    "description": "瑙e喅鏂规硶",
+                    "type": "string"
+                },
+                "solution_remark": {
+                    "description": "鍐呴儴澶囨敞",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "澶勭悊鐘舵��",
+                    "type": "integer"
+                },
+                "subject": {
+                    "description": "涓婚",
+                    "type": "string"
+                },
+                "time_spent_id": {
+                    "description": "鑺辫垂鏃堕棿",
+                    "type": "integer"
+                }
+            }
+        },
+        "request.UpdateServiceType": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.UpdateSeverity": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
         "request.UpdateSolveRate": {
             "type": "object",
             "required": [
@@ -12870,6 +13993,21 @@
                 }
             }
         },
+        "response.ListResponse": {
+            "type": "object",
+            "properties": {
+                "code": {
+                    "type": "integer"
+                },
+                "count": {
+                    "type": "integer"
+                },
+                "data": {},
+                "msg": {
+                    "type": "string"
+                }
+            }
+        },
         "response.LoginResponse": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 04894d5..e8359e8 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -129,8 +129,6 @@
     properties:
       code:
         type: integer
-      count:
-        type: integer
       data: {}
       msg:
         type: string
@@ -447,6 +445,13 @@
       name:
         type: string
     type: object
+  model.Faq:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
   model.FollowRecord:
     properties:
       client:
@@ -602,6 +607,13 @@
         type: integer
     type: object
   model.Possibility:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
+  model.PriorityLevel:
     properties:
       id:
         type: integer
@@ -1071,6 +1083,113 @@
       timelyRateId:
         type: integer
     type: object
+  model.ServiceOrder:
+    properties:
+      address:
+        description: 涓婇棬鍦板潃
+        type: string
+      appointment_time:
+        description: 棰勭害涓婇棬鏃堕棿
+        type: string
+      car_fare:
+        description: 浜ら�氳垂
+        type: number
+      charge_amount:
+        description: 鏀惰垂閲戦
+        type: number
+      client:
+        $ref: '#/definitions/model.Client'
+      client_id:
+        description: 瀹㈡埛id
+        type: integer
+      contract:
+        $ref: '#/definitions/model.Contract'
+      contract_id:
+        description: 鍚堝悓id
+        type: integer
+      expect_time:
+        description: 甯屾湜澶勭悊鏃堕棿
+        type: string
+      faq:
+        $ref: '#/definitions/model.Faq'
+      id:
+        type: integer
+      linkman_id:
+        description: 鑱旂郴浜篿d
+        type: integer
+      order:
+        $ref: '#/definitions/model.OrderManage'
+      order_id:
+        description: 閿�鍞鍗昳d
+        type: integer
+      priority_level_id:
+        description: 浼樺厛绾у埆
+        type: integer
+      priorityLevel:
+        $ref: '#/definitions/model.PriorityLevel'
+      problem_desc:
+        description: 闂鎻忚堪
+        type: string
+      problem_id:
+        description: 甯歌闂id
+        type: integer
+      product:
+        $ref: '#/definitions/model.Product'
+      product_id:
+        description: 浜у搧id
+        type: integer
+      real_time:
+        description: 瀹為檯澶勭悊鏃堕棿
+        type: string
+      remark:
+        description: 澶囨敞
+        type: string
+      sale_leads:
+        description: 閿�鍞満浼歩d
+        type: integer
+      service_man_id:
+        description: 鏈嶅姟浜哄憳
+        type: integer
+      service_number:
+        description: 鏈嶅姟鍗曠紪鍙�
+        type: string
+      service_type_id:
+        description: 鏈嶅姟鏂瑰紡
+        type: integer
+      serviceType:
+        $ref: '#/definitions/model.ServiceType'
+      severity:
+        $ref: '#/definitions/model.Severity'
+      solution:
+        description: 瑙e喅鏂规硶
+        type: string
+      solution_remark:
+        description: 鍐呴儴澶囨敞
+        type: string
+      status:
+        description: 澶勭悊鐘舵��
+        type: integer
+      subject:
+        description: 涓婚
+        type: string
+      time_spent_id:
+        description: 鑺辫垂鏃堕棿
+        type: integer
+    type: object
+  model.ServiceType:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
+  model.Severity:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
   model.SolveRate:
     properties:
       id:
@@ -1372,6 +1491,13 @@
     required:
     - name
     type: object
+  request.AddFaq:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
   request.AddFollowRecord:
     properties:
       follow_record:
@@ -1454,6 +1580,13 @@
         type: string
     required:
     - name
+    type: object
+  request.AddPriorityLevel:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
     type: object
   request.AddProvince:
     properties:
@@ -1837,6 +1970,113 @@
         type: integer
       timelyRate:
         type: integer
+    type: object
+  request.AddServiceOrder:
+    properties:
+      address:
+        description: 涓婇棬鍦板潃
+        type: string
+      appointment_time:
+        description: 棰勭害涓婇棬鏃堕棿
+        type: string
+      car_fare:
+        description: 浜ら�氳垂
+        type: number
+      charge_amount:
+        description: 鏀惰垂閲戦
+        type: number
+      client:
+        $ref: '#/definitions/model.Client'
+      client_id:
+        description: 瀹㈡埛id
+        type: integer
+      contract:
+        $ref: '#/definitions/model.Contract'
+      contract_id:
+        description: 鍚堝悓id
+        type: integer
+      expect_time:
+        description: 甯屾湜澶勭悊鏃堕棿
+        type: string
+      faq:
+        $ref: '#/definitions/model.Faq'
+      id:
+        type: integer
+      linkman_id:
+        description: 鑱旂郴浜篿d
+        type: integer
+      order:
+        $ref: '#/definitions/model.OrderManage'
+      order_id:
+        description: 閿�鍞鍗昳d
+        type: integer
+      priority_level_id:
+        description: 浼樺厛绾у埆
+        type: integer
+      priorityLevel:
+        $ref: '#/definitions/model.PriorityLevel'
+      problem_desc:
+        description: 闂鎻忚堪
+        type: string
+      problem_id:
+        description: 甯歌闂id
+        type: integer
+      product:
+        $ref: '#/definitions/model.Product'
+      product_id:
+        description: 浜у搧id
+        type: integer
+      real_time:
+        description: 瀹為檯澶勭悊鏃堕棿
+        type: string
+      remark:
+        description: 澶囨敞
+        type: string
+      sale_leads:
+        description: 閿�鍞満浼歩d
+        type: integer
+      service_man_id:
+        description: 鏈嶅姟浜哄憳
+        type: integer
+      service_number:
+        description: 鏈嶅姟鍗曠紪鍙�
+        type: string
+      service_type_id:
+        description: 鏈嶅姟鏂瑰紡
+        type: integer
+      serviceType:
+        $ref: '#/definitions/model.ServiceType'
+      severity:
+        $ref: '#/definitions/model.Severity'
+      solution:
+        description: 瑙e喅鏂规硶
+        type: string
+      solution_remark:
+        description: 鍐呴儴澶囨敞
+        type: string
+      status:
+        description: 澶勭悊鐘舵��
+        type: integer
+      subject:
+        description: 涓婚
+        type: string
+      time_spent_id:
+        description: 鑺辫垂鏃堕棿
+        type: integer
+    type: object
+  request.AddServiceType:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
+  request.AddSeverity:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
     type: object
   request.AddSolveRate:
     properties:
@@ -2787,6 +3027,13 @@
           $ref: '#/definitions/request.UpdateEnterpriseScale'
         type: array
     type: object
+  request.UpdateFaq:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
   request.UpdateFollowRecord:
     properties:
       follow_record:
@@ -2937,6 +3184,13 @@
     required:
     - id
     - name
+    type: object
+  request.UpdatePriorityLevel:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
     type: object
   request.UpdateProvince:
     properties:
@@ -3513,6 +3767,113 @@
       timelyRate:
         type: integer
     type: object
+  request.UpdateServiceOrder:
+    properties:
+      address:
+        description: 涓婇棬鍦板潃
+        type: string
+      appointment_time:
+        description: 棰勭害涓婇棬鏃堕棿
+        type: string
+      car_fare:
+        description: 浜ら�氳垂
+        type: number
+      charge_amount:
+        description: 鏀惰垂閲戦
+        type: number
+      client:
+        $ref: '#/definitions/model.Client'
+      client_id:
+        description: 瀹㈡埛id
+        type: integer
+      contract:
+        $ref: '#/definitions/model.Contract'
+      contract_id:
+        description: 鍚堝悓id
+        type: integer
+      expect_time:
+        description: 甯屾湜澶勭悊鏃堕棿
+        type: string
+      faq:
+        $ref: '#/definitions/model.Faq'
+      id:
+        type: integer
+      linkman_id:
+        description: 鑱旂郴浜篿d
+        type: integer
+      order:
+        $ref: '#/definitions/model.OrderManage'
+      order_id:
+        description: 閿�鍞鍗昳d
+        type: integer
+      priority_level_id:
+        description: 浼樺厛绾у埆
+        type: integer
+      priorityLevel:
+        $ref: '#/definitions/model.PriorityLevel'
+      problem_desc:
+        description: 闂鎻忚堪
+        type: string
+      problem_id:
+        description: 甯歌闂id
+        type: integer
+      product:
+        $ref: '#/definitions/model.Product'
+      product_id:
+        description: 浜у搧id
+        type: integer
+      real_time:
+        description: 瀹為檯澶勭悊鏃堕棿
+        type: string
+      remark:
+        description: 澶囨敞
+        type: string
+      sale_leads:
+        description: 閿�鍞満浼歩d
+        type: integer
+      service_man_id:
+        description: 鏈嶅姟浜哄憳
+        type: integer
+      service_number:
+        description: 鏈嶅姟鍗曠紪鍙�
+        type: string
+      service_type_id:
+        description: 鏈嶅姟鏂瑰紡
+        type: integer
+      serviceType:
+        $ref: '#/definitions/model.ServiceType'
+      severity:
+        $ref: '#/definitions/model.Severity'
+      solution:
+        description: 瑙e喅鏂规硶
+        type: string
+      solution_remark:
+        description: 鍐呴儴澶囨敞
+        type: string
+      status:
+        description: 澶勭悊鐘舵��
+        type: integer
+      subject:
+        description: 涓婚
+        type: string
+      time_spent_id:
+        description: 鑺辫垂鏃堕棿
+        type: integer
+    type: object
+  request.UpdateServiceType:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
+  request.UpdateSeverity:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
   request.UpdateSolveRate:
     properties:
       id:
@@ -3908,6 +4269,16 @@
         items:
           $ref: '#/definitions/model.IsVisit'
         type: array
+    type: object
+  response.ListResponse:
+    properties:
+      code:
+        type: integer
+      count:
+        type: integer
+      data: {}
+      msg:
+        type: string
     type: object
   response.LoginResponse:
     properties:
@@ -5446,6 +5817,81 @@
       summary: 鏇存柊浼佷笟瑙勬ā
       tags:
       - EnterpriseScale
+  /api/faq/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddFaq'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞甯歌闂
+      tags:
+      - 甯歌闂绠$悊
+  /api/faq/delete/{id}:
+    delete:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: path
+        name: id
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鍒犻櫎甯歌闂
+      tags:
+      - 甯歌闂绠$悊
+  /api/faq/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/response.ListResponse'
+            - properties:
+                data:
+                  items:
+                    $ref: '#/definitions/model.Faq'
+                  type: array
+              type: object
+      summary: 鑾峰彇甯歌闂鍒楄〃
+      tags:
+      - 甯歌闂绠$悊
+  /api/faq/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateFaq'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊甯歌闂
+      tags:
+      - 甯歌闂绠$悊
   /api/followRecord/add:
     post:
       parameters:
@@ -6173,6 +6619,81 @@
       summary: 鏇存柊鍟嗘満鍙兘鎬�
       tags:
       - Possibility
+  /api/priorityLevel/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddPriorityLevel'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞浼樺厛绾у埆
+      tags:
+      - 浼樺厛绾у埆绠$悊
+  /api/priorityLevel/delete/{id}:
+    delete:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: path
+        name: id
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鍒犻櫎浼樺厛绾у埆
+      tags:
+      - 浼樺厛绾у埆绠$悊
+  /api/priorityLevel/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/response.ListResponse'
+            - properties:
+                data:
+                  items:
+                    $ref: '#/definitions/model.PriorityLevel'
+                  type: array
+              type: object
+      summary: 鑾峰彇浼樺厛绾у埆鍒楄〃
+      tags:
+      - 浼樺厛绾у埆绠$悊
+  /api/priorityLevel/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdatePriorityLevel'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊浼樺厛绾у埆
+      tags:
+      - 浼樺厛绾у埆绠$悊
   /api/province/add:
     post:
       parameters:
@@ -8033,6 +8554,231 @@
       summary: 鏇存柊鏈嶅姟璺熻繘
       tags:
       - ServiceFollowup
+  /api/serviceOrder/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddServiceOrder'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞鏈嶅姟鍗�
+      tags:
+      - 鏈嶅姟鍗曠鐞�
+  /api/serviceOrder/delete/{id}:
+    delete:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: path
+        name: id
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鍒犻櫎鏈嶅姟鍗�
+      tags:
+      - 鏈嶅姟鍗曠鐞�
+  /api/serviceOrder/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/response.ListResponse'
+            - properties:
+                data:
+                  items:
+                    $ref: '#/definitions/model.ServiceOrder'
+                  type: array
+              type: object
+      summary: 鑾峰彇鏈嶅姟鍗曞垪琛�
+      tags:
+      - 鏈嶅姟鍗曠鐞�
+  /api/serviceOrder/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateServiceOrder'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊鏈嶅姟鍗�
+      tags:
+      - 鏈嶅姟鍗曠鐞�
+  /api/serviceType/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddServiceType'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞鏈嶅姟绫诲瀷
+      tags:
+      - 鏈嶅姟绫诲瀷绠$悊
+  /api/serviceType/delete/{id}:
+    delete:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: path
+        name: id
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鍒犻櫎鏈嶅姟绫诲瀷
+      tags:
+      - 鏈嶅姟绫诲瀷绠$悊
+  /api/serviceType/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/response.ListResponse'
+            - properties:
+                data:
+                  items:
+                    $ref: '#/definitions/model.ServiceType'
+                  type: array
+              type: object
+      summary: 鑾峰彇鏈嶅姟绫诲瀷鍒楄〃
+      tags:
+      - 鏈嶅姟绫诲瀷绠$悊
+  /api/serviceType/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateServiceType'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊鏈嶅姟绫诲瀷
+      tags:
+      - 鏈嶅姟绫诲瀷绠$悊
+  /api/severity/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddSeverity'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞涓ラ噸绋嬪害
+      tags:
+      - 涓ラ噸绋嬪害绠$悊
+  /api/severity/delete/{id}:
+    delete:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: path
+        name: id
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鍒犻櫎涓ラ噸绋嬪害
+      tags:
+      - 涓ラ噸绋嬪害绠$悊
+  /api/severity/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            allOf:
+            - $ref: '#/definitions/response.ListResponse'
+            - properties:
+                data:
+                  items:
+                    $ref: '#/definitions/model.Severity'
+                  type: array
+              type: object
+      summary: 鑾峰彇涓ラ噸绋嬪害鍒楄〃
+      tags:
+      - 涓ラ噸绋嬪害绠$悊
+  /api/severity/update:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateSeverity'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊涓ラ噸绋嬪害
+      tags:
+      - 涓ラ噸绋嬪害绠$悊
   /api/solveRate/add:
     post:
       parameters:
diff --git a/model/faq.go b/model/faq.go
new file mode 100644
index 0000000..9fe3184
--- /dev/null
+++ b/model/faq.go
@@ -0,0 +1,114 @@
+package model
+
+import (
+	"aps_crm/constvar"
+	"aps_crm/pkg/mysqlx"
+	"errors"
+	"fmt"
+	"gorm.io/gorm"
+)
+
+type (
+	// Faq 甯歌闂
+	Faq struct {
+		Id   int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name   string    `json:"name" gorm:"column:name"`
+	}
+
+	// FaqSearch 甯歌闂鎼滅储鏉′欢
+	FaqSearch struct {
+		Faq
+		Orm *gorm.DB
+        QueryClass  constvar.FaqQueryClass
+        KeywordType constvar.FaqKeywordType
+        Keyword     string
+        PageNum  int
+        PageSize int
+	}
+)
+
+func (Faq) TableName() string {
+	return "faq"
+}
+
+func NewFaqSearch() *FaqSearch {
+	return &FaqSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *FaqSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&Faq{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+
+	return db
+}
+
+func (slf *FaqSearch) Create(record *Faq) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *FaqSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&Faq{}).Error
+}
+
+func (slf *FaqSearch) Update(record *Faq) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *FaqSearch) FindAll() ([]*Faq, error) {
+	var db = slf.build()
+	var record = make([]*Faq, 0)
+	err := db.Find(&record).Error
+	return record, err
+}
+
+func (slf *FaqSearch) SetId(id int) *FaqSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *FaqSearch) First() (*Faq, error) {
+	var db = slf.build()
+	var record = new(Faq)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *FaqSearch) Updates(values interface{}) error {
+	var db = slf.build()
+	return db.Updates(values).Error
+}
+
+func (slf *FaqSearch) Save(record *Faq) error {
+	if record.Id == 0 {
+		return errors.New("id涓虹┖")
+	}
+	var db = slf.build()
+
+	if err := db.Save(record).Error; err != nil {
+		return fmt.Errorf("save err: %v, record: %+v", err, record)
+	}
+
+	return nil
+}
+
+func (slf *FaqSearch) Find() ([]*Faq, int64, error) {
+	var db = slf.build()
+	var records = make([]*Faq, 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)
+	}
+
+	err := db.Find(&records).Error
+	return records, total, err
+}
\ No newline at end of file
diff --git a/model/priorityLevel.go b/model/priorityLevel.go
new file mode 100644
index 0000000..be5b783
--- /dev/null
+++ b/model/priorityLevel.go
@@ -0,0 +1,114 @@
+package model
+
+import (
+	"aps_crm/constvar"
+	"aps_crm/pkg/mysqlx"
+	"errors"
+	"fmt"
+	"gorm.io/gorm"
+)
+
+type (
+	// PriorityLevel 浼樺厛绾у埆
+	PriorityLevel struct {
+		Id   int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name   string    `json:"name" gorm:"column:name"`
+	}
+
+	// PriorityLevelSearch 浼樺厛绾у埆鎼滅储鏉′欢
+	PriorityLevelSearch struct {
+		PriorityLevel
+		Orm *gorm.DB
+        QueryClass  constvar.PriorityLevelQueryClass
+        KeywordType constvar.PriorityLevelKeywordType
+        Keyword     string
+        PageNum  int
+        PageSize int
+	}
+)
+
+func (PriorityLevel) TableName() string {
+	return "priority_level"
+}
+
+func NewPriorityLevelSearch() *PriorityLevelSearch {
+	return &PriorityLevelSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *PriorityLevelSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&PriorityLevel{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+
+	return db
+}
+
+func (slf *PriorityLevelSearch) Create(record *PriorityLevel) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *PriorityLevelSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&PriorityLevel{}).Error
+}
+
+func (slf *PriorityLevelSearch) Update(record *PriorityLevel) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *PriorityLevelSearch) FindAll() ([]*PriorityLevel, error) {
+	var db = slf.build()
+	var record = make([]*PriorityLevel, 0)
+	err := db.Find(&record).Error
+	return record, err
+}
+
+func (slf *PriorityLevelSearch) SetId(id int) *PriorityLevelSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *PriorityLevelSearch) First() (*PriorityLevel, error) {
+	var db = slf.build()
+	var record = new(PriorityLevel)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *PriorityLevelSearch) Updates(values interface{}) error {
+	var db = slf.build()
+	return db.Updates(values).Error
+}
+
+func (slf *PriorityLevelSearch) Save(record *PriorityLevel) error {
+	if record.Id == 0 {
+		return errors.New("id涓虹┖")
+	}
+	var db = slf.build()
+
+	if err := db.Save(record).Error; err != nil {
+		return fmt.Errorf("save err: %v, record: %+v", err, record)
+	}
+
+	return nil
+}
+
+func (slf *PriorityLevelSearch) Find() ([]*PriorityLevel, int64, error) {
+	var db = slf.build()
+	var records = make([]*PriorityLevel, 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)
+	}
+
+	err := db.Find(&records).Error
+	return records, total, err
+}
\ No newline at end of file
diff --git a/model/request/faq.go b/model/request/faq.go
new file mode 100644
index 0000000..a7d18b7
--- /dev/null
+++ b/model/request/faq.go
@@ -0,0 +1,22 @@
+package request
+
+import (
+    "aps_crm/constvar"
+    "aps_crm/model"
+)
+
+type AddFaq struct {
+	model.Faq
+}
+
+type UpdateFaq struct {
+	Id int `json:"id"`
+	model.Faq
+}
+
+type GetFaqList struct {
+	PageInfo
+	QueryClass  constvar.FaqQueryClass  `json:"queryClass"`
+	KeywordType constvar.FaqKeywordType `json:"keywordType"`
+	Keyword     string                           `json:"keyword"`
+}
diff --git a/model/request/priorityLevel.go b/model/request/priorityLevel.go
new file mode 100644
index 0000000..64701ba
--- /dev/null
+++ b/model/request/priorityLevel.go
@@ -0,0 +1,22 @@
+package request
+
+import (
+    "aps_crm/constvar"
+    "aps_crm/model"
+)
+
+type AddPriorityLevel struct {
+	model.PriorityLevel
+}
+
+type UpdatePriorityLevel struct {
+	Id int `json:"id"`
+	model.PriorityLevel
+}
+
+type GetPriorityLevelList struct {
+	PageInfo
+	QueryClass  constvar.PriorityLevelQueryClass  `json:"queryClass"`
+	KeywordType constvar.PriorityLevelKeywordType `json:"keywordType"`
+	Keyword     string                           `json:"keyword"`
+}
diff --git a/model/request/serviceOrder.go b/model/request/serviceOrder.go
new file mode 100644
index 0000000..d89e900
--- /dev/null
+++ b/model/request/serviceOrder.go
@@ -0,0 +1,22 @@
+package request
+
+import (
+    "aps_crm/constvar"
+    "aps_crm/model"
+)
+
+type AddServiceOrder struct {
+	model.ServiceOrder
+}
+
+type UpdateServiceOrder struct {
+	Id int `json:"id"`
+	model.ServiceOrder
+}
+
+type GetServiceOrderList struct {
+	PageInfo
+	QueryClass  constvar.ServiceOrderQueryClass  `json:"queryClass"`
+	KeywordType constvar.ServiceOrderKeywordType `json:"keywordType"`
+	Keyword     string                           `json:"keyword"`
+}
diff --git a/model/request/serviceType.go b/model/request/serviceType.go
new file mode 100644
index 0000000..2eee204
--- /dev/null
+++ b/model/request/serviceType.go
@@ -0,0 +1,22 @@
+package request
+
+import (
+    "aps_crm/constvar"
+    "aps_crm/model"
+)
+
+type AddServiceType struct {
+	model.ServiceType
+}
+
+type UpdateServiceType struct {
+	Id int `json:"id"`
+	model.ServiceType
+}
+
+type GetServiceTypeList struct {
+	PageInfo
+	QueryClass  constvar.ServiceTypeQueryClass  `json:"queryClass"`
+	KeywordType constvar.ServiceTypeKeywordType `json:"keywordType"`
+	Keyword     string                           `json:"keyword"`
+}
diff --git a/model/request/severity.go b/model/request/severity.go
new file mode 100644
index 0000000..70c5eb7
--- /dev/null
+++ b/model/request/severity.go
@@ -0,0 +1,22 @@
+package request
+
+import (
+    "aps_crm/constvar"
+    "aps_crm/model"
+)
+
+type AddSeverity struct {
+	model.Severity
+}
+
+type UpdateSeverity struct {
+	Id int `json:"id"`
+	model.Severity
+}
+
+type GetSeverityList struct {
+	PageInfo
+	QueryClass  constvar.SeverityQueryClass  `json:"queryClass"`
+	KeywordType constvar.SeverityKeywordType `json:"keywordType"`
+	Keyword     string                           `json:"keyword"`
+}
diff --git a/model/serviceOrder.go b/model/serviceOrder.go
new file mode 100644
index 0000000..d8de6eb
--- /dev/null
+++ b/model/serviceOrder.go
@@ -0,0 +1,163 @@
+package model
+
+import (
+	"aps_crm/constvar"
+	"aps_crm/pkg/mysqlx"
+	"errors"
+	"fmt"
+	"gorm.io/gorm"
+)
+
+type (
+	// ServiceOrder 鏈嶅姟鍗�
+	ServiceOrder struct {
+		Id              int           `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		ServiceNumber   string        `gorm:"service_number" json:"service_number"` // 鏈嶅姟鍗曠紪鍙�
+		ClientId        int           `gorm:"client_id" json:"client_id"`           // 瀹㈡埛id
+		Client          Client        `gorm:"foreignKey:ClientId"`
+		ContractId      int           `gorm:"contract_id" json:"contract_id"` // 鍚堝悓id
+		Contract        Contract      `gorm:"foreignKey:ContractId"`
+		OrderId         int           `gorm:"order_id" json:"order_id"` // 閿�鍞鍗昳d
+		Order           OrderManage   `gorm:"foreignKey:OrderId"`
+		Subject         string        `gorm:"subject" json:"subject"`       // 涓婚
+		ProductId       int           `gorm:"product_id" json:"product_id"` // 浜у搧id
+		Product         Product       `gorm:"foreignKey:ProductId"`
+		ServiceTypeId   int           `gorm:"service_type_id" json:"service_type_id"` // 鏈嶅姟鏂瑰紡
+		ServiceType     ServiceType   `gorm:"foreignKey:ServiceTypeId"`
+		ServiceManId    int           `gorm:"service_man_id" json:"service_man_id"`       // 鏈嶅姟浜哄憳
+		LinkmanId       int           `gorm:"linkman_id" json:"linkman_id"`               // 鑱旂郴浜篿d
+		Address         string        `gorm:"address" json:"address"`                     // 涓婇棬鍦板潃
+		PriorityLevelId int           `gorm:"priority_level_id" json:"priority_level_id"` // 浼樺厛绾у埆
+		PriorityLevel   PriorityLevel `gorm:"foreignKey:PriorityLevelId"`
+		AppointmentTime string        `gorm:"appointment_time" json:"appointment_time"` // 棰勭害涓婇棬鏃堕棿
+		SaleLeads       int           `gorm:"sale_leads" json:"sale_leads"`             // 閿�鍞満浼歩d
+		SeverityId      int           `gorm:"severity_id" json:"severity"`              // 涓ラ噸绋嬪害
+		Severity        Severity      `gorm:"foreignKey:SeverityId"`
+		Status          int           `gorm:"status" json:"status"`               // 澶勭悊鐘舵��
+		ExpectTime      string        `gorm:"expect_time" json:"expect_time"`     // 甯屾湜澶勭悊鏃堕棿
+		RealTime        string        `gorm:"real_time" json:"real_time"`         // 瀹為檯澶勭悊鏃堕棿
+		CarFare         float64       `gorm:"car_fare" json:"car_fare"`           // 浜ら�氳垂
+		ChargeAmount    float64       `gorm:"charge_amount" json:"charge_amount"` // 鏀惰垂閲戦
+		TimeSpentId     int           `gorm:"time_spent_id" json:"time_spent_id"` // 鑺辫垂鏃堕棿
+		FaqId           int           `gorm:"problem_id" json:"problem_id"`       // 甯歌闂id
+		Faq             Faq           `gorm:"foreignKey:FaqId"`
+		ProblemDesc     string        `gorm:"problem_desc" json:"problem_desc"`       // 闂鎻忚堪
+		Solution        string        `gorm:"solution" json:"solution"`               // 瑙e喅鏂规硶
+		SolutionRemark  string        `gorm:"solution_remark" json:"solution_remark"` // 鍐呴儴澶囨敞
+		Remark          string        `gorm:"remark" json:"remark"`                   // 澶囨敞
+	}
+
+	// ServiceOrderSearch 鏈嶅姟鍗曟悳绱㈡潯浠�
+	ServiceOrderSearch struct {
+		ServiceOrder
+		Orm         *gorm.DB
+		QueryClass  constvar.ServiceOrderQueryClass
+		KeywordType constvar.ServiceOrderKeywordType
+		Keyword     string
+		PageNum     int
+		PageSize    int
+		Preload     bool
+	}
+)
+
+func (ServiceOrder) TableName() string {
+	return "service_order"
+}
+
+func NewServiceOrderSearch() *ServiceOrderSearch {
+	return &ServiceOrderSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *ServiceOrderSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&ServiceOrder{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+	if slf.Preload {
+		db = db.Model(&ServiceOrder{}).
+			Preload("Client").
+			Preload("Contract").
+			Preload("OrderManage").
+			Preload("Product").
+			Preload("ServiceType").
+			Preload("PriorityLevel").
+			Preload("Severity").
+			Preload("Faq")
+	}
+
+	return db
+}
+
+func (slf *ServiceOrderSearch) Create(record *ServiceOrder) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *ServiceOrderSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&ServiceOrder{}).Error
+}
+
+func (slf *ServiceOrderSearch) Update(record *ServiceOrder) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *ServiceOrderSearch) FindAll() ([]*ServiceOrder, error) {
+	var db = slf.build()
+	var record = make([]*ServiceOrder, 0)
+	err := db.Find(&record).Error
+	return record, err
+}
+
+func (slf *ServiceOrderSearch) SetId(id int) *ServiceOrderSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *ServiceOrderSearch) SetPreload(preload bool) *ServiceOrderSearch {
+	slf.Preload = preload
+	return slf
+}
+
+func (slf *ServiceOrderSearch) First() (*ServiceOrder, error) {
+	var db = slf.build()
+	var record = new(ServiceOrder)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *ServiceOrderSearch) Updates(values interface{}) error {
+	var db = slf.build()
+	return db.Updates(values).Error
+}
+
+func (slf *ServiceOrderSearch) Save(record *ServiceOrder) error {
+	if record.Id == 0 {
+		return errors.New("id涓虹┖")
+	}
+	var db = slf.build()
+
+	if err := db.Save(record).Error; err != nil {
+		return fmt.Errorf("save err: %v, record: %+v", err, record)
+	}
+
+	return nil
+}
+
+func (slf *ServiceOrderSearch) Find() ([]*ServiceOrder, int64, error) {
+	var db = slf.build()
+	var records = make([]*ServiceOrder, 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)
+	}
+
+	err := db.Find(&records).Error
+	return records, total, err
+}
diff --git a/model/serviceType.go b/model/serviceType.go
new file mode 100644
index 0000000..7e6f686
--- /dev/null
+++ b/model/serviceType.go
@@ -0,0 +1,114 @@
+package model
+
+import (
+	"aps_crm/constvar"
+	"aps_crm/pkg/mysqlx"
+	"errors"
+	"fmt"
+	"gorm.io/gorm"
+)
+
+type (
+	// ServiceType 鏈嶅姟绫诲瀷
+	ServiceType struct {
+		Id   int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name   string    `json:"name" gorm:"column:name"`
+	}
+
+	// ServiceTypeSearch 鏈嶅姟绫诲瀷鎼滅储鏉′欢
+	ServiceTypeSearch struct {
+		ServiceType
+		Orm *gorm.DB
+        QueryClass  constvar.ServiceTypeQueryClass
+        KeywordType constvar.ServiceTypeKeywordType
+        Keyword     string
+        PageNum  int
+        PageSize int
+	}
+)
+
+func (ServiceType) TableName() string {
+	return "service_type"
+}
+
+func NewServiceTypeSearch() *ServiceTypeSearch {
+	return &ServiceTypeSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *ServiceTypeSearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&ServiceType{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+
+	return db
+}
+
+func (slf *ServiceTypeSearch) Create(record *ServiceType) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *ServiceTypeSearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&ServiceType{}).Error
+}
+
+func (slf *ServiceTypeSearch) Update(record *ServiceType) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *ServiceTypeSearch) FindAll() ([]*ServiceType, error) {
+	var db = slf.build()
+	var record = make([]*ServiceType, 0)
+	err := db.Find(&record).Error
+	return record, err
+}
+
+func (slf *ServiceTypeSearch) SetId(id int) *ServiceTypeSearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *ServiceTypeSearch) First() (*ServiceType, error) {
+	var db = slf.build()
+	var record = new(ServiceType)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *ServiceTypeSearch) Updates(values interface{}) error {
+	var db = slf.build()
+	return db.Updates(values).Error
+}
+
+func (slf *ServiceTypeSearch) Save(record *ServiceType) error {
+	if record.Id == 0 {
+		return errors.New("id涓虹┖")
+	}
+	var db = slf.build()
+
+	if err := db.Save(record).Error; err != nil {
+		return fmt.Errorf("save err: %v, record: %+v", err, record)
+	}
+
+	return nil
+}
+
+func (slf *ServiceTypeSearch) Find() ([]*ServiceType, int64, error) {
+	var db = slf.build()
+	var records = make([]*ServiceType, 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)
+	}
+
+	err := db.Find(&records).Error
+	return records, total, err
+}
\ No newline at end of file
diff --git a/model/severity.go b/model/severity.go
new file mode 100644
index 0000000..0fb1bc0
--- /dev/null
+++ b/model/severity.go
@@ -0,0 +1,114 @@
+package model
+
+import (
+	"aps_crm/constvar"
+	"aps_crm/pkg/mysqlx"
+	"errors"
+	"fmt"
+	"gorm.io/gorm"
+)
+
+type (
+	// Severity 涓ラ噸绋嬪害
+	Severity struct {
+		Id   int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		Name   string    `json:"name" gorm:"column:name"`
+	}
+
+	// SeveritySearch 涓ラ噸绋嬪害鎼滅储鏉′欢
+	SeveritySearch struct {
+		Severity
+		Orm *gorm.DB
+        QueryClass  constvar.SeverityQueryClass
+        KeywordType constvar.SeverityKeywordType
+        Keyword     string
+        PageNum  int
+        PageSize int
+	}
+)
+
+func (Severity) TableName() string {
+	return "severity"
+}
+
+func NewSeveritySearch() *SeveritySearch {
+	return &SeveritySearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (slf *SeveritySearch) build() *gorm.DB {
+	var db = slf.Orm.Model(&Severity{})
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
+	}
+
+	return db
+}
+
+func (slf *SeveritySearch) Create(record *Severity) error {
+	var db = slf.build()
+	return db.Create(record).Error
+}
+
+func (slf *SeveritySearch) Delete() error {
+	var db = slf.build()
+	return db.Delete(&Severity{}).Error
+}
+
+func (slf *SeveritySearch) Update(record *Severity) error {
+	var db = slf.build()
+	return db.Updates(record).Error
+}
+
+func (slf *SeveritySearch) FindAll() ([]*Severity, error) {
+	var db = slf.build()
+	var record = make([]*Severity, 0)
+	err := db.Find(&record).Error
+	return record, err
+}
+
+func (slf *SeveritySearch) SetId(id int) *SeveritySearch {
+	slf.Id = id
+	return slf
+}
+
+func (slf *SeveritySearch) First() (*Severity, error) {
+	var db = slf.build()
+	var record = new(Severity)
+	err := db.First(record).Error
+	return record, err
+}
+
+func (slf *SeveritySearch) Updates(values interface{}) error {
+	var db = slf.build()
+	return db.Updates(values).Error
+}
+
+func (slf *SeveritySearch) Save(record *Severity) error {
+	if record.Id == 0 {
+		return errors.New("id涓虹┖")
+	}
+	var db = slf.build()
+
+	if err := db.Save(record).Error; err != nil {
+		return fmt.Errorf("save err: %v, record: %+v", err, record)
+	}
+
+	return nil
+}
+
+func (slf *SeveritySearch) Find() ([]*Severity, int64, error) {
+	var db = slf.build()
+	var records = make([]*Severity, 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)
+	}
+
+	err := db.Find(&records).Error
+	return records, total, err
+}
\ No newline at end of file
diff --git a/router/faq.go b/router/faq.go
new file mode 100644
index 0000000..7d13fd1
--- /dev/null
+++ b/router/faq.go
@@ -0,0 +1,17 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+func InitFaqRouter(router *gin.RouterGroup) {
+	FaqRouter := router.Group("faq")
+	FaqApi := v1.FaqApi{}
+	{
+		FaqRouter.POST("add", FaqApi.Add)             // 娣诲姞甯歌闂
+		FaqRouter.DELETE("delete/:id", FaqApi.Delete) // 鍒犻櫎甯歌闂
+		FaqRouter.PUT("update", FaqApi.Update)        // 鏇存柊甯歌闂
+		FaqRouter.GET("list", FaqApi.List)            // 鑾峰彇甯歌闂鍒楄〃
+	}
+}
diff --git a/router/index.go b/router/index.go
index a05ce9f..506b4ab 100644
--- a/router/index.go
+++ b/router/index.go
@@ -159,6 +159,11 @@
 		routerGroup.InitQuotationStatusRouter(PrivateGroup)
 		routerGroup.InitCurrencyRouter(PrivateGroup)
 		routerGroup.InitAssignRouter(PrivateGroup)
+		InitServiceOrderRouter(PrivateGroup)
+		InitFaqRouter(PrivateGroup)
+		InitPriorityLevelRouter(PrivateGroup)
+		InitServiceTypeRouter(PrivateGroup)
+		InitSeverityRouter(PrivateGroup)
 	}
 	return Router
 }
diff --git a/router/priorityLevel.go b/router/priorityLevel.go
new file mode 100644
index 0000000..1adf38d
--- /dev/null
+++ b/router/priorityLevel.go
@@ -0,0 +1,17 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+func InitPriorityLevelRouter(router *gin.RouterGroup) {
+	PriorityLevelRouter := router.Group("priorityLevel")
+	PriorityLevelApi := v1.PriorityLevelApi{}
+	{
+		PriorityLevelRouter.POST("add", PriorityLevelApi.Add)             // 娣诲姞浼樺厛绾у埆
+		PriorityLevelRouter.DELETE("delete/:id", PriorityLevelApi.Delete) // 鍒犻櫎浼樺厛绾у埆
+		PriorityLevelRouter.PUT("update", PriorityLevelApi.Update)        // 鏇存柊浼樺厛绾у埆
+		PriorityLevelRouter.GET("list", PriorityLevelApi.List)            // 鑾峰彇浼樺厛绾у埆鍒楄〃
+	}
+}
diff --git a/router/serviceOrder.go b/router/serviceOrder.go
new file mode 100644
index 0000000..8efdc84
--- /dev/null
+++ b/router/serviceOrder.go
@@ -0,0 +1,17 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+func InitServiceOrderRouter(router *gin.RouterGroup) {
+	ServiceOrderRouter := router.Group("serviceOrder")
+	ServiceOrderApi := v1.ServiceOrderApi{}
+	{
+		ServiceOrderRouter.POST("add", ServiceOrderApi.Add)             // 娣诲姞鏈嶅姟鍗�
+		ServiceOrderRouter.DELETE("delete/:id", ServiceOrderApi.Delete) // 鍒犻櫎鏈嶅姟鍗�
+		ServiceOrderRouter.PUT("update", ServiceOrderApi.Update)        // 鏇存柊鏈嶅姟鍗�
+		ServiceOrderRouter.GET("list", ServiceOrderApi.List)            // 鑾峰彇鏈嶅姟鍗曞垪琛�
+	}
+}
diff --git a/router/serviceType.go b/router/serviceType.go
new file mode 100644
index 0000000..e373530
--- /dev/null
+++ b/router/serviceType.go
@@ -0,0 +1,17 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+func InitServiceTypeRouter(router *gin.RouterGroup) {
+	ServiceTypeRouter := router.Group("serviceType")
+	ServiceTypeApi := v1.ServiceTypeApi{}
+	{
+		ServiceTypeRouter.POST("add", ServiceTypeApi.Add)             // 娣诲姞鏈嶅姟绫诲瀷
+		ServiceTypeRouter.DELETE("delete/:id", ServiceTypeApi.Delete) // 鍒犻櫎鏈嶅姟绫诲瀷
+		ServiceTypeRouter.PUT("update", ServiceTypeApi.Update)        // 鏇存柊鏈嶅姟绫诲瀷
+		ServiceTypeRouter.GET("list", ServiceTypeApi.List)            // 鑾峰彇鏈嶅姟绫诲瀷鍒楄〃
+	}
+}
diff --git a/router/severity.go b/router/severity.go
new file mode 100644
index 0000000..78e6dfc
--- /dev/null
+++ b/router/severity.go
@@ -0,0 +1,17 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+func InitSeverityRouter(router *gin.RouterGroup) {
+	SeverityRouter := router.Group("severity")
+	SeverityApi := v1.SeverityApi{}
+	{
+		SeverityRouter.POST("add", SeverityApi.Add)             // 娣诲姞涓ラ噸绋嬪害
+		SeverityRouter.DELETE("delete/:id", SeverityApi.Delete) // 鍒犻櫎涓ラ噸绋嬪害
+		SeverityRouter.PUT("update", SeverityApi.Update)        // 鏇存柊涓ラ噸绋嬪害
+		SeverityRouter.GET("list", SeverityApi.List)            // 鑾峰彇涓ラ噸绋嬪害鍒楄〃
+	}
+}
diff --git a/service/faq.go b/service/faq.go
new file mode 100644
index 0000000..5374143
--- /dev/null
+++ b/service/faq.go
@@ -0,0 +1,66 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/ecode"
+)
+
+type FaqService struct{}
+
+func NewFaqService() FaqService {
+	return FaqService{}
+}
+
+func (FaqService) AddFaq(Faq *model.Faq) int {
+	err := model.NewFaqSearch().Create(Faq)
+	if err != nil {
+		return ecode.DBErr
+	}
+
+	return ecode.OK
+}
+
+func (FaqService) DeleteFaq(id int) int {
+	err := model.NewFaqSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.DBErr
+	}
+	return ecode.OK
+}
+
+func (FaqService) GetFaqList() ([]*model.Faq, int64, int) {
+	list, total, err := model.NewFaqSearch().Find()
+	if err != nil {
+		return nil, 0, ecode.DBErr
+	}
+
+	return list, total, ecode.OK
+}
+
+func (FaqService) UpdateFaqs(Faqs []*request.UpdateFaq) int {
+	for _, v := range Faqs {
+		// check Faq exist
+		_, err := model.NewFaqSearch().SetId(v.Id).First()
+		if err != nil {
+			return ecode.DBErr
+		}
+
+		err = model.NewFaqSearch().SetId(v.Id).Updates(map[string]interface{}{
+
+		})
+		if err != nil {
+			return ecode.DBErr
+		}
+	}
+
+	return ecode.OK
+}
+
+func (FaqService) UpdateFaq(faq *model.Faq) int {
+		err := model.NewFaqSearch().Save(faq)
+		if err != nil {
+			return ecode.DBErr
+		}
+	return ecode.OK
+}
diff --git a/service/priorityLevel.go b/service/priorityLevel.go
new file mode 100644
index 0000000..ad487a2
--- /dev/null
+++ b/service/priorityLevel.go
@@ -0,0 +1,66 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/ecode"
+)
+
+type PriorityLevelService struct{}
+
+func NewPriorityLevelService() PriorityLevelService {
+	return PriorityLevelService{}
+}
+
+func (PriorityLevelService) AddPriorityLevel(PriorityLevel *model.PriorityLevel) int {
+	err := model.NewPriorityLevelSearch().Create(PriorityLevel)
+	if err != nil {
+		return ecode.DBErr
+	}
+
+	return ecode.OK
+}
+
+func (PriorityLevelService) DeletePriorityLevel(id int) int {
+	err := model.NewPriorityLevelSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.DBErr
+	}
+	return ecode.OK
+}
+
+func (PriorityLevelService) GetPriorityLevelList() ([]*model.PriorityLevel, int64, int) {
+	list, total, err := model.NewPriorityLevelSearch().Find()
+	if err != nil {
+		return nil, 0, ecode.DBErr
+	}
+
+	return list, total, ecode.OK
+}
+
+func (PriorityLevelService) UpdatePriorityLevels(PriorityLevels []*request.UpdatePriorityLevel) int {
+	for _, v := range PriorityLevels {
+		// check PriorityLevel exist
+		_, err := model.NewPriorityLevelSearch().SetId(v.Id).First()
+		if err != nil {
+			return ecode.DBErr
+		}
+
+		err = model.NewPriorityLevelSearch().SetId(v.Id).Updates(map[string]interface{}{
+
+		})
+		if err != nil {
+			return ecode.DBErr
+		}
+	}
+
+	return ecode.OK
+}
+
+func (PriorityLevelService) UpdatePriorityLevel(priorityLevel *model.PriorityLevel) int {
+		err := model.NewPriorityLevelSearch().Save(priorityLevel)
+		if err != nil {
+			return ecode.DBErr
+		}
+	return ecode.OK
+}
diff --git a/service/serviceOrder.go b/service/serviceOrder.go
new file mode 100644
index 0000000..2c2e80d
--- /dev/null
+++ b/service/serviceOrder.go
@@ -0,0 +1,66 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/ecode"
+)
+
+type ServiceOrderService struct{}
+
+func NewServiceOrderService() ServiceOrderService {
+	return ServiceOrderService{}
+}
+
+func (ServiceOrderService) AddServiceOrder(ServiceOrder *model.ServiceOrder) int {
+	err := model.NewServiceOrderSearch().Create(ServiceOrder)
+	if err != nil {
+		return ecode.DBErr
+	}
+
+	return ecode.OK
+}
+
+func (ServiceOrderService) DeleteServiceOrder(id int) int {
+	err := model.NewServiceOrderSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.DBErr
+	}
+	return ecode.OK
+}
+
+func (ServiceOrderService) GetServiceOrderList() ([]*model.ServiceOrder, int64, int) {
+	list, total, err := model.NewServiceOrderSearch().Find()
+	if err != nil {
+		return nil, 0, ecode.DBErr
+	}
+
+	return list, total, ecode.OK
+}
+
+func (ServiceOrderService) UpdateServiceOrders(ServiceOrders []*request.UpdateServiceOrder) int {
+	for _, v := range ServiceOrders {
+		// check ServiceOrder exist
+		_, err := model.NewServiceOrderSearch().SetId(v.Id).First()
+		if err != nil {
+			return ecode.DBErr
+		}
+
+		err = model.NewServiceOrderSearch().SetId(v.Id).Updates(map[string]interface{}{
+
+		})
+		if err != nil {
+			return ecode.DBErr
+		}
+	}
+
+	return ecode.OK
+}
+
+func (ServiceOrderService) UpdateServiceOrder(serviceOrder *model.ServiceOrder) int {
+		err := model.NewServiceOrderSearch().Save(serviceOrder)
+		if err != nil {
+			return ecode.DBErr
+		}
+	return ecode.OK
+}
diff --git a/service/serviceType.go b/service/serviceType.go
new file mode 100644
index 0000000..e20b1f4
--- /dev/null
+++ b/service/serviceType.go
@@ -0,0 +1,66 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/ecode"
+)
+
+type ServiceTypeService struct{}
+
+func NewServiceTypeService() ServiceTypeService {
+	return ServiceTypeService{}
+}
+
+func (ServiceTypeService) AddServiceType(ServiceType *model.ServiceType) int {
+	err := model.NewServiceTypeSearch().Create(ServiceType)
+	if err != nil {
+		return ecode.DBErr
+	}
+
+	return ecode.OK
+}
+
+func (ServiceTypeService) DeleteServiceType(id int) int {
+	err := model.NewServiceTypeSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.DBErr
+	}
+	return ecode.OK
+}
+
+func (ServiceTypeService) GetServiceTypeList() ([]*model.ServiceType, int64, int) {
+	list, total, err := model.NewServiceTypeSearch().Find()
+	if err != nil {
+		return nil, 0, ecode.DBErr
+	}
+
+	return list, total, ecode.OK
+}
+
+func (ServiceTypeService) UpdateServiceTypes(ServiceTypes []*request.UpdateServiceType) int {
+	for _, v := range ServiceTypes {
+		// check ServiceType exist
+		_, err := model.NewServiceTypeSearch().SetId(v.Id).First()
+		if err != nil {
+			return ecode.DBErr
+		}
+
+		err = model.NewServiceTypeSearch().SetId(v.Id).Updates(map[string]interface{}{
+
+		})
+		if err != nil {
+			return ecode.DBErr
+		}
+	}
+
+	return ecode.OK
+}
+
+func (ServiceTypeService) UpdateServiceType(serviceType *model.ServiceType) int {
+		err := model.NewServiceTypeSearch().Save(serviceType)
+		if err != nil {
+			return ecode.DBErr
+		}
+	return ecode.OK
+}
diff --git a/service/severity.go b/service/severity.go
new file mode 100644
index 0000000..d2562ec
--- /dev/null
+++ b/service/severity.go
@@ -0,0 +1,66 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/pkg/ecode"
+)
+
+type SeverityService struct{}
+
+func NewSeverityService() SeverityService {
+	return SeverityService{}
+}
+
+func (SeverityService) AddSeverity(Severity *model.Severity) int {
+	err := model.NewSeveritySearch().Create(Severity)
+	if err != nil {
+		return ecode.DBErr
+	}
+
+	return ecode.OK
+}
+
+func (SeverityService) DeleteSeverity(id int) int {
+	err := model.NewSeveritySearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.DBErr
+	}
+	return ecode.OK
+}
+
+func (SeverityService) GetSeverityList() ([]*model.Severity, int64, int) {
+	list, total, err := model.NewSeveritySearch().Find()
+	if err != nil {
+		return nil, 0, ecode.DBErr
+	}
+
+	return list, total, ecode.OK
+}
+
+func (SeverityService) UpdateSeveritys(Severitys []*request.UpdateSeverity) int {
+	for _, v := range Severitys {
+		// check Severity exist
+		_, err := model.NewSeveritySearch().SetId(v.Id).First()
+		if err != nil {
+			return ecode.DBErr
+		}
+
+		err = model.NewSeveritySearch().SetId(v.Id).Updates(map[string]interface{}{
+
+		})
+		if err != nil {
+			return ecode.DBErr
+		}
+	}
+
+	return ecode.OK
+}
+
+func (SeverityService) UpdateSeverity(severity *model.Severity) int {
+		err := model.NewSeveritySearch().Save(severity)
+		if err != nil {
+			return ecode.DBErr
+		}
+	return ecode.OK
+}

--
Gitblit v1.8.0