1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.jpetstore.service;
17
18 import java.util.HashMap;
19 import java.util.List;
20 import java.util.Map;
21
22 import org.mybatis.jpetstore.domain.Item;
23 import org.mybatis.jpetstore.domain.Order;
24 import org.mybatis.jpetstore.domain.Sequence;
25 import org.mybatis.jpetstore.mapper.ItemMapper;
26 import org.mybatis.jpetstore.mapper.LineItemMapper;
27 import org.mybatis.jpetstore.mapper.OrderMapper;
28 import org.mybatis.jpetstore.mapper.SequenceMapper;
29 import org.springframework.stereotype.Service;
30 import org.springframework.transaction.annotation.Transactional;
31
32
33
34
35
36
37 @Service
38 public class OrderService {
39
40
41 private final ItemMapper itemMapper;
42
43 private final OrderMapper orderMapper;
44
45 private final SequenceMapper sequenceMapper;
46
47 private final LineItemMapper lineItemMapper;
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public OrderService(ItemMapper itemMapper, OrderMapper orderMapper, SequenceMapper sequenceMapper,
62 LineItemMapper lineItemMapper) {
63 this.itemMapper = itemMapper;
64 this.orderMapper = orderMapper;
65 this.sequenceMapper = sequenceMapper;
66 this.lineItemMapper = lineItemMapper;
67 }
68
69
70
71
72
73
74
75 @Transactional
76 public void insertOrder(Order order) {
77 order.setOrderId(getNextId("ordernum"));
78 order.getLineItems().forEach(lineItem -> {
79 String itemId = lineItem.getItemId();
80 Integer increment = lineItem.getQuantity();
81 Map<String, Object> param = new HashMap<>(2);
82 param.put("itemId", itemId);
83 param.put("increment", increment);
84 itemMapper.updateInventoryQuantity(param);
85 });
86
87 orderMapper.insertOrder(order);
88 orderMapper.insertOrderStatus(order);
89 order.getLineItems().forEach(lineItem -> {
90 lineItem.setOrderId(order.getOrderId());
91 lineItemMapper.insertLineItem(lineItem);
92 });
93 }
94
95
96
97
98
99
100
101
102
103 @Transactional
104 public Order getOrder(int orderId) {
105 Order order = orderMapper.getOrder(orderId);
106 order.setLineItems(lineItemMapper.getLineItemsByOrderId(orderId));
107
108 order.getLineItems().forEach(lineItem -> {
109 Item item = itemMapper.getItem(lineItem.getItemId());
110 item.setQuantity(itemMapper.getInventoryQuantity(lineItem.getItemId()));
111 lineItem.setItem(item);
112 });
113
114 return order;
115 }
116
117
118
119
120
121
122
123
124
125 public List<Order> getOrdersByUsername(String username) {
126 return orderMapper.getOrdersByUsername(username);
127 }
128
129
130
131
132
133
134
135
136
137 public int getNextId(String name) {
138 Sequence sequence = sequenceMapper.getSequence(new Sequence(name, -1));
139 if (sequence == null) {
140 throw new RuntimeException(
141 "Error: A null sequence was returned from the database (could not get next " + name + " sequence).");
142 }
143 Sequence parameterObject = new Sequence(name, sequence.getNextId() + 1);
144 sequenceMapper.updateSequence(parameterObject);
145 return sequence.getNextId();
146 }
147
148 }