diff --git a/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java b/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java index fcf9c4fe..b616d094 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java @@ -1763,7 +1763,7 @@ public class EstimateService { List circuitItemList11 = estimateResponse.getRoofInfo().getCircuitItemList(); - if (circuitItemList11.size() < 12){ + if (circuitItemList11 != null && circuitItemList11.size() < 12){ // 12개 미만인 경우, 나머지 아이템을 빈 값으로 채움 for (int k = circuitItemList11.size(); k < 11; k++) { ItemResponse emptyItem = new ItemResponse(); @@ -1778,7 +1778,7 @@ public class EstimateService { // 지붕면 목록에서 8개로 자름 List roofModuleList8 = estimateResponse.getPwrGnrSim().getRoofModuleList(); - if (roofModuleList8.size() < 9) { + if (roofModuleList8 != null && roofModuleList8.size() < 9) { // 9개 미만인 경우, 나머지 아이템을 빈 값으로 채움 for (int k = roofModuleList8.size(); k < 8; k++) { PwrGnrSimRoofResponse emptyRoof = new PwrGnrSimRoofResponse(); @@ -1792,7 +1792,7 @@ public class EstimateService { //pcs list 3개 List pcsList3 = estimateResponse.getPwrGnrSim().getPcsList(); - if (pcsList3.size() < 4) { + if (pcsList3 != null && pcsList3.size() < 4) { // 4개 미만인 경우, 나머지 아이템을 빈 값으로 채움 for (int k = pcsList3.size(); k < 4; k++) { PwrGnrSimRoofResponse emptyPcs = new PwrGnrSimRoofResponse(); diff --git a/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java b/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java index 185f749e..3385bb0a 100644 --- a/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java +++ b/src/main/java/com/interplug/qcast/biz/pwrGnrSimulation/PwrGnrSimService.java @@ -159,9 +159,8 @@ public class PwrGnrSimService { // 4. 계산을 위해 order by 변경 (총용량 DESC) -계산용 List moduleGroupList = roofGroupModuleList.stream() - .sorted( - Comparator.comparingDouble(PwrGnrSimRoofResponse::getTotSpecification) - .reversed()) // 내림차순 정렬 +// .sorted(Comparator.comparingDouble(PwrGnrSimRoofResponse::getTotSpecification).reversed()) // 내림차순 정렬 + .sorted(Comparator.comparingDouble(PwrGnrSimRoofResponse::getAmp)) //AMP 올림차순 .collect(Collectors.toList()); // 5. PCS Item 조회 diff --git a/src/main/java/com/interplug/qcast/biz/user/UserMapper.java b/src/main/java/com/interplug/qcast/biz/user/UserMapper.java index 26ea7cb4..73011edc 100644 --- a/src/main/java/com/interplug/qcast/biz/user/UserMapper.java +++ b/src/main/java/com/interplug/qcast/biz/user/UserMapper.java @@ -54,6 +54,33 @@ public interface UserMapper { */ int setUserSave(UserRequest userReqList) throws Exception; + /** + * 판매점 레벨 조회 + * + * @param storeReq + * @return + * @throws Exception + */ + String getStoreLevel(StoreRequest storeReq) throws Exception; + + /** + * 판매점의 정가가격 삭제 + * + * @param storeReq + * @return + * @throws Exception + */ + int deleteStoreUnitPrice(StoreRequest storeReq) throws Exception; + + /** + * 판매점의 정가가격 등록 + * + * @param storeReq + * @return + * @throws Exception + */ + int setStoreUnitPrice(StoreRequest storeReq) throws Exception; + /** * 영업사원 삭제 * diff --git a/src/main/java/com/interplug/qcast/biz/user/UserService.java b/src/main/java/com/interplug/qcast/biz/user/UserService.java index 74bb9e32..64df59c2 100644 --- a/src/main/java/com/interplug/qcast/biz/user/UserService.java +++ b/src/main/java/com/interplug/qcast/biz/user/UserService.java @@ -2,6 +2,7 @@ package com.interplug.qcast.biz.user; import com.interplug.qcast.biz.user.dto.*; import com.interplug.qcast.util.InterfaceQsp; +import io.micrometer.common.util.StringUtils; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -27,10 +28,26 @@ public class UserService { * @throws Exception */ public int setStoreSave(StoreRequest storeReq) throws Exception { + String prevSaleStoreLevel = userMapper.getStoreLevel(storeReq); // 등록된 판매점 레벨 + String saleStoreLevel = + StringUtils.isEmpty(storeReq.getSaleStoreLevel()) ? "" : storeReq.getSaleStoreLevel(); + int resultCnt = userMapper.setStoreSave(storeReq); userMapper.setStoreInfoSave(storeReq); userMapper.setStoreSapCdSave(storeReq); userMapper.setStoreNorthModuleSave(storeReq); + + log.info("setStoreSave ==================> ", prevSaleStoreLevel + ", " + saleStoreLevel); + // 신규 판매점 이거나 1차판매점에서 하위판매점으로 변경된 경우 가격 등록 + if (prevSaleStoreLevel == null + || (!prevSaleStoreLevel.equals(saleStoreLevel) && "1".equals(prevSaleStoreLevel))) { + // 판매점에 등록된 가격 삭제 후 가격 패턴의 아이템 등록 + log.info("setStoreSave prevSaleStoreLevel =================> 시작"); + int deleteCnt = userMapper.deleteStoreUnitPrice(storeReq); + int priceCnt = userMapper.setStoreUnitPrice(storeReq); + log.info( + "setStoreSave prevSaleStoreLevel ==================> 종료" + deleteCnt + ", " + priceCnt); + } return resultCnt; } @@ -70,10 +87,31 @@ public class UserService { // 판매점 동기화 for (StoreRequest storeRequest : storeList) { try { + String prevSaleStoreLevel = userMapper.getStoreLevel(storeRequest); // 등록된 판매점 레벨 + String saleStoreLevel = + StringUtils.isEmpty(storeRequest.getSaleStoreLevel()) + ? "" + : storeRequest.getSaleStoreLevel(); + userMapper.setStoreSave(storeRequest); userMapper.setStoreInfoSave(storeRequest); userMapper.setStoreSapCdSave(storeRequest); userMapper.setStoreNorthModuleSave(storeRequest); + + log.info("setStoreSave ==================> ", prevSaleStoreLevel + ", " + saleStoreLevel); + // 신규 판매점 이거나 1차판매점에서 하위판매점으로 변경된 경우 가격 등록 + if (prevSaleStoreLevel == null + || (!prevSaleStoreLevel.equals(saleStoreLevel) && "1".equals(prevSaleStoreLevel))) { + // 판매점에 등록된 가격 삭제 후 가격 패턴의 아이템 등록 + log.info("setStoreSave prevSaleStoreLevel =================> 시작"); + int deleteCnt = userMapper.deleteStoreUnitPrice(storeRequest); + int priceCnt = userMapper.setStoreUnitPrice(storeRequest); + log.info( + "setStoreSave prevSaleStoreLevel ==================> 종료" + + deleteCnt + + ", " + + priceCnt); + } } catch (Exception e) { log.error(e.getMessage()); } @@ -142,10 +180,28 @@ public class UserService { List storeList = storeSyncResponse.getStoreList(); for (StoreRequest storeRequest : storeList) { + String prevSaleStoreLevel = userMapper.getStoreLevel(storeRequest); // 등록된 판매점 레벨 + String saleStoreLevel = + StringUtils.isEmpty(storeRequest.getSaleStoreLevel()) + ? "" + : storeRequest.getSaleStoreLevel(); + userMapper.setStoreSave(storeRequest); userMapper.setStoreInfoSave(storeRequest); userMapper.setStoreSapCdSave(storeRequest); userMapper.setStoreNorthModuleSave(storeRequest); + + log.info("setStoreSave ==================> ", prevSaleStoreLevel + ", " + saleStoreLevel); + // 신규 판매점 이거나 1차판매점에서 하위판매점으로 변경된 경우 가격 등록 + if (prevSaleStoreLevel == null + || (!prevSaleStoreLevel.equals(saleStoreLevel) && "1".equals(prevSaleStoreLevel))) { + // 판매점에 등록된 가격 삭제 후 가격 패턴의 아이템 등록 + log.info("setStoreSave prevSaleStoreLevel =================> 시작"); + int deleteCnt = userMapper.deleteStoreUnitPrice(storeRequest); + int priceCnt = userMapper.setStoreUnitPrice(storeRequest); + log.info( + "setStoreSave prevSaleStoreLevel ==================> 종료" + deleteCnt + ", " + priceCnt); + } } List userList = storeSyncResponse.getUserList(); diff --git a/src/main/java/com/interplug/qcast/biz/user/dto/StoreRequest.java b/src/main/java/com/interplug/qcast/biz/user/dto/StoreRequest.java index 20af621f..7b93f1e3 100644 --- a/src/main/java/com/interplug/qcast/biz/user/dto/StoreRequest.java +++ b/src/main/java/com/interplug/qcast/biz/user/dto/StoreRequest.java @@ -95,6 +95,9 @@ public class StoreRequest { @Schema(description = "수정자") private String lastEditUser; + @Schema(description = "가격 패턴(1차점 : BOS 랭크, 2차점 : 정가)") + private String pricePattern; + @Schema(description = "북쪽 모듈 여부") private String northModuleFlg; } diff --git a/src/main/resources/mappers/displayItem/displayItemMapper.xml b/src/main/resources/mappers/displayItem/displayItemMapper.xml index b28eb556..f258ae50 100644 --- a/src/main/resources/mappers/displayItem/displayItemMapper.xml +++ b/src/main/resources/mappers/displayItem/displayItemMapper.xml @@ -103,7 +103,7 @@ AND MII.SALT_AFFECTED_FLG = #{saltAffectedFlg} ) TT - ORDER BY TT.DISP_ORDER + ORDER BY TT.DISP_ORDER, TT.ITEM_ID + /* sqlid : com.interplug.qcast.user.getStoreLevel */ + SELECT + SALE_STORE_LEVEL + FROM M_SALES_STORE + WHERE + SALE_STORE_ID = #{saleStoreId} + + + + /* sqlid : com.interplug.qcast.user.deleteStoreUnitPrice */ + DELETE FROM M_SALE_STORE_PRICE + WHERE SALE_STORE_ID = #{saleStoreId} + + + + /* sqlid : com.interplug.qcast.user.setStoreUnitPrice */ + INSERT INTO M_SALE_STORE_PRICE( + SALE_STORE_ID + , ITEM_ID + , COST_PRICE + , SALE_PRICE + , DISP_FLG + , LAST_EDIT_DATETIME + , LAST_EDIT_USER + ) + SELECT #{saleStoreId} + , ITEM_ID + , COST_PRICE + , SALE_PRICE + , '1' + , GETDATE() + , #{lastEditUser} + FROM M_PRICE_PATTERN_MONEY + WHERE PRICE_PATTERN = #{pricePattern} + + /* sqlid : com.interplug.qcast.user.setStoreNorthModuleSave */ MERGE INTO M_SALES_STORE_NORTH_MODULE AS A