상세 컨텐츠

본문 제목

2023.03.13

Spring

by 연을 2023. 3. 13. 17:34

본문

728x90

<Cafe> db연결해서 값 넣기

<코드>

[Cafecontroller]

package com.human.springboot;

import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import jakarta.servlet.http.HttpServletRequest;

@Controller
public class Cafecontroller {
	
	@Autowired
	private IDAO idao;
	

	@GetMapping("/menu")
	public String cafe() {
		return "cafe";
	}
	@PostMapping("/menu_select")
	@ResponseBody
	public String doSelect() {
		ArrayList<CafeDTO> cdto=idao.menu_select();
		
		JSONArray ja=new JSONArray();
		for(int i=0;i<cdto.size();i++) {
			JSONObject jo = new JSONObject();
			CafeDTO co=new CafeDTO();
			co=cdto.get(i);
			jo.put("s_no", co.getS_no());
			jo.put("name", co.getName());
			jo.put("price", co.getPrice());
			
			ja.put(jo);
		}
		return ja.toString();
	}
	@PostMapping("/menu_insert")
	@ResponseBody
	public String doInsert(HttpServletRequest req) {
		String retval="ok";
		try {
			String name=req.getParameter("name");
			int price=Integer.parseInt(req.getParameter("price"));
			idao.menu_insert(name,price);
		}catch(Exception e) {
			retval="fail";
		}
		return retval;
	}
	@PostMapping("/menu_delete")
	@ResponseBody
	public String doDeletet(HttpServletRequest req) {
		String retval="ok";
		try {
			int s_no=Integer.parseInt(req.getParameter("s_no"));
			idao.menu_delete(s_no);
		} catch(Exception e) {
			retval= "fail";
		}
		return retval;
		
	}
	@PostMapping("/menu_update")
	@ResponseBody
	public String doUpdate(HttpServletRequest req) {
		String retval="ok";
		try {
			int s_no=Integer.parseInt(req.getParameter("s_no"));
			String name=req.getParameter("name");
			int price=Integer.parseInt(req.getParameter("price"));
			idao.menu_update(name,price,s_no);
		} catch(Exception e) {
			retval= "fail";
		}
		return retval;
	}
	@PostMapping("/order_select")
	@ResponseBody
	public String doOrderSelect() {
		ArrayList<HistoryDTO> hdto=idao.order_select();
		JSONArray ja=new JSONArray();
		for(int i=0;i<hdto.size();i++) {
			JSONObject jo = new JSONObject();
			HistoryDTO ho=new HistoryDTO();
			ho=hdto.get(i);
			
			jo.put("name",ho.getName());
			jo.put("qty", ho.getQty());
			jo.put("price",ho.getPrice());
			jo.put("mobile", ho.getMobile());
			jo.put("created", ho.getCreated());
			
			ja.put(jo);
		}
		System.out.println(ja);
		return ja.toString();
	}
	@PostMapping("/order_insert")
	@ResponseBody
	public String doOrder(HttpServletRequest req) {
		String reval="ok";
		try {
			String name=req.getParameter("name");
			int qty=Integer.parseInt(req.getParameter("qty"));
			int price=Integer.parseInt(req.getParameter("price"));
			String mobile=req.getParameter("mobile");
			String time=req.getParameter("time");
			System.out.println(name);
			System.out.println(qty);
			System.out.println(price);
			System.out.println(mobile);
			System.out.println(time);
			
			idao.order_insert(name,price,qty,mobile,time);
		}catch(Exception e) {
			reval="fail";
		}
		return reval;
	}
}

[CafeDTO]

package com.human.springboot;

import lombok.Data;

@Data
public class CafeDTO {
	int s_no;
	String name;
	int price;
}

[HistoryDTO]

package com.human.springboot;

import lombok.Data;

@Data
public class HistoryDTO {
	 int seqno;
	String created;
	String mobile;
	String name;
	int qty;
	int price;
}

[IDAO]

package com.human.springboot;

import java.util.ArrayList;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface IDAO {
	ArrayList<CafeDTO> menu_select();
	void menu_insert(String x1, int x2);
	void menu_delete(int x1);
	void menu_update(String x1,int x2,int x3);
	
	
	ArrayList<HistoryDTO> order_select();
	void order_insert(String x1,int x2, int x3,String x4,String x5);
	
}

