에이전트 정보 수신 완료

에이전스 관리 화면
 - 목록 완료
main
semin.baek 5 months ago
parent 75828ce439
commit 4a5a8feabd

@ -83,6 +83,7 @@ CREATE TABLE TB_DFX_AGENT_MESSAGE_HISTORY (
, PROCESS_STATUS_CODE VARCHAR(64)
, MESSAGE_DATA TEXT
, MESSAGE_DATA_COUNT DECIMAL(9) DEFAULT 0
, PROCESS_ACK_TS TIMESTAMPTZ(3)
, CONSTRAINT PK_DFX_AGENT_MESSAGE_HISTORY PRIMARY KEY (SENDER_AGENT_ID, MESSAGE_UUID)
);
CREATE INDEX IX_DFX_AGENT_MESSAGE_HISTORY_1 ON TB_DFX_AGENT_MESSAGE_HISTORY (RECIPIENT_AGENT_ID);
@ -98,6 +99,7 @@ COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.CONSOLE_RECEIVE_TS IS '콘솔 수
COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.PROCESS_STATUS_CODE IS '프로세스 상태 코드 CODE_GROUP: PROCESS_STATUS';
COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.MESSAGE_DATA IS '메시지 데이터';
COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.MESSAGE_DATA_COUNT IS '메시지 데이터 갯수';
COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.PROCESS_ACK_TS IS '처리결과 수신 시간';

@ -2,13 +2,21 @@ import 'bootstrap/dist/css/bootstrap.min.css'
import 'bootstrap'
import 'bootstrap-icons/font/bootstrap-icons.css'
import './assets/app.css'
import { createApp } from 'vue'
import axios from 'axios'
import { createApp, getCurrentInstance } from 'vue'
import App from './App.vue'
import router from './router'
const app = createApp(App)
const apiClient = axios.create({ header: { 'Content-Type': 'application/json' } })
const app = createApp(App)
app.config.globalProperties.$apiClient = apiClient
app.use(router)
app.mount('#app')
function useApiClient() {
const { proxy } = getCurrentInstance()
return proxy.$apiClient
}
export { useApiClient }

@ -16,6 +16,14 @@ const router = createRouter({
path: '/main.html',
name: 'main',
component: MainView,
props: { contentId: 'dashboard-view' },
meta: { isRequiredAuth: true },
},
{
path: '/agent-manage.html',
name: 'agent-manage',
component: MainView,
props: { contentId: 'agent-manage-view' },
meta: { isRequiredAuth: true },
},
],

@ -0,0 +1,66 @@
<script setup>
import '@/assets/main.css'
import { useApiClient } from '@/main'
import { onMounted, ref } from 'vue'
const apiClient = useApiClient()
async function getAgentInfoDtoList() {
const response = await apiClient.post('/app-api/agent/getAgentInfoDtoList')
return response.data
}
let dfxAgentInfoDtoList = ref([])
function setDfaAgentInfoDto(dfxAgentInfoDto) {
alert(dfxAgentInfoDto)
}
onMounted(async () => {
dfxAgentInfoDtoList.value = await getAgentInfoDtoList()
})
</script>
<template>
<main class="dfx-main container w-100">
<div class="row">
<div class="col-12 pt-2 border-bottom">
<h3 class="h3">Dashboard</h3>
</div>
</div>
<div class="row">
<article class="col-12 pt-3">
<h5 class="h5">에이전트 목록</h5>
<table class="table table-striped table-bordered align-middle">
<thead>
<tr>
<th scope="col" class="text-center">Agent ID</th>
<th scope="col" class="text-center">Host</th>
<th scope="col" class="text-center">port</th>
<th scope="col" class="text-center">Postman Count</th>
<th scope="col" class="text-center">Dropbox Count</th>
<th scope="col" class="text-center">Status</th>
<th scope="col" class="text-center">Setting</th>
</tr>
</thead>
<tbody class="table-group-divider">
<tr v-if="dfxAgentInfoDtoList.length > 0" v-for="dfxAgentInfoDto in dfxAgentInfoDtoList" :key="`${dfxAgentInfoDto.agentId}-${dfxAgentInfoDto.hostName}`">
<td scope="row">{{ dfxAgentInfoDto.agentId }}</td>
<td>{{ dfxAgentInfoDto.hostName }}</td>
<td>{{ dfxAgentInfoDto.listenPort }}</td>
<td class="text-end">{{ dfxAgentInfoDto.postmanCount }}</td>
<td class="text-end">{{ dfxAgentInfoDto.dropboxCount }}</td>
<td class="text-center"><i class="bi bi-lightbulb-fill" :class="dfxAgentInfoDto.statusCode == 'STATUS_OK' ? 'text-success' : 'text-secondary'"></i></td>
<td class="text-center"><button type="button" class="btn btn-primary btn-sm" @click.prevent="setDfaAgentInfoDto(dfxAgentInfoDto)">설정</button></td>
</tr>
<tr v-else>
<td scope="row" class="text-center" colspan="7">no data.</td>
</tr>
</tbody>
</table>
</article>
</div>
</main>
</template>
<style></style>

