통역인 현황 첨부파일 기능 추가.
parent
7ec8d0a5ca
commit
225a4d48f4
|
|
@ -56,6 +56,8 @@ public class BaseService {
|
|||
protected String intelligenceNetworkPath;
|
||||
@Value("${file.dir.affairTemp}")
|
||||
protected String affairTempPath;
|
||||
@Value("${file.dir.translator}")
|
||||
protected String translatorPath;
|
||||
|
||||
protected String calculationSize(double fileSize){
|
||||
String[] units = {"bytes", "KB", "MB", "GB", "TB", "PB"};
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import com.dbnt.faisp.main.faRpt.service.SriService;
|
|||
import com.dbnt.faisp.main.ivsgtMgt.boardInvestigation.service.IvsgtService;
|
||||
import com.dbnt.faisp.main.ivsgtMgt.majorStatus.service.MajorStatusService;
|
||||
import com.dbnt.faisp.main.publicBoard.service.PublicBoardService;
|
||||
import com.dbnt.faisp.util.Utils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
|
@ -114,7 +115,7 @@ public class FileController extends BaseService{
|
|||
try {
|
||||
File file = new File(fileInfo.getSavePath(), fileInfo.getConvNm());
|
||||
|
||||
setDisposition(fileInfo.getFullName(), request, response);
|
||||
Utils.setDisposition(fileInfo.getFullName(), request, response);
|
||||
in = new BufferedInputStream(new FileInputStream(file));
|
||||
out = new BufferedOutputStream(response.getOutputStream());
|
||||
FileCopyUtils.copy(in, out);
|
||||
|
|
@ -190,7 +191,7 @@ public class FileController extends BaseService{
|
|||
zout.close();
|
||||
|
||||
|
||||
setDisposition(downloadFileName, request, response);
|
||||
Utils.setDisposition(downloadFileName, request, response);
|
||||
BufferedInputStream in = new BufferedInputStream(new FileInputStream(zipFile));
|
||||
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
|
||||
FileCopyUtils.copy(in, out);
|
||||
|
|
@ -260,58 +261,4 @@ public class FileController extends BaseService{
|
|||
}
|
||||
return downloadFile;
|
||||
}
|
||||
private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
String browser = getBrowser(request);
|
||||
|
||||
String dispositionPrefix = "attachment; filename=";
|
||||
String encodedFilename = null;
|
||||
|
||||
if (browser.equals("MSIE")) {
|
||||
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
|
||||
} else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지
|
||||
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
|
||||
} else if (browser.equals("Firefox")) {
|
||||
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
|
||||
} else if (browser.equals("Opera")) {
|
||||
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
|
||||
} else if (browser.equals("Chrome")) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i = 0; i < filename.length(); i++) {
|
||||
char c = filename.charAt(i);
|
||||
if(c==','){
|
||||
sb.append(URLEncoder.encode(",", "UTF-8"));
|
||||
} else if (c > '~') {
|
||||
sb.append(URLEncoder.encode("" + c, "UTF-8"));
|
||||
} else {
|
||||
sb.append(c);
|
||||
}
|
||||
}
|
||||
encodedFilename = sb.toString();
|
||||
} else {
|
||||
throw new IOException("Not supported browser");
|
||||
}
|
||||
|
||||
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
|
||||
|
||||
if ("Opera".equals(browser)) {
|
||||
response.setContentType("application/octet-stream;charset=UTF-8");
|
||||
}
|
||||
if(filename.contains("zip")){
|
||||
response.setContentType("application/zip");
|
||||
}
|
||||
}
|
||||
|
||||
private String getBrowser(HttpServletRequest request) {
|
||||
String header = request.getHeader("User-Agent");
|
||||
if (header.indexOf("MSIE") > -1) {
|
||||
return "MSIE";
|
||||
} else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지
|
||||
return "Trident";
|
||||
} else if (header.indexOf("Chrome") > -1) {
|
||||
return "Chrome";
|
||||
} else if (header.indexOf("Opera") > -1) {
|
||||
return "Opera";
|
||||
}
|
||||
return "Firefox";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -207,9 +207,9 @@ public class FipTargetController {
|
|||
@GetMapping("/partInfoFileDownload")
|
||||
public void partInfoFileDownload(HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
Integer fileSeq,
|
||||
Integer piSeq,
|
||||
Integer versionNo) {
|
||||
Integer versionNo,
|
||||
Integer fileSeq) {
|
||||
PartInfoFile downloadFile = fipTargetService.selectPartInfoFileDown(fileSeq, piSeq,versionNo);
|
||||
|
||||
BufferedInputStream in;
|
||||
|
|
@ -217,7 +217,7 @@ public class FipTargetController {
|
|||
try {
|
||||
File file = new File(downloadFile.getFilePath(), downloadFile.getConvNm());
|
||||
|
||||
setDisposition(downloadFile.getOrigNm()+'.'+downloadFile.getFileExtn(), request, response);
|
||||
Utils.setDisposition(downloadFile.getOrigNm()+'.'+downloadFile.getFileExtn(), request, response);
|
||||
in = new BufferedInputStream(new FileInputStream(file));
|
||||
out = new BufferedOutputStream(response.getOutputStream());
|
||||
FileCopyUtils.copy(in, out);
|
||||
|
|
@ -229,55 +229,6 @@ public class FipTargetController {
|
|||
}
|
||||
}
|
||||
|
||||
private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
String browser = getBrowser(request);
|
||||
|
||||
String dispositionPrefix = "attachment; filename=";
|
||||
String encodedFilename = null;
|
||||
|
||||
if (browser.equals("MSIE")) {
|
||||
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
|
||||
} else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지
|
||||
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
|
||||
} else if (browser.equals("Firefox")) {
|
||||
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
|
||||
} else if (browser.equals("Opera")) {
|
||||
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
|
||||
} else if (browser.equals("Chrome")) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i = 0; i < filename.length(); i++) {
|
||||
char c = filename.charAt(i);
|
||||
if (c > '~') {
|
||||
sb.append(URLEncoder.encode("" + c, "UTF-8"));
|
||||
} else {
|
||||
sb.append(c);
|
||||
}
|
||||
}
|
||||
encodedFilename = sb.toString();
|
||||
} else {
|
||||
throw new IOException("Not supported browser");
|
||||
}
|
||||
|
||||
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
|
||||
|
||||
if ("Opera".equals(browser)) {
|
||||
response.setContentType("application/octet-stream;charset=UTF-8");
|
||||
}
|
||||
}
|
||||
|
||||
private String getBrowser(HttpServletRequest request) {
|
||||
String header = request.getHeader("User-Agent");
|
||||
if (header.indexOf("MSIE") > -1) {
|
||||
return "MSIE";
|
||||
} else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지
|
||||
return "Trident";
|
||||
} else if (header.indexOf("Chrome") > -1) {
|
||||
return "Chrome";
|
||||
} else if (header.indexOf("Opera") > -1) {
|
||||
return "Opera";
|
||||
}
|
||||
return "Firefox";
|
||||
}
|
||||
//외사분실 운영현황 끝
|
||||
//외사분실실적 시작
|
||||
@GetMapping("/partWorkList")
|
||||
|
|
@ -395,7 +346,7 @@ public class FipTargetController {
|
|||
try {
|
||||
File file = new File(downloadFile.getFilePath(), downloadFile.getConvNm());
|
||||
|
||||
setDisposition(downloadFile.getOrigNm()+'.'+downloadFile.getFileExtn(), request, response);
|
||||
Utils.setDisposition(downloadFile.getOrigNm()+'.'+downloadFile.getFileExtn(), request, response);
|
||||
in = new BufferedInputStream(new FileInputStream(file));
|
||||
out = new BufferedOutputStream(response.getOutputStream());
|
||||
FileCopyUtils.copy(in, out);
|
||||
|
|
@ -492,7 +443,7 @@ public class FipTargetController {
|
|||
try {
|
||||
File file = new File(downloadFile.getFilePath(), downloadFile.getConvNm());
|
||||
|
||||
setDisposition(downloadFile.getOrigNm()+'.'+downloadFile.getFileExtn(), request, response);
|
||||
Utils.setDisposition(downloadFile.getOrigNm()+'.'+downloadFile.getFileExtn(), request, response);
|
||||
in = new BufferedInputStream(new FileInputStream(file));
|
||||
out = new BufferedOutputStream(response.getOutputStream());
|
||||
FileCopyUtils.copy(in, out);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.dbnt.faisp.main.translator;
|
|||
import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
|
||||
import com.dbnt.faisp.main.translator.model.Translator;
|
||||
import com.dbnt.faisp.main.translator.model.TranslatorCrr;
|
||||
import com.dbnt.faisp.main.translator.model.TranslatorFile;
|
||||
import com.dbnt.faisp.main.translator.service.TranslatorService;
|
||||
import com.dbnt.faisp.main.userInfo.model.UserInfo;
|
||||
import com.dbnt.faisp.util.ParamMap;
|
||||
|
|
@ -10,15 +11,18 @@ import com.dbnt.faisp.util.Utils;
|
|||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
||||
import org.springframework.util.FileCopyUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
|
||||
|
|
@ -32,14 +36,10 @@ public class TranslatorController {
|
|||
|
||||
|
||||
@GetMapping("/info")
|
||||
public ModelAndView translatorInfo(@AuthenticationPrincipal UserInfo loginUser,Translator translator,HttpServletResponse response) {
|
||||
ModelAndView mav;
|
||||
if (translator.getDashboardFlag()){
|
||||
mav = new ModelAndView("translator/translatorDashboard");
|
||||
translator.setRowCnt(5);
|
||||
}else{
|
||||
mav = new ModelAndView("translator/translator");
|
||||
}
|
||||
public ModelAndView translatorInfo(@AuthenticationPrincipal UserInfo loginUser,
|
||||
Translator translator,
|
||||
HttpServletResponse response) {
|
||||
ModelAndView mav = new ModelAndView("translator/translator");
|
||||
translator.setDownOrganCdList(loginUser.getDownOrganCdList());
|
||||
//엑셀다운
|
||||
if(translator.getExcel() != null && translator.getExcel().equals("Y")){
|
||||
|
|
@ -72,7 +72,10 @@ public class TranslatorController {
|
|||
}
|
||||
|
||||
@PostMapping("/saveTranslatorInfo")
|
||||
public void saveTranslatorInfo(@AuthenticationPrincipal UserInfo loginUser,Translator translator) {
|
||||
public void saveTranslatorInfo(@AuthenticationPrincipal UserInfo loginUser,
|
||||
Translator translator,
|
||||
MultipartHttpServletRequest request) {
|
||||
translator.setMultipartFileList(request.getMultiFileMap().get("uploadFiles"));
|
||||
translator.setWrtUserSeq(loginUser.getUserSeq());
|
||||
translator.setWrtNm(loginUser.getUserNm());
|
||||
translator.setWrtOrgan(loginUser.getOgCd());
|
||||
|
|
@ -139,18 +142,35 @@ public class TranslatorController {
|
|||
return trKey;
|
||||
}
|
||||
|
||||
@PostMapping("/deleteCareer")
|
||||
@ResponseBody
|
||||
public int deleteCareer(@RequestBody TranslatorCrr translatorCrr) {
|
||||
int trKey = translatorSevice.deleteCareer(translatorCrr);
|
||||
return trKey;
|
||||
}
|
||||
|
||||
@PostMapping("/deleteTranslatorInfo")
|
||||
@ResponseBody
|
||||
public void deleteTranslatorInfo(@RequestBody int trKey) {
|
||||
translatorSevice.deleteTranslatorInfo(trKey);
|
||||
}
|
||||
@GetMapping("/translatorFileDownload")
|
||||
public void translatorFileDownload(HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
Integer translatorKey,
|
||||
Integer versionNo,
|
||||
Integer fileSeq){
|
||||
TranslatorFile translatorFile = translatorSevice.selectTranslatorFile(translatorKey, versionNo, fileSeq);
|
||||
BufferedInputStream in;
|
||||
BufferedOutputStream out;
|
||||
try {
|
||||
File file = new File(translatorFile.getSavePath(), translatorFile.getConvNm());
|
||||
|
||||
Utils.setDisposition(translatorFile.getOrigNm()+'.'+translatorFile.getFileExtn(), request, response);
|
||||
in = new BufferedInputStream(new FileInputStream(file));
|
||||
out = new BufferedOutputStream(response.getOutputStream());
|
||||
FileCopyUtils.copy(in, out);
|
||||
out.flush();
|
||||
if(out!=null) out.close();
|
||||
if(in!=null )in.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/statisticsLang")
|
||||
public ModelAndView statisticsLang() {
|
||||
|
|
|
|||
|
|
@ -10,13 +10,16 @@ import lombok.Setter;
|
|||
import org.hibernate.annotations.DynamicInsert;
|
||||
import org.hibernate.annotations.DynamicUpdate;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Getter
|
||||
|
|
@ -77,12 +80,23 @@ public class Translator extends BaseModel implements Serializable{
|
|||
private LocalDateTime wrtDt;
|
||||
@Column(name = "naturalization")
|
||||
private String naturalization;
|
||||
@Column(name = "info_share_chk")
|
||||
private String infoShareChk;
|
||||
|
||||
@Transient
|
||||
private List<TranslatorFile> translatorFileList = new ArrayList<>();
|
||||
|
||||
@Transient
|
||||
private String photoFileState;
|
||||
@Transient
|
||||
private String infoShareFileState;
|
||||
|
||||
@Transient
|
||||
private String excel;
|
||||
|
||||
@Transient
|
||||
private List<MultipartFile> multipartFileList;
|
||||
|
||||
@Embeddable
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
|
@ -93,24 +107,4 @@ public class Translator extends BaseModel implements Serializable{
|
|||
private Integer versionNo;
|
||||
}
|
||||
|
||||
public Date getInt(String string) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Date getString(String string) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Translator [translatorKey=" + translatorKey + ", versionNo=" + versionNo + ", ogdp1=" + ogdp1 + ", trLang="
|
||||
+ trLang + ", trCareer=" + trCareer + ", trName=" + trName + ", trSex=" + trSex + ", trPhone=" + trPhone
|
||||
+ ", trNny=" + trNny + ", trAge=" + trAge + ", trEdu=" + trEdu + ", trCft=" + trCft + ", trVisa=" + trVisa
|
||||
+ ", aptDt=" + aptDt + ", dmlYn=" + dmlYn + ", remark=" + remark + ", wrtNm=" + wrtNm + ", wrtDt=" + wrtDt
|
||||
+ ", wrtOrgan=" + wrtOrgan + ", excel=" + excel + "]";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,8 +3,13 @@ package com.dbnt.faisp.main.translator.repository;
|
|||
import com.dbnt.faisp.main.translator.model.TranslatorFile;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
public interface TranslatorFileRepository extends JpaRepository<TranslatorFile, TranslatorFile.TranslatorFileId> {
|
||||
|
||||
List<TranslatorFile> findByTranslatorKey(Integer translatorKey);
|
||||
List<TranslatorFile> findByTranslatorKeyAndVersionNo(Integer translatorKey, Integer versionNo);
|
||||
Optional<TranslatorFile> findByTranslatorKeyAndVersionNoAndFileSeq(Integer translatorKey, Integer versionNo, Integer fileSeq);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,28 +1,35 @@
|
|||
package com.dbnt.faisp.main.translator.service;
|
||||
|
||||
|
||||
import com.dbnt.faisp.config.BaseService;
|
||||
import com.dbnt.faisp.main.translator.mapper.TranslatorMapper;
|
||||
import com.dbnt.faisp.main.translator.model.Translator;
|
||||
import com.dbnt.faisp.main.translator.model.Translator.TranslatorId;
|
||||
import com.dbnt.faisp.main.translator.model.TranslatorCrr;
|
||||
import com.dbnt.faisp.main.translator.model.TranslatorFile;
|
||||
import com.dbnt.faisp.main.translator.repository.TranslatorCareerRepository;
|
||||
import com.dbnt.faisp.main.translator.repository.TranslatorFileRepository;
|
||||
import com.dbnt.faisp.main.translator.repository.TranslatorRepository;
|
||||
import com.dbnt.faisp.util.ParamMap;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class TranslatorService {
|
||||
public class TranslatorService extends BaseService {
|
||||
|
||||
private final TranslatorRepository translatorRepository;
|
||||
private final TranslatorCareerRepository translatorCareerRepository;
|
||||
private final TranslatorFileRepository translatorFileRepository;
|
||||
private final TranslatorMapper translatorMapper;
|
||||
|
||||
@Transactional
|
||||
|
|
@ -35,7 +42,62 @@ public class TranslatorService {
|
|||
translator.setVersionNo(translator.getVersionNo()+1);
|
||||
}
|
||||
translatorRepository.save(translator);
|
||||
|
||||
if(translator.getVersionNo()!=1){
|
||||
savePrevVersionFileInfo(translator);
|
||||
}
|
||||
if(translator.getMultipartFileList()!=null && translator.getMultipartFileList().size()>0){
|
||||
saveUploadFiles(translator.getTranslatorKey(), translator.getVersionNo(), translator.getMultipartFileList());
|
||||
}
|
||||
}
|
||||
private void savePrevVersionFileInfo(Translator translator){
|
||||
List<TranslatorFile> fileList = translatorFileRepository.findByTranslatorKeyAndVersionNo(translator.getTranslatorKey(), translator.getVersionNo()-1);
|
||||
if(translator.getPhotoFileState()!=null
|
||||
&& !translator.getPhotoFileState().equals("deleted")){
|
||||
for(TranslatorFile file: fileList){
|
||||
if(file.getFileSeq().equals(1)){
|
||||
TranslatorFile temp = new TranslatorFile();
|
||||
BeanUtils.copyProperties(file, temp);
|
||||
temp.setVersionNo(file.getVersionNo()+1);
|
||||
translatorFileRepository.save(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(translator.getInfoShareFileState() != null
|
||||
&& !translator.getInfoShareFileState().equals("deleted")){
|
||||
for(TranslatorFile file: fileList){
|
||||
if(file.getFileSeq().equals(2)){
|
||||
TranslatorFile temp = new TranslatorFile();
|
||||
BeanUtils.copyProperties(file, temp);
|
||||
temp.setVersionNo(file.getVersionNo()+1);
|
||||
translatorFileRepository.save(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void saveUploadFiles(Integer translatorKey, Integer versionNo, List<MultipartFile> fileList){
|
||||
for(MultipartFile file : fileList){
|
||||
String saveName = UUID.randomUUID().toString();
|
||||
String path = locationPath+translatorPath;
|
||||
saveFile(file, new File(path+File.separator+saveName));
|
||||
|
||||
String[] originalName = file.getOriginalFilename().split("\\|");
|
||||
int extnIdx = originalName[1].lastIndexOf(".");
|
||||
TranslatorFile fileInfo = new TranslatorFile();
|
||||
fileInfo.setTranslatorKey(translatorKey);
|
||||
fileInfo.setVersionNo(versionNo);
|
||||
switch (originalName[0]){
|
||||
case "photo": fileInfo.setFileSeq(1); break;
|
||||
case "infoShare": fileInfo.setFileSeq(2); break;
|
||||
}
|
||||
fileInfo.setOrigNm(originalName[1].substring(0, extnIdx));
|
||||
fileInfo.setFileExtn(originalName[1].substring(extnIdx+1));
|
||||
fileInfo.setConvNm(saveName);
|
||||
fileInfo.setFileSize(calculationSize(file.getSize()));
|
||||
fileInfo.setSavePath(path);
|
||||
translatorFileRepository.save(fileInfo);
|
||||
}
|
||||
}
|
||||
|
||||
public List<Translator> selectTranslatorList(Translator translator) {
|
||||
return translatorMapper.selectTranslatorList(translator);
|
||||
|
|
@ -46,11 +108,22 @@ public class TranslatorService {
|
|||
}
|
||||
|
||||
public Translator selectTranslator(Integer translatorKey, Integer versionNo) {
|
||||
return translatorRepository.findById(new TranslatorId(translatorKey, versionNo)).orElse(null);
|
||||
Translator translator = translatorRepository.findById(new TranslatorId(translatorKey, versionNo)).orElse(null);
|
||||
translator.setTranslatorFileList(translatorFileRepository.findByTranslatorKeyAndVersionNo(translatorKey, versionNo));
|
||||
return translator;
|
||||
}
|
||||
|
||||
public List<Translator> selectHistoryList(Integer translatorKey) {
|
||||
return translatorRepository.findByTranslatorKeyOrderByVersionNoDesc(translatorKey);
|
||||
List<Translator> historyList = translatorRepository.findByTranslatorKeyOrderByVersionNoDesc(translatorKey);
|
||||
List<TranslatorFile> fileList = translatorFileRepository.findByTranslatorKey(translatorKey);
|
||||
for(Translator history: historyList){
|
||||
for(TranslatorFile file: fileList){
|
||||
if(history.getVersionNo().equals(file.getVersionNo())){
|
||||
history.getTranslatorFileList().add(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
return historyList;
|
||||
}
|
||||
|
||||
public List<TranslatorCrr> selectCareerList(Integer translatorKey) {
|
||||
|
|
@ -81,22 +154,6 @@ public class TranslatorService {
|
|||
return trKey;
|
||||
}
|
||||
|
||||
public List<TranslatorCrr> selectMaritimePoliceCareer(TranslatorCrr translatorCrr) {
|
||||
translatorCrr.setHisGubun("Y");
|
||||
return translatorMapper.selectCareerList(translatorCrr);
|
||||
}
|
||||
|
||||
public List<TranslatorCrr> selectAnotherOrganizationCareer(TranslatorCrr translatorCrr) {
|
||||
translatorCrr.setHisGubun("N");
|
||||
return translatorMapper.selectCareerList(translatorCrr);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public int deleteCareer(TranslatorCrr translatorCrr) {
|
||||
TranslatorCrr dbCareer = translatorCareerRepository.findByCareerSeqAndTranslatorKey(translatorCrr.getCareerSeq(),translatorCrr.getTranslatorKey()).orElse(null);
|
||||
translatorCareerRepository.delete(dbCareer);
|
||||
return translatorCrr.getTranslatorKey();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void deleteTranslatorInfo(int trKey) {
|
||||
|
|
@ -104,6 +161,10 @@ public class TranslatorService {
|
|||
translatorRepository.deleteByTranslatorKey(trKey);
|
||||
}
|
||||
|
||||
public TranslatorFile selectTranslatorFile(Integer translatorKey, Integer versionNo, Integer fileSeq) {
|
||||
return translatorFileRepository.findByTranslatorKeyAndVersionNoAndFileSeq(translatorKey, versionNo, fileSeq).orElse(null);
|
||||
}
|
||||
|
||||
public List<ParamMap> selectStatisticsLangCnt() {
|
||||
return translatorMapper.selectStatisticsLangCnt();
|
||||
}
|
||||
|
|
@ -115,5 +176,4 @@ public class TranslatorService {
|
|||
public List<ParamMap> selectTranslatorListEx(Translator translator) {
|
||||
return translatorMapper.selectTranslatorListEx(translator);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ package com.dbnt.faisp.util;
|
|||
import java.io.IOException;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.DecimalFormat;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
|
@ -1095,4 +1096,59 @@ public class Utils {
|
|||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
String browser = getBrowser(request);
|
||||
|
||||
String dispositionPrefix = "attachment; filename=";
|
||||
String encodedFilename = null;
|
||||
|
||||
if (browser.equals("MSIE")) {
|
||||
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
|
||||
} else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지
|
||||
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
|
||||
} else if (browser.equals("Firefox")) {
|
||||
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
|
||||
} else if (browser.equals("Opera")) {
|
||||
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
|
||||
} else if (browser.equals("Chrome")) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i = 0; i < filename.length(); i++) {
|
||||
char c = filename.charAt(i);
|
||||
if(c==','){
|
||||
sb.append(URLEncoder.encode(",", "UTF-8"));
|
||||
} else if (c > '~') {
|
||||
sb.append(URLEncoder.encode("" + c, "UTF-8"));
|
||||
} else {
|
||||
sb.append(c);
|
||||
}
|
||||
}
|
||||
encodedFilename = sb.toString();
|
||||
} else {
|
||||
throw new IOException("Not supported browser");
|
||||
}
|
||||
|
||||
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
|
||||
|
||||
if ("Opera".equals(browser)) {
|
||||
response.setContentType("application/octet-stream;charset=UTF-8");
|
||||
}
|
||||
if(filename.contains("zip")){
|
||||
response.setContentType("application/zip");
|
||||
}
|
||||
}
|
||||
|
||||
private static String getBrowser(HttpServletRequest request) {
|
||||
String header = request.getHeader("User-Agent");
|
||||
if (header.indexOf("MSIE") > -1) {
|
||||
return "MSIE";
|
||||
} else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지
|
||||
return "Trident";
|
||||
} else if (header.indexOf("Chrome") > -1) {
|
||||
return "Chrome";
|
||||
} else if (header.indexOf("Opera") > -1) {
|
||||
return "Opera";
|
||||
}
|
||||
return "Firefox";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ file.dir.activityCase=/activityCase
|
|||
file.dir.majorStatus=/majorStatus
|
||||
file.dir.monitoring=/monitoring
|
||||
file.dir.intelligenceNetwork=/intelligenceNetwork
|
||||
file.dir.translator=/translator
|
||||
|
||||
file.dir.affairTemp=/affairTemp
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ file.dir.activityCase=/activityCase
|
|||
file.dir.majorStatus=/majorStatus
|
||||
file.dir.monitoring=/monitoring
|
||||
file.dir.intelligenceNetwork=/intelligenceNetwork
|
||||
file.dir.translator=/translator
|
||||
|
||||
file.dir.affairTemp=/affairTemp
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ file.dir.activityCase=/activityCase
|
|||
file.dir.majorStatus=/majorStatus
|
||||
file.dir.monitoring=/monitoring
|
||||
file.dir.intelligenceNetwork=/intelligenceNetwork
|
||||
file.dir.translator=/translator
|
||||
|
||||
file.dir.affairTemp=/affairTemp
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ file.dir.activityCase=/activityCase
|
|||
file.dir.majorStatus=/majorStatus
|
||||
file.dir.monitoring=/monitoring
|
||||
file.dir.intelligenceNetwork=/intelligenceNetwork
|
||||
file.dir.translator=/translator
|
||||
|
||||
file.dir.affairTemp=/affairTemp
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ file.dir.activityCase=/activityCase
|
|||
file.dir.majorStatus=/majorStatus
|
||||
file.dir.monitoring=/monitoring
|
||||
file.dir.intelligenceNetwork=/intelligenceNetwork
|
||||
file.dir.translator=/translator
|
||||
|
||||
file.dir.affairTemp=/affairTemp
|
||||
|
||||
|
|
|
|||
|
|
@ -230,14 +230,7 @@ $(document).on('click', '#captainPhoto', function (){
|
|||
fileDownloadDiv.className="d-none"
|
||||
}
|
||||
})
|
||||
$(document).on('click', '.fileDownLink', function (){
|
||||
const target = $(this)
|
||||
let url = "/file/fileDownload?"
|
||||
url += "board="+target.attr("data-board");
|
||||
url += "&parentKey="+target.attr("data-parentkey");
|
||||
url += "&fileSeq="+target.attr("data-fileseq");
|
||||
window.open(encodeURI(url));
|
||||
})
|
||||
|
||||
function getFishingBoatEditModal(cdsKey){
|
||||
$.ajax({
|
||||
url: '/faStatistics/fishingBoatEditModal',
|
||||
|
|
|
|||
|
|
@ -62,6 +62,14 @@ $(document).on('click', '#saveBtn,#updateBtn', function (){
|
|||
const trInfoForm = $("#trInfoForm");
|
||||
trInfoForm.find('select,input').removeAttr("disabled");
|
||||
const formData = new FormData(trInfoForm[0]);
|
||||
let file = $("#photoFile")[0].files[0];
|
||||
if(file !== undefined){
|
||||
formData.append('uploadFiles', file, "photo|"+file.name);
|
||||
}
|
||||
file = $("#infoShareFile")[0].files[0];
|
||||
if(file !== undefined) {
|
||||
formData.append('uploadFiles', file, "infoShare|" + file.name);
|
||||
}
|
||||
$.ajax({
|
||||
type : 'POST',
|
||||
data : formData,
|
||||
|
|
@ -112,16 +120,6 @@ $(document).on('click', '#approvalTab', function (){
|
|||
document.getElementById('approvalTab').classList.add('active');
|
||||
})
|
||||
|
||||
$(document).on('change', '#trNny', function (){
|
||||
if($(this).val() === "NNY001"){
|
||||
$("#trVisa").attr("disabled", "disabled");
|
||||
$("#naturalization").removeAttr("disabled");
|
||||
}else{
|
||||
$("#trVisa").removeAttr("disabled");
|
||||
$("#naturalization").attr("disabled", "disabled");
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('change', '#eTrNny', function (){
|
||||
if($(this).val() === "NNY001"){
|
||||
$("#eTrVisa").attr("disabled", "disabled");
|
||||
|
|
@ -132,6 +130,16 @@ $(document).on('change', '#eTrNny', function (){
|
|||
}
|
||||
});
|
||||
|
||||
$(document).on('change', '#eInfoShareChk', function (){
|
||||
const infoShareFile = $("#infoShareFile")
|
||||
if(this.checked){
|
||||
infoShareFile.removeAttr("disabled")
|
||||
}else{
|
||||
infoShareFile.attr("disabled", "disabled");
|
||||
infoShareFile.val("");
|
||||
}
|
||||
})
|
||||
|
||||
$(document).on('click', '.addCareerBtn', function (){
|
||||
const hisGubun = $(this).attr('data-hisgubun')
|
||||
$.ajax({
|
||||
|
|
@ -223,8 +231,28 @@ $(document).on('click', '.deleteCareerBtn', function (){
|
|||
}
|
||||
})
|
||||
|
||||
$(document).on('click', '.fileDownloadBtn', function (){
|
||||
const target = $(this)
|
||||
let url = "/translator/translatorFileDownload?"
|
||||
url += "translatorKey="+target.attr("data-translatorkey");
|
||||
url += "&versionNo="+target.attr("data-versionno");
|
||||
url += "&fileSeq="+target.attr("data-fileseq");
|
||||
window.open(encodeURI(url));
|
||||
})
|
||||
|
||||
$(document).on('click', '#deleteInfoShareFile', function (){
|
||||
$(this).hide()
|
||||
$("#downloadInfoShareFile").hide();
|
||||
$("#infoShareFileState").val("deleted");
|
||||
})
|
||||
$(document).on('click', '#deletePhotoFile', function (){
|
||||
$(this).hide()
|
||||
$("#downloadPhotoFile").hide();
|
||||
$("#photoFileState").val("deleted");
|
||||
})
|
||||
|
||||
$(document).on('click', '#trDeleteBtn', function (){
|
||||
if(confirm("해임 하시겠습니까?")){
|
||||
if(confirm("삭제 하시겠습니까?")){
|
||||
contentFade("in");
|
||||
const trKey = Number($(".translatorKey").val());
|
||||
$.ajax({
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
<input type="hidden" class="versionNo" name="versionNo" th:value="${trInfo.versionNo}"/>
|
||||
<br>
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-8">
|
||||
<div class="col-10">
|
||||
<div class="row mb-1">
|
||||
<label for="eOgdp1" class="col-sm-1 col-form-label-sm text-center">관서</label>
|
||||
<div class="col-sm-3">
|
||||
|
|
@ -59,6 +59,21 @@
|
|||
<div class="col-sm-3">
|
||||
<input type="text" class="form-control" id="eTrEname" name="trName" th:value="${trInfo.trName}">
|
||||
</div>
|
||||
<label for="viewAptDt" class="col-sm-1 col-form-label-sm text-center">사진</label>
|
||||
<div class="col-sm-4">
|
||||
<input type="file" class="form-control" id="photoFile">
|
||||
</div>
|
||||
<th:block th:each="file:${trInfo.translatorFileList}">
|
||||
<th:block th:if="${file.fileSeq eq 1}">
|
||||
<input type="hidden" name="photoFileState" id="photoFileState">
|
||||
<input type="button" class="btn btn-outline-primary col-auto mx-1"
|
||||
id="downloadPhotoFile" value="다운로드"
|
||||
th:data-translatorkey="${file.translatorKey}" th:data-versionno="${file.versionNo}" th:data-fileseq="${file.fileSeq}">
|
||||
<input type="button" class="btn btn-outline-danger col-auto mx-1" id="deletePhotoFile" value="삭제">
|
||||
</th:block>
|
||||
</th:block>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label for="eTrSex" class="col-sm-1 col-form-label-sm text-center">성별</label>
|
||||
<div class="col-sm-3">
|
||||
<select class="form-select" id="eTrSex" name="trSex">
|
||||
|
|
@ -134,6 +149,25 @@
|
|||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-2 row">
|
||||
<label for="viewAptDt" class="col-sm-2 col-form-label-sm text-center">개인정보 동의 여부</label>
|
||||
<div class="col-sm-2">
|
||||
<input type="checkbox" class="mt-2" id="eInfoShareChk" name="infoShareChk" th:checked="${trInfo.infoShareChk eq 'T'}" value="T">
|
||||
</div>
|
||||
<label for="viewAptDt" class="col-sm-1 col-form-label-sm text-center">동의서</label>
|
||||
<div class="col-sm-4">
|
||||
<input type="file" class="form-control" id="infoShareFile" th:disabled="${trInfo.infoShareChk ne 'T'}">
|
||||
</div>
|
||||
<th:block th:each="file:${trInfo.translatorFileList}">
|
||||
<th:block th:if="${file.fileSeq eq 2}">
|
||||
<input type="hidden" name="infoShareFileState" id="infoShareFileState">
|
||||
<input type="button" class="btn btn-outline-primary col-auto mx-1 fileDownloadBtn"
|
||||
id="downloadInfoShareFile" value="다운로드"
|
||||
th:data-translatorkey="${file.translatorKey}" th:data-versionno="${file.versionNo}" th:data-fileseq="${file.fileSeq}">
|
||||
<input type="button" class="btn btn-outline-danger col-auto mx-1" id="deleteInfoShareFile" value="삭제">
|
||||
</th:block>
|
||||
</th:block>
|
||||
</div>
|
||||
<div class="mb-2 row">
|
||||
<label for="eRemark" class="col-sm-1 col-form-label-sm text-center">비고</label>
|
||||
<div class="col-sm-11">
|
||||
|
|
@ -141,7 +175,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-end">
|
||||
<button type="button" class="btn btn-secondary col-auto mx-1" id="trDeleteBtn" th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}">삭제</button>
|
||||
<button type="button" class="btn btn-danger col-auto mx-1" id="trDeleteBtn" th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}">삭제</button>
|
||||
<button type="button" class="btn btn-warning col-auto mx-1" id="updateBtn" th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}">수정</button>
|
||||
<button type="button" class="btn btn-primary col-auto mx-1" id="saveBtn" th:if="${accessAuth ne 'ACC001' and trInfo.translatorKey eq null}">저장</button>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,17 @@
|
|||
<div class="row mb-1">
|
||||
<label class="col-sm-1 col-form-label-sm text-center">성명</label>
|
||||
<label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.trName}"></label>
|
||||
<label class="col-sm-1 col-form-label-sm text-center">사진</label>
|
||||
<label class="col-sm-7 col-form-label-sm text-start">
|
||||
<th:block th:each="file:${trInfo.translatorFileList}">
|
||||
<th:block th:if="${file.fileSeq eq 1}">
|
||||
<a href="#" class="fileDownloadBtn" th:text="${#strings.concat(file.origNm, '.', file.fileExtn)}"
|
||||
th:data-translatorkey="${file.translatorKey}" th:data-versionno="${file.versionNo}" th:data-fileseq="${file.FileSeq}"></a>
|
||||
</th:block>
|
||||
</th:block>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-1 col-form-label-sm text-center">성별</label>
|
||||
<label class="col-sm-3 col-form-label-sm text-start">
|
||||
<th:block th:each="code:${session.commonCode.get('SEX')}">
|
||||
|
|
@ -58,6 +69,19 @@
|
|||
<label class="col-sm-1 col-form-label-sm text-center">해촉</label>
|
||||
<label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.dmlYn}"></label>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-2 col-form-label-sm text-center">개인정보 동의 여부</label>
|
||||
<label class="col-sm-2 col-form-label-sm text-start" th:text="${trInfo.infoShareChk eq 'T'?'O':'X'}"></label>
|
||||
<label class="col-sm-1 col-form-label-sm text-center">동의서</label>
|
||||
<label class="col-sm-7 col-form-label-sm text-start">
|
||||
<th:block th:each="file:${trInfo.translatorFileList}">
|
||||
<th:block th:if="${file.fileSeq eq 2}">
|
||||
<a href="#" class="fileDownloadBtn" th:text="${#strings.concat(file.origNm, '.', file.fileExtn)}"
|
||||
th:data-translatorkey="${file.translatorKey}" th:data-versionno="${file.versionNo}" th:data-fileseq="${file.FileSeq}"></a>
|
||||
</th:block>
|
||||
</th:block>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-1 col-form-label-sm text-center">비고</label>
|
||||
<label class="col-sm-11 col-form-label-sm text-start" th:text="${trInfo.remark}"></label>
|
||||
|
|
|
|||
Loading…
Reference in New Issue