Subversion Repositories SmartDukaan

Rev

Rev 35196 | Rev 35435 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 35196 Rev 35415
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
}