Toggle navigation
Toggle navigation
This project
Loading...
Sign in
강현태
/
capstone1-medical
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
강현태
2018-05-31 21:06:02 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
b8a7c4252d1cec768be541a886deebe5fb6cf73a
b8a7c425
0 parents
initial commit
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
222 additions
and
0 deletions
db.js
db.js
0 → 100644
View file @
b8a7c42
const
pg
=
require
(
'pg'
);
var
isNumber
=
require
(
"isnumber"
);
const
fs
=
require
(
'fs'
);
const
async
=
require
(
'async'
);
const
toCSV
=
require
(
'array-to-csv'
)
const
csvToObject
=
require
(
'csv-to-object'
)
var
Iconv
=
require
(
'iconv'
).
Iconv
;
var
iconv
=
new
Iconv
(
'EUC-KR'
,
'UTF-8//TRANSLIT//IGNORE'
);
const
config
=
{
host
:
'localhost'
,
user
:
'postgres'
,
password
:
'root'
,
database
:
'khuh_local'
,
port
:
5432
,
ssl
:
false
};
const
client
=
new
pg
.
Client
(
config
);
client
.
connect
(
err
=>
{
if
(
err
)
throw
err
;
else
{
getPatient
(
"당뇨"
);
}
});
var
allPat
=
[];
var
presTable
=
[];
var
normalSet
=
{};
function
getPatient
(
desease
)
{
console
.
log
(
`1. 모든 환자 리스팅중.`
);
const
query
=
'select "ID" from "ocsDWIDATA" \
where "MCD" in \
(select "Mcd" from "ocsDWVDIS" \
where "KorName" like(\'%'
+
desease
+
'%\')) \
union \
select "ID" from "ocsDWWDATA" \
where "MCD" in \
(select "Mcd" from "ocsDWVDIS" \
where "KorName" like(\'%'
+
desease
+
'%\')) \
ORDER BY "ID"'
;
client
.
query
(
query
)
.
then
(
res
=>
{
allPat
=
res
.
rows
;
console
.
log
(
allPat
.
length
+
"명"
);
getAverageSet
();
//process.exit();
})
.
catch
(
err
=>
{
console
.
log
(
err
);
process
.
exit
();
});
}
function
getAverageSet
(){
console
.
log
(
"2. 정상범주 가져오는중."
);
var
columns
=
[
"code"
,
"name"
,
"val"
];
require
(
"csv-to-array"
)({
file
:
"normal_value_delete_version_utf8.csv"
,
columns
:
columns
},
function
(
err
,
array
)
{
array
.
forEach
((
value
)
=>
{
normalSet
[
value
.
name
]
=
value
.
val
;
});
console
.
log
(
normalSet
);
buildData
();
});
/*
fs.readFile('normal_value_delete_version.csv', 'utf8',function(err,data){
let result = csvToObject({
dilemeter: '\n',
string: data
});
console.log(data);
normalSet=result;
buildData();
});
*/
}
function
buildData
(){
console
.
log
(
"3. 환자 처방목록 가져오는중."
);
let
i
=
0
;
let
sum
=
0
;
allPat
.
forEach
((
patient
)
=>
{
const
query
=
`SELECT "YMD", "DAY2", "SEQ", "ORDCD", "KorName","EngName", "CODE", "CDNM", "KUM", "RR", "DAN", "ARE", "BunCode" \
FROM \
(SELECT * \
FROM \
((SELECT "YMD","SEQ","ORDCD" FROM "ocsDWWORD" WHERE "ocsDWWORD"."ID"='`
+
patient
.
ID
+
`') \
UNION \
(SELECT "YMD","SEQ","ORDCD" FROM "ocsDWIORD" WHERE "ocsDWIORD"."ID"='`
+
patient
.
ID
+
`')) \
AS a \
LEFT OUTER JOIN "ocsDWVSUGA" ON "a"."ORDCD"= "ocsDWVSUGA"."SuCode" \
ORDER BY "a"."YMD",CAST("a"."SEQ" AS INTEGER)) AS b \
FULL OUTER JOIN \
(SELECT * FROM "ocsKHULAB1" WHERE "ocsKHULAB1"."ID"='`
+
patient
.
ID
+
`') AS c \
ON "c"."DAY"="b"."YMD" AND "c"."CODE" = "b"."SuCode" \
WHERE "BunCode" IN ('50','51','54','56','59','61')
ORDER BY "YMD",CAST("SEQ" AS INTEGER)`
;
return
client
.
query
(
query
)
.
then
(
res
=>
{
let
resultList
=
res
.
rows
;
let
prev
=
null
;
let
isVisited
=
{};
for
(
let
i
=
0
;
i
<
resultList
.
length
;
i
++
){
let
current
=
resultList
[
i
];
let
inspList
=
[];
let
presList
=
[];
if
(
current
.
DAY2
!=
null
&&
!
isVisited
[
current
.
DAY2
]){
//검사면,
let
found
=
false
;
let
foundDay
=
''
;
for
(
let
j
=
i
;
j
<
resultList
.
length
;
j
++
){
//순회해서 같은 검사결과 날짜를 찾아 검사리스트에 넣는다.
if
(
resultList
[
j
].
DAY2
!=
null
&&
current
.
DAY2
==
resultList
[
j
].
DAY2
){
if
(
isNumber
(
resultList
[
j
].
RR
)){
inspList
.
push
({
"code"
:
resultList
[
j
].
CODE
,
"name"
:
resultList
[
j
].
CDNM
,
"value"
:
resultList
[
j
].
RR
,
"scale"
:
resultList
[
j
].
DAN
});
}
}
//순회해서 가장 가까운 다음 날짜를 찾는다면 처방리스트에 넣는다.
if
(
resultList
[
j
].
DAY2
==
null
){
if
(
found
&&
foundDay
==
resultList
[
j
].
YMD
){
if
(
resultList
[
j
].
KorName
){
presList
.
push
({
"code"
:
resultList
[
j
].
ORDCD
,
"name"
:
resultList
[
j
].
KorName
});
}
}
else
{
if
(
resultList
[
j
].
YMD
>
current
.
YMD
){
found
=
true
;
foundDay
=
resultList
[
j
].
YMD
;
if
(
resultList
[
j
].
KorName
){
presList
.
push
({
"code"
:
resultList
[
j
].
ORDCD
,
"name"
:
resultList
[
j
].
KorName
});
}
}
}
}
//해당 날짜는 방문 했다고 표시.
isVisited
[
current
.
DAY2
]
=
true
;
}
}
if
(
inspList
.
length
!=
0
&&
presList
.
length
!=
0
){
let
tmpNormal
=
clone
(
normalSet
);
inspList
.
forEach
((
insp
)
=>
{
//정상범주 row에 존재한다면 넣는다
if
(
tmpNormal
[
insp
.
name
+
'-'
+
insp
.
scale
]){
tmpNormal
[
insp
.
name
+
'-'
+
insp
.
scale
]
=
insp
.
value
;
}
else
if
(
tmpNormal
[
insp
.
name
]){
tmpNormal
[
insp
.
name
]
=
insp
.
value
;
}
});
for
(
let
k
=
0
;
k
<
presList
.
length
;
k
++
){
for
(
let
l
=
k
+
1
;
l
<
presList
.
length
;
l
++
){
if
(
presList
[
k
].
name
==
presList
[
l
].
name
){
presList
.
splice
(
l
,
1
);
l
--
;
}
else
{
}
}
}
presList
.
sort
((
a
,
b
)
=>
a
.
name
<
b
.
name
);
tmpNormal
[
"prescription"
]
=
'\"'
+
presList
.
map
(
e
=>
e
.
name
).
join
(
'|'
).
replace
(
/
\"
/gi
,
""
).
replace
(
/,/gi
,
"&"
).
replace
(
/
\n
/gi
,
" "
)
+
'\"'
;
//console.log(tmpNormal);
//console.log(Object.values(tmpNormal)[125]);
presTable
.
push
(
Object
.
values
(
tmpNormal
));
//presTable.push({"inspection":inspList, "prescription":presList});
}
inspList
=
[];
presList
=
[];
}
console
.
log
(
i
+
"번 환자("
+
patient
.
ID
+
") :"
+
resultList
.
length
+
"개의 처방"
);
i
++
;
if
(
i
==
allPat
.
length
){
let
tmpCSV
=
Object
.
keys
(
normalSet
).
join
(
','
)
+
',prescription\n'
;
let
tmpTable
=
Object
.
values
(
presTable
);
for
(
let
j
=
0
;
j
<
tmpTable
.
length
;
j
++
){
tmpCSV
+=
tmpTable
[
j
].
join
(
','
);
if
(
j
!=
tmpTable
.
length
-
1
){
tmpCSV
+=
'\n'
;
}
}
//console.log(tmpCSV);
fs
.
writeFileSync
(
"result.csv"
,
'\ufeff'
+
tmpCSV
,
{
encoding
:
'utf8'
});
console
.
log
(
"끝"
);
process
.
exit
();
}
})
})
}
function
clone
(
obj
)
{
if
(
obj
===
null
||
typeof
(
obj
)
!==
'object'
)
return
obj
;
var
copy
=
obj
.
constructor
();
for
(
var
attr
in
obj
)
{
if
(
obj
.
hasOwnProperty
(
attr
))
{
copy
[
attr
]
=
obj
[
attr
];
}
}
return
copy
;
}
\ No newline at end of file
Please
register
or
login
to post a comment