From 6e8718ed56b53419c946102bb4e20a978e32e27c Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期四, 13 七月 2023 15:13:10 +0800
Subject: [PATCH] add

---
 api/v1/index.go                       |   74 ++--
 pkg/ecode/code.go                     |    7 
 model/customerServiceSheet.go         |   58 +++
 docs/swagger.yaml                     |   96 ++++++
 docs/docs.go                          |  150 ++++++++++
 docs/swagger.json                     |  150 ++++++++++
 model/response/response.go            |    4 
 model/serviceFollowup.go              |    3 
 api/v1/customerServiceSheet.go        |  141 +++++++++
 service/index.go                      |    1 
 model/index.go                        |    1 
 router/customerServiceSheet.go        |   19 +
 logs/aps-admin.err.log                |    1 
 router/index.go                       |   74 ++--
 api/v1/serviceFollowup.go             |    4 
 model/request/customerServiceSheet.go |   18 +
 service/customerServiceSheet.go       |   54 +++
 17 files changed, 779 insertions(+), 76 deletions(-)

diff --git a/api/v1/customerServiceSheet.go b/api/v1/customerServiceSheet.go
new file mode 100644
index 0000000..730f157
--- /dev/null
+++ b/api/v1/customerServiceSheet.go
@@ -0,0 +1,141 @@
+package v1
+
+import (
+	"aps_crm/model"
+	"aps_crm/model/request"
+	"aps_crm/model/response"
+	"aps_crm/pkg/contextx"
+	"aps_crm/pkg/ecode"
+	"github.com/gin-gonic/gin"
+	"strconv"
+)
+
+type CustomerServiceSheetApi struct{}
+
+// Add
+//
+//	@Tags		CustomerServiceSheet
+//	@Summary	娣诲姞瀹㈡湇鍗�
+//	@Produce	application/json
+//	@Param		object	body		request.AddCustomerServiceSheet	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
+//	@Router		/api/customerServiceSheet/add [post]
+func (s *CustomerServiceSheetApi) Add(c *gin.Context) {
+	var params request.AddCustomerServiceSheet
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode, customerServiceSheet := checkCustomerServiceSheetParams(params.CustomerServiceSheet)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	errCode = customerServiceSheetService.AddCustomerServiceSheet(&customerServiceSheet)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Delete
+//
+//	@Tags		CustomerServiceSheet
+//	@Summary	鍒犻櫎瀹㈡湇鍗�
+//	@Produce	application/json
+//	@Param		id	path		int	true	"鏌ヨ鍙傛暟"
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/customerServiceSheet/delete/{id} [delete]
+func (s *CustomerServiceSheetApi) Delete(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	id, _ := strconv.Atoi(c.Param("id"))
+	errCode := customerServiceSheetService.DeleteCustomerServiceSheet(id)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// Update
+//
+//	@Tags		CustomerServiceSheet
+//	@Summary	鏇存柊瀹㈡湇鍗�
+//	@Produce	application/json
+//	@Param		object	body		request.UpdateCustomerServiceSheet true	"鏌ヨ鍙傛暟"
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/customerServiceSheet/update/{id} [put]
+func (s *CustomerServiceSheetApi) Update(c *gin.Context) {
+	var params request.UpdateCustomerServiceSheet
+	ctx, ok := contextx.NewContext(c, &params)
+	if !ok {
+		return
+	}
+
+	errCode, customerServiceSheet := checkCustomerServiceSheetParams(params.CustomerServiceSheet)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	errCode = customerServiceSheetService.UpdateCustomerServiceSheet(&customerServiceSheet)
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.Ok()
+}
+
+// List
+//
+//	@Tags		CustomerServiceSheet
+//	@Summary	鑾峰彇瀹㈡湇鍗曞垪琛�
+//	@Produce	application/json
+//	@Success	200	{object}	contextx.Response{}
+//	@Router		/api/customerServiceSheet/list [get]
+func (s *CustomerServiceSheetApi) List(c *gin.Context) {
+	ctx, ok := contextx.NewContext(c, nil)
+	if !ok {
+		return
+	}
+
+	customerServiceSheetList, errCode := customerServiceSheetService.GetCustomerServiceSheetList()
+	if errCode != ecode.OK {
+		ctx.Fail(errCode)
+		return
+	}
+
+	ctx.OkWithDetailed(response.CustomerServiceSheetResponse{
+		List: customerServiceSheetList,
+	})
+}
+
+// checkCustomerServiceSheetParams
+func checkCustomerServiceSheetParams(customerServiceSheet request.CustomerServiceSheet) (errCode int, newCustomerServiceSheet model.CustomerServiceSheet) {
+	if customerServiceSheet.Number == "" {
+		return ecode.InvalidParams, model.CustomerServiceSheet{}
+	}
+
+	if customerServiceSheet.MemberId == 0 {
+		return ecode.InvalidParams, model.CustomerServiceSheet{}
+	}
+
+	newCustomerServiceSheet = model.CustomerServiceSheet{
+		Number:       customerServiceSheet.Number,
+		MemberId:     customerServiceSheet.MemberId,
+		ServiceMode:  customerServiceSheet.ServiceMode,
+		Priority:     customerServiceSheet.Priority,
+		HandleStatus: customerServiceSheet.HandleStatus,
+	}
+	return ecode.OK, newCustomerServiceSheet
+}
diff --git a/api/v1/index.go b/api/v1/index.go
index 213ccca..a79e9fd 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -42,45 +42,47 @@
 	ServiceContractApi
 	OrderManageApi
 	ServiceFollowupApi
+	CustomerServiceSheetApi
 }
 
 var ApiGroup = new(Group)
 
 var (
-	userService              = service.ServiceGroup.UserService
-	jwtService               = service.ServiceGroup.JwtService
-	countryService           = service.ServiceGroup.CountryService
-	provinceService          = service.ServiceGroup.ProvinceService
-	cityService              = service.ServiceGroup.CityService
-	regionService            = service.ServiceGroup.RegionService
-	contactService           = service.ServiceGroup.ContactService
-	clientService            = service.ServiceGroup.ClientService
-	clientStatusService      = service.ServiceGroup.ClientStatusService
-	clientTypeService        = service.ServiceGroup.ClientTypeService
-	clientOriginService      = service.ServiceGroup.ClientOriginService
-	clientLevelService       = service.ServiceGroup.ClientLevelService
-	industryService          = service.ServiceGroup.IndustryService
-	enterpriseNatureService  = service.ServiceGroup.EnterpriseNatureService
-	registeredCapitalService = service.ServiceGroup.RegisteredCapitalService
-	enterpriseScaleService   = service.ServiceGroup.EnterpriseScaleService
-	salesLeadsService        = service.ServiceGroup.SalesLeadsService
-	salesSourcesService      = service.ServiceGroup.SalesSourcesService
-	followRecordService      = service.ServiceGroup.FollowRecordService
-	saleChanceService        = service.ServiceGroup.SaleChanceService
-	saleStageService         = service.ServiceGroup.SaleStageService
-	saleTypeService          = service.ServiceGroup.SaleTypeService
-	regularCustomersService  = service.ServiceGroup.RegularCustomersService
-	possibilityService       = service.ServiceGroup.PossibilityService
-	statusService            = service.ServiceGroup.StatusService
-	quotationService         = service.ServiceGroup.QuotationService
-	masterOrderService       = service.ServiceGroup.MasterOrderService
-	subOrderService          = service.ServiceGroup.SubOrderService
-	salesDetailsService      = service.ServiceGroup.SalesDetailsService
-	salesReturnService       = service.ServiceGroup.SalesReturnService
-	salesRefundService       = service.ServiceGroup.SalesRefundService
-	contractService          = service.ServiceGroup.ContractService
-	planService              = service.ServiceGroup.PlanService
-	serviceContractService   = service.ServiceGroup.SContractService
-	orderManageService       = service.ServiceGroup.OrderManageService
-	serviceFollowupService   = service.ServiceGroup.FollowupService
+	userService                 = service.ServiceGroup.UserService
+	jwtService                  = service.ServiceGroup.JwtService
+	countryService              = service.ServiceGroup.CountryService
+	provinceService             = service.ServiceGroup.ProvinceService
+	cityService                 = service.ServiceGroup.CityService
+	regionService               = service.ServiceGroup.RegionService
+	contactService              = service.ServiceGroup.ContactService
+	clientService               = service.ServiceGroup.ClientService
+	clientStatusService         = service.ServiceGroup.ClientStatusService
+	clientTypeService           = service.ServiceGroup.ClientTypeService
+	clientOriginService         = service.ServiceGroup.ClientOriginService
+	clientLevelService          = service.ServiceGroup.ClientLevelService
+	industryService             = service.ServiceGroup.IndustryService
+	enterpriseNatureService     = service.ServiceGroup.EnterpriseNatureService
+	registeredCapitalService    = service.ServiceGroup.RegisteredCapitalService
+	enterpriseScaleService      = service.ServiceGroup.EnterpriseScaleService
+	salesLeadsService           = service.ServiceGroup.SalesLeadsService
+	salesSourcesService         = service.ServiceGroup.SalesSourcesService
+	followRecordService         = service.ServiceGroup.FollowRecordService
+	saleChanceService           = service.ServiceGroup.SaleChanceService
+	saleStageService            = service.ServiceGroup.SaleStageService
+	saleTypeService             = service.ServiceGroup.SaleTypeService
+	regularCustomersService     = service.ServiceGroup.RegularCustomersService
+	possibilityService          = service.ServiceGroup.PossibilityService
+	statusService               = service.ServiceGroup.StatusService
+	quotationService            = service.ServiceGroup.QuotationService
+	masterOrderService          = service.ServiceGroup.MasterOrderService
+	subOrderService             = service.ServiceGroup.SubOrderService
+	salesDetailsService         = service.ServiceGroup.SalesDetailsService
+	salesReturnService          = service.ServiceGroup.SalesReturnService
+	salesRefundService          = service.ServiceGroup.SalesRefundService
+	contractService             = service.ServiceGroup.ContractService
+	planService                 = service.ServiceGroup.PlanService
+	serviceContractService      = service.ServiceGroup.SContractService
+	orderManageService          = service.ServiceGroup.OrderManageService
+	serviceFollowupService      = service.ServiceGroup.FollowupService
+	customerServiceSheetService = service.ServiceGroup.CustomerServiceSheetService
 )
diff --git a/api/v1/serviceFollowup.go b/api/v1/serviceFollowup.go
index 65f8f53..c1a50fe 100644
--- a/api/v1/serviceFollowup.go
+++ b/api/v1/serviceFollowup.go
@@ -71,8 +71,8 @@
 //	@Tags		ServiceFollowup
 //	@Summary	鏇存柊鏈嶅姟璺熻繘
 //	@Produce	application/json
-//	@Param		object	body		request.UpdateServiceFollowup true	"鏌ヨ鍙傛暟"
-//	@Success	200	{object}	contextx.Response{}
+//	@Param		object	body		request.UpdateServiceFollowup	true	"鏌ヨ鍙傛暟"
+//	@Success	200		{object}	contextx.Response{}
 //	@Router		/api/serviceFollowup/update [put]
 func (s *ServiceFollowupApi) Update(c *gin.Context) {
 	var params request.UpdateServiceFollowup
diff --git a/docs/docs.go b/docs/docs.go
index 3a20450..efd3896 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1192,6 +1192,113 @@
                 }
             }
         },
