관리 메뉴

거니의 velog

4. 관리자 페이지 (1) : 관리자 로그인 본문

대덕인재개발원_1st project

4. 관리자 페이지 (1) : 관리자 로그인

Unlimited00 2023. 8. 19. 11:05

package firstproject.controller;

import java.util.HashMap;
import java.util.Map;

import firstproject.dao.SelectDAO;
import firstproject.service.AdminService;
import firstproject.service.HomeService;
import firstproject.service.MemberOrderService;
import firstproject.service.MemberService;
import firstproject.service.MenuService;
import firstproject.service.SelectService;
import firstproject.util.View;

public class Controller {

	// 세션 정보 객체 생성
	public static Map<String, Object> sessionStorage = new HashMap<String, Object>();
	
	HomeService homeService = HomeService.getInstance();
	MemberService memberService = MemberService.getInstance();
	AdminService adminService = AdminService.getInstance();
	MemberOrderService memberOrderService = MemberOrderService.getInstance();
	
	SelectService selectService = SelectService.getInstance();
	MenuService menuService = MenuService.getInstance();
	SelectDAO selectDAO = SelectDAO.getInstance();
	
	public static void main(String[] args) {
		
		new Controller().start();
		
	}
	
	// 프로그램 시작 메서드
	private void start() {
		// 세션 정보 초기화
		sessionStorage.put("login", false); // 로그인 안 됨.
		sessionStorage.put("loginInfo", null); // 로그인 정보 없음.
		
		int view = View.HOME;
		while(true) {
			switch(view) {
			// 홈
			case View.HOME: view = homeService.home(); break;
			
			// 회원
			case View.MEMBER_LOGIN: view = memberService.login(); break;
			case View.MEMBER_SIGNUP: view = memberService.signUp(); break;
			case View.MEMBER_ID_PW_FIND: view = memberService.find(); break;
			
			// 관리자
			case View.ADMIN_HOME: view = adminService.home(); break;
			case View.ADMIN_MEM_MANAGEMENT: view = adminService.memManage(); break;
			case View.ADMIN_STORE_MANAGEMENT: view = adminService.storeManage(); break;
			case View.ADMIN_MENU_MANAGEMENT: view = adminService.menuManage(); break;
			case View.ADMIN_ORDERHISTORY: view = adminService.orderhistoManage(); break;
			case View.ADMIN_RIDER_MANAGEMENT: view = adminService.riderManage(); break;
			case View.ADMIN_LOGOUT: view = adminService.logout(); break;
			
			// 회원 주문 화면
//			case View.ORDER_HOME: view = memberOrderService.home(); break;
			case View.ORDER_HOME: view = memberOrderService.orderhome(); break;
			case View.ORDER_LOGOUT: view = memberOrderService.logout(); break;
			
			// 배달 프로그램 실행
//			case View.ORDER_TAKEOUT: view = selectService.takeout(); break;
			
			case View.CATEGORY_DELI: view = selectService.category(view); break;
			case View.CATEGORY_TAKE: view = selectService.category(view); break;
			
			case View.CATEGORY_KOREAN: view = selectService.korean(); break;
			case View.CATEGORY_WESTERN: view = selectService.western(); break;
			case View.CATEGORY_CHINESE: view = selectService.chinese(); break;
			case View.CATEGORY_JAPANESE: view = selectService.japanese(); break;
			case View.CATEGORY_DESSERT: view = selectService.dessert(); break;
			
			case View.MENU: view = menuService.storeInfo(); break;
			case View.MENU_DETAIL: view = menuService.menuInfo(); break;
			
			// 회원서비스
			case View.CART: view = menuService.cartInfo(); break;
			case View.POINT: view = memberService.pointDeposit(); break;
			case View.RECEIPT: view = menuService.receipt(); break;
			case View.USERPAGE: view = memberService.userPage(); break;
			
			// 시스템 종료
			case View.SYSTEM_EXIT: System.out.println("프로그램을 종료합니다."); System.exit(0);
			default : System.out.println("다시 입력해주세요."); view = homeService.home(); break;
			}
		}
	}
	
	// 관리자 검증 메서드, 레벨 : 9
	public static boolean isAdmin() {
		Object obj = Controller.sessionStorage.get("loginInfo");
		Map<String, Object> loginInfo = (Map<String, Object>) obj;
		int isAdmin = Integer.parseInt(loginInfo.get("MEMLV").toString());
		if (isAdmin == 9) {
			return true;
		} else {
			return false;
		}
	}
	
	// 일반회원 검증 메서드, 레벨 : 1
	public static boolean isMember() {
		Object obj = Controller.sessionStorage.get("loginInfo");
		Map<String, Object> loginInfo = (Map<String, Object>) obj;
		int isMember = Integer.parseInt(loginInfo.get("MEMLV").toString());
		if (isMember == 1) {
			return true;
		} else {
			return false;
		}
	}

}
package firstproject.service;

import firstproject.util.ScanUtil;
import firstproject.util.View;

public class HomeService {

	private static HomeService instance = null;
	private HomeService() {}
	public static HomeService getInstance() {
		if(instance==null) instance = new HomeService();
		return instance;
	}
	