@ -0,0 +1,123 @@
<script setup>
import '@/assets/main.css'
import { Bar, Line } from 'vue-chartjs'
import { Chart as ChartJS, Title, Tooltip, Legend, BarElement, PointElement, LineElement, CategoryScale, LinearScale } from 'chart.js'
ChartJS.register(Title, Tooltip, Legend, BarElement, PointElement, LineElement, CategoryScale, LinearScale)
const shortThroughputCahrtData = {
labels: ['agent-mkami', 'agent-ami'],
datasets: [{ label: '분당 처리량', data: [4568, 3232] }],
}
const shortThroughputChartOptions = {
responsive: true,
indexAxis: 'y',
}
const daysThroughputChartData = {
labels: ['2025-09-01', '2025-09-02', '2025-09-03', '2025-09-04', '2025-09-05', '2025-09-06', '2025-09-07'],
datasets: [
{
label: '주간 처리량',
backgroundColor: '#f87979',
data: [40, 39, 10, 40, 39, 80, 40],
},
],
}
const daysThroughputChartOptions = {
responsive: true,
maintainAspectRatio: false,
}
</script>
<template>
<main class="dfx-main container w-100">
<div class="row">
<div class="col-12 pt-2 border-bottom">
<h3 class="h3">Dashboard</h3>
</div>
</div>
<div class="row">
<article class="col-12 pt-3">
<div class="row">
<div class="col-3">
<div class="card">
<div class="card-body">
<h5 class="card-title">agent-mkami <i class="bi bi-lightbulb-fill text-success"></i></h5>
<p class="card-text">Host : mkami-oracle</p>
<p class="card-text">처리량 : 789</p>
</div>
</div>
</div>
<div class="col-3">
<div class="card">
<div class="card-body">
<h5 class="card-title">agent-ami <i class="bi bi-lightbulb-fill text-success"></i></h5>
<p class="card-text">상태 : ami-cubrid</p>
<p class="card-text">처리량 : 345</p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="row">
<article class="col-12 pt-3">
<div class="row">
<div class="col-6">
<div class="card">
<div class="card-body">
<Bar id="shortThoughtputChart" :options="shortThroughputChartOptions" :data="shortThroughputCahrtData"></Bar>
</div>
</div>
</div>
<div class="col-6">
<div class="card">
<div class="card-body">
<Line :option="daysThroughputChartOptions" :data="daysThroughputChartData"></Line>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="row">
<article class="col-12 pt-3">
<h5 class="h5">에이전트 목록</h5>
<table class="table table-striped table-bordered align-middle">
<thead>
<tr>
<th scope="col" class="text-center">Agent ID</th>
<th scope="col" class="text-center">Host</th>
<th scope="col" class="text-center">port</th>
<th scope="col" class="text-center">Postman Count</th>
<th scope="col" class="text-center">Dropbox Count</th>
<th scope="col" class="text-center">Status</th>
<th scope="col" class="text-center">Setting</th>
</tr>
</thead>
<tbody class="table-group-divider">
<tr>
<td scope="row">agent-mkami</td>
<td>mkami.foxsoft.kr</td>
<td>17801</td>
<td class="text-end">32</td>
<td class="text-end">25</td>
<td class="text-center"><i class="bi bi-lightbulb-fill text-success"></i></td>
<td class="text-center"><button type="button" class="btn btn-primary btn-sm">설정</button></td>
</tr>
<tr>
<td scope="row">agent-ami</td>
<td>ami.foxsoft.kr</td>
<td>17801</td>
<td class="text-end">32</td>
<td class="text-end">25</td>
<td class="text-center"><i class="bi bi-lightbulb-fill text-success"></i></td>
<td class="text-center"><button type="button" class="btn btn-primary btn-sm">설정</button></td>
</tr>
</tbody>
</table>
</article>
</div>
</main>
</template>
<style></style>

