앞 게시글 Axboot 멀티 테이블 수정/저장 예제 (1/2) 에서 연속으로 진행하도록 하겠습니다.

이번 시간에는 4)제품 History 조회와 제품 정보의 판매가 수정 시 제품 History 테이블에 Insert하는 JAVA로직을 

처리하도록 하겠습니다.


4) 제품 History 조회와 제품 정보의 판매가 수정 시 제품 History 테이블에 Insert

   - PrdtPriceHist.java 수정


package com.dasdes.shopmng.domain.prdt;


import com.chequer.axboot.core.annotations.ColumnPosition;


import lombok.*;

import org.apache.ibatis.type.Alias;

import org.hibernate.annotations.CreationTimestamp;

import org.hibernate.annotations.DynamicInsert;

import org.hibernate.annotations.DynamicUpdate;

import org.hibernate.annotations.Type;


import com.chequer.axboot.core.annotations.Comment;

import com.dasdes.shopmng.domain.BaseJpaModel;

import com.dasdes.shopmng.domain.program.Program;


import java.sql.Timestamp;

import java.util.Date;


import javax.persistence.*;

import javax.validation.constraints.NotNull;


@Setter

@Getter

@DynamicInsert

@DynamicUpdate

@Entity

@EqualsAndHashCode(callSuper = true)

@IdClass(PrdtPriceHist.class)

@Table(name = "prdt_price_hist")

@Comment(value = "제품가격History")

@Alias("prdtPriceHist")

public class PrdtPriceHist extends BaseJpaModel<String> {


@Id

@Column(name = "id", length = 20, nullable = false)

@Comment(value = "id")

private String id;

@Column(name = "prdt_cd", length = 20, nullable = false)

@Comment(value = "제품코드")

private String prdtCd;


@Column(name = "ch_date", nullable = false)

@Comment(value = "변경일시")

@Temporal(TemporalType.TIMESTAMP)

private Date chDate;


@Column(name = "sales_price", precision = 10, nullable = false)

@Comment(value = "판매가격")

private Integer salesPrice;


@Override

public String getId() {

return id;

}



  - PrdtPriceHistRepository.java


package com.dasdes.shopmng.domain.prdt;


import com.chequer.axboot.core.domain.base.AXBootJPAQueryDSLRepository;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.stereotype.Repository;


@Repository

public interface PrdtPriceHistRepository extends AXBootJPAQueryDSLRepository<PrdtPriceHist, String> {



  - PrdtPriceHistService.java


package com.dasdes.shopmng.domain.prdt;


import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;


import com.dasdes.shopmng.domain.BaseService;

import com.dasdes.shopmng.exception.DBException;

import com.querydsl.core.BooleanBuilder;


import javax.inject.Inject;

import com.chequer.axboot.core.parameter.RequestParams;


import java.util.ArrayList;

import java.util.List;


@Service

public class PrdtPriceHistService extends BaseService<PrdtPriceHist, String> {

    private PrdtPriceHistRepository prdtPriceHistRepository;


    @Inject

    public PrdtPriceHistService(PrdtPriceHistRepository prdtPriceHistRepository) {

        super(prdtPriceHistRepository);

        this.prdtPriceHistRepository = prdtPriceHistRepository;

    }


    //제품 판매가 History조회

    public List<PrdtPriceHist> gets(RequestParams<PrdtPriceHist> requestParams) {

    String prdtCd=requestParams.getString("prdtCd", "");

    String filter = requestParams.getString("filter");


    BooleanBuilder builder = new BooleanBuilder();


        if (isNotEmpty(prdtCd)) {

            builder.and(qProduct.prdtCd.eq(prdtCd));

        }


        List<PrdtPriceHist> prdtpriceHistList =  

                       select().from(qPrdtPriceHist).where(builder).orderBy(qPrdtPriceHist.prdtCd.asc()).fetch();


        if (isNotEmpty(filter)) {

        prdtpriceHistList = filter(prdtpriceHistList, filter);

        }   


        return prdtpriceHistList;

    }

    

    //제품 정보에서 호출하는 판매가 insert method

    @Transactional

    public void savePrdPrice(List<Product> product) {

    PrdtPriceHist prdtHist=null;

    List<PrdtPriceHist> hlist=new ArrayList();

    Product prdt=null;

   

    for(int i=0;i<product.size();i++)

    {

    prdt=(Product)product.get(i);

   

    if(prdt.is__modified__())

    {

    prdtHist=new PrdtPriceHist();

    prdtHist.setPrdtCd(prdt.getPrdtCd());

    prdtHist.setSalesPrice(prdt.getSalesPrice());

    prdtHist.setCreatedBy(prdt.getCreatedBy());

    hlist.add(prdtHist);

    }

    }        

   

    save(hlist);

    }

}

 


  - ProductService.java : 제품 정보에서 판매가를 수정할 때 제품 History 테이블에 insert되는 method 호출


package com.dasdes.shopmng.domain.prdt;


import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional; //추가


import com.querydsl.core.BooleanBuilder;  //추가


import javax.inject.Inject;

import com.chequer.axboot.core.parameter.RequestParams;

import com.dasdes.shopmng.domain.BaseService;

import com.dasdes.shopmng.exception.DBException;


import java.util.List;


//import org.slf4j.Logger;

//import org.slf4j.LoggerFactory;


@Service

public class ProductService extends BaseService<Product, String> {

