From 00c086f3158e8841ab495c62c3c41720e27456e0 Mon Sep 17 00:00:00 2001 From: wangpengfei <274878379@qq.com> Date: 星期二, 11 七月 2023 15:25:58 +0800 Subject: [PATCH] add --- api/v1/index.go | 2 api/v1/subOrder.go | 141 +++++++++ model/request/subOrder.go | 20 + pkg/ecode/code.go | 7 docs/swagger.yaml | 122 ++++++++ docs/docs.go | 190 ++++++++++++ docs/swagger.json | 190 ++++++++++++ model/response/response.go | 4 model/product.go | 18 + service/index.go | 1 router/subOrder.go | 19 + model/index.go | 2 service/subOrder.go | 54 +++ logs/aps-admin.err.log | 13 router/index.go | 2 model/subOrder.go | 74 ++++ 16 files changed, 859 insertions(+), 0 deletions(-) diff --git a/api/v1/index.go b/api/v1/index.go index a226025..af7f83b 100644 --- a/api/v1/index.go +++ b/api/v1/index.go @@ -33,6 +33,7 @@ StatusApi QuotationApi MasterOrderApi + SubOrderApi } var ApiGroup = new(Group) @@ -65,4 +66,5 @@ statusService = service.ServiceGroup.StatusService quotationService = service.ServiceGroup.QuotationService masterOrderService = service.ServiceGroup.MasterOrderService + subOrderService = service.ServiceGroup.SubOrderService ) diff --git a/api/v1/subOrder.go b/api/v1/subOrder.go new file mode 100644 index 0000000..2ec0fd3 --- /dev/null +++ b/api/v1/subOrder.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 SubOrderApi struct{} + +// Add +// +// @Tags SubOrder +// @Summary 娣诲姞瀛愯鍗� +// @Produce application/json +// @Param object body request.AddSubOrder true "鏌ヨ鍙傛暟" +// @Success 200 {object} contextx.Response{} +// @Router /api/subOrder/add [post] +func (s *SubOrderApi) Add(c *gin.Context) { + var params request.AddSubOrder + ctx, ok := contextx.NewContext(c, ¶ms) + if !ok { + return + } + + errCode, subOrder := checkSubOrderParams(params.SubOrder) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + errCode = subOrderService.AddSubOrder(&subOrder) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + ctx.Ok() +} + +// Delete +// +// @Tags SubOrder +// @Summary 鍒犻櫎瀛愯鍗� +// @Produce application/json +// @Param id path int true "鏌ヨ鍙傛暟" +// @Success 200 {object} contextx.Response{} +// @Router /api/subOrder/delete/{id} [delete] +func (s *SubOrderApi) Delete(c *gin.Context) { + ctx, ok := contextx.NewContext(c, nil) + if !ok { + return + } + + id, _ := strconv.Atoi(c.Param("id")) + errCode := subOrderService.DeleteSubOrder(id) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + ctx.Ok() +} + +// Update +// +// @Tags SubOrder +// @Summary 鏇存柊瀛愯鍗� +// @Produce application/json +// @Param object body request.UpdateSubOrder true "鏌ヨ鍙傛暟" +// @Success 200 {object} contextx.Response{} +// @Router /api/subOrder/update [put] +func (s *SubOrderApi) Update(c *gin.Context) { + var params request.UpdateSubOrder + ctx, ok := contextx.NewContext(c, ¶ms) + if !ok { + return + } + + errCode, subOrder := checkSubOrderParams(params.SubOrder) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + errCode = subOrderService.UpdateSubOrder(&subOrder) + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + ctx.Ok() +} + +// List +// +// @Tags SubOrder +// @Summary 鑾峰彇瀛愯鍗曞垪琛� +// @Produce application/json +// @Success 200 {object} contextx.Response{} +// @Router /api/subOrder/list [get] +func (s *SubOrderApi) List(c *gin.Context) { + ctx, ok := contextx.NewContext(c, nil) + if !ok { + return + } + + subOrders, errCode := subOrderService.GetSubOrderList() + if errCode != ecode.OK { + ctx.Fail(errCode) + return + } + + ctx.OkWithDetailed(response.SubOrderResponse{ + List: subOrders, + }) +} + +// checkSubOrderParams +// 妫�鏌ュ瓙璁㈠崟鍙傛暟 +func checkSubOrderParams(subOrder request.SubOrder) (errCode int, newSubOrder model.SubOrder) { + if subOrder.Number == "" { + return ecode.InvalidParams, newSubOrder + } + if subOrder.MemberId == 0 { + return ecode.InvalidParams, newSubOrder + } + + newSubOrder.ClientId = subOrder.ClientId + newSubOrder.MasterOrderId = subOrder.MasterOrderId + newSubOrder.Number = subOrder.Number + newSubOrder.MemberId = subOrder.MemberId + + newSubOrder.Products = subOrder.Product + + return ecode.OK, newSubOrder +} diff --git a/docs/docs.go b/docs/docs.go index d9ffe10..1ef0d67 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -3163,6 +3163,113 @@ } } }, + "/api/subOrder/add": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "SubOrder" + ], + "summary": "娣诲姞瀛愯鍗�", + "parameters": [ + { + "description": "鏌ヨ鍙傛暟", + "name": "object", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.AddSubOrder" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/contextx.Response" + } + } + } + } + }, + "/api/subOrder/delete/{id}": { + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "SubOrder" + ], + "summary": "鍒犻櫎瀛愯鍗�", + "parameters": [ + { + "type": "integer", + "description": "鏌ヨ鍙傛暟", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/contextx.Response" + } + } + } + } + }, + "/api/subOrder/list": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "SubOrder" + ], + "summary": "鑾峰彇瀛愯鍗曞垪琛�", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/contextx.Response" + } + } + } + } + }, + "/api/subOrder/update": { + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "SubOrder" + ], + "summary": "鏇存柊瀛愯鍗�", + "parameters": [ + { + "description": "鏌ヨ鍙傛暟", + "name": "object", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.UpdateSubOrder" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/contextx.Response" + } + } + } + } + }, "/api/user/changePassword": { "post": { "produces": [ @@ -3942,6 +4049,32 @@ }, "name": { "type": "string" + } + } + }, + "model.Product": { + "type": "object", + "properties": { + "amount": { + "type": "integer" + }, + "desc": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "number": { + "type": "string" + }, + "price": { + "type": "number" + }, + "total": { + "type": "number" } } }, @@ -4881,6 +5014,14 @@ } } }, + "request.AddSubOrder": { + "type": "object", + "properties": { + "subOrder": { + "$ref": "#/definitions/request.SubOrder" + } + } + }, "request.ChangePasswordReq": { "type": "object", "properties": { @@ -5165,6 +5306,29 @@ "type": "array", "items": { "type": "integer" + } + } + } + }, + "request.SubOrder": { + "type": "object", + "properties": { + "clientId": { + "type": "integer" + }, + "masterOrderId": { + "type": "integer" + }, + "memberId": { + "type": "integer" + }, + "number": { + "type": "string" + }, + "product": { + "type": "array", + "items": { + "$ref": "#/definitions/model.Product" } } } @@ -6047,6 +6211,32 @@ } } }, + "request.UpdateSubOrder": { + "type": "object", + "properties": { + "clientId": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "masterOrderId": { + "type": "integer" + }, + "memberId": { + "type": "integer" + }, + "number": { + "type": "string" + }, + "product": { + "type": "array", + "items": { + "$ref": "#/definitions/model.Product" + } + } + } + }, "response.CityResponse": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index c0e0598..ab980ca 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -3151,6 +3151,113 @@ } } }, + "/api/subOrder/add": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "SubOrder" + ], + "summary": "娣诲姞瀛愯鍗�", + "parameters": [ + { + "description": "鏌ヨ鍙傛暟", + "name": "object", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.AddSubOrder" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/contextx.Response" + } + } + } + } + }, + "/api/subOrder/delete/{id}": { + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "SubOrder" + ], + "summary": "鍒犻櫎瀛愯鍗�", + "parameters": [ + { + "type": "integer", + "description": "鏌ヨ鍙傛暟", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/contextx.Response" + } + } + } + } + }, + "/api/subOrder/list": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "SubOrder" + ], + "summary": "鑾峰彇瀛愯鍗曞垪琛�", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/contextx.Response" + } + } + } + } + }, + "/api/subOrder/update": { + "put": { + "produces": [ + "application/json" + ], + "tags": [ + "SubOrder" + ], + "summary": "鏇存柊瀛愯鍗�", + "parameters": [ + { + "description": "鏌ヨ鍙傛暟", + "name": "object", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.UpdateSubOrder" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/contextx.Response" + } + } + } + } + }, "/api/user/changePassword": { "post": { "produces": [ @@ -3930,6 +4037,32 @@ }, "name": { "type": "string" + } + } + }, + "model.Product": { + "type": "object", + "properties": { + "amount": { + "type": "integer" + }, + "desc": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "number": { + "type": "string" + }, + "price": { + "type": "number" + }, + "total": { + "type": "number" } } }, @@ -4869,6 +5002,14 @@ } } }, + "request.AddSubOrder": { + "type": "object", + "properties": { + "subOrder": { + "$ref": "#/definitions/request.SubOrder" + } + } + }, "request.ChangePasswordReq": { "type": "object", "properties": { @@ -5153,6 +5294,29 @@ "type": "array", "items": { "type": "integer" + } + } + } + }, + "request.SubOrder": { + "type": "object", + "properties": { + "clientId": { + "type": "integer" + }, + "masterOrderId": { + "type": "integer" + }, + "memberId": { + "type": "integer" + }, + "number": { + "type": "string" + }, + "product": { + "type": "array", + "items": { + "$ref": "#/definitions/model.Product" } } } @@ -6035,6 +6199,32 @@ } } }, + "request.UpdateSubOrder": { + "type": "object", + "properties": { + "clientId": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "masterOrderId": { + "type": "integer" + }, + "memberId": { + "type": "integer" + }, + "number": { + "type": "string" + }, + "product": { + "type": "array", + "items": { + "$ref": "#/definitions/model.Product" + } + } + } + }, "response.CityResponse": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 176ac93..3d30a6b 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -355,6 +355,23 @@ name: type: string type: object + model.Product: + properties: + amount: + type: integer + desc: + type: string + id: + type: integer + name: + type: string + number: + type: string + price: + type: number + total: + type: number + type: object model.Province: properties: cities: @@ -984,6 +1001,11 @@ required: - name type: object + request.AddSubOrder: + properties: + subOrder: + $ref: '#/definitions/request.SubOrder' + type: object request.ChangePasswordReq: properties: newPassword: @@ -1185,6 +1207,21 @@ description: 鍦板尯ID鍒楄〃 items: type: integer + type: array + type: object + request.SubOrder: + properties: + clientId: + type: integer + masterOrderId: + type: integer + memberId: + type: integer + number: + type: string + product: + items: + $ref: '#/definitions/model.Product' type: array type: object request.UpdateCities: @@ -1780,6 +1817,23 @@ type: array required: - list + type: object + request.UpdateSubOrder: + properties: + clientId: + type: integer + id: + type: integer + masterOrderId: + type: integer + memberId: + type: integer + number: + type: string + product: + items: + $ref: '#/definitions/model.Product' + type: array type: object response.CityResponse: properties: @@ -3900,6 +3954,74 @@ summary: 鏇存柊鐘舵�� tags: - Status + /api/subOrder/add: + post: + parameters: + - description: 鏌ヨ鍙傛暟 + in: body + name: object + required: true + schema: + $ref: '#/definitions/request.AddSubOrder' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/contextx.Response' + summary: 娣诲姞瀛愯鍗� + tags: + - SubOrder + /api/subOrder/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: + - SubOrder + /api/subOrder/list: + get: + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/contextx.Response' + summary: 鑾峰彇瀛愯鍗曞垪琛� + tags: + - SubOrder + /api/subOrder/update: + put: + parameters: + - description: 鏌ヨ鍙傛暟 + in: body + name: object + required: true + schema: + $ref: '#/definitions/request.UpdateSubOrder' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/contextx.Response' + summary: 鏇存柊瀛愯鍗� + tags: + - SubOrder /api/user/changePassword: post: parameters: diff --git a/logs/aps-admin.err.log b/logs/aps-admin.err.log index ff4e4b6..dd58b9b 100644 --- a/logs/aps-admin.err.log +++ b/logs/aps-admin.err.log @@ -332,3 +332,16 @@ [2023-07-06 13:55:26] [error] [gorm.io/driver/mysql.Migrator.AlterColumn.func1:59] trace {"error": "Error 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length", "elapsed": 0.0007354, "rows": 0, "sql": "ALTER TABLE `client_level` MODIFY COLUMN `name` longtext"} [2023-07-06 13:55:26] [error] [main.main:29] model Init err:Error 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length [2023-07-10 11:06:33] [error] [aps_crm/model.(*PossibilitySearch).Create:46] trace {"error": "Error 1146 (42S02): Table 'aps_crm.possibility' doesn't exist", "elapsed": 0.0032687, "rows": 0, "sql": "INSERT INTO `possibility` (`name`) VALUES ('10')"} +[2023-07-10 20:54:43] [error] [aps_crm/model.(*SubOrderSearch).Create:45] trace {"error": "Error 1146 (42S02): Table 'aps_crm.sub_order' doesn't exist", "elapsed": 0.001705, "rows": 0, "sql": "INSERT INTO `sub_order` (`client_id`,`member_id`,`master_order_id`,`number`,`created_at`,`updated_at`,`deleted_at`) VALUES (11,110,1,'AC6521','2023-07-10 20:54:43.768','2023-07-10 20:54:43.768',NULL)"} +[2023-07-11 10:43:59] [error] [gorm.io/gorm/migrator.Migrator.AutoMigrate:104] failed to parse value model.SubOrder{Id:0, ClientId:0, MemberId:0, MasterOrderId:0, Number:"", Products:[]model.Product(nil), Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}}, got error invalid field found for struct aps_crm/model.SubOrder's field Products: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 10:43:59] [error] [gorm.io/gorm/migrator.Migrator.CreateTable:198] failed to parse value model.SubOrder{Id:0, ClientId:0, MemberId:0, MasterOrderId:0, Number:"", Products:[]model.Product(nil), Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}}, got error invalid field found for struct aps_crm/model.SubOrder's field Products: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 10:43:59] [error] [main.main:29] model Init err:invalid field found for struct aps_crm/model.SubOrder's field Products: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 11:31:58] [error] [gorm.io/gorm/migrator.Migrator.AutoMigrate:104] failed to parse value model.SubOrder{Id:0, ClientId:0, MemberId:0, MasterOrderId:0, Number:"", ProductOrder:model.ProductOrder{Id:0, Products:[]model.Product(nil)}, Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}}, got error invalid field found for struct aps_crm/model.SubOrder's field ProductOrder: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 11:31:58] [error] [gorm.io/gorm/migrator.Migrator.CreateTable:198] failed to parse value model.SubOrder{Id:0, ClientId:0, MemberId:0, MasterOrderId:0, Number:"", ProductOrder:model.ProductOrder{Id:0, Products:[]model.Product(nil)}, Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}}, got error invalid field found for struct aps_crm/model.SubOrder's field ProductOrder: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 11:31:58] [error] [main.main:29] model Init err:invalid field found for struct aps_crm/model.SubOrder's field ProductOrder: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 11:32:32] [error] [gorm.io/gorm/migrator.Migrator.AutoMigrate:104] failed to parse value model.SubOrder{Id:0, ClientId:0, MemberId:0, MasterOrderId:0, Number:"", ProductOrder:model.ProductOrder{Id:0, Products:[]model.Product(nil)}, Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}}, got error invalid field found for struct aps_crm/model.SubOrder's field ProductOrder: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 11:32:32] [error] [gorm.io/gorm/migrator.Migrator.CreateTable:198] failed to parse value model.SubOrder{Id:0, ClientId:0, MemberId:0, MasterOrderId:0, Number:"", ProductOrder:model.ProductOrder{Id:0, Products:[]model.Product(nil)}, Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}}, got error invalid field found for struct aps_crm/model.SubOrder's field ProductOrder: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 11:32:32] [error] [main.main:29] model Init err:invalid field found for struct aps_crm/model.SubOrder's field ProductOrder: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 11:33:55] [error] [gorm.io/gorm/migrator.Migrator.AutoMigrate:104] failed to parse value model.SubOrder{Id:0, ClientId:0, MemberId:0, MasterOrderId:0, Number:"", ProductOrder:model.ProductOrder{Id:0, Products:[]model.Product(nil)}, Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}}, got error invalid field found for struct aps_crm/model.SubOrder's field ProductOrder: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 11:33:55] [error] [gorm.io/gorm/migrator.Migrator.CreateTable:198] failed to parse value model.SubOrder{Id:0, ClientId:0, MemberId:0, MasterOrderId:0, Number:"", ProductOrder:model.ProductOrder{Id:0, Products:[]model.Product(nil)}, Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}}, got error invalid field found for struct aps_crm/model.SubOrder's field ProductOrder: define a valid foreign key for relations or implement the Valuer/Scanner interface +[2023-07-11 11:33:55] [error] [main.main:29] model Init err:invalid field found for struct aps_crm/model.SubOrder's field ProductOrder: define a valid foreign key for relations or implement the Valuer/Scanner interface diff --git a/model/index.go b/model/index.go index cda1221..91a30b1 100644 --- a/model/index.go +++ b/model/index.go @@ -48,6 +48,8 @@ Status{}, Quotation{}, MasterOrder{}, + SubOrder{}, + Product{}, ) return err } diff --git a/model/product.go b/model/product.go new file mode 100644 index 0000000..029857b --- /dev/null +++ b/model/product.go @@ -0,0 +1,18 @@ +package model + +import "gorm.io/gorm" + +type Product struct { + Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` + Name string `json:"name" gorm:"column:name;type:varchar(255);comment:浜у搧鍚嶇О"` + Price float64 `json:"price" gorm:"column:price;type:decimal(10,2);comment:浜у搧浠锋牸"` + Number string `json:"number" gorm:"column:number;type:varchar(255);comment:浜у搧缂栧彿"` + Amount int `json:"amount" gorm:"column:amount;type:int;comment:浜у搧鏁伴噺"` + Total float64 `json:"total" gorm:"column:total;type:decimal(10,2);comment:浜у搧鎬讳环"` + Desc string `json:"desc" gorm:"column:desc;type:varchar(255);comment:浜у搧鎻忚堪"` + gorm.Model `json:"-"` +} + +func (Product) TableName() string { + return "products" +} diff --git a/model/request/subOrder.go b/model/request/subOrder.go new file mode 100644 index 0000000..994550f --- /dev/null +++ b/model/request/subOrder.go @@ -0,0 +1,20 @@ +package request + +import "aps_crm/model" + +type AddSubOrder struct { + SubOrder SubOrder `json:"subOrder"` +} + +type SubOrder struct { + ClientId int `json:"clientId"` + MasterOrderId int `json:"masterOrderId"` + Number string `json:"number"` + MemberId int `json:"memberId"` + Product []model.Product `json:"product"` +} + +type UpdateSubOrder struct { + Id int `json:"id"` + SubOrder +} diff --git a/model/response/response.go b/model/response/response.go index 2142098..842c0f3 100644 --- a/model/response/response.go +++ b/model/response/response.go @@ -129,4 +129,8 @@ MasterOrderResponse struct { List []*model.MasterOrder `json:"list"` } + + SubOrderResponse struct { + List []*model.SubOrder `json:"list"` + } ) diff --git a/model/subOrder.go b/model/subOrder.go new file mode 100644 index 0000000..b1f3479 --- /dev/null +++ b/model/subOrder.go @@ -0,0 +1,74 @@ +package model + +import ( + "aps_crm/pkg/mysqlx" + "gorm.io/gorm" +) + +type ( + SubOrder struct { + Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` + ClientId int `json:"clientId" gorm:"column:client_id;type:int;comment:瀹㈡埛id"` + MemberId int `json:"memberId" gorm:"column:member_id;type:int;comment:璐熻矗浜篿d"` + MasterOrderId int `json:"masterOrderId" gorm:"column:master_order_id;type:int;comment:閿�鍞�诲崟id"` + Number string `json:"number" gorm:"column:number;type:varchar(255);comment:閿�鍞瓙鍗曞彿"` + Products []Product `json:"products" gorm:"many2many:subOrder_product;"` + gorm.Model `json:"-"` + } + + SubOrderSearch struct { + SubOrder + Orm *gorm.DB + } +) + +func (SubOrder) TableName() string { + return "sub_order" +} + +func NewSubOrderSearch() *SubOrderSearch { + return &SubOrderSearch{ + Orm: mysqlx.GetDB(), + } +} + +func (slf *SubOrderSearch) build() *gorm.DB { + var db = slf.Orm.Model(&SubOrder{}) + if slf.Id != 0 { + db = db.Where("id = ?", slf.Id) + } + + return db +} + +func (slf *SubOrderSearch) Create(record *SubOrder) error { + var db = slf.build() + return db.Create(record).Error +} + +func (slf *SubOrderSearch) Delete() error { + var db = slf.build() + return db.Delete(&SubOrder{}).Error +} + +func (slf *SubOrderSearch) Update(record *SubOrder) error { + var db = slf.build() + return db.Updates(record).Error +} + +func (slf *SubOrderSearch) Find() (result []SubOrder, err error) { + var db = slf.build() + err = db.Find(&result).Error + return +} + +func (slf *SubOrderSearch) FindAll() (result []*SubOrder, err error) { + var db = slf.build() + err = db.Preload("Products").Find(&result).Error + return +} + +func (slf *SubOrderSearch) SetId(id int) *SubOrderSearch { + slf.Id = id + return slf +} diff --git a/pkg/ecode/code.go b/pkg/ecode/code.go index e16bafd..867c208 100644 --- a/pkg/ecode/code.go +++ b/pkg/ecode/code.go @@ -191,4 +191,11 @@ MasterOrderUpdateErr = 2600005 // 鏇存柊涓昏鍗曞け璐� MasterOrderDeleteErr = 2600006 // 鍒犻櫎涓昏鍗曞け璐� + SubOrderExist = 2700001 // 瀛愯鍗曞凡瀛樺湪 + SubOrderNotExist = 2700002 // 瀛愯鍗曚笉瀛樺湪 + SubOrderListErr = 2700003 // 鑾峰彇瀛愯鍗曞垪琛ㄥけ璐� + SubOrderSetErr = 2700004 // 璁剧疆瀛愯鍗曞け璐� + SubOrderUpdateErr = 2700005 // 鏇存柊瀛愯鍗曞け璐� + SubOrderDeleteErr = 2700006 // 鍒犻櫎瀛愯鍗曞け璐� + ) diff --git a/router/index.go b/router/index.go index 9346158..2cf4c1b 100644 --- a/router/index.go +++ b/router/index.go @@ -39,6 +39,7 @@ StatusRouter QuotationRouter MasterOrderRouter + SubOrderRouter } func InitRouter() *gin.Engine { @@ -95,6 +96,7 @@ routerGroup.InitStatusRouter(PrivateGroup) // 娉ㄥ唽status璺敱 routerGroup.InitQuotationRouter(PrivateGroup) // 娉ㄥ唽quotation璺敱 routerGroup.InitMasterOrderRouter(PrivateGroup) // 娉ㄥ唽masterOrder璺敱 + routerGroup.InitSubOrderRouter(PrivateGroup) // 娉ㄥ唽subOrder璺敱 } return Router } diff --git a/router/subOrder.go b/router/subOrder.go new file mode 100644 index 0000000..1cd0197 --- /dev/null +++ b/router/subOrder.go @@ -0,0 +1,19 @@ +package router + +import ( + v1 "aps_crm/api/v1" + "github.com/gin-gonic/gin" +) + +type SubOrderRouter struct{} + +func (s *SubOrderRouter) InitSubOrderRouter(router *gin.RouterGroup) { + subOrderRouter := router.Group("subOrder") + subOrderApi := v1.ApiGroup.SubOrderApi + { + subOrderRouter.POST("add", subOrderApi.Add) // 娣诲姞瀛愯鍗� + subOrderRouter.DELETE("delete/:id", subOrderApi.Delete) // 鍒犻櫎瀛愯鍗� + subOrderRouter.PUT("update", subOrderApi.Update) // 鏇存柊瀛愯鍗� + subOrderRouter.GET("list", subOrderApi.List) // 鑾峰彇瀛愯鍗曞垪琛� + } +} diff --git a/service/index.go b/service/index.go index 26577e4..d8ab5e1 100644 --- a/service/index.go +++ b/service/index.go @@ -28,6 +28,7 @@ StatusService QuotationService MasterOrderService + SubOrderService } var ServiceGroup = new(Group) diff --git a/service/subOrder.go b/service/subOrder.go new file mode 100644 index 0000000..cf6df59 --- /dev/null +++ b/service/subOrder.go @@ -0,0 +1,54 @@ +package service + +import ( + "aps_crm/model" + "aps_crm/pkg/ecode" +) + +type SubOrderService struct{} + +func (SubOrderService) AddSubOrder(subOrder *model.SubOrder) int { + err := model.NewSubOrderSearch().Create(subOrder) + if err != nil { + return ecode.SubOrderExist + } + + return ecode.OK +} + +func (SubOrderService) DeleteSubOrder(id int) int { + _, err := model.NewSubOrderSearch().SetId(id).Find() + if err != nil { + return ecode.SubOrderNotExist + } + + err = model.NewSubOrderSearch().SetId(id).Delete() + if err != nil { + return ecode.SubOrderNotExist + } + return ecode.OK +} + +func (SubOrderService) GetSubOrderList() ([]*model.SubOrder, int) { + list, err := model.NewSubOrderSearch().FindAll() + if err != nil { + return nil, ecode.SubOrderListErr + } + + return list, ecode.OK +} + +func (SubOrderService) UpdateSubOrder(subOrder *model.SubOrder) int { + // check subOrder exist + _, err := model.NewSubOrderSearch().SetId(subOrder.Id).Find() + if err != nil { + return ecode.SubOrderNotExist + } + + err = model.NewSubOrderSearch().SetId(subOrder.Id).Update(subOrder) + if err != nil { + return ecode.SubOrderSetErr + } + + return ecode.OK +} -- Gitblit v1.8.0