+        "/api/customerServiceSheet/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CustomerServiceSheet"
+                ],
+                "summary": "娣诲姞瀹㈡湇鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddCustomerServiceSheet"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/customerServiceSheet/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CustomerServiceSheet"
+                ],
+                "summary": "鍒犻櫎瀹㈡湇鍗�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/customerServiceSheet/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CustomerServiceSheet"
+                ],
+                "summary": "鑾峰彇瀹㈡湇鍗曞垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/customerServiceSheet/update/{id}": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CustomerServiceSheet"
+                ],
+                "summary": "鏇存柊瀹㈡湇鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateCustomerServiceSheet"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/enterpriseNature/add": {
             "post": {
                 "produces": [
@@ -5929,6 +6036,26 @@
                 }
             }
         },
+        "request.AddCustomerServiceSheet": {
+            "type": "object",
+            "properties": {
+                "handleStatus": {
+                    "type": "integer"
+                },
+                "memberId": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "priority": {
+                    "type": "integer"
+                },
+                "serviceMode": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.AddEnterpriseNature": {
             "type": "object",
             "required": [
@@ -7247,6 +7374,29 @@
                 }
             }
         },
+        "request.UpdateCustomerServiceSheet": {
+            "type": "object",
+            "properties": {
+                "handleStatus": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "memberId": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "priority": {
+                    "type": "integer"
+                },
+                "serviceMode": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.UpdateEnterpriseNature": {
             "type": "object",
             "required": [
diff --git a/docs/swagger.json b/docs/swagger.json
index 2f66cb6..9ec5ed2 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -1180,6 +1180,113 @@
                 }
             }
         },
