Java 일지 #17 (20210827) 주문(Order.java)
17. 주문(Order.java) 주문하기, 목록 조회
- entity 생성(Order.java)
*변수 입력(Order.java)
package com.example.entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Order {
private long oid = 0L;
private int cnt = 0;
private Item item = null; //물품정보
private Customer customer = null; //고객아이디
}
- 시퀀스 생성(mongodb)
*주문 번호를 count 할 시퀀스를 생성한다.
**사진과 같이 코드 입력 후 Run 버튼 클릭 or ctrl + enter
- db 연결, 컬렉션 선택(OrderDB.java, Setting.java)
*환경 변수 설정(Setting.java)
package com.example.config;
//환경 변수 설정하는 곳
public class Setting {
// 서버 주소 Setting.URL
public final static String URL = "mongodb://id311:pw311@1.234.5.158:37017/id311";
public final static String DBNAME = "id311";
public final static String ORDER_COLLECTION = "java_order";
public final static String SEQ_ORDER_COLLECTION= "java_seq_order";
}
*db연결, 컬렉션 선택(OrderDB.java)
public class OrderDB {
//주문내역추가
private MongoCollection<Document> orderCollection = null;
//주문번호를 가져오기(시퀀스,AI)
private MongoCollection<Document> seqCollection = null;
private static OrderDB orderDB = new OrderDB();
private MongoDatabase db = null;
public OrderDB() {
MongoClient client = MongoClients.create(Setting.URL);
this.db = client.getDatabase(Setting.DBNAME);
this.orderCollection = db.getCollection(Setting.ORDER_COLLECTION);
this.seqCollection = db.getCollection(Setting.SEQ_ORDER_COLLECTION);
}
public static OrderDB getInstance(){
return orderDB;
}
-주문하기
*주문하기(OrderDB.java)
public int insertOrder( Order order) {
Bson query = Filters.eq("_id", "SEQ_ORDER_NO"); //mongodb 참고
Bson update = Updates.inc("seq", 1);
Document doc = seqCollection.findOneAndUpdate(query, update);
//자동 증가되는 주문번호
long oid =doc.getDouble("seq").intValue();
Document doc1 = new Document();
doc1.append("_id", oid); //주문번호
doc1.append("cnt", order.getCnt());//주문수량
doc1.append("item", order.getItem().getCode()); //물품정보
doc1.append("customer", order.getCustomer().getCid());//고객정보
InsertOneResult result = orderCollection.insertOne(doc1);
if(result.getInsertedId().asInt64().getValue() == oid ){
return 1;
}
return 0;
}
*주문하기(App.java)
**물품과 고객 정보는 기존에 등록한 것을 mongodb에서 찾아 사용한다.
//OrderDB order1 = new OrderDB(); //객체 여러개 생성
OrderDB orderDB = OrderDB.getInstance(); //객체 1개
Order order =new Order();
order.setCnt(25); //주문 수량
Item item = new Item(); //물품
item.setCode(10090);
order.setItem(item); //몽고db참조
Customer customer = new Customer(); //고객
customer.setCid("ddd");
order.setCustomer(customer); //몽고db 참조
int ret = orderDB.insertOrder(order);
System.out.println(ret);;
*db 확인
**App.java에서 입력 했던 물품 정보와 고객 정보가 함께 등록 되었다.
-주문 목록 조회
*고객별 주문 목록 조회(OrderDB.java)
**물품 코드와 고객 코드를 가져오기 위해 각각의 DB.java에서 코드입력
public List<Order> selectOrderCustomer( String cid ) throws Exception {
Bson query =Filters.eq("customer", cid); //조건
MongoCursor<Document> cursor = orderCollection.find(query).iterator();
List<Order> list = new ArrayList<>();
while(cursor.hasNext()){
Document doc =cursor.next();
Order order =new Order();
order.setOid( doc.getLong("_id")); //주문코드
order.setCnt(doc.getInteger("cnt")); //주문수량
//물품 코드 (ItemDB에 물품 정보 한개 반환할 코드 입력)
order.setItem( ItemDB.getInstance().selectItemOne(doc.getInteger("item"))); //물품정보
//고객 코드 (CustomerDB에 물품 정보 한개 반환할 코드 입력)
order.setCustomer(CustomerDB.getInstance().selectCustomerOne1(doc.getString("customer"))); //고객정보
list.add(order);
}
return list;
}
*물품 정보 가져오기(ItemDB.java)
//물품정보 가져오기 (물품정보가 전달 되면 물품정보내용 반환)
public Item selectItemOne(int code) throws Exception{
Bson query =Filters.eq("_id", code); //조건
MongoCursor<Document> cursor = this.collection.find(query).iterator();
if (cursor.hasNext()){
Document doc = cursor.next();
Item item = new Item();
item.setCode((int) doc.get("_id"));
item.setName((String) doc.get("name"));
item.setText((String) doc.get("text"));
item.setPrice((int) doc.get("price"));
item.setQuantity((long) doc.get("quantity"));
item.setSeller(null);
return item;
}
return null;
}
*고객 정보 가져오기(CustomerDB.java)
public Customer selectCustomerOne1(String _id) throws Exception {
Bson queryBson = Filters.eq("_id", _id);
MongoCursor<Document> cursor = customerCollection.find(queryBson).iterator();
if (cursor.hasNext()) {
Document doc = cursor.next();
Customer customer = new Customer();
customer.setCid(doc.getString("_id"));
customer.setName(doc.getString("name"));
// retMap.pur("ORDER", doc.get) //수정해야함
return customer;
}
return null;
}
*고객별 주문 목록(App.java)
**고객 id = "ccc"
List<Order> list = OrderDB.getInstance().selectOrderCustomer("ccc");
for(Order order : list) {
System.out.println(order.getOid()
+ "," + order.getCnt()
+ "," + order.getItem().getCode()
+ "," + order.getItem().getName()
+ "," + order.getCustomer().getName() );
}
*출력값 확인
*물품별 주문 목록 조회(OrderDB.java)
**고객별 주문 목록 조회 때 사용 했던 코드를 그대로 사용한다.
**변수 명과 조건을 Item에 맞게 수정한다.
public List<Order> selectOrderItem(int code) throws Exception {
Bson query =Filters.eq("item", code); //조건
MongoCursor<Document> cursor = orderCollection.find(query).iterator();
List<Order> list = new ArrayList<>();
while(cursor.hasNext()){
Document doc =cursor.next();
Order order =new Order();
order.setOid( doc.getLong("_id")); //주문코드
order.setCnt(doc.getInteger("cnt")); //주문수량
//물품 코드 (ItemDB에 물품 정보 한개 반환할 코드 입력)
order.setItem( ItemDB.getInstance().selectItemOne(doc.getInteger("item"))); //물품정보
//고객 코드 (CustomerDB에 물품 정보 한개 반환할 코드 입력)
order.setCustomer(CustomerDB.getInstance().selectCustomerOne1(doc.getString("customer"))); //고객정보
list.add(order);
}
return list;
}
*물품별 주문 목록(App.java)
**물품 id = "10090"
List<Order> list = OrderDB.getInstance().selectOrderItem(10090);
for(Order order : list) {
System.out.println(order.getOid()
+ "," + order.getCnt()
+ "," + order.getItem().getCode()
+ "," + order.getItem().getName()
+ "," + order.getCustomer().getName() );
}
*출력값 확인