From 642b32ac1e86f596a0348ba230d3ba6822832e96 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期四, 13 七月 2023 14:13:18 +0800
Subject: [PATCH] add
---
api/v1/index.go | 2
pkg/ecode/code.go | 6
docs/swagger.yaml | 171 +++++++++
service/serviceFollowup.go | 54 +++
docs/docs.go | 268 ++++++++++++++
docs/swagger.json | 268 ++++++++++++++
model/response/response.go | 4
model/serviceFollowup.go | 83 ++++
router/serviceFollowup.go | 19 +
service/index.go | 1
model/request/serviceFollowup.go | 26 +
model/index.go | 1
logs/aps-admin.err.log | 1
router/index.go | 2
api/v1/serviceFollowup.go | 150 ++++++++
15 files changed, 1,056 insertions(+), 0 deletions(-)
diff --git a/api/v1/index.go b/api/v1/index.go
index bdc1117..213ccca 100644
--- a/api/v1/index.go
+++ b/api/v1/index.go
@@ -41,6 +41,7 @@
PlanApi
ServiceContractApi
OrderManageApi
+ ServiceFollowupApi
}
var ApiGroup = new(Group)
@@ -81,4 +82,5 @@
planService = service.ServiceGroup.PlanService
serviceContractService = service.ServiceGroup.SContractService
orderManageService = service.ServiceGroup.OrderManageService
+ serviceFollowupService = service.ServiceGroup.FollowupService
)
diff --git a/api/v1/serviceFollowup.go b/api/v1/serviceFollowup.go
new file mode 100644
index 0000000..65f8f53
--- /dev/null
+++ b/api/v1/serviceFollowup.go
@@ -0,0 +1,150 @@
+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 ServiceFollowupApi struct{}
+
+// Add
+//
+// @Tags ServiceFollowup
+// @Summary 娣诲姞鏈嶅姟璺熻繘
+// @Produce application/json
+// @Param object body request.AddServiceFollowup true "鏌ヨ鍙傛暟"
+// @Success 200 {object} contextx.Response{}
+// @Router /api/serviceFollowup/add [post]
+func (s *ServiceFollowupApi) Add(c *gin.Context) {
+ var params request.AddServiceFollowup
+ ctx, ok := contextx.NewContext(c, ¶ms)
+ if !ok {
+ return
+ }
+
+ errCode, serviceFollowup := checkServiceFollowupParams(params.ServiceFollowup)
+ if errCode != ecode.OK {
+ ctx.Fail(errCode)
+ return
+ }
+
+ errCode = serviceFollowupService.AddServiceFollowup(&serviceFollowup)
+ if errCode != ecode.OK {
+ ctx.Fail(errCode)
+ return
+ }
+
+ ctx.Ok()
+}
+
+// Delete
+//
+// @Tags ServiceFollowup
+// @Summary 鍒犻櫎鏈嶅姟璺熻繘
+// @Produce application/json
+// @Param id path int true "鏌ヨ鍙傛暟"
+// @Success 200 {object} contextx.Response{}
+// @Router /api/serviceFollowup/delete/{id} [delete]
+func (s *ServiceFollowupApi) Delete(c *gin.Context) {
+ ctx, ok := contextx.NewContext(c, nil)
+ if !ok {
+ return
+ }
+
+ id, _ := strconv.Atoi(c.Param("id"))
+ errCode := serviceFollowupService.DeleteServiceFollowup(id)
+ if errCode != ecode.OK {
+ ctx.Fail(errCode)
+ return
+ }
+
+ ctx.Ok()
+}
+
+// Update
+//
+// @Tags ServiceFollowup
+// @Summary 鏇存柊鏈嶅姟璺熻繘
+// @Produce application/json
+// @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
+ ctx, ok := contextx.NewContext(c, ¶ms)
+ if !ok {
+ return
+ }
+
+ errCode, serviceFollowup := checkServiceFollowupParams(params.ServiceFollowup)
+ if errCode != ecode.OK {
+ ctx.Fail(errCode)
+ return
+ }
+
+ errCode = serviceFollowupService.UpdateServiceFollowup(&serviceFollowup)
+ if errCode != ecode.OK {
+ ctx.Fail(errCode)
+ return
+ }
+
+ ctx.Ok()
+}
+
+// List
+//
+// @Tags ServiceFollowup
+// @Summary 鏈嶅姟璺熻繘鍒楄〃
+// @Produce application/json
+// @Success 200 {object} contextx.Response{data=response.ServiceFollowupResponse}
+// @Router /api/serviceFollowup/list [get]
+func (s *ServiceFollowupApi) List(c *gin.Context) {
+ ctx, ok := contextx.NewContext(c, nil)
+ if !ok {
+ return
+ }
+
+ list, errCode := serviceFollowupService.GetServiceFollowupList()
+ if errCode != ecode.OK {
+ ctx.Fail(errCode)
+ return
+ }
+
+ ctx.OkWithDetailed(response.ServiceFollowupResponse{
+ List: list,
+ })
+}
+
+// checkServiceFollowupParams
+func checkServiceFollowupParams(serviceFollowup request.ServiceFollowup) (errCode int, serviceFollowupModel model.ServiceFollowup) {
+ if serviceFollowup.Number == "" {
+ return ecode.InvalidParams, serviceFollowupModel
+ }
+
+ if serviceFollowup.MemberId == 0 {
+ return ecode.InvalidParams, serviceFollowupModel
+ }
+
+ serviceFollowupModel = model.ServiceFollowup{
+ ClientId: serviceFollowup.ClientId,
+ Number: serviceFollowup.Number,
+ ContactId: serviceFollowup.ContactId,
+ ServiceId: serviceFollowup.ServiceId,
+ MemberId: serviceFollowup.MemberId,
+ PlanId: serviceFollowup.PlanId,
+ Satisfaction: serviceFollowup.Satisfaction,
+ TimelyRate: serviceFollowup.TimelyRate,
+ SolveRate: serviceFollowup.SolveRate,
+ IsVisit: serviceFollowup.IsVisit,
+ OldMemberId: serviceFollowup.OldMemberId,
+ Remark: serviceFollowup.Remark,
+ File: serviceFollowup.File,
+ }
+
+ return ecode.OK, serviceFollowupModel
+}
diff --git a/docs/docs.go b/docs/docs.go
index dea128f..3a20450 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -3865,6 +3865,125 @@
}
}
},
+ "/api/serviceFollowup/add": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "ServiceFollowup"
+ ],
+ "summary": "娣诲姞鏈嶅姟璺熻繘",
+ "parameters": [
+ {
+ "description": "鏌ヨ鍙傛暟",
+ "name": "object",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/request.AddServiceFollowup"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/contextx.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/serviceFollowup/delete/{id}": {
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "ServiceFollowup"
+ ],
+ "summary": "鍒犻櫎鏈嶅姟璺熻繘",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "鏌ヨ鍙傛暟",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/contextx.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/serviceFollowup/list": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "ServiceFollowup"
+ ],
+ "summary": "鏈嶅姟璺熻繘鍒楄〃",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/contextx.Response"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/response.ServiceFollowupResponse"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "/api/serviceFollowup/update": {
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "ServiceFollowup"
+ ],
+ "summary": "鏇存柊鏈嶅姟璺熻繘",
+ "parameters": [
+ {
+ "description": "鏌ヨ鍙傛暟",
+ "name": "object",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/request.UpdateServiceFollowup"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/contextx.Response"
+ }
+ }
+ }
+ }
+ },
"/api/status/add": {
"post": {
"produces": [
@@ -5433,6 +5552,53 @@
}
}
},
+ "model.ServiceFollowup": {
+ "type": "object",
+ "properties": {
+ "clientId": {
+ "type": "integer"
+ },
+ "contactId": {
+ "type": "integer"
+ },
+ "file": {
+ "type": "string"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "isVisit": {
+ "type": "integer"
+ },
+ "memberId": {
+ "type": "integer"
+ },
+ "number": {
+ "type": "string"
+ },
+ "oldMemberId": {
+ "type": "integer"
+ },
+ "planId": {
+ "type": "integer"
+ },
+ "remark": {
+ "type": "string"
+ },
+ "satisfaction": {
+ "type": "integer"
+ },
+ "serviceId": {
+ "type": "integer"
+ },
+ "solveRate": {
+ "type": "integer"
+ },
+ "timelyRate": {
+ "type": "integer"
+ }
+ }
+ },
"model.SubOrder": {
"type": "object",
"properties": {
@@ -6209,6 +6375,50 @@
"type": "string"
},
"typeId": {
+ "type": "integer"
+ }
+ }
+ },
+ "request.AddServiceFollowup": {
+ "type": "object",
+ "properties": {
+ "clientId": {
+ "type": "integer"
+ },
+ "contactId": {
+ "type": "integer"
+ },
+ "file": {
+ "type": "string"
+ },
+ "isVisit": {
+ "type": "integer"
+ },
+ "memberId": {
+ "type": "integer"
+ },
+ "number": {
+ "type": "string"
+ },
+ "oldMemberId": {
+ "type": "integer"
+ },
+ "planId": {
+ "type": "integer"
+ },
+ "remark": {
+ "type": "string"
+ },
+ "satisfaction": {
+ "type": "integer"
+ },
+ "serviceId": {
+ "type": "integer"
+ },
+ "solveRate": {
+ "type": "integer"
+ },
+ "timelyRate": {
"type": "integer"
}
}
@@ -7729,6 +7939,53 @@
}
}
},
+ "request.UpdateServiceFollowup": {
+ "type": "object",
+ "properties": {
+ "clientId": {
+ "type": "integer"
+ },
+ "contactId": {
+ "type": "integer"
+ },
+ "file": {
+ "type": "string"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "isVisit": {
+ "type": "integer"
+ },
+ "memberId": {
+ "type": "integer"
+ },
+ "number": {
+ "type": "string"
+ },
+ "oldMemberId": {
+ "type": "integer"
+ },
+ "planId": {
+ "type": "integer"
+ },
+ "remark": {
+ "type": "string"
+ },
+ "satisfaction": {
+ "type": "integer"
+ },
+ "serviceId": {
+ "type": "integer"
+ },
+ "solveRate": {
+ "type": "integer"
+ },
+ "timelyRate": {
+ "type": "integer"
+ }
+ }
+ },
"request.UpdateStatus": {
"type": "object",
"required": [
@@ -8121,6 +8378,17 @@
}
}
},
+ "response.ServiceFollowupResponse": {
+ "type": "object",
+ "properties": {
+ "list": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/model.ServiceFollowup"
+ }
+ }
+ }
+ },
"response.SubOrderResponse": {
"type": "object",
"properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index fe36c36..2f66cb6 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -3853,6 +3853,125 @@
}
}
},
+ "/api/serviceFollowup/add": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "ServiceFollowup"
+ ],
+ "summary": "娣诲姞鏈嶅姟璺熻繘",
+ "parameters": [
+ {
+ "description": "鏌ヨ鍙傛暟",
+ "name": "object",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/request.AddServiceFollowup"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/contextx.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/serviceFollowup/delete/{id}": {
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "ServiceFollowup"
+ ],
+ "summary": "鍒犻櫎鏈嶅姟璺熻繘",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "鏌ヨ鍙傛暟",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/contextx.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api/serviceFollowup/list": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "ServiceFollowup"
+ ],
+ "summary": "鏈嶅姟璺熻繘鍒楄〃",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/contextx.Response"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/response.ServiceFollowupResponse"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "/api/serviceFollowup/update": {
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "ServiceFollowup"
+ ],
+ "summary": "鏇存柊鏈嶅姟璺熻繘",
+ "parameters": [
+ {
+ "description": "鏌ヨ鍙傛暟",
+ "name": "object",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/request.UpdateServiceFollowup"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/contextx.Response"
+ }
+ }
+ }
+ }
+ },
"/api/status/add": {
"post": {
"produces": [
@@ -5421,6 +5540,53 @@
}
}
},
+ "model.ServiceFollowup": {
+ "type": "object",
+ "properties": {
+ "clientId": {
+ "type": "integer"
+ },
+ "contactId": {
+ "type": "integer"
+ },
+ "file": {
+ "type": "string"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "isVisit": {
+ "type": "integer"
+ },
+ "memberId": {
+ "type": "integer"
+ },
+ "number": {
+ "type": "string"
+ },
+ "oldMemberId": {
+ "type": "integer"
+ },
+ "planId": {
+ "type": "integer"
+ },
+ "remark": {
+ "type": "string"
+ },
+ "satisfaction": {
+ "type": "integer"
+ },
+ "serviceId": {
+ "type": "integer"
+ },
+ "solveRate": {
+ "type": "integer"
+ },
+ "timelyRate": {
+ "type": "integer"
+ }
+ }
+ },
"model.SubOrder": {
"type": "object",
"properties": {
@@ -6197,6 +6363,50 @@
"type": "string"
},
"typeId": {
+ "type": "integer"
+ }
+ }
+ },
+ "request.AddServiceFollowup": {
+ "type": "object",
+ "properties": {
+ "clientId": {
+ "type": "integer"
+ },
+ "contactId": {
+ "type": "integer"
+ },
+ "file": {
+ "type": "string"
+ },
+ "isVisit": {
+ "type": "integer"
+ },
+ "memberId": {
+ "type": "integer"
+ },
+ "number": {
+ "type": "string"
+ },
+ "oldMemberId": {
+ "type": "integer"
+ },
+ "planId": {
+ "type": "integer"
+ },
+ "remark": {
+ "type": "string"
+ },
+ "satisfaction": {
+ "type": "integer"
+ },
+ "serviceId": {
+ "type": "integer"
+ },
+ "solveRate": {
+ "type": "integer"
+ },
+ "timelyRate": {
"type": "integer"
}
}
@@ -7717,6 +7927,53 @@
}
}
},
+ "request.UpdateServiceFollowup": {
+ "type": "object",
+ "properties": {
+ "clientId": {
+ "type": "integer"
+ },
+ "contactId": {
+ "type": "integer"
+ },
+ "file": {
+ "type": "string"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "isVisit": {
+ "type": "integer"
+ },
+ "memberId": {
+ "type": "integer"
+ },
+ "number": {
+ "type": "string"
+ },
+ "oldMemberId": {
+ "type": "integer"
+ },
+ "planId": {
+ "type": "integer"
+ },
+ "remark": {
+ "type": "string"
+ },
+ "satisfaction": {
+ "type": "integer"
+ },
+ "serviceId": {
+ "type": "integer"
+ },
+ "solveRate": {
+ "type": "integer"
+ },
+ "timelyRate": {
+ "type": "integer"
+ }
+ }
+ },
"request.UpdateStatus": {
"type": "object",
"required": [
@@ -8109,6 +8366,17 @@
}
}
},
+ "response.ServiceFollowupResponse": {
+ "type": "object",
+ "properties": {
+ "list": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/model.ServiceFollowup"
+ }
+ }
+ }
+ },
"response.SubOrderResponse": {
"type": "object",
"properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 490ca68..4a14862 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -723,6 +723,37 @@
typeId:
type: integer
type: object
+ model.ServiceFollowup:
+ properties:
+ clientId:
+ type: integer
+ contactId:
+ type: integer
+ file:
+ type: string
+ id:
+ type: integer
+ isVisit:
+ type: integer
+ memberId:
+ type: integer
+ number:
+ type: string
+ oldMemberId:
+ type: integer
+ planId:
+ type: integer
+ remark:
+ type: string
+ satisfaction:
+ type: integer
+ serviceId:
+ type: integer
+ solveRate:
+ type: integer
+ timelyRate:
+ type: integer
+ type: object
model.SubOrder:
properties:
clientId:
@@ -1247,6 +1278,35 @@
terms:
type: string
typeId:
+ type: integer
+ type: object
+ request.AddServiceFollowup:
+ properties:
+ clientId:
+ type: integer
+ contactId:
+ type: integer
+ file:
+ type: string
+ isVisit:
+ type: integer
+ memberId:
+ type: integer
+ number:
+ type: string
+ oldMemberId:
+ type: integer
+ planId:
+ type: integer
+ remark:
+ type: string
+ satisfaction:
+ type: integer
+ serviceId:
+ type: integer
+ solveRate:
+ type: integer
+ timelyRate:
type: integer
type: object
request.AddStatus:
@@ -2275,6 +2335,37 @@
typeId:
type: integer
type: object
+ request.UpdateServiceFollowup:
+ properties:
+ clientId:
+ type: integer
+ contactId:
+ type: integer
+ file:
+ type: string
+ id:
+ type: integer
+ isVisit:
+ type: integer
+ memberId:
+ type: integer
+ number:
+ type: string
+ oldMemberId:
+ type: integer
+ planId:
+ type: integer
+ remark:
+ type: string
+ satisfaction:
+ type: integer
+ serviceId:
+ type: integer
+ solveRate:
+ type: integer
+ timelyRate:
+ type: integer
+ type: object
request.UpdateStatus:
properties:
id:
@@ -2524,6 +2615,13 @@
list:
items:
$ref: '#/definitions/model.ServiceContract'
+ type: array
+ type: object
+ response.ServiceFollowupResponse:
+ properties:
+ list:
+ items:
+ $ref: '#/definitions/model.ServiceFollowup'
type: array
type: object
response.SubOrderResponse:
@@ -4905,6 +5003,79 @@
summary: 鏇存柊鏈嶅姟鍚堝悓
tags:
- ServiceContract
+ /api/serviceFollowup/add:
+ post:
+ parameters:
+ - description: 鏌ヨ鍙傛暟
+ in: body
+ name: object
+ required: true
+ schema:
+ $ref: '#/definitions/request.AddServiceFollowup'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/contextx.Response'
+ summary: 娣诲姞鏈嶅姟璺熻繘
+ tags:
+ - ServiceFollowup
+ /api/serviceFollowup/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:
+ - ServiceFollowup
+ /api/serviceFollowup/list:
+ get:
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ allOf:
+ - $ref: '#/definitions/contextx.Response'
+ - properties:
+ data:
+ $ref: '#/definitions/response.ServiceFollowupResponse'
+ type: object
+ summary: 鏈嶅姟璺熻繘鍒楄〃
+ tags:
+ - ServiceFollowup
+ /api/serviceFollowup/update:
+ put:
+ parameters:
+ - description: 鏌ヨ鍙傛暟
+ in: body
+ name: object
+ required: true
+ schema:
+ $ref: '#/definitions/request.UpdateServiceFollowup'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/contextx.Response'
+ summary: 鏇存柊鏈嶅姟璺熻繘
+ tags:
+ - ServiceFollowup
/api/status/add:
post:
parameters:
diff --git a/logs/aps-admin.err.log b/logs/aps-admin.err.log
index c3683ac..f595613 100644
--- a/logs/aps-admin.err.log
+++ b/logs/aps-admin.err.log
@@ -348,3 +348,4 @@
[2023-07-12 15:23:10] [error] [aps_crm/model.(*ContractSearch).Create:46] trace {"error": "Error 1146 (42S02): Table 'aps_crm.contract' doesn't exist", "elapsed": 0.003547, "rows": 0, "sql": "INSERT INTO `contract` (`client_id`,`member_id`,`number`,`quotation_id`,`status_id`,`file`) VALUES (11,11,'ZDYB02-2',0,0,'string')"}
[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')"}
diff --git a/model/index.go b/model/index.go
index fec053b..15c1827 100644
--- a/model/index.go
+++ b/model/index.go
@@ -57,6 +57,7 @@
Plan{},
ServiceContract{},
OrderManage{},
+ ServiceFollowup{},
)
return err
}
diff --git a/model/request/serviceFollowup.go b/model/request/serviceFollowup.go
new file mode 100644
index 0000000..9ae6706
--- /dev/null
+++ b/model/request/serviceFollowup.go
@@ -0,0 +1,26 @@
+package request
+
+type AddServiceFollowup struct {
+ ServiceFollowup
+}
+
+type ServiceFollowup struct {
+ ClientId int `json:"clientId"`
+ Number string `json:"number"`
+ ContactId int `json:"contactId"`
+ ServiceId int `json:"serviceId"`
+ MemberId int `json:"memberId"`
+ PlanId int `json:"planId"`
+ Satisfaction int `json:"satisfaction"`
+ TimelyRate int `json:"timelyRate"`
+ SolveRate int `json:"solveRate"`
+ IsVisit int `json:"isVisit"`
+ OldMemberId int `json:"oldMemberId"`
+ Remark string `json:"remark"`
+ File string `json:"file"`
+}
+
+type UpdateServiceFollowup struct {
+ Id int `json:"id"`
+ ServiceFollowup
+}
diff --git a/model/response/response.go b/model/response/response.go
index 9bc5c0b..9f09dab 100644
--- a/model/response/response.go
+++ b/model/response/response.go
@@ -161,4 +161,8 @@
OrderManageResponse struct {
List []*model.OrderManage `json:"list"`
}
+
+ ServiceFollowupResponse struct {
+ List []*model.ServiceFollowup `json:"list"`
+ }
)
diff --git a/model/serviceFollowup.go b/model/serviceFollowup.go
new file mode 100644
index 0000000..f4bc52c
--- /dev/null
+++ b/model/serviceFollowup.go
@@ -0,0 +1,83 @@
+package model
+
+import (
+ "aps_crm/pkg/mysqlx"
+ "gorm.io/gorm"
+)
+
+type (
+ ServiceFollowup struct {
+ Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
+ ClientId int `json:"clientId" gorm:"column:client_id;type:int;comment:瀹㈡埛id"`
+ Number string `json:"number" gorm:"column:number;type:varchar(255);comment:鍚堝悓缂栧彿"`
+ ContactId int `json:"contactId" gorm:"column:contact_id;type:int;comment:鑱旂郴浜篿d"`
+ ServiceId int `json:"serviceId" gorm:"column:service_id;type:int;comment:瀹㈡埛鏈嶅姟鍗昳d"`
+ MemberId int `json:"memberId" gorm:"column:member_id;type:int;comment:鏈嶅姟浜哄憳id"`
+ PlanId int `json:"planId" gorm:"column:plan_id;type:int;comment:鏈嶅姟璁″垝id"`
+ Satisfaction int `json:"satisfaction" gorm:"column:satisfaction;type:int;comment:婊℃剰搴�"`
+ TimelyRate int `json:"timelyRate" gorm:"column:timely_rate;type:int;comment:鍙婃椂鐜�"`
+ SolveRate int `json:"solveRate" gorm:"column:solve_rate;type:int;comment:瑙e喅鐜�"`
+ IsVisit int `json:"isVisit" gorm:"column:is_visit;type:int;comment:鏈嶅姟浜哄憳鏄惁鏉ヨ繃"`
+ 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:闄勪欢"`
+ }
+
+ ServiceFollowupSearch struct {
+ ServiceFollowup
+ Orm *gorm.DB
+ }
+)
+
+func (ServiceFollowup) TableName() string {
+ return "service_followup"
+}
+
+func NewServiceFollowupSearch() *ServiceFollowupSearch {
+ return &ServiceFollowupSearch{
+ Orm: mysqlx.GetDB(),
+ }
+}
+
+func (slf *ServiceFollowupSearch) build() *gorm.DB {
+ var db = slf.Orm.Model(&ServiceFollowup{})
+ if slf.Id != 0 {
+ db = db.Where("id = ?", slf.Id)
+ }
+
+ return db
+}
+
+func (slf *ServiceFollowupSearch) Create(record *ServiceFollowup) error {
+ var db = slf.build()
+ return db.Create(record).Error
+}
+
+func (slf *ServiceFollowupSearch) Update(record *ServiceFollowup) error {
+ var db = slf.build()
+ return db.Updates(record).Error
+}
+
+func (slf *ServiceFollowupSearch) Delete() error {
+ var db = slf.build()
+ return db.Delete(&ServiceFollowup{}).Error
+}
+
+func (slf *ServiceFollowupSearch) Find() (*ServiceFollowup, error) {
+ var db = slf.build()
+ var record = &ServiceFollowup{}
+ err := db.First(record).Error
+ return record, err
+}
+
+func (slf *ServiceFollowupSearch) FindAll() ([]*ServiceFollowup, error) {
+ var db = slf.build()
+ var records = make([]*ServiceFollowup, 0)
+ err := db.Find(&records).Error
+ return records, err
+}
+
+func (slf *ServiceFollowupSearch) SetId(id int) *ServiceFollowupSearch {
+ slf.Id = id
+ return slf
+}
diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go
index 623a843..bb7640a 100644
--- a/pkg/ecode/code.go
+++ b/pkg/ecode/code.go
@@ -247,4 +247,10 @@
OrderManageUpdateErr = 3400005 // 鏇存柊璁㈠崟绠$悊澶辫触
OrderManageDeleteErr = 3400006 // 鍒犻櫎璁㈠崟绠$悊澶辫触
+ ServiceFollowupExist = 3500001 // 鏈嶅姟璺熻繘宸插瓨鍦�
+ ServiceFollowupNotExist = 3500002 // 鏈嶅姟璺熻繘涓嶅瓨鍦�
+ ServiceFollowupListErr = 3500003 // 鑾峰彇鏈嶅姟璺熻繘鍒楄〃澶辫触
+ ServiceFollowupSetErr = 3500004 // 璁剧疆鏈嶅姟璺熻繘澶辫触
+ ServiceFollowupUpdateErr = 3500005 // 鏇存柊鏈嶅姟璺熻繘澶辫触
+ ServiceFollowupDeleteErr = 3500006 // 鍒犻櫎鏈嶅姟璺熻繘澶辫触
)
diff --git a/router/index.go b/router/index.go
index ce4efd2..3fba11a 100644
--- a/router/index.go
+++ b/router/index.go
@@ -47,6 +47,7 @@
PlanRouter
ServiceContractRouter
OrderManageRouter
+ ServiceFollowupRouter
}
func InitRouter() *gin.Engine {
@@ -111,6 +112,7 @@
routerGroup.InitPlanRouter(PrivateGroup) // 娉ㄥ唽plan璺敱
routerGroup.InitServiceContractRouter(PrivateGroup) // 娉ㄥ唽serviceContract璺敱
routerGroup.InitOrderManageRouter(PrivateGroup) // 娉ㄥ唽orderManage璺敱
+ routerGroup.InitServiceFollowupRouter(PrivateGroup) // 娉ㄥ唽serviceFollowup璺敱
}
return Router
}
diff --git a/router/serviceFollowup.go b/router/serviceFollowup.go
new file mode 100644
index 0000000..18c728b
--- /dev/null
+++ b/router/serviceFollowup.go
@@ -0,0 +1,19 @@
+package router
+
+import (
+ v1 "aps_crm/api/v1"
+ "github.com/gin-gonic/gin"
+)
+
+type ServiceFollowupRouter struct{}
+
+func (s *ServiceFollowupRouter) InitServiceFollowupRouter(router *gin.RouterGroup) {
+ serviceFollowupRouter := router.Group("serviceFollowup")
+ serviceFollowupApi := v1.ApiGroup.ServiceFollowupApi
+ {
+ serviceFollowupRouter.POST("add", serviceFollowupApi.Add) // 娣诲姞鏈嶅姟璺熻繘
+ serviceFollowupRouter.DELETE("delete/:id", serviceFollowupApi.Delete) // 鍒犻櫎鏈嶅姟璺熻繘
+ serviceFollowupRouter.PUT("update", serviceFollowupApi.Update) // 鏇存柊鏈嶅姟璺熻繘
+ serviceFollowupRouter.GET("list", serviceFollowupApi.List) // 鑾峰彇鏈嶅姟璺熻繘鍒楄〃
+ }
+}
diff --git a/service/index.go b/service/index.go
index 40b102e..ccfcca8 100644
--- a/service/index.go
+++ b/service/index.go
@@ -36,6 +36,7 @@
PlanService
SContractService
OrderManageService
+ FollowupService
}
var ServiceGroup = new(Group)
diff --git a/service/serviceFollowup.go b/service/serviceFollowup.go
new file mode 100644
index 0000000..83ea5f5
--- /dev/null
+++ b/service/serviceFollowup.go
@@ -0,0 +1,54 @@
+package service
+
+import (
+ "aps_crm/model"
+ "aps_crm/pkg/ecode"
+)
+
+type FollowupService struct{}
+
+func (FollowupService) AddServiceFollowup(serviceFollowup *model.ServiceFollowup) int {
+ err := model.NewServiceFollowupSearch().Create(serviceFollowup)
+ if err != nil {
+ return ecode.ServiceFollowupExist
+ }
+
+ return ecode.OK
+}
+
+func (FollowupService) DeleteServiceFollowup(id int) int {
+ _, err := model.NewServiceFollowupSearch().SetId(id).Find()
+ if err != nil {
+ return ecode.ServiceFollowupNotExist
+ }
+
+ err = model.NewServiceFollowupSearch().SetId(id).Delete()
+ if err != nil {
+ return ecode.ServiceFollowupNotExist
+ }
+ return ecode.OK
+}
+
+func (FollowupService) GetServiceFollowupList() ([]*model.ServiceFollowup, int) {
+ list, err := model.NewServiceFollowupSearch().FindAll()
+ if err != nil {
+ return nil, ecode.ServiceFollowupListErr
+ }
+
+ return list, ecode.OK
+}
+
+func (FollowupService) UpdateServiceFollowup(serviceFollowup *model.ServiceFollowup) int {
+ // check serviceFollowup exist
+ _, err := model.NewServiceFollowupSearch().SetId(serviceFollowup.Id).Find()
+ if err != nil {
+ return ecode.ServiceFollowupNotExist
+ }
+
+ err = model.NewServiceFollowupSearch().SetId(serviceFollowup.Id).Update(serviceFollowup)
+ if err != nil {
+ return ecode.ServiceFollowupSetErr
+ }
+
+ return ecode.OK
+}
--
Gitblit v1.8.0