jsh77b 5 лет назад
Родитель
Сommit
2e6405445c

+ 40 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java

@@ -238,6 +238,46 @@ public interface TsaOrderDao {
 	 * @since 2020. 11. 30
 	 */
 	int updateOrderDetailInvoice(Order order);
+	
+	/**
+	 * 주문상세 > 주문메오 > 주문메모정보조회
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	Order getOrderMemoInfo(Order order);
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	int createOrderMemo(Order order);
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모수정
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	int updateOrderMemo(Order order);
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모삭제
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	int deleteOrderMemo(Order order);
 
 }
 

+ 46 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java

@@ -450,4 +450,50 @@ public class TsaOrderService {
 
 		return resultMsg;
 	}
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모정보조회
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public Order getOrderMemoInfo(Order order) {
+		return orderDao.getOrderMemoInfo(order);
+	}
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모등록
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public void createOrderMemo(Order order) {
+		orderDao.createOrderMemo(order);
+	}
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모수정
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public void updateOrderMemo(Order order) {
+		orderDao.updateOrderMemo(order);
+	}
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모삭제
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public void deleteOrderMemo(Order order) {
+		orderDao.deleteOrderMemo(order);
+	}
+	
+	
 }

+ 103 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -13,6 +13,7 @@ import org.springframework.core.io.InputStreamResource;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -202,6 +203,8 @@ public class TsaOrderController extends TsaBaseController {
 		
 		// 1. 주문기본정보
 		mav.addObject("ordNo"					, ordNo);												// 주문번호
+		mav.addObject("userNo"					, TsaSession.getInfo().getUserNo());					// 관리자번호
+		
 		mav.addObject("orderInfo"				, orderService.getOrderInfoList(order));				// 주문기본정보
 		mav.addObject("orderGoodsInfo"			, orderService.getOrderDetailList(order));				// 주문상품정보
 		mav.addObject("orderFreeGiftInfo"		, orderService.getOrderFreeGiftList(order));			// 주문사은품정보 2020.12.16 추가
@@ -377,6 +380,106 @@ public class TsaOrderController extends TsaBaseController {
 		return map;
 	}
 	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 등록폼
+	 *
+	 * @param ordNo - 주문번호
+	 * @param seq - 시퀀스
+	 * @param mode - 신규/수정 구분
+	 * @return ModelAndView
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	@GetMapping("/memo/create/form")
+	@ResponseBody
+	public ModelAndView orderMemoCreateFrom(@RequestParam(value = "ordNo") int ordNo, @RequestParam(value = "seq") int seq, @RequestParam(value = "mode") String mode) {
+		ModelAndView mav = new ModelAndView();
+		int userNo 		= TsaSession.getInfo().getUserNo();
+		String userNm 	= TsaSession.getInfo().getUserNm();
+
+		if ("U".equals(mode)) {
+			Order order = new Order();
+			order.setSeq(seq);
+			order.setOrdNo(ordNo);
+			order.setDelYn("N");
+			
+			Order orderMemo = orderService.getOrderMemoInfo(order);
+			
+			mav.addObject("orderMemo", orderMemo);
+		}
+
+		mav.addObject("userNo"	, userNo);
+		mav.addObject("userNm"	, userNm);
+		mav.addObject("ordNo"	, ordNo);
+		mav.addObject("seq"		, seq);
+		mav.addObject("mode"	, mode);
+
+		mav.setViewName("order/OrderMemoRegistForm");
+		return mav;
+	}
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모저장
+	 *
+	 * @param order - 주문정보
+	 * @return GagaResponse
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	@PostMapping("/memo/save")
+	@ResponseBody
+	public GagaResponse createOrderMemo(@RequestBody Order order) {
+		int userNo = TsaSession.getInfo().getUserNo();
+		order.setRegNo(userNo);
+		order.setUpdNo(userNo);
+		
+		// 신규
+		if ("N".equals(order.getMode())) {
+			orderService.createOrderMemo(order);
+		}
+		// 변경
+		else if ("U".equals(order.getMode())) {
+			orderService.updateOrderMemo(order);
+		}
+		
+		return super.ok("저장이 완료되었습니다.");
+	}
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모삭제
+	 *
+	 * @param order - 주문정보
+	 * @return GagaResponse
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	@PostMapping("memo/delete")
+	@ResponseBody
+	public GagaResponse deleteOrderMemo(@RequestBody Order order) {
+		int userNo = TsaSession.getInfo().getUserNo();
+		order.setRegNo(userNo);
+		order.setUpdNo(userNo);
+		
+		orderService.deleteOrderMemo(order);
+		
+		return super.ok("저장이 완료되었습니다.");
+	}
+	
+	/**
+	 * 주문상세 > 주문요청 관리자 메모 > 메모삭제 > 새로고침
+	 *
+	 * @param ordNo - 주문번호
+	 * @return Collection<TsaOrder>
+	 * @author jsh77b
+	 * @since 2019. 12. 16
+	 */
+	@GetMapping("/admin/memo/list/{ordNo}")
+	@ResponseBody
+	public Collection<Order> getOrderTsainMemoList(@PathVariable(value = "ordNo") int ordNo) {
+		Order order = new Order();
+		order.setOrdNo(ordNo);
+		return orderService.getOrderTsainMemoList(order);
+	}
 }
 
 