+        "/api/customerServiceSheet/add": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CustomerServiceSheet"
+                ],
+                "summary": "娣诲姞瀹㈡湇鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AddCustomerServiceSheet"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/customerServiceSheet/delete/{id}": {
+            "delete": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CustomerServiceSheet"
+                ],
+                "summary": "鍒犻櫎瀹㈡湇鍗�",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/customerServiceSheet/list": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CustomerServiceSheet"
+                ],
+                "summary": "鑾峰彇瀹㈡湇鍗曞垪琛�",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api/customerServiceSheet/update/{id}": {
+            "put": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "CustomerServiceSheet"
+                ],
+                "summary": "鏇存柊瀹㈡湇鍗�",
+                "parameters": [
+                    {
+                        "description": "鏌ヨ鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.UpdateCustomerServiceSheet"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/contextx.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/api/enterpriseNature/add": {
             "post": {
                 "produces": [
@@ -5917,6 +6024,26 @@
                 }
             }
         },
+        "request.AddCustomerServiceSheet": {
+            "type": "object",
+            "properties": {
+                "handleStatus": {
+                    "type": "integer"
+                },
+                "memberId": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "priority": {
+                    "type": "integer"
+                },
+                "serviceMode": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.AddEnterpriseNature": {
             "type": "object",
             "required": [
@@ -7235,6 +7362,29 @@
                 }
             }
         },
+        "request.UpdateCustomerServiceSheet": {
+            "type": "object",
+            "properties": {
+                "handleStatus": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "memberId": {
+                    "type": "integer"
+                },
+                "number": {
+                    "type": "string"
+                },
+                "priority": {
+                    "type": "integer"
+                },
+                "serviceMode": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.UpdateEnterpriseNature": {
             "type": "object",
             "required": [
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 4a14862..3f09b42 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -984,6 +984,19 @@
         description: 鍥藉鍚嶇О
         type: string
     type: object
+  request.AddCustomerServiceSheet:
+    properties:
+      handleStatus:
+        type: integer
+      memberId:
+        type: integer
+      number:
+        type: string
+      priority:
+        type: integer
+      serviceMode:
+        type: integer
+    type: object
   request.AddEnterpriseNature:
     properties:
       name:
@@ -1876,6 +1889,21 @@
       name:
         description: 鍥藉鍚嶇О
         type: string
+    type: object
+  request.UpdateCustomerServiceSheet:
+    properties:
+      handleStatus:
+        type: integer
+      id:
+        type: integer
+      memberId:
+        type: integer
+      number:
+        type: string
+      priority:
+        type: integer
+      serviceMode:
+        type: integer
     type: object
   request.UpdateEnterpriseNature:
     properties:
@@ -3357,6 +3385,74 @@
       summary: 鏇存柊鍥藉
       tags:
       - Country
+  /api/customerServiceSheet/add:
+    post:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.AddCustomerServiceSheet'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 娣诲姞瀹㈡湇鍗�
+      tags:
+      - CustomerServiceSheet
+  /api/customerServiceSheet/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:
+      - CustomerServiceSheet
+  /api/customerServiceSheet/list:
+    get:
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鑾峰彇瀹㈡湇鍗曞垪琛�
+      tags:
+      - CustomerServiceSheet
+  /api/customerServiceSheet/update/{id}:
+    put:
+      parameters:
+      - description: 鏌ヨ鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.UpdateCustomerServiceSheet'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/contextx.Response'
+      summary: 鏇存柊瀹㈡湇鍗�
+      tags:
+      - CustomerServiceSheet
   /api/enterpriseNature/add:
     post:
       parameters:
diff --git a/logs/aps-admin.err.log b/logs/aps-admin.err.log
index f595613..aba294a 100644
--- a/logs/aps-admin.err.log
+++ b/logs/aps-admin.err.log
@@ -349,3 +349,4 @@
 [2023-07-13 10:55:49]	[error]	[aps_crm/model.(*ServiceContractSearch).FindAll:80]	trace	{"error": ": unsupported relations for schema ServiceContract", "elapsed": 0.001442, "rows": 2, "sql": "SELECT * FROM `service_contract`"}
 [2023-07-13 10:57:45]	[error]	[aps_crm/model.(*ServiceContractSearch).FindAll:80]	trace	{"error": ": unsupported relations for schema ServiceContract", "elapsed": 0.0011591, "rows": 2, "sql": "SELECT * FROM `service_contract`"}
 [2023-07-13 14:11:03]	[error]	[aps_crm/model.(*ServiceFollowupSearch).Create:53]	trace	{"error": "Error 1146 (42S02): Table 'aps_crm.service_followup' doesn't exist", "elapsed": 0.0024191, "rows": 0, "sql": "INSERT INTO `service_followup` (`client_id`,`number`,`contact_id`,`service_id`,`member_id`,`plan_id`,`satisfaction`,`timely_rate`,`solve_rate`,`is_visit`,`old_member_id`,`remark`,`file`) VALUES (0,'HF21',0,0,110,0,0,0,0,0,0,'string','string')"}
+[2023-07-13 15:00:16]	[error]	[aps_crm/model.(*CustomerServiceSheetSearch).Create:46]	trace	{"error": "Error 1146 (42S02): Table 'aps_crm.customer_service_sheet' doesn't exist", "elapsed": 0.0020622, "rows": 0, "sql": "INSERT INTO `customer_service_sheet` (`member_id`,`number`,`service_mode`,`priority`,`handle_status`,`created_at`,`updated_at`,`deleted_at`) VALUES (110,'HF30',0,0,0,'2023-07-13 15:00:16.507','2023-07-13 15:00:16.507',NULL)"}
diff --git a/model/customerServiceSheet.go b/model/customerServiceSheet.go
index 1fb8026..0a91f29 100644
--- a/model/customerServiceSheet.go
+++ b/model/customerServiceSheet.go
@@ -1,6 +1,9 @@
 package model
 
-import "gorm.io/gorm"
+import (
+	"aps_crm/pkg/mysqlx"
+	"gorm.io/gorm"
+)
 
 type (
 	CustomerServiceSheet struct {
@@ -18,3 +21,56 @@
 		Orm *gorm.DB
 	}
 )
+
+func (CustomerServiceSheet) TableName() string {
+	return "customer_service_sheet"
+}
+
+func NewCustomerServiceSheetSearch() *CustomerServiceSheetSearch {
+	return &CustomerServiceSheetSearch{
+		Orm: mysqlx.GetDB(),
+	}
+}
+
+func (css *CustomerServiceSheetSearch) build() *gorm.DB {
+	var db = css.Orm.Model(&CustomerServiceSheet{})
+	if css.Id != 0 {
+		db = db.Where("id = ?", css.Id)
+	}
+
+	return db
+}
+
+func (css *CustomerServiceSheetSearch) Create(record *CustomerServiceSheet) error {
+	var db = css.build()
+	return db.Create(record).Error
+}
+
+func (css *CustomerServiceSheetSearch) Update(record *CustomerServiceSheet) error {
+	var db = css.build()
+	return db.Updates(record).Error
+}
+
+func (css *CustomerServiceSheetSearch) Delete() error {
+	var db = css.build()
+	return db.Delete(&CustomerServiceSheet{}).Error
+}
+
+func (css *CustomerServiceSheetSearch) Find() (*CustomerServiceSheet, error) {
+	var db = css.build()
+	var record = &CustomerServiceSheet{}
+	err := db.First(record).Error
+	return record, err
+}
+
+func (css *CustomerServiceSheetSearch) FindAll() ([]*CustomerServiceSheet, error) {
+	var db = css.build()
+	var records = make([]*CustomerServiceSheet, 0)
+	err := db.Find(&records).Error
+	return records, err
+}
+
+func (css *CustomerServiceSheetSearch) SetId(id int) *CustomerServiceSheetSearch {
+	css.Id = id
+	return css
+}
diff --git a/model/index.go b/model/index.go
index 15c1827..bedc358 100644
--- a/model/index.go
+++ b/model/index.go
@@ -58,6 +58,7 @@
 		ServiceContract{},
 		OrderManage{},
 		ServiceFollowup{},
+		CustomerServiceSheet{},
 	)
 	return err
 }
diff --git a/model/request/customerServiceSheet.go b/model/request/customerServiceSheet.go
new file mode 100644
index 0000000..435fb06
--- /dev/null
+++ b/model/request/customerServiceSheet.go
@@ -0,0 +1,18 @@
+package request
+
+type AddCustomerServiceSheet struct {
+	CustomerServiceSheet
+}
+
+type CustomerServiceSheet struct {
+	MemberId     int    `json:"memberId"`
+	Number       string `json:"number"`
+	ServiceMode  int    `json:"serviceMode"`
+	Priority     int    `json:"priority"`
+	HandleStatus int    `json:"handleStatus"`
+}
+
+type UpdateCustomerServiceSheet struct {
+	Id int `json:"id"`
+	CustomerServiceSheet
+}
diff --git a/model/response/response.go b/model/response/response.go
index 9f09dab..0665063 100644
--- a/model/response/response.go
+++ b/model/response/response.go
@@ -165,4 +165,8 @@
 	ServiceFollowupResponse struct {
 		List []*model.ServiceFollowup `json:"list"`
 	}
+
+	CustomerServiceSheetResponse struct {
+		List []*model.CustomerServiceSheet `json:"list"`
+	}
 )
diff --git a/model/serviceFollowup.go b/model/serviceFollowup.go
index c44beea..86818d4 100644
--- a/model/serviceFollowup.go
+++ b/model/serviceFollowup.go
@@ -21,7 +21,8 @@
 		OldMemberId  int    `json:"oldMemberId" gorm:"column:old_member_id;type:int;comment:鍘熸湇鍔′汉鍛�"`
 		Remark       string `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"`
 		File         string `json:"file" gorm:"column:file;type:varchar(255);comment:闄勪欢"`
-		gorm.Model   `json:"-"`
+
+		gorm.Model `json:"-"`
 	}
 
 	ServiceFollowupSearch struct {
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index bb7640a..a62d3a9 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -253,4 +253,11 @@
 	ServiceFollowupSetErr    = 3500004 // 璁剧疆鏈嶅姟璺熻繘澶辫触
 	ServiceFollowupUpdateErr = 3500005 // 鏇存柊鏈嶅姟璺熻繘澶辫触
 	ServiceFollowupDeleteErr = 3500006 // 鍒犻櫎鏈嶅姟璺熻繘澶辫触
+
+	CustomerServiceSheetExist     = 3600001 // 瀹㈡湇鍗曞凡瀛樺湪
+	CustomerServiceSheetNotExist  = 3600002 // 瀹㈡湇鍗曚笉瀛樺湪
+	CustomerServiceSheetListErr   = 3600003 // 鑾峰彇瀹㈡湇鍗曞垪琛ㄥけ璐�
+	CustomerServiceSheetSetErr    = 3600004 // 璁剧疆瀹㈡湇鍗曞け璐�
+	CustomerServiceSheetUpdateErr = 3600005 // 鏇存柊瀹㈡湇鍗曞け璐�
+	CustomerServiceSheetDeleteErr = 3600006 // 鍒犻櫎瀹㈡湇鍗曞け璐�
 )
