fix : 외사첩보망 견문관리 운영실적 중간저장

master
TaehunPark 2023-01-18 18:13:02 +09:00
parent 019c16f8dd
commit 2e404f0f3e
9 changed files with 160 additions and 30 deletions

View File

@ -2,6 +2,7 @@ package com.dbnt.faisp.main.fpiMgt.intelligenceNetwork;
import com.dbnt.faisp.main.authMgt.service.AuthMgtService; import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.IntelligenceAnalyze; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.IntelligenceAnalyze;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.IntelligenceAnalyzeApprv;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlan; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlan;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlanApprv; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlanApprv;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.service.IntelligenceNetworkService; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.service.IntelligenceNetworkService;
@ -279,6 +280,7 @@ public class IntelligenceNetworkController { // 첩보수집활동 > 해양외
public ModelAndView intelligenceAnalyzeViewModal(@AuthenticationPrincipal UserInfo loginUser, IntelligenceAnalyze ia){ public ModelAndView intelligenceAnalyzeViewModal(@AuthenticationPrincipal UserInfo loginUser, IntelligenceAnalyze ia){
ModelAndView mav = new ModelAndView("igActivities/fpiMgt/intelligenceNetwork/intelligenceAnalyzeViewModal"); ModelAndView mav = new ModelAndView("igActivities/fpiMgt/intelligenceNetwork/intelligenceAnalyzeViewModal");
ia = intelligenceNetworkService.selectIntelligenceAnalyze(ia); ia = intelligenceNetworkService.selectIntelligenceAnalyze(ia);
ia.setApprvList(intelligenceNetworkService.selectIntelligenceAnalyzeApprv(ia));
mav.addObject("ia", ia); mav.addObject("ia", ia);
mav.addObject("userSeq",loginUser.getUserSeq()); mav.addObject("userSeq",loginUser.getUserSeq());
//메뉴권한 확인 //메뉴권한 확인
@ -287,5 +289,14 @@ public class IntelligenceNetworkController { // 첩보수집활동 > 해양외
return mav; return mav;
} }
@PostMapping("/intelligenceAnalyzeChange")
public Integer intelligenceAnalyzeChange(@AuthenticationPrincipal UserInfo loginUser, IntelligenceAnalyzeApprv apprv){
apprv.setUserSeq(loginUser.getUserSeq());
apprv.setUserGrd(loginUser.getTitleCd());
apprv.setUserNm(loginUser.getUserNm());
apprv.setSaveDt(LocalDateTime.now());
return intelligenceNetworkService.intelligenceAnalyzeChange(apprv);
}
} }

View File

