| Line 177... |
Line 177... |
| 177 |
BilledOrderListModel billedOrderListModel = createBilleOrder(record);
|
177 |
BilledOrderListModel billedOrderListModel = createBilleOrder(record);
|
| 178 |
billedOrderListModels.add(billedOrderListModel);
|
178 |
billedOrderListModels.add(billedOrderListModel);
|
| 179 |
LOGGER.info("records" + record.get(1));
|
179 |
LOGGER.info("records" + record.get(1));
|
| 180 |
}
|
180 |
}
|
| 181 |
|
181 |
|
| - |
|
182 |
//Add Validation
|
| - |
|
183 |
//This is server side validation
|
| - |
|
184 |
Map<String, Set<String>> providerWayBillNumberMap = billedOrderListModels.stream()
|
| - |
|
185 |
.collect(Collectors.groupingBy(x -> x.getLogisticsProviderName(), Collectors.mapping(BilledOrderListModel::getAirwayBillNumber, Collectors.toSet())));
|
| - |
|
186 |
List<Order> ordersByWaybill = orderRepository.selectByAirwayBillNumber(providerWayBillNumberMap.values().stream().flatMap(x -> x.stream()).collect(Collectors.toList()));
|
| - |
|
187 |
|
| - |
|
188 |
Map<Integer, String> providerMap = providerRepository.selectAll().stream().collect(Collectors.toMap(x -> x.getId(), x -> x.getName()));
|
| - |
|
189 |
Map<Integer, List<Order>> existingProviderOrderMap = ordersByWaybill.stream().collect(Collectors.groupingBy(x -> x.getLogisticsProviderId()));
|
| - |
|
190 |
for (Entry<Integer, List<Order>> existingProviderEntrySet : existingProviderOrderMap.entrySet()) {
|
| - |
|
191 |
String providerName = providerMap.get(existingProviderEntrySet.getKey());
|
| - |
|
192 |
Set<String> wayBillNumbers = providerWayBillNumberMap.get(providerName);
|
| - |
|
193 |
for (Order order : ordersByWaybill) {
|
| - |
|
194 |
if (wayBillNumbers.contains(order.getSerialNumber())) {
|
| - |
|
195 |
String errorMessage = "Provider " + providerName + ", wayBillNumber " + order.getSerialNumber();
|
| - |
|
196 |
throw new ProfitMandiBusinessException(errorMessage, errorMessage, errorMessage);
|
| - |
|
197 |
}
|
| - |
|
198 |
}
|
| - |
|
199 |
}
|
| - |
|
200 |
|
| - |
|
201 |
|
| 182 |
LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
|
202 |
LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
|
| 183 |
String email = loginDetails.getEmailId();
|
203 |
String email = loginDetails.getEmailId();
|
| 184 |
|
204 |
|
| 185 |
AuthUser authUser = authRepository.selectByEmailOrMobile(email);
|
205 |
AuthUser authUser = authRepository.selectByEmailOrMobile(email);
|
| 186 |
List<Position> positions = positionRepository.selectAll(authUser.getId());
|
206 |
List<Position> positions = positionRepository.selectAll(authUser.getId());
|
| Line 216... |
Line 236... |
| 216 |
if (!warehouseIds.containsAll(shippingWarehouseIds)) {
|
236 |
if (!warehouseIds.containsAll(shippingWarehouseIds)) {
|
| 217 |
throw new ProfitMandiBusinessException("Uploaded File", "", "Partners are not belong to the same warehouse");
|
237 |
throw new ProfitMandiBusinessException("Uploaded File", "", "Partners are not belong to the same warehouse");
|
| 218 |
|
238 |
|
| 219 |
}
|
239 |
}
|
| 220 |
|
240 |
|
| 221 |
Map<String, Set<Integer>> invoicefofoIdmap = ords.stream().collect(Collectors.groupingBy(
|
241 |
Map<String, Integer> invoiceRetailerMap = ords.stream().collect(Collectors.toMap(
|
| 222 |
x -> x.getInvoiceNumber(), Collectors.mapping(Order::getRetailerId, Collectors.toSet())));
|
242 |
x -> x.getInvoiceNumber(), x->x.getRetailerId(), (u,v)-> u ));
|
| 223 |
|
243 |
|
| 224 |
LOGGER.info("invoicefofoIdmap" + invoicefofoIdmap);
|
244 |
LOGGER.info("invoicefofoIdmap" + invoiceRetailerMap);
|
| 225 |
|
245 |
|
| 226 |
Map<String, Set<String>> airbillInvoiceNumberMap = billedOrderListModels.stream().collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(), Collectors.mapping(BilledOrderListModel::getInvoiceNumber, Collectors.toSet())));
|
246 |
Map<String, Set<String>> airbillInvoiceNumberMap = billedOrderListModels.stream().collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(), Collectors.mapping(BilledOrderListModel::getInvoiceNumber, Collectors.toSet())));
|
| 227 |
|
247 |
|
| 228 |
LOGGER.info("airbillInvoiceNumberMap" + airbillInvoiceNumberMap);
|
248 |
LOGGER.info("airbillInvoiceNumberMap" + airbillInvoiceNumberMap);
|
| 229 |
|
249 |
|
| 230 |
for (Entry<String, Set<String>> aim : airbillInvoiceNumberMap.entrySet()) {
|
250 |
for (Entry<String, Set<String>> airbillInvoiceNumberEntry : airbillInvoiceNumberMap.entrySet()) {
|
| 231 |
Set<String> InvoceNumbers = aim.getValue();
|
251 |
Set<String> invoiceNumbers = airbillInvoiceNumberEntry.getValue();
|
| 232 |
Set<Integer> fofoId = new HashSet<>();
|
252 |
Set<Integer> wayBillRetailerSet = new HashSet<>();
|
| 233 |
for (String InvoceNumber : InvoceNumbers) {
|
253 |
for (String invoiceNumber : invoiceNumbers) {
|
| 234 |
if (invoicefofoIdmap.get(InvoceNumber) != null) {
|
254 |
if (invoiceRetailerMap.get(invoiceNumber) != null) {
|
| 235 |
fofoId.addAll(invoicefofoIdmap.get(InvoceNumber));
|
255 |
wayBillRetailerSet.add(invoiceRetailerMap.get(invoiceNumber));
|
| 236 |
}
|
256 |
}
|
| 237 |
}
|
257 |
}
|
| 238 |
LOGGER.info("fofoId" + fofoId);
|
258 |
LOGGER.info("wayBillRetailerSet - {}" + wayBillRetailerSet);
|
| 239 |
|
259 |
|
| 240 |
if (fofoId.size() > 1) {
|
260 |
if (wayBillRetailerSet.size() > 1) {
|
| 241 |
throw new ProfitMandiBusinessException("Uploaded File", "", "Waybill " + aim.getKey() + " number cannot have invoices with different Retailers");
|
261 |
throw new ProfitMandiBusinessException("Uploaded File", "", "Waybill " + airbillInvoiceNumberEntry.getKey() + " number cannot have invoices with different Retailers");
|
| 242 |
}
|
262 |
}
|
| 243 |
}
|
263 |
}
|
| 244 |
|
264 |
|
| 245 |
Map<String, List<BilledOrderListModel>> blueDartAirbillBilledOrderMap = billedOrderListModels.stream().filter(x -> x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(), Collectors.toList()));
|
265 |
Map<String, List<BilledOrderListModel>> blueDartAwbBilledOrderMap = billedOrderListModels.stream().filter(x -> x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.groupingBy(x -> x.getAirwayBillNumber(), Collectors.toList()));
|
| 246 |
|
266 |
|
| 247 |
List<BilledOrderListModel> orderList = billedOrderListModels.stream().filter(x -> !x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.toList());
|
267 |
List<BilledOrderListModel> orderList = billedOrderListModels.stream().filter(x -> !x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.toList());
|
| 248 |
|
268 |
|
| - |
|
269 |
|
| 249 |
if (!blueDartAirbillBilledOrderMap.isEmpty()) {
|
270 |
if (!blueDartAwbBilledOrderMap.isEmpty()) {
|
| 250 |
List<BilledOrderListModel> blueDartorderList = billedOrderListModels.stream().filter(x -> x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.toList());
|
271 |
List<BilledOrderListModel> blueDartorderList = billedOrderListModels.stream().filter(x -> x.getLogisticsProviderName().equals("BlueDart")).collect(Collectors.toList());
|
| - |
|
272 |
Provider provider = providerRepository.selectByName("BlueDart");
|
| 251 |
|
273 |
|
| 252 |
List<Integer> unserviceablePincode = new ArrayList<>();
|
274 |
List<Integer> unserviceablePincode = new ArrayList<>();
|
| 253 |
|
275 |
|
| 254 |
for (BilledOrderListModel billedOrder : blueDartorderList) {
|
276 |
for (BilledOrderListModel billedOrder : blueDartorderList) {
|
| 255 |
|
- |
|
| 256 |
Provider provider = providerRepository.selectByName(billedOrder.getLogisticsProviderName());
|
- |
|
| 257 |
|
- |
|
| 258 |
List<Order> orders = orderRepository.selectByInvoiceNumber(billedOrder.getInvoiceNumber());
|
277 |
List<Order> orders = orderRepository.selectByInvoiceNumber(billedOrder.getInvoiceNumber());
|
| 259 |
|
- |
|
| 260 |
for (Order order : orders) {
|
278 |
for (Order order : orders) {
|
| 261 |
ProviderTat providerTat = providerTatRepository.selectByProviderId(provider.getId(), order.getWarehouseId(), order.getRetailerPinCode());
|
279 |
ProviderTat providerTat = providerTatRepository.selectByProviderId(provider.getId(), order.getWarehouseId(), order.getRetailerPinCode());
|
| 262 |
if (providerTat == null) {
|
280 |
if (providerTat == null) {
|
| 263 |
unserviceablePincode.add(order.getId());
|
281 |
unserviceablePincode.add(order.getId());
|
| 264 |
}
|
282 |
}
|
| 265 |
}
|
283 |
}
|
| 266 |
|
284 |
|
| 267 |
}
|
285 |
}
|
| 268 |
|
- |
|
| 269 |
if (!unserviceablePincode.isEmpty()) {
|
286 |
if (!unserviceablePincode.isEmpty()) {
|
| 270 |
throw new ProfitMandiBusinessException("Uploaded File", "", "Orders " + unserviceablePincode + " Unserviceable Pincode");
|
287 |
throw new ProfitMandiBusinessException("Uploaded File", "", "Orders " + unserviceablePincode + " Unserviceable Pincode");
|
| 271 |
|
288 |
|
| 272 |
}
|
289 |
}
|
| 273 |
|
- |
|
| - |
|
290 |
//Use api to create fresh Waybills for BlueDart
|
| 274 |
List<BilledOrderListModel> blueDartOrders = bluedartService.getAirwayBillNo(blueDartAirbillBilledOrderMap, authUser.getEmailId());
|
291 |
List<BilledOrderListModel> blueDartOrders = bluedartService.getAirwayBillNo(blueDartAwbBilledOrderMap, authUser.getEmailId());
|
| 275 |
|
292 |
|
| 276 |
orderList.addAll(blueDartOrders);
|
293 |
orderList.addAll(blueDartOrders);
|
| 277 |
}
|
294 |
}
|
| - |
|
295 |
|
| 278 |
Map<String, BilledOrderListModel> uniqueCombinations = new HashMap<>();
|
296 |
Map<String, BilledOrderListModel> uniqueCombinations = new HashMap<>();
|
| 279 |
for (BilledOrderListModel bl : orderList) {
|
297 |
for (BilledOrderListModel bl : orderList) {
|
| 280 |
String providerName = bl.getLogisticsProviderName();
|
- |
|
| 281 |
String airwayBillNumber = bl.getAirwayBillNumber();
|
- |
|
| 282 |
LocalDateTime shippingDate = bl.getShippingDate();
|
- |
|
| 283 |
// Check if the provider name is already encountered
|
- |
|
| 284 |
if (!uniqueCombinations.containsKey(providerName)) {
|
- |
|
| 285 |
uniqueCombinations.put(providerName, bl);
|
- |
|
| 286 |
} else {
|
- |
|
| 287 |
// If the provider name is the same, check if shipping date and AirwayBill number are different
|
- |
|
| 288 |
BilledOrderListModel existingBl = uniqueCombinations.get(providerName);
|
- |
|
| 289 |
if (existingBl.getShippingDate().equals(shippingDate) && existingBl.getAirwayBillNumber().equals(airwayBillNumber)) {
|
- |
|
| 290 |
throw new ProfitMandiBusinessException("Validation Error", "", "Duplicate entry with the same Provider Name, Shipping Date, and AirwayBill Number");
|
- |
|
| 291 |
}
|
- |
|
| 292 |
}
|
- |
|
| 293 |
|
- |
|
| 294 |
|
- |
|
| 295 |
List<Order> orders = orderRepository.selectByInvoiceNumber(bl.getInvoiceNumber());
|
298 |
List<Order> orders = orderRepository.selectByInvoiceNumber(bl.getInvoiceNumber());
|
| 296 |
|
- |
|
| 297 |
Provider provider = providerRepository.selectByName(bl.getLogisticsProviderName());
|
299 |
Provider provider = providerRepository.selectByName(bl.getLogisticsProviderName());
|
| 298 |
|
300 |
|
| 299 |
if (provider == null) {
|
301 |
if (provider == null) {
|
| 300 |
throw new ProfitMandiBusinessException("Uploaded File", "", "Provider is not Available");
|
302 |
throw new ProfitMandiBusinessException("Uploaded File", "", "Provider is not Available");
|
| 301 |
}
|
303 |
}
|