주문관리 > 전체주문조회 > 발주서 엑셀 다운로드

This commit is contained in:
이대환
2026-05-22 14:39:25 +09:00
parent 77fb6d7e19
commit 5a5e9944da
5 changed files with 299 additions and 0 deletions

View File

@@ -238,6 +238,13 @@ public interface BOOrdrMapper {
* @return List<LinkedHashMap> * @return List<LinkedHashMap>
*/ */
public List<LinkedHashMap> selectExcelListByOrder(BOOrdrSrchVO ordrSrchVO); public List<LinkedHashMap> selectExcelListByOrder(BOOrdrSrchVO ordrSrchVO);
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 엑셀다운로드 발주서
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public List<DataMap> selectExcelListPurchOrder(BOOrdrSrchVO ordrSrchVO);
/* #################################### /* ####################################
관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 종료 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 종료
#################################### */ #################################### */

View File

@@ -682,6 +682,15 @@ public class BOOrdrService{
return mapper.selectExcelListByOrder(ordrSrchVO); return mapper.selectExcelListByOrder(ordrSrchVO);
} }
/**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 엑셀다운로드 발주서
* @param ordrSrchVO
* @return List<LinkedHashMap>
*/
public List<DataMap> selectExcelListPurchOrder(BOOrdrSrchVO ordrSrchVO) {
return mapper.selectExcelListPurchOrder(ordrSrchVO);
}
/** /**
* 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 주문내역서 정보 조회 * 관리자 > 주문 > 주문관리 > 전체 주문 조회 > 전체주문 목록 조회 > 주문내역서 정보 조회
* @param ordrVO * @param ordrVO

View File

@@ -48,6 +48,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import java.io.IOException; import java.io.IOException;
import java.math.BigInteger; import java.math.BigInteger;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
/** /**
@@ -622,6 +626,136 @@ public class OrdrmngrController {
} }
} }
/**
* 발주서 엑셀다운로드
* @param response
* @param ordrSrchVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectExcelPoDwldListInqire")
public void selectPurchOrderExcelList(HttpServletResponse response, BOOrdrSrchVO ordrSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
ordrSrchVO.setSopmalCd(authSopmalCd);
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
List<String> headerValues = List.of(
"날짜",
"업체코드",
"업체명",
"업체TEL",
"업체주소",
"특별통관업체명",
"특별통관번호",
"주문번호",
"용도구분",
"수취인",
"수취인TEL",
"수취인HP",
"개인통관고유부호",
"우편번호",
"주소",
"나머지주소",
"메모",
"고객 구입사이트",
"무게",
"포장개수",
"HS CODE",
"상거래유형",
"내용물",
"Unit Value",
"상품개수",
"Value",
"Brand",
"사전식품신고 종류",
"제조국",
"제조회사명",
"중문상품명",
"Shipper 구입사이트",
"판매중개업체명",
"판매중개업체 등록부호",
"구매(배송)대행업체명",
"구매(배송)대행업체 등록부호",
"해외판매자명",
"해외판매자 등록부호",
"사이트 주문번호"
);
for (int i = 0; i < headerValues.size(); i++) {
headerMap.put(String.format("item%02d", i + 1), headerValues.get(i));
}
//엑셀 항목에 출력될 내용 설정
List<DataMap> resultList = service.selectExcelListPurchOrder(ordrSrchVO);
List<Map<String, Object>> excelList = new ArrayList<>();
if (resultList != null) {
for (int i = 0; i < resultList.size(); i++) {
HashMap<String, Object> dataMap = new HashMap<>();
// int cellInt = 1; // 셀 타입 = 숫자
List<Object> dataValues = Arrays.asList(
resultList.get(i).get("ordrRceptDt"),
resultList.get(i).get("entrpsCd"),
resultList.get(i).get("entrpsNm"),
resultList.get(i).get("entrpsTel"),
resultList.get(i).get("entrpsAdres"),
resultList.get(i).get("spclCstmclerEntrps"),
resultList.get(i).get("spclCstmclerCd"),
resultList.get(i).get("ordrInnb"),
resultList.get(i).get("purpsDv"),
resultList.get(i).get("recpntNm"),
resultList.get(i).get("recpntMbtlnb"),
resultList.get(i).get("recpntHp"),
resultList.get(i).get("cstmclerCd"),
resultList.get(i).get("dlvylcZip"),
resultList.get(i).get("dlvylcRnmLnbAdres"),
resultList.get(i).get("dlvylcAdresDtl"),
resultList.get(i).get("dlvyMssageCn"),
resultList.get(i).get("cstmrPurchsSite"),
resultList.get(i).get("realWt"),
resultList.get(i).get("packageCnt"),
resultList.get(i).get("hscode"),
resultList.get(i).get("cmmrcTy"),
resultList.get(i).get("cn"),
resultList.get(i).get("unitValue"),
resultList.get(i).get("ordrQy"),
resultList.get(i).get("value"),
resultList.get(i).get("brand"),
resultList.get(i).get("preFoodDcl"),
resultList.get(i).get("provdNation"),
resultList.get(i).get("provdCmpnyNm"),
resultList.get(i).get("chnlngGoodsNm"),
resultList.get(i).get("shipperPurchsSite"),
resultList.get(i).get("sleAgntEntrpsNm"),
resultList.get(i).get("sleAgntEntrpsRegistCd"),
resultList.get(i).get("purchsDlvyAgencyNm"),
resultList.get(i).get("purchsDlvyAgencyRegistCd"),
resultList.get(i).get("ovseaSelerNm"),
resultList.get(i).get("ovseaSelerRegistCd"),
resultList.get(i).get("siteOrdrInnb")
);
for (int j = 0; j < dataValues.size(); j++) {
dataMap.put(String.format("item%02d", j + 1), dataValues.get(j));
}
excelList.add(dataMap);
}
}
/******************************************************************/
try {
//엑셀생성 및 다운로드
LocalDateTime now = LocalDateTime.now();
String excelFileName = "발주서_";
excelFileName += String.format("%s~%s", ordrSrchVO.getSrchStartDate(), ordrSrchVO.getSrchEndDate()); // 엑셀 다운로드 파일명
String encodedFileName = URLEncoder.encode(excelFileName, StandardCharsets.UTF_8.toString()).replaceAll("\\+", "%20");
ExcelDownloadUtil.createExcel(encodedFileName, headerMap, excelList, response);
} catch (IOException ioe) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", ioe);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
/** /**
* 주문내역서 팝업 화면 이동 * 주문내역서 팝업 화면 이동
* @param model * @param model

View File

@@ -1401,6 +1401,125 @@
GROUP BY A.ORDR_INNB GROUP BY A.ORDR_INNB
) EXCEL ) EXCEL
</select> </select>
<!-- 전체 주문 조회 > 엑셀다운로드 발주서 -->
<select id="selectExcelListPurchOrder" parameterType="com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrdrSrchVO" resultType="dataMap">
SELECT
GO.ORDR_RCEPT_DT,
'UNIHAN' AS ENTRPS_CD,
'UNIHAN CO.,LTD.' AS ENTRPS_NM,
'03-5990-2880' AS ENTRPS_TEL,
'RM.302,YOTSUYA-AKEBONOBASHI BLDG.,2-14, SUMIYOSHI-CHO, SHINJUKU-KU, TOKYO, 162-0065, JAPAN' AS ENTRPS_ADRES,
NULL AS SPCL_CSTMCLER_ENTRPS,
NULL AS SPCL_CSTMCLER_CD,
GO.ORDR_INNB,
1 AS PURPS_DV,
GOS.RECPNT_NM,
GOS.RECPNT_MBTLNB,
NULL AS RECPNT_HP,
GOS.CSTMCLER_CD,
GOS.DLVYLC_ZIP,
CASE
WHEN GOS.DLVYLC_ADRES_DV_CD = '01'
THEN GOS.DLVYLC_RNM_ADRES
ELSE GOS.DLVYLC_LNB_ADRES
END DLVYLC_RNM_LNB_ADRES,
GOS.DLVYLC_ADRES_DTL,
GOS.DLVY_MSSAGE_CN,
'www.sake1jan.com' AS CSTMR_PURCHS_SITE,
GOIO.REAL_WT,
GOIO.PACKAGE_CNT,
GOIO.HSCODE,
'A' AS CMMRC_TY,
CONCAT(GOI.GOODS_NM_EN, ' ', GOIO.OPTN_NM_1, '-', GOIO.OPTN_VAL_1) AS CN,
/*원가 관리 시작*/
GOIO.SLEPRIC,
GOS.DFT_DLVY_AMT,
GGC.CSTMS_FEE,
(
(GOIO.SLEPRIC + GOS.DFT_DLVY_AMT)
* GGC.PLTFOM_FEE
* GGC.EXPCT_TAX
) AS EXPCT_TAX_AMT,
GGC.EXPCT_TAX,
GGC.KR_DLVY_CT,
GGC.PLTFOM_FEE,
GGC.USD_RATE,
TRUNCATE(
(
(
(GOIO.SLEPRIC + GOS.DFT_DLVY_AMT)
- (
GGC.CSTMS_FEE
+ (GOIO.SLEPRIC + GOS.DFT_DLVY_AMT)
* GGC.PLTFOM_FEE
* GGC.EXPCT_TAX
+ GGC.KR_DLVY_CT
)
) * GGC.USD_RATE / 1000
), 2
) AS UNIT_VALUE,
/*원가 관리 종료*/
GOIO.ORDR_QY,
(
TRUNCATE(
(
(
(GOIO.SLEPRIC + GOS.DFT_DLVY_AMT)
- (
GGC.CSTMS_FEE
+ (GOIO.SLEPRIC + GOS.DFT_DLVY_AMT)
* GGC.PLTFOM_FEE
* GGC.EXPCT_TAX
+ GGC.KR_DLVY_CT
)
) * GGC.USD_RATE / 1000
), 2
) * GOIO.ORDR_QY
) AS VALUE,
NULL AS BRAND,
NULL AS PRE_FOOD_DCL,
NULL AS PROVD_NATION,
NULL AS PROVD_CMPNY_NM,
NULL AS CHNLNG_GOODS_NM,
NULL AS SHIPPER_PURCHS_SITE,
NULL AS SLE_AGNT_ENTRPS_NM,
NULL AS SLE_AGNT_ENTRPS_REGIST_CD,
NULL AS PURCHS_DLVY_AGENCY_NM,
NULL AS PURCHS_DLVY_AGENCY_REGIST_CD,
NULL AS OVSEA_SELER_NM,
GOS.ORDR_DLVY_INNB AS OVSEA_SELER_REGIST_CD,
CONCAT(GO.SUBSVC_AT, GOS.DLVYLC_AREA_CD, GOS.ORDR_DLVY_INNB) AS SITE_ORDR_INNB,
/*아래부터는 발주서에 포함되지 않음*/
GO.ORDR_STTUS_CD,
GOI.ORDR_GOODS_INNB,
GOI.GOODS_INNB,
GOI.GOODS_NM,
GOIO.ORDR_GOODS_OPTN_INNB,
GOIO.GOODS_OPTN_INNB,
GOS.DLVYLC_AREA_CD,
GGC.STDR_DE
FROM GC_ORDER GO
INNER JOIN GC_ORDER_ITEM GOI
ON GOI.ORDR_INNB = GO.ORDR_INNB
AND GOI.SOPMAL_CD = GO.SOPMAL_CD
INNER JOIN GC_ORDER_ITEM_OPTION GOIO
ON GOIO.ORDR_GOODS_INNB = GOI.ORDR_GOODS_INNB
AND GOIO.SOPMAL_CD = GOI.SOPMAL_CD
INNER JOIN GC_ORDER_SHIPPING GOS
ON GOS.ORDR_DLVY_INNB = GOIO.ORDR_DLVY_INNB
AND GOS.SOPMAL_CD = GOIO.SOPMAL_CD
LEFT JOIN GC_GOODS_COST GGC
ON GGC.STDR_DE = (
SELECT MAX(GGC.STDR_DE)
FROM GC_GOODS_COST GGC
WHERE GGC.STDR_DE <![CDATA[<=]]> GO.ORDR_RCEPT_DT
)
WHERE 1 = 1
AND GO.ORDR_RCEPT_DT BETWEEN #{srchStartDate} AND #{srchEndDate} ' 23:59:59'
AND GOIO.ORDR_STTUS_CD = #{srchOrdrSttusCd}
AND GO.SOPMAL_CD = #{sopmalCd}
</select>
<!-- <!--
#################################### ####################################
전체주문 조회 서비스 종료 전체주문 조회 서비스 종료