    private ProductRepository productRepository;

    

    @Inject

    private PrdtPriceHistService prdtPriceHistService;


    @Inject

    public ProductService(ProductRepository productRepository) {

        super(productRepository);

        this.productRepository = productRepository;

    }


    public List<Product> gets(RequestParams<Product> requestParams) {

    String prdtCd=requestParams.getString("prdtCd", "");

    String prdtNm=requestParams.getString("prdtNm", "");

    String filter = requestParams.getString("filter");

   

    BooleanBuilder builder = new BooleanBuilder();



        if (isNotEmpty(prdtCd)) {

            builder.and(qProduct.prdtCd.eq(prdtCd));

        }



        if (isNotEmpty(prdtNm)) {

            builder.and(qProduct.prdtNm.eq(prdtNm));

        }


        List<Product> prdtList 

              = select().from(qProduct).where(builder).orderBy(qProduct.prdtCd.asc(), qProduct.prdtNm.asc()).fetch();


        if (isNotEmpty(filter)) {

        prdtList = filter(prdtList, filter);

        }

   

        return prdtList;

    }

    

    @Transactional

    public void savePrdt(List<Product> product) {

    Product prdt=null;

    for(int i=0;i<product.size();i++)

    {

    prdt=(Product)product.get(i);

    //logger.error(i+": {} :"+prdt.toString());

   

    if(prdt.is__created__() && exists(prdt.getId()))

    {

    throw new DBException("신규로 추가하신 "+prdt.getId()+"코드는 이미 등록된 제품코드입니다.");

    }

    }   

        save(product);


        //제품 판매가 History Table에 Insert되는 method호출

        prdtPriceHistService.savePrdPrice(product);

    }

}

 


5) 테스트

  - 서버 구동

  


   - 제품 정보에서 판매가 수정을 해본다. 


   - 제품 판매가 History 조회 : 하다보니 누가 변경했는지가 필요할 것 같은데 빠졌네요.^^

                                        그 부분은 여러분들이 한번 추가해 보세요..==>과제.


    

어때요? 도움이 많이 되셨나요? ~~~~~~~도움이 되셨다면 아래 꾹~~~



  1. graykang 2019.07.02 14:53

    안녕하세요.
    좋은 정보 너무 감사드리며, 글 잘 읽고 있습니다.
    혹시 사용자 관리쪽에 계정 추가 하고 해당 계정으로 로그인시 404에러가 뜨는데 사용자용 main 대시보드를 따로 연결해 주는 작업을 해야 하는건가요? 새로 추가한 페이지 들만 보여지는 일반 계정을 등록 해서 사용 해 볼려고 하는데 막혀서 혹시나 도움 받을수 있을까 해서 글 남깁니다.

    • graykang 2019.07.03 12:00

      음...해결 했어요 ㅎㅎ
      인터넷 임시 파일을 삭제 하니까 되네요 ^^;;

  2. dasdes 2019.07.03 12:05 신고

    다행이네요. 제가 컴터에 환경을 날려서 답변을 못드린점 양해부탁드립니다

  3. 안용진 2019.07.25 11:39

    안녕하세요... AXBoot 초기설치부터 무쟈게 도움 받고 있습니다.

    프로젝트에 도입하고 난후 이 사이트 없었으면 프로젝트 못했을거에요.

    오랜만에 글이 올라와서 반갑네요.

    혹시 궁금한게 있으면 다시 오겠습니다. 개인적으로는 업데이트가 자주 되었으면 하는 바람이네요...

    물론 바쁘시겠지만 ^^

  4. dasdes 2019.07.25 12:13 신고

    도움이 되셨다니 다행이네요. 업뎃이 좀 더디네요. 좋은하루 되세요.

  5. jack 2019.12.04 15:49

    선배님 감사합니다 개발환경 셋팅에서부터 많은 도움 받았습니다!
    혹시 프로젝트 진행하다가 궁금한사항 생기면 질문 드려도 될런지요

  6. dasdes 2019.12.04 16:04 신고

    글 남기시면 가능한한 답변드리도록 하겠습니다

    • jack 2019.12.04 17:20

      감사합니다 남은 2019년 따뜻하게 잘 보내시길 바랍니다!

  7. jack 2019.12.17 16:59

    궁금한게 생겼습니다...
    AXBoot 프로젝트 공부를 처음 시작할때부터 느낀 것이지만
    간단한 UI나 java코드를 수정했을때 서버를 항상 재시작 해야 되더라구요..그게 너무나 시간을 많이 잡아먹어요
    근데 일반 spring프로젝트나 boot프로젝트를 할때 재시작 없이 바로바로 페이지에 반영이 되었는데
    이를 해결할만한 방법을 혹시 알고계신가요...??

    • dasdes 2019.12.19 11:06 신고

      UI부분은 브라우저 cache가 강력해서 그 내용을 보여주는거라 브라우저의 방문기록을 삭제하면 UI부분은 바로 반영되어 나올거구요. java수정건은 재시작이 필요할 듯 합니다.

    • jack 2019.12.19 11:27

      아하! 감사합니다^^ 캐시삭제가 답이군요ㅎㅎ

+ Recent posts