@ -1,41 +1,33 @@
<script setup>
import '@/assets/main.css'
import { Bar, Line } from 'vue-chartjs'
import { Chart as ChartJS, Title, Tooltip, Legend, BarElement, PointElement, LineElement, CategoryScale, LinearScale } from 'chart.js'
import { userApi } from '@/components/userInfo'
import { useRouter } from 'vue-router'
import { useRouter, RouterLink } from 'vue-router'
import DashboardView from './DashboardView.vue'
import AgentManageView from './AgentManageView.vue'
import { computed } from 'vue'
ChartJS.register(Title, Tooltip, Legend, BarElement, PointElement, LineElement, CategoryScale, LinearScale)
const shortThroughputCahrtData = {
labels: ['agent-mkami', 'agent-ami'],
datasets: [{ label: '분당 처리량', data: [4568, 3232] }],
}
const shortThroughputChartOptions = {
responsive: true,
indexAxis: 'y',
}
const daysThroughputChartData = {
labels: ['2025-09-01', '2025-09-02', '2025-09-03', '2025-09-04', '2025-09-05', '2025-09-06', '2025-09-07'],
datasets: [
{
label: '주간 처리량',
backgroundColor: '#f87979',
data: [40, 39, 10, 40, 39, 80, 40],
},
],
}
const daysThroughputChartOptions = {
responsive: true,
maintainAspectRatio: false,
}
const props = defineProps({
contentId: { type: String, default: 'dashboard-view' },
})
const router = useRouter()
async function logout() {
let result = await userApi.logoutProcess()
if (result) {
router.push('/login.html')
}
}
const currentContent = computed(() => {
if (props.contentId == 'dashboard-view') {
return DashboardView
} else if (props.contentId == 'agent-manage-view') {
return AgentManageView
} else {
return DashboardView
}
})
</script>
<template>
@ -65,108 +57,18 @@ async function logout() {
<div><i class="bi bi-laptop" style="font-size: 2rem"></i></div>
<ul class="nav nav-pills flex-column mb-auto">
<li class="nav-item">
<a href="#" class="nav-link active" aria-current="page"> <i class="bi bi-cast" style="font-size: 1.1rem; padding-right: 0.5rem"></i> Dashboard </a>
<RouterLink to="/main.html" class="nav-link" :class="{ active: props.contentId == 'dashboard-view', 'link-body-emphasis': props.contentId == 'dashboard-view' }" aria-current="page"> <i class="bi bi-cast" style="font-size: 1.1rem; padding-right: 0.5rem"></i> Dashboard </RouterLink>
</li>
<li>
<a href="#" class="nav-link link-body-emphasis">
<i class="bi bi-cpu" style="font-size: 1.1rem; padding-right: 0.5rem"></i>
Agents
</a>
<RouterLink to="/agent-manage.html" class="nav-link" :class="{ active: props.contentId == 'agent-manage-view', 'link-body-emphasis': props.contentId != 'agent-manage-view' }" aria-current="page"> <i class="bi bi-cpu" style="font-size: 1.1rem; padding-right: 0.5rem"></i> Agents </RouterLink>
</li>
<li>
<a href="#" class="nav-link link-body-emphasis"> <i class="bi bi-card-checklist" style="font-size: 1.1rem; padding-right: 0.5rem"></i> History </a>
</li>
</ul>
</aside>
<main class="dfx-main container w-100">
<div class="row">
<div class="col-12 pt-2 border-bottom">
<h3 class="h3">Dashboard</h3>
</div>
</div>
<div class="row">
<article class="col-12 pt-3">
<div class="row">
<div class="col-3">
<div class="card">
<div class="card-body">
<h5 class="card-title">agent-mkami <i class="bi bi-lightbulb-fill text-success"></i></h5>
<p class="card-text">Host : mkami-oracle</p>
<p class="card-text">처리량 : 789</p>
</div>
</div>
</div>
<div class="col-3">
<div class="card">
<div class="card-body">
<h5 class="card-title">agent-ami <i class="bi bi-lightbulb-fill text-success"></i></h5>
<p class="card-text">상태 : ami-cubrid</p>
<p class="card-text">처리량 : 345</p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="row">
<article class="col-12 pt-3">
<div class="row">
<div class="col-6">
<div class="card">
<div class="card-body">
<Bar id="shortThoughtputChart" :options="shortThroughputChartOptions" :data="shortThroughputCahrtData"></Bar>
</div>
</div>
</div>
<div class="col-6">
<div class="card">
<div class="card-body">
<Line :option="daysThroughputChartOptions" :data="daysThroughputChartData"></Line>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="row">
<article class="col-12 pt-3">
<h5 class="h5">에이전트 목록</h5>
<table class="table table-striped table-bordered align-middle">
<thead>
<tr>
<th scope="col" class="text-center">Agent ID</th>
<th scope="col" class="text-center">Host</th>
<th scope="col" class="text-center">port</th>
<th scope="col" class="text-center">Postman Count</th>
<th scope="col" class="text-center">Dropbox Count</th>
<th scope="col" class="text-center">Status</th>
<th scope="col" class="text-center">Setting</th>
</tr>
</thead>
<tbody class="table-group-divider">
<tr>
<td scope="row">agent-mkami</td>
<td>mkami.foxsoft.kr</td>
<td>17801</td>
<td class="text-end">32</td>
<td class="text-end">25</td>
<td class="text-center"><i class="bi bi-lightbulb-fill text-success"></i></td>
<td class="text-center"><button type="button" class="btn btn-primary btn-sm">설정</button></td>
</tr>
<tr>
<td scope="row">agent-ami</td>
<td>ami.foxsoft.kr</td>
<td>17801</td>
<td class="text-end">32</td>
<td class="text-end">25</td>
<td class="text-center"><i class="bi bi-lightbulb-fill text-success"></i></td>
<td class="text-center"><button type="button" class="btn btn-primary btn-sm">설정</button></td>
</tr>
</tbody>
</table>
</article>
</div>
</main>
<!-- main content - dashboard, agent list, history -->
<component :is="currentContent"></component>
</div>
</template>

@ -12,13 +12,18 @@ public class DfxAgentMessageHistoryDto {
private String senderAgentId;
private String senderHostName;
private long senderTs;
private String senderTimeString;
private String recipientAgentId;
private String recipientHostName;
private long recipientTs;
private String recipientTimeString;
private String messageUuid;
private String messageTypeCode;
private long consoleReceiveTs;
private String consoleReceiveTimeString;
private String processStatusCode;
private String messageData;
private int messageDataCount;
private long processAckTs;
private long processAckTimeString;
}

@ -9,4 +9,5 @@ public interface DfxAgentMessageHistoryMapper {
List<DfxAgentMessageHistoryDto> selectDfxAgentMessageHistoryList();
DfxAgentMessageHistoryDto selectDfxAgentMessageHistoryBySenderAgentIdAndMessageUuid(DfxAgentMessageHistoryDto dfxAgentMessageHistoryDto);
void insertDfxAgentMessageHistory(DfxAgentMessageHistoryDto dfxAgentMessageHistoryDto);
int updateDfxAgentMessageHistoryForProcessAck(DfxAgentMessageHistoryDto dfxAgentMessageHistoryDto);
}

@ -96,7 +96,13 @@ public class ListenerService {
.processStatusCode(receiveMessageDto.getProcessStatus().name())
.messageData(receiveMessageDto.getData()).messageDataCount(messageDataCount)
.build();
if(receiveMessageDto.getProcessStatus() == ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED) {
dfxAgentMessageHistoryMapper.insertDfxAgentMessageHistory(dfxAgentMessageHistoryDto);
}
else if(receiveMessageDto.getProcessStatus() == ReceiveMessageDto.ProcessStatus.PROCESS_DONE) {
// update PROCESS_DONE
dfxAgentMessageHistoryMapper.updateDfxAgentMessageHistoryForProcessAck((dfxAgentMessageHistoryDto));
}
ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_SUCCESS).build();
} catch (IllegalMessageException | NullMessageException | InCompleteMessageException e) {
log.error("{}", e, e);

@ -39,7 +39,7 @@ server:
include-stacktrace: always
port: 17443
ssl:
enabled: false
enabled: true
certificate: ${user.home}/.vite-plugin-mkcert/bsm-lab.dev.pem
certificate-private-key: ${user.home}/.vite-plugin-mkcert/bsm-lab.dev-key.pem

@ -4,7 +4,14 @@
<select id="selectDfxAgentMessageHistoryList" resultType="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto">
<![CDATA[
SELECT A.SENDER_AGENT_ID, TO_CHAR(A.SENDER_TS, 'YYYY-MM-DD HH24:MI:SS') AS SENDER_TS, A.RECIPIENT_AGENT_ID, TO_CHAR(A.RECIPIENT_TS, 'YYYY-MM-DD HH24:MI:SS') AS RECIPIENT_TS, A.MESSAGE_UUID, A.MESSAGE_TYPE_CODE, TO_CHAR(A.CONSOLE_RECEIVE_TS, 'YYYY-MM-DD HH24:MI:SS') AS CONSOLE_RECEIVE_TS, A.PROCESS_STATUS_CODE, A.MESSAGE_DATA, A.MESSAGE_DATA_COUNT
SELECT A.SENDER_AGENT_ID
, (EXTRACT(EPOCH FROM A.SENDER_TS) * 1000)::BIGINT AS SENDER_TS, TO_CHAR(A.SENDER_TS, 'YYYY-MM-DD HH24:MI:SS') AS SENDER_TIME_STRING
, A.RECIPIENT_AGENT_ID
, (EXTRACT(EPOCH FROM A.RECIPIENT_TS) * 1000)::BIGINT AS RECIPIENT_TS, TO_CHAR(A.RECIPIENT_TS, 'YYYY-MM-DD HH24:MI:SS') AS RECIPIENT_TIME_STRING
, A.MESSAGE_UUID, A.MESSAGE_TYPE_CODE
, (EXTRACT(EPOCH FROM A.CONSOLE_RECEIVE_TS) * 1000)::BIGINT AS CONSOLE_RECEIVE_TS, TO_CHAR(A.CONSOLE_RECEIVE_TS, 'YYYY-MM-DD HH24:MI:SS') AS CONSOLE_RECEIVE_TIME_STRING
, A.PROCESS_STATUS_CODE, A.MESSAGE_DATA, A.MESSAGE_DATA_COUNT
, (EXTRACT(EPOCH FROM A.PROCESS_ACK_TS) * 1000)::BIGINT AS PROCESS_ACK_TS, TO_CHAR(A.PROCESS_ACK_TS, 'YYYY-MM-DD HH24:MI:SS') AS PROCESS_ACK_TIME_STRING
, B.HOST_NAME AS SENDER_HOST_NAME, C.HOST_NAME AS RECIPIENT_HOST_NAME
FROM (
SELECT SENDER_AGENT_ID, SENDER_TS, RECIPIENT_AGENT_ID, RECIPIENT_TS, MESSAGE_UUID, MESSAGE_TYPE_CODE, CONSOLE_RECEIVE_TS, PROCESS_STATUS_CODE, MESSAGE_DATA, MESSAGE_DATA_COUNT
@ -24,7 +31,14 @@
<select id="selectDfxAgentMessageHistoryBySenderAgentIdAndMessageUuid" parameterType="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto" resultType="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto">
<![CDATA[
SELECT A.SENDER_AGENT_ID, TO_CHAR(A.SENDER_TS, 'YYYY-MM-DD HH24:MI:SS') AS SENDER_TS, A.RECIPIENT_AGENT_ID, TO_CHAR(A.RECIPIENT_TS, 'YYYY-MM-DD HH24:MI:SS') AS RECIPIENT_TS, A.MESSAGE_UUID, A.MESSAGE_TYPE_CODE, TO_CHAR(A.CONSOLE_RECEIVE_TS, 'YYYY-MM-DD HH24:MI:SS') AS CONSOLE_RECEIVE_TS, A.PROCESS_STATUS_CODE, A.MESSAGE_DATA, A.MESSAGE_DATA_COUNT
SELECT A.SENDER_AGENT_ID
, (EXTRACT(EPOCH FROM A.SENDER_TS) * 1000)::BIGINT AS SENDER_TS, TO_CHAR(A.SENDER_TS, 'YYYY-MM-DD HH24:MI:SS') AS SENDER_TIME_STRING
, A.RECIPIENT_AGENT_ID
, (EXTRACT(EPOCH FROM A.RECIPIENT_TS) * 1000)::BIGINT AS RECIPIENT_TS, TO_CHAR(A.RECIPIENT_TS, 'YYYY-MM-DD HH24:MI:SS') AS RECIPIENT_TIME_STRING
, A.MESSAGE_UUID, A.MESSAGE_TYPE_CODE
, (EXTRACT(EPOCH FROM A.CONSOLE_RECEIVE_TS) * 1000)::BIGINT AS CONSOLE_RECEIVE_TS, TO_CHAR(A.CONSOLE_RECEIVE_TS, 'YYYY-MM-DD HH24:MI:SS') AS CONSOLE_RECEIVE_TIME_STRING
, A.PROCESS_STATUS_CODE, A.MESSAGE_DATA, A.MESSAGE_DATA_COUNT
, (EXTRACT(EPOCH FROM A.PROCESS_ACK_TS) * 1000)::BIGINT AS PROCESS_ACK_TS, TO_CHAR(A.PROCESS_ACK_TS, 'YYYY-MM-DD HH24:MI:SS') AS PROCESS_ACK_TIME_STRING
, B.HOST_NAME AS SENDER_HOST_NAME, C.HOST_NAME AS RECIPIENT_HOST_NAME
FROM TB_DFX_AGENT_MESSAGE_HISTORY A
JOIN TB_DFX_AGENT_INFO B ON (A.SENDER_AGENT_ID = B.AGENT_ID)
@ -38,11 +52,36 @@
<insert id="insertDfxAgentMessageHistory" parameterType="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto">
<![CDATA[
INSERT INTO TB_DFX_AGENT_MESSAGE_HISTORY (
SENDER_AGENT_ID, SENDER_TS, RECIPIENT_AGENT_ID, RECIPIENT_TS, MESSAGE_UUID, MESSAGE_TYPE_CODE, CONSOLE_RECEIVE_TS, PROCESS_STATUS_CODE, MESSAGE_DATA, MESSAGE_DATA_COUNT
SENDER_AGENT_ID
, SENDER_TS
, RECIPIENT_AGENT_ID
, RECIPIENT_TS
, MESSAGE_UUID, MESSAGE_TYPE_CODE
, CONSOLE_RECEIVE_TS
, PROCESS_STATUS_CODE, MESSAGE_DATA, MESSAGE_DATA_COUNT
, PROCESS_ACK_TS
)
VALUES (
#{senderAgentId}, #{senderTs, jdbcType=TIMESTAMP_WITH_TIMEZONE, javaType=long}, #{recipientAgentId}, #{recipientTs, jdbcType=TIMESTAMP_WITH_TIMEZONE, javaType=long}, #{messageUuid}, #{messageTypeCode}, #{consoleReceiveTs, jdbcType=TIMESTAMP_WITH_TIMEZONE, javaType=long}, #{processStatusCode}, #{messageData}, #{messageDataCount}
#{senderAgentId}
, CASE WHEN #{senderTs} = 0 THEN NULL ELSE #{senderTs, jdbcType=TIMESTAMP_WITH_TIMEZONE, javaType=long} END
, #{recipientAgentId}
, CASE WHEN #{recipientTs} = 0 THEN NULL ELSE #{recipientTs, jdbcType=TIMESTAMP_WITH_TIMEZONE, javaType=long} END
, #{messageUuid}, #{messageTypeCode}
, CASE WHEN #{consoleReceiveTs} = 0 THEN NULL ELSE #{consoleReceiveTs, jdbcType=TIMESTAMP_WITH_TIMEZONE, javaType=long} END
, #{processStatusCode}, #{messageData}, #{messageDataCount}
, CASE WHEN #{processAckTs} = 0 THEN NULL ELSE #{processAckTs, jdbcType=TIMESTAMP_WITH_TIMEZONE, javaType=long} END
)
]]>
</insert>
<update id="updateDfxAgentMessageHistoryForProcessAck" parameterType="com.bsmlab.dfx.dfxconsole.app.agent.service.DfxAgentMessageHistoryDto">
<![CDATA[
UPDATE TB_DFX_AGENT_MESSAGE_HISTORY
SET PROCESS_STATUS_CODE = #{processStatusCode}
, PROCESS_ACK_TS = NOW()
WHERE 1 = 1
SENDER_AGENT_ID = #{senderAgentUId}
AND MESSAGE_UUID = #{messageUuid}
]]>
</update>
</mapper>

Loading…
Cancel
Save