View File

@@ -449,6 +449,26 @@
fn_go_ordr_dtstmn_dwld_popup(ordrInnbs) fn_go_ordr_dtstmn_dwld_popup(ordrInnbs)
}); });
/*
* 열 헤더 > 엑셀 발주서 다운로드 버튼 클릭 이벤트
*/
$(document).on('click', '.excel-dwld-purch-order', function() {
const srchStartDate = $('#srchStartDate').val();
const srchEndDate = $('#srchEndDate').val();
const srchOrdrSttusCd = '35';
var form = $('#condForm').clone().prop("id", "excelCondForm")
$(form).append($('<input/>', {type:'hidden', name:'srchOrdrSttusCd', value:srchOrdrSttusCd}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/mngr/ordr/ordrmngr/selectExcelPoDwldListInqire"/>');
$(form).appendTo('body');
$(form).submit();
$(form).remove();
});
/* /*
* 열 > 중요주문 버튼 클릭 이벤트 * 열 > 중요주문 버튼 클릭 이벤트
*/ */
@@ -770,6 +790,11 @@
} }
header += ' <button type="button" class="btn-order-print-' + data.ordrSttusCd + ' btn outline xsm fs-13"><i class="icon icon_print"></i>프린트</button>'; header += ' <button type="button" class="btn-order-print-' + data.ordrSttusCd + ' btn outline xsm fs-13"><i class="icon icon_print"></i>프린트</button>';
if ('35' === data.ordrSttusCd) {
header += ' <button type="button" class="btn sm outline fs-13 excel-dwld-purch-order">';
header += ' <i class="icon icon_excel"></i>발주서 다운로드';
header += ' </button>';
}
header += ' <div class="order-step__wrapper">'; header += ' <div class="order-step__wrapper">';
header += ' <button type="button" class="btn outline xsm fs-13 order-open-all">모두열기</button>'; header += ' <button type="button" class="btn outline xsm fs-13 order-open-all">모두열기</button>';
header += ' <div class="order-step ' + ordrSttus + '">'; header += ' <div class="order-step ' + ordrSttus + '">';
@@ -1362,6 +1387,11 @@
/* footer += ' <button type="button" id="ordrSttus85" class="btn-' + currTr + ' btn gray xsm">결제취소</button>'; */ /* footer += ' <button type="button" id="ordrSttus85" class="btn-' + currTr + ' btn gray xsm">결제취소</button>'; */
} }
footer += ' <button type="button" class="btn-order-print-' + data.ordrSttusCd + ' btn outline xsm fs-13"><i class="icon icon_print"></i>프린트</button>'; footer += ' <button type="button" class="btn-order-print-' + data.ordrSttusCd + ' btn outline xsm fs-13"><i class="icon icon_print"></i>프린트</button>';
if ('35' === prevOrderSttusCd) {
footer += ' <button type="button" class="btn sm outline fs-13 excel-dwld-purch-order">';
footer += ' <i class="icon icon_excel"></i>발주서 다운로드';
footer += ' </button>';
}
footer += ' </div>'; footer += ' </div>';
footer += ' <div class="center"></div>'; footer += ' <div class="center"></div>';
footer += ' <div class="right">'; footer += ' <div class="right">';