更新猪群对应猪栏接口变更
This commit is contained in:
181
docs/docs.go
181
docs/docs.go
@@ -947,6 +947,83 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/api/v1/pig-batches/{batchID}/remove-pen/{penID}": {
|
||||||
|
"delete": {
|
||||||
|
"description": "将一个空闲猪栏从指定的猪批次中移除",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"猪批次管理"
|
||||||
|
],
|
||||||
|
"summary": "从猪批次移除空栏",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "猪批次ID",
|
||||||
|
"name": "batchID",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "待移除的猪栏ID",
|
||||||
|
"name": "penID",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "移除成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/controller.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/v1/pig-batches/{fromBatchID}/reclassify-pen": {
|
||||||
|
"post": {
|
||||||
|
"description": "将一个猪栏(连同其中的猪只)从一个批次整体划拨到另一个批次",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"猪批次管理"
|
||||||
|
],
|
||||||
|
"summary": "将猪栏划拨到新批次",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "源猪批次ID",
|
||||||
|
"name": "fromBatchID",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "划拨请求信息 (包含目标批次ID、猪栏ID和备注)",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ReclassifyPenToNewBatchRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "划拨成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/controller.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/api/v1/pig-batches/{id}": {
|
"/api/v1/pig-batches/{id}": {
|
||||||
"get": {
|
"get": {
|
||||||
"description": "根据ID获取单个猪批次信息",
|
"description": "根据ID获取单个猪批次信息",
|
||||||
@@ -1066,9 +1143,9 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/pig-batches/{id}/pens": {
|
"/api/v1/pig-batches/{id}/assign-pens": {
|
||||||
"put": {
|
"post": {
|
||||||
"description": "更新指定猪批次当前关联的猪栏列表",
|
"description": "将一个或多个空闲猪栏分配给指定的猪批次",
|
||||||
"consumes": [
|
"consumes": [
|
||||||
"application/json"
|
"application/json"
|
||||||
],
|
],
|
||||||
@@ -1078,7 +1155,7 @@ const docTemplate = `{
|
|||||||
"tags": [
|
"tags": [
|
||||||
"猪批次管理"
|
"猪批次管理"
|
||||||
],
|
],
|
||||||
"summary": "更新猪批次关联的猪栏",
|
"summary": "为猪批次分配空栏",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
@@ -1088,18 +1165,59 @@ const docTemplate = `{
|
|||||||
"required": true
|
"required": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "猪批次关联的猪栏ID列表",
|
"description": "待分配的猪栏ID列表",
|
||||||
"name": "body",
|
"name": "body",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/dto.PigBatchUpdatePensRequest"
|
"$ref": "#/definitions/dto.AssignEmptyPensToBatchRequest"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "更新成功",
|
"description": "分配成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/controller.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/v1/pig-batches/{id}/move-pigs-into-pen": {
|
||||||
|
"post": {
|
||||||
|
"description": "将指定数量的猪只从批次的“虚拟库存”移入一个已分配的猪栏",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"猪批次管理"
|
||||||
|
],
|
||||||
|
"summary": "将猪只从“虚拟库存”移入指定猪栏",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "猪批次ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "移入猪只请求信息 (包含目标猪栏ID、数量和备注)",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.MovePigsIntoPenRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "移入成功",
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/controller.Response"
|
"$ref": "#/definitions/controller.Response"
|
||||||
}
|
}
|
||||||
@@ -1809,6 +1927,9 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.AssignEmptyPensToBatchRequest": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
"dto.CreateAreaControllerRequest": {
|
"dto.CreateAreaControllerRequest": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
@@ -2144,6 +2265,28 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.MovePigsIntoPenRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"quantity",
|
||||||
|
"toPenID"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"quantity": {
|
||||||
|
"description": "移入猪只数量",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"remarks": {
|
||||||
|
"description": "备注",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"toPenID": {
|
||||||
|
"description": "目标猪栏ID",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"dto.PenResponse": {
|
"dto.PenResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -2298,9 +2441,6 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dto.PigBatchUpdatePensRequest": {
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"dto.PigHouseResponse": {
|
"dto.PigHouseResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -2380,6 +2520,27 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.ReclassifyPenToNewBatchRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"penID",
|
||||||
|
"toBatchID"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"penID": {
|
||||||
|
"description": "待划拨的猪栏ID",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"remarks": {
|
||||||
|
"description": "备注",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"toBatchID": {
|
||||||
|
"description": "目标猪批次ID",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"dto.SubPlanResponse": {
|
"dto.SubPlanResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
@@ -936,6 +936,83 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/api/v1/pig-batches/{batchID}/remove-pen/{penID}": {
|
||||||
|
"delete": {
|
||||||
|
"description": "将一个空闲猪栏从指定的猪批次中移除",
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"猪批次管理"
|
||||||
|
],
|
||||||
|
"summary": "从猪批次移除空栏",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "猪批次ID",
|
||||||
|
"name": "batchID",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "待移除的猪栏ID",
|
||||||
|
"name": "penID",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "移除成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/controller.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/v1/pig-batches/{fromBatchID}/reclassify-pen": {
|
||||||
|
"post": {
|
||||||
|
"description": "将一个猪栏(连同其中的猪只)从一个批次整体划拨到另一个批次",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"猪批次管理"
|
||||||
|
],
|
||||||
|
"summary": "将猪栏划拨到新批次",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "源猪批次ID",
|
||||||
|
"name": "fromBatchID",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "划拨请求信息 (包含目标批次ID、猪栏ID和备注)",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.ReclassifyPenToNewBatchRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "划拨成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/controller.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/api/v1/pig-batches/{id}": {
|
"/api/v1/pig-batches/{id}": {
|
||||||
"get": {
|
"get": {
|
||||||
"description": "根据ID获取单个猪批次信息",
|
"description": "根据ID获取单个猪批次信息",
|
||||||
@@ -1055,9 +1132,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/pig-batches/{id}/pens": {
|
"/api/v1/pig-batches/{id}/assign-pens": {
|
||||||
"put": {
|
"post": {
|
||||||
"description": "更新指定猪批次当前关联的猪栏列表",
|
"description": "将一个或多个空闲猪栏分配给指定的猪批次",
|
||||||
"consumes": [
|
"consumes": [
|
||||||
"application/json"
|
"application/json"
|
||||||
],
|
],
|
||||||
@@ -1067,7 +1144,7 @@
|
|||||||
"tags": [
|
"tags": [
|
||||||
"猪批次管理"
|
"猪批次管理"
|
||||||
],
|
],
|
||||||
"summary": "更新猪批次关联的猪栏",
|
"summary": "为猪批次分配空栏",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
@@ -1077,18 +1154,59 @@
|
|||||||
"required": true
|
"required": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "猪批次关联的猪栏ID列表",
|
"description": "待分配的猪栏ID列表",
|
||||||
"name": "body",
|
"name": "body",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/dto.PigBatchUpdatePensRequest"
|
"$ref": "#/definitions/dto.AssignEmptyPensToBatchRequest"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "更新成功",
|
"description": "分配成功",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/controller.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/v1/pig-batches/{id}/move-pigs-into-pen": {
|
||||||
|
"post": {
|
||||||
|
"description": "将指定数量的猪只从批次的“虚拟库存”移入一个已分配的猪栏",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"猪批次管理"
|
||||||
|
],
|
||||||
|
"summary": "将猪只从“虚拟库存”移入指定猪栏",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "猪批次ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "移入猪只请求信息 (包含目标猪栏ID、数量和备注)",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/dto.MovePigsIntoPenRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "移入成功",
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/controller.Response"
|
"$ref": "#/definitions/controller.Response"
|
||||||
}
|
}
|
||||||
@@ -1798,6 +1916,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.AssignEmptyPensToBatchRequest": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
"dto.CreateAreaControllerRequest": {
|
"dto.CreateAreaControllerRequest": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
@@ -2133,6 +2254,28 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.MovePigsIntoPenRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"quantity",
|
||||||
|
"toPenID"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"quantity": {
|
||||||
|
"description": "移入猪只数量",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"remarks": {
|
||||||
|
"description": "备注",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"toPenID": {
|
||||||
|
"description": "目标猪栏ID",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"dto.PenResponse": {
|
"dto.PenResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -2287,9 +2430,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dto.PigBatchUpdatePensRequest": {
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"dto.PigHouseResponse": {
|
"dto.PigHouseResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -2369,6 +2509,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dto.ReclassifyPenToNewBatchRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"penID",
|
||||||
|
"toBatchID"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"penID": {
|
||||||
|
"description": "待划拨的猪栏ID",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"remarks": {
|
||||||
|
"description": "备注",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"toBatchID": {
|
||||||
|
"description": "目标猪批次ID",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"dto.SubPlanResponse": {
|
"dto.SubPlanResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
@@ -69,6 +69,8 @@ definitions:
|
|||||||
updated_at:
|
updated_at:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
|
dto.AssignEmptyPensToBatchRequest:
|
||||||
|
type: object
|
||||||
dto.CreateAreaControllerRequest:
|
dto.CreateAreaControllerRequest:
|
||||||
properties:
|
properties:
|
||||||
location:
|
location:
|
||||||
@@ -298,6 +300,22 @@ definitions:
|
|||||||
example: testuser
|
example: testuser
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
|
dto.MovePigsIntoPenRequest:
|
||||||
|
properties:
|
||||||
|
quantity:
|
||||||
|
description: 移入猪只数量
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
remarks:
|
||||||
|
description: 备注
|
||||||
|
type: string
|
||||||
|
toPenID:
|
||||||
|
description: 目标猪栏ID
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- quantity
|
||||||
|
- toPenID
|
||||||
|
type: object
|
||||||
dto.PenResponse:
|
dto.PenResponse:
|
||||||
properties:
|
properties:
|
||||||
capacity:
|
capacity:
|
||||||
@@ -398,8 +416,6 @@ definitions:
|
|||||||
- $ref: '#/definitions/models.PigBatchStatus'
|
- $ref: '#/definitions/models.PigBatchStatus'
|
||||||
description: 批次状态,可选
|
description: 批次状态,可选
|
||||||
type: object
|
type: object
|
||||||
dto.PigBatchUpdatePensRequest:
|
|
||||||
type: object
|
|
||||||
dto.PigHouseResponse:
|
dto.PigHouseResponse:
|
||||||
properties:
|
properties:
|
||||||
description:
|
description:
|
||||||
@@ -450,6 +466,21 @@ definitions:
|
|||||||
$ref: '#/definitions/dto.TaskResponse'
|
$ref: '#/definitions/dto.TaskResponse'
|
||||||
type: array
|
type: array
|
||||||
type: object
|
type: object
|
||||||
|
dto.ReclassifyPenToNewBatchRequest:
|
||||||
|
properties:
|
||||||
|
penID:
|
||||||
|
description: 待划拨的猪栏ID
|
||||||
|
type: integer
|
||||||
|
remarks:
|
||||||
|
description: 备注
|
||||||
|
type: string
|
||||||
|
toBatchID:
|
||||||
|
description: 目标猪批次ID
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- penID
|
||||||
|
- toBatchID
|
||||||
|
type: object
|
||||||
dto.SubPlanResponse:
|
dto.SubPlanResponse:
|
||||||
properties:
|
properties:
|
||||||
child_plan:
|
child_plan:
|
||||||
@@ -1373,6 +1404,57 @@ paths:
|
|||||||
summary: 创建猪批次
|
summary: 创建猪批次
|
||||||
tags:
|
tags:
|
||||||
- 猪批次管理
|
- 猪批次管理
|
||||||
|
/api/v1/pig-batches/{batchID}/remove-pen/{penID}:
|
||||||
|
delete:
|
||||||
|
description: 将一个空闲猪栏从指定的猪批次中移除
|
||||||
|
parameters:
|
||||||
|
- description: 猪批次ID
|
||||||
|
in: path
|
||||||
|
name: batchID
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
- description: 待移除的猪栏ID
|
||||||
|
in: path
|
||||||
|
name: penID
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 移除成功
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/controller.Response'
|
||||||
|
summary: 从猪批次移除空栏
|
||||||
|
tags:
|
||||||
|
- 猪批次管理
|
||||||
|
/api/v1/pig-batches/{fromBatchID}/reclassify-pen:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 将一个猪栏(连同其中的猪只)从一个批次整体划拨到另一个批次
|
||||||
|
parameters:
|
||||||
|
- description: 源猪批次ID
|
||||||
|
in: path
|
||||||
|
name: fromBatchID
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
- description: 划拨请求信息 (包含目标批次ID、猪栏ID和备注)
|
||||||
|
in: body
|
||||||
|
name: body
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dto.ReclassifyPenToNewBatchRequest'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 划拨成功
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/controller.Response'
|
||||||
|
summary: 将猪栏划拨到新批次
|
||||||
|
tags:
|
||||||
|
- 猪批次管理
|
||||||
/api/v1/pig-batches/{id}:
|
/api/v1/pig-batches/{id}:
|
||||||
delete:
|
delete:
|
||||||
description: 根据ID删除一个猪批次
|
description: 根据ID删除一个猪批次
|
||||||
@@ -1446,31 +1528,58 @@ paths:
|
|||||||
summary: 更新猪批次
|
summary: 更新猪批次
|
||||||
tags:
|
tags:
|
||||||
- 猪批次管理
|
- 猪批次管理
|
||||||
/api/v1/pig-batches/{id}/pens:
|
/api/v1/pig-batches/{id}/assign-pens:
|
||||||
put:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
description: 更新指定猪批次当前关联的猪栏列表
|
description: 将一个或多个空闲猪栏分配给指定的猪批次
|
||||||
parameters:
|
parameters:
|
||||||
- description: 猪批次ID
|
- description: 猪批次ID
|
||||||
in: path
|
in: path
|
||||||
name: id
|
name: id
|
||||||
required: true
|
required: true
|
||||||
type: integer
|
type: integer
|
||||||
- description: 猪批次关联的猪栏ID列表
|
- description: 待分配的猪栏ID列表
|
||||||
in: body
|
in: body
|
||||||
name: body
|
name: body
|
||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/definitions/dto.PigBatchUpdatePensRequest'
|
$ref: '#/definitions/dto.AssignEmptyPensToBatchRequest'
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: 更新成功
|
description: 分配成功
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/definitions/controller.Response'
|
$ref: '#/definitions/controller.Response'
|
||||||
summary: 更新猪批次关联的猪栏
|
summary: 为猪批次分配空栏
|
||||||
|
tags:
|
||||||
|
- 猪批次管理
|
||||||
|
/api/v1/pig-batches/{id}/move-pigs-into-pen:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 将指定数量的猪只从批次的“虚拟库存”移入一个已分配的猪栏
|
||||||
|
parameters:
|
||||||
|
- description: 猪批次ID
|
||||||
|
in: path
|
||||||
|
name: id
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
- description: 移入猪只请求信息 (包含目标猪栏ID、数量和备注)
|
||||||
|
in: body
|
||||||
|
name: body
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/dto.MovePigsIntoPenRequest'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: 移入成功
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/controller.Response'
|
||||||
|
summary: 将猪只从“虚拟库存”移入指定猪栏
|
||||||
tags:
|
tags:
|
||||||
- 猪批次管理
|
- 猪批次管理
|
||||||
/api/v1/pig-houses:
|
/api/v1/pig-houses:
|
||||||
|
|||||||
@@ -234,7 +234,10 @@ func (a *API) setupRoutes() {
|
|||||||
pigBatchGroup.GET("/:id", a.pigBatchController.GetPigBatch)
|
pigBatchGroup.GET("/:id", a.pigBatchController.GetPigBatch)
|
||||||
pigBatchGroup.PUT("/:id", a.pigBatchController.UpdatePigBatch)
|
pigBatchGroup.PUT("/:id", a.pigBatchController.UpdatePigBatch)
|
||||||
pigBatchGroup.DELETE("/:id", a.pigBatchController.DeletePigBatch)
|
pigBatchGroup.DELETE("/:id", a.pigBatchController.DeletePigBatch)
|
||||||
pigBatchGroup.PUT("/:id/pens", a.pigBatchController.UpdatePigBatchPens)
|
pigBatchGroup.POST("/:id/assign-pens", a.pigBatchController.AssignEmptyPensToBatch)
|
||||||
|
pigBatchGroup.POST("/:fromBatchID/reclassify-pen", a.pigBatchController.ReclassifyPenToNewBatch)
|
||||||
|
pigBatchGroup.DELETE("/:batchID/remove-pen/:penID", a.pigBatchController.RemoveEmptyPenFromBatch)
|
||||||
|
pigBatchGroup.POST("/:id/move-pigs-into-pen", a.pigBatchController.MovePigsIntoPen)
|
||||||
}
|
}
|
||||||
a.logger.Info("猪批次相关接口注册成功 (需要认证和审计)")
|
a.logger.Info("猪批次相关接口注册成功 (需要认证和审计)")
|
||||||
|
|
||||||
|
|||||||
@@ -179,43 +179,171 @@ func (c *PigBatchController) ListPigBatches(ctx *gin.Context) {
|
|||||||
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "获取成功", respDTOs, action, "获取成功", respDTOs)
|
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "获取成功", respDTOs, action, "获取成功", respDTOs)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdatePigBatchPens godoc
|
// AssignEmptyPensToBatch godoc
|
||||||
// @Summary 更新猪批次关联的猪栏
|
// @Summary 为猪批次分配空栏
|
||||||
// @Description 更新指定猪批次当前关联的猪栏列表
|
// @Description 将一个或多个空闲猪栏分配给指定的猪批次
|
||||||
// @Tags 猪批次管理
|
// @Tags 猪批次管理
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param id path int true "猪批次ID"
|
// @Param id path int true "猪批次ID"
|
||||||
// @Param body body dto.PigBatchUpdatePensRequest true "猪批次关联的猪栏ID列表"
|
// @Param body body dto.AssignEmptyPensToBatchRequest true "待分配的猪栏ID列表"
|
||||||
// @Success 200 {object} controller.Response "更新成功"
|
// @Success 200 {object} controller.Response "分配成功"
|
||||||
// @Router /api/v1/pig-batches/{id}/pens [put]
|
// @Router /api/v1/pig-batches/{id}/assign-pens [post]
|
||||||
func (c *PigBatchController) UpdatePigBatchPens(ctx *gin.Context) {
|
func (c *PigBatchController) AssignEmptyPensToBatch(ctx *gin.Context) {
|
||||||
const action = "更新猪批次关联猪栏"
|
const action = "为猪批次分配空栏"
|
||||||
batchID, err := strconv.ParseUint(ctx.Param("id"), 10, 32)
|
batchID, err := strconv.ParseUint(ctx.Param("id"), 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的猪批次ID格式", action, "ID格式错误", ctx.Param("id"))
|
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的猪批次ID格式", action, "ID格式错误", ctx.Param("id"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req dto.PigBatchUpdatePensRequest
|
var req dto.AssignEmptyPensToBatchRequest
|
||||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||||
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的请求体", action, "请求体绑定失败", req)
|
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的请求体", action, "请求体绑定失败", req)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.service.UpdatePigBatchPens(uint(batchID), req.PenIDs)
|
userID, err := controller.GetOperatorIDFromContext(ctx)
|
||||||
|
|
||||||
|
err = c.service.AssignEmptyPensToBatch(uint(batchID), req.PenIDs, userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, service.ErrPigBatchNotFound) || errors.Is(err, service.ErrPenNotFound) {
|
if errors.Is(err, service.ErrPigBatchNotFound) || errors.Is(err, service.ErrPenNotFound) {
|
||||||
controller.SendErrorWithAudit(ctx, controller.CodeNotFound, err.Error(), action, err.Error(), batchID)
|
controller.SendErrorWithAudit(ctx, controller.CodeNotFound, err.Error(), action, err.Error(), batchID)
|
||||||
return
|
return
|
||||||
} else if errors.Is(err, service.ErrPigBatchNotActive) || errors.Is(err, service.ErrPenOccupiedByOtherBatch) || errors.Is(err, service.ErrPenStatusInvalidForAllocation) || errors.Is(err, service.ErrPenNotAssociatedWithBatch) {
|
} else if errors.Is(err, service.ErrPigBatchNotActive) || errors.Is(err, service.ErrPenOccupiedByOtherBatch) || errors.Is(err, service.ErrPenStatusInvalidForAllocation) {
|
||||||
controller.SendErrorWithAudit(ctx, controller.CodeConflict, err.Error(), action, err.Error(), batchID)
|
controller.SendErrorWithAudit(ctx, controller.CodeConflict, err.Error(), action, err.Error(), batchID)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.logger.Errorf("%s: 业务逻辑失败: %v", action, err)
|
c.logger.Errorf("%s: 业务逻辑失败: %v", action, err)
|
||||||
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "更新猪批次关联猪栏失败", action, err.Error(), batchID)
|
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "分配空栏失败", action, err.Error(), batchID)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "更新成功", nil, action, "更新成功", batchID)
|
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "分配成功", nil, action, "分配成功", batchID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReclassifyPenToNewBatch godoc
|
||||||
|
// @Summary 将猪栏划拨到新批次
|
||||||
|
// @Description 将一个猪栏(连同其中的猪只)从一个批次整体划拨到另一个批次
|
||||||
|
// @Tags 猪批次管理
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param fromBatchID path int true "源猪批次ID"
|
||||||
|
// @Param body body dto.ReclassifyPenToNewBatchRequest true "划拨请求信息 (包含目标批次ID、猪栏ID和备注)"
|
||||||
|
// @Success 200 {object} controller.Response "划拨成功"
|
||||||
|
// @Router /api/v1/pig-batches/{fromBatchID}/reclassify-pen [post]
|
||||||
|
func (c *PigBatchController) ReclassifyPenToNewBatch(ctx *gin.Context) {
|
||||||
|
const action = "划拨猪栏到新批次"
|
||||||
|
fromBatchID, err := strconv.ParseUint(ctx.Param("fromBatchID"), 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的源猪批次ID格式", action, "ID格式错误", ctx.Param("fromBatchID"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var req dto.ReclassifyPenToNewBatchRequest
|
||||||
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的请求体", action, "请求体绑定失败", req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
userID, err := controller.GetOperatorIDFromContext(ctx)
|
||||||
|
|
||||||
|
err = c.service.ReclassifyPenToNewBatch(uint(fromBatchID), req.ToBatchID, req.PenID, userID, req.Remarks)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, service.ErrPigBatchNotFound) || errors.Is(err, service.ErrPenNotFound) {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeNotFound, err.Error(), action, err.Error(), fromBatchID)
|
||||||
|
return
|
||||||
|
} else if errors.Is(err, service.ErrPigBatchNotActive) || errors.Is(err, service.ErrPenOccupiedByOtherBatch) || errors.Is(err, service.ErrPenNotAssociatedWithBatch) || errors.Is(err, service.ErrInvalidOperation) {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeConflict, err.Error(), action, err.Error(), fromBatchID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.logger.Errorf("%s: 业务逻辑失败: %v", action, err)
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "划拨猪栏失败", action, err.Error(), fromBatchID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "划拨成功", nil, action, "划拨成功", fromBatchID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveEmptyPenFromBatch godoc
|
||||||
|
// @Summary 从猪批次移除空栏
|
||||||
|
// @Description 将一个空闲猪栏从指定的猪批次中移除
|
||||||
|
// @Tags 猪批次管理
|
||||||
|
// @Produce json
|
||||||
|
// @Param batchID path int true "猪批次ID"
|
||||||
|
// @Param penID path int true "待移除的猪栏ID"
|
||||||
|
// @Success 200 {object} controller.Response "移除成功"
|
||||||
|
// @Router /api/v1/pig-batches/{batchID}/remove-pen/{penID} [delete]
|
||||||
|
func (c *PigBatchController) RemoveEmptyPenFromBatch(ctx *gin.Context) {
|
||||||
|
const action = "从猪批次移除空栏"
|
||||||
|
batchID, err := strconv.ParseUint(ctx.Param("batchID"), 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的猪批次ID格式", action, "ID格式错误", ctx.Param("batchID"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
penID, err := strconv.ParseUint(ctx.Param("penID"), 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的猪栏ID格式", action, "ID格式错误", ctx.Param("penID"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = c.service.RemoveEmptyPenFromBatch(uint(batchID), uint(penID))
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, service.ErrPigBatchNotFound) || errors.Is(err, service.ErrPenNotFound) || errors.Is(err, service.ErrPenNotAssociatedWithBatch) {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeNotFound, err.Error(), action, err.Error(), batchID)
|
||||||
|
return
|
||||||
|
} else if errors.Is(err, service.ErrPigBatchNotActive) || errors.Is(err, service.ErrPenNotEmpty) {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeConflict, err.Error(), action, err.Error(), batchID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.logger.Errorf("%s: 业务逻辑失败: %v", action, err)
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "移除空栏失败", action, err.Error(), batchID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "移除成功", nil, action, "移除成功", batchID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MovePigsIntoPen godoc
|
||||||
|
// @Summary 将猪只从“虚拟库存”移入指定猪栏
|
||||||
|
// @Description 将指定数量的猪只从批次的“虚拟库存”移入一个已分配的猪栏
|
||||||
|
// @Tags 猪批次管理
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param id path int true "猪批次ID"
|
||||||
|
// @Param body body dto.MovePigsIntoPenRequest true "移入猪只请求信息 (包含目标猪栏ID、数量和备注)"
|
||||||
|
// @Success 200 {object} controller.Response "移入成功"
|
||||||
|
// @Router /api/v1/pig-batches/{id}/move-pigs-into-pen [post]
|
||||||
|
func (c *PigBatchController) MovePigsIntoPen(ctx *gin.Context) {
|
||||||
|
const action = "将猪只移入猪栏"
|
||||||
|
batchID, err := strconv.ParseUint(ctx.Param("id"), 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的猪批次ID格式", action, "ID格式错误", ctx.Param("id"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var req dto.MovePigsIntoPenRequest
|
||||||
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeBadRequest, "无效的请求体", action, "请求体绑定失败", req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
userID, err := controller.GetOperatorIDFromContext(ctx)
|
||||||
|
|
||||||
|
err = c.service.MovePigsIntoPen(uint(batchID), req.ToPenID, req.Quantity, userID, req.Remarks)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, service.ErrPigBatchNotFound) || errors.Is(err, service.ErrPenNotFound) {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeNotFound, err.Error(), action, err.Error(), batchID)
|
||||||
|
return
|
||||||
|
} else if errors.Is(err, service.ErrPigBatchNotActive) || errors.Is(err, service.ErrInvalidOperation) {
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeConflict, err.Error(), action, err.Error(), batchID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.logger.Errorf("%s: 业务逻辑失败: %v", action, err)
|
||||||
|
controller.SendErrorWithAudit(ctx, controller.CodeInternalError, "移入猪只失败", action, err.Error(), batchID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.SendSuccessWithAudit(ctx, controller.CodeSuccess, "移入成功", nil, action, "移入成功", batchID)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,26 @@ type PigBatchResponseDTO struct {
|
|||||||
UpdateTime time.Time `json:"update_time"` // 更新时间
|
UpdateTime time.Time `json:"update_time"` // 更新时间
|
||||||
}
|
}
|
||||||
|
|
||||||
// PigBatchUpdatePensRequest 用于更新猪批次关联猪栏的请求体
|
// AssignEmptyPensToBatchRequest 用于为猪批次分配空栏的请求体
|
||||||
type PigBatchUpdatePensRequest struct {
|
type AssignEmptyPensToBatchRequest struct {
|
||||||
PenIDs []uint `json:"penIDs" binding:"required,min=0" example:"[1,2,3]"`
|
PenIDs []uint `json:"penIDs" binding:"required,min=1" example:"[1,2,3]"` // 待分配的猪栏ID列表
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReclassifyPenToNewBatchRequest 用于将猪栏划拨到新批次的请求体
|
||||||
|
type ReclassifyPenToNewBatchRequest struct {
|
||||||
|
ToBatchID uint `json:"toBatchID" binding:"required"` // 目标猪批次ID
|
||||||
|
PenID uint `json:"penID" binding:"required"` // 待划拨的猪栏ID
|
||||||
|
Remarks string `json:"remarks"` // 备注
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveEmptyPenFromBatchRequest 用于从猪批次移除空栏的请求体
|
||||||
|
type RemoveEmptyPenFromBatchRequest struct {
|
||||||
|
PenID uint `json:"penID" binding:"required"` // 待移除的猪栏ID
|
||||||
|
}
|
||||||
|
|
||||||
|
// MovePigsIntoPenRequest 用于将猪只从“虚拟库存”移入指定猪栏的请求体
|
||||||
|
type MovePigsIntoPenRequest struct {
|
||||||
|
ToPenID uint `json:"toPenID" binding:"required"` // 目标猪栏ID
|
||||||
|
Quantity int `json:"quantity" binding:"required,min=1"` // 移入猪只数量
|
||||||
|
Remarks string `json:"remarks"` // 备注
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,10 @@ type PigBatchService interface {
|
|||||||
UpdatePigBatch(id uint, dto *dto.PigBatchUpdateDTO) (*dto.PigBatchResponseDTO, error)
|
UpdatePigBatch(id uint, dto *dto.PigBatchUpdateDTO) (*dto.PigBatchResponseDTO, error)
|
||||||
DeletePigBatch(id uint) error
|
DeletePigBatch(id uint) error
|
||||||
ListPigBatches(isActive *bool) ([]*dto.PigBatchResponseDTO, error)
|
ListPigBatches(isActive *bool) ([]*dto.PigBatchResponseDTO, error)
|
||||||
UpdatePigBatchPens(batchID uint, desiredPenIDs []uint) error
|
AssignEmptyPensToBatch(batchID uint, penIDs []uint, operatorID uint) error
|
||||||
|
ReclassifyPenToNewBatch(fromBatchID uint, toBatchID uint, penID uint, operatorID uint, remarks string) error
|
||||||
|
RemoveEmptyPenFromBatch(batchID uint, penID uint) error
|
||||||
|
MovePigsIntoPen(batchID uint, toPenID uint, quantity int, operatorID uint, remarks string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// pigBatchService 的实现现在依赖于领域服务接口。
|
// pigBatchService 的实现现在依赖于领域服务接口。
|
||||||
@@ -65,7 +68,7 @@ func (s *pigBatchService) CreatePigBatch(operatorID uint, dto *dto.PigBatchCreat
|
|||||||
createdBatch, err := s.domainService.CreatePigBatch(operatorID, batch)
|
createdBatch, err := s.domainService.CreatePigBatch(operatorID, batch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Errorf("应用层: 创建猪批次失败: %v", err)
|
s.logger.Errorf("应用层: 创建猪批次失败: %v", err)
|
||||||
return nil, mapDomainError(err)
|
return nil, MapDomainError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 领域模型 -> DTO
|
// 3. 领域模型 -> DTO
|
||||||
@@ -77,7 +80,7 @@ func (s *pigBatchService) GetPigBatch(id uint) (*dto.PigBatchResponseDTO, error)
|
|||||||
batch, err := s.domainService.GetPigBatch(id)
|
batch, err := s.domainService.GetPigBatch(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Warnf("应用层: 获取猪批次失败, ID: %d, 错误: %v", id, err)
|
s.logger.Warnf("应用层: 获取猪批次失败, ID: %d, 错误: %v", id, err)
|
||||||
return nil, mapDomainError(err)
|
return nil, MapDomainError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.toPigBatchResponseDTO(batch), nil
|
return s.toPigBatchResponseDTO(batch), nil
|
||||||
@@ -89,7 +92,7 @@ func (s *pigBatchService) UpdatePigBatch(id uint, dto *dto.PigBatchUpdateDTO) (*
|
|||||||
existingBatch, err := s.domainService.GetPigBatch(id)
|
existingBatch, err := s.domainService.GetPigBatch(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Warnf("应用层: 更新猪批次失败,获取原批次信息错误, ID: %d, 错误: %v", id, err)
|
s.logger.Warnf("应用层: 更新猪批次失败,获取原批次信息错误, ID: %d, 错误: %v", id, err)
|
||||||
return nil, mapDomainError(err)
|
return nil, MapDomainError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 将DTO中的变更应用到模型上
|
// 2. 将DTO中的变更应用到模型上
|
||||||
@@ -116,7 +119,7 @@ func (s *pigBatchService) UpdatePigBatch(id uint, dto *dto.PigBatchUpdateDTO) (*
|
|||||||
updatedBatch, err := s.domainService.UpdatePigBatch(existingBatch)
|
updatedBatch, err := s.domainService.UpdatePigBatch(existingBatch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Errorf("应用层: 更新猪批次失败, ID: %d, 错误: %v", id, err)
|
s.logger.Errorf("应用层: 更新猪批次失败, ID: %d, 错误: %v", id, err)
|
||||||
return nil, mapDomainError(err)
|
return nil, MapDomainError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 转换并返回结果
|
// 4. 转换并返回结果
|
||||||
@@ -128,7 +131,7 @@ func (s *pigBatchService) DeletePigBatch(id uint) error {
|
|||||||
err := s.domainService.DeletePigBatch(id)
|
err := s.domainService.DeletePigBatch(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Errorf("应用层: 删除猪批次失败, ID: %d, 错误: %v", id, err)
|
s.logger.Errorf("应用层: 删除猪批次失败, ID: %d, 错误: %v", id, err)
|
||||||
return mapDomainError(err)
|
return MapDomainError(err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -138,7 +141,7 @@ func (s *pigBatchService) ListPigBatches(isActive *bool) ([]*dto.PigBatchRespons
|
|||||||
batches, err := s.domainService.ListPigBatches(isActive)
|
batches, err := s.domainService.ListPigBatches(isActive)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Errorf("应用层: 批量查询猪批次失败: %v", err)
|
s.logger.Errorf("应用层: 批量查询猪批次失败: %v", err)
|
||||||
return nil, mapDomainError(err)
|
return nil, MapDomainError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var responseDTOs []*dto.PigBatchResponseDTO
|
var responseDTOs []*dto.PigBatchResponseDTO
|
||||||
@@ -149,12 +152,42 @@ func (s *pigBatchService) ListPigBatches(isActive *bool) ([]*dto.PigBatchRespons
|
|||||||
return responseDTOs, nil
|
return responseDTOs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdatePigBatchPens 将关联猪栏的复杂操作委托给领域服务,并处理错误转换。
|
// AssignEmptyPensToBatch 委托给领域服务
|
||||||
func (s *pigBatchService) UpdatePigBatchPens(batchID uint, desiredPenIDs []uint) error {
|
func (s *pigBatchService) AssignEmptyPensToBatch(batchID uint, penIDs []uint, operatorID uint) error {
|
||||||
err := s.domainService.UpdatePigBatchPens(batchID, desiredPenIDs)
|
err := s.domainService.AssignEmptyPensToBatch(batchID, penIDs, operatorID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Errorf("应用层: 更新猪批次猪栏关联失败, 批次ID: %d, 错误: %v", batchID, err)
|
s.logger.Errorf("应用层: 为猪批次分配空栏失败, 批次ID: %d, 错误: %v", batchID, err)
|
||||||
return mapDomainError(err)
|
return MapDomainError(err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReclassifyPenToNewBatch 委托给领域服务
|
||||||
|
func (s *pigBatchService) ReclassifyPenToNewBatch(fromBatchID uint, toBatchID uint, penID uint, operatorID uint, remarks string) error {
|
||||||
|
err := s.domainService.ReclassifyPenToNewBatch(fromBatchID, toBatchID, penID, operatorID, remarks)
|
||||||
|
if err != nil {
|
||||||
|
s.logger.Errorf("应用层: 划拨猪栏到新批次失败, 源批次ID: %d, 错误: %v", fromBatchID, err)
|
||||||
|
return MapDomainError(err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveEmptyPenFromBatch 委托给领域服务
|
||||||
|
func (s *pigBatchService) RemoveEmptyPenFromBatch(batchID uint, penID uint) error {
|
||||||
|
err := s.domainService.RemoveEmptyPenFromBatch(batchID, penID)
|
||||||
|
if err != nil {
|
||||||
|
s.logger.Errorf("应用层: 从猪批次移除空栏失败, 批次ID: %d, 猪栏ID: %d, 错误: %v", batchID, penID, err)
|
||||||
|
return MapDomainError(err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MovePigsIntoPen 委托给领域服务
|
||||||
|
func (s *pigBatchService) MovePigsIntoPen(batchID uint, toPenID uint, quantity int, operatorID uint, remarks string) error {
|
||||||
|
err := s.domainService.MovePigsIntoPen(batchID, toPenID, quantity, operatorID, remarks)
|
||||||
|
if err != nil {
|
||||||
|
s.logger.Errorf("应用层: 将猪只移入猪栏失败, 批次ID: %d, 目标猪栏ID: %d, 错误: %v", batchID, toPenID, err)
|
||||||
|
return MapDomainError(err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,10 +19,12 @@ var (
|
|||||||
ErrPenOccupiedByOtherBatch = errors.New("猪栏已被其他批次使用")
|
ErrPenOccupiedByOtherBatch = errors.New("猪栏已被其他批次使用")
|
||||||
ErrPenStatusInvalidForAllocation = errors.New("猪栏状态不允许分配")
|
ErrPenStatusInvalidForAllocation = errors.New("猪栏状态不允许分配")
|
||||||
ErrPenNotAssociatedWithBatch = errors.New("猪栏未与该批次关联")
|
ErrPenNotAssociatedWithBatch = errors.New("猪栏未与该批次关联")
|
||||||
|
ErrPenNotEmpty = errors.New("猪栏内仍有猪只")
|
||||||
|
ErrInvalidOperation = errors.New("非法操作")
|
||||||
)
|
)
|
||||||
|
|
||||||
// mapDomainError 将领域层的错误转换为应用服务层的公共错误。
|
// MapDomainError 将领域层的错误转换为应用服务层的公共错误。
|
||||||
func mapDomainError(err error) error {
|
func MapDomainError(err error) error {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -42,6 +44,10 @@ func mapDomainError(err error) error {
|
|||||||
return ErrPenNotAssociatedWithBatch
|
return ErrPenNotAssociatedWithBatch
|
||||||
case errors.Is(err, domain_pig.ErrPenNotFound):
|
case errors.Is(err, domain_pig.ErrPenNotFound):
|
||||||
return ErrPenNotFound
|
return ErrPenNotFound
|
||||||
|
case errors.Is(err, domain_pig.ErrPenNotEmpty):
|
||||||
|
return ErrPenNotEmpty
|
||||||
|
case errors.Is(err, domain_pig.ErrInvalidOperation):
|
||||||
|
return ErrInvalidOperation
|
||||||
// 可以添加更多领域错误到应用层错误的映射
|
// 可以添加更多领域错误到应用层错误的映射
|
||||||
default:
|
default:
|
||||||
return err // 对于未知的领域错误,直接返回
|
return err // 对于未知的领域错误,直接返回
|
||||||
|
|||||||
Reference in New Issue
Block a user