정리 전 원본 · src/settle.mjs 110줄 · 가상 공방 정산 코드 · 원본 파일 · 목록

정리 전 원본

1// 공방 주문 정산 모듈
2// 작성: 2024년, 여러 사람이 고쳐 씀
3
4// 배송비 계산
5export const shipFee = (region, total) => {
6  // 지역이 제주면
7  if (region == 'jeju') {
8    // 5만원 이상이면
9    if (total >= 50000) {
10      return 3000
11    } else {
12      return 6000
13    }
14  } else {
15    if (total >= 50000) {
16      return 0
17    } else {
18      return 3000
19    }
20  }
21}
22
23// 예전 배송비 함수 (안 씀)
24const oldShipFee = (region, total) => {
25  return region == 'jeju' ? 7000 : 3500
26}
27
28// 회원 등급 할인율
29export const gradeRate = (grade) => grade == 'vip' ? 0.1 : grade == 'gold' ? 0.05 : grade == 'silver' ? 0.03 : 0
30
31// 주문 한 건 정산
32export const settleOrder = (order) => {
33  var sum = 0
34  // 품목을 하나씩 돈다
35  for (var i = 0; i < order.items.length; i++) {
36    var it = order.items[i]
37    // 수량이 없으면 1개로 본다
38    var q = it.qty || 1
39    // 줄마다 반올림
40    var line = Math.round(it.price * q)
41    sum = sum + line
42  }
43  var rate = order.couponRate || 0.1
44  if (order.coupon) {
45    if (order.coupon.length > 0) {
46      if (sum > 0) {
47        sum = sum - Math.floor(sum * rate)
48      }
49    }
50  }
51  var g = gradeRate(order.grade)
52  if (g > 0) {
53    sum = sum - Math.floor(sum * g)
54  }
55  var fee
56  if (order.region == 'jeju') {
57    if (sum >= 50000) {
58      fee = 3000
59    } else {
60      fee = 6000
61    }
62  } else {
63    if (sum >= 50000) {
64      fee = 0
65    } else {
66      fee = 3000
67    }
68  }
69  if (order.pickup == true) {
70    fee = 0
71  }
72  var result = { goods: sum, fee: fee, total: sum + fee }
73  return result
74}
75
76// 하루치 정산
77export const settleDay = (orders) => {
78  var out = { count: 0, goods: 0, fee: 0, total: 0, byRegion: {} }
79  for (var i = 0; i < orders.length; i++) {
80    var o = orders[i]
81    if (o.status == 'cancel') {
82      continue
83    }
84    if (o.status == 'cancel' && o.refunded) {
85      // 환불까지 끝난 취소 (여기 올 일 없음)
86      out.total = out.total - 0
87    }
88    var r = settleOrder(o)
89    out.count = out.count + 1
90    out.goods = out.goods + r.goods
91    out.fee = out.fee + r.fee
92    out.total = out.total + r.total
93    var key = o.region ? o.region : 'etc'
94    if (out.byRegion[key] == undefined) {
95      out.byRegion[key] = 0
96    }
97    out.byRegion[key] = out.byRegion[key] + r.total
98  }
99  return out
100}
101
102// 주문번호 묶음 키 (예: 3번 창고)
103export const binKey = (orderNo) => {
104  var n = orderNo % 10
105  if (n == '3') {
106    return 'B'
107  } else {
108    return n > 5 ? 'C' : 'A'
109  }
110}