여전히 백엔드 부분은 DB설계부터 MVC까지 거의 나혼자 하고있다,,,,
블로그에 새글 올릴 시간도없이 정신없이 혼자 하다보니 벌써 시간이..ㄷㄷ
페이지끼리 연결하는 간단한 부분은 진작에 다 처리했고 지금은 가상의 의사가 환자 목록을 보고 진단서를 개별로 작성하고, 가상의 환자가 회원가입을 할때 자동으로 생성되고 환자DB에 저장된 고유의 키값(UUID)과 의사가 진단한 소견과 병명, 환자유형등을 의사DB에 같이 insert하는 작업을 하는중이다
임시로 만들어놓은 관리자페이지로 들어가서
환자목록을 띄운다
-> 관리자계정명 가져오기, 의사가 진단을 완료하면 목록에 반영하기 등등 보완할점 많음!
@GetMapping("AdminPage")
public String memberList(Model model, MemberVO member, HttpSession session) {
//session.setAttribute("email", adServ.memberList(member));
logger.info("AdminPage!");
model.addAttribute("member", adServ.memberList(member));
return "AdminPage";
}
처음에 페이지 이동을 Admin으로 했었는데 컨트롤러가 못찾아서 이름을 AdminPage 이렇게 바꾸니까 해결됬다
화면이동부분
<div>
<a href="javascript:modify('${member.id}')"
class="btn-1 bg-gradient-primary-to-secondary
btn btn-primary d-inline-block px-2 py-1 fs-6 fw-bolder">
작성하기</a>
</div>
작성하기를 누르면 리스트에서 조회한 member의 id값을 가지고 작성창으로 이동!
function modify(id){
let f = document.createElement('form');
let obj;
obj = document.createElement('input');
obj.setAttribute('type', 'hidden');
obj.setAttribute('name', 'id');
obj.setAttribute('value', id);
f.appendChild(obj);
f.setAttribute('method', 'post');
f.setAttribute('action', 'patientMod');
document.body.appendChild(f);
f.submit();
}
a태그의 기본 이동 method는 GET이므로 Post로 이동시키려고 작성해봤다 가능하면 모든 페이지를 post로 하려고 하는중!
의사가 환자 개인의 진단을 작성하는 페이지
환자고유키값이 insert가 안되서 테스트한다고 그냥 띄워놧다
-> 환자 이름값 가져오기, Diagnosis페이지 select 해서 member정보 다시 불러보기, 환자분류 code 셀렉션으로 바꾸기등등 보완하기
@PostMapping("patientMod")
public String membermodify(Model model, MemberVO member) {
logger.info("Welcome Diagnosis!");
model.addAttribute("member", member);
return "Diagnosis";
}
@PostMapping("digsubmit")
public String patientDiagnosis(Model model, MemberVO member, PatientVO patient) {
adServ.diagnosis(patient);
model.addAttribute("member", member);
return "redirect:/AdminPage";
}
여기서 좀 삽질했던 부분
환자DB의 UUID를 가져와서 저장하기를 누르면 의사DB에 있는 id에 insert를 해야한다
create table member(
id CHAR(36) NOT NULL DEFAULT (UUID()),
email varchar(30) not null,
password varchar(25) not null,
name varchar(10) not null,
residentid varchar(13) not null,
phone varchar(11),
PRIMARY KEY (id)
);
create table certificate(
id CHAR(36) NOT NULL DEFAULT (UUID()),
Diagnostic VARCHAR(255) not null,
patientcode varchar(25) not null,
admission_date DATE,
discharge_date DATE,
disease VARCHAR(100),
operation VARCHAR(100),
PRIMARY KEY (id)
);
이게 맞는지 모르겠지만 아무튼ㅋㅋㅋ....
DB설계도 혼자하려니 작은 프로젝트에도 머리가 터지겠다
다시 생각해보니 의사DB에는 UUID를 할필요가없겠는데??? 내일 다시 봐야겠다
삽질목록
환자테이블의 UUID를 의사DB에 넣고 진단서를 작성한것도 같이 insert를 해야했다
<input type="hidden" id="memId" name="id" value="${member.id}"
class=" form-control mb-3">
<a
class="btn-1 bg-gradient-primary-to-secondary btn btn-primary d-inline"
href="javascript:digInsert
('${member.id}')" onclick="sendParam('${member.id}', Diagnostic, patientcode, disease, operation)">
저장하기 </a>
저 member.id를 좀 가져가라고 온갖 호작질을 해놨다
href와 onclick을 같이 넣은 이유는 href에 환자 key를 가지고 이동해야하는데 다른 칼럼값들까지 넣으니까 작동이 안되서 onclick으로 분리해보니 됬다
function sendParam(id, Diagnostic, patientcode, disease, operation){
let form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', 'digsubmit');
let MemberVO = new Object();
id = document.getElementById("memId").value;
Diagnostic = document.getElementById("Diagnostic").value;
patientcode = document.getElementById("patientcode").value;
admission_date = document.getElementById("start").value;
discharge_date = document.getElementById("end").value;
disease = document.getElementById("disease").value;
operation = document.getElementById("operation").value;
const info = {
'id': id,
'Diagnostic': Diagnostic,
'patientcode': patientcode,
'admission_date': admission_date,
'discharge_date': discharge_date,
'disease': disease,
'operation': operation,
};
for (const key in info){
let obj;
obj = document.createElement('input');
obj.setAttribute('type', 'hidden');
obj.setAttribute('name', key);
obj.setAttribute('value', info[key]);
form.appendChild(obj);
}
document.body.appendChild(form);
form.submit();
}
function modify(id){
let f = document.createElement('form');
let obj;
obj = document.createElement('input');
obj.setAttribute('type', 'hidden');
obj.setAttribute('name', 'id');
obj.setAttribute('value', id);
f.appendChild(obj);
f.setAttribute('method', 'post');
f.setAttribute('action', 'patientMod');
document.body.appendChild(f);
f.submit();
}
이렇게 적고보니까 onclick만 해도 될거 같다....
결론은 mapper.xml을 수정하는 것으로 해결!
INSERT INTO certificate
(id, Diagnostic, patientcode, admission_date, discharge_date, disease, operation)
VALUES
(#{id}, #{Diagnostic}, #{patientcode}, #{admission_date}, #{discharge_date}, #{disease}, #{operation});
처음에 UUID()로 주니까 당연히 안되지! #{id}
로 바꿔서 해결!
Date타입 처리하기
쿼리문
admission_date DATE
discharge_date DATE
jsp의 input type
<td>입원 날짜</td>
<td><input type="date" id="start" name="start"></td>
<td>퇴원 날짜</td>
<td><input type="date" id="end" name="end"></td>
PatientVO의 타입
import java.sql.Date;
private Date admission_date;
private Date discharge_date;
sql.Date
를 임포트! 데이터베이스와 연동할때 많이 임포트하는 패키지!
결과는 이렇게 insert된다
진행결과 기록끝