플랜추가 API 도면복사 기능 개발

This commit is contained in:
LAPTOP-L3VE7KK2\USER 2025-02-07 13:19:38 +09:00
parent a22dbffe4e
commit 2627a5d928
6 changed files with 198 additions and 36 deletions

View File

@ -792,6 +792,7 @@ public class EstimateService {
itemList.add(itemRequest); itemList.add(itemRequest);
} }
if (!itemList.isEmpty()) {
String[] arrItemId = new String[itemList.size()]; String[] arrItemId = new String[itemList.size()];
int i = 0; int i = 0;
for (ItemRequest itemRequest : itemList) { for (ItemRequest itemRequest : itemList) {
@ -820,6 +821,7 @@ public class EstimateService {
} }
} }
} }
}
// [4]. 견적서 복사 // [4]. 견적서 복사
estimateCopyRequest.setCopyObjectNo(objectRequest.getObjectNo()); estimateCopyRequest.setCopyObjectNo(objectRequest.getObjectNo());
@ -851,7 +853,7 @@ public class EstimateService {
// 도면 초기 데이타 복사(초기화 위해 필요) // 도면 초기 데이타 복사(초기화 위해 필요)
estimateMapper.insertEstimateDrawingItemCopy(estimateCopyRequest); estimateMapper.insertEstimateDrawingItemCopy(estimateCopyRequest);
// [7]. 견적서 도면 복사 (추후 개발 필요) // [7]. 견적서 도면 복사
CanvasStatusCopyRequest cs = new CanvasStatusCopyRequest(); CanvasStatusCopyRequest cs = new CanvasStatusCopyRequest();
cs.setOriginObjectNo(estimateCopyRequest.getObjectNo()); cs.setOriginObjectNo(estimateCopyRequest.getObjectNo());
cs.setOriginPlanNo(estimateCopyRequest.getPlanNo()); cs.setOriginPlanNo(estimateCopyRequest.getPlanNo());

View File

@ -70,6 +70,9 @@ public interface ObjectMapper {
// 플랜정보 물건번호 변경 // 플랜정보 물건번호 변경
public int updatePlanObjectNoChange(ObjectRequest objectRequest); public int updatePlanObjectNoChange(ObjectRequest objectRequest);
// 플랜 번호 조회
public String selectPlanNo(PlanRequest planRequest);
// 견적서 첨부파일 조회 // 견적서 첨부파일 조회
public UploadResponse selectUpload(UploadRequest uploadRequest); public UploadResponse selectUpload(UploadRequest uploadRequest);
} }

View File

