3. Intefrace de Upload Hospitalar
3.1 Interface de Upload e Consulta de Hospitais
O sistema hospital-manage deve ser importado para gerenciar informações hospitalares. No banco de dados MySQL, crie o banco de dados yygh_manage e as seguintes tabelas:
#
# Estrutura da tabela "hospital_set"
#
CREATE TABLE `hospital_set` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Código identificador',
`hoscode` varchar(30) DEFAULT NULL COMMENT 'Código do hospital',
`sign_key` varchar(50) DEFAULT NULL COMMENT 'Chave de assinatura',
`api_url` varchar(100) DEFAULT NULL COMMENT 'URL da API de registro',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Data de criação',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Data de atualização',
`is_deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT 'Exclusão lógica',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='Tabela de configurações hospitalares';
#
# Estrutura da tabela "order_info"
#
CREATE TABLE `order_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Código identificador',
`schedule_id` bigint(20) DEFAULT NULL COMMENT 'ID do agendamento',
`patient_id` bigint(20) DEFAULT NULL COMMENT 'ID do paciente',
`number` int(11) DEFAULT NULL COMMENT 'Número do agendamento',
`fetch_time` varchar(50) DEFAULT NULL COMMENT 'Horário recomendado para retirada',
`fetch_address` varchar(255) DEFAULT NULL COMMENT 'Local de retirada',
`amount` decimal(10,0) DEFAULT NULL COMMENT 'Valor da consulta',
`pay_time` datetime DEFAULT NULL COMMENT 'Data do pagamento',
`quit_time` datetime DEFAULT NULL COMMENT 'Data do cancelamento',
`order_status` tinyint(3) DEFAULT NULL COMMENT 'Status do pedido',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Data de criação',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Data de atualização',
`is_deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT 'Exclusão lógica',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='Tabela de pedidos';
#
# Estrutura da tabela "schedule"
#
CREATE TABLE `schedule` (
`id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'Código identificador',
`hoscode` varchar(30) DEFAULT NULL COMMENT 'Código do hospital',
`depcode` varchar(30) DEFAULT NULL COMMENT 'Código do departamento',
`title` varchar(20) DEFAULT NULL COMMENT 'Cargo',
`docname` varchar(20) DEFAULT NULL COMMENT 'Nome do médico',
`skill` text COMMENT 'Especialidades',
`work_date` date DEFAULT NULL COMMENT 'Data de trabalho',
`work_time` tinyint(3) DEFAULT '0' COMMENT 'Período (0: manhã 1: tarde)',
`reserved_number` int(11) DEFAULT '0' COMMENT 'Total de vagas',
`available_number` int(11) DEFAULT '0' COMMENT 'Vagas disponíveis',
`amount` decimal(10,0) DEFAULT NULL COMMENT 'Valor do agendamento',
`status` tinyint(3) DEFAULT NULL COMMENT 'Status (-1: cancelado 0: indisponível 1: disponível)',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Data de criação',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Data de atualização',
`is_deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT 'Exclusão lógica',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Tabela de agendamentos médicos';
O sistema hospital-manage lê o arquivo JSON de entrada e os dados de configuração do hospital (hoscode e chave de assinatura MD5) da tabela hospital_set no banco yygh_manage, enviando-os ao serviço service_hosp.
Após comparação com os dados existentes na tabela hospital_set do banco yygh_hosp, se o código do hospital e a chave de assinatura corresponderem, os dados serão armazenados em cache no MongoDB.
Formato dos dados JSON para upload:
{
"hoscode": "1000_0",
"hosname": "Hospital Peking Union",
"hostype": "1",
"provinceCode": "110000",
"cityCode": "110100",
"districtCode": "110102",
"address": "Avenida principal",
"intro": "Hospital de referência em cuidados médicos de alta complexidade...",
"route": "Linhas de ônibus: 106, 108...",
"logoData": "iVBORw0KGgoAAAA...NSUhEUg==",
"bookingRule": {
"cycle": "1",
"releaseTime": "08:30",
"stopTime": "11:30",
"quitDay": "-1",
"quitTime": "15:30",
"rule": [
"Local de retirada: Prédio principal, andar 1",
"Local alternativo: Prédio novo, andares 2-5"
]
}
}
3.2 Interface de Upload e Consulta de Departamentos
Modelo de dados para departamento:
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "Código do hospital")
@Indexed
private String hoscode;
@ApiModelProperty(value = "Código do departamento")
@Indexed(unique = true)
private String depcode;
@ApiModelProperty(value = "Nome do departamento")
private String depname;
@ApiModelProperty(value = "Descrição do departamento")
private String intro;
@ApiModelProperty(value = "Código do departamento principal")
private String bigcode;
@ApiModelProperty(value = "Nome do departamento principal")
private String bigname;
Dados JSON para upload de departamento:
{
"hoscode": "1000_0",
"depcode": "200050923",
"depname": "Laboratório de testes COVID-19",
"intro": "Setor de testagem rápida",
"bigcode": "44f162029abb45f9ff0a5f743da0650d",
"bigname": "Centro de diagnóstico"
}
Consulta paginada de departamentos:
public Page<department> buscarDepartamentos(int pagina, int limite, DepartmentQueryVo consulta) {
Pageable configuracaoPagina = PageRequest.of(pagina - 1, limite);
Department entidade = new Department();
BeanUtils.copyProperties(consulta, entidade);
entidade.setIsDeleted(0);
ExampleMatcher correspondencia = ExampleMatcher.matching()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
.withIgnoreCase(true);
Example<department> exemplo = Example.of(entidade, correspondencia);
Page<department> resultado = departamentoRepositorio.findAll(exemplo, configuracaoPagina);
return resultado;
}
</department></department></department>
3.3 Interface de Upload de Agendamentos
Formato dos dados JSON para upload de agendamento:
{
"hoscode": "1000_0",
"depcode": "200040878",
"title": "Médico",
"docname": "",
"skill": "Especialista em doenças endócrinas.",
"workDate": "2020-06-22",
"workTime": 0,
"reservedNumber": 33,
"availableNumber": 22,
"amount": "100",
"status": 1,
"hosScheduleId": "1"
}