	String str = "";
	
	// 로그인 전 홈
	public int home() {
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 안방 미식가");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 1. 로그인");
		System.out.println(" 2. 회원가입");
		System.out.println(" 3. ID/PW 찾기");
		System.out.println(" 9. 프로그램 종료");
		System.out.print("입력 >> ");
		int choice = ScanUtil.nextInt();
		switch(choice) {
		case 1 : return View.MEMBER_LOGIN;
		case 2 : return View.MEMBER_SIGNUP;
		case 3 : return View.MEMBER_ID_PW_FIND;
		case 9 : return View.SYSTEM_EXIT;
		default : 
			System.out.println();
			System.out.println("잘못된 접근입니다.");
			System.out.println();
			return View.HOME;
		}
	}
}

package firstproject.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import firstproject.controller.Controller;
import firstproject.dao.MemberDAO;
import firstproject.dao.SelectDAO;
import firstproject.util.EnterUtil;
import firstproject.util.NullCheckUtil;
import firstproject.util.ScanUtil;
import firstproject.util.ValidationUtil;
import firstproject.util.View;

public class MemberService {

	private static MemberService instance = null;
	private MemberService() {}
	public static MemberService getInstance() {
		if (instance == null) instance = new MemberService();
		return instance;
	}

	MemberDAO memberDAO = MemberDAO.getInstance();
	SelectDAO selectDAO = SelectDAO.getInstance();
	ValidationUtil validationUtil = ValidationUtil.getInstance();

	String str = "";

	public int login() {
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println("     로그인 화면");
		System.out.println(" ───────────────────────────────────────────────────");

		System.out.print("   아이디 >> ");
		String memID = ScanUtil.nextLine();
		List<Object> searchId = new ArrayList<>();
		searchId.add(memID);

		System.out.print("   비밀번호 >> ");
		String memPW = ScanUtil.nextLine();
		List<Object> searchPw = new ArrayList<>();
		searchPw.add(memPW);

		Map<String, Object> memberInfoId = memberDAO.loginId(searchId);
		Map<String, Object> memberInfoPw = memberDAO.loginPw(searchPw);

		if (memberInfoId == null) {
			System.out.println(" ※ 일치하는 아이디가 없습니다.");
			EnterUtil.enterNext(1);
			return View.HOME;
		} else if (memberInfoPw == null) {
			System.out.println(" ※ 일치하는 비밀번호가 없습니다.");
			EnterUtil.enterNext(1);
			return View.HOME;
		} else {
			List<Object> param = new ArrayList<>();
			param.add(memID);
			param.add(memPW);
			Map<String, Object> memberInfo = memberDAO.login(param);

			// 로그인한 회원의 세션 정보 집어 넣기
			Controller.sessionStorage.put("login", true);
			Controller.sessionStorage.put("loginInfo", memberInfo);

			if (Controller.isAdmin()) {
//				str = "[관리자]님 환영합니다!";
				System.out.println(" ───────────────────────────────────────────────────");
				str = "   [ " + memberInfo.get("MEMNM").toString() + " ]님 환영합니다!";
				System.out.println(str);
				System.out.println(" ───────────────────────────────────────────────────");
				EnterUtil.enterNext(2);
				return View.ADMIN_HOME;
			} else if (Controller.isMember()) {
				System.out.println(" ───────────────────────────────────────────────────");
				str = "   [ " + memberInfo.get("MEMNM").toString() + " ]님 환영합니다!";
				System.out.println(str);
				System.out.println(" ───────────────────────────────────────────────────");
				EnterUtil.enterNext(2);
				return View.ORDER_HOME;
			}
		}
		return 0;
	}