@ -34,13 +34,13 @@ public class IntelligenceAnalyze extends BaseModel {
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate iaEdate; private LocalDate iaEdate;
@Column(name = "fi_cnt") @Column(name = "fi_cnt")
private Integer fiCnt; private Integer fiCnt=0;
@Column(name = "fa_cnt") @Column(name = "fa_cnt")
private Integer faCnt; private Integer faCnt=0;
@Column(name = "work_cnt") @Column(name = "work_cnt")
private Integer workCnt; private Integer workCnt=0;
@Column(name = "arrest_cnt") @Column(name = "arrest_cnt")
private Integer arrestCnt; private Integer arrestCnt=0;
@Column(name = "foreign_affairs") @Column(name = "foreign_affairs")
private String foreignAffairs; private String foreignAffairs;
@Column(name = "work") @Column(name = "work")
@ -71,6 +71,8 @@ public class IntelligenceAnalyze extends BaseModel {
@Transient @Transient
private String userType; private String userType;
@Transient @Transient
private List<IntelligenceAnalyzeApprv> apprvList;
@Transient
private List<Integer> affairList; private List<Integer> affairList;
@Transient @Transient
private Integer totalCnt; private Integer totalCnt;

View File

@ -0,0 +1,49 @@
package com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model;
import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
@Getter
@Setter
@Entity
@NoArgsConstructor
@DynamicInsert
@DynamicUpdate
@Table(name = "intelligence_analyze_apprv")
@IdClass(IntelligenceAnalyzeApprv.IntelligenceAnalyzeApprvId.class)
public class IntelligenceAnalyzeApprv {
@Id
@Column(name = "ia_key")
private Integer iaKey;
@Id
@Column(name = "apprv_seq")
private Integer apprvSeq;
@Column(name = "state")
private String state;
@Column(name = "user_seq")
private Integer userSeq;
@Column(name = "user_grd")
private String userGrd;
@Column(name = "user_nm")
private String userNm;
@Column(name = "opinion")
private String opinion;
@Column(name = "Instruction")
private String Instruction;
@Column(name = "save_dt")
private LocalDateTime saveDt;
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class IntelligenceAnalyzeApprvId implements Serializable {
private Integer iaKey;
private Integer apprvSeq;
}
}

View File

@ -0,0 +1,18 @@
package com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.repository;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.IntelligenceAnalyzeApprv;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface IntelligenceAnalyzeApprvRepository extends JpaRepository<IntelligenceAnalyzeApprv, IntelligenceAnalyzeApprv.IntelligenceAnalyzeApprvId> {
List<IntelligenceAnalyzeApprv> findByIaKey(Integer iaKey);
Optional<IntelligenceAnalyzeApprv> findTopByIaKeyOrderByApprvSeqDesc(Integer iaKey);
}

View File

@ -5,11 +5,13 @@ import com.dbnt.faisp.config.BaseService;
import com.dbnt.faisp.config.FileInfo; import com.dbnt.faisp.config.FileInfo;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.mapper.IntelligenceNetworkMapper; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.mapper.IntelligenceNetworkMapper;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.IntelligenceAnalyze; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.IntelligenceAnalyze;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.IntelligenceAnalyzeApprv;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.IntelligenceAnalyzeToAffair; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.IntelligenceAnalyzeToAffair;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlan; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlan;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlanApprv; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlanApprv;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlanFile; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlanFile;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlanFile.OperationPlanFileId; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.model.OperationPlanFile.OperationPlanFileId;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.repository.IntelligenceAnalyzeApprvRepository;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.repository.IntelligenceAnalyzeRepository; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.repository.IntelligenceAnalyzeRepository;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.repository.IntelligenceAnalyzeToAffairRepository; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.repository.IntelligenceAnalyzeToAffairRepository;
import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.repository.OperationPlanApprvRepository; import com.dbnt.faisp.main.fpiMgt.intelligenceNetwork.repository.OperationPlanApprvRepository;
@ -34,6 +36,7 @@ public class IntelligenceNetworkService extends BaseService {
private final OperationPlanRepository operationPlanRepository; private final OperationPlanRepository operationPlanRepository;
private final IntelligenceAnalyzeRepository intelligenceAnalyzeRepository; private final IntelligenceAnalyzeRepository intelligenceAnalyzeRepository;
private final IntelligenceAnalyzeToAffairRepository intelligenceAnalyzeToAffairRepository; private final IntelligenceAnalyzeToAffairRepository intelligenceAnalyzeToAffairRepository;
private final IntelligenceAnalyzeApprvRepository intelligenceAnalyzeApprvRepository;
private final IntelligenceNetworkMapper intelligenceNetworkMapper; private final IntelligenceNetworkMapper intelligenceNetworkMapper;
@Transactional @Transactional
@ -170,6 +173,33 @@ public class IntelligenceNetworkService extends BaseService {
return intelligenceNetworkMapper.selectIntelligenceAnalyzeAffairKey(ia); return intelligenceNetworkMapper.selectIntelligenceAnalyzeAffairKey(ia);
} }
public List<IntelligenceAnalyzeApprv> selectIntelligenceAnalyzeApprv(IntelligenceAnalyze ia) {
return intelligenceAnalyzeApprvRepository.findByIaKey(ia.getIaKey());
}
@Transactional
public Integer intelligenceAnalyzeChange(IntelligenceAnalyzeApprv apprv) {
IntelligenceAnalyze saveIntelligenceAnalyze = intelligenceAnalyzeRepository.findById(apprv.getIaKey()).orElse(null);
saveIntelligenceAnalyze.setIaState(apprv.getState());
IntelligenceAnalyzeApprv lastApprv = intelligenceAnalyzeApprvRepository.findTopByIaKeyOrderByApprvSeqDesc(apprv.getIaKey()).orElse(null);
apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1);
intelligenceAnalyzeApprvRepository.save(apprv);
switch (apprv.getState()){
case "DST003":
case "DST005":
// 반려시 작성자에게 반려 알림 발송
userAlarmService.sendAlarmToWrtUser(saveIntelligenceAnalyze.getIaKey(), saveIntelligenceAnalyze.getWrtUserSeq(), 34,"외사첩보망 견문관리 운영실적에 문서가 반려되었습니다.");
break;
case "DST004":
case "DST006":
// 부장승인시 작성자에게 승인 알림 발송
userAlarmService.sendAlarmToWrtUser(saveIntelligenceAnalyze.getIaKey(), saveIntelligenceAnalyze.getWrtUserSeq(), 34,"외사첩보망 견문관리 운영실적에 문서가 승인되었습니다.");
break;
}
return apprv.getIaKey();
}

View File

@ -334,7 +334,7 @@
analysis_evaluation, analysis_evaluation,
measures, measures,
wrt_dt, wrt_dt,
(select item_value from code_mgt where item_cd = ia_state) as ia_state, ia_state,
wrt_organ, wrt_organ,
wrt_user_seq, wrt_user_seq,
(select item_value from code_mgt where item_cd = wrt_user_grd) as wrt_user_grd, (select item_value from code_mgt where item_cd = wrt_user_grd) as wrt_user_grd,

View File

@ -86,6 +86,10 @@ $(document).on('keyup', '.cntInput', function (){
$(document).on('click', '#getAffairBtn', function (){ $(document).on('click', '#getAffairBtn', function (){
const affairList=[]; const affairList=[];
if($(".rowChkBox:checked").length < 1){
alert("견문을 선택해주세요");
return false;
}
$.each($(".rowChkBox:checked"), function (idx, chkBox){ $.each($(".rowChkBox:checked"), function (idx, chkBox){
const affairTr = $(chkBox).parents(".affairTr"); const affairTr = $(chkBox).parents(".affairTr");
affairList.push(affairTr.find(".rowChkBox").val()); affairList.push(affairTr.find(".rowChkBox").val());
@ -106,12 +110,7 @@ $(document).on('click', '#getAffairBtn', function (){
$("#joCnt").val(data.joCnt); $("#joCnt").val(data.joCnt);
$("#muCnt").val(data.muCnt); $("#muCnt").val(data.muCnt);
$("input[name=affairList]").val(data.affairList); $("input[name=affairList]").val(data.affairList);
//$.each(data.affairList, function(affair, idx){
//$("#ddd").val($("#ddd").val()+","+affair);
//})
contentFade("out"); contentFade("out");
//trCarrerList.length = 0;
}, },
error : function(xhr, status) { error : function(xhr, status) {
contentFade("out"); contentFade("out");
@ -202,7 +201,7 @@ $(document).on('click', '.apprvBtn', function (){
$.ajax({ $.ajax({
type : 'POST', type : 'POST',
data : formData, data : formData,
url : "/intelligenceNetwork/operationPlanStateChange", url : "/intelligenceNetwork/intelligenceAnalyzeChange",
processData: false, processData: false,
contentType: false, contentType: false,
beforeSend: function (xhr){ beforeSend: function (xhr){
@ -210,7 +209,7 @@ $(document).on('click', '.apprvBtn', function (){
}, },
success : function(result) { success : function(result) {
alert(approval+"되었습니다"); alert(approval+"되었습니다");
getOperationPlanViewModal(result); getIntelligenceAnalyzeViewModal(result);
contentFade("out"); contentFade("out");
}, },
error : function(xhr, status) { error : function(xhr, status) {

View File

@ -64,19 +64,19 @@
<th>검거</th> <th>검거</th>
</tr> </tr>
</thead> </thead>
<tbody class="table-group-divider text-center"> <tbody class="table-group-divider">
<tr> <tr>
<td><input class="form-control form-control-sm" id="totalCnt" type="number" th:value="${ia.totalCnt}" disabled></td> <td><input class="form-control form-control-sm text-center" id="totalCnt" type="number" th:value="${ia.totalCnt}" disabled></td>
<td><input class="form-control form-control-sm" id="specialCnt" type="number" th:value="${ia.specialCnt}" disabled></td> <td><input class="form-control form-control-sm text-center" id="specialCnt" type="number" th:value="${ia.specialCnt}" disabled></td>
<td><input class="form-control form-control-sm" id="middleCnt" type="number" th:value="${ia.middleCnt}" disabled></td> <td><input class="form-control form-control-sm text-center" id="middleCnt" type="number" th:value="${ia.middleCnt}" disabled></td>
<td><input class="form-control form-control-sm" id="tongCnt" type="number" th:value="${ia.tongCnt}" disabled></td> <td><input class="form-control form-control-sm text-center" id="tongCnt" type="number" th:value="${ia.tongCnt}" disabled></td>
<td><input class="form-control form-control-sm" id="joCnt" type="number" th:value="${ia.joCnt}" disabled></td> <td><input class="form-control form-control-sm text-center" id="joCnt" type="number" th:value="${ia.joCnt}" disabled></td>
<td><input class="form-control form-control-sm" id="muCnt" type="number" th:value="${ia.muCnt}" disabled></td> <td><input class="form-control form-control-sm text-center" id="muCnt" type="number" th:value="${ia.muCnt}" disabled></td>
<td><input class="form-control form-control-sm" name="fiCnt" type="number" th:value="${ia.fiCnt}"></td> <td><input class="form-control form-control-sm text-center" name="fiCnt" type="number" th:value="${ia.fiCnt}"></td>
<td><input class="form-control form-control-sm" id="totalCnt2" type="number" th:value="${ia.iaTotal}" disabled></td> <td><input class="form-control form-control-sm text-center" id="totalCnt2" type="number" th:value="${ia.iaTotal}" placeholder="자동합산" disabled></td>
<td><input class="form-control form-control-sm cntInput" name="faCnt" type="number" th:value="${ia.faCnt}"></td> <td><input class="form-control form-control-sm cntInput text-center" name="faCnt" type="number" th:value="${ia.faCnt}"></td>
<td><input class="form-control form-control-sm cntInput" name="workCnt" type="number" th:value="${ia.workCnt}"></td> <td><input class="form-control form-control-sm cntInput text-center" name="workCnt" type="number" th:value="${ia.workCnt}"></td>
<td><input class="form-control form-control-sm cntInput" name="arrestCnt" type="number" th:value="${ia.arrestCnt}"></td> <td><input class="form-control form-control-sm cntInput text-center" name="arrestCnt" type="number" th:value="${ia.arrestCnt}"></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@ -103,10 +103,10 @@
</div> </div>
</div> </div>
<!-- <div class="row"> <div class="row">
<div class="col-12" th:unless="${#lists.isEmpty(op.apprvList)}"> <div class="col-12" th:unless="${#lists.isEmpty(ia.apprvList)}">
<hr> <hr>
<th:block th:each="apprv:${op.apprvList}"> <th:block th:each="apprv:${ia.apprvList}">
<div class="row"> <div class="row">
<th:block th:each="commonCode:${session.commonCode.get('DST')}"> <th:block th:each="commonCode:${session.commonCode.get('DST')}">
<label class="col-sm-2 col-form-label col-form-label-sm text-center" th:if="${commonCode.itemCd eq apprv.state}" th:text="|결재결과: ${commonCode.itemValue}|"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-center" th:if="${commonCode.itemCd eq apprv.state}" th:text="|결재결과: ${commonCode.itemValue}|"></label>
@ -116,23 +116,44 @@
<th:block th:if="${commonCode.itemCd eq apprv.userGrd}" th:text="|결제자: ${commonCode.itemValue} ${apprv.userNm}|"></th:block> <th:block th:if="${commonCode.itemCd eq apprv.userGrd}" th:text="|결제자: ${commonCode.itemValue} ${apprv.userNm}|"></th:block>
</th:block> </th:block>
</label> </label>
<label class="col-sm-2 col-form-label col-form-label-sm text-center">
<th:block th:text="|관리관 의견: ${apprv.opinion}|"></th:block>
</label>
<label class="col-sm-2 col-form-label col-form-label-sm text-center">
<th:block th:text="|지시사항: ${apprv.Instruction}|"></th:block>
</label>
<label class="col-sm-2 col-form-label col-form-label-sm text-center"> <label class="col-sm-2 col-form-label col-form-label-sm text-center">
<th:block th:text="|결제일시: ${#temporals.format(apprv.saveDt, 'yyyy-MM-dd HH:mm:ss')}|"></th:block> <th:block th:text="|결제일시: ${#temporals.format(apprv.saveDt, 'yyyy-MM-dd HH:mm:ss')}|"></th:block>
</label> </label>
</div> </div>
</th:block> </th:block>
</div> </div>
</div> --> </div>
<div class="col-12" th:if="${(apprvAuth eq 'APC001' or apprvAuth eq 'APC002' or apprvAuth eq 'APC003' or apprvAuth eq 'APC004') and ia.iaState eq 'DST002'}">
<hr>
<form action="#" method="post" id="apprvForm"> <form action="#" method="post" id="apprvForm">
<div class="row"> <div class="row">
<div class="col-10">
<input type="hidden" name="iaKey" th:value="${ia.iaKey}"> <input type="hidden" name="iaKey" th:value="${ia.iaKey}">
<input type="hidden" name="state" id="viewModalApprvValue"> <input type="hidden" name="state" id="viewModalApprvValue">
<div class="row">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">관리관 의견</label>
<div class="col-10">
<input type="text" class="form-control form-control-sm" name="opinion">
</div>
</div>
<br/><br/>
<div class="row">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">지시사항</label>
<div class="col-10">
<input type="text" class="form-control form-control-sm" name="Instruction">
</div>
</div> </div>
</div> </div>
</form> </form>
</div> </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">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>