| Line 38... |
Line 38... |
| 38 |
import javax.servlet.http.HttpServletRequest;
|
38 |
import javax.servlet.http.HttpServletRequest;
|
| 39 |
import java.time.LocalDate;
|
39 |
import java.time.LocalDate;
|
| 40 |
import java.time.LocalDateTime;
|
40 |
import java.time.LocalDateTime;
|
| 41 |
import java.util.ArrayList;
|
41 |
import java.util.ArrayList;
|
| 42 |
import java.util.List;
|
42 |
import java.util.List;
|
| - |
|
43 |
import java.util.Map;
|
| - |
|
44 |
import java.util.Set;
|
| - |
|
45 |
import java.util.HashSet;
|
| - |
|
46 |
import java.util.function.Function;
|
| 43 |
import java.util.stream.Collectors;
|
47 |
import java.util.stream.Collectors;
|
| 44 |
|
48 |
|
| 45 |
@Controller
|
49 |
@Controller
|
| 46 |
@Transactional(rollbackFor = Throwable.class)
|
50 |
@Transactional(rollbackFor = Throwable.class)
|
| 47 |
public class CustomerController {
|
51 |
public class CustomerController {
|
| Line 193... |
Line 197... |
| 193 |
|
197 |
|
| 194 |
int userId = (int) request.getAttribute("userId");
|
198 |
int userId = (int) request.getAttribute("userId");
|
| 195 |
UserCart uc = userAccountRepository.getUserCart(userId);
|
199 |
UserCart uc = userAccountRepository.getUserCart(userId);
|
| 196 |
|
200 |
|
| 197 |
List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
|
201 |
List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
|
| 198 |
List<Integer> catalogIds = new ArrayList<>();
|
- |
|
| 199 |
List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByFofoId(uc.getUserId(), offset, limit);
|
202 |
List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByFofoId(uc.getUserId(), offset, limit);
|
| 200 |
|
203 |
|
| 201 |
if (!fofoOrders.isEmpty()) {
|
204 |
if (fofoOrders.isEmpty()) {
|
| - |
|
205 |
return responseSender.ok(customerOrderDetails);
|
| - |
|
206 |
}
|
| - |
|
207 |
|
| - |
|
208 |
// Filter out cancelled orders
|
| 202 |
for (FofoOrder fo : fofoOrders) {
|
209 |
List<FofoOrder> activeOrders = fofoOrders.stream()
|
| 203 |
if (fo.getCancelledTimestamp() == null) {
|
210 |
.filter(fo -> fo.getCancelledTimestamp() == null)
|
| - |
|
211 |
.collect(Collectors.toList());
|
| - |
|
212 |
|
| - |
|
213 |
if (activeOrders.isEmpty()) {
|
| - |
|
214 |
return responseSender.ok(customerOrderDetails);
|
| - |
|
215 |
}
|
| - |
|
216 |
|
| - |
|
217 |
// Batch fetch all order items for all orders at once
|
| - |
|
218 |
List<Integer> orderIds = activeOrders.stream().map(FofoOrder::getId).collect(Collectors.toList());
|
| 204 |
List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fo.getId());
|
219 |
List<FofoOrderItem> allOrderItems = fofoOrderItemRepository.selectByOrderIds(orderIds);
|
| - |
|
220 |
Map<Integer, List<FofoOrderItem>> orderItemsByOrderId = allOrderItems.stream()
|
| - |
|
221 |
.collect(Collectors.groupingBy(FofoOrderItem::getOrderId));
|
| 205 |
|
222 |
|
| - |
|
223 |
// Batch fetch all customers
|
| - |
|
224 |
List<Integer> customerIds = activeOrders.stream().map(FofoOrder::getCustomerId).distinct().collect(Collectors.toList());
|
| 206 |
Customer customer = customerRepository.selectById(fo.getCustomerId());
|
225 |
Map<Integer, Customer> customerMap = customerRepository.selectAllByIds(customerIds).stream()
|
| - |
|
226 |
.collect(Collectors.toMap(Customer::getId, Function.identity()));
|
| - |
|
227 |
|
| - |
|
228 |
// Batch fetch all customer addresses
|
| - |
|
229 |
List<Integer> addressIds = activeOrders.stream().map(FofoOrder::getCustomerAddressId).distinct().collect(Collectors.toList());
|
| - |
|
230 |
Map<Integer, CustomerAddress> addressMap = customerAddressRepository.selectAllByIds(addressIds).stream()
|
| - |
|
231 |
.collect(Collectors.toMap(CustomerAddress::getId, Function.identity()));
|
| - |
|
232 |
|
| - |
|
233 |
// Batch fetch all items
|
| - |
|
234 |
Set<Integer> itemIds = allOrderItems.stream().map(FofoOrderItem::getItemId).collect(Collectors.toSet());
|
| - |
|
235 |
Map<Integer, Item> itemMap = itemRepository.selectByIds(new ArrayList<>(itemIds)).stream()
|
| - |
|
236 |
.collect(Collectors.toMap(Item::getId, Function.identity()));
|
| - |
|
237 |
|
| - |
|
238 |
// Batch fetch all line items
|
| - |
|
239 |
Set<Integer> orderItemIds = allOrderItems.stream().map(FofoOrderItem::getId).collect(Collectors.toSet());
|
| - |
|
240 |
List<FofoLineItem> allLineItems = fofoLineItemRepository.selectByFofoOrderItemIds(orderItemIds);
|
| - |
|
241 |
Map<Integer, List<FofoLineItem>> lineItemsByOrderItemId = allLineItems.stream()
|
| - |
|
242 |
.collect(Collectors.groupingBy(FofoLineItem::getFofoOrderItemId));
|
| - |
|
243 |
|
| - |
|
244 |
// Fetch customer offers once outside the loops
|
| - |
|
245 |
Map<Integer, List<CustomerOffer>> customerOffersMap = customerOfferRepository.getCustomerOffer(LocalDate.now().atStartOfDay());
|
| - |
|
246 |
List<CustomerOffer> customerOffers = customerOffersMap.get(uc.getUserId());
|
| - |
|
247 |
List<Integer> offerIds = (customerOffers != null && !customerOffers.isEmpty())
|
| - |
|
248 |
? customerOffers.stream().map(CustomerOffer::getId).collect(Collectors.toList())
|
| - |
|
249 |
: new ArrayList<>();
|
| 207 |
|
250 |
|
| - |
|
251 |
// Process orders using pre-fetched data
|
| - |
|
252 |
for (FofoOrder fo : activeOrders) {
|
| - |
|
253 |
List<FofoOrderItem> fofoOrderItems = orderItemsByOrderId.getOrDefault(fo.getId(), new ArrayList<>());
|
| - |
|
254 |
Customer customer = customerMap.get(fo.getCustomerId());
|
| 208 |
CustomerAddress customerAddress = customerAddressRepository.selectById(fo.getCustomerAddressId());
|
255 |
CustomerAddress customerAddress = addressMap.get(fo.getCustomerAddressId());
|
| 209 |
|
256 |
|
| 210 |
for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
|
257 |
for (FofoOrderItem foi : fofoOrderItems) {
|
| 211 |
Item item = itemRepository.selectById(fofoOrderItem.getItemId());
|
258 |
Item item = itemMap.get(foi.getItemId());
|
| 212 |
fofoOrderItem.setItemName(item.getItemDescription());
|
259 |
if (item != null) {
|
| 213 |
catalogIds.add(item.getCatalogItemId());
|
260 |
foi.setItemName(item.getItemDescription());
|
| 214 |
}
|
261 |
}
|
| 215 |
|
262 |
|
| 216 |
// Map<Integer, JSONObject> contentMap =
|
- |
|
| 217 |
// commonSolrService.getContentByCatalogIds(catalogIds);
|
- |
|
| 218 |
for (FofoOrderItem foi : fofoOrderItems) {
|
- |
|
| 219 |
|
- |
|
| 220 |
List<FofoLineItem> fofoLineItems = fofoLineItemRepository.selectByFofoOrderItemId(foi.getId());
|
263 |
List<FofoLineItem> fofoLineItems = lineItemsByOrderItemId.getOrDefault(foi.getId(), new ArrayList<>());
|
| 221 |
|
- |
|
| 222 |
CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
|
- |
|
| 223 |
|
- |
|
| 224 |
List<String> serialNumbers = fofoLineItems.stream().map(x -> x.getSerialNumber())
|
- |
|
| 225 |
.collect(Collectors.toList()).stream().filter(x -> x != null)
|
- |
|
| 226 |
.collect(Collectors.toList());
|
- |
|
| 227 |
|
- |
|
| 228 |
customerOrderDetail.setSerialNumber(serialNumbers);
|
- |
|
| 229 |
|
- |
|
| 230 |
if(customerAddress != null) {
|
- |
|
| 231 |
customerOrderDetail.setCustomerName(customerAddress.getName());
|
- |
|
| 232 |
customerOrderDetail.setCustomerMobile(customerAddress.getPhoneNumber());
|
- |
|
| 233 |
customerOrderDetail.setCustomerEmail(customer.getEmailId());
|
- |
|
| 234 |
customerOrderDetail.setCustomerCity(customerAddress.getCity());
|
- |
|
| 235 |
customerOrderDetail.setCustomerState(customerAddress.getState());
|
- |
|
| 236 |
}
|
- |
|
| 237 |
|
- |
|
| 238 |
Item item = itemRepository.selectById(foi.getItemId());
|
- |
|
| 239 |
// JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
|
- |
|
| 240 |
// customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
|
- |
|
| 241 |
customerOrderDetail.setBrand(item.getBrand());
|
- |
|
| 242 |
customerOrderDetail.setColor(item.getColor());
|
- |
|
| 243 |
customerOrderDetail.setFofoOrderItemId(foi.getId());
|
- |
|
| 244 |
customerOrderDetail.setFofoOrderId(foi.getOrderId());
|
- |
|
| 245 |
customerOrderDetail.setItemId(foi.getItemId());
|
- |
|
| 246 |
customerOrderDetail.setModelName(item.getModelName());
|
- |
|
| 247 |
customerOrderDetail.setModelNumber(item.getModelNumber());
|
- |
|
| 248 |
customerOrderDetail.setQuantity(foi.getQuantity());
|
- |
|
| 249 |
customerOrderDetail.setTotalPrice(foi.getSellingPrice());
|
- |
|
| 250 |
customerOrderDetail.setCreatedTimeStamp(foi.getCreateTimestamp());
|
- |
|
| 251 |
customerOrderDetail.setInvoiceNumber(fo.getInvoiceNumber());
|
- |
|
| 252 |
customerOrderDetail.setCancelledTimestamp(fo.getCancelledTimestamp());
|
- |
|
| 253 |
customerOrderDetail.setInsurance(false);
|
- |
|
| 254 |
|
- |
|
| 255 |
if (!serialNumbers.isEmpty()) {
|
- |
|
| 256 |
|
- |
|
| 257 |
if (item.getHsnCode().equals("85171300")) {
|
- |
|
| 258 |
customerOrderDetail.setInsurance(true);
|
- |
|
| 259 |
} else {
|
- |
|
| 260 |
customerOrderDetail.setInsurance(false);
|
- |
|
| 261 |
}
|
- |
|
| 262 |
}
|
- |
|
| 263 |
|
- |
|
| 264 |
List<CustomerOffer> customerOffers = customerOfferRepository
|
- |
|
| 265 |
.getCustomerOffer(LocalDate.now().atStartOfDay()).get(uc.getUserId());
|
- |
|
| 266 |
|
- |
|
| 267 |
long offerCount = 0;
|
- |
|
| 268 |
if (customerOffers != null && !customerOffers.isEmpty()){
|
- |
|
| 269 |
List<Integer> offerIds = customerOffers.stream().map(x -> x.getId())
|
- |
|
| 270 |
.collect(Collectors.toList());
|
- |
|
| 271 |
|
- |
|
| 272 |
List<CustomerOfferItem> customerOfferItems = customerOfferItemRepository
|
- |
|
| 273 |
.selectByOfferIds(offerIds, item.getCatalogItemId(), LocalDate.now());
|
- |
|
| 274 |
|
264 |
|
| 275 |
offerCount = customerOfferItems.stream().collect(Collectors.counting());
|
265 |
CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
|
| 276 |
}
|
- |
|
| 277 |
|
266 |
|
| - |
|
267 |
List<String> serialNumbers = fofoLineItems.stream()
|
| - |
|
268 |
.map(FofoLineItem::getSerialNumber)
|
| - |
|
269 |
.filter(x -> x != null)
|
| - |
|
270 |
.collect(Collectors.toList());
|
| - |
|
271 |
|
| 278 |
customerOrderDetail.setOfferCount(offerCount);
|
272 |
customerOrderDetail.setSerialNumber(serialNumbers);
|
| - |
|
273 |
|
| - |
|
274 |
if (customerAddress != null) {
|
| - |
|
275 |
customerOrderDetail.setCustomerName(customerAddress.getName());
|
| - |
|
276 |
customerOrderDetail.setCustomerMobile(customerAddress.getPhoneNumber());
|
| - |
|
277 |
customerOrderDetail.setCustomerEmail(customer != null ? customer.getEmailId() : null);
|
| - |
|
278 |
customerOrderDetail.setCustomerCity(customerAddress.getCity());
|
| - |
|
279 |
customerOrderDetail.setCustomerState(customerAddress.getState());
|
| - |
|
280 |
}
|
| 279 |
|
281 |
|
| - |
|
282 |
if (item != null) {
|
| - |
|
283 |
customerOrderDetail.setBrand(item.getBrand());
|
| - |
|
284 |
customerOrderDetail.setColor(item.getColor());
|
| - |
|
285 |
customerOrderDetail.setModelName(item.getModelName());
|
| - |
|
286 |
customerOrderDetail.setModelNumber(item.getModelNumber());
|
| - |
|
287 |
}
|
| - |
|
288 |
customerOrderDetail.setFofoOrderItemId(foi.getId());
|
| - |
|
289 |
customerOrderDetail.setFofoOrderId(foi.getOrderId());
|
| - |
|
290 |
customerOrderDetail.setItemId(foi.getItemId());
|
| - |
|
291 |
customerOrderDetail.setQuantity(foi.getQuantity());
|
| - |
|
292 |
customerOrderDetail.setTotalPrice(foi.getSellingPrice());
|
| - |
|
293 |
customerOrderDetail.setCreatedTimeStamp(foi.getCreateTimestamp());
|
| - |
|
294 |
customerOrderDetail.setInvoiceNumber(fo.getInvoiceNumber());
|
| - |
|
295 |
customerOrderDetail.setCancelledTimestamp(fo.getCancelledTimestamp());
|
| - |
|
296 |
customerOrderDetail.setInsurance(false);
|
| - |
|
297 |
|
| - |
|
298 |
if (!serialNumbers.isEmpty() && item != null) {
|
| - |
|
299 |
if ("85171300".equals(item.getHsnCode())) {
|
| 280 |
customerOrderDetails.add(customerOrderDetail);
|
300 |
customerOrderDetail.setInsurance(true);
|
| 281 |
}
|
301 |
}
|
| 282 |
}
|
302 |
}
|
| 283 |
}
|
- |
|
| 284 |
|
303 |
|
| - |
|
304 |
long offerCount = 0;
|
| - |
|
305 |
if (!offerIds.isEmpty() && item != null) {
|
| - |
|
306 |
List<CustomerOfferItem> customerOfferItems = customerOfferItemRepository
|
| - |
|
307 |
.selectByOfferIds(offerIds, item.getCatalogItemId(), LocalDate.now());
|
| - |
|
308 |
offerCount = customerOfferItems.size();
|
| - |
|
309 |
}
|
| - |
|
310 |
|
| - |
|
311 |
customerOrderDetail.setOfferCount(offerCount);
|
| - |
|
312 |
customerOrderDetails.add(customerOrderDetail);
|
| - |
|
313 |
}
|
| 285 |
}
|
314 |
}
|
| - |
|
315 |
|
| 286 |
return responseSender.ok(customerOrderDetails);
|
316 |
return responseSender.ok(customerOrderDetails);
|
| 287 |
}
|
317 |
}
|
| 288 |
|
318 |
|
| 289 |
}
|
319 |
}
|