@ -1,6 +1,11 @@
package com.interplug.qcast.biz.object; package com.interplug.qcast.biz.object;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.interplug.qcast.biz.canvasStatus.CanvasStatusService;
import com.interplug.qcast.biz.canvasStatus.dto.CanvasStatus;
import com.interplug.qcast.biz.canvasStatus.dto.CanvasStatusCopyRequest;
import com.interplug.qcast.biz.estimate.EstimateMapper;
import com.interplug.qcast.biz.estimate.dto.*;
import com.interplug.qcast.biz.object.dto.ObjectRequest; import com.interplug.qcast.biz.object.dto.ObjectRequest;
import com.interplug.qcast.biz.object.dto.ObjectResponse; import com.interplug.qcast.biz.object.dto.ObjectResponse;
import com.interplug.qcast.biz.object.dto.PlanReqRequest; import com.interplug.qcast.biz.object.dto.PlanReqRequest;
@ -58,8 +63,12 @@ public class ObjectService {
private final ObjectMapper objectMapper; private final ObjectMapper objectMapper;
private final EstimateMapper estimateMapper;
private final StoreFavoriteService storeFavoriteService; private final StoreFavoriteService storeFavoriteService;
@Autowired private CanvasStatusService canvasStatusService;
/** /**
* 도도부현 목록 조회 * 도도부현 목록 조회
* *
@ -499,6 +508,12 @@ public class ObjectService {
message.getMessage("common.message.required.data", "Object No")); message.getMessage("common.message.required.data", "Object No"));
} }
if ("1".equals(planRequest.getCopyFlg()) && StringUtils.isEmpty(planRequest.getPlanNo())) {
throw new QcastException(
ErrorCode.INVALID_INPUT_VALUE,
message.getMessage("common.message.required.data", "Plan No"));
}
// Plan 추가 가능 체크 // Plan 추가 가능 체크
List<PlanResponse> planList = objectMapper.selectPlanList(planRequest); List<PlanResponse> planList = objectMapper.selectPlanList(planRequest);
if (planList.size() > 9) { if (planList.size() > 9) {
@ -506,6 +521,120 @@ public class ObjectService {
ErrorCode.INTERNAL_SERVER_ERROR, message.getMessage("common.message.plan.save.limit")); ErrorCode.INTERNAL_SERVER_ERROR, message.getMessage("common.message.plan.save.limit"));
} }
try {
// 복사조건인 경우 (copyFlg = '1')
if ("1".equals(planRequest.getCopyFlg())) {
String copyPlanNo = objectMapper.selectPlanNo(planRequest);
// [1]. 복사대상 견적서 여부 조회
EstimateRequest estimateRequest = new EstimateRequest();
estimateRequest.setObjectNo(planRequest.getObjectNo());
estimateRequest.setPlanNo(planRequest.getPlanNo());
// 견적서 상세 조회
EstimateResponse estimateResponse = estimateMapper.selectEstimateDetail(estimateRequest);
// [2]. 아이템 관련 데이터 셋팅 (복사 정가 셋팅)
List<ItemRequest> itemList = new ArrayList<ItemRequest>();
List<ItemResponse> estimateItemList =
estimateMapper.selectEstimateItemList(estimateRequest);
for (ItemResponse itemResponse : estimateItemList) {
ItemRequest itemRequest = new ItemRequest();
itemRequest.setDispOrder(itemResponse.getDispOrder());
itemRequest.setPaDispOrder(itemResponse.getPaDispOrder());
itemRequest.setItemId(itemResponse.getItemId());
itemRequest.setAmount(itemResponse.getAmount());
itemRequest.setBomAmount(itemResponse.getBomAmount());
itemRequest.setSpecialNoteCd(itemResponse.getSpecialNoteCd());
itemRequest.setItemChangeFlg("0");
itemList.add(itemRequest);
}
if (!itemList.isEmpty()) {
String[] arrItemId = new String[itemList.size()];
int i = 0;
for (ItemRequest itemRequest : itemList) {
arrItemId[i++] = itemRequest.getItemId();
}
estimateRequest.setArrItemId(arrItemId);
// 아이템의 마스터 정보 정가 정보 조회
List<ItemResponse> itemResponseList =
estimateMapper.selectItemMasterList(estimateRequest);
for (ItemRequest itemRequest : itemList) {
for (ItemResponse itemResponse : itemResponseList) {
if (itemRequest.getItemId().equals(itemResponse.getItemId())) {
itemRequest.setItemNo(itemResponse.getItemNo());
itemRequest.setItemName(itemResponse.getItemName());
itemRequest.setUnit(itemResponse.getUnit());
itemRequest.setPnowW(itemResponse.getPnowW());
itemRequest.setSpecification(itemResponse.getPnowW());
itemRequest.setUnitPrice(itemResponse.getSalePrice());
itemRequest.setSalePrice(itemResponse.getSalePrice());
itemRequest.setPkgMaterialFlg(itemResponse.getPkgMaterialFlg());
itemRequest.setFileUploadFlg(itemResponse.getFileUploadFlg());
itemRequest.setItemGroup(itemResponse.getItemGroup());
itemRequest.setOpenFlg(itemResponse.getOpenFlg());
break;
}
}
}
}
// [3]. 견적서 복사
EstimateCopyRequest estimateCopyRequest = new EstimateCopyRequest();
estimateCopyRequest.setObjectNo(planRequest.getObjectNo());
estimateCopyRequest.setPlanNo(planRequest.getPlanNo());
estimateCopyRequest.setCopyObjectNo(planRequest.getObjectNo());
estimateCopyRequest.setCopyPlanNo(copyPlanNo);
estimateCopyRequest.setUserId(planRequest.getUserId());
estimateMapper.insertEstimateCopy(estimateCopyRequest);
if (estimateResponse != null && !StringUtils.isEmpty(estimateResponse.getEstimateDate())) {
// [4]. 견적서 아이템 복사
for (ItemRequest itemRequest : itemList) {
itemRequest.setObjectNo(estimateCopyRequest.getCopyObjectNo());
itemRequest.setPlanNo(estimateCopyRequest.getCopyPlanNo());
itemRequest.setPartAdd(
!org.apache.commons.lang3.StringUtils.isEmpty(itemRequest.getPartAdd())
? itemRequest.getPartAdd()
: "0");
itemRequest.setItemChangeFlg(
!org.apache.commons.lang3.StringUtils.isEmpty(itemRequest.getItemChangeFlg())
? itemRequest.getItemChangeFlg()
: "0");
itemRequest.setUserId(estimateCopyRequest.getUserId());
estimateMapper.insertEstimateItem(itemRequest);
}
// [5]. 견적서 지붕면 도면 초기 데이터 복사
// 견적서 지붕면 복사
estimateMapper.insertEstimateRoofCopy(estimateCopyRequest);
// 견적서 지붕면 아이템 복사
estimateMapper.insertEstimateRoofItemCopy(estimateCopyRequest);
// 견적서 지붕면 회로구성 아이템 복사
estimateMapper.insertEstimateCircuitItemCopy(estimateCopyRequest);
// 도면 초기 데이타 복사(초기화 위해 필요)
estimateMapper.insertEstimateDrawingItemCopy(estimateCopyRequest);
}
// [6]. 견적서 도면 복사
CanvasStatusCopyRequest cs = new CanvasStatusCopyRequest();
cs.setOriginObjectNo(planRequest.getObjectNo());
cs.setOriginPlanNo(planRequest.getPlanNo());
cs.setObjectNo(planRequest.getObjectNo());
cs.setPlanNo(copyPlanNo);
cs.setUserId(planRequest.getUserId());
Integer canvasId = canvasStatusService.copyCanvasStatus(cs);
planResponse.setObjectNo(planRequest.getObjectNo());
planResponse.setPlanNo(copyPlanNo);
planResponse.setCanvasId(canvasId);
} else {
// 추가 Plan 등록 // 추가 Plan 등록
planRequest.setRoofKindId("0"); planRequest.setRoofKindId("0");
planRequest.setStatus("1"); planRequest.setStatus("1");
@ -517,8 +646,22 @@ public class ObjectService {
objectMapper.insertPlan(planRequest); objectMapper.insertPlan(planRequest);
// 도면 기본정보 등록
CanvasStatus cs = new CanvasStatus();
cs.setObjectNo(planRequest.getObjectNo());
cs.setPlanNo(planRequest.getPlanNo());
cs.setCanvasStatus("");
cs.setUserId(planRequest.getUserId());
Integer canvasId = canvasStatusService.insertCanvasStatus(cs);
planResponse.setObjectNo(planRequest.getObjectNo()); planResponse.setObjectNo(planRequest.getObjectNo());
planResponse.setPlanNo(planRequest.getPlanNo()); planResponse.setPlanNo(planRequest.getPlanNo());
planResponse.setCanvasId(canvasId);
}
} catch (Exception e) {
throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR);
}
return planResponse; return planResponse;
} }

View File

@ -109,4 +109,7 @@ public class PlanRequest {
@Schema(description = "임시저장여부") @Schema(description = "임시저장여부")
private String tempFlg; private String tempFlg;
@Schema(description = "복사여부")
private String copyFlg;
} }

View File

@ -115,4 +115,7 @@ public class PlanResponse {
@Schema(description = "생성자 판매점 ID") @Schema(description = "생성자 판매점 ID")
private String createSaleStoreId; private String createSaleStoreId;
@Schema(description = "캔버스 ID")
private Integer canvasId;
} }

View File

@ -304,7 +304,7 @@
, O.STANDARD_WIND_SPEED_ID , O.STANDARD_WIND_SPEED_ID
, O.VERTICAL_SNOW_COVER , O.VERTICAL_SNOW_COVER
, O.SURFACE_TYPE , O.SURFACE_TYPE
, O.INSTALL_HEIGHT , CASE WHEN ISNUMERIC(O.INSTALL_HEIGHT) = 1 THEN CAST(CONVERT(FLOAT, O.INSTALL_HEIGHT) AS INT) ELSE 0 END AS INSTALL_HEIGHT
, O.CON_TYPE , O.CON_TYPE
, O.COLD_REGION_FLG , O.COLD_REGION_FLG
, O.SALT_AREA_FLG , O.SALT_AREA_FLG
@ -802,6 +802,14 @@
WHERE OBJECT_NO = #{objectNo} WHERE OBJECT_NO = #{objectNo}
</update> </update>
<select id="selectPlanNo" parameterType="com.interplug.qcast.biz.object.dto.PlanRequest" resultType="String">
/* sqlid : com.interplug.qcast.biz.object.selectPlanNo*/
SELECT
CAST(ISNULL(MAX(PLAN_NO), 0) + 1 AS NVARCHAR) AS PLAN_NO
FROM T_PLAN
WHERE OBJECT_NO = #{objectNo}
</select>
<select id="selectUpload" parameterType="com.interplug.qcast.biz.object.dto.UploadRequest" resultType="com.interplug.qcast.biz.object.dto.UploadResponse"> <select id="selectUpload" parameterType="com.interplug.qcast.biz.object.dto.UploadRequest" resultType="com.interplug.qcast.biz.object.dto.UploadResponse">
/* sqlid : com.interplug.qcast.biz.object.selectUpload */ /* sqlid : com.interplug.qcast.biz.object.selectUpload */
SELECT SELECT