package com.interplug.qcast.biz.master; import com.interplug.qcast.biz.master.dto.*; import com.interplug.qcast.biz.master.dto.construction.ApiConstructionResponse; import com.interplug.qcast.biz.master.dto.moduletype.ApiModuleTpResponse; import com.interplug.qcast.biz.master.dto.pcs.autorecommend.ApiPcsAutoRecommendRequest; import com.interplug.qcast.biz.master.dto.pcs.autorecommend.ApiPcsAutoRecommendResponse; import com.interplug.qcast.biz.master.dto.pcs.maker.ApiPcsMakerResponse; import com.interplug.qcast.biz.master.dto.pcs.series.ApiPcsSeriesItemRequest; import com.interplug.qcast.biz.master.dto.pcs.series.ApiPcsSeriesItemResponse; import com.interplug.qcast.biz.master.dto.quotation.ApiQuotationItemRequest; import com.interplug.qcast.biz.master.dto.quotation.ApiQuotationItemResponse; import com.interplug.qcast.biz.master.dto.roofmaterial.ApiRoofMaterialResponse; import com.interplug.qcast.biz.master.dto.trestle.ApiTrestleResponse; import com.interplug.qcast.biz.master.dto.trestle.detail.ApiTrestleDetailResponse; import com.interplug.qcast.config.Exception.ErrorCode; import com.interplug.qcast.config.Exception.QcastException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/v1/master") @RequiredArgsConstructor @Tag(name = "MasterController", description = "Master API") public class MasterController { private final MasterService masterService; private final QuotationService quotationService; @Operation(description = "지붕재 목록을 조회한다.") @GetMapping("/getRoofMaterialList") public ApiResponse> getRoofMaterialList() { return masterService.getRoofMaterialList(); } @Operation(description = "모듈 타입별 아이템 목록을 조회한다.") @GetMapping("/getModuleTypeItemList") public ApiResponse> getModuleTypeItemList( @Parameter(description = "지붕재 코드 목록") @RequestParam("arrRoofMatlCd") List roofMaterialCd) throws QcastException { if (roofMaterialCd == null || roofMaterialCd.isEmpty() || roofMaterialCd.size() > 4 || roofMaterialCd.stream().anyMatch(s -> s == null || s.trim().isEmpty())) { throw new QcastException(ErrorCode.INVALID_INPUT_VALUE); } return masterService.getModuleTypeItemList(roofMaterialCd); } @Operation(description = "가대 목록 조회한다.") @GetMapping("/getTrestleList") public ApiResponse> getTrestleList( @Parameter(description = "모듈타입코드") @RequestParam(required = false) String moduleTpCd, @Parameter(description = "지붕재코드") @RequestParam(required = false) String roofMatlCd, @Parameter(description = "서까래기초코드") @RequestParam(required = false) String raftBaseCd, @Parameter(description = "가대메이커코드") @RequestParam(required = false) String trestleMkrCd, @Parameter(description = "공법코드") @RequestParam(required = false) String constMthdCd, @Parameter(description = "지붕기초코드") @RequestParam(required = false) String roofBaseCd) { ApiTrestleBuilder apiTrestleInfoBuilder = new ApiTrestleBuilder( moduleTpCd, roofMatlCd, raftBaseCd, trestleMkrCd, constMthdCd, roofBaseCd); ApiTrestleBuilder atb = apiTrestleInfoBuilder .setModuleTpCd(moduleTpCd) .setRoofMatlCdCd(roofMatlCd) .setRaftBaseCd(raftBaseCd) .setTrestleMkrCd(trestleMkrCd) .setConstMthdCd(constMthdCd) .setRoofBaseCd(roofBaseCd) .build(); return masterService.getTrestleList( atb.getModuleTpCd(), atb.getRoofMatlCd(), atb.getRaftBaseCd(), atb.getTrestleMkrCd(), atb.getConstMthdCd(), atb.getRoofBaseCd()); } @Operation(description = "시공법 목록 조회한다.") @GetMapping("/getConstructionList") public ApiResponse> getConstructionList( @Parameter(description = "모듈타입코드") @RequestParam String moduleTpCd, @Parameter(description = "지붕재코드") @RequestParam String roofMatlCd, @Parameter(description = "가대메이커코드") @RequestParam String trestleMkrCd, @Parameter(description = "공법코드") @RequestParam String constMthdCd, @Parameter(description = "지붕기초코드") @RequestParam String roofBaseCd, @Parameter(description = "면조도") @RequestParam String illuminationTp, @Parameter(description = "설치높이") @RequestParam String instHt, @Parameter(description = "풍속") @RequestParam String stdWindSpeed, @Parameter(description = "적설량") @RequestParam String stdSnowLd, @Parameter(description = "경사도코드") @RequestParam String inclCd, @Parameter(description = "서까래기초코드") @RequestParam(required = false) String raftBaseCd, @Parameter(description = "하제(망둥어)피치") @RequestParam(required = false) Integer roofPitch) throws QcastException { if (moduleTpCd == null || moduleTpCd.trim().isEmpty() || roofMatlCd == null || roofMatlCd.trim().isEmpty() || trestleMkrCd == null || trestleMkrCd.trim().isEmpty() || constMthdCd == null || constMthdCd.trim().isEmpty() || roofBaseCd == null || roofBaseCd.trim().isEmpty() || illuminationTp == null || illuminationTp.trim().isEmpty() || instHt == null || instHt.trim().isEmpty() || stdWindSpeed == null || stdWindSpeed.trim().isEmpty() || stdSnowLd == null || stdSnowLd.trim().isEmpty() || inclCd == null || inclCd.trim().isEmpty()) { throw new QcastException(ErrorCode.INVALID_INPUT_VALUE); } ApiConstructionBuilder apiConstructionBuilder = new ApiConstructionBuilder( moduleTpCd, roofMatlCd, trestleMkrCd, constMthdCd, roofBaseCd, illuminationTp, instHt, stdWindSpeed, stdSnowLd, inclCd, raftBaseCd, roofPitch); ApiConstructionBuilder acb = apiConstructionBuilder .setModuleTpCd(moduleTpCd) .setRoofMatlCd(roofMatlCd) .setTrestleMkrCd(trestleMkrCd) .setConstMthdCd(constMthdCd) .setRoofBaseCd(roofBaseCd) .setIlluminationTp(illuminationTp) .setInstHt(instHt) .setStdWindSpeed(stdWindSpeed) .setStdSnowLd(stdSnowLd) .setInclCd(inclCd) .setRaftBaseCd(raftBaseCd) .setRoofPitch(roofPitch) .build(); return masterService.getConstructionList( acb.getModuleTpCd(), acb.getRoofMatlCd(), acb.getTrestleMkrCd(), acb.getConstMthdCd(), acb.getRoofBaseCd(), acb.getIlluminationTp(), acb.getInstHt(), acb.getStdWindSpeed(), acb.getStdSnowLd(), acb.getInclCd(), acb.getRaftBaseCd(), acb.getRoofPitch()); } @Operation(description = "가대 상세 조회한다.") @GetMapping("/getTrestleDetailList") public ApiResponse getTrestleDetailList( @Parameter(description = "모듈타입코드") @RequestParam String moduleTpCd, @Parameter(description = "지붕재코드") @RequestParam String roofMatlCd, @Parameter(description = "가대메이커코드") @RequestParam String trestleMkrCd, @Parameter(description = "공법코드") @RequestParam String constMthdCd, @Parameter(description = "지붕기초코드") @RequestParam String roofBaseCd, @Parameter(description = "면조도") @RequestParam String illuminationTp, @Parameter(description = "설치높이") @RequestParam String instHt, @Parameter(description = "풍속") @RequestParam String stdWindSpeed, @Parameter(description = "적설량") @RequestParam String stdSnowLd, @Parameter(description = "경사도코드") @RequestParam String inclCd, @Parameter(description = "시공법") @RequestParam String constTp, @Parameter(description = "혼합모듈번호") @RequestParam(required = false) Integer mixMatlNo, @Parameter(description = "하제(망둥어)피치") @RequestParam(required = false) Integer roofPitch) throws QcastException { if (moduleTpCd == null || moduleTpCd.trim().isEmpty() || roofMatlCd == null || roofMatlCd.trim().isEmpty() || trestleMkrCd == null || trestleMkrCd.trim().isEmpty() || constMthdCd == null || constMthdCd.trim().isEmpty() || roofBaseCd == null || roofBaseCd.trim().isEmpty() || illuminationTp == null || illuminationTp.trim().isEmpty() || instHt == null || instHt.trim().isEmpty() || stdWindSpeed == null || stdWindSpeed.trim().isEmpty() || stdSnowLd == null || stdSnowLd.trim().isEmpty() || inclCd == null || inclCd.trim().isEmpty() || constTp == null || constTp.trim().isEmpty()) { throw new QcastException(ErrorCode.INVALID_INPUT_VALUE); } ApiTrestleDetailBuilder atdb = ApiTrestleDetailBuilder.builder() .moduleTpCd(moduleTpCd) .roofMatlCd(roofMatlCd) .trestleMkrCd(trestleMkrCd) .constMthdCd(constMthdCd) .roofBaseCd(roofBaseCd) .illuminationTp(illuminationTp) .instHt(instHt) .stdWindSpeed(stdWindSpeed) .stdSnowLd(stdSnowLd) .inclCd(inclCd) .constTp(constTp) .mixMatlNo(mixMatlNo) .roofPitch(roofPitch) .build(); return masterService.getTrestleDetailList( atdb.getModuleTpCd(), atdb.getRoofMatlCd(), atdb.getTrestleMkrCd(), atdb.getConstMthdCd(), atdb.getRoofBaseCd(), atdb.getIlluminationTp(), atdb.getInstHt(), atdb.getStdWindSpeed(), atdb.getStdSnowLd(), atdb.getInclCd(), atdb.getConstTp(), atdb.getMixMatlNo(), atdb.getRoofPitch()); } @Operation(description = "PCS 메이커, 시리즈 조회한다.") @GetMapping("/pcsMakerList") public ApiResponse> getPcsMakerList( @Parameter(description = "PCS 메이커 코드") @RequestParam(required = false) String pcsMkrCd, @Parameter(description = "혼합모듈번호") @RequestParam(required = false) String mixMatlNo) { return masterService.getPcsMakerList(pcsMkrCd, mixMatlNo); } @Operation(description = "PCS 시리즈 아이템 목록을 조회한다.") @PostMapping("/getPcsSeriesItemList") public ApiResponse> getPcsSeriesItemList( @RequestBody ApiPcsSeriesItemRequest pcsSeriesItemListRequest) { return masterService.getPcsSeriesItemList(pcsSeriesItemListRequest); } @Operation(description = "시리즈 중 자동으로 추천 PCS 정보 조회한다.") @PostMapping("/getPcsAutoRecommendList") public ApiResponse getPcsAutoRecommendList( @RequestBody ApiPcsAutoRecommendRequest autoRecommendRequest) { return masterService.getPcsAutoRecommendList(autoRecommendRequest); } /** remote api group : quotation */ @Operation(description = "견적서 아이템을 조회한다.") @PostMapping("/getQuotationItem") public ApiResponse> getQuotationItem( @RequestBody ApiQuotationItemRequest quotationItemRequest) { return quotationService.getQuotationItem(quotationItemRequest); } }