본문으로 바로가기

목재 사이계산법 과 목재DIY

category IT를보다/쇼핑몰 2016.08.26 01:15

글제목이 좀 웃기기도하네요. 웹프로그래머를 위한 목재DIY와 절단 서비스. 요샌 내집을 자신이 직접 손수 꾸미는 분들이 많이 계시나봅니다. DIY라는 단어가 고유명사 처럼 되어버렸네요? 전 손재주가 없서서 DIY와는 친하지않습니다. 그래서 직접 책상을 만든다던가 탁자를 만든던가는 생각도 못하죠. 이번에 회사에서 관리하고있는 서브 쇼핑몰 사이트에서 목재diy 절단서비스 페이지를 오픈했습니다. 바로 이전 작업이 커스텀 알루미늄 프로파일을 주문할 수 있는 페이지를 만들었는데요? 이역시 DIY족? 들이 많이 보고 주문했으면 하고 만든 페이지입니다. 


전 알루미늄 프로파일이니 후가공절단이니 하나는 단어들을 웹페이지 작업하면서 처음들어봤습니다. 이런것에 관심이 있다면 한번쯤 들어봤을텐데 ...쿨럭~


이젠 목재DIY 주문페이지를 개발하는 개발자들을 위해서 썰~?을 조금 풀어봅니다. 아래 이미지는 프로파일 주문 페이지이고 그 결과물입니다. DB는 기존 쇼핑몰 카테고리가 아니라 프로파일 전용 카테고리와 연관 상품테이블을 새로 만들었습니다. 어려운말 같은데 DataBase에다가 테이블 한두개 더 만들었다는 말입니다. 화면은 Jquery를 이용하여서 기존 장바구니와는 조금 다른 UI로 만들었습니다.  


알루미늄 프로파일 주문해보기

알루미늄 프로파일 주문페이지는 기존 상품에 특화된 주문페이지라는 점을 빼면 특별한건 없습니다. 주문페이지를 개발하기전 사전공부를많이 해야하는건 목재DIY 페이지입니다. 일단 결과물입니다.


목재DIY주문페이지


UI SCRIPT작업은 프로파일작업 보다 적습니다. 그러나 목재는 사용자가 주문하길원하는 폭,길이를 입력한대로 주문을 받을 수 있어야합니다. 당연한 이야기네요 --;

나무종류(수종)별로 두께가 조금씩 다릅니다. 목재 납품가격에 사이당 가격이 입력값마다 다르다는 의미입니다. "사이"라는 단어가 나왔는데 밑에서 더 설명을 할텐데 목재 분야에서 통용되고있는 부피 단위입니다. 그냥 부피라고하지 이렇게 "사이"라는 나름의 단위가 있는 이유가 있나 봅니다. 전통일 수 도 있구요. 

또한 후가공별로 가공비가 다릅니다. 후가공중 원형타공을 선택했을 경우 지름길이도 사용자에게 같이 받으면 좋겠지요? 절단서비스만 주문금액 셋팅하는것도 사실 복잡합니다. 목재는 원장이라는것이 있는데 쉽게 이야기하면 목재판대기 하나입니다. 가로 세로길이가각각 1200mm * 24000mm가 원장이라고 하는 크기입니다. 절단할때  특정 넒이가 넘어가면 원장을 새로 가져와서 절단해야하기 때문에 또 과금을해줘야 겠죠? 또한 절단 숫자 만큰 과금을 해야하고요. (절단인건비)  10~20개 대량주문하면 이제 배송비도 달라지게 됩니다. 왜냐하면 택배비 2500원 에 10kg짜리 목재를 배송해주는 택배사는 없거든요 그래서 택배사별로 무게별 배송비 부과 테이블이 있습니다. 그래서 목재주문시 무게까지 계산을 해줘야 정확한 배송비를 사용자에게 부과할수가 있습니다. 무게 뿐이 아닙니다. 길이가 1100mm * 11000mm를 주문했다고하면 1m가 넘는건데요? 택배사별로 또 일정 넓이가 넘어가면 배송비 부과하는 방식이 또 다릅니다. ㅋㅋ

그래서 사용자가 입력한 폭,길이에 따라서 정확한 배송비를 계산하려면 주문목재 무게뿐만아니라 넓이도 계산해서 부과해야합니다. 

그런대 또 골때리는게 수종별(나무종류별)로 비중이 다릅니다.  비중이 다르다는 의미는? 같은 두께,길이,폭 을 주문하더라도 어떤 수종은 무게가 달라줄수 있다는것이죠. ㅎㅎㅎ; 글로 설명하니 고려해야할 변수둘이 어마어마 하네요. 이 페이지를 만들면서 이분야 메이저 온라인몰이라할만곳 이솔우드,문고리닷컴,철전지 등 사이트를 벤치마킹을 했는데 이모든 변수를 모두고려하여 가격 계산을 하는곳은 없더군요. 계산 방법도 javascript에서 처리하느냐 db에서 처리하느냐 등 방식이 조금씩 달랐습니다. 저는 기본 data는 db에 넣어놓았습니다. 그래서 사용자가선택한 목재별 사이당단가를 미리 db에 저장을 해놓고 이값을 이용해서 javascript 에서 계산하는 방식으로 만들었습니다. 더이상 글로 하다가는 괜히 복잡하게만 느껴지는것 같습니다.


더 복잡해질것 같으니 꼭 알아야할 핵심 사항만 정리합니다. 

일단 부피를 사이로 변환하는 사이단위환산법을 알아야합니다.

