Java

Java 일지 #17 (20210827) 주문(Order.java)

uni5948 2021. 9. 1. 13:00

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 

mongodb 시퀀스 생성

 

- 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<DocumentorderCollection = null;

    //주문번호를 가져오기(시퀀스,AI)

    private MongoCollection<DocumentseqCollection = 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 insertOrderOrder order) {

        Bson query = Filters.eq("_id""SEQ_ORDER_NO"); //mongodb 참고

        Bson update = Updates.inc("seq"1);

        Document doc = seqCollection.findOneAndUpdate(queryupdate);

 

        //자동 증가되는 주문번호

        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에서 입력 했던 물품 정보와 고객 정보가 함께 등록 되었다.

db 확인

-주문 목록 조회

 *고객별 주문 목록 조회(OrderDB.java)

 **물품 코드와 고객 코드를 가져오기 위해 각각의 DB.java에서 코드입력

 public List<OrderselectOrderCustomerString cid ) throws Exception {

        

        Bson query =Filters.eq("customer"cid); //조건

        MongoCursor<Documentcursor = orderCollection.find(query).iterator();

 

        List<Orderlist = new ArrayList<>();

        while(cursor.hasNext()){

            Document doc =cursor.next();  

            Order order =new Order();

            order.setOiddoc.getLong("_id"));  //주문코드

            order.setCnt(doc.getInteger("cnt")); //주문수량

            //물품 코드 (ItemDB에 물품 정보 한개 반환할 코드 입력)

            order.setItemItemDB.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 codethrows Exception{

        Bson query =Filters.eq("_id"code); //조건

        MongoCursor<Documentcursor = this.collection.find(query).iterator();

        if (cursor.hasNext()){

            Document doc = cursor.next();

            Item item = new Item();

            item.setCode((intdoc.get("_id"));

            item.setName((Stringdoc.get("name"));

            item.setText((Stringdoc.get("text"));

            item.setPrice((intdoc.get("price"));

            item.setQuantity((longdoc.get("quantity"));

            item.setSeller(null);

            return item;

        }

        return null;

    }

*고객 정보 가져오기(CustomerDB.java)

 public Customer selectCustomerOne1(String _idthrows Exception {

        Bson queryBson = Filters.eq("_id"_id);

        MongoCursor<Documentcursor = 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<Orderlist = 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<OrderselectOrderItem(int codethrows Exception {

        Bson query =Filters.eq("item"code); //조건

        MongoCursor<Documentcursor = orderCollection.find(query).iterator();

 

        List<Orderlist = new ArrayList<>();

        while(cursor.hasNext()){

            Document doc =cursor.next();  

            Order order =new Order();

            order.setOiddoc.getLong("_id"));  //주문코드

            order.setCnt(doc.getInteger("cnt")); //주문수량

            //물품 코드 (ItemDB에 물품 정보 한개 반환할 코드 입력)

            order.setItemItemDB.getInstance().selectItemOne(doc.getInteger("item")));  //물품정보

            //고객 코드 (CustomerDB에 물품 정보 한개 반환할 코드 입력)

            order.setCustomer(CustomerDB.getInstance().selectCustomerOne1(doc.getString("customer")));  //고객정보

 

            list.add(order);

        }

        return list;

    }

 

 *물품별 주문 목록(App.java)

 **물품 id = "10090"

   List<Orderlist = OrderDB.getInstance().selectOrderItem(10090);

        for(Order order : list) {

            System.out.println(order.getOid() 

            + "," + order.getCnt()

            + "," + order.getItem().getCode()

            + "," + order.getItem().getName()

            + "," + order.getCustomer().getName() );

        }

 *출력값 확인

출력값 확인