식자재(2) 나라장터 입찰계산기 정보
식자재(2) 나라장터 입찰계산기본문
사진처럼 예시로 입력을 해보았습니다. 추첨번호는 추천입찰가와 가장 가까운 추첨번호로를 골라서 사용자에게 보여줍니다. 또 식자재 종류별로 입력할 수 있고 결과는 각 시트별로 구분이 되어서 저장이됩니다.
// 입찰 정보 시트
const bidInfoSheet = XLSX.utils.json_to_sheet([{
"사업금액": calculationResults.businessAmount,
"배정예산": calculationResults.allocatedBudget,
"추정가격": calculationResults.estimatedPrice,
"낙찰하한율": calculationResults.lowestBidRate,
"예상 경쟁 업체 수": calculationResults.expectedCompetitors,
"전 업체 낙찰 투찰율": calculationResults.previousWinningRate || "N/A",
"사용자 지정 투찰율": calculationResults.customBidRate || "N/A",
"평균 예정가격": calculationResults.averageEstimatedPrice,
"추천 입찰가": calculationResults.recommendedBid,
"추천 투찰율": calculationResults.recommendedBidRate,
"낙찰 확률": calculationResults.winningProbability,
"사용자 지정 입찰가": calculationResults.userCustomBid || "N/A",
"사용자 지정 투찰율": calculationResults.userCustomBidRate || "N/A"
}]);
XLSX.utils.book_append_sheet(workbook, bidInfoSheet, "입찰 정보");
// 예가 범위 시트
const priceRangesSheet = XLSX.utils.json_to_sheet(
calculationResults.prices.map((price, index) => ({
"번호": index + 1,
"가격": price
}))
);
XLSX.utils.book_append_sheet(workbook, priceRangesSheet, "예가 범위");
// 추첨예가 범위 시트
const drawnPriceRangesSheet = XLSX.utils.json_to_sheet(
calculationResults.drawnPriceRanges.map((range, index) => ({
"범위 번호": index + 1,
"최소값": range.min,
"최대값": range.max
}))
);
XLSX.utils.book_append_sheet(workbook, drawnPriceRangesSheet, "추첨예가 범위");
// 추천 추첨번호 시트
const recommendedNumbersSheet = XLSX.utils.json_to_sheet([{
"추천 추첨번호": calculationResults.recommendedNumbers.join(", ")
}]);
XLSX.utils.book_append_sheet(workbook, recommendedNumbersSheet, "추천 추첨번호");
// 식자재 항목 시트 (있는 경우에만)
if (calculationResults.items) {
const itemsSheet = XLSX.utils.json_to_sheet(calculationResults.items);
XLSX.utils.book_append_sheet(workbook, itemsSheet, "식자재 항목");
// 수익성 분석 시트
const profitAnalysisSheet = XLSX.utils.json_to_sheet([{
"총 원가": calculationResults.totalCost,
"예상 순이익": calculationResults.estimatedProfit,
"예상 순이익률": calculationResults.estimatedProfitRate
}]);
XLSX.utils.book_append_sheet(workbook, profitAnalysisSheet, "수익성 분석");
}
// 엑셀 파일 생성 및 다운로드
XLSX.writeFile(workbook, '입찰전략_결과.xlsx');
});
위 처럼 구성되어있어요. 오프라인환경에서 작동할걸 염려해서. 우선 HTML으로 작성해서 클라이언트 사이드에서 모든 작업이 이루어지도록 하였습니다. 아마 저는 업무상 여기서 php로 코드변환해서 서버사이드에서 각 항목들이 DB에 저장되어서 과거기록을 확인하고 보다 정확한 입찰분석을 위해 모든걸 비교 후 정보를 제공하는 그런 차후 작업을 나중에 하게 될거같습니다.
몇번 시행착오를 거듭해서 완성이 되었다 싶으면 완성본으로 회원분들께 공유될거같습니다.
!-->
추천
3
3
베스트댓글
@nekoieye 연락한번 드리고 싶은데, 비공개 해두셔서 쪽지가 안되네요.
저한테 쪽지한번 요청드려요.
댓글 2개
고생하셨습니다.
@nekoieye 연락한번 드리고 싶은데, 비공개 해두셔서 쪽지가 안되네요.
저한테 쪽지한번 요청드려요.