+ 5 - 0
style24.admin/src/main/java/com/style24/persistence/domain/Order.java

@@ -239,12 +239,17 @@ public class Order extends TscBaseDomain {
 	
 	private int orderMemoSq;
 	private String memo;
+	private String orgFileNm;
+	private String sysFileNm;
 	
 	private int ordFreeGiftSq;
 	private int freeGiftSq;
 	private String freeGiftName;
 	private int freeGiftValSq;
 	private int usePoint;
+	private int seq;
+	
+	
 }
 
 

+ 69 - 0
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -1213,6 +1213,75 @@
 		AND    ORD_DTL_STAT IN ('G013_30', 'G013_55')
 		AND    SUPPLY_COMP_CD = #{supplyCompCd}
 	</update>
+	
+	<!-- 주문상세 > 주문메오 > 주문메모정보조회 -->
+	<select id="getOrderMemoInfo" parameterType="Order" resultType="Order">
+		/* order.getOrderMemoInfo */
+		SELECT ORDER_MEMO_SQ 
+		     , OM.ORD_NO
+		     , OM.MEMO
+		     , OM.REG_NO
+		     , OM.REG_DT
+		     , OM.UPD_NO
+		     , OM.UPD_DT
+		     , (SELECT USER_NM
+		        FROM   TB_USER X
+		        WHERE  X.USER_NO = OM.REG_NO) AS REG_NM
+		FROM  TB_ORDER_MEMO OM
+		WHERE 1=1
+		AND   OM.ORD_NO = #{ordNo}
+		AND   OM.DEL_YN = 'N'
+	</select>
+	
+	<!-- 주문상세 > 주문요청 관리자 메모 > 메모등록 -->
+	<insert id="createOrderMemo" parameterType="Order">
+		/* order.createOrderMemo */
+		INSERT INTO TB_ORDER_MEMO (
+			ORD_NO
+			,MEMO
+			,ORG_FILE_NM
+			,SYS_FILE_NM
+			,DEL_YN
+			,REG_NO
+			,REG_DT
+			,UPD_NO
+			,UPD_DT
+		) VALUES (
+			#{ordNo}
+			,#{memo}
+			,#{orgFileNm}
+			,#{sysFileNm}
+			,'N'
+			,#{regNo}
+			,CURRENT_TIMESTAMP()
+			,#{updNo}
+			,CURRENT_TIMESTAMP()
+		)
+	</insert>
+	
+	<!-- 주문상세 > 주문요청 관리자 메모 > 메모수정 -->
+	<update id="updateOrderMemo" parameterType="Order">
+		/* order.updateOrderMemo */
+		UPDATE TB_ORDER_MEMO
+		SET    MEMO = #{memo}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP() 
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo}
+		AND    ORDER_MEMO_SQ = #{seq}
+	</update>
+	
+	<!-- 주문상세 > 주문요청 관리자 메모 > 메모수정 -->
+	<update id="deleteOrderMemo" parameterType="Order">
+		/* order.deleteOrderMemo */
+		UPDATE TB_ORDER_MEMO
+		SET    DEL_YN = 'Y'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP() 
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo}
+		AND    ORDER_MEMO_SQ = #{seq}
+	</update>
 
 </mapper>
 

