gagamel преди 5 години
родител
ревизия
6acb43f58b

+ 10 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaSystemDao.java

@@ -6,6 +6,7 @@ import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Alarm;
 import com.style24.persistence.domain.AlarmReceiver;
 import com.style24.persistence.domain.Batch;
+import com.style24.persistence.domain.BatchLog;
 import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Menu;
 import com.style24.persistence.domain.MenuAccessHst;
@@ -312,4 +313,13 @@ public interface TsaSystemDao {
 	 */
 	void saveBatch(Batch batch);
 
+	/**
+	 * 배치 로그 목록
+	 * @param batch - 배치 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 3
+	 */
+	Collection<BatchLog> getBatchLogList(Batch batch);
+
 }

+ 12 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaSystemService.java

@@ -13,6 +13,7 @@ import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Alarm;
 import com.style24.persistence.domain.AlarmReceiver;
 import com.style24.persistence.domain.Batch;
+import com.style24.persistence.domain.BatchLog;
 import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Menu;
 import com.style24.persistence.domain.MenuRole;
@@ -516,4 +517,15 @@ public class TsaSystemService {
 		systemDao.saveBatch(batch);
 	}
 
+	/**
+	 * 배치 로그 목록
+	 * @param batch - 배치 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 3
+	 */
+	public Collection<BatchLog> getBatchLogList(Batch batch) {
+		return systemDao.getBatchLogList(batch);
+	}
+
 }

+ 14 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaSystemController.java

@@ -23,6 +23,7 @@ import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Alarm;
 import com.style24.persistence.domain.AlarmReceiver;
 import com.style24.persistence.domain.Batch;
+import com.style24.persistence.domain.BatchLog;
 import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Menu;
 import com.style24.persistence.domain.SampleFile;
@@ -569,4 +570,17 @@ public class TsaSystemController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
+	/**
+	 * 배치 로그 목록
+	 * @param batch - 배치 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 3
+	 */
+	@PostMapping("/batch/log/list")
+	@ResponseBody
+	public Collection<BatchLog> getBatchLogList(@RequestBody Batch batch) {
+		return systemService.getBatchLogList(batch);
+	}
+
 }

+ 2 - 0
style24.admin/src/main/java/com/style24/persistence/domain/Batch.java

@@ -24,5 +24,7 @@ public class Batch extends TscBaseDomain {
 	// 배치 목록 검색조건
 	private String searchGb;
 	private String searchTxt;
+	private String batchStdt;	// 배치시작일자
+	private String batchEddt;	// 배치종료일자
 
 }

+ 39 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaSystem.xml

@@ -761,6 +761,9 @@
 		<if test="bizGb != null and bizGb != ''">
 		AND    BIZ_GB = #{bizGb}
 		</if>
+		<if test="batchFrq != null and batchFrq != ''">
+		AND    BATCH_FRQ = #{batchFrq}
+		</if>
 		<choose>
 		    <when test="searchGb == 'batchId'">
 		AND    LOWER(BATCH_ID) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
@@ -807,5 +810,41 @@
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()
 	</insert>