diff --git a/router/customerServiceSheet.go b/router/customerServiceSheet.go
new file mode 100644
index 0000000..b1c369b
--- /dev/null
+++ b/router/customerServiceSheet.go
@@ -0,0 +1,19 @@
+package router
+
+import (
+	v1 "aps_crm/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type CustomerServiceSheetRouter struct{}
+
+func (c *CustomerServiceSheetRouter) InitCustomerServiceSheetRouter(router *gin.RouterGroup) {
+	customerServiceSheetRouter := router.Group("customerServiceSheet")
+	customerServiceSheetApi := v1.ApiGroup.CustomerServiceSheetApi
+	{
+		customerServiceSheetRouter.POST("add", customerServiceSheetApi.Add)             // 娣诲姞瀹㈡湇鍗�
+		customerServiceSheetRouter.DELETE("delete/:id", customerServiceSheetApi.Delete) // 鍒犻櫎瀹㈡湇鍗�
+		customerServiceSheetRouter.PUT("update", customerServiceSheetApi.Update)        // 鏇存柊瀹㈡湇鍗�
+		customerServiceSheetRouter.GET("list", customerServiceSheetApi.List)            // 鑾峰彇瀹㈡湇鍗曞垪琛�
+	}
+}
diff --git a/router/index.go b/router/index.go
index 3fba11a..f0fe7b7 100644
--- a/router/index.go
+++ b/router/index.go
@@ -48,6 +48,7 @@
 	ServiceContractRouter
 	OrderManageRouter
 	ServiceFollowupRouter
+	CustomerServiceSheetRouter
 }
 
 func InitRouter() *gin.Engine {
@@ -77,42 +78,43 @@
 	PrivateGroup := Router.Group("api")
 	//PrivateGroup.Use(middleware.JWTAuth())
 	{
-		routerGroup.InitJwtRouter(PrivateGroup)               // jwt鐩稿叧璺敱
-		routerGroup.InitUserRouter(PrivateGroup)              // 娉ㄥ唽鐢ㄦ埛璺敱
-		routerGroup.InitCountryRouter(PrivateGroup)           // 娉ㄥ唽country璺敱
-		routerGroup.InitProvinceRouter(PrivateGroup)          // 娉ㄥ唽province璺敱
-		routerGroup.InitCityRouter(PrivateGroup)              // 娉ㄥ唽city璺敱
-		routerGroup.InitRegionRouter(PrivateGroup)            // 娉ㄥ唽region璺敱
-		routerGroup.InitContactRouter(PrivateGroup)           // 娉ㄥ唽contact璺敱
-		routerGroup.InitClientRouter(PrivateGroup)            // 娉ㄥ唽client璺敱
-		routerGroup.InitClientStatusRouter(PrivateGroup)      // 娉ㄥ唽clientStatus璺敱
-		routerGroup.InitClientTypeRouter(PrivateGroup)        // 娉ㄥ唽clientType璺敱
-		routerGroup.InitClientOriginRouter(PrivateGroup)      // 娉ㄥ唽clientOrigin璺敱
-		routerGroup.InitClientLevelRouter(PrivateGroup)       // 娉ㄥ唽clientLevel璺敱
-		routerGroup.InitIndustryRouter(PrivateGroup)          // 娉ㄥ唽industry璺敱
-		routerGroup.InitEnterpriseNatureRouter(PrivateGroup)  // 娉ㄥ唽enterpriseNature璺敱
-		routerGroup.InitRegisteredCapitalRouter(PrivateGroup) // 娉ㄥ唽registeredCapital璺敱
-		routerGroup.InitEnterpriseScaleRouter(PrivateGroup)   // 娉ㄥ唽enterpriseScale璺敱
-		routerGroup.InitSalesLeadsRouter(PrivateGroup)        // 娉ㄥ唽salesLeads璺敱
-		routerGroup.InitSalesSourcesRouter(PrivateGroup)      // 娉ㄥ唽salesSources璺敱
-		routerGroup.InitFollowRecordRouter(PrivateGroup)      // 娉ㄥ唽followRecord璺敱
-		routerGroup.InitSaleChanceRouter(PrivateGroup)        // 娉ㄥ唽saleChance璺敱
-		routerGroup.InitSaleStageRouter(PrivateGroup)         // 娉ㄥ唽saleStage璺敱
-		routerGroup.InitSaleTypeRouter(PrivateGroup)          // 娉ㄥ唽saleType璺敱
-		routerGroup.InitRegularCustomersRouter(PrivateGroup)  // 娉ㄥ唽regularCustomers璺敱
-		routerGroup.InitPossibilityRouter(PrivateGroup)       // 娉ㄥ唽possibility璺敱
-		routerGroup.InitStatusRouter(PrivateGroup)            // 娉ㄥ唽status璺敱
-		routerGroup.InitQuotationRouter(PrivateGroup)         // 娉ㄥ唽quotation璺敱
-		routerGroup.InitMasterOrderRouter(PrivateGroup)       // 娉ㄥ唽masterOrder璺敱
-		routerGroup.InitSubOrderRouter(PrivateGroup)          // 娉ㄥ唽subOrder璺敱
-		routerGroup.InitSalesDetailsRouter(PrivateGroup)      // 娉ㄥ唽salesDetails璺敱
-		routerGroup.InitSalesReturnRouter(PrivateGroup)       // 娉ㄥ唽salesReturn璺敱
-		routerGroup.InitSalesRefundRouter(PrivateGroup)       // 娉ㄥ唽salesRefund璺敱
-		routerGroup.InitContractRouter(PrivateGroup)          // 娉ㄥ唽contract璺敱
-		routerGroup.InitPlanRouter(PrivateGroup)              // 娉ㄥ唽plan璺敱
-		routerGroup.InitServiceContractRouter(PrivateGroup)   // 娉ㄥ唽serviceContract璺敱
-		routerGroup.InitOrderManageRouter(PrivateGroup)       // 娉ㄥ唽orderManage璺敱
-		routerGroup.InitServiceFollowupRouter(PrivateGroup)   // 娉ㄥ唽serviceFollowup璺敱
+		routerGroup.InitJwtRouter(PrivateGroup)                  // jwt鐩稿叧璺敱
+		routerGroup.InitUserRouter(PrivateGroup)                 // 娉ㄥ唽鐢ㄦ埛璺敱
+		routerGroup.InitCountryRouter(PrivateGroup)              // 娉ㄥ唽country璺敱
+		routerGroup.InitProvinceRouter(PrivateGroup)             // 娉ㄥ唽province璺敱
+		routerGroup.InitCityRouter(PrivateGroup)                 // 娉ㄥ唽city璺敱
+		routerGroup.InitRegionRouter(PrivateGroup)               // 娉ㄥ唽region璺敱
+		routerGroup.InitContactRouter(PrivateGroup)              // 娉ㄥ唽contact璺敱
+		routerGroup.InitClientRouter(PrivateGroup)               // 娉ㄥ唽client璺敱
+		routerGroup.InitClientStatusRouter(PrivateGroup)         // 娉ㄥ唽clientStatus璺敱
+		routerGroup.InitClientTypeRouter(PrivateGroup)           // 娉ㄥ唽clientType璺敱
+		routerGroup.InitClientOriginRouter(PrivateGroup)         // 娉ㄥ唽clientOrigin璺敱
+		routerGroup.InitClientLevelRouter(PrivateGroup)          // 娉ㄥ唽clientLevel璺敱
+		routerGroup.InitIndustryRouter(PrivateGroup)             // 娉ㄥ唽industry璺敱
+		routerGroup.InitEnterpriseNatureRouter(PrivateGroup)     // 娉ㄥ唽enterpriseNature璺敱
+		routerGroup.InitRegisteredCapitalRouter(PrivateGroup)    // 娉ㄥ唽registeredCapital璺敱
+		routerGroup.InitEnterpriseScaleRouter(PrivateGroup)      // 娉ㄥ唽enterpriseScale璺敱
+		routerGroup.InitSalesLeadsRouter(PrivateGroup)           // 娉ㄥ唽salesLeads璺敱
+		routerGroup.InitSalesSourcesRouter(PrivateGroup)         // 娉ㄥ唽salesSources璺敱
+		routerGroup.InitFollowRecordRouter(PrivateGroup)         // 娉ㄥ唽followRecord璺敱
+		routerGroup.InitSaleChanceRouter(PrivateGroup)           // 娉ㄥ唽saleChance璺敱
+		routerGroup.InitSaleStageRouter(PrivateGroup)            // 娉ㄥ唽saleStage璺敱
+		routerGroup.InitSaleTypeRouter(PrivateGroup)             // 娉ㄥ唽saleType璺敱
+		routerGroup.InitRegularCustomersRouter(PrivateGroup)     // 娉ㄥ唽regularCustomers璺敱
+		routerGroup.InitPossibilityRouter(PrivateGroup)          // 娉ㄥ唽possibility璺敱
+		routerGroup.InitStatusRouter(PrivateGroup)               // 娉ㄥ唽status璺敱
+		routerGroup.InitQuotationRouter(PrivateGroup)            // 娉ㄥ唽quotation璺敱
+		routerGroup.InitMasterOrderRouter(PrivateGroup)          // 娉ㄥ唽masterOrder璺敱
+		routerGroup.InitSubOrderRouter(PrivateGroup)             // 娉ㄥ唽subOrder璺敱
+		routerGroup.InitSalesDetailsRouter(PrivateGroup)         // 娉ㄥ唽salesDetails璺敱
+		routerGroup.InitSalesReturnRouter(PrivateGroup)          // 娉ㄥ唽salesReturn璺敱
+		routerGroup.InitSalesRefundRouter(PrivateGroup)          // 娉ㄥ唽salesRefund璺敱
+		routerGroup.InitContractRouter(PrivateGroup)             // 娉ㄥ唽contract璺敱
+		routerGroup.InitPlanRouter(PrivateGroup)                 // 娉ㄥ唽plan璺敱
+		routerGroup.InitServiceContractRouter(PrivateGroup)      // 娉ㄥ唽serviceContract璺敱
+		routerGroup.InitOrderManageRouter(PrivateGroup)          // 娉ㄥ唽orderManage璺敱
+		routerGroup.InitServiceFollowupRouter(PrivateGroup)      // 娉ㄥ唽serviceFollowup璺敱
+		routerGroup.InitCustomerServiceSheetRouter(PrivateGroup) // 娉ㄥ唽customerServiceSheet璺敱
 	}
 	return Router
 }
