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