[cafe.xml]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.human.springboot.IDAO">
	<select id="menu_select" resultType="com.human.springboot.CafeDTO">
		select s_no,name,price from menu order by s_no asc
	</select>
	<insert id="menu_insert">
		insert into menu(s_no,name,price) values(snoseq.nextval,#{param1},#{param2})
	</insert>
	<delete id="menu_delete">
		delete from menu where s_no=#{param1}
	</delete>
	<update id="menu_update">
		update menu set name=#{param1}, price=#{param2} where s_no=#{param3}
	</update>
	
	<select id="order_select" resultType="com.human.springboot.HistoryDTO">
		select seqno,name,pirce,qty,mobile,created from history order by seqno asc
	</select>
	<insert id="order_insert">
		insert into history(seqno,name,price,qty,mobile,created) values(his_seq.nextval,#{param1},#{param2},#{param3},#{param4},#{param5})
	</insert>
</mapper>

[cafe.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="http://code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css">
<title>카페관리</title>
</head>
<style>
    body{
        font-size: 18px;
        color: chocolate;
    }
    select{
        width: 240px; font-size: 20px;
    }
    input,button{
        font-size: 20px;
        color: darkslategray;
    }
    .line{
        border: 1px solid black;
    }
    #tbl1{
        width: 860px;border-collapse: collapse; 
    }
    #tbl1:first-child{
        text-align: center;background-color: bisque;color:darkslategray;
    }
    #tbl1:nth-child(2)
</style>
<body>
    <table id=tbl1 align=center>
        <tr  id=tr1>
            <td colspan="3"><h1>카페관리</h1></td>
        </tr>
        <tr>
            <td valign="top" align="center" class="line" style="background-color:cornsilk;">
                <table>
                <tr>
                    <td colspan="2" style="text-align: center;"><h3>메뉴목록</h3></td></tr>
                <tr>
                    <td colspan="2">
                    <select size="14" id=menulist>
                    </select><br>
                    </td>
                </tr>
                <tr>
                    <td>메뉴명</td><td><input type=text id=name name=name size="12"></td>
                </tr>
                <tr>
                    <td>수량</td><td><input type=number id=qty name=qty style="width: 120px">잔</td>
                </tr>
                <tr>
                    <td>가격</td><td><input type=number id=price name=price style="width: 120px">원</td>
                </tr>
                <tr>
                    <td><button id=btnSelect>주문</button></td>
                    <td align="right"><button id=btnReset>지우기</button></td>
                </tr>
                <tr><td colspan=2 align="center"><button id="btnmenu">메뉴관리</button></td></tr>
                </table>
            </td>
            <td valign="top" align="center" class="line" style="background-color:rgb(252, 239, 223);">
                <table style="width:300px">
                <tr>
                    <td colspan="2" style="text-align: center;"><h3>주문내역</h3></td></tr>
                    <tr>
                        <td colspan="2">
                            <select size="15" id=orderlist style='width:300px'>
                            </select>
                        </td>
                    </tr>
                <tr>
                    <td>주문금액</td><td><input type="number" id=sum style="width: 120px;">원</td>
                </tr>
                <tr>
                    <td>모바일번호</td><td><input type="text" id="mobile" name="mobile" style="width: 120px;"></td>
                </tr>
                <tr><td>&nbsp;</td></tr>
                <tr>
                    <td><button id="btnOrder">주문완료</button></td>
                    <td align="right"><button id="btnCancel">취소</button></td>
                </tr>
                </table>
            </td>
            <td valign="top" align="center" class="line" style="background-color: cornsilk;">
                <table>
                <tr>
                    <td colspan="2" style="text-align: center;"><h3>매출내역</h3></td>
                </tr>
                <tr>
                    <td>
                        <select size="20" id="sales" style="width:400px">
                        </select>
                    </td>
                </tr>
                <tr><td colspan=2>매출총액 : <input type=number id="total" style="width:100px">원</td>
                <tr>
                    <td align="center"><button id="btnRefresh">새로고침</button></td>
                </tr>
                </table>
            </td>
        </tr>
        <tr style="height: 150px;background-color: darksalmon;">
            <td style="vertical-align:top;color: brown;">
                Created by Giga Coffe
            </td>
            <td colspan="3" style="text-align:right;vertical-align:bottom;color: brown;">
                Designed by Hwang
            </td>
        </tr>
    </table>
    <div id="menuDlg" style="display:none;">
    	<table id=tblMenu style="width: 100%; border-collapse: collapse;">
		<tr><th>일련번호</th><th>메뉴명</th><th>가격</th></tr>
		</table><br>
		<table>
		<tr><td>메뉴명</td><td><input type=text id=name1>
							<input type=hidden id=s_no1></td></tr>
		<tr><td>가격</td><td><input type=number id=price1></td></tr>
		<tr><td colspan=2 align=center>
			<button id=btnAdd>등록</button>
			<button id=btnEmpty>비우기</button>
			<button id=delete>삭제</button></td></tr>
		</table>
    </div>
</body>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
<script>
let sum=0;
let sum2=0;
$(document)
.ready(function(){
	loadData();
	loadData2();
})
.on('click','#btnmenu',function(){
	$('#menuDlg').dialog({
		title:'메뉴관리',
		modal:true,
		width:500,
		beforeClose:function(){
			$('#btnEmpty').trigger("click");
			$('select option').remove();
			loadData();
        }
		
	})
})
.on('click','#btnEmpty',function(){
	$('#name1,#price1,#s_no1').val('');
	return false;
})
.on('click','#menulist option:selected',function(){
	str=$('#menulist option:selected').text();
	ar=str.split(', ');
    ar[1]=ar[1].trim();
    $('#name').val(ar[0]);
    $('#price').val(ar[1]);
    $('#qty').val(1);
})
.on('change','#qty',function(){
	$('#price').val(ar[1]*$('#qty').val());
})
.on('click','#btnAdd',function(){
	if($('#s_no1').val()==''){
		$.ajax({url:'/menu_insert',type:'post',
			data:{name:$('#name1').val(),price:$('#price1').val()},dataType:'text',
			beforeSend:function(){
				let name1=$.trim($('#name1').val());
				if(name1==''||name==null){
					alert('메뉴명을 입력하시오');
					return false;
				}
				if($('#price1').val()==''){
					alert('가격을 입력하시오');
					return false;
				}
			},
			success:function(data){
				if(data=="ok"){
					loadData2();
					$('#btnEmpty').trigger("click");
				} else{
					alert("insert 실패");
				}
			}
		})
	} else {
		$.ajax({url:'/menu_update',type:'post',
			data:{name:$('#name1').val(),price:$('#price1').val(),s_no:$('#s_no1').val()},dataType:'text',
			beforeSend:function(){
				let s_no=$.trim($('#s_no1').val());
				if(s_no==''||s_no==null){
					alert('메뉴를 선택하세요');
					return false;
				}
			},
			success:function(data){
				if(data=="ok"){
					loadData2();
					$('#btnEmpty').trigger("click");
				} else{
					alert("update 실패");
				}
			}
		})
	}
})
.on('click','#tblMenu tr',function(){
	let s_no=$(this).find('td:eq(0)').text();
	$('#s_no1').val(s_no);
	let name=$(this).find('td:eq(1)').text();
	$('#name1').val(name);
	let price=$(this).find('td:eq(2)').text();
	$('#price1').val(price);
	return false;
})
.on('click','#delete',function(){
	$.ajax({url:'/menu_delete',type:'post',
		data:{s_no:$('#s_no1').val()},dataType:'text',
		beforeSend:function(){
			let s_no=$.trim($('#s_no1').val());
			if(s_no==''||s_no==null){
				alert('메뉴를 선택하세요');
				return false;
			}
		},
		success:function(data){
			if(data=="ok"){
				loadData2();
				$('#btnEmpty').trigger("click");
			} else{
				alert("delete 실패");
			}
		}
	})
})
.on('click','#btnReset',function(){
	$('#name,#price,#s_no,#qty').val('');
	return false;
})
.on('click','#btnSelect',function(){
	let name=$('#name').val();
	let qty=$('#qty').val();
	let price=$('#price').val();
	
	let str='<option>'+name+' ,'+qty+' ,'+price+'</option>';
	$('#orderlist').append(str);
	$('#btnReset').trigger('click');
	
	
	str1=$('#orderlist option:last').val();
	arr=str.split(' ,');
	arr[2]=arr[2].trim();
	str2=parseInt(arr[2]);
	sum=sum+str2;
	
	$('#sum').val(sum);
    $('#mobile').val('-');
})
.on('click','#btnCancel',function(){
	$('#orderlist option').remove();
	sum=0;
	$('#sum').val(sum);
	$('#moblie').val('-');
})
.on('click','#btnOrder',function(){
	if($('#sum').val()==''){
		return false;
	}
	
	let today=new Date();
	year=today.getFullYear()+'년';
	month=('0' + (today.getMonth() + 1)).slice(-2)+'월';
	day = ('0' + today.getDate()).slice(-2)+'일';
	hours = ('0' + today.getHours()).slice(-2)+':'; 
	minutes = ('0' + today.getMinutes()).slice(-2)+':';
	seconds = ('0' + today.getSeconds()).slice(-2);
	
	nowdate = year+month+day+hours+minutes+seconds;
	console.log(nowdate);
	to='주문금액'+$('#sum').val()+'원';
	number=$('#mobile').val();
	str='<option>'+nowdate+', '+$('#sum').val()+'원, '+number+'</option>'
	$('#sales').append(str);
	
	
	sumtotal=$('#sales option:last').val();
	ar=sumtotal.split(',');
	console.log(ar);
	console.log(ar[1]);
	str7=parseInt(ar[1]);
	console.log(str7);
	sum2=sum2+str7;
	console.log('합계 : '+sum2);
	$('#total').val(sum2);
	
	$('#sum').val('');
    $('#mobile').val('');
	
    //total=0;
	
    optionConut=$('#orderlist option').length;
    console.log(optionConut);
    
    for(i=0;i<$('#orderlist option').length;i++){
    	menuString=$("#orderlist option").eq(i).text();
    	menuInfo=menuString.trim().split(',');
    	menuName=menuInfo[0];
    	menuQty=parseInt(menuInfo[1]);
    	menuPrice=parseInt(menuInfo[2]);

    	$.ajax({url:'/order_insert',type:'post',
    		data:{name:menuName,price:menuPrice,qty:menuQty,mobile:number,time:nowdate},dataType:'text',
    		beforeSend:function(){
    			let name=menuName;
    			if(name==''||name==null){
    				alert('주문내역이 없습니다. 주문을 입력하세요');
    				return false;
    			}
    		}, success:function(data){
    			if(data=="ok"){
    				console.log("됐다다다ㅏ");
    			}else{
    				alert("insert 실패");
    			}
    		}
    		})
    	
    }
    $('#btnCancel').trigger('click');
    
})


function loadData(){
	$.ajax({url:'/menu_select',type:'post',dataType:'json',data:{},
		success:function(data){
			$('#menulist tr:gt(0)').remove();
			for(let i=0;i<data.length;i++){
				let menu = data[i];
				let str='<option>';
				//str+='<td>'+menu['s_no']+'</td>';
				str+='<td>'+menu['name']+', '+'</td>';
				str+='<td>'+menu['price']+'</td></option>';
				
				$('#menulist').append(str);
			}
		}})
}

function loadData2(){
	$.ajax({url:'/menu_select',type:'post',dataType:'json',data:{},
		success:function(data){
			$('#tblMenu tr:gt(0)').remove();
			for(let i=0;i<data.length;i++){
				let menu = data[i];
				let str='<tr>';
				str+='<td>'+menu['s_no']+'</td>';
				str+='<td>'+menu['name']+'</td>';
				str+='<td>'+menu['price']+'</td></tr>';
				
				$('#tblMenu').append(str);
			}
		}})
}
</script>
</html>

<결과>

/menu 화면
메뉴목록에 db에 저장된 메뉴들이 옵션에 뜬다.


메뉴관리 버튼을 누르면 메뉴를 추가할 수 있다.
추가하면 메뉴목록에도 같이 추가된다.
메뉴를 선택하면 메뉴명,수량,가격나오고
수량을 올리면 가격도 그에 맞춰서 올라간다.
주문내역에 주문이 들어가고 모바일번호를 입력한다. 취소버튼을 누르면 주문내역이 초기화 된다.
주문완료를 누르면 매출내역에 시간, 매출총액,
모바일 번호가 매출내역에 들어간다.
매출 총액은 매출내역의 금액을 모두 더해서 나온다.

<로그인, 회원가입>

-ajax가 꼭 필요한건 loginid확인할때...?

[oracle]

create table singon(
    id VARCHAR2(50) not null primary key,
    password varchar2(50) not null,
    nickname varchar2(100),
    gender varchar2(20),
    interest varchar2(100)
);

흑흑흑흑

728x90

'Spring' 카테고리의 다른 글

2023.03.16  (0) 2023.03.16
2023.03.15  (0) 2023.03.15
2023.03.10  (0) 2023.03.10
2023.03.09  (0) 2023.03.10
2023.03.07  (0) 2023.03.07

관련글 더보기