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 @Service
36 public class OrderService {
37
38
39 private final ItemMapper itemMapper;
40
41 private final OrderMapper orderMapper;
42
43 private final SequenceMapper sequenceMapper;
44
45 private final LineItemMapper lineItemMapper;
46
47
48
49
50
51
52
53
54
55
56
57
58
59 public OrderService(ItemMapper itemMapper, OrderMapper orderMapper, SequenceMapper sequenceMapper,
60 LineItemMapper lineItemMapper) {
61 this.itemMapper = itemMapper;
62 this.orderMapper = orderMapper;
63 this.sequenceMapper = sequenceMapper;
64 this.lineItemMapper = lineItemMapper;
65 }
66
67
68
69
70
71
72
73 @Transactional
74 public void insertOrder(Order order) {
75 order.setOrderId(getNextId("ordernum"));
76 order.getLineItems().forEach(lineItem -> {
77 String itemId = lineItem.getItemId();
78 Integer increment = lineItem.getQuantity();
79 Map<String, Object> param = new HashMap<>(2);
80 param.put("itemId", itemId);
81 param.put("increment", increment);
82 itemMapper.updateInventoryQuantity(param);
83 });
84
85 orderMapper.insertOrder(order);
86 orderMapper.insertOrderStatus(order);
87 order.getLineItems().forEach(lineItem -> {
88 lineItem.setOrderId(order.getOrderId());
89 lineItemMapper.insertLineItem(lineItem);
90 });
91 }
92
93
94
95
96
97
98
99
100
101 @Transactional
102 public Order getOrder(int orderId) {
103 Order order = orderMapper.getOrder(orderId);
104 order.setLineItems(lineItemMapper.getLineItemsByOrderId(orderId));
105
106 order.getLineItems().forEach(lineItem -> {
107 Item item = itemMapper.getItem(lineItem.getItemId());
108 item.setQuantity(itemMapper.getInventoryQuantity(lineItem.getItemId()));
109 lineItem.setItem(item);
110 });
111
112 return order;
113 }
114
115
116
117
118
119
120
121
122
123 public List<Order> getOrdersByUsername(String username) {
124 return orderMapper.getOrdersByUsername(username);
125 }
126
127
128
129
130
131
132
133
134
135 public int getNextId(String name) {
136 Sequence sequence = sequenceMapper.getSequence(new Sequence(name, -1));
137 if (sequence == null) {
138 throw new IllegalArgumentException(
139 "Error: A null sequence was returned from the database (could not get next " + name + " sequence).");
140 }
141 Sequence parameterObject = new Sequence(name, sequence.getNextId() + 1);
142 sequenceMapper.updateSequence(parameterObject);
143 return sequence.getNextId();
144 }
145
146 }