fix : SRI 작업완료

TaehunPark 2022-11-18 17:20:20 +09:00
parent 0c02c373ba
commit 2ab3c28587
9 changed files with 181 additions and 86 deletions

View File

@ -88,7 +88,8 @@ public class SecurityConfig{
"/affairResult/**",
"/faStatistics/**",
"/translator/**",
"/faisp/**"
"/faisp/**",
"/sri/**"
).hasRole(Role.USER.name()) // USER 접근 허용
.antMatchers(
"/authMgt/**",

View File

@ -2,10 +2,9 @@ package com.dbnt.faisp.main.fpiMgt.sri;
import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
import com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
import com.dbnt.faisp.main.faRpt.model.FaRptBoard;
import com.dbnt.faisp.main.faRpt.model.FaRptReadUser;
import com.dbnt.faisp.main.faRpt.service.FaRptService;
import com.dbnt.faisp.main.fpiMgt.sri.model.Sri;
import com.dbnt.faisp.main.fpiMgt.sri.model.SriReadUser;
import com.dbnt.faisp.main.fpiMgt.sri.service.SriService;
import com.dbnt.faisp.main.userInfo.model.UserInfo;
import lombok.RequiredArgsConstructor;
@ -22,7 +21,7 @@ import java.util.List;
@RequiredArgsConstructor
@RequestMapping("/sri")
public class SriController {
private final FaRptService faRptService;
private final SriService sriService;
private final AuthMgtService authMgtService;
private final CodeMgtService codeMgtService;
@ -34,7 +33,7 @@ public class SriController {
if(sri.getActiveTab()==null){
sri.setActiveTab("send");
}
mav.addObject("searchUrl", "/faRpt/faRptBoard");
mav.addObject("searchUrl", "/sri/sriBoard");
String accessAuth = authMgtService.selectAccessConfigList
(loginUser.getUserSeq(), "/sri/sriBoard").get(0).getAccessAuth();
mav.addObject("accessAuth", accessAuth);
@ -67,20 +66,19 @@ public class SriController {
public ModelAndView faRptEditModal(@AuthenticationPrincipal UserInfo loginUser, Sri sri){
ModelAndView mav = new ModelAndView("sri/sriEditModal");
if(sri.getFaSriKey()!=null){
//faRptBoard = faRptService.selectFaRptBoard(faRptBoard.getFaRptKey(), null);
sri = sriService.selectFaSriBoard(sri.getFaSriKey(), null);
}else{
/*
if(faRptBoard.getRefKey()!=null){
FaRptReadUser readUser = new FaRptReadUser();
readUser.setUserSeq(faRptBoard.getWrtUserSeq());
readUser.setOgCd(faRptBoard.getWrtOrgan());
readUser.setOfcCd(faRptBoard.getWrtPart());
readUser.setTitleCd(faRptBoard.getWrtUserGrd());
readUser.setUserNm(faRptBoard.getWrtUserNm());
faRptBoard.setReadUserList(new ArrayList<>());
faRptBoard.getReadUserList().add(readUser);
}
*/
if(sri.getRefKey()!=null){
SriReadUser readUser = new SriReadUser();
readUser.setUserSeq(sri.getWrtUserSeq());
readUser.setOgCd(sri.getWrtOrgan());
readUser.setOfcCd(sri.getWrtPart());
readUser.setTitleCd(sri.getWrtTitle());
readUser.setUserNm(sri.getWrtUserNm());
sri.setReadUserList(new ArrayList<>());
sri.getReadUserList().add(readUser);
}
sri.setWrtUserSeq(loginUser.getUserSeq());
sri.setWrtOrgan(loginUser.getOgCd());
sri.setWrtPart(loginUser.getOfcCd());
@ -119,6 +117,11 @@ public class SriController {
(loginUser.getUserSeq(), "/sri/sriBoard").get(0).getAccessAuth());
return mav;
}
@PostMapping("/sriDelete")
public void sriDelete(@AuthenticationPrincipal UserInfo loginUser, @RequestBody List<Sri> sri){
sriService.sriDelete(sri);
}

View File

@ -51,6 +51,8 @@ public class Sri extends BaseModel {
@Column(name = "wrt_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime wrtDt;
@Column(name = "ref_key")
private Integer refKey;
@Transient
private Integer receiveUserSeq;

View File

@ -2,15 +2,6 @@ package com.dbnt.faisp.main.fpiMgt.sri.service;
import com.dbnt.faisp.config.BaseService;
import com.dbnt.faisp.config.FileInfo;
import com.dbnt.faisp.main.faRpt.mapper.FaRptMapper;
import com.dbnt.faisp.main.faRpt.model.FaRptBoard;
import com.dbnt.faisp.main.faRpt.model.FaRptFile;
import com.dbnt.faisp.main.faRpt.model.FaRptReadUser;
import com.dbnt.faisp.main.faRpt.model.HashTagLinkFaRpt;
import com.dbnt.faisp.main.faRpt.repository.FaRptBoardRepository;
import com.dbnt.faisp.main.faRpt.repository.FaRptFileRepository;
import com.dbnt.faisp.main.faRpt.repository.FaRptReadUserRepository;
import com.dbnt.faisp.main.faRpt.repository.HashTagLinkFaRptRepository;
import com.dbnt.faisp.main.fpiMgt.sri.mapper.SriMapper;
import com.dbnt.faisp.main.fpiMgt.sri.model.Sri;
import com.dbnt.faisp.main.fpiMgt.sri.model.SriFile;
@ -18,8 +9,9 @@ import com.dbnt.faisp.main.fpiMgt.sri.model.SriReadUser;
import com.dbnt.faisp.main.fpiMgt.sri.repository.SriFileRepository;
import com.dbnt.faisp.main.fpiMgt.sri.repository.SriReadUserRepository;
import com.dbnt.faisp.main.fpiMgt.sri.repository.SriRepository;
import com.dbnt.faisp.main.hashTag.service.HashTagService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@ -32,17 +24,17 @@ import java.util.UUID;
@Service
@RequiredArgsConstructor
public class SriService extends BaseService {
private final HashTagService hashTagService;
private final FaRptBoardRepository faRptBoardRepository;
private final FaRptFileRepository faRptFileRepository;
private final FaRptReadUserRepository faRptReadUserRepository;
private final HashTagLinkFaRptRepository hashTagLinkFaRptRepository;
private final FaRptMapper faRptMapper;
private final SriRepository sriRepository;
private final SriReadUserRepository sriReadUserRepository;
private final SriFileRepository sriFileRepository;
private final SriMapper sriMapper;
@Value("${file.dir}")
protected String fileDir;
@Value("${file.dir.sri}")
protected String sriDir;
public List<Sri> selectSriList(Sri sri) {
return sriMapper.selectSriList(sri);
@ -62,7 +54,7 @@ public class SriService extends BaseService {
saveUploadFiles(faSriKey, sri.getMultipartFileList());
}
if(sri.getReadUserList() != null){
saveFaRptReadUser(faSriKey, sri.getReadUserList());
saveSriReadUser(faSriKey, sri.getReadUserList());
}
return faSriKey;
@ -88,7 +80,7 @@ public class SriService extends BaseService {
private void saveFaRptReadUser(Integer faSriKey, List<SriReadUser> readUserList) {
private void saveSriReadUser(Integer faSriKey, List<SriReadUser> readUserList) {
sriReadUserRepository.deleteByFaSriKey(faSriKey);
for(SriReadUser readUser: readUserList){
readUser.setFaSriKey(faSriKey);
@ -101,7 +93,7 @@ public class SriService extends BaseService {
int fileSeq = lastFile==null?1:(lastFile.getFileSeq()+1);
for(MultipartFile file: multipartFileList){
String saveName = UUID.randomUUID().toString();
String path = locationPath+File.separator+"faRpt"+File.separator;
String path = fileDir+sriDir;
saveFile(file, new File(path+File.separator+saveName));
String originalFilename = file.getOriginalFilename();
@ -131,6 +123,15 @@ public class SriService extends BaseService {
public FileInfo selectFaSriFile(Integer faSriKey, Integer fileSeq) {
return sriFileRepository.findById(new SriFile.SriFileId(faSriKey, fileSeq)).orElse(null);
}
@Transactional
public void sriDelete(List<Sri> sri) {
for(Sri sriData : sri) {
Sri dbSri = sriRepository.findById(sriData.getFaSriKey()).orElse(null);
dbSri.setStatus("DST008");
sriRepository.save(dbSri);
}
}

View File

@ -16,6 +16,7 @@ file.dir.equip=/equip
file.dir.sailor=sailor
file.dir.affair=affair
file.dir.editor=editor
file.dir.sri=/sri
editor.img.view=/file/editorFileDisplay?fileNm=

View File

@ -12,7 +12,6 @@ function getSriEditModal(faSriKey){
dataType:"html",
success: function(html){
$("#sriEditModalContent").empty().append(html)
$("#sriEditModal").modal('show');
$("#faSriEdate").datepicker({
format: "yyyy-mm-dd",
language: "ko",
@ -31,6 +30,7 @@ function getSriEditModal(faSriKey){
})*/
CrossEditor.EditorStart();
setUploadDiv();
$("#sriEditModal").modal('show');
},
error:function(){
@ -69,9 +69,22 @@ $(document).on('click', '#saveSriBtn', function (){
})
function saveSri(faSriState){
if(contentCheck()){
if(confirm("저장하시겠습니까?")){
$("#status").val(faSriState);
if(faSriState == 'DST001'){
if(confirm("임시저장하시겠습니까?")){
save(faSriState);
}
}else{
if(contentCheck()){
if(confirm("저장하시겠습니까?")){
save(faSriState);
}
}
}
}
function save(faSriState){
$("#status").val(faSriState);
contentFade("in");
const formData = new FormData($("#sriEditForm")[0]);
for(const file of files) {
@ -96,27 +109,31 @@ function saveSri(faSriState){
processData: false,
contentType: false,
success : function(result) {
alert("저장되었습니다.");
if(faSriState == 'DST001'){
alert("임시저장되었습니다.");
}else{
alert("저장되었습니다.");
}
contentFade("out");
$("#sriEditModal").modal('hide');
//getFaRptViewModal(result);
getSriViewModal(result);
},
error : function(xhr, status) {
alert("저장에 실패하였습니다.")
if(faSriState == 'DST001'){
alert("임시저장에 실패하였습니다.")
}else{
alert("저장에 실패하였습니다.")
}
contentFade("out");
}
})
}
}
})
}
$(document).on('click', '.faSriTr', function (){
const chkBox = $(this).find(".rowChkBox");
if(chkBox.length>0){
$(".trChkBox").prop("checked", false);
chkBox[0].checked = !chkBox[0].checked;
}
getSriViewModal(Number($(this).find(".faSriKey").val()));
$(document).on('click', '.faSriTr', function (event){
const target = event.target;
if(!(target.className === "sriChk" ||$(target).parents("td").length>0)){
getSriViewModal(Number($(this).find(".faSriKey").val()));
}
})
function getSriViewModal(faSriKey){
@ -145,8 +162,77 @@ $(document).on('click', '#allTab', function (){
location.href = "/sri/sriBoard?activeTab=all";
})
//
$(document).on('click', '#editFaSriBtn', function (){
$("#sriViewModal").modal('hide');
getSriEditModal({faSriKey: Number($(this).attr("data-fasrikey"))});
})
function OnInitCompleted(e){
e.editorTarget.SetBodyValue(document.getElementById("content").value);
}
$(document).on('click', '#reSendBtn', function (){
$("#sriViewModal").modal('hide');
const faSri = {
refKey: Number($(this).attr("data-fasrikey")),
wrtUserSeq: $("#wrtUserSeq").val(),
wrtOrgan: $("#wrtOrgan").val(),
wrtPart: $("#wrtPart").val(),
wrtTitle: $("#wrtTitle").val(),
wrtUserNm: $("#wrtUserNm").val()
}
getSriEditModal(faSri);
})
$(document).on('click', '#saveTempBtn', function (){
saveSri('DST001')
})
$(document).on('click', '#sriDeleteBtn', function (){
if($('input:checkbox[name=sriChk]:checked').length < 1){
alert("게시물을 선택해주세요");
return false;
}
if(confirm("삭제시 되돌릴 수 없습니다. 대상을 삭제처리 하시겠습니까?")){
const checkArr = [];
$('input:checkbox[name=sriChk]:checked').each(function (idx, el){
checkArr.push({});
const target = $(el);
checkArr[idx].faSriKey = Number(target.parents('tr').find('.faSriKey').val());
})
deleteSri(checkArr);
}
})
$(document).on('click', '#deleteSri', function (){
if(confirm("삭제시 되돌릴 수 없습니다. 대상을 삭제처리 하시겠습니까?")){
const checkArr = [];
checkArr.push({});
checkArr[0].faSriKey = Number($(this).attr("data-fasrikey"));
deleteSri(checkArr);
}
})
function deleteSri(checkArr){
$.ajax({
type : 'POST',
url : "/sri/sriDelete",
data : JSON.stringify(checkArr),
contentType: 'application/json',
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function() {
alert("삭제처리 되었습니다.");
location.reload();
},
error : function(xhr, status) {
alert("삭제처리에 실패하였습니다");
}
})
}
$(function(){
$("#dateSelectorDiv").datepicker({
@ -156,10 +242,6 @@ $(function(){
});
})
$(document).on('click', '#editFaRptBtn', function (){
$("#faRptViewModal").modal('hide');
getFaRptEditModal({faRptKey: Number($(this).attr("data-farptkey"))});
})
$(document).on('click', '.rowDeleteBtn', function (){
$(this).parents(".readUserRow").remove()
@ -167,22 +249,6 @@ $(document).on('click', '.rowDeleteBtn', function (){
})
$(document).on('click', '#saveTempBtn', function (){
saveFaRpt('DST001')
})
$(document).on('click', '#reSendBtn', function (){
$("#faRptViewModal").modal('hide');
const faRpt = {
refKey: Number($(this).attr("data-farptkey")),
wrtUserSeq: $("#wrtUserSeq").val(),
wrtOrgan: $("#wrtOrgan").val(),
wrtPart: $("#wrtPart").val(),
wrtUserGrd: $("#wrtUserGrd").val(),
wrtUserNm: $("#wrtUserNm").val()
}
getFaRptEditModal(faRpt);
})
function setReadUserRowNum(){

View File

@ -87,12 +87,13 @@
<th>작성일시</th>
</tr>
</thead>
<tbody>
<tbody>
<tr class="faSriTr" th:each="sri:${SriList}">
<th:block>
<input type="hidden" class="faSriKey" th:value="${sri.faSriKey}">
</th:block>
<td><input type="checkbox" class="trChkBox"></td>
<th:block th:unless="${sri.status eq 'DST008'}">
<td class="sriChk"><input type="checkbox" name="sriChk" class="trChkBox"></td>
<td th:if="${sri.status ne 'receive'}">
<th:block th:each="commonCode:${session.commonCode.get('DST')}">
<th:text th:if="${commonCode.itemCd eq sri.status}" th:text="${commonCode.itemValue}"></th:text>
@ -114,12 +115,15 @@
</th:block>
<td th:text="${sri.wrtUserNm}"></td>
<td th:text="${#temporals.format(sri.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
</th:block>
</tr>
</tbody>
</table>
</div>
<div class="row justify-content-between">
<div class="col-auto"></div>
<div class="col-auto">
<button type="button" class="btn btn-danger" id="sriDeleteBtn">삭제</button>
</div>
<div class="col-auto">
<nav aria-label="Page navigation">
<ul class="pagination">

View File

@ -14,6 +14,7 @@
<input type="hidden" name="wrtUserSeq" th:value="${sri.wrtUserSeq}">
<input type="hidden" name="wrtTitle" th:value="${sri.wrtTitle}">
<input type="hidden" name="status" id="status" th:value="${sri.status}">
<input type="hidden" name="refKey" th:value="${sri.refKey}">
<div class="row">
<div class="col-8">
<div class="mb-3 row">
@ -26,6 +27,7 @@
<input type="text" class="form-control form-control-sm" id="wrtDt" name="wrtDt" th:value="${#temporals.format(sri.wrtDt, 'yyyy-MM-dd HH:mm')}" readonly>
</div>
</div>
<th:block th:if="${sri.refKey eq null}">
<div class="mb-3 row">
<label for="faRptType" class="col-sm-2 col-form-label col-form-label-sm text-center">분류</label>
<div class="col-sm-4">
@ -36,15 +38,21 @@
</th:block>
</select>
</div>
<label for="faRptType" class="col-sm-2 col-form-label col-form-label-sm text-center">제출기한</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" id="faSriEdate" name="faSriEdate" th:value="${sri.faSriEdate}" readonly>
</div>
<label for="faRptType" class="col-sm-2 col-form-label col-form-label-sm text-center">제출기한</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" id="faSriEdate" name="faSriEdate" th:value="${sri.faSriEdate}" readonly>
</div>
</div>
</th:block>
<div class="mb-3 row">
<label for="title" class="col-sm-2 col-form-label col-form-label-sm text-center">제목</label>
<div class="col-sm-10">
<th:block th:if="${sri.refKey eq null}">
<input type="text" class="form-control form-control-sm" id="title" name="title" th:value="${sri.title}">
</th:block>
<th:block th:unless="${sri.refKey eq null}">
<input type="text" class="form-control form-control-sm" id="title" name="title" th:value="[회신]">
</th:block>
</div>
</div>
<div class="mb-3 row justify-content-center">
@ -62,7 +70,7 @@
<br>파일을 업로드 해주세요.
</th:block>
<th:block th:unless="${#arrays.isEmpty(sri.fileList)}">
<div class='row-col-6' th:each="faRptFile:${sri.fileList}">
<div class='row-col-6' th:each="sriFile:${sri.fileList}">
<span th:data-fileseq="${sriFile.fileSeq}" th:text="|${sriFile.origNm}.${sriFile.fileExtn} ${sriFile.fileSize}|"></span>
<a href='#' class='uploadedFileDelete text-danger text-decoration-none'>삭제</a>
</div>

View File

@ -126,12 +126,21 @@
</div>
</div>
</div>
<div class="modal-footer">
<div class="modal-footer justify-content-between">
<div class="col-auto">
<th:block th:unless="${FaSri.status eq 'DST008'}">
<button type="button" class="btn btn-danger" id="deleteSri" th:if="${userSeq eq FaSri.wrtUserSeq} and ${accessAuth eq 'ACC003'}" th:data-fasrikey="${FaSri.faSriKey}">삭제</button>
</th:block>
</div>
<div class="col-auto">
<th:block th:if="${userSeq eq FaSri.wrtUserSeq}">
<button type="button" class="btn btn-warning" id="editFaRptBtn" th:data-farptkey="${FaSri.faSriKey}">수정</button>
<button type="button" class="btn btn-warning" id="editFaSriBtn" th:data-fasrikey="${FaSri.faSriKey}">수정</button>
</th:block>
<th:block th:if="${userSeq ne FaSri.wrtUserSeq}">
<button type="button" class="btn btn-success" id="reSendBtn" th:data-farptkey="${FaSri.faSriKey}">회신</button>
<th:block th:unless="${FaSri.faSriEdate eq null}">
<button type="button" class="btn btn-success" id="reSendBtn" th:if="${FaSri.faSriEdate} >= ${#temporals.createToday()}" th:data-fasrikey="${FaSri.faSriKey}">회신</button>
</th:block>
</th:block>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
</div>
</div>