	// 회원가입 메서드
	public int signUp() {
		String memID = ""; // 회원 아이디
		String memPW = ""; // 회원 비밀번호
		String memNM = ""; // 회원 이름
		String memADD = ""; // 회원 주소
		String memTEL = ""; // 회원 연락처
		long balance = 0; // 잔여금액
		int memLv = 1; // 회원 레벨

		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println("     [회원가입]");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println();

		while (true) {
			System.out.println(" * 아이디 입력 [ 영문ㆍ숫자 필수 / 6글자 이상 입력 ]");
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			memID = ScanUtil.nextLine();
			System.out.println();
			if (ValidationUtil.validationID(memID))
				break;
		}

		while (true) {
			System.out.println(" * 비밀번호 입력 [ 영문ㆍ숫자 필수 / 6글자 이상 입력 ]");
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			memPW = ScanUtil.nextLine();
			System.out.println();
			if (ValidationUtil.validationPW(memPW))
				break;
		}

		while (true) {
			System.out.println(" * 이름 입력 [ 한글 입력 ]");
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			memNM = ScanUtil.nextLine();
			System.out.println();
			if (ValidationUtil.validationName(memNM))
				break;
		}

		while (true) {
			System.out.println(" * 주소 입력 [ 한글ㆍ숫자 입력 ]");
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			memADD = ScanUtil.nextLine();
			System.out.println();
			if (ValidationUtil.validationAddress(memADD))
				break;
		}

		while (true) {
			System.out.println(" * 연락처 입력[ 0XX-XXXX-XXXX 형식으로 입력 ]");
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			memTEL = ScanUtil.nextLine();
			System.out.println();
			if (ValidationUtil.validationTEL(memTEL))
				break;
		}

		while (true) {
			System.out.println(" * 금액을 충전하시겠습니까? (y/n) ");
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			String chargeYN = ScanUtil.nextLine();
			if (chargeYN.equals("y")) {
				System.out.println(" * 금액 입력[ 숫자는 10자리 미만으로 입력 ] ");
				System.out.println(" ───────────────────────────────────────────────────");
				System.out.print(" >> ");
				balance = ScanUtil.nextLong();
				System.out.println();
			} else {
				balance = 0;
			}
			if (ValidationUtil.validationBalance(balance))
				break;
		}

		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" * 입력하신 정보로 회원가입 하시겠습니까? (y/n)");
		System.out.print("   >> ");
		if (ScanUtil.nextLine().equals("y")) {
			Map<String, Object> result = memberDAO.isValID(memID);
			if (result != null) {
				System.out.println(" ※ 이미 등록된 아이디 입니다!");
			} else {
				List<Object> param = new ArrayList<>();
				param.add(memID);
				param.add(memNM);
				param.add(memPW);
				param.add(memADD);
				param.add(memLv);
				param.add(balance);
				param.add(memTEL);
				int isSuccess = memberDAO.signUp(param);
				if (isSuccess > 0) {
					str = "[" + memID + "]님 가입을 환영합니다!";
					System.out.println(str);
				} else
					System.out.println(" ※ 회원가입 실패!");
			}
		} else {
			System.out.println(" * 회원가입을 취소합니다.");
		}

