견적서 복사 API 개발

This commit is contained in:
LAPTOP-L3VE7KK2\USER 2024-11-19 15:25:42 +09:00
parent e6172117ac
commit 8125c7d4c7
12 changed files with 358 additions and 83 deletions

View File

@ -59,9 +59,9 @@ public class EstimateController {
@Operation(description = "견적서를 복사한다.")
@PostMapping("/save-estimate-copy")
@ResponseStatus(HttpStatus.CREATED)
public EstimateResponse insertEstimateCopy(@RequestBody EstimateRequest estimateRequest)
public EstimateResponse insertEstimateCopy(@RequestBody EstimateCopyRequest estimateCopyRequest)
throws Exception {
return estimateService.insertEstimateCopy(estimateRequest);
return estimateService.insertEstimateCopy(estimateCopyRequest);
}
@Operation(description = "견적서를 엑셀로 다운로드한다.")

View File

@ -30,6 +30,9 @@ public interface EstimateMapper {
// 견적서 지붕재 목록 조회
public List<RoofResponse> selectEstimateRoofList(EstimateRequest estimateRequest);
// 견적서 지붕재 아이템 목록 조회
public List<RoofResponse> selectEstimateRoofItemList(EstimateRequest estimateRequest);
// 견적서 지붕재 PC 목록 조회
public List<RoofResponse> selectEstimateRoofPcList(EstimateRequest estimateRequest);
@ -76,5 +79,5 @@ public interface EstimateMapper {
public int deleteEstimateItemList(EstimateRequest estimateRequest);
// 견적서 복사
public int insertEstimateCopy(EstimateRequest estimateRequest);
public int insertEstimateCopy(EstimateCopyRequest estimateCopyRequest);
}

View File

@ -6,9 +6,8 @@ import com.interplug.qcast.biz.file.FileMapper;
import com.interplug.qcast.biz.file.dto.FileRequest;
import com.interplug.qcast.biz.file.dto.FileResponse;
import com.interplug.qcast.biz.object.ObjectMapper;
import com.interplug.qcast.biz.object.dto.ObjectRequest;
import com.interplug.qcast.biz.object.dto.ObjectResponse;
import com.interplug.qcast.biz.object.dto.PlanRequest;
import com.interplug.qcast.biz.object.dto.PlanResponse;
import com.interplug.qcast.biz.pwrGnrSimulation.PwrGnrSimService;
import com.interplug.qcast.biz.pwrGnrSimulation.dto.PwrGnrSimGuideResponse;
import com.interplug.qcast.biz.pwrGnrSimulation.dto.PwrGnrSimRequest;
@ -50,6 +49,9 @@ public class EstimateService {
@Autowired Messages message;
@Value("${file.ini.root.path}")
private String baseDirPath;
@Value("${qsp.url}")
private String QSP_API_URL;
@ -607,98 +609,186 @@ public class EstimateService {
/**
* 견적서 복사
*
* @param estimateRequest 견적서 복사 정보
* @param estimateCopyRequest 견적서 복사 정보
* @return EstimateResponse 견적서 복사 상세 정보
* @throws Exception
*/
public EstimateResponse insertEstimateCopy(EstimateRequest estimateRequest) throws Exception {
public EstimateResponse insertEstimateCopy(EstimateCopyRequest estimateCopyRequest)
throws Exception {
// Validation
if (StringUtils.isEmpty(estimateRequest.getObjectNo())) {
if (StringUtils.isEmpty(estimateCopyRequest.getObjectNo())) {
throw new QcastException(
ErrorCode.INVALID_INPUT_VALUE,
message.getMessage("common.message.required.data", "Object No"));
}
if (StringUtils.isEmpty(estimateRequest.getPlanNo())) {
if (StringUtils.isEmpty(estimateCopyRequest.getPlanNo())) {
throw new QcastException(
ErrorCode.INVALID_INPUT_VALUE,
message.getMessage("common.message.required.data", "Plan No"));
}
// 응답 객체
EstimateResponse response = new EstimateResponse();
// [1]. 플랜 목록 조회 제약조건 처리 (플랜 10개까지만 등록)
PlanRequest planRequest = new PlanRequest();
planRequest.setObjectNo(estimateRequest.getObjectNo());
List<PlanResponse> planList = objectMapper.selectPlanList(planRequest);
if (planList.size() > 9) {
throw new QcastException(
ErrorCode.INTERNAL_SERVER_ERROR, message.getMessage("common.message.plan.save.limit"));
}
try {
List<ItemRequest> itemList = new ArrayList<ItemRequest>();
List<ItemResponse> estimateItemList = estimateMapper.selectEstimateItemList(estimateRequest);
for (ItemResponse itemResponse : estimateItemList) {
ItemRequest itemRequest = new ItemRequest();
itemRequest.setItemId(itemResponse.getItemId());
itemRequest.setAmount(itemResponse.getAmount());
ObjectRequest objectRequest = new ObjectRequest();
objectRequest.setSaleStoreId(estimateCopyRequest.getCopySaleStoreId());
objectRequest.setReceiveUser(
StringUtils.defaultString(estimateCopyRequest.getCopyReceiveUser()));
objectRequest.setDelFlg("0");
objectRequest.setTempFlg("0");
objectRequest.setTempDelFlg("0");
objectRequest.setUserId(estimateCopyRequest.getUserId());
itemList.add(itemRequest);
}
// [1]. 신규 물건번호 생성
objectMapper.insertObjectNo(objectRequest);
objectRequest.setObjectNo(estimateCopyRequest.getObjectNo());
objectRequest.setCopyObjectNo(objectMapper.selectObjectNo(objectRequest));
// [2]. 아이템 관련 데이터 셋팅 (복사 정가 셋팅)
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);
// [2]. 물건정보 복사
objectRequest.setContentsPath(baseDirPath + "\\\\" + objectRequest.getCopyObjectNo());
objectMapper.insertObjectCopy(objectRequest);
objectRequest.setObjectNo(objectRequest.getCopyObjectNo());
objectMapper.updateObjectDelivery(objectRequest);
int j = 1;
for (ItemRequest itemRequest : itemList) {
itemRequest.setDispOrder(String.valueOf(j++));
// [3]. 아이템 관련 데이터 셋팅 (복사 정가 셋팅)
EstimateRequest estimateRequest = new EstimateRequest();
estimateRequest.setObjectNo(estimateCopyRequest.getObjectNo());
estimateRequest.setPlanNo(estimateCopyRequest.getPlanNo());
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.setItemGroup(itemResponse.getItemGroup());
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");
break;
itemList.add(itemRequest);
}
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());
break;
}
}
}
// [4]. 견적서 복사
estimateCopyRequest.setCopyObjectNo(objectRequest.getObjectNo());
estimateCopyRequest.setCopyPlanNo("1");
estimateMapper.insertEstimateCopy(estimateCopyRequest);
// [5]. 견적서 아이템 복사
for (ItemRequest itemRequest : itemList) {
itemRequest.setObjectNo(estimateCopyRequest.getCopyObjectNo());
itemRequest.setPlanNo(estimateCopyRequest.getCopyPlanNo());
itemRequest.setPartAdd(
!StringUtils.isEmpty(itemRequest.getPartAdd()) ? itemRequest.getPartAdd() : "0");
itemRequest.setItemChangeFlg(
!StringUtils.isEmpty(itemRequest.getItemChangeFlg())
? itemRequest.getItemChangeFlg()
: "0");
itemRequest.setUserId(estimateCopyRequest.getUserId());
estimateMapper.insertEstimateItem(itemRequest);
}
// [6]. 견적서 지붕재 복사
List<RoofResponse> roofList = estimateMapper.selectEstimateRoofList(estimateRequest);
List<RoofResponse> roofItemList = estimateMapper.selectEstimateRoofItemList(estimateRequest);
for (RoofResponse roofResponse : roofList) {
List<RoofResponse> roofItemList2 = new ArrayList<RoofResponse>();
// 현재 매칭되는 지붕재 아이템 축출
for (RoofResponse roofItemResponse : roofItemList) {
if (roofResponse.getRoofNo().equals(roofItemResponse.getRoofNo())) {
roofItemList2.add(roofItemResponse);
}
}
RoofRequest roofRequest = new RoofRequest();
roofRequest.setObjectNo(estimateCopyRequest.getCopyObjectNo());
roofRequest.setPlanNo(estimateCopyRequest.getCopyPlanNo());
roofRequest.setRoofSurface(roofResponse.getRoofSurface());
roofRequest.setRoofMaterialId(roofResponse.getRoofMaterialId());
roofRequest.setSupportMethodId(roofResponse.getSupportMethodId());
roofRequest.setConstructSpecification(roofResponse.getConstructSpecification());
roofRequest.setSlope(roofResponse.getSlope());
roofRequest.setAngle(roofResponse.getAngle());
roofRequest.setClassType(roofResponse.getClassType());
roofRequest.setAzimuth(roofResponse.getAzimuth());
roofRequest.setUserId(estimateCopyRequest.getUserId());
estimateMapper.insertEstimateRoof(roofRequest);
for (RoofResponse roofItemResponse : roofItemList2) {
ItemRequest itemRequest = new ItemRequest();
itemRequest.setRoofNo(roofRequest.getRoofNo());
itemRequest.setObjectNo(estimateCopyRequest.getCopyObjectNo());
itemRequest.setPlanNo(estimateCopyRequest.getCopyPlanNo());
itemRequest.setItemId(roofItemResponse.getItemId());
itemRequest.setItemNo(roofItemResponse.getItemNo());
itemRequest.setItemName(roofItemResponse.getItemName());
itemRequest.setSpecification(roofItemResponse.getSpecification());
itemRequest.setAmount(roofItemResponse.getAmount());
itemRequest.setPcItemId(roofItemResponse.getPcItemId());
itemRequest.setCircuit(roofItemResponse.getCircuit());
estimateMapper.insertEstimateRoofItem(itemRequest);
}
}
// [7]. 견적서 도면 복사 (추후 개발 필요)
// [8]. QSP Q.CAST SEND API
List<EstimateSendResponse> resultList = new ArrayList<EstimateSendResponse>();
estimateRequest.setObjectNo(estimateCopyRequest.getCopyObjectNo());
estimateRequest.setPlanNo(estimateCopyRequest.getCopyPlanNo());
resultList = this.sendEstimateApi(estimateRequest);
// API에서 받은 문서번호 업데이트
for (EstimateSendResponse result : resultList) {
estimateRequest.setObjectNo(result.getObjectNo());
estimateRequest.setPlanNo(result.getPlanNo());
estimateRequest.setDocNo(result.getDocNo());
estimateRequest.setSyncFlg(result.getSyncFlg());
estimateMapper.updateEstimateApi(estimateRequest);
}
} catch (Exception e) {
throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR);
}
// 견적서 복사
estimateMapper.insertEstimateCopy(estimateRequest);
// 견적서 아이템 복사
for (ItemRequest itemRequest : itemList) {
itemRequest.setObjectNo(estimateRequest.getObjectNo());
itemRequest.setPlanNo(estimateRequest.getCopyPlanNo());
itemRequest.setPartAdd(
!StringUtils.isEmpty(itemRequest.getPartAdd()) ? itemRequest.getPartAdd() : "0");
itemRequest.setItemChangeFlg(
!StringUtils.isEmpty(itemRequest.getItemChangeFlg())
? itemRequest.getItemChangeFlg()
: "0");
itemRequest.setUserId(estimateRequest.getUserId());
estimateMapper.insertEstimateItem(itemRequest);
}
// 도면 복사 (추후 개발 필요)
// 리턴
response.setObjectNo(estimateRequest.getObjectNo());
response.setPlanNo(estimateRequest.getCopyPlanNo());
// [9]. 최종 생성 물건번호 리턴
response.setObjectNo(estimateCopyRequest.getCopyObjectNo());
response.setPlanNo(estimateCopyRequest.getCopyPlanNo());
return response;
}

View File

@ -0,0 +1,31 @@
package com.interplug.qcast.biz.estimate.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class EstimateCopyRequest {
@Schema(description = "물건번호")
private String objectNo;
@Schema(description = "플랜번호")
private String planNo;
@Schema(description = "판매점ID")
private String saleStoreId;
@Schema(description = "복사 판매점 ID")
private String copySaleStoreId;
@Schema(description = "복사 물건번호")
private String copyObjectNo;
@Schema(description = "복사 플랜번호")
private String copyPlanNo;
@Schema(description = "복사 담당자명")
private String copyReceiveUser;
@Schema(description = "사용자아이디")
private String userId;
}

View File

@ -156,9 +156,6 @@ public class EstimateRequest {
@Schema(description = "비고")
private String remarks;
@Schema(description = "복사 플랜번호")
private String copyPlanNo;
@Schema(description = "아이템번호 목록")
private String[] arrItemId;

View File

@ -71,6 +71,9 @@ public class ItemRequest {
@Schema(description = "PC 아이템 ID")
private String pcItemId;
@Schema(description = "회로")
private String circuit;
@Schema(description = "W")
private String pnowW;

View File

@ -48,6 +48,9 @@ public class RoofRequest {
@Schema(description = "각도")
private String angle;
@Schema(description = "경사각 선택코드")
private String classType;
@Schema(description = "방위각")
private String azimuth;

View File

@ -77,12 +77,24 @@ public class RoofResponse {
@Schema(description = "아이템 번호")
private String itemNo;
@Schema(description = "아이템명")
private String itemName;
@Schema(description = "W")
private String specification;
@Schema(description = "매수")
private String amount;
@Schema(description = "용량")
private String volKw;
@Schema(description = "PC 아이템 ID")
private String pcItemId;
@Schema(description = "회로")
private String circuit;
@Schema(description = "Pc 모듈 매수")
private String pcModuleAmount;
}

View File

@ -43,6 +43,9 @@ public interface ObjectMapper {
// 물건정보 등록
public int insertObject(ObjectRequest objectRequest);
// 물건정보 복사
public int insertObjectCopy(ObjectRequest objectRequest);
// 물건정보 수정
public int updateObject(ObjectRequest objectRequest);

View File

@ -152,6 +152,9 @@ public class ObjectRequest {
@Schema(description = "검색 - 정렬순서")
private String schSortType;
@Schema(description = "복사 물건번호")
private String copyObjectNo;
// 페이징정보
@Schema(description = "시작 Row")
private String startRow;

View File

@ -291,6 +291,7 @@
, P.PLAN_NO
, ROUND(CAST(P.SETUP_HEIGHT AS FLOAT), 2) AS SETUP_HEIGHT
, P.SURFACE_TYPE
, RE.ROOF_NO
, RE.ROOF_SURFACE
, RE.ROOF_MATERIAL_ID
, RE.SUPPORT_METHOD_ID
@ -319,6 +320,25 @@
AND P.PLAN_NO = #{planNo}
</select>
<select id="selectEstimateRoofItemList" parameterType="com.interplug.qcast.biz.estimate.dto.EstimateRequest" resultType="com.interplug.qcast.biz.estimate.dto.RoofResponse">
/* sqlid : com.interplug.qcast.biz.estimate.selectEstimateRoofList */
SELECT
PIE.ROOF_NO
, PIE.OBJECT_NO
, PIE.PLAN_NO
, PIE.ITEM_ID
, PIE.ITEM_NO
, PIE.ITEM_NAME
, ISNULL(PIE.SPECIFICATION, '') AS SPECIFICATION
, PIE.AMOUNT
, PIE.PC_ITEM_ID
, PIE.CIRCUIT
FROM T_ROOF_ITEM_ESTIMATE PIE WITH (NOLOCK)
WHERE PIE.OBJECT_NO = #{objectNo}
AND PIE.PLAN_NO = #{planNo}
ORDER BY PIE.ROOF_NO
</select>
<select id="selectEstimateRoofPcList" parameterType="com.interplug.qcast.biz.estimate.dto.EstimateRequest" resultType="com.interplug.qcast.biz.estimate.dto.RoofResponse">
/* sqlid : com.interplug.qcast.biz.estimate.selectEstimateRoofPcList */
SELECT
@ -687,6 +707,9 @@
<if test='angle != null and angle != ""'>
, ANGLE
</if>
<if test='classType != null and classType != ""'>
, CLASS_TYPE
</if>
<if test='azimuth != null and azimuth != ""'>
, AZIMUTH
</if>
@ -705,6 +728,9 @@
<if test='angle != null and angle != ""'>
, #{angle}
</if>
<if test='classType != null and classType != ""'>
, #{classType}
</if>
<if test='azimuth != null and azimuth != ""'>
, #{azimuth}
</if>
@ -726,6 +752,7 @@
, SPECIFICATION
, AMOUNT
, PC_ITEM_ID
, CIRCUIT
)
SELECT
#{roofNo} AS ROOF_NO
@ -737,6 +764,7 @@
, I.PNOW_W
, #{amount}
, #{pcItemId}
, #{circuit}
FROM M_ITEM I WITH (NOLOCK)
WHERE I.ITEM_ID = #{itemId}
</insert>
@ -762,12 +790,8 @@
AND PLAN_NO = #{planNo}
</delete>
<insert id="insertEstimateCopy" parameterType="com.interplug.qcast.biz.estimate.dto.EstimateRequest">
<insert id="insertEstimateCopy" parameterType="com.interplug.qcast.biz.estimate.dto.EstimateCopyRequest">
/* sqlid : com.interplug.qcast.biz.estimate.insertEstimateCopy */
<selectKey resultType="String" keyProperty="copyPlanNo" order="BEFORE">
SELECT CAST(ISNULL(MAX(PLAN_NO), 0) + 1 AS NVARCHAR) FROM T_PLAN WITH (NOLOCK) WHERE OBJECT_NO = #{objectNo}
</selectKey>
INSERT INTO T_PLAN
(
OBJECT_NO
@ -813,9 +837,15 @@
, PKG_ASP
, PRICE_CD
, REMARKS
, CONSTRUCT_SPECIFICATION_MULTI
, SURFACE_TYPE
, ANGLE
, SYNC_FLG
, CREATE_DATETIME
, CREATE_USER
)
SELECT
#{objectNo} AS OBJECT_NO
#{copyObjectNo} AS OBJECT_NO
, #{copyPlanNo} AS PLAN_NO
, P.CONSTRUCT_SPECIFICATION
, P.SETUP_HEIGHT
@ -856,8 +886,14 @@
, P.FILE_FLG
, P.ESTIMATE_OPTION
, P.PKG_ASP
, P.PRICE_CD
, 'UNIT_PRICE' AS PRICE_CD
, P.REMARKS
, P.CONSTRUCT_SPECIFICATION_MULTI
, P.SURFACE_TYPE
, P.ANGLE
, '0' AS SYNC_FLG
, GETDATE() AS CREATE_DATETIME
, #{userId} AS CREATE_USER
FROM T_PLAN P WITH (NOLOCK)
WHERE P.OBJECT_NO = #{objectNo}
AND P.PLAN_NO = #{planNo}

View File

@ -491,6 +491,100 @@
)
</insert>
<insert id="insertObjectCopy" parameterType="com.interplug.qcast.biz.object.dto.ObjectRequest">
/* sqlid : com.interplug.qcast.biz.object.insertObjectCopy */
INSERT INTO T_OBJECT
(
OBJECT_NO
, SALE_STORE_ID
, OBJECT_STATUS_ID
, OBJECT_NAME
, OBJECT_NAME_OMIT
, OBJECT_NAME_KANA
, ZIP_NO
, PREF_ID
, ADDRESS
, ADDRESSEE_COMPANY_NAME
, ADDRESSEE_COMPANY_NAME_OMIT
, REMARKS
, SAME_OBJECT_INFO
, RECEIVE_USER
, DELIVERY_HOPE_DATE
, CONSTRUCT_SCHEDULED_DATE
, CAR_KIND_CD
, TRACK_KAIND
, TRACK_10T_DELIVERY
, TRACK_WEIGHT
, TRACK_TIME_SPECIFY
, FORKLIFT
, HOUSE_CLASS_CD
, FIRST_STORE_CHARGER
, CONTENTS_PATH
, DEL_FLG
, CREATE_DATETIME
, CREATE_USER
, LAST_EDIT_DATETIME
, LAST_EDIT_USER
, EDIT_AGENCY
, NORTH_ARRANGEMENT
, AREA_ID
, STANDARD_WIND_SPEED_ID
, VERTICAL_SNOW_COVER
, SURFACE_TYPE
, INSTALL_HEIGHT
, CON_TYPE
, COLD_REGION_FLG
, SALT_AREA_FLG
, TEMP_FLG
, TEMP_DEL_FLG
)
SELECT
#{copyObjectNo} AS OBJECT_NO
, #{saleStoreId} AS SALE_STORE_ID
, OBJECT_STATUS_ID
, OBJECT_NAME
, OBJECT_NAME_OMIT
, OBJECT_NAME_KANA
, ZIP_NO
, PREF_ID
, ADDRESS
, ADDRESSEE_COMPANY_NAME
, ADDRESSEE_COMPANY_NAME_OMIT
, REMARKS
, SAME_OBJECT_INFO
, #{receiveUser} AS RECEIVE_USER
, GETDATE() AS DELIVERY_HOPE_DATE
, GETDATE() AS CONSTRUCT_SCHEDULED_DATE
, CAR_KIND_CD
, TRACK_KAIND
, TRACK_10T_DELIVERY
, TRACK_WEIGHT
, TRACK_TIME_SPECIFY
, FORKLIFT
, HOUSE_CLASS_CD
, #{receiveUser} AS FIRST_STORE_CHARGER
, #{contentsPath} AS CONTENTS_PATH
, #{delFlg} AS DEL_FLG
, GETDATE() AS CREATE_DATETIME
, #{userId} AS CREATE_USER
, GETDATE() AS LAST_EDIT_DATETIME
, #{userId} AS LAST_EDIT_USER
, EDIT_AGENCY
, NORTH_ARRANGEMENT
, AREA_ID
, STANDARD_WIND_SPEED_ID
, VERTICAL_SNOW_COVER
, SURFACE_TYPE
, INSTALL_HEIGHT
, CON_TYPE
, COLD_REGION_FLG
, SALT_AREA_FLG
, #{tempFlg}
, #{tempDelFlg}
FROM T_OBJECT O WITH (NOLOCK)
WHERE O.OBJECT_NO = #{objectNo}
</insert>
<update id="updateObject" parameterType="com.interplug.qcast.biz.object.dto.ObjectRequest">
/* sqlid : com.interplug.qcast.biz.object.updateObject */
UPDATE T_OBJECT