From 090680391d6c9d51e31d30319ab6d35cc937aaf3 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期三, 09 八月 2023 14:42:26 +0800 Subject: [PATCH] 服务合同列表增加关联内容返回 --- model/serviceContract.go | 75 ++++--- api/v1/serviceContract.go | 352 +++++++++++++++++++------------------- docs/swagger.yaml | 16 + docs/docs.go | 23 ++ service/serviceContract.go | 6 docs/swagger.json | 23 ++ 6 files changed, 273 insertions(+), 222 deletions(-) diff --git a/api/v1/serviceContract.go b/api/v1/serviceContract.go index 38b78f2..7ab6147 100644 --- a/api/v1/serviceContract.go +++ b/api/v1/serviceContract.go @@ -1,176 +1,176 @@ -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" -) - -type ServiceContractApi struct{} - -// Add -// -// @Tags ServiceContract -// @Summary 娣诲姞鏈嶅姟鍚堝悓 -// @Produce application/json -// @Param object body request.AddServiceContract true "鏌ヨ鍙傛暟" -// @Success 200 {object} contextx.Response{} -// @Router /api/serviceContract/add [post] -func (s *ServiceContractApi) Add(c *gin.Context) { - var params request.AddServiceContract - ctx, ok := contextx.NewContext(c, ¶ms) - if !ok { - return - } - - errCode, serviceContract := checkServiceContractParams(params.ServiceContract) - if errCode != ecode.OK { - ctx.Fail(errCode) - return - } - - errCode = serviceContractService.AddServiceContract(&serviceContract) - if errCode != ecode.OK { - ctx.Fail(errCode) - return - } - - ctx.Ok() -} - -// Delete -// -// @Tags ServiceContract -// @Summary 鍒犻櫎鏈嶅姟鍚堝悓 -// @Produce application/json -// @Param object body request.DeleteserviceContract true "鏌ヨ鍙傛暟" -// @Success 200 {object} contextx.Response{} -// @Router /api/serviceContract/delete [delete] -func (s *ServiceContractApi) Delete(c *gin.Context) { - var params request.DeleteserviceContract - ctx, ok := contextx.NewContext(c, ¶ms) - if !ok { - return - } - - errCode := serviceContractService.DeleteServiceContract(params.Ids) - if errCode != ecode.OK { - ctx.Fail(errCode) - return - } - - ctx.Ok() -} - -// Update -// -// @Tags ServiceContract -// @Summary 鏇存柊鏈嶅姟鍚堝悓 -// @Produce application/json -// @Param object body request.UpdateServiceContract true "鏌ヨ鍙傛暟" -// @Success 200 {object} contextx.Response{} -// @Router /api/serviceContract/update [put] -func (s *ServiceContractApi) Update(c *gin.Context) { - var params request.UpdateServiceContract - ctx, ok := contextx.NewContext(c, ¶ms) - if !ok { - return - } - - errCode, serviceContract := checkServiceContractParams(params.ServiceContract) - if errCode != ecode.OK { - ctx.Fail(errCode) - return - } - - serviceContract.Id = params.Id - - errCode = serviceContractService.UpdateServiceContract(&serviceContract) - if errCode != ecode.OK { - ctx.Fail(errCode) - return - } - - ctx.Ok() -} - -// check params -func checkServiceContractParams(serviceContract request.ServiceContract) (errCode int, result model.ServiceContract) { - //if serviceContract.SignTime == "" { - // return ecode.InvalidParams, result - //} - // - //if serviceContract.Number == "" { - // return ecode.InvalidParams, result - //} - // - //if serviceContract.MemberId <= 0 { - // return ecode.InvalidParams, result - //} - - t, err := checkTimeFormat(serviceContract.SignTime) - if err != nil { - return ecode.InvalidParams, result - } - - result.SignTime = t - - t, err = checkTimeFormat(serviceContract.StartTime) - if err != nil { - return ecode.InvalidParams, result - } - - result.StartTime = t - - t, err = checkTimeFormat(serviceContract.EndTime) - if err != nil { - return ecode.InvalidParams, result - } - - result.EndTime = t - - result.Number = serviceContract.Number - result.MemberId = serviceContract.MemberId - result.Remark = serviceContract.Remark - result.ClientId = serviceContract.ClientId - result.ContactId = serviceContract.ContactId - result.SaleChanceId = serviceContract.SaleChanceId - result.QuotationId = serviceContract.QuotationId - result.ServiceContractTypeId = serviceContract.TypeId - result.ServiceContractStatusId = serviceContract.StatusId - result.ServiceTimes = serviceContract.ServiceTimes - result.Terms = serviceContract.Terms - result.Products = serviceContract.Products - - return ecode.OK, result -} - -// List -// -// @Tags ServiceContract -// @Summary 鐢熸垚璁″垝鍒楄〃 -// @Produce application/json -// @Param object body request.GetServiceContractList true "鍙傛暟" -// @Success 200 {object} contextx.Response{data=response.ServiceContractsResponse} -// @Router /api/serviceContract/list [post] -func (con *ServiceContractApi) List(c *gin.Context) { - var params request.GetServiceContractList - ctx, ok := contextx.NewContext(c, ¶ms) - if !ok { - return - } - - serviceContracts, total, errCode := serviceContractService.GetServiceContractList(params.Page, params.PageSize, params.QueryClass, params.KeywordType, params.Keyword) - if errCode != ecode.OK { - ctx.Fail(errCode) - return - } - - ctx.OkWithDetailed(response.ServiceContractsResponse{ - List: serviceContracts, - Count: int(total), - }) -} +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" +) + +type ServiceContractApi struct{} + +// Add +// +// @Tags ServiceContract +// @Summary 娣诲姞鏈嶅姟鍚堝悓 +// @Produce application/json +// @Param object body request.AddServiceContract true "鏌ヨ鍙傛暟" +// @Success 200 {object} contextx.Response{} +// @Router /api/serviceContract/add [post] +func (s *ServiceContractApi) Add(c *gin.Context) { + var params request.AddServiceContract + ctx, ok := contextx.NewContext(c, ¶ms) + if !ok { + return + } + + errCode, serviceContract := checkServiceContractParams(params.ServiceContract) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + errCode = serviceContractService.AddServiceContract(&serviceContract) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + ctx.Ok() +} + +// Delete +// +// @Tags ServiceContract +// @Summary 鍒犻櫎鏈嶅姟鍚堝悓 +// @Produce application/json +// @Param object body request.DeleteserviceContract true "鏌ヨ鍙傛暟" +// @Success 200 {object} contextx.Response{} +// @Router /api/serviceContract/delete [delete] +func (s *ServiceContractApi) Delete(c *gin.Context) { + var params request.DeleteserviceContract + ctx, ok := contextx.NewContext(c, ¶ms) + if !ok { + return + } + + errCode := serviceContractService.DeleteServiceContract(params.Ids) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + ctx.Ok() +} + +// Update +// +// @Tags ServiceContract +// @Summary 鏇存柊鏈嶅姟鍚堝悓 +// @Produce application/json +// @Param object body request.UpdateServiceContract true "鏌ヨ鍙傛暟" +// @Success 200 {object} contextx.Response{} +// @Router /api/serviceContract/update [put] +func (s *ServiceContractApi) Update(c *gin.Context) { + var params request.UpdateServiceContract + ctx, ok := contextx.NewContext(c, ¶ms) + if !ok { + return + } + + errCode, serviceContract := checkServiceContractParams(params.ServiceContract) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + serviceContract.Id = params.Id + + errCode = serviceContractService.UpdateServiceContract(&serviceContract) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + ctx.Ok() +} + +// check params +func checkServiceContractParams(serviceContract request.ServiceContract) (errCode int, result model.ServiceContract) { + //if serviceContract.SignTime == "" { + // return ecode.InvalidParams, result + //} + // + //if serviceContract.Number == "" { + // return ecode.InvalidParams, result + //} + // + //if serviceContract.MemberId <= 0 { + // return ecode.InvalidParams, result + //} + + t, err := checkTimeFormat(serviceContract.SignTime) + if err != nil { + return ecode.InvalidParams, result + } + + result.SignTime = t + + t, err = checkTimeFormat(serviceContract.StartTime) + if err != nil { + return ecode.InvalidParams, result + } + + result.StartTime = t + + t, err = checkTimeFormat(serviceContract.EndTime) + if err != nil { + return ecode.InvalidParams, result + } + + result.EndTime = t + + result.Number = serviceContract.Number + result.MemberId = serviceContract.MemberId + result.Remark = serviceContract.Remark + result.ClientId = serviceContract.ClientId + result.ContactId = serviceContract.ContactId + result.SaleChanceId = serviceContract.SaleChanceId + result.QuotationId = serviceContract.QuotationId + result.ServiceContractTypeId = serviceContract.TypeId + result.ServiceContractStatusId = serviceContract.StatusId + result.ServiceTimes = serviceContract.ServiceTimes + result.Terms = serviceContract.Terms + result.Products = serviceContract.Products + + return ecode.OK, result +} + +// List +// +// @Tags ServiceContract +// @Summary 鏈嶅姟鍚堝悓鍒楄〃 +// @Produce application/json +// @Param object body request.GetServiceContractList true "鍙傛暟" +// @Success 200 {object} contextx.Response{data=response.ServiceContractsResponse} +// @Router /api/serviceContract/list [post] +func (con *ServiceContractApi) List(c *gin.Context) { + var params request.GetServiceContractList + ctx, ok := contextx.NewContext(c, ¶ms) + if !ok { + return + } + + serviceContracts, total, errCode := serviceContractService.GetServiceContractList(params.Page, params.PageSize, params.QueryClass, params.KeywordType, params.Keyword) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + ctx.OkWithDetailed(response.ServiceContractsResponse{ + List: serviceContracts, + Count: int(total), + }) +} diff --git a/docs/docs.go b/docs/docs.go index 9be43ac..cce75ae 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -7642,7 +7642,7 @@ "tags": [ "ServiceContract" ], - "summary": "鐢熸垚璁″垝鍒楄〃", + "summary": "鏈嶅姟鍚堝悓鍒楄〃", "parameters": [ { "description": "鍙傛暟", @@ -11366,6 +11366,9 @@ "model.ServiceContract": { "type": "object", "properties": { + "SaleChance": { + "$ref": "#/definitions/model.SaleChance" + }, "amountInvoiced": { "description": "宸插紑绁ㄩ噾棰�", "type": "number" @@ -11382,9 +11385,6 @@ "type": "integer" }, "contactId": { - "type": "integer" - }, - "contractId": { "type": "integer" }, "endTime": { @@ -11405,6 +11405,9 @@ "$ref": "#/definitions/model.Product" } }, + "quotation": { + "$ref": "#/definitions/model.Quotation" + }, "quotationId": { "type": "integer" }, @@ -11414,9 +11417,21 @@ "saleChanceId": { "type": "integer" }, + "salesDetails": { + "$ref": "#/definitions/model.SalesDetails" + }, + "salesDetailsId": { + "type": "integer" + }, + "serviceContractStatus": { + "$ref": "#/definitions/model.ServiceContractStatus" + }, "serviceContractStatusId": { "type": "integer" }, + "serviceContractType": { + "$ref": "#/definitions/model.ServiceContractType" + }, "serviceContractTypeId": { "type": "integer" }, diff --git a/docs/swagger.json b/docs/swagger.json index ab6def1..fc4f0c6 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -7630,7 +7630,7 @@ "tags": [ "ServiceContract" ], - "summary": "鐢熸垚璁″垝鍒楄〃", + "summary": "鏈嶅姟鍚堝悓鍒楄〃", "parameters": [ { "description": "鍙傛暟", @@ -11354,6 +11354,9 @@ "model.ServiceContract": { "type": "object", "properties": { + "SaleChance": { + "$ref": "#/definitions/model.SaleChance" + }, "amountInvoiced": { "description": "宸插紑绁ㄩ噾棰�", "type": "number" @@ -11370,9 +11373,6 @@ "type": "integer" }, "contactId": { - "type": "integer" - }, - "contractId": { "type": "integer" }, "endTime": { @@ -11393,6 +11393,9 @@ "$ref": "#/definitions/model.Product" } }, + "quotation": { + "$ref": "#/definitions/model.Quotation" + }, "quotationId": { "type": "integer" }, @@ -11402,9 +11405,21 @@ "saleChanceId": { "type": "integer" }, + "salesDetails": { + "$ref": "#/definitions/model.SalesDetails" + }, + "salesDetailsId": { + "type": "integer" + }, + "serviceContractStatus": { + "$ref": "#/definitions/model.ServiceContractStatus" + }, "serviceContractStatusId": { "type": "integer" }, + "serviceContractType": { + "$ref": "#/definitions/model.ServiceContractType" + }, "serviceContractTypeId": { "type": "integer" }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 9c4a623..fcc473d 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1271,6 +1271,8 @@ type: object model.ServiceContract: properties: + SaleChance: + $ref: '#/definitions/model.SaleChance' amountInvoiced: description: 宸插紑绁ㄩ噾棰� type: number @@ -1284,8 +1286,6 @@ type: integer contactId: type: integer - contractId: - type: integer endTime: type: string id: @@ -1298,14 +1298,24 @@ items: $ref: '#/definitions/model.Product' type: array + quotation: + $ref: '#/definitions/model.Quotation' quotationId: type: integer remark: type: string saleChanceId: type: integer + salesDetails: + $ref: '#/definitions/model.SalesDetails' + salesDetailsId: + type: integer + serviceContractStatus: + $ref: '#/definitions/model.ServiceContractStatus' serviceContractStatusId: type: integer + serviceContractType: + $ref: '#/definitions/model.ServiceContractType' serviceContractTypeId: type: integer serviceTimes: @@ -10002,7 +10012,7 @@ data: $ref: '#/definitions/response.ServiceContractsResponse' type: object - summary: 鐢熸垚璁″垝鍒楄〃 + summary: 鏈嶅姟鍚堝悓鍒楄〃 tags: - ServiceContract /api/serviceContract/update: diff --git a/model/serviceContract.go b/model/serviceContract.go index 5c5a497..ef16fbe 100644 --- a/model/serviceContract.go +++ b/model/serviceContract.go @@ -11,26 +11,31 @@ type ( ServiceContract 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:鍚堝悓缂栧彿"` - MemberId int `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"` - ContactId int `json:"contactId" gorm:"column:contact_id;type:int;comment:鑱旂郴浜篿d"` - SaleChanceId int `json:"saleChanceId" gorm:"column:sale_chance_id;type:int;comment:閿�鍞満浼歩d"` - ContractId int `json:"contractId" gorm:"column:contract_id;type:int;comment:鍚堝悓id"` - QuotationId int `json:"quotationId" gorm:"column:quotation_id;type:int;comment:鎶ヤ环鍗昳d"` - ServiceContractTypeId int `json:"serviceContractTypeId" gorm:"column:service_contract_type_id;type:int;comment:鍚堝悓绫诲瀷id"` - SignTime time.Time `json:"signTime" gorm:"column:sign_time;type:datetime;comment:绛剧害鏃堕棿"` - StartTime time.Time `json:"startTime" gorm:"column:start_time;type:datetime;comment:寮�濮嬫椂闂�"` - EndTime time.Time `json:"endTime" gorm:"column:end_time;type:datetime;comment:缁撴潫鏃堕棿"` - ServiceContractStatusId int `json:"serviceContractStatusId" gorm:"column:service_contract_status_id;type:int;comment:鍚堝悓鐘舵�乮d"` - ServiceTimes int `json:"serviceTimes" gorm:"column:service_times;type:int;comment:鏈嶅姟娆℃暟"` - Terms string `json:"terms" gorm:"column:terms;type:text;comment:鏉℃"` - Remark string `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"` - AmountReceivable decimal.Decimal `gorm:"amount_receivable" json:"amountReceivable"` // 搴旀敹閲戦 - AmountReceived decimal.Decimal `gorm:"amount_received" json:"amountReceived"` // 宸叉敹閲戦 - AmountInvoiced decimal.Decimal `gorm:"amount_invoiced" json:"amountInvoiced"` // 宸插紑绁ㄩ噾棰� - Products []Product `json:"products" gorm:"many2many:serviceContract_product;"` + 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:鍚堝悓缂栧彿"` + MemberId int `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"` + ContactId int `json:"contactId" gorm:"column:contact_id;type:int;comment:鑱旂郴浜篿d"` + SaleChanceId int `json:"saleChanceId" gorm:"column:sale_chance_id;type:int;comment:閿�鍞満浼歩d"` + SaleChance SaleChance `json:"SaleChance" gorm:"foreignKey:SaleChanceId"` + SalesDetailsId int `json:"salesDetailsId" gorm:"column:sales_details_id;type:int;comment:鍚堝悓璁㈠崟id"` + SalesDetails SalesDetails `json:"salesDetails" gorm:"foreignKey:SalesDetailsId"` + QuotationId int `json:"quotationId" gorm:"column:quotation_id;type:int;comment:鎶ヤ环鍗昳d"` + 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 time.Time `json:"signTime" gorm:"column:sign_time;type:datetime;comment:绛剧害鏃堕棿"` + StartTime time.Time `json:"startTime" gorm:"column:start_time;type:datetime;comment:寮�濮嬫椂闂�"` + EndTime time.Time `json:"endTime" gorm:"column:end_time;type:datetime;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:鏈嶅姟娆℃暟"` + Terms string `json:"terms" gorm:"column:terms;type:text;comment:鏉℃"` + Remark string `json:"remark" gorm:"column:remark;type:text;comment:澶囨敞"` + AmountReceivable decimal.Decimal `gorm:"amount_receivable" json:"amountReceivable"` // 搴旀敹閲戦 + AmountReceived decimal.Decimal `gorm:"amount_received" json:"amountReceived"` // 宸叉敹閲戦 + AmountInvoiced decimal.Decimal `gorm:"amount_invoiced" json:"amountInvoiced"` // 宸插紑绁ㄩ噾棰� + Products []Product `json:"products" gorm:"many2many:service_contract_product;"` gorm.Model `json:"-"` } @@ -44,6 +49,7 @@ OrderBy string PageNum int PageSize int + Preload bool } ) @@ -97,6 +103,15 @@ //todo } + if slf.Preload { + db = db. + Preload("SaleChance"). + Preload("SalesDetails"). + Preload("Quotation"). + Preload("ServiceContractType"). + Preload("ServiceContractStatus"). + Preload("Products") + } return db } @@ -116,14 +131,7 @@ return db.Delete(&ServiceContract{}).Error } -func (slf *ServiceContractSearch) Find() (*ServiceContract, error) { - var db = slf.build() - var record = &ServiceContract{} - err := db.First(record).Error - return record, err -} - -func (slf *ServiceContractSearch) FindAll() ([]*ServiceContract, int64, error) { +func (slf *ServiceContractSearch) Find() ([]*ServiceContract, int64, error) { var db = slf.build() var records = make([]*ServiceContract, 0) var total int64 @@ -134,11 +142,7 @@ 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("Products").Find(&records).Error + err := db.Find(&records).Error return records, total, err } @@ -176,6 +180,11 @@ return slf } +func (slf *ServiceContractSearch) SetPreload(preload bool) *ServiceContractSearch { + slf.Preload = preload + return slf +} + func (slf *ServiceContractSearch) UpdateByMap(upMap map[string]interface{}) error { var ( db = slf.build() diff --git a/service/serviceContract.go b/service/serviceContract.go index 45907c8..664382f 100644 --- a/service/serviceContract.go +++ b/service/serviceContract.go @@ -19,7 +19,7 @@ func (SContractService) UpdateServiceContract(serviceContract *model.ServiceContract) int { // check serviceContract exist - _, err := model.NewServiceContractSearch().SetId(serviceContract.Id).Find() + _, err := model.NewServiceContractSearch().SetId(serviceContract.Id).First() if err != nil { return ecode.SContractNotExist } @@ -56,7 +56,9 @@ SetKeyword(keyword). SetKeywordType(keywordType). SetQueryClass(queryClass). - SetPage(page, pageSize).FindAll() + SetPage(page, pageSize). + SetPreload(true). + Find() if err != nil { return nil, 0, ecode.SContractListErr } -- Gitblit v1.8.0