통역인 현황 첨부파일 기능 추가.

master
강석 최 2023-04-04 18:50:42 +09:00
parent 7ec8d0a5ca
commit 225a4d48f4
17 changed files with 308 additions and 189 deletions

View File

@ -56,6 +56,8 @@ public class BaseService {
protected String intelligenceNetworkPath; protected String intelligenceNetworkPath;
@Value("${file.dir.affairTemp}") @Value("${file.dir.affairTemp}")
protected String affairTempPath; protected String affairTempPath;
@Value("${file.dir.translator}")
protected String translatorPath;
protected String calculationSize(double fileSize){ protected String calculationSize(double fileSize){
String[] units = {"bytes", "KB", "MB", "GB", "TB", "PB"}; String[] units = {"bytes", "KB", "MB", "GB", "TB", "PB"};

View File

@ -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.boardInvestigation.service.IvsgtService;
import com.dbnt.faisp.main.ivsgtMgt.majorStatus.service.MajorStatusService; import com.dbnt.faisp.main.ivsgtMgt.majorStatus.service.MajorStatusService;
import com.dbnt.faisp.main.publicBoard.service.PublicBoardService; import com.dbnt.faisp.main.publicBoard.service.PublicBoardService;
import com.dbnt.faisp.util.Utils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
@ -114,7 +115,7 @@ public class FileController extends BaseService{
try { try {
File file = new File(fileInfo.getSavePath(), fileInfo.getConvNm()); 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)); in = new BufferedInputStream(new FileInputStream(file));
out = new BufferedOutputStream(response.getOutputStream()); out = new BufferedOutputStream(response.getOutputStream());
FileCopyUtils.copy(in, out); FileCopyUtils.copy(in, out);
@ -190,7 +191,7 @@ public class FileController extends BaseService{
zout.close(); zout.close();
setDisposition(downloadFileName, request, response); Utils.setDisposition(downloadFileName, request, response);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(zipFile)); BufferedInputStream in = new BufferedInputStream(new FileInputStream(zipFile));
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
FileCopyUtils.copy(in, out); FileCopyUtils.copy(in, out);
@ -260,58 +261,4 @@ public class FileController extends BaseService{
} }
return downloadFile; 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";
}
} }

View File