		EnterUtil.enterNext(1);
		return View.HOME;
	}

	// 아이디/비밀번호 찾기 메서드
	public int find() {
		boolean result = false;

		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println("     [ 아이디 / 비밀번호 찾기 ]");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println();
		System.out.println(" 1. 아이디 찾기");
		System.out.println(" 2. 비밀번호 찾기");
		System.out.println(" 0. 이전 메뉴");
		System.out.println();
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.print("   >> ");

		switch (ScanUtil.nextInt()) {
		case 1:
			result = findID();
			break;
		case 2:
			result = findPW();
			break;
		case 0:
			return View.HOME;
		default:
			System.out.println();
			System.out.println(" ※ 잘못된 접근입니다.");
			System.out.println();
			return View.MEMBER_ID_PW_FIND;
		}

		if (result) {
			return View.HOME;
		} else {
			return View.MEMBER_ID_PW_FIND;
		}

	}

	// 아이디 찾기 메서드
	private boolean findID() {
		boolean result = true;
		String userNM = "";
		String userTEL = "";

		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println("     [아이디 찾기]");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println();

		while (true) {
			System.out.println(" * 이름을 입력하세요.");
			System.out.println();
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			userNM = ScanUtil.nextLine();
			if (ValidationUtil.validationName(userNM))
				break;
		}

		while (true) {
			System.out.println(" * 전화번호를 입력하세요.");
			System.out.println();
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			userTEL = ScanUtil.nextLine();
			if (ValidationUtil.validationTEL(userTEL))
				break;
		}

		List<Object> param = new ArrayList<>();
		param.add(userNM);
		param.add(userTEL);
		Map<String, Object> selectMem = memberDAO.findID(param);

		if (selectMem == null) {
			System.out.println(" ※ 입력한 이름과 전화번호를 가진 회원정보가 없습니다.");
			result = false;
		} else {
			str = " 해당 정보로 조회된 아이디는 [" + selectMem.get("MEMID") + "] 입니다.";
			System.out.println(str);
			result = true;
		}

		EnterUtil.enterNext(1);
		return result;
	}

	// 비밀번호 찾기 메서드
	private boolean findPW() {
		boolean result = true;
		String userID = "";
		String userTEL = "";

		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println("     [비밀번호 찾기]");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println();

		while (true) {
			System.out.println(" * 회원 ID를 입력하세요.");
			System.out.println();
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			userID = ScanUtil.nextLine();
			if (ValidationUtil.validationID(userID))
				break;
		}

		while (true) {
			System.out.println(" * 전화번호를 입력하세요.");
			System.out.println();
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print("   >> ");
			userTEL = ScanUtil.nextLine();
			if (ValidationUtil.validationTEL(userTEL))
				break;
		}

		List<Object> param = new ArrayList<>();
		param.add(userID);
		param.add(userTEL);
		Map<String, Object> selectMem = memberDAO.findPW(param);

		if (selectMem == null) {
			System.out.println(" ※ 입력한 회원ID와 전화번호를 가진 회원정보가 없습니다.");
			result = false;
		} else {
			str = " 해당 정보로 조회된 비밀번호는 [" + selectMem.get("MEMPW") + "] 입니다.";
			System.out.println(str);
			result = true;
		}

		EnterUtil.enterNext(1);
		return result;
	}

	// 포인트 충전 서비스 메소드
	public int pointDeposit() {

		Object obj = Controller.sessionStorage.get("loginInfo");
		Map<String, Object> userInfo = (Map<String, Object>) obj;

		String userID = (String) userInfo.get("MEMID");
		String userNM = (String) userInfo.get("MEMNM");
		String userPW = (String) userInfo.get("MEMPW");

		Map<String, Object> balanceOne = selectDAO.BalanceOne(userID);
		BigDecimal balanceBigDecimal = (BigDecimal) balanceOne.get("BALANCE");
		long balance = balanceBigDecimal.longValue();

		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println("     [포인트 충전]");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println("   [" + userID + "]님의 현재 사용가능한 잔고 :");
		System.out.println("    ** " + balance + "원 **");

		while (true) {
			System.out.println(" 1. 충전하기");
			System.out.println(" 2. 뒤로가기");
			System.out.print("   입력  >> ");
			switch (ScanUtil.nextInt()) {
			case 1:
				System.out.println(" 비밀번호를 입력해 인증해주십시오.");
				System.out.print(" 비밀번호 입력 >> ");
				String matchPW = ScanUtil.nextLine();

				if (matchPW.equals(userPW)) {
					System.out.println(" [" + userNM + "]님 감사합니다.");
					System.out.println(" 얼마를 충전하시겠습니까?");
					System.out.print(" 금액 [ 숫자는 10자리 미만으로 입력 ]  >> ");

					long addPoint = ScanUtil.nextLong();

					while (true) {
						if (addPoint > 999999999) {
							System.out.println(" 조건에 맞게 다시 입력하세요.");
							return View.POINT;
						} else {
							System.out.println(" " + addPoint + "원을 충전합니다.");
							balance = balance + addPoint;
							List<Object> param = new ArrayList<>();
							param.add(balance);
							param.add(userID);
							memberDAO.depositPoint(param);
							break;
						}
					}

					System.out.println(" 엔터를 누르면 장바구니로 돌아갑니다.");
					System.out.println(" 장바구니에서 결제를 완료해주세요.");
					EnterUtil.enterNext(2);
					return View.CART;

				} else {
					System.out.println(" ※ 틀린 비밀번호 입니다. 다시 입력해주세요.");
					break;
				}
			case 2:
				return View.ORDER_HOME;

			default:
				System.out.println(" ※ 잘못된 접근입니다. 다시 입력해주세요.");
			}
		}
	}

	// 마이페이지 : 주문내역페이지
	public int userPage() {

		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println("     ** 마이 페이지 **");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println("    ** 주문내역리스트 : **");

		// 로그인된 유저의 정보를 세션으로부터 가져옴 - 그 중에 쿼리를 위한 아이디정보를 뺌
		Object obj = Controller.sessionStorage.get("loginInfo");
		Map<String, Object> userInfo = (Map<String, Object>) obj;
		String userID = (String) userInfo.get("MEMID");

		// 아이디정보를 이용해 주문코드를 가져옴
		List<Map<String, Object>> orderCodeList = memberDAO.orderCodeSearch(userID);
//		System.out.println("orderCodeList : " + orderCodeList);

		// 주문내역 널 오류 처리
		if(NullCheckUtil.isEmpty(orderCodeList)) {
			System.out.println(" ※ 주문하신 내역이 없습니다.");
			System.out.println(" ***************************");
		} else {
			
			// 페이징 기능
			int pageNumber = 1; // 현재 페이지 번호
			int pageSize = 5;  // 페이지당 표시할 데이터 수
			
			int startIndex = (pageNumber - 1) * pageSize; // 시작 인덱스
			int endIndex = Math.min(startIndex + pageSize, orderCodeList.size()); // 끝 인덱스

			int pageRowCnt = orderCodeList.size(); // 로우 개수
			int totalPageSize = pageRowCnt / pageSize; // 총 페이지 개수
			
			if(pageRowCnt % pageSize != 0) { // 다음 페이지까지 로우가 남음
				totalPageSize++;
			}
			
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.println(" 1. 페이지 목록 보기");
			System.out.println(" 2. 주문코드 검색");
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print(" >> ");
			int choice = ScanUtil.nextInt();
			if(choice == 1) { // 페이징 처리
				System.out.println(" ───────────────────────────────────────────────────");
				System.out.println(" 한 페이지에 몇 개의 데이터를 보시겠습니까?");
				System.out.println(" ───────────────────────────────────────────────────");
				System.out.print(" >> ");
				pageSize = ScanUtil.nextInt();
				startIndex = (pageNumber - 1) * pageSize;
				endIndex = Math.min(startIndex + pageSize, orderCodeList.size());
				totalPageSize = pageRowCnt / pageSize; // 총 페이지 개수
				if(pageRowCnt % pageSize != 0) { // 다음 페이지까지 로우가 남음
					totalPageSize++;
				}
				System.out.println(" ──────────────────────────────────────────────────────────────────────────");
				System.out.println(" 총 주문 수 "+ pageRowCnt +" 건  : " + pageNumber + " / " + totalPageSize + " 페이지");
				System.out.println(" ──────────────────────────────────────────────────────────────────────────");
				for(int i = startIndex; i < endIndex; i++) {
					long sum = 0;
					long countSum = 0;
					long countDeilSum = 0;
					// 아이디정보를 이용해 주문내역 테이블 가져옴
					Map<String, Object> orderCode = orderCodeList.get(i);
					List<Map<String, Object>> orderInfoList = memberDAO.orderListStr(userID, String.valueOf(orderCode.get("ORDERCODE")));
					// 주문횟수에 따라 칸마다 나눠 주문정보 보여줌
					System.out.println(" ==========================================================================");
					System.out.println(" 주문코드 : " + orderInfoList.get(0).get("ORDERCODE")); // 날짜형식 지정해 출력하기
					System.out.println(" ──────────────────────────────────────────────────────────────────────────");
					System.out.println(" 주문날짜 : " + orderInfoList.get(0).get("ORDERDATE"));
					System.out.println(" ──────────────────────────────────────────────────────────────────────────");
					for(Map<String, Object> orderItem : orderInfoList) {
						System.out.print(" 메뉴명 : " + orderItem.get("MENUNM") + " | "); // 중복
						System.out.print(" 주문수량 : " + orderItem.get("ORDERQTY") + "개"  + " | "); // 중복
						System.out.println(" 메뉴별 금액 : " + orderItem.get("TOTALPRICE") + "원"); // 중복
						countSum = Long.parseLong(String.valueOf(orderItem.get("TOTALPRICE")));
						sum += countSum;
					}
					if(orderInfoList.get(0).get("DELIORTAKE").equals("deliYN")) {
						countDeilSum = Long.parseLong(String.valueOf(orderInfoList.get(0).get("DELICOST")));
						sum += countDeilSum;
						System.out.println(" 배달비 : " + orderInfoList.get(0).get("DELICOST") + "원");
						System.out.println(" 배달/포장 : 배달");
					}else if(orderInfoList.get(0).get("DELIORTAKE").equals("takeYN")) {
						System.out.println(" 배달/포장 : 포장");
					}
					System.out.println(" ──────────────────────────────────────────────────────────────────────────");
					System.out.println(" 총 금액 : " + sum + "원");
					System.out.println(" 배달예상시간 : " + orderInfoList.get(0).get("ORDERETA") + "분");
					System.out.println(" 주문자명 : " + orderInfoList.get(0).get("MEMNM"));
					System.out.println(" 주문자주소 : " + orderInfoList.get(0).get("MEMADD"));
					System.out.println(" 결제여부 : " + orderInfoList.get(0).get("SELYN"));
					System.out.println(" ==========================================================================");
				}
				while(true) {
					System.out.println(" 1. 원하는 페이지 보기");
					System.out.println(" 0. 이전 화면");
					System.out.println(" ───────────────────────────────────────────────────");
					System.out.print(" >> ");
					int pageListSelect = ScanUtil.nextInt();
					if(pageListSelect == 1) {
						System.out.println(" ───────────────────────────────────────────────────");
						System.out.println(" 몇 페이지를 보시겠습니까?");
						System.out.println(" ───────────────────────────────────────────────────");
						System.out.print(" >> ");
						pageNumber = ScanUtil.nextInt();
						if(pageNumber > totalPageSize || pageNumber <= 0) {
							System.out.println(" ──────────────────────────────────────────────────────────────────────────");
							System.out.println(" 총 주문 수 "+ pageRowCnt +" 건  : " + pageNumber + " / " + totalPageSize + " 페이지");
							System.out.println(" ──────────────────────────────────────────────────────────────────────────");
							System.out.println("해당 페이지는 정보가 없습니다.");
						}else {
							startIndex = (pageNumber - 1) * pageSize;
							endIndex = Math.min(startIndex + pageSize, orderCodeList.size());
							System.out.println(" ──────────────────────────────────────────────────────────────────────────");
							System.out.println(" 총 주문 수 "+ pageRowCnt +" 건  : " + pageNumber + " / " + totalPageSize + " 페이지");
							System.out.println(" ──────────────────────────────────────────────────────────────────────────");
							for(int i = startIndex; i < endIndex; i++) {
								long sum = 0;
								long countSum = 0;
								long countDeilSum = 0;
								// 아이디정보를 이용해 주문내역 테이블 가져옴
								Map<String, Object> orderCode = orderCodeList.get(i);
								List<Map<String, Object>> orderInfoList = memberDAO.orderListStr(userID, String.valueOf(orderCode.get("ORDERCODE")));
								// 주문횟수에 따라 칸마다 나눠 주문정보 보여줌
								System.out.println(" ==========================================================================");
								System.out.println(" 주문코드 : " + orderInfoList.get(0).get("ORDERCODE")); // 날짜형식 지정해 출력하기
								System.out.println(" ──────────────────────────────────────────────────────────────────────────");
								System.out.println(" 주문날짜 : " + orderInfoList.get(0).get("ORDERDATE"));
								System.out.println(" ──────────────────────────────────────────────────────────────────────────");
								for(Map<String, Object> orderItem : orderInfoList) {
									System.out.print(" 메뉴명 : " + orderItem.get("MENUNM") + " | "); // 중복
									System.out.print(" 주문수량 : " + orderItem.get("ORDERQTY") + "개"  + " | "); // 중복
									System.out.println(" 메뉴별 금액 : " + orderItem.get("TOTALPRICE") + "원"); // 중복
									countSum = Long.parseLong(String.valueOf(orderItem.get("TOTALPRICE")));
									sum += countSum;
								}
								if(orderInfoList.get(0).get("DELIORTAKE").equals("deliYN")) {
									countDeilSum = Long.parseLong(String.valueOf(orderInfoList.get(0).get("DELICOST")));
									sum += countDeilSum;
									System.out.println(" 배달비 : " + orderInfoList.get(0).get("DELICOST") + "원");
									System.out.println(" 배달/포장 : 배달");
								}else if(orderInfoList.get(0).get("DELIORTAKE").equals("takeYN")) {
									System.out.println(" 배달/포장 : 포장");
								}
								System.out.println(" ──────────────────────────────────────────────────────────────────────────");
								System.out.println(" 총 금액 : " + sum + "원");
								System.out.println(" 배달예상시간 : " + orderInfoList.get(0).get("ORDERETA") + "분");
								System.out.println(" 주문자명 : " + orderInfoList.get(0).get("MEMNM"));
								System.out.println(" 주문자주소 : " + orderInfoList.get(0).get("MEMADD"));
								System.out.println(" 결제여부 : " + orderInfoList.get(0).get("SELYN"));
								System.out.println(" ==========================================================================");
							}
						}
					}else if(pageListSelect == 0) {
						return View.ORDER_HOME;
					}
				}
			}else if(choice == 2) { // 부분 검색
				System.out.println(" ───────────────────────────────────────────────────");
				for(Map<String, Object> orderCode : orderCodeList) {
					System.out.println(" 주문코드 : " + orderCode.get("ORDERCODE"));
				}
				System.out.println(" ───────────────────────────────────────────────────");
				System.out.print(" 주문코드 입력 >> ");
				String memIDstr = ScanUtil.nextLine();
				for(Map<String, Object> orderCode : orderCodeList) {
					if(memIDstr.equals(orderCode.get("ORDERCODE"))) {
						long sum = 0;
						long countSum = 0;
						long countDeilSum = 0;
						// 아이디정보를 이용해 주문내역 테이블 가져옴
						List<Map<String, Object>> orderInfoList = memberDAO.orderListStr(userID, String.valueOf(orderCode.get("ORDERCODE")));
						// 주문횟수에 따라 칸마다 나눠 주문정보 보여줌
						System.out.println(" ==========================================================================");
						System.out.println(" 주문코드 : " + orderInfoList.get(0).get("ORDERCODE")); // 날짜형식 지정해 출력하기
						System.out.println(" ──────────────────────────────────────────────────────────────────────────");
						System.out.println(" 주문날짜 : " + orderInfoList.get(0).get("ORDERDATE"));
						System.out.println(" ──────────────────────────────────────────────────────────────────────────");
						for(Map<String, Object> orderItem : orderInfoList) {
							System.out.print(" 메뉴명 : " + orderItem.get("MENUNM") + " | "); // 중복
							System.out.print(" 주문수량 : " + orderItem.get("ORDERQTY") + "개"  + " | "); // 중복
							System.out.println(" 메뉴별 금액 : " + orderItem.get("TOTALPRICE") + "원"); // 중복
							countSum = Long.parseLong(String.valueOf(orderItem.get("TOTALPRICE")));
							sum += countSum;
						}
						if(orderInfoList.get(0).get("DELIORTAKE").equals("deliYN")) {
							countDeilSum = Long.parseLong(String.valueOf(orderInfoList.get(0).get("DELICOST")));
							sum += countDeilSum;
							System.out.println(" 배달비 : " + orderInfoList.get(0).get("DELICOST") + "원");
							System.out.println(" 배달/포장 : 배달");
						}else if(orderInfoList.get(0).get("DELIORTAKE").equals("takeYN")) {
							System.out.println(" 배달/포장 : 포장");
						}
						System.out.println(" ──────────────────────────────────────────────────────────────────────────");
						System.out.println(" 총 금액 : " + sum + "원");
						System.out.println(" 배달예상시간 : " + orderInfoList.get(0).get("ORDERETA") + "분");
						System.out.println(" 주문자명 : " + orderInfoList.get(0).get("MEMNM"));
						System.out.println(" 주문자주소 : " + orderInfoList.get(0).get("MEMADD"));
						System.out.println(" 결제여부 : " + orderInfoList.get(0).get("SELYN"));
						System.out.println(" ==========================================================================");
					}
				}
			}
			
//			for(Map<String, Object> orderCode : orderCodeList) {
//				long sum = 0;
//				long countSum = 0;
//				long countDeilSum = 0;
//				// 아이디정보를 이용해 주문내역 테이블 가져옴
//				List<Map<String, Object>> orderInfoList = memberDAO.orderListStr(userID, String.valueOf(orderCode.get("ORDERCODE")));
//				// 주문횟수에 따라 칸마다 나눠 주문정보 보여줌
//				System.out.println(" 주문코드 : " + orderInfoList.get(0).get("ORDERCODE")); // 날짜형식 지정해 출력하기
//				System.out.println("---------------------------------------");
//				System.out.println(" 주문날짜 : " + orderInfoList.get(0).get("ORDERDATE"));
//				System.out.println("---------------------------------------");
//				for(Map<String, Object> orderItem : orderInfoList) {
//					System.out.print(" 메뉴명 : " + orderItem.get("MENUNM") + " | "); // 중복
//					System.out.print(" 주문수량 : " + orderItem.get("ORDERQTY") + "개"  + " | "); // 중복
//					System.out.println(" 메뉴별 금액 : " + orderItem.get("TOTALPRICE") + "원"); // 중복
//					countSum = Long.parseLong(String.valueOf(orderItem.get("TOTALPRICE")));
//					sum += countSum;
//					if(orderItem.get("DELIORTAKE").equals("deliYN")) {
//						System.out.println(" 배달비 : " + orderInfoList.get(0).get("DELICOST") + "원");
//						countDeilSum = Long.parseLong(String.valueOf(orderInfoList.get(0).get("DELICOST")));
//						sum += countDeilSum;
//					}
//				}
//				if(orderInfoList.get(0).get("DELIORTAKE").equals("deliYN")) {
//					System.out.println(" 배달/포장 : 배달");
//				}else if(orderInfoList.get(0).get("DELIORTAKE").equals("takeYN")) {
//					System.out.println(" 배달/포장 : 포장");
//				}
//				System.out.println("---------------------------------------");
//				System.out.println(" 총 금액 : " + sum + "원");
//				System.out.println(" 배달예상시간 : " + orderInfoList.get(0).get("ORDERETA") + "분");
//				System.out.println(" 주문자명 : " + orderInfoList.get(0).get("MEMNM"));
//				System.out.println(" 주문자주소 : " + orderInfoList.get(0).get("MEMADD"));
//				System.out.println(" 결제여부 : " + orderInfoList.get(0).get("SELYN"));
//				System.out.println(" ***************************");
//			}
			
			while (true) {
				System.out.println(" 0. 이전 화면");
				System.out.println(" ───────────────────────────────────────────────────");
				System.out.print(" 입력 >> ");
				switch (ScanUtil.nextInt()) {
				case 0:
					return View.ORDER_HOME;
				default:
					System.out.println(" ※ 잘못된 접근입니다. 다시 입력하세요.");
					break;
				}
			}
		}
		return View.ORDER_HOME;
	}
}

