Files
nxxmdata/backend/swagger-animals.js
2025-09-23 18:13:11 +08:00

706 lines
26 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 动物管理模块 Swagger 文档
* @file swagger-animals.js
*/
const animalsPaths = {
// 获取所有动物列表
'/animals': {
get: {
tags: ['动物管理'],
summary: '获取动物列表',
description: '分页获取系统中的所有动物信息',
parameters: [
{
name: 'page',
in: 'query',
schema: { type: 'integer', default: 1 },
description: '页码'
},
{
name: 'limit',
in: 'query',
schema: { type: 'integer', default: 10 },
description: '每页数量'
},
{
name: 'search',
in: 'query',
schema: { type: 'string' },
description: '搜索关键词(项圈编号、耳标号)'
},
{
name: 'farmId',
in: 'query',
schema: { type: 'integer' },
description: '养殖场ID筛选'
},
{
name: 'status',
in: 'query',
schema: { type: 'string', enum: ['healthy', 'sick', 'quarantine', 'sold'] },
description: '动物状态筛选'
},
{
name: 'category',
in: 'query',
schema: { type: 'integer', enum: [1, 2, 3, 4, 5, 6] },
description: '动物类别筛选1-犊牛2-育成母牛3-架子牛4-青年牛5-基础母牛6-育肥牛'
},
{
name: 'sex',
in: 'query',
schema: { type: 'integer', enum: [1, 2] },
description: '性别筛选1-公牛2-母牛'
}
],
responses: {
'200': {
description: '获取成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
data: {
type: 'array',
items: { $ref: '#/components/schemas/Animal' }
},
pagination: {
type: 'object',
properties: {
page: { type: 'integer' },
limit: { type: 'integer' },
total: { type: 'integer' },
totalPages: { type: 'integer' }
}
}
}
}
}
}
}
}
},
post: {
tags: ['动物管理'],
summary: '创建新动物档案',
description: '创建新的动物档案记录',
requestBody: {
required: true,
content: {
'application/json': {
schema: {
type: 'object',
required: ['earNumber', 'sex', 'varieties', 'cate', 'farmId'],
properties: {
earNumber: { type: 'string', description: '耳标号' },
sex: { type: 'integer', enum: [1, 2], description: '性别1-公牛2-母牛' },
strain: { type: 'string', description: '品系' },
varieties: { type: 'integer', description: '品种ID' },
cate: {
type: 'integer',
enum: [1, 2, 3, 4, 5, 6],
description: '类别1-犊牛2-育成母牛3-架子牛4-青年牛5-基础母牛6-育肥牛'
},
birthWeight: { type: 'number', description: '出生重量kg' },
birthday: { type: 'integer', description: '出生日期(时间戳)' },
farmId: { type: 'integer', description: '养殖场ID' },
penId: { type: 'integer', description: '栏舍ID' },
batchId: { type: 'integer', description: '批次ID' },
intoTime: { type: 'integer', description: '入场时间(时间戳)' },
parity: { type: 'integer', description: '胎次' },
source: {
type: 'integer',
enum: [1, 2, 3, 4, 5],
description: '来源1-合作社2-农户3-养殖场4-进口5-自繁'
},
sourceDay: { type: 'integer', description: '来源日龄' },
sourceWeight: { type: 'number', description: '来源重量kg' },
weight: { type: 'number', description: '当前重量kg' },
algebra: { type: 'string', description: '代数' },
colour: { type: 'string', description: '毛色' },
descent: { type: 'string', description: '血统' },
imgs: { type: 'string', description: '图片URL多个用逗号分隔' }
}
}
}
}
},
responses: {
'201': {
description: '创建成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
message: { type: 'string', example: '动物档案创建成功' },
data: { $ref: '#/components/schemas/Animal' }
}
}
}
}
},
'400': {
description: '请求参数错误',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/ErrorResponse' }
}
}
}
}
}
},
// 公共动物数据
'/animals/public': {
get: {
tags: ['动物管理'],
summary: '获取公共动物数据',
description: '获取可公开访问的动物基本信息',
security: [], // 公共接口不需要认证
responses: {
'200': {
description: '获取成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
data: {
type: 'array',
items: {
type: 'object',
properties: {
id: { type: 'integer' },
earNumber: { type: 'string' },
sex: { type: 'integer' },
varieties: { type: 'integer' },
cate: { type: 'integer' },
weight: { type: 'number' },
isOut: { type: 'integer' }
}
}
},
message: { type: 'string' }
}
}
}
}
}
}
}
},
// 获取动物绑定信息
'/animals/binding-info/{collarNumber}': {
get: {
tags: ['动物管理'],
summary: '获取动物绑定信息',
description: '根据项圈编号获取动物的详细绑定信息',
parameters: [
{
name: 'collarNumber',
in: 'path',
required: true,
schema: { type: 'string' },
description: '项圈编号'
}
],
responses: {
'200': {
description: '获取成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
message: { type: 'string' },
data: {
type: 'object',
properties: {
basicInfo: {
type: 'object',
properties: {
collarNumber: { type: 'string', description: '项圈编号' },
category: { type: 'string', description: '动物类别' },
calvingCount: { type: 'integer', description: '产犊次数' },
earTag: { type: 'string', description: '耳标号' },
animalType: { type: 'string', description: '动物类型' },
breed: { type: 'string', description: '品种' },
sourceType: { type: 'string', description: '来源类型' }
}
},
birthInfo: {
type: 'object',
properties: {
birthDate: { type: 'string', description: '出生日期' },
birthWeight: { type: 'string', description: '出生重量' },
weaningWeight: { type: 'string', description: '断奶重量' },
entryDate: { type: 'string', description: '入场日期' },
weaningAge: { type: 'integer', description: '断奶日龄' }
}
},
pedigreeInfo: {
type: 'object',
properties: {
fatherId: { type: 'string', description: '父亲ID' },
motherId: { type: 'string', description: '母亲ID' },
grandfatherId: { type: 'string', description: '祖父ID' },
grandmotherId: { type: 'string', description: '祖母ID' },
bloodline: { type: 'string', description: '血统' },
generation: { type: 'string', description: '世代' }
}
},
insuranceInfo: {
type: 'object',
properties: {
policyNumber: { type: 'string', description: '保单号' },
insuranceCompany: { type: 'string', description: '保险公司' },
coverageAmount: { type: 'string', description: '保额' },
premium: { type: 'string', description: '保费' },
startDate: { type: 'string', description: '开始日期' },
endDate: { type: 'string', description: '结束日期' },
status: { type: 'string', description: '保险状态' }
}
},
loanInfo: {
type: 'object',
properties: {
loanNumber: { type: 'string', description: '贷款编号' },
bankName: { type: 'string', description: '银行名称' },
loanAmount: { type: 'string', description: '贷款金额' },
interestRate: { type: 'string', description: '利率' },
loanDate: { type: 'string', description: '放款日期' },
maturityDate: { type: 'string', description: '到期日期' },
status: { type: 'string', description: '贷款状态' }
}
},
deviceInfo: {
type: 'object',
properties: {
deviceId: { type: 'integer', description: '设备ID' },
batteryLevel: { type: 'number', description: '电池电量' },
temperature: { type: 'number', description: '温度' },
status: { type: 'string', description: '设备状态' },
lastUpdate: { type: 'string', description: '最后更新时间' },
location: { type: 'string', description: '位置信息' }
}
},
farmInfo: {
type: 'object',
properties: {
farmName: { type: 'string', description: '农场名称' },
farmAddress: { type: 'string', description: '农场地址' },
penName: { type: 'string', description: '栏舍名称' },
batchName: { type: 'string', description: '批次名称' }
}
}
}
}
}
}
}
}
},
'404': {
description: '未找到指定的动物或设备',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/ErrorResponse' }
}
}
}
}
}
},
// 获取指定动物详情
'/animals/{id}': {
get: {
tags: ['动物管理'],
summary: '获取动物详情',
description: '根据动物ID获取详细信息',
parameters: [
{
name: 'id',
in: 'path',
required: true,
schema: { type: 'integer' },
description: '动物ID'
}
],
responses: {
'200': {
description: '获取成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
data: { $ref: '#/components/schemas/Animal' }
}
}
}
}
},
'404': {
description: '动物不存在',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/ErrorResponse' }
}
}
}
}
},
put: {
tags: ['动物管理'],
summary: '更新动物信息',
description: '更新指定动物的档案信息',
parameters: [
{
name: 'id',
in: 'path',
required: true,
schema: { type: 'integer' },
description: '动物ID'
}
],
requestBody: {
required: true,
content: {
'application/json': {
schema: {
type: 'object',
properties: {
earNumber: { type: 'string', description: '耳标号' },
sex: { type: 'integer', enum: [1, 2], description: '性别' },
strain: { type: 'string', description: '品系' },
varieties: { type: 'integer', description: '品种ID' },
cate: { type: 'integer', enum: [1, 2, 3, 4, 5, 6], description: '类别' },
weight: { type: 'number', description: '当前重量kg' },
penId: { type: 'integer', description: '栏舍ID' },
batchId: { type: 'integer', description: '批次ID' },
event: { type: 'string', description: '事件记录' },
eventTime: { type: 'integer', description: '事件时间(时间戳)' },
isVaccin: { type: 'integer', enum: [0, 1], description: '是否疫苗' },
isInsemination: { type: 'integer', enum: [0, 1], description: '是否配种' },
isInsure: { type: 'integer', enum: [0, 1], description: '是否保险' },
isMortgage: { type: 'integer', enum: [0, 1], description: '是否抵押' }
}
}
}
}
},
responses: {
'200': {
description: '更新成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
message: { type: 'string', example: '动物信息更新成功' },
data: { $ref: '#/components/schemas/Animal' }
}
}
}
}
},
'400': {
description: '请求参数错误',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/ErrorResponse' }
}
}
},
'404': {
description: '动物不存在',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/ErrorResponse' }
}
}
}
}
},
delete: {
tags: ['动物管理'],
summary: '删除动物档案',
description: '删除指定动物档案(软删除)',
parameters: [
{
name: 'id',
in: 'path',
required: true,
schema: { type: 'integer' },
description: '动物ID'
}
],
responses: {
'200': {
description: '删除成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
message: { type: 'string', example: '动物档案删除成功' }
}
}
}
}
},
'404': {
description: '动物不存在',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/ErrorResponse' }
}
}
}
}
}
},
// 动物健康记录
'/animals/{id}/health': {
get: {
tags: ['动物管理'],
summary: '获取动物健康记录',
description: '获取指定动物的健康记录',
parameters: [
{
name: 'id',
in: 'path',
required: true,
schema: { type: 'integer' },
description: '动物ID'
}
],
responses: {
'200': {
description: '获取成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
data: {
type: 'array',
items: {
type: 'object',
properties: {
id: { type: 'integer' },
animalId: { type: 'integer' },
checkDate: { type: 'string', format: 'date' },
temperature: { type: 'number' },
weight: { type: 'number' },
healthStatus: { type: 'string' },
symptoms: { type: 'string' },
treatment: { type: 'string' },
veterinarian: { type: 'string' },
notes: { type: 'string' }
}
}
}
}
}
}
}
}
}
},
post: {
tags: ['动物管理'],
summary: '添加动物健康记录',
description: '为指定动物添加健康检查记录',
parameters: [
{
name: 'id',
in: 'path',
required: true,
schema: { type: 'integer' },
description: '动物ID'
}
],
requestBody: {
required: true,
content: {
'application/json': {
schema: {
type: 'object',
required: ['checkDate', 'healthStatus'],
properties: {
checkDate: { type: 'string', format: 'date', description: '检查日期' },
temperature: { type: 'number', description: '体温' },
weight: { type: 'number', description: '体重' },
healthStatus: {
type: 'string',
enum: ['healthy', 'sick', 'recovering', 'quarantine'],
description: '健康状态'
},
symptoms: { type: 'string', description: '症状描述' },
treatment: { type: 'string', description: '治疗方案' },
veterinarian: { type: 'string', description: '兽医姓名' },
notes: { type: 'string', description: '备注' }
}
}
}
}
},
responses: {
'201': {
description: '添加成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
message: { type: 'string', example: '健康记录添加成功' }
}
}
}
}
}
}
}
},
// 动物繁殖记录
'/animals/{id}/breeding': {
get: {
tags: ['动物管理'],
summary: '获取动物繁殖记录',
description: '获取指定动物的繁殖记录',
parameters: [
{
name: 'id',
in: 'path',
required: true,
schema: { type: 'integer' },
description: '动物ID'
}
],
responses: {
'200': {
description: '获取成功',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
success: { type: 'boolean', example: true },
data: {
type: 'array',
items: {
type: 'object',
properties: {
id: { type: 'integer' },
animalId: { type: 'integer' },
breedingDate: { type: 'string', format: 'date' },
matingType: { type: 'string', enum: ['natural', 'artificial'] },
sireId: { type: 'integer' },
expectedCalvingDate: { type: 'string', format: 'date' },
actualCalvingDate: { type: 'string', format: 'date' },
calvingResult: { type: 'string' },
offspringCount: { type: 'integer' },
notes: { type: 'string' }
}
}
}
}
}
}
}
}
}
}
}
};
// 动物数据模型
const animalSchemas = {
Animal: {
type: 'object',
properties: {
id: { type: 'integer', description: '动物ID' },
orgId: { type: 'integer', description: '组织ID' },
earNumber: { type: 'string', description: '耳标号' },
sex: {
type: 'integer',
enum: [1, 2],
description: '性别1-公牛2-母牛'
},
strain: { type: 'string', description: '品系' },
varieties: { type: 'integer', description: '品种ID' },
cate: {
type: 'integer',
enum: [1, 2, 3, 4, 5, 6],
description: '类别1-犊牛2-育成母牛3-架子牛4-青年牛5-基础母牛6-育肥牛'
},
birthWeight: { type: 'number', description: '出生重量kg' },
birthday: { type: 'integer', description: '出生日期(时间戳)' },
penId: { type: 'integer', description: '栏舍ID' },
intoTime: { type: 'integer', description: '入场时间(时间戳)' },
parity: { type: 'integer', description: '胎次' },
source: {
type: 'integer',
enum: [1, 2, 3, 4, 5],
description: '来源1-合作社2-农户3-养殖场4-进口5-自繁'
},
sourceDay: { type: 'integer', description: '来源日龄' },
sourceWeight: { type: 'number', description: '来源重量kg' },
weight: { type: 'number', description: '当前重量kg' },
event: { type: 'string', description: '事件记录' },
eventTime: { type: 'integer', description: '事件时间(时间戳)' },
lactationDay: { type: 'integer', description: '泌乳天数' },
semenNum: { type: 'string', description: '精液编号' },
isWear: { type: 'integer', enum: [0, 1], description: '是否佩戴设备' },
batchId: { type: 'integer', description: '批次ID' },
imgs: { type: 'string', description: '图片URL多个用逗号分隔' },
isEleAuth: { type: 'integer', enum: [0, 1], description: '是否电子认证' },
isQuaAuth: { type: 'integer', enum: [0, 1], description: '是否质量认证' },
isDelete: { type: 'integer', enum: [0, 1], description: '是否删除' },
isOut: { type: 'integer', enum: [0, 1], description: '是否出栏' },
createUid: { type: 'integer', description: '创建用户ID' },
createTime: { type: 'integer', description: '创建时间(时间戳)' },
algebra: { type: 'string', description: '代数' },
colour: { type: 'string', description: '毛色' },
infoWeight: { type: 'number', description: '信息重量' },
descent: { type: 'string', description: '血统' },
isVaccin: { type: 'integer', enum: [0, 1], description: '是否疫苗' },
isInsemination: { type: 'integer', enum: [0, 1], description: '是否配种' },
isInsure: { type: 'integer', enum: [0, 1], description: '是否保险' },
isMortgage: { type: 'integer', enum: [0, 1], description: '是否抵押' },
updateTime: { type: 'integer', description: '更新时间(时间戳)' },
breedBullTime: { type: 'integer', description: '配种时间(时间戳)' },
level: { type: 'string', description: '等级' },
sixWeight: { type: 'number', description: '6月龄重量' },
eighteenWeight: { type: 'number', description: '18月龄重量' },
twelveDayWeight: { type: 'number', description: '12日龄重量' },
eighteenDayWeight: { type: 'number', description: '18日龄重量' },
xxivDayWeight: { type: 'number', description: '24日龄重量' },
semenBreedImgs: { type: 'string', description: '配种图片' },
sellStatus: { type: 'integer', description: '销售状态' },
weightCalculateTime: { type: 'integer', description: '重量计算时间' },
dayOfBirthday: { type: 'integer', description: '出生天数' },
userId: { type: 'integer', description: '用户ID' }
}
}
};
module.exports = { animalsPaths, animalSchemas };