Skip to content

2206PublicDataWebApp2211/Mobiil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

209 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Mobiil

KH정보교육원 빌려조 Final Project

고종규, 김다현, 정슬기, 최혜진

문서: 2022.10.05. ~ 2022.10.14.

개발: 2022.10.17. ~ 2022.11.14.

Purpose

  • 모빌은 모이고(MO) 빌리다(BIL)의 합성어입니다

    현재 서비스되는 웹 혹은 앱은 모임 형성이나 공간 대여에 충실하고 있습니다. 하지만 바쁜 현대인으로 살아가면서 매번 꾸준히 모임 활동을 유지하거나 매번 새로운 공간을 찾는 것은 쉽지 않은 일입니다. Mobiil은 '음악'이라는 취미 생활을 통해 내가 원하는 사람과, 내가 원하는 장소에서 만날 수 있도록 '사람'과 '사람', '사람'과 '공간'을 연결하는 서비스를 제공하고자 합니다.

  • 회원 관계도

Features

  • AJAX 실시간 채팅
  • Chart.js 차트 구현
  • SummerNote 게시판 적용
  • mailsender 메일 발송 및 임시 비밀번호 발급
  • 카카오 MAP API 적용
  • I'mport API 적용 및 결제
  • CoolSMS 결제 완료 문자 전송
  • fullcalendar API 적용 예약 및 일정 관리
  • 카카오 소셜로그인 API
  • 결제가 완료된 금액 정산 조회

Role

이름을 클릭해 보세요!
고종규


  • 예약 일정 확인
bandicam.2022-11-16.17-04-20-249.mp4
- 해당 호스트가 등록한 공간을 예약한 예약자 정보를 불러와서 예약한 일자에 보여준다.

  • 기간별 판매 금액 확인
bandicam.2022-11-16.17-06-08-866.mp4
- 조회하고싶은 기간을 선택하게되면 예약 리스트를 보여주고, 그 기간내의 총 판매금액을 보여준다.

<!-- 정산 확인 총 금액  -->
  <select id="priceSumByHostemail" resultType="_int">
  	SELECT SUM((REV_END-REV_START)*PRICE) AS PRICE
  	FROM RESERVATION_TBL
  	WHERE RESERV_DATE BETWEEN  #{date1} AND #{date2} AND HOST_EMAIL = #{hostEmail}
  </select>

  • 월별 데이터 현황
bandicam.2022-11-16.17-08-40-474.mp4
- 해당 호스트의 월별 예약 현황, 월별 공간 갯수, 월별 판매 금액을 차트로 보여준다.

/**
 * 월별 예약 건수
 * @param request
 * @return
 */