@ -207,9 +207,9 @@ public class FipTargetController {
@GetMapping("/partInfoFileDownload") @GetMapping("/partInfoFileDownload")
public void partInfoFileDownload(HttpServletRequest request, public void partInfoFileDownload(HttpServletRequest request,
HttpServletResponse response, HttpServletResponse response,
Integer fileSeq,
Integer piSeq, Integer piSeq,
Integer versionNo) { Integer versionNo,
Integer fileSeq) {
PartInfoFile downloadFile = fipTargetService.selectPartInfoFileDown(fileSeq, piSeq,versionNo); PartInfoFile downloadFile = fipTargetService.selectPartInfoFileDown(fileSeq, piSeq,versionNo);
BufferedInputStream in; BufferedInputStream in;
@ -217,7 +217,7 @@ public class FipTargetController {
try { try {
File file = new File(downloadFile.getFilePath(), downloadFile.getConvNm()); 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)); in = new BufferedInputStream(new FileInputStream(file));
out = new BufferedOutputStream(response.getOutputStream()); out = new BufferedOutputStream(response.getOutputStream());
FileCopyUtils.copy(in, out); 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") @GetMapping("/partWorkList")
@ -395,7 +346,7 @@ public class FipTargetController {
try { try {
File file = new File(downloadFile.getFilePath(), downloadFile.getConvNm()); 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)); in = new BufferedInputStream(new FileInputStream(file));
out = new BufferedOutputStream(response.getOutputStream()); out = new BufferedOutputStream(response.getOutputStream());
FileCopyUtils.copy(in, out); FileCopyUtils.copy(in, out);
@ -492,7 +443,7 @@ public class FipTargetController {
try { try {
File file = new File(downloadFile.getFilePath(), downloadFile.getConvNm()); 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)); in = new BufferedInputStream(new FileInputStream(file));
out = new BufferedOutputStream(response.getOutputStream()); out = new BufferedOutputStream(response.getOutputStream());
FileCopyUtils.copy(in, out); FileCopyUtils.copy(in, out);

View File

@ -3,6 +3,7 @@ package com.dbnt.faisp.main.translator;
import com.dbnt.faisp.main.authMgt.service.AuthMgtService; import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
import com.dbnt.faisp.main.translator.model.Translator; import com.dbnt.faisp.main.translator.model.Translator;
import com.dbnt.faisp.main.translator.model.TranslatorCrr; 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.translator.service.TranslatorService;
import com.dbnt.faisp.main.userInfo.model.UserInfo; import com.dbnt.faisp.main.userInfo.model.UserInfo;
import com.dbnt.faisp.util.ParamMap; import com.dbnt.faisp.util.ParamMap;
@ -10,15 +11,18 @@ import com.dbnt.faisp.util.Utils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import java.io.IOException; import java.io.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
@ -32,14 +36,10 @@ public class TranslatorController {
@GetMapping("/info") @GetMapping("/info")
public ModelAndView translatorInfo(@AuthenticationPrincipal UserInfo loginUser,Translator translator,HttpServletResponse response) { public ModelAndView translatorInfo(@AuthenticationPrincipal UserInfo loginUser,
ModelAndView mav; Translator translator,
if (translator.getDashboardFlag()){ HttpServletResponse response) {
mav = new ModelAndView("translator/translatorDashboard"); ModelAndView mav = new ModelAndView("translator/translator");
translator.setRowCnt(5);
}else{
mav = new ModelAndView("translator/translator");
}
translator.setDownOrganCdList(loginUser.getDownOrganCdList()); translator.setDownOrganCdList(loginUser.getDownOrganCdList());
//엑셀다운 //엑셀다운
if(translator.getExcel() != null && translator.getExcel().equals("Y")){ if(translator.getExcel() != null && translator.getExcel().equals("Y")){
@ -72,7 +72,10 @@ public class TranslatorController {
} }
@PostMapping("/saveTranslatorInfo") @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.setWrtUserSeq(loginUser.getUserSeq());
translator.setWrtNm(loginUser.getUserNm()); translator.setWrtNm(loginUser.getUserNm());
translator.setWrtOrgan(loginUser.getOgCd()); translator.setWrtOrgan(loginUser.getOgCd());
@ -139,18 +142,35 @@ public class TranslatorController {
return trKey; return trKey;
} }
@PostMapping("/deleteCareer")
@ResponseBody
public int deleteCareer(@RequestBody TranslatorCrr translatorCrr) {
int trKey = translatorSevice.deleteCareer(translatorCrr);
return trKey;
}
@PostMapping("/deleteTranslatorInfo") @PostMapping("/deleteTranslatorInfo")
@ResponseBody @ResponseBody
public void deleteTranslatorInfo(@RequestBody int trKey) { public void deleteTranslatorInfo(@RequestBody int trKey) {
translatorSevice.deleteTranslatorInfo(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") @GetMapping("/statisticsLang")
public ModelAndView statisticsLang() { public ModelAndView statisticsLang() {

View File

@ -10,13 +10,16 @@ import lombok.Setter;
import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate; import org.hibernate.annotations.DynamicUpdate;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.multipart.MultipartFile;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
@Getter @Getter
@ -77,12 +80,23 @@ public class Translator extends BaseModel implements Serializable{
private LocalDateTime wrtDt; private LocalDateTime wrtDt;
@Column(name = "naturalization") @Column(name = "naturalization")
private String 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 @Transient
private String excel; private String excel;
@Transient
private List<MultipartFile> multipartFileList;
@Embeddable @Embeddable
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@ -93,24 +107,4 @@ public class Translator extends BaseModel implements Serializable{
private Integer versionNo; 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 + "]";
}
} }

View File

@ -3,8 +3,13 @@ package com.dbnt.faisp.main.translator.repository;
import com.dbnt.faisp.main.translator.model.TranslatorFile; import com.dbnt.faisp.main.translator.model.TranslatorFile;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface TranslatorFileRepository extends JpaRepository<TranslatorFile, TranslatorFile.TranslatorFileId> { 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);
} }

View File

@ -1,28 +1,35 @@
package com.dbnt.faisp.main.translator.service; 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.mapper.TranslatorMapper;
import com.dbnt.faisp.main.translator.model.Translator; import com.dbnt.faisp.main.translator.model.Translator;
import com.dbnt.faisp.main.translator.model.Translator.TranslatorId; import com.dbnt.faisp.main.translator.model.Translator.TranslatorId;
import com.dbnt.faisp.main.translator.model.TranslatorCrr; 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.TranslatorCareerRepository;
import com.dbnt.faisp.main.translator.repository.TranslatorFileRepository;
import com.dbnt.faisp.main.translator.repository.TranslatorRepository; import com.dbnt.faisp.main.translator.repository.TranslatorRepository;
import com.dbnt.faisp.util.ParamMap; import com.dbnt.faisp.util.ParamMap;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class TranslatorService { public class TranslatorService extends BaseService {
private final TranslatorRepository translatorRepository; private final TranslatorRepository translatorRepository;
private final TranslatorCareerRepository translatorCareerRepository; private final TranslatorCareerRepository translatorCareerRepository;
private final TranslatorFileRepository translatorFileRepository;
private final TranslatorMapper translatorMapper; private final TranslatorMapper translatorMapper;
@Transactional @Transactional
@ -35,7 +42,62 @@ public class TranslatorService {
translator.setVersionNo(translator.getVersionNo()+1); translator.setVersionNo(translator.getVersionNo()+1);
} }
translatorRepository.save(translator); 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) { public List<Translator> selectTranslatorList(Translator translator) {
return translatorMapper.selectTranslatorList(translator); return translatorMapper.selectTranslatorList(translator);
@ -46,11 +108,22 @@ public class TranslatorService {
} }
public Translator selectTranslator(Integer translatorKey, Integer versionNo) { 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) { 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) { public List<TranslatorCrr> selectCareerList(Integer translatorKey) {
@ -81,22 +154,6 @@ public class TranslatorService {
return trKey; 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 @Transactional
public void deleteTranslatorInfo(int trKey) { public void deleteTranslatorInfo(int trKey) {
@ -104,6 +161,10 @@ public class TranslatorService {
translatorRepository.deleteByTranslatorKey(trKey); translatorRepository.deleteByTranslatorKey(trKey);
} }
public TranslatorFile selectTranslatorFile(Integer translatorKey, Integer versionNo, Integer fileSeq) {
return translatorFileRepository.findByTranslatorKeyAndVersionNoAndFileSeq(translatorKey, versionNo, fileSeq).orElse(null);
}
public List<ParamMap> selectStatisticsLangCnt() { public List<ParamMap> selectStatisticsLangCnt() {
return translatorMapper.selectStatisticsLangCnt(); return translatorMapper.selectStatisticsLangCnt();
} }
@ -115,5 +176,4 @@ public class TranslatorService {
public List<ParamMap> selectTranslatorListEx(Translator translator) { public List<ParamMap> selectTranslatorListEx(Translator translator) {
return translatorMapper.selectTranslatorListEx(translator); return translatorMapper.selectTranslatorListEx(translator);
} }
} }

View File

@ -4,6 +4,7 @@ package com.dbnt.faisp.util;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.net.URLEncoder;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
@ -1095,4 +1096,59 @@ public class Utils {
} }
return ""; 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";
}
} }

View File

@ -32,6 +32,7 @@ file.dir.activityCase=/activityCase
file.dir.majorStatus=/majorStatus file.dir.majorStatus=/majorStatus
file.dir.monitoring=/monitoring file.dir.monitoring=/monitoring
file.dir.intelligenceNetwork=/intelligenceNetwork file.dir.intelligenceNetwork=/intelligenceNetwork
file.dir.translator=/translator
file.dir.affairTemp=/affairTemp file.dir.affairTemp=/affairTemp

View File

@ -41,6 +41,7 @@ file.dir.activityCase=/activityCase
file.dir.majorStatus=/majorStatus file.dir.majorStatus=/majorStatus
file.dir.monitoring=/monitoring file.dir.monitoring=/monitoring
file.dir.intelligenceNetwork=/intelligenceNetwork file.dir.intelligenceNetwork=/intelligenceNetwork
file.dir.translator=/translator
file.dir.affairTemp=/affairTemp file.dir.affairTemp=/affairTemp

View File

@ -41,6 +41,7 @@ file.dir.activityCase=/activityCase
file.dir.majorStatus=/majorStatus file.dir.majorStatus=/majorStatus
file.dir.monitoring=/monitoring file.dir.monitoring=/monitoring
file.dir.intelligenceNetwork=/intelligenceNetwork file.dir.intelligenceNetwork=/intelligenceNetwork
file.dir.translator=/translator
file.dir.affairTemp=/affairTemp file.dir.affairTemp=/affairTemp

View File

@ -37,6 +37,7 @@ file.dir.activityCase=/activityCase
file.dir.majorStatus=/majorStatus file.dir.majorStatus=/majorStatus
file.dir.monitoring=/monitoring file.dir.monitoring=/monitoring
file.dir.intelligenceNetwork=/intelligenceNetwork file.dir.intelligenceNetwork=/intelligenceNetwork
file.dir.translator=/translator
file.dir.affairTemp=/affairTemp file.dir.affairTemp=/affairTemp

View File

@ -37,6 +37,7 @@ file.dir.activityCase=/activityCase
file.dir.majorStatus=/majorStatus file.dir.majorStatus=/majorStatus
file.dir.monitoring=/monitoring file.dir.monitoring=/monitoring
file.dir.intelligenceNetwork=/intelligenceNetwork file.dir.intelligenceNetwork=/intelligenceNetwork
file.dir.translator=/translator
file.dir.affairTemp=/affairTemp file.dir.affairTemp=/affairTemp

View File

@ -230,14 +230,7 @@ $(document).on('click', '#captainPhoto', function (){
fileDownloadDiv.className="d-none" 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){ function getFishingBoatEditModal(cdsKey){
$.ajax({ $.ajax({
url: '/faStatistics/fishingBoatEditModal', url: '/faStatistics/fishingBoatEditModal',

View File

@ -62,6 +62,14 @@ $(document).on('click', '#saveBtn,#updateBtn', function (){
const trInfoForm = $("#trInfoForm"); const trInfoForm = $("#trInfoForm");
trInfoForm.find('select,input').removeAttr("disabled"); trInfoForm.find('select,input').removeAttr("disabled");
const formData = new FormData(trInfoForm[0]); 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({ $.ajax({
type : 'POST', type : 'POST',
data : formData, data : formData,
@ -112,16 +120,6 @@ $(document).on('click', '#approvalTab', function (){
document.getElementById('approvalTab').classList.add('active'); 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 (){ $(document).on('change', '#eTrNny', function (){
if($(this).val() === "NNY001"){ if($(this).val() === "NNY001"){
$("#eTrVisa").attr("disabled", "disabled"); $("#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 (){ $(document).on('click', '.addCareerBtn', function (){
const hisGubun = $(this).attr('data-hisgubun') const hisGubun = $(this).attr('data-hisgubun')
$.ajax({ $.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 (){ $(document).on('click', '#trDeleteBtn', function (){
if(confirm("해임 하시겠습니까?")){ if(confirm("삭제 하시겠습니까?")){
contentFade("in"); contentFade("in");
const trKey = Number($(".translatorKey").val()); const trKey = Number($(".translatorKey").val());
$.ajax({ $.ajax({

View File

@ -27,7 +27,7 @@
<input type="hidden" class="versionNo" name="versionNo" th:value="${trInfo.versionNo}"/> <input type="hidden" class="versionNo" name="versionNo" th:value="${trInfo.versionNo}"/>
<br> <br>
<div class="row justify-content-center"> <div class="row justify-content-center">
<div class="col-8"> <div class="col-10">
<div class="row mb-1"> <div class="row mb-1">
<label for="eOgdp1" class="col-sm-1 col-form-label-sm text-center">관서</label> <label for="eOgdp1" class="col-sm-1 col-form-label-sm text-center">관서</label>
<div class="col-sm-3"> <div class="col-sm-3">
@ -59,6 +59,21 @@
<div class="col-sm-3"> <div class="col-sm-3">
<input type="text" class="form-control" id="eTrEname" name="trName" th:value="${trInfo.trName}"> <input type="text" class="form-control" id="eTrEname" name="trName" th:value="${trInfo.trName}">
</div> </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> <label for="eTrSex" class="col-sm-1 col-form-label-sm text-center">성별</label>
<div class="col-sm-3"> <div class="col-sm-3">
<select class="form-select" id="eTrSex" name="trSex"> <select class="form-select" id="eTrSex" name="trSex">
@ -134,6 +149,25 @@
</select> </select>
</div> </div>
</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"> <div class="mb-2 row">
<label for="eRemark" class="col-sm-1 col-form-label-sm text-center">비고</label> <label for="eRemark" class="col-sm-1 col-form-label-sm text-center">비고</label>
<div class="col-sm-11"> <div class="col-sm-11">
@ -141,7 +175,7 @@
</div> </div>
</div> </div>
<div class="row justify-content-end"> <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-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> <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> </div>

View File

@ -15,6 +15,17 @@
<div class="row mb-1"> <div class="row mb-1">
<label class="col-sm-1 col-form-label-sm text-center">성명</label> <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-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-1 col-form-label-sm text-center">성별</label>
<label class="col-sm-3 col-form-label-sm text-start"> <label class="col-sm-3 col-form-label-sm text-start">
<th:block th:each="code:${session.commonCode.get('SEX')}"> <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-1 col-form-label-sm text-center">해촉</label>
<label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.dmlYn}"></label> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.dmlYn}"></label>
</div> </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"> <div class="row mb-1">
<label class="col-sm-1 col-form-label-sm text-center">비고</label> <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> <label class="col-sm-11 col-form-label-sm text-start" th:text="${trInfo.remark}"></label>