diff --git a/service/customerServiceSheet.go b/service/customerServiceSheet.go
new file mode 100644
index 0000000..000f345
--- /dev/null
+++ b/service/customerServiceSheet.go
@@ -0,0 +1,54 @@
+package service
+
+import (
+	"aps_crm/model"
+	"aps_crm/pkg/ecode"
+)
+
+type CustomerServiceSheetService struct{}
+
+func (CustomerServiceSheetService) AddCustomerServiceSheet(customerServiceSheet *model.CustomerServiceSheet) int {
+	err := model.NewCustomerServiceSheetSearch().Create(customerServiceSheet)
+	if err != nil {
+		return ecode.CustomerServiceSheetExist
+	}
+
+	return ecode.OK
+}
+
+func (CustomerServiceSheetService) DeleteCustomerServiceSheet(id int) int {
+	_, err := model.NewCustomerServiceSheetSearch().SetId(id).Find()
+	if err != nil {
+		return ecode.CustomerServiceSheetNotExist
+	}
+
+	err = model.NewCustomerServiceSheetSearch().SetId(id).Delete()
+	if err != nil {
+		return ecode.CustomerServiceSheetNotExist
+	}
+	return ecode.OK
+}
+
+func (CustomerServiceSheetService) GetCustomerServiceSheetList() ([]*model.CustomerServiceSheet, int) {
+	list, err := model.NewCustomerServiceSheetSearch().FindAll()
+	if err != nil {
+		return nil, ecode.CustomerServiceSheetListErr
+	}
+
+	return list, ecode.OK
+}
+
+func (CustomerServiceSheetService) UpdateCustomerServiceSheet(customerServiceSheet *model.CustomerServiceSheet) int {
+	// check customerServiceSheet exist
+	_, err := model.NewCustomerServiceSheetSearch().SetId(customerServiceSheet.Id).Find()
+	if err != nil {
+		return ecode.CustomerServiceSheetNotExist
+	}
+
+	err = model.NewCustomerServiceSheetSearch().SetId(customerServiceSheet.Id).Update(customerServiceSheet)
+	if err != nil {
+		return ecode.CustomerServiceSheetSetErr
+	}
+
+	return ecode.OK
+}
diff --git a/service/index.go b/service/index.go
index ccfcca8..4c2e03e 100644
--- a/service/index.go
+++ b/service/index.go
@@ -37,6 +37,7 @@
 	SContractService
 	OrderManageService
 	FollowupService
+	CustomerServiceSheetService
 }
 
 var ServiceGroup = new(Group)

--
Gitblit v1.8.0