@ResponseBody
@RequestMapping(value="/host/drawspaceChart.kh", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public String drawspaceChart(HttpServletRequest request) {
	Gson gson = new Gson();
	
	HttpSession session = request.getSession();
	Host host = (Host) session.getAttribute("loginHost");
	String hostEmail = host.getHostEmail();
	
	List<Reservation> result = hService.getRegervationCountByMonth(hostEmail);
	JSONObject obj = new JSONObject();
	obj.put("result", result);
	JSONArray arr = new JSONArray();
	arr.add(obj);
	return gson.toJson(arr);
}

/**
 * 월별 공간 등록수
 * @param request
 * @return
 */
@ResponseBody
@RequestMapping(value="/host/spaceChart.kh", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public String drawspaceChart2(HttpServletRequest request) {
	Gson gson = new Gson();
	
	HttpSession session = request.getSession();
	Host host = (Host)session.getAttribute("loginHost");
	String hostEmail = host.getHostEmail();
	
	List<Space> result = hService.getSpaceCountByMonth(hostEmail);
	
	JSONObject obj = new JSONObject();
	obj.put("result", result);
	
	JSONArray arr = new JSONArray();
	arr.add(obj);
	
	return gson.toJson(arr);
}

/**
 * 월별 판매금액
 * @param request
 * @return
 */
@ResponseBody
@RequestMapping(value="/host/profitChart.kh", method = RequestMethod.GET, produces="application/json;charset=utf-8")
public String drawProfitChart(HttpServletRequest request) {
	
	Gson gson = new Gson();
	
	HttpSession session = request.getSession();
	Host host = (Host)session.getAttribute("loginHost");
	String hostEmail = host.getHostEmail();
	
	List<Reservation> result = hService.getProfitByMonth(hostEmail);
	
	JSONObject obj = new JSONObject();
	obj.put("result", result);
	
	JSONArray arr = new JSONArray();
	arr.add(obj);
	
	return gson.toJson(arr);
}

 <!-- 월별 예약 건수  -->
 <select id="getRegervationCountByMonth" resultType="map">
	SELECT TO_CHAR(A.RESERV_DATE, 'YYYY-MM') as RESERV_DATE, COUNT(B.RESERV_DATE) as RevCount
    FROM MONTH_TBL A
    LEFT OUTER JOIN RESERVATION_TBL B ON (TO_CHAR(A.RESERV_DATE,'YYYY-MM') = TO_CHAR( B.RESERV_DATE, 'YYYY-MM'))
    AND B.RESERV_STATUS = 'Y' AND B.HOST_EMAIL = #{hostEmail}
    GROUP BY TO_CHAR(A.RESERV_DATE, 'YYYY-MM')
    ORDER BY RESERV_DATE
 </select>
   	 
 <!-- 월별 공간수 -->
 <select id="getSpaceCountByMonth" resultType="map">
 	SELECT TO_CHAR(A.RESERV_DATE, 'YYYY-MM') AS RESERV_DATE, COUNT(B.SPACE_NO) as SpaCount
    FROM MONTH_TBL A
    LEFT OUTER JOIN SPACE_TBL B ON (TO_CHAR(A.RESERV_DATE,'YYYY-MM') = TO_CHAR(B.APPROVAL_DATE, 'YYYY-MM'))
    AND B.SPACE_STATUS = 'Y' AND B.HOST_EMAIL = #{hostEmail}
    GROUP BY TO_CHAR(A.RESERV_DATE, 'YYYY-MM')
    ORDER BY RESERV_DATE
 </select>
 
 <!-- 월별 판매금액 -->
 <select id="getProfitByMonth" resultType="map">
 	SELECT TO_CHAR(A.RESERV_DATE, 'YYYY-MM') AS RESERV_DATE, SUM(FLOOR(B.REV_END-B.REV_START)*B.PRICE) as PRICE
    FROM MONTH_TBL A
    LEFT OUTER JOIN RESERVATION_TBL B ON (TO_CHAR(A.RESERV_DATE,'YYYY-MM') = TO_CHAR(B.RESERV_DATE, 'YYYY-MM'))
    AND B.RESERV_STATUS = 'Y' AND B.HOST_EMAIL = #{hostEmail}
    GROUP BY TO_CHAR(A.RESERV_DATE, 'YYYY-MM')
    ORDER BY RESERV_DATE, 'YYYY-MM'
 </select>

  • 기타 기능
  1. 호스트 정보 조회 및 정보 수정
  2. 공간 CRUD
  3. 예약 CRUD

김다현

* 공간 리스트

default.mp4
    - 지역별 조회(공간 승인 날짜 내림차순 정렬), 지역+공간 이름 검색, 가격 검색
        ,최신순 정렬, 리뷰 많은순 정렬, 찜 많은순 정렬 가능
    - 지역/가격/검색 + 최신순,찜많은순,리뷰많은순 정렬 가능

* 공간 상세페이지

상세조회

    - 공간 이름, 공간 소개 내용, 찜 여부를 나타내는 하트, 결제를 위한 fullcalendar와 시 선택 셀렉트박스,
        리뷰(비로그인, 개인 회원은 답글보기 버튼이 나타나지 않음), 호스트 댓글 조회

* 찜 기능 / 결제 및 예약

-.Clipchamp.mp4
    - 로그인 한 개인 회원의 이메일을 이용해 aJax로 DB에 저장된 정보를 비교하여 찜 여부를 int로 받아
       존재하면 빨간 하트가 되고, 존재하지 않으면 빈 하트가 표시된다.
    - 아임포트 API를 이용해 결제를 하고, 결제가 완료되면 예약 정보를 DB에 저장하여
       예약 완료 페이지에서 정보를 확인할 수 있다.
    - 예약이 완료 되면 coolSMS API를 이용해 문자가 전송된다. ↓

화면 캡처 2022-11-16 172532

* 호스트 답글

호스트댓글

    - 상세 페이지에서 로그인 한 호스트의 이메일과 공간을 등록한 호스트 이메일을 비교하여
       같은 이메일이면 답글달기 버튼이 나타나 답글을 등록할 수 있다.
    - 답글은 수정과 삭제가 가능하며, replace 처리를 통해 개행이 가능하다.
정슬기
파트너

final_partner_CRUD

-  파트너 정보 CRUD 및 검색
final_admin_mail.mp4

-  파트너 승인 및 메일 발송
if(!member.getMemberNick().equals(originNick)) {

  // 파트너 기존 정보 삭제
  Partner originPartner = pService.findByEmail(member.getMemberEmail());
  if(originPartner != null) {
   pService.deletePartner(originPartner.getPartnerNo());
  }
  
  // 기존 채팅방 삭제
  List<ChatRoom> cList = cService.listByMemberNick(originNick);
  for(int i = 0; i < cList.size(); i++) {
   cService.disableRoom(cList.get(i).getRoomNo());
  }
}
- 파트너 닉네임 변경 시 기존 파트너 정보 및 채팅방 삭제
Ajax 실시간 채팅
default.mp4
-  기존 채팅로그 열람
-  안읽은 메세지 카운트
-  공간 검색 및 공유
function openChatRoom(createUser, withUser) {
	if(confirm("채팅을 시작하시겠습니까?")){
		$.ajax({
			url:"/chat/createChatRoom.kh",
			tyep: "get",
			data: {createUser: createUser,
					withUser:withUser},
			success:
				function(data) {
					if(data == "already"){
						alert("이미 생성된 채팅방입니다");
						window.open('/chat/chatWindow.kh?memberNick='+createUser+'', 'window', 'width=500, height=700, menubar=no, status=no, toolbar=no');
					}else if(data == "success"){
						alert("채팅이 시작됩니다.");
						window.open('/chat/chatWindow.kh?memberNick='+createUser+'', 'window', 'width=500, height=700, menubar=no, status=no, toolbar=no');
					}else if(data == "needRegist"){
						alert("파트너만 서비스 이용이 가능합니다");
					}else if(data == "needApproval"){
						alert("파트너 승인이 필요합니다")
					}else{
						alert("채팅방 생성 실패")
					}
				},
			error:
				function() {
					alert("에러")
				},
		})
	}
-  채팅방 중복 생성 방지, 회원별 채팅 권한 제한
default.mp4

image

-  오라클 JOB 객체 및 스케줄러를 이용한 채팅방 영구 삭제 
default.mp4
-  상대방 프로필 사진 노출 마우스오버 이벤트
기타
2.mp4
 - 회원 및 공간 정보 현황 대시보드
 - chart.js 및 카카오 map API 사용
 - 5분에 한 번 갱신해 실시간 현황 반영

image

 - 배너 CRUD 
 - 배너 수정 시 배너 이미지와 내용을 분리하여 수정
final_calendar_CRUD.mp4

final_calendar_service

 - 일정 달력 CRUD
최혜진
     > 회원가입 및 로그인
 
       * 일반/기업회원 가입 및 로그인
image image image
            - 회원가입 시 유효성 체크와 이메일과 닉네임 중복방지
image
            - 이메일로 인증번호를 받아 입력 후 회원가입
image
       * 비밀번호 찾기
            - 일반회원/ 기업회원이 비밀번호를 잊었을 경우, 가입했던 이메일을 입력하고 인증번호를 받아 입력하면 비밀번호 변경 페이지로 이동
            - 비밀번호를 변경 후 변경된 비밀번호로 로그인 가능
image image image
       * 카카오 회원가입 및 로그인
            - 카카오 계정 아이디와 비밀번호 입력 후 서비스 동의를 체크하면 가입 완료
            - 카카오 가입 후 닉네임을 변경해야 서비스 이용이 가능, 닉네임 변경 후 재로그인하면 일반 회원과 같이 서비스 이용이 가능
image
     > 마이페이지 및 리뷰
       * 정보조회 및 수정
            - 회원이 본인의 정보를 조회 및 수정 가능
image
       * 내가 찜한 공간 조회
            - 찜한 공간 조회, 공간 상세페이지로 이동 가능
image
       * 결제내역 목록, 상세조회
            - 회원이 결제한 목록을 조회할 수 있고 공간명을 누르면 공간 상세 페이지로 이동 가능
            - 예약 번호를 누르면 결제 상세 정보 조회 가능
image
       * 리뷰 작성 및 수정
   	- 결제내역 목록 페이지에서 리뷰 작성, 조회가 가능하고 조회 페이지에서 리뷰 수정 삭제와 공간페이지의 리뷰 조회 가능
image

Tech











About

빌려조 - 파이널 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors