Files
nxxmdata/backend/swagger-animals.js

706 lines
26 KiB
JavaScript
Raw Normal View History

2025-09-23 18:13:11 +08:00
/**
* 动物管理模块 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 };