package firstproject.service;

import java.util.Map;

import firstproject.controller.Controller;
import firstproject.util.EnterUtil;
import firstproject.util.GapUtil;
import firstproject.util.ScanUtil;
import firstproject.util.ValidationUtil;
import firstproject.util.View;

public class AdminService {

	private static AdminService instance = null;
	private AdminService() {}
	public static AdminService getInstance() {
		if(instance==null) instance = new AdminService();
		return instance;
	}
	
	AdminReadService adminReadService = AdminReadService.getInstance();
	AdminCreateService adminCreateService = AdminCreateService.getInstance();
	AdminDeleteService adminDeleteService = AdminDeleteService.getInstance();
	AdminUpdateService adminUpdateService = AdminUpdateService.getInstance();
	
	GapUtil gapUtil = GapUtil.getInstance();
	
	// 관리자 홈
	public int home() {
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 관리자 화면");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 1. 회원정보 관리");
		System.out.println(" 2. 가게 리스트 관리");
		System.out.println(" 3. 메뉴 관리");
		System.out.println(" 4. 주문내역 관리");
		System.out.println(" 5. 라이더 관리");
		System.out.println(" 0. 로그아웃");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.print("입력 >> ");
		
		int choice = ScanUtil.nextIntegerLine();
		switch(choice) {
		case 1 : return View.ADMIN_MEM_MANAGEMENT;
		case 2 : return View.ADMIN_STORE_MANAGEMENT;
		case 3 : return View.ADMIN_MENU_MANAGEMENT;
		case 4 : return View.ADMIN_ORDERHISTORY;
		case 5 : return View.ADMIN_RIDER_MANAGEMENT;
		case 0 : return View.ADMIN_LOGOUT;
		default : 
			System.out.println("잘못된 접근입니다.");
			return View.ADMIN_HOME;
		}
	}
	
	// 회원정보 관리 메서드
	public int memManage() {
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 회원정보 관리");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 1. 회원정보 조회");
		System.out.println(" 2. 회원정보 수정");
		System.out.println(" 3. 회원정보 삭제");
		System.out.println(" 0. 이전 메뉴");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.print(" >> ");
		
		switch(ScanUtil.nextIntegerLine()) {
		case 1 : return adminReadService.memRead();
		case 2 : return adminUpdateService.memUpdate();
		case 3 : return adminDeleteService.memDelete();
		case 0 : return View.ADMIN_HOME;
		default : 
			System.out.println();
			System.out.println(" * 잘못된 접근입니다.");
			System.out.println();
			return View.ADMIN_MEM_MANAGEMENT;
		}
	}
	
	// 가게 리스트 관리 메서드
	public int storeManage() {
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 가게 리스트 관리");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 1. 가게 리스트 등록");
		System.out.println(" 2. 가게 리스트 조회");
		System.out.println(" 3. 가게 리스트 수정");
		System.out.println(" 4. 가게 리스트 삭제");
		System.out.println(" 0. 이전 메뉴");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.print(" >> ");
		
		switch(ScanUtil.nextIntegerLine()) {
		case 1 : return adminCreateService.storeCreate();
		case 2 : return adminReadService.storeRead();
		case 3 : return adminUpdateService.storeUpdate();
		case 4 : return adminDeleteService.storeDelete();
		case 0 : return View.ADMIN_HOME;
		default : 
			System.out.println();
			System.out.println(" * 잘못된 접근입니다.");
			System.out.println();
			return View.ADMIN_STORE_MANAGEMENT;
		}
	}
	
	// 메뉴 관리
	public int menuManage() {
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 메뉴 관리");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 1. 메뉴 등록");
		System.out.println(" 2. 메뉴 조회");
		System.out.println(" 3. 메뉴 수정");
		System.out.println(" 4. 메뉴 삭제");
		System.out.println(" 0. 이전 메뉴");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.print(" >> ");
		
		switch(ScanUtil.nextIntegerLine()) {
		case 1 : return adminCreateService.menuCreate();
		case 2 : return adminReadService.menuRead();
		case 3 : return adminUpdateService.menuUpdate();
		case 4 : return adminDeleteService.menuDelete();
		case 0 : return View.ADMIN_HOME;
		default : 
			System.out.println();
			System.out.println(" * 잘못된 접근입니다.");
			System.out.println();
			return View.ADMIN_MENU_MANAGEMENT;
		}
	}
	
	// 주문내역 관리
	public int orderhistoManage() {
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 주문내역 관리");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 1. 주문내역 조회");
		System.out.println(" 0. 이전 메뉴");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.print(" >> ");
		
		switch(ScanUtil.nextIntegerLine()) {
		case 1 : return adminReadService.orderhistoRead();
		case 0 : return View.ADMIN_HOME;
		default : 
			System.out.println();
			System.out.println(" * 잘못된 접근입니다.");
			System.out.println();
			return View.ADMIN_ORDERHISTORY;
		}
	}
	
	// 라이더 관리
	public int riderManage() {
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 라이더 관리");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.println(" 1. 라이더 등록");
		System.out.println(" 2. 라이더 조회");
		System.out.println(" 3. 라이더 수정");
		System.out.println(" 4. 라이더 삭제");
		System.out.println(" 0. 이전 메뉴");
		System.out.println(" ───────────────────────────────────────────────────");
		System.out.print(" >> ");
		
		switch(ScanUtil.nextIntegerLine()) {
		case 1 : return adminCreateService.riderCreate();
		case 2 : return adminReadService.riderRead();
		case 3 : return adminUpdateService.riderUpdate();
		case 4 : return adminDeleteService.riderDelete();
		case 0 : return View.ADMIN_HOME;
		default : 
			System.out.println();
			System.out.println(" * 잘못된 접근입니다.");
			System.out.println();
			return View.ADMIN_RIDER_MANAGEMENT;
		}
	}
	
	// 관리자 로그아웃
	public int logout() {
		String choice = "";
		
		while(true) {
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.println(" 로그아웃");
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.println();
			System.out.println(" * 로그아웃 하시겠습니까? ( y / n )");
			System.out.println();
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.print(" >> ");
			choice = ScanUtil.nextLine();
			System.out.println(" ───────────────────────────────────────────────────");
			if(ValidationUtil.validationYN(choice)) break;
		}
		
		if(choice.equals("y")) {
			Object loginInfoObj = Controller.sessionStorage.get("loginInfo");
			Map<String, Object> loginInfo = (Map<String, Object>) loginInfoObj;
			System.out.println("");
			System.out.println("  [ " + loginInfo.get("MEMNM") + " ] 님 로그아웃 되었습니다.");
			System.out.println("");
			System.out.println(" ───────────────────────────────────────────────────");
			System.out.println("");
			System.out.println(" << 이용해 주셔서 감사합니다 >> ");
			System.out.println();
			EnterUtil.enterNext(1);
			
			// 세션 초기화
//			System.out.println(Controller.sessionStorage.toString());
			Controller.sessionStorage.put("login", null);
//			Controller.sessionStorage.remove("login");
			Controller.sessionStorage.put("loginInfo", null);
//			Controller.sessionStorage.remove("loginInfo");
//			System.out.println(Controller.sessionStorage.toString());
			
			return View.HOME;
		}else if(choice.equals("n")) {
			System.out.println(" * 관리자 화면으로 돌아갑니다.");
			return View.ADMIN_HOME;
		}else {
			System.out.println(" >> 올바른 입력이 아닙니다. 다시 입력하세요.");
			return View.ADMIN_LOGOUT;
		}
	}
	
}