1사이는 목재계통에서는 1치(30.3mm)x1치(30.3mm)x12자(3,636mm) 입니다. 이런게 있다고만알면됩니다. 우리는 어쨌든 최종 계산된 사이당 부피가 3,338,175㎥ 라는 사실만 알면됩니다. 이게 부피가 중요합니다. 공식처럼 


1사이 = 3,338,176㎥  입니다.


자 이제 바로 문제를 내본다면 삼나무 12mm 두께 원장(1200mm*2400mm)을 사이로 환산하면? 10.4 사이 입니다. 다음문제 삼나무 15mm두께에 원장길이를 사이로 환산하면? 12.9사이 입니다.

또 문제입니다. 삼나무 24mm두께에 원장길이를 사이로 환산하면? 15.5사이 입니다.  1사이인 부피 3,338,176㎥를 기준으로 하는 나눗셈입니다. 

이제 납품가를 알면 목재 사이당 가격이 계산될 수 있습니다. 

문제입니다. 삼나무 12mm 두께 원장 납품가가 88,260원입니다. 원장기준으로 사이당 가격은 얼마일까요?  8486.538462원 입니다. 계산되시나요?  납품가를 알고있으면 원장기준으로 사이당 가격을 계산할 수있으니 사이당 가격이 결정됩니다. 이제 사용자가 선택한 수종별 두께,그리고 폭,넓이를 입력받아서 이것을 사이단위로만 환산해주면? 사이당가격 * 사용자입력한 사이 = 목재금액이 되는거겠죠?


위의 엑셀표에서 원장기준사이 환산과 사이당 가격이 쭈욱 계산되어 정리되어있습니다. 살펴보세요. 물론 수종 별로 납품가는 다르겠지요 택배비도 다르고요. 컷비(절단비)도 다를 수도 있고요. 

이 수치를 저는 wood_price라는 테이블에 그대로 db에 저장해놓았습니다. 이젠 사용자가 선택한 수종 두께의 사이당 가격만 알면 사용자가 입력한 길이의 목재가격을 산출할 수 있게되었습니다.


실제페이지에서사용하는 javascript 사이환산 함수입니다.

/*

T,W,L을 목재 사이 단위로 환산해주는 함수,

1sai=3338175mmm(부피)

부피/1sai당부피=사이단위추출(소수둘째반올림)   , 기존 엑셀쉬트 계산결과와 원단위 계산이 안맞아 5짜리까지로 하고 정확성을 높임

*/

function volumeToSai(t,w,l){

var volum=t*w*l;

var saivolum=3338175;

var tmpsai=volum/saivolum;

var sai=roundPrecision(tmpsai,5);

return sai;

}


아래함수는 무게로 환산해주는 javascript 함수입니다. 나중에 필요할 가능성이 많습니다.

/**

목재 무게 계산 

KG=가로(m)*세로(m)*두께(mm)*0.6(비중)

@param: T,W,L 매개변수는 모두 mm 단위로 받는다. 

*/

function volumeToWeight(t,w,l)

{

var wm=w*0.001;

var lm=l*0.001;

var tm=t;

var weight=wm*lm*tm*0.6;

weight=roundPrecision(weight,2);

return weight;

}


반올림이나 절사는 정책이니 정한대로 구현하려면 이런 함수도 필요합니다.  설정한 자릿수까지 출력해주는 javascript함수입니다.

function roundPrecision(val,precision)

{

var p=Math.pow(10,precision);

return Math.round(val*p)/p;

}


1.사용자가 수종을 선택하면 ajax로 해당 수종의 주문가능 두께를 가져옵니다

2.사용자가 두께를 선택하면 ajax로 해당 수종,두께의 목재 사이당 가격을 가져와 hidden값에 셋팅합니다.

3.사용자가 폭, 넓이를 입력하면 위의 volumToSai()함수로 사이단위를 계산해서  사용자가 입력한사이 * 사이당 단가= 목재단가! 입니다.

나머지는 이제 후가공과 컷비그리고 배송비 입니다. 후가공 과 컷비는 셋팅한데로 금액을 설정해놓고 사용자가 선택하면 결제금액을 sum 해줍니다. 처음 이야기한것처럼 배송비는 조금 복잡한다. 가장쉬운방법은 원장 단위로 4천원 받으면 가장 쉽습니다. 업체와 조율해서. ㅋㅋ

그러나 객단가나 주문건수가 많아지면 절단업체와 어쩌고 저쩌고 조율이될것이 틀림없으니 우리개발자는 무게별,길이별 배송비를 준비하고 있어야 정신건강에 좋습니다. 괜찮아요 우리에겐 volumToWeight()가 있으니깐요.


설명하니 길어졌는데 복잡한것보다는 변수가 많을 뿐입니다. 또하나 추가하자면 후가공을 선택할 수 있는 조합도 있을 수 있습니다. 라운드 가공과 원형타공은 함께 주문이 안됩니다. 등등 이런 후가공 선택 조합이 있는데 이것도 적용하려면 준비를 해야합니다. 


계산할때 순수목재주문금액 + 컷비(재단비)금액 +  후가공비 금액 으로 따로따로 변수를 사용해서 계산하세요 그래야 나중에 출력할때도 편하고 유동적으로 변할때 대응하기 편합니다. 물론 총 결제금액은 모든 항목의 sum이겠지요?  특히 200~300개 대량 주문시 재단비는 200개까지만 부과하는 경우도 생기고 변수들이 많거든요.


목재 필요하신분 여기서 주문해보시지요? 

목재주문

저작자 표시
신고

댓글을 달아 주세요