diff --git a/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn-cctv.jsp b/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn-cctv.jsp
index 4fbfeef..b3d23ff 100644
--- a/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn-cctv.jsp
+++ b/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn-cctv.jsp
@@ -104,7 +104,7 @@ dirSet.onCurrentChange = (dataItem) => {
$C.$findn("dir-list").find("tbody").setCurrentRow(dataIndex);
};
-fileSet.onDatasetChange = () => {
+fileSet.onDatasetChange = fileSet.onRemove = () => {
var t = $C.getGridTemplate("file-list"),
trs = Apply.fromDataset.getTbody(fileSet, t.found, t.notFound, t.replacer),
length = fileSet.length;
@@ -131,50 +131,81 @@ $C.getFiles = dir => {
fileSet.setData([]);
};
-$C.createCrdn = () => {
- let current = dirSet.getCurrent("item"),
- dir = current.data.name;
- dialog.alert({
- content: current.getValue("name") + " 디렉토리의 파일로 단속을 등록하시겠습니까?",
- onOK: () => {
+let cctv = {
+ dir: null,
+ doExempt: null,
+ upload: async (filenames) => {
+ return new Promise((resolve) => {
ajax.post({
url : wctx.url("/crdn/crdn05/020/upload.do"),
+ silent: true,
data : {
taskSeCd: "${taskSeCd}",
- doExempt: $C.findn('doExempt').checked,
- dirs: dir
+ doExempt: cctv.doExempt,
+ dirs: cctv.dir,
+ filenames: filenames.join(",")
},
- success : (resp) => {
- let content = "
" + [
- "업로드 파일수: " + resp.received,
- "분류 건수: " + resp.divided,
- "정상: " + resp.normal,
- "메타파일 누락: " + resp.malformed,
- "",
- "등록 단속건수: " + resp.success,
- "중복 단속건수: " + resp.duplicates
- ]
- .map(str => "- " + str + "
")
- .join("") + "
";
- dialog.alert({
- content: content,
- onOK: () => {},
- onClose: () => $C.getFiles(dir)
- });
-
- return;
- if (resp.saved) {
- $C.getFiles(dir);
- if(resp.alertMessage)
- dialog.alert(resp.alertMessage);
- else
- dialog.alert("등록이 완료됐습니다.");
- } else {
- dialog.alert(resp.failReason);
- }
- }
- });
+ success: resp => resolve(resp)
+ })
+ });
+ },
+ request: async () => {
+ let current = dirSet.getCurrent("item"),
+ keymapper = file => {
+ let str = file.name,
+ pos = str.lastIndexOf("_");
+ return str.substring(0, pos);
+ },
+ result = {
+ received: 0,
+ divided: 0,
+ normal: 0,
+ malformed: 0,
+ success: 0,
+ duplicates: 0
+ },
+ bundles = getBundles(fileSet.getDataset(), keymapper);
+
+ cctv.dir = current.data.name;
+ cctv.doExempt = $C.findn('doExempt').checked;
+
+ wait();
+ for (let i = 0; i < bundles.length; ++i) {
+ let filenames = bundles[i].map(info => info.name),
+ resp = await cctv.upload(filenames);
+ for (let key in result) {
+ result[key] += resp[key];
+ }
+ fileSet.erase(filenames);
}
+ wait(false);
+
+ let content = "" + [
+ "업로드 파일: " + result.received,
+ "처리 대상: " + result.divided,
+ "정상: " + result.normal,
+ "메타파일 누락: " + result.malformed,
+ "",
+ "단속 등록: " + result.success,
+ "중복 제외: " + result.duplicates
+ ]
+ .map(str => "- " + str + "
")
+ .join("") + "
";
+ dialog.alert({
+ content: content,
+ onOK: () => {},
+ onClose: () => $C.getFiles(cctv.dir)
+ });
+
+ }
+};
+
+$C.createCrdn = () => {
+ let current = dirSet.getCurrent("item"),
+ dir = current.data.name;
+ dialog.alert({
+ content: current.getValue("name") + " 디렉토리의 파일(들)로 단속을 등록하시겠습니까?",
+ onOK: () => {cctv.request();}
});
}
diff --git a/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn-local.jsp b/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn-local.jsp
index f73fe62..e780f5b 100644
--- a/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn-local.jsp
+++ b/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn-local.jsp
@@ -151,8 +151,76 @@ $L.clickParsedInfoList = (dataIndex) => {
uploadSet.setCurrent(dataIndex);
};
+let localFiles = {
+ doExempt: null,
+ upload: async (files) => {
+ return new Promise((resolve) => {
+ upload({
+ url : wctx.url("/crdn/crdn05/020/upload.do"),
+ silent: true,
+ data : {
+ taskSeCd: "${taskSeCd}",
+ doExempt: localFiles.doExempt,
+ uploadFiles: files
+ },
+ success: resp => resolve(resp)
+ })
+ });
+ },
+ request: async () => {
+ let keymapper = file => {
+ let str = file.name,
+ pos = str.lastIndexOf("_");
+ return str.substring(0, pos);
+ },
+ result = {
+ received: 0,
+ divided: 0,
+ normal: 0,
+ malformed: 0,
+ success: 0,
+ duplicates: 0
+ },
+ bundles = getBundles(uploadSet.getDataset(), keymapper);
+
+ localFiles.doExempt = $L.findn('doExempt').checked;
-$L.createCrdn = () =>
+ wait();
+ for (let i = 0; i < bundles.length; ++i) {
+ let files = bundles[i],
+ resp = await localFiles.upload(files);
+ for (let key in result) {
+ result[key] += resp[key];
+ }
+ uploadSet.erase(files.map(file => file.id));
+ }
+ wait(false);
+
+ let content = "" + [
+ "업로드 파일: " + result.received,
+ "처리 대상: " + result.divided,
+ "정상: " + result.normal,
+ "메타파일 누락: " + result.malformed,
+ "",
+ "단속 등록: " + result.success,
+ "중복 제외: " + result.duplicates
+ ]
+ .map(str => "- " + str + "
")
+ .join("") + "
";
+ dialog.alert({
+ content: content,
+ onOK: () => {uploadSet.clear();},
+ });
+
+ }
+};
+
+$L.createCrdn = () => {
+ dialog.alert({
+ content: "선택한 파일(들)로 단속을 등록하시겠습니까?",
+ onOK: () => {localFiles.request();}
+ });
+<%--
upload({
url : wctx.url("/crdn/crdn05/020/upload.do"),
data : {
@@ -162,13 +230,13 @@ $L.createCrdn = () =>
},
success : (resp) => {
let content = "" + [
- "업로드 파일수: " + resp.received,
- "분류 건수: " + resp.divided,
+ "업로드 파일: " + resp.received,
+ "처리 대상: " + resp.divided,
"정상: " + resp.normal,
"메타파일 누락: " + resp.malformed,
"",
- "등록 단속건수: " + resp.success,
- "중복 단속건수: " + resp.duplicates
+ "단속 등록: " + resp.success,
+ "중복 제외: " + resp.duplicates
]
.map(str => "- " + str + "
")
.join("") + "
";
@@ -190,6 +258,8 @@ $L.createCrdn = () =>
}
}
});
+--%>
+};
$L.deleteFile = () => {
var current = uploadSet.getCurrent();
diff --git a/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn05020-info.jsp b/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn05020-info.jsp
index d722f27..115bebc 100644
--- a/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn05020-info.jsp
+++ b/src/main/webapp/WEB-INF/jsp/fims/crdn/crdn05020-info.jsp
@@ -26,7 +26,7 @@ var pageName = null,
dirSet = new Dataset({
formats: {name: dateFormat}
}),
- fileSet = new Dataset(),
+ fileSet = new Dataset({keymapper: info => info.name}),
uploadSet = uploadSupport("input[name='uploadFiles']");
$(document).ready(function(){
${scriptCctv}