+	
+	<!-- 배치 로그 목록 -->
+	<select id="getBatchLogList" parameterType="Batch" resultType="BatchLog">
+		/* TsaSystem.getBatchLogList */
+		SELECT B.BATCH_ID
+		     , B.BATCH_NM
+		     , B.BIZ_GB
+		     , B.BATCH_FRQ
+		     , BL.BATCH_STAT
+		     , DATE_FORMAT(BL.BATCH_STDT,'%Y-%m-%d %H:%i:%s.%f') AS BATCH_STDT
+		     , DATE_FORMAT(BL.BATCH_EDDT,'%Y-%m-%d %H:%i:%s.%f') AS BATCH_EDDT
+		     , TIMESTAMPDIFF(SECOND,BL.BATCH_STDT,BL.BATCH_EDDT) AS RUN_TIME
+		FROM   TB_BATCH B
+		     , TB_BATCH_LOG BL
+		WHERE  B.BATCH_ID = BL.BATCH_ID
+		<if test="bizGb != null and bizGb != ''">
+		AND    B.BIZ_GB = #{bizGb}
+		</if>
+		<if test="batchFrq != null and batchFrq != ''">
+		AND    B.BATCH_FRQ = #{batchFrq}
+		</if>
+		<choose>
+		    <when test="searchGb == 'batchId'">
+		AND    LOWER(B.BATCH_ID) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    </when>
+		    <when test="searchGb == 'batchNm'">
+		AND    LOWER(B.BATCH_NM) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    </when>
+		</choose>
+		<if test="batchStdt != null and batchStdt != ''">
+		AND    BL.REG_DT <![CDATA[>=]]> STR_TO_DATE(#{batchStdt},'%Y-%m-%d')
+		</if>
+		<if test="batchEddt != null and batchEddt != ''">
+		AND    BL.REG_DT <![CDATA[<]]> DATE_ADD(STR_TO_DATE(#{batchEddt},'%Y-%m-%d'), INTERVAL 1 DAY)
+		</if>
+	</select>
 
 </mapper>

+ 147 - 80
style24.admin/src/main/webapp/WEB-INF/views/system/BatchForm.html

@@ -32,7 +32,9 @@
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
 						<col style="width:10%;"/>
-						<col style="width:40%;"/>
+						<col style="width:20%;"/>
+						<col style="width:10%;"/>
+						<col style="width:20%;"/>
 						<col style="width:10%;"/>
 						<col/>
 					</colgroup>
@@ -44,7 +46,17 @@
 								<option th:if="${bizGbList}" th:each="oneData, status : ${bizGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
-						<th>구분</th>
+						<th>배치주기</th>
+						<td>
+							<select name="batchFrq">
+								<option value="">[전체]</option>
+								<option value="H">[H] 시간배치</option>
+								<option value="D">[D] 일배치</option>
+								<option value="M">[M] 월배치</option>
+								<option value="Y">[Y] 연배치</option>
+							</select>
+						</td>
+						<th>검색어</th>
 						<td>
 							<select name="searchGb">
 								<option value="">[선택]</option>
@@ -54,6 +66,11 @@
 							<input type="text" class="w300" name="searchTxt" placeholder="" maxlength="50"/>
 						</td>
 					</tr>
+					<tr>
+						<th>수행기간</th>
+						<td colspan="5" id="terms">
+						</td>
+					</tr>
 				</table>
 				
 				<ul class="panelBar">
@@ -63,99 +80,110 @@
 				</ul>
 			</form>
 		</div>
+		<!-- //검색조건 영역 -->
 		
-		<!-- 리스트 영역 -->
 		<div class="panelStyle">
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
-		</div>
-		<!-- //리스트 영역 -->
+			<!-- 다중 TABLE 배치 -->
+			<ul class="division">
+				<li style="width: 45%">
+					<div class="panelBar">
+						<h4>배치 목록</h4>
+					</div>
+					<div id="gridList1" style="width: 100%; height: 300px" class="ag-theme-balham"></div>
+					
+					<form id="detailForm" name="detailForm" action="#" th:action="@{'/system/batch/save'}">
+						<input type="hidden" name="mode" value="N"/>
+						
+						<table class="frmStyle" aria-describedby="등록/수정 폼">
+							<colgroup>
+								<col style="width:20%;"/>
+								<col style="width:30%;"/>
+								<col style="width:20%;"/>
+								<col/>
+							</colgroup>
+							<tr>
+								<th>배치ID<em class="required" title="필수"></em></th>
+								<td colspan="3">
+									<input type="text" name="batchId" placeholder="" required="required" maxlength="50" data-valid-name="배치ID"/>
+								</td>
+							</tr>
+							<tr>
+								<th>배치명<em class="required" title="필수"></em></th>
+								<td colspan="3">
+									<input type="text" name="batchNm" placeholder="" maxlength="100" required="required" data-valid-name="배치명"/>
+								</td>
+							</tr>
+							<tr>
+								<th>업무구분<em class="required" title="필수"></em></th>
+								<td>
+									<select name="bizGb" class="w150" required="required" data-valid-name="업무구분">
+										<option value="">[선택]</option>
+										<option th:if="${bizGbList}" th:each="oneData, status : ${bizGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+									</select>
+								</td>
+								<th>배치주기<em class="required" title="필수"></em></th>
+								<td>
+									<select name="batchFrq" required="required" data-valid-name="배치주기">
+										<option value="">[선택]</option>
+										<option value="H">[H] 시간배치</option>
+										<option value="D">[D] 일배치</option>
+										<option value="M">[M] 월배치</option>
+										<option value="Y">[Y] 연배치</option>
+									</select>
+								</td>
+							</tr>
+							<tr>
+								<th>배치설명</th>
+								<td colspan="3">
+									<textarea class="textareaR2" name="batchDesc"></textarea>
+								</td>
+							</tr>
+							<tr>
+								<th>사용여부<em class="required" title="필수"></em></th>
+								<td colspan="3">
+									<input type="hidden" name="useYn"/>
+									<label class="chkBox checked"><input type="checkbox" name="chkUseYn" value="Y" checked="checked" readonly="readonly"/>사용</label>
+								</td>
+							</tr>
+						</table>
 		
-		<!-- 등록/수정 영역 -->
-		<div class="panelStyle">
-			<form id="detailForm" name="detailForm" action="#" th:action="@{'/system/batch/save'}">
-				<input type="hidden" name="mode" value="N"/>
-				
-				<table class="frmStyle" aria-describedby="등록/수정 폼">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:40%;"/>
-						<col style="width:10%;"/>
-						<col/>
-					</colgroup>
-					<tr>
-						<th>배치ID<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" name="batchId" class="w300" placeholder="" required="required" maxlength="50" data-valid-name="배치ID"/>
-						</td>
-						<th>배치명<em class="required" title="필수"></em></th>
-						<td>
-							<input type="text" name="batchNm" placeholder="" maxlength="100" required="required" data-valid-name="배치명"/>
-						</td>
-					</tr>
-					<tr>
-						<th>업무구분<em class="required" title="필수"></em></th>
-						<td>
-							<select name="bizGb" class="w150" required="required" data-valid-name="업무구분">
-								<option value="">[선택]</option>
-								<option th:if="${bizGbList}" th:each="oneData, status : ${bizGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>배치주기<em class="required" title="필수"></em></th>
-						<td>
-							<select name="batchFrq" required="required" data-valid-name="배치주기">
-								<option value="">[선택]</option>
-								<option value="H">[H] 시간배치</option>
-								<option value="D">[D] 일배치</option>
-								<option value="M">[M] 월배치</option>
-								<option value="Y">[Y] 연배치</option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>배치설명</th>
-						<td colspan="3">
-							<textarea class="textareaR4" name="batchDesc"></textarea>
-						</td>
-					</tr>
-					<tr>
-						<th>사용여부<em class="required" title="필수"></em></th>
-						<td colspan="3">
-							<input type="hidden" name="useYn"/>
-							<label class="chkBox"><input type="checkbox" name="chkUseYn" value="Y" checked="checked" readonly="readonly"/>사용</label>
-						</td>
-					</tr>
-				</table>
-
-				<ul class="panelBar">
-					<li class="right">
-						<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
-						<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
-					</li>
-				</ul>
-			</form>
+						<ul class="panelBar">
+							<li class="right">
+								<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
+								<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
+							</li>
+						</ul>
+					</form>
+				</li>
+				<li style="width: 55%">
+					<div class="panelBar">
+						<h4>배치 로그</h4>
+					</div>
+					<div id="gridList2" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+				</li>
+			</ul>
 		</div>
-		<!-- //등록/수정 영역 -->
 	</div>
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	var bizGbList = gagajf.convertToArray([[${bizGbList}]]);
+	let bizGbList = gagajf.convertToArray([[${bizGbList}]]);
 	
 	// specify the columns
-	var columnDefs = [
+	let columnDefs1 = [
 		{
 			headerName: "배치ID", field: "batchId", width: 200,
 			cellRenderer: function(params) {
 				return '<a href="javascript:void(0);">' + params.value + '</a>';
 			}
 		},
-		{headerName: "배치명", field: "batchNm", width: 250},
+		{headerName: "배치명", field: "batchNm", width: 200},
 		{
-			headerName: "업무구분", field: "bizGb", width: 100, cellClass: 'text-center',
+			headerName: "업무구분", field: "bizGb", width: 80, cellClass: 'text-center',
 			cellRenderer: function (params) { return gagaAgGrid.lookupValue(bizGbList, params.value); }
 		},
 		{
-			headerName: "배치주기", field: "batchFrq", width: 100, cellClass: 'text-center',
+			headerName: "배치주기", field: "batchFrq", width: 80, cellClass: 'text-center',
 			cellRenderer: function(params) {
 				let batchFrqNm = '시간배치';
 				if (params.value == 'D') batchFrqNm = '일배치';
@@ -165,14 +193,46 @@
 			}
 		},
 		{headerName: "배치설명", field: "batchDesc", width: 400, hide: true},
-		{headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center'}
+		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'}
+	];
+	
+	let columnDefs2 = [
+// 		{headerName: "배치ID", field: "batchId", width: 200},
+		{headerName: "배치명", field: "batchNm", width: 200},
+// 		{
+// 			headerName: "업무구분", field: "bizGb", width: 100, cellClass: 'text-center',
+// 			cellRenderer: function (params) { return gagaAgGrid.lookupValue(bizGbList, params.value); }
+// 		},
+		{
+			headerName: "배치주기", field: "batchFrq", width: 80, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				let batchFrqNm = '시간배치';
+				if (params.value == 'D') batchFrqNm = '일배치';
+				else if (params.value == 'M') batchFrqNm = '월배치';
+				else if (params.value == 'Y') batchFrqNm = '연배치';
+				return batchFrqNm;
+			}
+		},
+		{
+			headerName: "상태", field: "batchStat", width: 80, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return params.value == 'I' ? '실행중' : '실행완료';
+			}
+		},
+		{headerName: "시작일시", field: "batchStdt", width: 180, cellClass: 'text-center'},
+		{headerName: "종료일시", field: "batchEddt", width: 180, cellClass: 'text-center'},
+		{
+			headerName: "수행시간(초)", field: "runTime", width: 100, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toAddComma(params.value); }
+		}
 	];
 
 	// Get GridOptions
-	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	let gridOptions1 = gagaAgGrid.getGridOptions(columnDefs1);
+	let gridOptions2 = gagaAgGrid.getGridOptions(columnDefs2);
 
 	// Cell Click
-	gridOptions.onCellClicked = function(event) {
+	gridOptions1.onCellClicked = function(event) {
 		if (event.colDef.field != 'batchId')
 			return;
 
@@ -198,7 +258,8 @@
 	// 조회
 	$('#btnSearch').on('click', function() {
 		// Fetch data
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions1, '#searchForm');
+		gagaAgGrid.fetch('/system/batch/log/list', gridOptions2, '#searchForm');
 	});
 
 	// 신규
@@ -207,6 +268,7 @@
 		$('#detailForm input[name=mode]').val('N');
 		$('#detailForm input[name=batchId]').attr('readonly', false);
 		$('#detailForm input:checkbox[name=chkUseYn]').prop('checked', true);
+		$("#detailForm input:checkbox[name=chkUseYn]").parent().addClass('checked');
 		$('#detailForm input:checkbox[name=chkUseYn]').attr('readonly', true);
 		$('#detailForm input[name=batchId]').focus();
 	});
@@ -235,8 +297,13 @@
 	});
 
 	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'batchStdt', 'batchEddt');
+		$('#batchStdt').val(new Date().format("YYYY-MM-DD"));
+		$('#batchEddt').val(new Date().format("YYYY-MM-DD"));
+		
 		// Create a agGrid
-		gagaAgGrid.createGrid('gridList', gridOptions);
+		gagaAgGrid.createGrid('gridList1', gridOptions1);
+		gagaAgGrid.createGrid('gridList2', gridOptions2);
 	});
 /*]]>*/
 </script>

+ 5 - 0
style24.core/src/main/java/com/style24/persistence/domain/BatchLog.java

@@ -20,4 +20,9 @@ public class BatchLog extends TscBaseDomain {
 	private String batchEddt;	// 배치종료일시
 	private String batchStat;	// 배치상태
 
+	private String batchNm;		// 배치명
+	private String bizGb;		// 업무구분
+	private String batchFrq;	// 배치주기
+	private int runTime;		// 수행시간(초)
+
 }