+ 14 - 12
style24.admin/src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -3,7 +3,7 @@
 <!--
  *******************************************************************************
  * @source  : OrderListForm.html
- * @desc    : 주문목록 Page
+ * @desc    : 주문상세화면
  *============================================================================
  * SISUN
  * Copyright(C) 2020 TSIT, All rights reserved.
@@ -107,6 +107,8 @@
 <!-- data -->
 <script th:inline="javascript">
 var ordNo 					= [[${ordNo}]];							// 주문번호
+var userNo 					= [[${userNo}]]							// 관리자번호
+
 var orderInfo 				= [[${orderInfo}]];						// 기본정보
 var orderGoodsInfo 			= [[${orderGoodsInfo}]];				// 주문상세정보
 var orderFreeGiftInfo 		= [[${orderFreeGiftInfo}]];				// 주문사은품정보
@@ -461,7 +463,7 @@ var columnDefsOrderFreeGiftInfo = [
 	{headerName: "주문사은품번호"	, field: "ordFreeFigtSq"	, width: 100, cellClass: 'text-center', hide: true},
 	{headerName: "주문번호"		, field: "ordNo"			, width: 100, cellClass: 'text-center'},
 	{headerName: "사은품프로모션"	, field: "freeGiftSq"		, width: 100, cellClass: 'text-center', hide: true},
-	{headerName: "사은품프로모션명"	, field: "freeGiftName"		, width: 100, cellClass: 'text-center'},
+	{headerName: "사은품프로모션명"	, field: "freeGiftName"		, width: 200, cellClass: 'text-center'},
 	{headerName: "사은품혜택번호"	, field: "freeGiftValSq"	, width: 100, cellClass: 'text-center', hide: true},
 	{
 		headerName			: "사용포인트"		
@@ -767,13 +769,13 @@ var columnDefsOrderMemoInfo = [
 	},
 	{
 		headerName		: "삭제"
-		, field			: "orderMemoSeq"
+		, field			: "orderMemoSq"
 		, width			: 80
 		, cellClass		: 'text-center'
 		, cellRenderer	: function (params) {
 			var retStr = '';
 			
-			if (params.data.updId == userId) {
+			if (params.data.updNo == userNo) {
 				retStr = '<button type="button" class="btn btn-danger" onclick="fnDeleteOrderMemo(\'' + params.data.ordNo + '\',\'' + params.value + '\');"> - </button>';
 			}
 			return retStr;
@@ -892,7 +894,7 @@ $(document).ready(function () {
 	});
 	// 메모등록
 	$('#btnCreateOrderMemo').on('click', function () {
-		fnCreateOrderMemo(ordNo, '', 'N');
+		fnCreateOrderMemo(ordNo, 0, 'N');
 	});
 	// 배송 정보 수정
 	$('#btnUpdateOrderAddr').on('click', function () {
@@ -962,7 +964,7 @@ $(document).ready(function () {
 					'/order/cancel/confirm'
 					, jsonData
 					, function (result) {
-						uifnPopClose('popupOrderDetail');
+						uifnPopupClose('popupOrderDetail');
 						fnReOpenOrderDetailPopup();
 					}
 				);
@@ -984,7 +986,7 @@ $(document).ready(function () {
 					'/order/cancel/wait/cancel'
 					, jsonData
 					, function (result) {
-						uifnPopClose('popupOrderDetail');
+						uifnPopupClose('popupOrderDetail');
 						fnReOpenOrderDetailPopup();
 				});
 			}
@@ -1028,8 +1030,8 @@ $(document).ready(function () {
 			sureBtnText		: "확인",
 			sureBtnClick	: function () {
 				var data = new Object();
-				data.ordNo 			= ordNo;
-				data.orderMemoSq 	= orderMemoSq;
+				data.ordNo 	= ordNo;
+				data.seq 	= orderMemoSq;
 				
 				var jsonData = JSON.stringify(data);
 				gagajf.ajaxJsonSubmit(
@@ -1182,7 +1184,7 @@ $(document).ready(function () {
 				gagajf.ajaxJsonSubmit(
 					'/order/exchange/request/cancel'
 					, jsonData, function () {
-						uifnPopClose('popupOrderDetail');
+						uifnPopupClose('popupOrderDetail');
 						fnReOpenOrderDetailPopup();
 					}
 				);
@@ -1250,7 +1252,7 @@ $(document).ready(function () {
 					'/order/wdinvoice/send/save'
 					, jsonData
 					, function (result) {
-						uifnPopClose('popupOrderDetail');
+						uifnPopupClose('popupOrderDetail');
 						fnReOpenOrderDetailPopup();
 					}
 				);
@@ -1292,7 +1294,7 @@ $(document).ready(function () {
 						'/order/complete/delivery/changed'
 						, jsonData
 						, function (result) {
-							uifnPopClose('popupOrderDetail');
+							uifnPopupClose('popupOrderDetail');
 							fnReOpenOrderDetailPopup();
 						}
 					);

+ 184 - 0
style24.admin/src/main/webapp/WEB-INF/views/order/OrderMemoRegistForm.html

@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderMemoRegistForm.html
+ * @desc    : 주문메모 등록 화면
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.11.16   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="900">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>주문메모등록</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupCreateOrderMemo');"><i class="fa fa-times"></i></button>
+		</div>
+	
+		<div class="panelContent" style="height:100%; overflow-y:auto;">
+			<form id="orderMemoRequestFrm">
+				<input type="hidden" name="ordNo" th:value="${ordNo}" />
+				<input type="hidden" name="seq" th:value="${seq}" />
+				<input type="hidden" name="mode" th:value="${mode}" />
+				
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:30%" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>등록자ID</th>
+							<td id="userId">
+							</td>
+						</tr>
+						<tr>
+							<th>관리자 메모</th>
+							<td>
+								<textarea th:if="${orderMemo != null and orderMemo != ''}" name="memo" style="height:100px;" th:text="${orderMemo.memo}"></textarea>
+								<textarea th:unless="${orderMemo != null and orderMemo != ''}" name="memo" style="height:100px;" text=""></textarea>
+							</td>
+						</tr>
+						<tr id="imageFileTr">
+							<th>파일</th>
+							<td><div class="uFile">
+								<input id="imageFile" name="imageFile" type="file" class="uFileInput"/>
+								<label for="imageFile" class="uFileLabel">파일선택</label>
+								<input type="hidden" name="orgFileNm"/>
+								<input type="hidden" name="sysFileNm"/>
+							</div>
+							</td>
+						</tr>
+						<th:block th:if="${mode == 'U' and orderMemo.sysFileNm != null and orderMemo.sysFileNm != ''}" th:with="uploadImageUrl=${@environment.getProperty('upload.image.view')}">
+							<tr>
+								<th>이미지</th>
+								<td>
+									<a href="javascript:void(0);" onclick="fnPreImgView()">
+										<img id="memoImg" th:src="|${uploadImageUrl}/memo/${orderMemo.sysFileNm}|" th:onerror="'this.src=\''+@{${@environment.getProperty('domain.uximage')}+ '/image/no.gif'}+'\';'" width="300px"/>
+									</a>
+								</td>
+							</tr>
+						</th:block>
+					</tbody>
+				</table>
+				<div>
+					<button type="button" class="btn btn-success btnRight marT10" id="btnOrderMemoRegistOk">저장</button>
+				</div>	
+				<br>
+			</form>
+		</div>
+	</div>
+</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+// 이벤트 바인딩 관련
+var orderMemo 	= [[${orderMemo}]];
+var userId 		= [[${userId}]];
+var userNm 		= [[${userNm}]];
+var mode 		= [[${mode}]];
+
+// 첨부파일 등록
+$('#orderMemoRequestFrm input[name=imageFile]').on('change', function() {
+	var file = this.files[0];
+	
+	if (typeof(file) == 'undefined'){
+		return;
+	}
+	
+	gagajf.ajaxFileUpload('/common/file/upload?subDir=/memo'
+		, file
+		, function(result) {
+			$('#orderMemoRequestFrm input[name=orgFileNm]').val(result.oldFileName);
+			$('#orderMemoRequestFrm input[name=sysFileNm]').val(result.newFileName);
+		}
+		, 'image'
+	);
+});
+
+// 주문메모저장
+$('#btnOrderMemoRegistOk').on('click', function() {
+	var memo = $('#orderMemoRequestFrm textarea[name=memo]').val();
+
+	if (gagajf.isNull(memo)) {
+		mcxDialog.alert('메모 입력해 주세요.');
+		$('#orderMemoRequestFrm textarea[name=memo]').focus();
+		return;
+	}
+
+	mcxDialog.confirm('저장하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function(){
+			var jsonData = JSON.stringify($('#orderMemoRequestFrm').serializeObject());
+			gagajf.ajaxJsonSubmit(
+				'/order/memo/save'
+				, jsonData
+				, function(){
+					fnBindOrderMemo();
+					uifnPopupClose('popupCreateOrderMemo');
+				}
+			);
+		}
+	});
+});
+	
+// 이미지 클릭 시 미리보기 팝업 이벤트
+var fnPreImgView = function(){
+	cfnOpenImagePreViewPopup('preImgView', $('#memoImg').attr('src'));
+}
+
+// 이미지 로드 시 사이즈 변경
+$('#imagePreView').bind('load', function(){
+	var windowWidth = $(window).width() * 0.95;
+	var windowHeight = $(window).height() * 0.95;
+	
+	var width = $('#imagePreView').width();
+	var height = $('#imagePreView').height();
+	
+	if (width > windowWidth) {
+		$('#preImgView >.videoPopup').css('width', windowWidth);
+		$('#imagePreView').css('width', windowWidth);
+		
+	}
+	if (height > windowHeight) {
+		$('#preImgView >.videoPopup').css('height', windowHeight);
+		$('#imagePreView').css('height', windowHeight);
+	}
+});
+	
+$(document).ready(function() {
+	var userText = '';
+	
+	if (mode == 'U') {
+		userText = orderMemo.userNm + ' ('+orderMemo.updId+')';
+		$('#orderMemoRequestFrm input[name=orgFileNm]').val(orderMemo.orgFileNm);
+		$('#orderMemoRequestFrm input[name=sysFileNm]').val(orderMemo.sysFileNm);
+	} else {
+		if (!gagajf.isNull(userId) && !gagajf.isNull(userNm)) {
+			userText = userNm + ' (' + userId + ')';
+		} else {
+			if (gagajf.isNull(userId)) userText = userNm;
+			if (gagajf.isNull(userNm)) userText = userId;
+		}
+	}
+	
+	$('#userId').text(userText);
+
+	// 등록자만 수정 가능하게 처리
+	if (mode == 'U' && userId != orderMemo.updId) {
+		$('#btnOrderMemoRegistOk').css('display', 'none');
+		$('#imageFileTr').css('display', 'none');
+		$('#orderMemoRequestFrm textarea[name=memo]').attr('readonly', true);
+	}
+});
+
+/*]]>*/
+</script>
+
+</html>