Subversion Repositories SmartDukaan

Rev

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

Rev 32789 Rev 32790
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
                }