Axboot 멀티 테이블 수정/저장 예제 (2/2)

Axboot 멀티 테이블 수정/저장 예제 (2/2)

앞 게시글 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.Comment;
import com.dasdes.shopmng.domain.BaseJpaModel;
import java.util.Date;
import javax.persistence.*;
import lombok.*;
import org.apache.ibatis.type.Alias;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

@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 org.springframework.stereotype.Repository;

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

@Repository

public interface PrdtPriceHistRepository extends AXBootJPAQueryDSLRepository<PrdtPriceHist, String> {

}

  - PrdtPriceHistService.java

package com.dasdes.shopmng.domain.prdt;

import com.chequer.axboot.core.parameter.RequestParams;
import com.dasdes.shopmng.domain.BaseService;
import com.querydsl.core.BooleanBuilder;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@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 com.chequer.axboot.core.parameter.RequestParams;
import com.dasdes.shopmng.domain.BaseService;
import com.dasdes.shopmng.exception.DBException;
import com.querydsl.core.BooleanBuilder;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

// 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 조회 : 하다보니 누가 변경했는지가 필요할 것 같은데 빠졌네요.^^

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


    

어때요? 도움이 많이 되셨나요? ~~~~~~~

#제품가격 #멀티테이블 #Axboot

Read more

SAP ABAP 문법 정리 및 각 예제

SAP ABAP 문법 정리 및 각 예제

SAP ABAP 문법 정리: 초보자부터 숙련자도 참고 가능 SAP 시스템은 전 세계 수많은 기업의 핵심 비즈니스 프로세스를 구동하는 강력한 솔루션입니다. 그리고 이 SAP 시스템의 심장부에는 바로 **ABAP(Advanced Business Application Programming)**이라는 독자적인 프로그래밍 언어가 있습니다. ABAP은 단순히 보고서를 생성하는 것을 넘어, 복잡한 비즈니스 로직 구현, 데이터베이스 상호작용, 사용자 인터페이스

[세입자]전세 계약 체크사항

[세입자]전세 계약 체크사항

세입자를 위한 전세 계약 안전장치 및 체크리스트 전세 계약은 세입자에게 큰 금액이 투자되는 중요한 결정입니다. 아래 내용은 계약 전 확인, 계약서 작성, 안전장치, 법적 보호, 입금 시 주의사항까지 통합한 실용 가이드입니다. 1. 계약 전 주택 및 주변 환경 확인 항목체크 포인트증거 확보 방법 건물 외관외벽, 지붕, 창문 파손 여부, 균열,

Image 3
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Image 4
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.