Implementação do Sistema de Gestão Hospitalar - Upload de Dados

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"
}

Tags: java spring-boot mongodb MySQL rest-api

Publicado em 7-18 08:20