Merge remote-tracking branch 'origin/jenkins_with_weblogic' of C:/eactive/bundle/bundles/20251230/eapim-admin_incremental_2025-12-01.bundle into jenkins_with_weblogic

This commit is contained in:
daekuk
2025-12-30 11:17:10 +09:00
12 changed files with 107 additions and 30 deletions
@@ -151,6 +151,10 @@ function saveApiGridData(scopeId, returnUrl) {
type : "POST", type : "POST",
url:mapping_url, url:mapping_url,
data: postData, data: postData,
beforeSend: function() {
$("[id^='btn_']").prop("disabled", true);
$("#btn_modify").text("처리중 . . . . .");
},
success:function(args){ success:function(args){
alert("저장 되었습니다."); alert("저장 되었습니다.");
@@ -158,7 +162,11 @@ function saveApiGridData(scopeId, returnUrl) {
}, },
error:function(e){ error:function(e){
alert(e.responseText); alert(e.responseText);
} },
complete: function() {
$("[id^='btn_']").prop("disabled", false);
$("#btn_modify").text("수정");
}
}); });
} }
@@ -187,7 +195,11 @@ $(document).ready(function() {
success:function(args){ success:function(args){
alert("SCOPE 정보가 저장 되었습니다. 이어서 API 리스트를 저장합니다."); alert("SCOPE 정보가 저장 되었습니다. 이어서 API 리스트를 저장합니다.");
if(!isDetail) { // INSERT 일 경우 ScopeId를 업데이트
key = $('input[name=scopeId]').val();
}
saveApiGridData(key, returnUrl); // API LIST 저장. saveApiGridData(key, returnUrl); // API LIST 저장.
}, },
error:function(e){ error:function(e){
@@ -717,6 +717,8 @@
reloadSourceTargetGrid('${param.cnvsnName}'); reloadSourceTargetGrid('${param.cnvsnName}');
reloadCnvsnDesc(); reloadCnvsnDesc();
setSearchable("functionCombo");
}, },
error:function(e){ error:function(e){
alert(e.responseText); alert(e.responseText);
@@ -236,10 +236,16 @@
<td> <td>
<input type="text" name="searchEaiSvcName" value="${param.searchEaiSvcName}"> <input type="text" name="searchEaiSvcName" value="${param.searchEaiSvcName}">
</td> </td>
</tr>
<tr>
<th style="width:180px;">API 명</th> <th style="width:180px;">API 명</th>
<td> <td>
<input type="text" name="searchEaiSvcDesc" value="${param.searchEaiSvcDesc}"> <input type="text" name="searchEaiSvcDesc" value="${param.searchEaiSvcDesc}">
</td> </td>
<th style="width:180px;">API FULL PATH</th>
<td>
<input type="text" name="searchApiFullPath" value="${param.searchApiFullPath}">
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@@ -2084,7 +2084,7 @@
</div> </div>
</div><!-- end right_box --> </div><!-- end right_box -->
</body> </body>
</html>loneInterfaceButton">복제</button> </html>
</div> </div>
</div> </div>
</div> </div>
@@ -0,0 +1,46 @@
package com.eactive.eai.rms.common.login;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.log4j.Logger;
@WebListener
public class SessionDestructionListener implements HttpSessionListener {
private static final Logger logger = Logger.getLogger(SessionDestructionListener.class);
@Override
public void sessionCreated(HttpSessionEvent se) {
}
/**
* 세션 타임아웃 등으로 소멸 시 세션정보 삭제
*/
@Override
public void sessionDestroyed(HttpSessionEvent se) {
try {
HttpSession session = se.getSession();
String userId = (String) session.getAttribute("userId");
// 로그인 한 사용자의 세션정보 정리
if (userId != null) {
if (logger.isDebugEnabled()) {
logger.debug("[SessionListener] 세션만료 감지. 사용자 제거: " + userId);
}
SessionManager.removeUserSession(userId);
}
} catch (Exception e) {
logger.error("[SessionListener] 세션 정리 중 오류 발생", e);
}
}
}
@@ -1,21 +1,31 @@
package com.eactive.eai.rms.data.entity.onl.authserver; package com.eactive.eai.rms.data.entity.onl.authserver;
import org.springframework.stereotype.Service; import javax.persistence.EntityManager;
import org.springframework.transaction.annotation.Transactional; import javax.persistence.PersistenceContext;
import com.eactive.eai.data.entity.onl.authserver.QScopeEntity; import com.eactive.eai.data.entity.onl.authserver.QScopeEntity;
import com.eactive.eai.data.entity.onl.authserver.ScopeEntity; import com.eactive.eai.data.entity.onl.authserver.ScopeEntity;
import com.eactive.eai.data.entity.onl.authserver.ScopeEntityId; import com.eactive.eai.data.entity.onl.authserver.ScopeEntityId;
import com.eactive.eai.data.jpa.AbstractDataService; import com.eactive.eai.data.jpa.AbstractDataService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service @Service
@Transactional @Transactional
public class ScopeEntityService extends AbstractDataService<ScopeEntity, ScopeEntityId, ScopeEntityEMSRepository> { public class ScopeEntityService extends AbstractDataService<ScopeEntity, ScopeEntityId, ScopeEntityEMSRepository> {
@PersistenceContext
private EntityManager entityManager; // AbstractDataService 의 entityManager가 private이라 접근 불가하여 별도 주입
public void deleteByIdScopeId(String scopeId) { public void deleteByIdScopeId(String scopeId) {
getJPAQueryFactory().delete(QScopeEntity.scopeEntity) getJPAQueryFactory().delete(QScopeEntity.scopeEntity)
.where(QScopeEntity.scopeEntity.id.scopeid.eq(scopeId)) .where(QScopeEntity.scopeEntity.id.scopeid.eq(scopeId))
.execute(); .execute();
// 동일 트랜잭션 내에서 같은 ID로 재저장 시 충돌(EntityExistsException)을 방지
entityManager.flush();
entityManager.clear();
} }
} }
@@ -310,8 +310,6 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
.on(qScopeEntity.id.scopeid.eq(qScopeInfo.scopeId)) .on(qScopeEntity.id.scopeid.eq(qScopeInfo.scopeId))
.where(predicate) .where(predicate)
.orderBy(qScopeEntity.id.bzwksvckeyname.asc()) .orderBy(qScopeEntity.id.bzwksvckeyname.asc())
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch(); .fetch();
return new PageImpl<>(result, pageable, result.size()); return new PageImpl<>(result, pageable, result.size());
@@ -320,7 +318,7 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
private BooleanExpression booleanPredicate(QEAIMessageEntity qEaiMessageEntity, QScopeEntity qScopeEntity, private BooleanExpression booleanPredicate(QEAIMessageEntity qEaiMessageEntity, QScopeEntity qScopeEntity,
QScopeInfo qScopeInfo, ApiScopeSearch apiScopeSearch) { QScopeInfo qScopeInfo, ApiScopeSearch apiScopeSearch) {
BooleanExpression predicate = qScopeEntity.id.scopeid.containsIgnoreCase(apiScopeSearch.getSearchScopeId()); BooleanExpression predicate = qScopeEntity.id.scopeid.equalsIgnoreCase(apiScopeSearch.getSearchScopeId());
// BooleanExpression predicate = qEaiMessageEntity.eaisvcdesc.containsIgnoreCase(apiScopeSearch.getSearchEaiSvcDesc()); // BooleanExpression predicate = qEaiMessageEntity.eaisvcdesc.containsIgnoreCase(apiScopeSearch.getSearchEaiSvcDesc());
// if(StringUtils.isNotBlank(apiScopeSearch.getSearchBzwkSvcKeyName())) { // if(StringUtils.isNotBlank(apiScopeSearch.getSearchBzwkSvcKeyName())) {
@@ -7,4 +7,5 @@ public class ApiGroupUISearch {
private String searchGroupName; private String searchGroupName;
private String searchGroupDesc; private String searchGroupDesc;
private String searchDisplayYn; private String searchDisplayYn;
private String searchApiFullPath;
} }
@@ -7,6 +7,14 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.eactive.eai.agent.command.CommonCommand;
import com.eactive.eai.rms.common.base.OnlBaseAnnotationController;
import com.eactive.eai.rms.common.combo.ComboService;
import com.eactive.eai.rms.common.combo.ComboVo;
import com.eactive.eai.rms.common.vo.GridResponse;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
@@ -16,14 +24,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import com.eactive.eai.agent.command.CommonCommand;
import com.eactive.eai.rms.common.base.OnlBaseAnnotationController;
import com.eactive.eai.rms.common.combo.ComboService;
import com.eactive.eai.rms.common.combo.ComboVo;
import com.eactive.eai.rms.common.vo.GridResponse;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
@Controller @Controller
public class InflowGroupControlManController extends OnlBaseAnnotationController { public class InflowGroupControlManController extends OnlBaseAnnotationController {
@@ -78,7 +78,7 @@ public class InflowGroupControlManController extends OnlBaseAnnotationController
* 그룹 저장 (INSERT) * 그룹 저장 (INSERT)
*/ */
@RequestMapping(value = "/onl/admin/inflow/inflowGroupControlMan.json", params = "cmd=INSERT") @RequestMapping(value = "/onl/admin/inflow/inflowGroupControlMan.json", params = "cmd=INSERT")
public String insert(HttpServletRequest request, HttpServletResponse response, InflowGroupControlManUI ui, public ResponseEntity<Void> insert(HttpServletRequest request, HttpServletResponse response, InflowGroupControlManUI ui,
@RequestParam(value = "interfaceListJson", required = false) String interfaceListJson) throws Exception { @RequestParam(value = "interfaceListJson", required = false) String interfaceListJson) throws Exception {
parseInterfaceList(ui, interfaceListJson); parseInterfaceList(ui, interfaceListJson);
String modifiedBy = getSessionUserId(request); String modifiedBy = getSessionUserId(request);
@@ -88,14 +88,14 @@ public class InflowGroupControlManController extends OnlBaseAnnotationController
CommonCommand command = new CommonCommand("com.eactive.eai.agent.inflow.ReloadInflowGroupControlCommand", CommonCommand command = new CommonCommand("com.eactive.eai.agent.inflow.ReloadInflowGroupControlCommand",
ui.getGroupId()); ui.getGroupId());
agentUtilService.broadcast(command); agentUtilService.broadcast(command);
return null; return ResponseEntity.ok().build();
} }
/** /**
* 그룹 저장 (UPDATE) * 그룹 저장 (UPDATE)
*/ */
@RequestMapping(value = "/onl/admin/inflow/inflowGroupControlMan.json", params = "cmd=UPDATE") @RequestMapping(value = "/onl/admin/inflow/inflowGroupControlMan.json", params = "cmd=UPDATE")
public String update(HttpServletRequest request, HttpServletResponse response, InflowGroupControlManUI ui, public ResponseEntity<Void> update(HttpServletRequest request, HttpServletResponse response, InflowGroupControlManUI ui,
@RequestParam(value = "interfaceListJson", required = false) String interfaceListJson) throws Exception { @RequestParam(value = "interfaceListJson", required = false) String interfaceListJson) throws Exception {
parseInterfaceList(ui, interfaceListJson); parseInterfaceList(ui, interfaceListJson);
String modifiedBy = getSessionUserId(request); String modifiedBy = getSessionUserId(request);
@@ -105,21 +105,21 @@ public class InflowGroupControlManController extends OnlBaseAnnotationController
CommonCommand command = new CommonCommand("com.eactive.eai.agent.inflow.ReloadInflowGroupControlCommand", CommonCommand command = new CommonCommand("com.eactive.eai.agent.inflow.ReloadInflowGroupControlCommand",
ui.getGroupId()); ui.getGroupId());
agentUtilService.broadcast(command); agentUtilService.broadcast(command);
return null; return ResponseEntity.ok().build();
} }
/** /**
* 그룹 삭제 * 그룹 삭제
*/ */
@RequestMapping(value = "/onl/admin/inflow/inflowGroupControlMan.json", params = "cmd=DELETE") @RequestMapping(value = "/onl/admin/inflow/inflowGroupControlMan.json", params = "cmd=DELETE")
public String delete(HttpServletRequest request, HttpServletResponse response, String groupId) throws Exception { public ResponseEntity<Void> delete(HttpServletRequest request, HttpServletResponse response, String groupId) throws Exception {
service.deleteGroup(groupId); service.deleteGroup(groupId);
// Agent Command 전송 // Agent Command 전송
CommonCommand command = new CommonCommand("com.eactive.eai.agent.inflow.RemoveInflowGroupControlCommand", CommonCommand command = new CommonCommand("com.eactive.eai.agent.inflow.RemoveInflowGroupControlCommand",
groupId); groupId);
agentUtilService.broadcast(command); agentUtilService.broadcast(command);
return null; return ResponseEntity.ok().build();
} }
/** /**
@@ -171,7 +171,8 @@ public class Transform2Service extends BaseService {
private String genConversionSourceItems(String srcLayoutName, String cnvsncmdname) { private String genConversionSourceItems(String srcLayoutName, String cnvsncmdname) {
Pattern pattern = Pattern.compile(srcLayoutName + "(\\w|\\[|\\]|\\*|\\.|-|:)*"); // \uAC00-\uD7A3 : 한글 전체 ('가' ~ '힣')
Pattern pattern = Pattern.compile(srcLayoutName + "[\\w\\.\\[\\]\\*\\-:\\uAC00-\\uD7A3]*");
Matcher matcher = pattern.matcher(cnvsncmdname); Matcher matcher = pattern.matcher(cnvsncmdname);
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
@@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@@ -52,7 +53,7 @@ public class StdMessageManController extends BaseController {
@PostMapping(value = "/onl/admin/service/stdMessageMan.json", params = "cmd=LIST") @PostMapping(value = "/onl/admin/service/stdMessageMan.json", params = "cmd=LIST")
public ResponseEntity<GridResponse<StdMessageUI>> selectList(Pageable pageable, String searchBzwkSvcKeyName, public ResponseEntity<GridResponse<StdMessageUI>> selectList(Pageable pageable, String searchBzwkSvcKeyName,
String searchEaiSvcCode, String searchEaiSendRecv, String searchEaiDirection) { String searchEaiSvcCode, String searchEaiSendRecv, String searchEaiDirection) {
List<StdMessageUI> map = service Page<StdMessageUI> map = service
.selectList(pageable, searchBzwkSvcKeyName, searchEaiSvcCode, searchEaiSendRecv, searchEaiDirection); .selectList(pageable, searchBzwkSvcKeyName, searchEaiSvcCode, searchEaiSendRecv, searchEaiDirection);
return ResponseEntity.ok(new GridResponse<>(map)); return ResponseEntity.ok(new GridResponse<>(map));
@@ -16,6 +16,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -59,14 +60,13 @@ public class StdMessageManService {
@Autowired @Autowired
private ExtendedColumnDefinitionUIMapper extendedColumnDefinitionUIMapper; private ExtendedColumnDefinitionUIMapper extendedColumnDefinitionUIMapper;
public List<StdMessageUI> selectList(Pageable pageable, String searchBzwkSvcKeyName, String searchEaiSvcCode, public Page<StdMessageUI> selectList(Pageable pageable, String searchBzwkSvcKeyName, String searchEaiSvcCode,
String searchEaiSendRecv, String searchEaiDirection) { String searchEaiSendRecv, String searchEaiDirection) {
return standardMessageInfoService Page<StandardMessageInfo> pageResult = standardMessageInfoService
.findAll(pageable, searchBzwkSvcKeyName, searchEaiSvcCode, searchEaiSendRecv, searchEaiDirection) .findAll(pageable, searchBzwkSvcKeyName, searchEaiSvcCode, searchEaiSendRecv, searchEaiDirection);
.stream()
.map(stdMessageUIMapper::toVo) return pageResult.map(stdMessageUIMapper::toVo);
.collect(Collectors.toList());
} }