견적서 API 오류 수정

This commit is contained in:
LAPTOP-L3VE7KK2\USER 2024-11-01 15:42:57 +09:00
parent fda8746aa0
commit 8df66cd591
5 changed files with 157 additions and 8 deletions

View File

@ -53,7 +53,8 @@ public class EstimateController {
@Operation(description = "견적서를 복사한다.") @Operation(description = "견적서를 복사한다.")
@PostMapping("/save-estimate-copy") @PostMapping("/save-estimate-copy")
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
public void insertEstimateCopy(@RequestBody EstimateRequest estimateRequest) throws Exception { public EstimateResponse insertEstimateCopy(@RequestBody EstimateRequest estimateRequest)
estimateService.insertEstimateCopy(estimateRequest); throws Exception {
return estimateService.insertEstimateCopy(estimateRequest);
} }
} }

View File

@ -49,6 +49,11 @@ public class EstimateService {
ErrorCode.INVALID_INPUT_VALUE, ErrorCode.INVALID_INPUT_VALUE,
message.getMessage("common.message.required.data", "Sale Store ID")); message.getMessage("common.message.required.data", "Sale Store ID"));
} }
if (StringUtils.isEmpty(priceRequest.getSapSalesStoreCd())) {
throw new QcastException(
ErrorCode.INVALID_INPUT_VALUE,
message.getMessage("common.message.required.data", "Sap Sale Store Code"));
}
if (StringUtils.isEmpty(priceRequest.getDocTpCd())) { if (StringUtils.isEmpty(priceRequest.getDocTpCd())) {
throw new QcastException( throw new QcastException(
ErrorCode.INVALID_INPUT_VALUE, ErrorCode.INVALID_INPUT_VALUE,
@ -61,6 +66,7 @@ public class EstimateService {
String apiUrl = String apiUrl =
UriComponentsBuilder.fromHttpUrl(url) UriComponentsBuilder.fromHttpUrl(url)
.queryParam("saleStoreId", priceRequest.getSaleStoreId()) .queryParam("saleStoreId", priceRequest.getSaleStoreId())
.queryParam("sapSalesStoreCd", priceRequest.getSapSalesStoreCd())
.queryParam("docTpCd", priceRequest.getDocTpCd()) .queryParam("docTpCd", priceRequest.getDocTpCd())
.build() .build()
.toUriString(); .toUriString();
@ -412,7 +418,7 @@ public class EstimateService {
} }
} }
public void insertEstimateCopy(EstimateRequest estimateRequest) throws Exception { public EstimateResponse insertEstimateCopy(EstimateRequest estimateRequest) throws Exception {
// Validation // Validation
if (StringUtils.isEmpty(estimateRequest.getObjectNo())) { if (StringUtils.isEmpty(estimateRequest.getObjectNo())) {
throw new QcastException( throw new QcastException(
@ -425,6 +431,8 @@ public class EstimateService {
message.getMessage("common.message.required.data", "Plan No")); message.getMessage("common.message.required.data", "Plan No"));
} }
EstimateResponse response = new EstimateResponse();
// [1]. 플랜 목록 조회 제약조건 처리 (플랜 10개까지만 등록) // [1]. 플랜 목록 조회 제약조건 처리 (플랜 10개까지만 등록)
PlanRequest planRequest = new PlanRequest(); PlanRequest planRequest = new PlanRequest();
planRequest.setObjectNo(estimateRequest.getObjectNo()); planRequest.setObjectNo(estimateRequest.getObjectNo());
@ -494,11 +502,17 @@ public class EstimateService {
} }
// 도면 복사 (추후 개발 필요) // 도면 복사 (추후 개발 필요)
// 리턴
response.setObjectNo(estimateRequest.getObjectNo());
response.setPlanNo(estimateRequest.getCopyPlanNo());
return response;
} }
public void selectTotalPriceInfo(EstimateResponse estimateResponse) throws Exception { public void selectTotalPriceInfo(EstimateResponse estimateResponse) throws Exception {
BigDecimal totAmount = BigDecimal.ZERO; BigDecimal totAmount = BigDecimal.ZERO;
BigDecimal totVol = BigDecimal.ZERO; BigDecimal totVol = BigDecimal.ZERO;
BigDecimal pkgTotPrice = BigDecimal.ZERO;
BigDecimal supplyPrice = BigDecimal.ZERO; BigDecimal supplyPrice = BigDecimal.ZERO;
BigDecimal vatPrice = BigDecimal.ZERO; BigDecimal vatPrice = BigDecimal.ZERO;
BigDecimal totPrice = BigDecimal.ZERO; BigDecimal totPrice = BigDecimal.ZERO;
@ -551,7 +565,9 @@ public class EstimateService {
} }
if ("YJSS".equals(estimateType)) { if ("YJSS".equals(estimateType)) {
supplyPrice.add(pkgAsp.multiply(totVol)); pkgTotPrice = pkgAsp.multiply(totVol);
pkgTotPrice = pkgTotPrice.setScale(0, BigDecimal.ROUND_HALF_UP);
supplyPrice = supplyPrice.add(pkgTotPrice);
} }
// 부가세 계산 (10프로) // 부가세 계산 (10프로)
@ -559,6 +575,7 @@ public class EstimateService {
// 가격 합산 (공급가 + 부가세) // 가격 합산 (공급가 + 부가세)
totPrice = totPrice.add(supplyPrice.add(vatPrice)); totPrice = totPrice.add(supplyPrice.add(vatPrice));
estimateResponse.setPkgTotPrice(String.valueOf(pkgTotPrice));
estimateResponse.setTotAmount(String.valueOf(totAmount.setScale(0, BigDecimal.ROUND_HALF_UP))); estimateResponse.setTotAmount(String.valueOf(totAmount.setScale(0, BigDecimal.ROUND_HALF_UP)));
estimateResponse.setTotVol(String.valueOf(totVol.setScale(0, BigDecimal.ROUND_HALF_UP))); estimateResponse.setTotVol(String.valueOf(totVol.setScale(0, BigDecimal.ROUND_HALF_UP)));
estimateResponse.setSupplyPrice( estimateResponse.setSupplyPrice(

View File

@ -0,0 +1,85 @@
package com.interplug.qcast.biz.estimate.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
import lombok.Data;
@Data
public class EstimatePdfResponse {
@Schema(description = "물건번호")
private String objectNo;
@Schema(description = "플랜번호")
private String planNo;
@Schema(description = "판매점ID")
private String saleStoreId;
@Schema(description = "견적서 유효기간")
private String estimateValidityTerm;
@Schema(description = "견적갱신일")
private String estimateDate;
@Schema(description = "PKG 단가")
private String pkgAsp;
@Schema(description = "비고")
private String remarks;
// 가격 관련 정보
@Schema(description = "총 수량")
private String totAmount;
@Schema(description = "총 용량")
private String totVol;
@Schema(description = "PKG 총액")
private String pkgTotPrice;
@Schema(description = "공급가액")
private String supplyPrice;
@Schema(description = "부가세")
private String vatPrice;
@Schema(description = "총액")
private String totPrice;
// 물건정보 정보
@Schema(description = "물건명")
private String objectName;
@Schema(description = "경칭")
private String objectNameOmit;
// 판매점 정보
@Schema(description = "고객 판매점명")
private String custSaleStoreName;
@Schema(description = "판매점명")
private String saleStoreName;
@Schema(description = "우편번호")
private String zipNo;
@Schema(description = "주소")
private String address;
@Schema(description = "전화번호")
private String tel;
@Schema(description = "Fax번호")
private String fax;
// PKG 정보
@Schema(description = "주택패키지 여부")
private String pkgYn;
@Schema(description = "주택패키지 번호")
private String pkgNo;
// 데이터 목록 관련 정보
@Schema(description = "아이템 목록")
List<ItemResponse> itemList;
}

View File

@ -133,6 +133,9 @@ public class EstimateResponse {
@Schema(description = "가격코드") @Schema(description = "가격코드")
private String priceCd; private String priceCd;
@Schema(description = "비고")
private String remarks;
@Schema(description = "갱신일") @Schema(description = "갱신일")
private String lastEditDatetime; private String lastEditDatetime;
@ -143,6 +146,9 @@ public class EstimateResponse {
@Schema(description = "총 용량") @Schema(description = "총 용량")
private String totVol; private String totVol;
@Schema(description = "PKG 총액")
private String pkgTotPrice;
@Schema(description = "공급가액") @Schema(description = "공급가액")
private String supplyPrice; private String supplyPrice;
@ -159,6 +165,9 @@ public class EstimateResponse {
@Schema(description = "경칭") @Schema(description = "경칭")
private String objectNameOmit; private String objectNameOmit;
@Schema(description = "물건정보 비고")
private String objectRemarks;
// 데이터 목록 관련 정보 // 데이터 목록 관련 정보
@Schema(description = "아이템 목록") @Schema(description = "아이템 목록")
List<ItemResponse> itemList; List<ItemResponse> itemList;

View File

@ -45,15 +45,52 @@
, P.FILE_FLG , P.FILE_FLG
, P.ESTIMATE_OPTION , P.ESTIMATE_OPTION
, P.PKG_ASP , P.PKG_ASP
, P.PRICE_CD
, P.REMARKS
, P.LAST_EDIT_DATETIME , P.LAST_EDIT_DATETIME
, O.OBJECT_NAME , O.OBJECT_NAME
, O.OBJECT_NAME_OMIT , O.OBJECT_NAME_OMIT
, O.REMARKS AS OBJECT_REMARKS
FROM T_PLAN P WITH (NOLOCK) FROM T_PLAN P WITH (NOLOCK)
INNER JOIN T_OBJECT O WITH (NOLOCK) INNER JOIN T_OBJECT O WITH (NOLOCK)
ON T.OBJECT_NO = O.OBJECT_NO ON P.OBJECT_NO = O.OBJECT_NO
WHERE T.OBJECT_NO = #{objectNo} WHERE P.OBJECT_NO = #{objectNo}
AND T.PLAN_NO = #{planNo} AND P.PLAN_NO = #{planNo}
AND T.DEL_FLG = '0' AND P.DEL_FLG = '0'
</select>
<select id="selectEstimatePdfDetail" parameterType="com.interplug.qcast.biz.estimate.dto.EstimateRequest" resultType="com.interplug.qcast.biz.estimate.dto.EstimatePdfResponse">
/* sqlid : com.interplug.qcast.biz.estimate.selectPdfEstimateDetail */
SELECT
T.*
, SS1.SALE_STORE_NAME AS CUST_SALE_STORE_NAME
, SS2.SALE_STORE_NAME
, SS2.ZIP_NO
, SS2.ADDRESS
, SS2.TEL
, SS2.FAX
FROM
(
SELECT
P.OBJECT_NO
, P.PLAN_NO
, P.ESTIMATE_VALIDITY_TERM
, P.REMARKS
, CONVERT(NVARCHAR(10), P.LAST_EDIT_DATETIME, 121) AS ESTIMATE_DATE
, O.SALE_STORE_ID
, O.OBJECT_NAME
, O.OBJECT_NAME_OMIT
, (SELECT SALE_STORE_ID FROM M_USER WHERE USER_ID = O.CREATE_USER) AS CREATE_SALE_STORE_ID
FROM T_PLAN P WITH (NOLOCK)
INNER JOIN T_OBJECT O WITH (NOLOCK)
ON P.OBJECT_NO = O.OBJECT_NO
WHERE P.OBJECT_NO = #{objectNo}
AND P.PLAN_NO = #{planNo}
) T
LEFT OUTER JOIN M_SALES_STORE SS1 WITH (NOLOCK)
ON T.SALE_STORE_ID = SS1.SALE_STORE_ID
LEFT OUTER JOIN M_SALES_STORE SS2 WITH (NOLOCK)
ON T.CREATE_SALE_STORE_ID = SS2.SALE_STORE_ID
</select> </select>
<select id="selectEstimateItemList" parameterType="com.interplug.qcast.biz.estimate.dto.EstimateRequest" resultType="com.interplug.qcast.biz.estimate.dto.ItemResponse"> <select id="selectEstimateItemList" parameterType="com.interplug.qcast.biz.estimate.dto.EstimateRequest" resultType="com.interplug.qcast.biz.estimate.dto.ItemResponse">