sri 수신자 추가 기능 추가.
parent
2af6670c38
commit
372ede5aad
|
|
@ -2,6 +2,7 @@ package com.dbnt.faisp.main.faRpt;
|
||||||
|
|
||||||
import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
|
import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
|
||||||
import com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
|
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.model.FaRptReadUser;
|
||||||
import com.dbnt.faisp.main.faRpt.model.Sri;
|
import com.dbnt.faisp.main.faRpt.model.Sri;
|
||||||
import com.dbnt.faisp.main.faRpt.model.SriReadUser;
|
import com.dbnt.faisp.main.faRpt.model.SriReadUser;
|
||||||
|
|
@ -128,6 +129,16 @@ public class SriController {
|
||||||
sriService.sriDelete(sri);
|
sriService.sriDelete(sri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/sriReadUserModal")
|
||||||
|
public ModelAndView sriReadUserModal(@AuthenticationPrincipal UserInfo loginUser, Sri sri){
|
||||||
|
ModelAndView mav = new ModelAndView("sri/sriReadUserModal");
|
||||||
|
sri = sriService.selectFaSriBoard(sri.getFaSriKey(), null);
|
||||||
|
mav.addObject("sri", sri);
|
||||||
|
return mav;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/updateReadUser")
|
||||||
|
public void updateReadUser(Sri sri){
|
||||||
|
sriService.updateReadUser(sri.getFaSriKey(), sri.getReadUserList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,15 +33,8 @@ public class SriReadUser extends FileInfo {
|
||||||
private String titleCd;
|
private String titleCd;
|
||||||
@Column(name = "user_nm")
|
@Column(name = "user_nm")
|
||||||
private String userNm;
|
private String userNm;
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "SriReadUser [faSriKey=" + faSriKey + ", userSeq=" + userSeq + ", readYn=" + readYn + ", ogCd=" + ogCd
|
|
||||||
+ ", ofcCd=" + ofcCd + ", titleCd=" + titleCd + ", userNm=" + userNm + "]";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@Embeddable
|
||||||
@Embeddable
|
|
||||||
@Data
|
@Data
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
|
|
||||||
|
|
@ -33,35 +33,35 @@ public class SriService extends BaseService {
|
||||||
private final SriReadUserRepository sriReadUserRepository;
|
private final SriReadUserRepository sriReadUserRepository;
|
||||||
private final SriFileRepository sriFileRepository;
|
private final SriFileRepository sriFileRepository;
|
||||||
private final SriMapper sriMapper;
|
private final SriMapper sriMapper;
|
||||||
|
|
||||||
|
|
||||||
public List<Sri> selectSriList(Sri sri) {
|
public List<Sri> selectSriList(Sri sri) {
|
||||||
return sriMapper.selectSriList(sri);
|
return sriMapper.selectSriList(sri);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer selectSriCnt(Sri sri) {
|
public Integer selectSriCnt(Sri sri) {
|
||||||
return sriMapper.selectSriCnt(sri);
|
return sriMapper.selectSriCnt(sri);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Integer saveSriBoard(Sri sri, List<Integer> deleteFileSeq) {
|
public Integer saveSriBoard(Sri sri, List<Integer> deleteFileSeq) {
|
||||||
Integer faSriKey = sriRepository.save(sri).getFaSriKey();
|
Integer faSriKey = sriRepository.save(sri).getFaSriKey();
|
||||||
if(deleteFileSeq!=null && deleteFileSeq.size()>0){
|
if(deleteFileSeq!=null && deleteFileSeq.size()>0){
|
||||||
deleteFaRptFile(faSriKey, deleteFileSeq);
|
deleteFaRptFile(faSriKey, deleteFileSeq);
|
||||||
}
|
}
|
||||||
if(sri.getMultipartFileList() != null){
|
if(sri.getMultipartFileList() != null){
|
||||||
saveUploadFiles(faSriKey, sri.getMultipartFileList());
|
saveUploadFiles(faSriKey, sri.getMultipartFileList());
|
||||||
}
|
}
|
||||||
if(sri.getReadUserList() != null){
|
if(sri.getReadUserList() != null){
|
||||||
saveSriReadUser(faSriKey, sri.getReadUserList());
|
saveSriReadUser(faSriKey, sri.getReadUserList());
|
||||||
}
|
}
|
||||||
|
|
||||||
return faSriKey;
|
return faSriKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Sri selectFaSriBoard(Integer faSriKey, Integer userSeq) {
|
public Sri selectFaSriBoard(Integer faSriKey, Integer userSeq) {
|
||||||
Sri sri = sriRepository.findById(faSriKey).orElse(null);
|
Sri sri = sriRepository.findById(faSriKey).orElse(null);
|
||||||
if(sri != null){
|
if(sri != null){
|
||||||
sri.setFileList(sriFileRepository.findByFaSriKey(faSriKey));
|
sri.setFileList(sriFileRepository.findByFaSriKey(faSriKey));
|
||||||
sri.setReadUserList(sriReadUserRepository.findByFaSriKey(faSriKey));
|
sri.setReadUserList(sriReadUserRepository.findByFaSriKey(faSriKey));
|
||||||
|
|
@ -78,21 +78,34 @@ public class SriService extends BaseService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sri;
|
return sri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void saveSriReadUser(Integer faSriKey, List<SriReadUser> readUserList) {
|
private void saveSriReadUser(Integer faSriKey, List<SriReadUser> readUserList) {
|
||||||
sriReadUserRepository.deleteByFaSriKey(faSriKey);
|
List<SriReadUser> saveReadUserList = sriReadUserRepository.findByFaSriKey(faSriKey);
|
||||||
List<UserAlarm> alarmList = new ArrayList<>();
|
List<UserAlarm> alarmList = new ArrayList<>();
|
||||||
LocalDateTime dateTime = LocalDateTime.now();
|
LocalDateTime dateTime = LocalDateTime.now();
|
||||||
|
|
||||||
for(SriReadUser readUser: readUserList){
|
for(SriReadUser readUser: readUserList){
|
||||||
readUser.setFaSriKey(faSriKey);
|
readUser.setFaSriKey(faSriKey);
|
||||||
UserAlarm alarm = userAlarmService.makeUserAlarm
|
readUser.setReadYn("F");
|
||||||
(dateTime, readUser.getUserSeq(), faSriKey, 40, "SRI에 수신 문서가 있습니다.");
|
boolean savedFlag = false;
|
||||||
alarmList.add(alarm);
|
for(SriReadUser savedUser: saveReadUserList){
|
||||||
|
if(savedUser.getUserSeq().equals(readUser.getUserSeq())){
|
||||||
|
readUser.setReadYn(savedUser.getReadYn());
|
||||||
|
savedFlag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!savedFlag){
|
||||||
|
UserAlarm alarm = userAlarmService.makeUserAlarm
|
||||||
|
(dateTime, readUser.getUserSeq(), faSriKey, 40, "SRI에 수신 문서가 있습니다.");
|
||||||
|
alarmList.add(alarm);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
userAlarmService.saveAlarmList(alarmList);
|
userAlarmService.saveAlarmList(alarmList);
|
||||||
|
|
||||||
|
sriReadUserRepository.deleteByFaSriKey(faSriKey);
|
||||||
sriReadUserRepository.saveAll(readUserList);
|
sriReadUserRepository.saveAll(readUserList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -129,19 +142,20 @@ public class SriService extends BaseService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public FileInfo selectFaSriFile(Integer faSriKey, Integer fileSeq) {
|
public FileInfo selectFaSriFile(Integer faSriKey, Integer fileSeq) {
|
||||||
return sriFileRepository.findById(new SriFile.SriFileId(faSriKey, fileSeq)).orElse(null);
|
return sriFileRepository.findById(new SriFile.SriFileId(faSriKey, fileSeq)).orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void sriDelete(List<Sri> sri) {
|
public void sriDelete(List<Sri> sri) {
|
||||||
for(Sri sriData : sri) {
|
for(Sri sriData : sri) {
|
||||||
Sri dbSri = sriRepository.findById(sriData.getFaSriKey()).orElse(null);
|
Sri dbSri = sriRepository.findById(sriData.getFaSriKey()).orElse(null);
|
||||||
dbSri.setStatus("DST008");
|
dbSri.setStatus("DST008");
|
||||||
sriRepository.save(dbSri);
|
sriRepository.save(dbSri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void updateReadUser(Integer faSriKey, List<SriReadUser> readUserList) {
|
||||||
|
saveSriReadUser(faSriKey, readUserList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -208,6 +208,11 @@ $(document).on('click', '#sriDeleteBtn', function (){
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '#addReceiveUserBtn', function (){
|
||||||
|
$("#sriViewModal").modal('hide');
|
||||||
|
getSriReadUserModal($(this).attr("data-fasrikey"));
|
||||||
|
})
|
||||||
|
|
||||||
$(document).on('click', '#deleteSri', function (){
|
$(document).on('click', '#deleteSri', function (){
|
||||||
if(confirm("삭제시 되돌릴 수 없습니다. 대상을 삭제처리 하시겠습니까?")){
|
if(confirm("삭제시 되돌릴 수 없습니다. 대상을 삭제처리 하시겠습니까?")){
|
||||||
const checkArr = [];
|
const checkArr = [];
|
||||||
|
|
@ -250,7 +255,32 @@ $(document).on('click', '.rowDeleteBtn', function (){
|
||||||
setReadUserRowNum();
|
setReadUserRowNum();
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '#saveSriReadUserBtn', function () {
|
||||||
|
const formData = new FormData($("#sriReadUserForm")[0]);
|
||||||
|
$.each($(".readUserRow"), function (idx, row){
|
||||||
|
formData.append('readUserList['+idx+'].userSeq', $(row).find('.userSeq').val());
|
||||||
|
formData.append('readUserList['+idx+'].ogCd', $(row).find('.ogCd').val());
|
||||||
|
formData.append('readUserList['+idx+'].ofcCd', $(row).find('.ofcCd').val());
|
||||||
|
formData.append('readUserList['+idx+'].titleCd', $(row).find('.titleCd').val());
|
||||||
|
formData.append('readUserList['+idx+'].userNm', $(row).find('.userNm').val());
|
||||||
|
});
|
||||||
|
contentFade("in")
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : "/sri/updateReadUser",
|
||||||
|
data : formData,
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
success : function(html) {
|
||||||
|
contentFade("out")
|
||||||
|
alert("저장되었습니다.")
|
||||||
|
location.reload();
|
||||||
|
},
|
||||||
|
error : function(xhr, status) {
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
function setReadUserRowNum(){
|
function setReadUserRowNum(){
|
||||||
|
|
@ -279,4 +309,21 @@ function contentCheck(){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return fileCheck(true, files);
|
return fileCheck(true, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSriReadUserModal(faSriKey){
|
||||||
|
$.ajax({
|
||||||
|
url: '/sri/sriReadUserModal',
|
||||||
|
data: {faSriKey: faSriKey},
|
||||||
|
type: 'GET',
|
||||||
|
dataType:"html",
|
||||||
|
success: function(html){
|
||||||
|
$(".mainModalContent").empty()
|
||||||
|
$("#sriReadUserBody").append(html)
|
||||||
|
$("#sriReadUserModal").modal('show');
|
||||||
|
},
|
||||||
|
error:function(e){
|
||||||
|
ajaxErrorAction(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -171,14 +171,21 @@
|
||||||
|
|
||||||
<div class="modal fade" id="sriEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="faRptEditModalLabel" aria-hidden="true">
|
<div class="modal fade" id="sriEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="faRptEditModalLabel" aria-hidden="true">
|
||||||
<div class="modal-dialog modal-xxl modal-dialog-scrollable">
|
<div class="modal-dialog modal-xxl modal-dialog-scrollable">
|
||||||
<div class="modal-content" id="sriEditModalContent">
|
<div class="modal-content mainModalContent" id="sriEditModalContent">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal fade" id="sriViewModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="sriViewModalLabel" aria-hidden="true">
|
<div class="modal fade" id="sriViewModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="sriViewModalLabel" aria-hidden="true">
|
||||||
<div class="modal-dialog modal-xl modal-dialog-scrollable">
|
<div class="modal-dialog modal-xl modal-dialog-scrollable">
|
||||||
<div class="modal-content" id="sriViewBody">
|
<div class="modal-content mainModalContent" id="sriViewBody">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal fade" id="sriReadUserModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="sriReadUserModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-scrollable">
|
||||||
|
<div class="modal-content mainModalContent" id="sriReadUserBody">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title text-white" id="faRptReadUserModalLabel">수신자 추가</h5>
|
||||||
|
<button type="button" class="btn-close f-invert" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="sriReadUserBody">
|
||||||
|
<form action="#" method="post" id="sriReadUserForm">
|
||||||
|
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
|
||||||
|
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
|
||||||
|
<input type="hidden" name="faSriKey" th:value="${sri.faSriKey}">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 pb-2">
|
||||||
|
<div class="row justify-content-between">
|
||||||
|
<div class="col-auto">■ 수신자</div>
|
||||||
|
<div class="col-auto"><button type="button" class="btn btn-sm btn-info" id="addReadUserBtn">추가</button></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-1">no</div>
|
||||||
|
<div class="col-9">수신자</div>
|
||||||
|
<div class="col-2">삭제</div>
|
||||||
|
</div>
|
||||||
|
<hr class="my-1">
|
||||||
|
<div class="row" id="defaultUserRow">
|
||||||
|
<div class="col-12">
|
||||||
|
<th:block th:each="readUser, idx:${sri.readUserList}">
|
||||||
|
<div class="row my-1 readUserRow">
|
||||||
|
<input type="hidden" class="userSeq" th:value="${readUser.userSeq}">
|
||||||
|
<input type="hidden" class="ogCd" th:value="${readUser.ogCd}">
|
||||||
|
<input type="hidden" class="ofcCd" th:value="${readUser.ofcCd}">
|
||||||
|
<input type="hidden" class="titleCd" th:value="${readUser.titleCd}">
|
||||||
|
<input type="hidden" class="userNm" th:value="${readUser.userNm}">
|
||||||
|
<div class="col-1 rowSeq" th:text="${idx.index+1}"></div>
|
||||||
|
<div class="col-9">
|
||||||
|
<th:block th:each="code:${session.commonCode.get('OG')}">
|
||||||
|
<th:block th:if="${code.itemCd eq readUser.ogCd}" th:text="${code.itemValue}"></th:block>
|
||||||
|
</th:block>
|
||||||
|
<th:block th:each="code:${session.commonCode.get(readUser.ogCd)}">
|
||||||
|
<th:block th:if="${code.itemCd eq readUser.ofcCd}" th:text="${code.itemValue}"></th:block>
|
||||||
|
</th:block>
|
||||||
|
<th:block th:each="code:${session.commonCode.get('JT')}">
|
||||||
|
<th:block th:if="${code.itemCd eq readUser.titleCd}" th:text="${code.itemValue}"></th:block>
|
||||||
|
</th:block>
|
||||||
|
<th:block th:text="${readUser.userNm}"></th:block>
|
||||||
|
</div>
|
||||||
|
<!--<div class="col-2">
|
||||||
|
<button type="button" class="btn btn-sm btn-outline-danger rowDeleteBtn"><i class="bi bi-x"></i></button>
|
||||||
|
</div>-->
|
||||||
|
</div>
|
||||||
|
</th:block>
|
||||||
|
</div>
|
||||||
|
<div class="col-12" id="readUserRow">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer bg-light">
|
||||||
|
<button type="button" class="btn btn-primary" id="saveSriReadUserBtn">저장</button>
|
||||||
|
</div>
|
||||||
|
|
@ -130,22 +130,23 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer justify-content-between bg-light">
|
<div class="modal-footer justify-content-between bg-light">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<th:block th:if="${userSeq eq faSri.wrtUserSeq or accessAuth eq 'ACC003'}">
|
<th:block th:if="${userSeq eq faSri.wrtUserSeq or accessAuth eq 'ACC003'}">
|
||||||
<button type="button" class="btn btn-danger" id="deleteSri" th:data-fasrikey="${faSri.faSriKey}">삭제</button>
|
<button type="button" class="btn btn-danger" id="deleteSri" th:data-fasrikey="${faSri.faSriKey}">삭제</button>
|
||||||
</th:block>
|
</th:block>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<th:block th:if="${userSeq eq faSri.wrtUserSeq}">
|
<th:block th:if="${userSeq eq faSri.wrtUserSeq}">
|
||||||
<button type="button" class="btn btn-warning" id="editFaSriBtn" th:if="${faSri.refSri eq null or faSri.refSri.faSriEdate >= #temporals.createNow()}" th:data-fasrikey="${faSri.faSriKey}">수정</button>
|
<button type="button" class="btn btn-warning" id="editFaSriBtn" th:if="${faSri.refSri eq null or faSri.refSri.faSriEdate >= #temporals.createNow()}" th:data-fasrikey="${faSri.faSriKey}">수정</button>
|
||||||
</th:block>
|
</th:block>
|
||||||
<th:block th:each="readUser:${faSri.readUserList}">
|
<th:block th:unless="${faSri.faSriEdate eq null}">
|
||||||
<th:block th:if="${userSeq eq readUser.userSeq}">
|
<th:block th:each="readUser:${faSri.readUserList}">
|
||||||
<th:block th:unless="${faSri.faSriEdate eq null}">
|
<th:block th:if="${userSeq eq readUser.userSeq}">
|
||||||
<button type="button" class="btn btn-success" id="reSendBtn" th:if="${faSri.faSriEdate >= #temporals.createNow()}" th:data-fasrikey="${faSri.faSriKey}">응신</button>
|
<button type="button" class="btn btn-warning" id="addReceiveUserBtn" th:data-fasrikey="${faSri.faSriKey}">수신자 추가</button>
|
||||||
|
<button type="button" class="btn btn-success" id="reSendBtn" th:if="${faSri.faSriEdate >= #temporals.createNow()}" th:data-fasrikey="${faSri.faSriKey}">응신</button>
|
||||||
|
</th:block>
|
||||||
</th:block>
|
</th:block>
|
||||||
</th:block>
|
</th:block>
|
||||||
</th:block>
|
|
||||||
<!-- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>-->
|
<!-- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Loading…
Reference in New Issue