| Line 260... |
Line 260... |
| 260 |
|
260 |
|
| 261 |
List<RbmArrViewModel> rbmArrViewModels = new ArrayList<>();
|
261 |
List<RbmArrViewModel> rbmArrViewModels = new ArrayList<>();
|
| 262 |
|
262 |
|
| 263 |
if (!todayRbmTargetsList.isEmpty()) {
|
263 |
if (!todayRbmTargetsList.isEmpty()) {
|
| 264 |
|
264 |
|
| - |
|
265 |
// OPTIMIZED: Pre-build maps for O(1) lookup instead of O(n) filter in each iteration
|
| - |
|
266 |
// Map key: "authId-warehouseId"
|
| - |
|
267 |
Map<String, Double> mtdAchievedMap = mtdAchievedTargetModels.stream()
|
| - |
|
268 |
.collect(Collectors.groupingBy(
|
| - |
|
269 |
x -> x.getAuthId() + "-" + x.getWarehouseId(),
|
| - |
|
270 |
Collectors.summingDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
|
| - |
|
271 |
));
|
| - |
|
272 |
|
| - |
|
273 |
Map<String, TodayAchievedMovementModel> todayAchievedMap = todayAchievedMovementModels.stream()
|
| - |
|
274 |
.collect(Collectors.toMap(
|
| - |
|
275 |
x -> x.getAuthId() + "-" + x.getWarehouseId(),
|
| - |
|
276 |
x -> x,
|
| - |
|
277 |
(a, b) -> a
|
| - |
|
278 |
));
|
| - |
|
279 |
|
| - |
|
280 |
Map<String, RbmTargets> todayRbmTargetsMap = todayRbmTargetsList.stream()
|
| - |
|
281 |
.collect(Collectors.toMap(
|
| - |
|
282 |
x -> x.getRbmAuthId() + "-" + x.getWarehouseId(),
|
| - |
|
283 |
x -> x,
|
| - |
|
284 |
(a, b) -> a
|
| - |
|
285 |
));
|
| - |
|
286 |
|
| 265 |
for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
|
287 |
for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
|
| 266 |
|
288 |
|
| - |
|
289 |
String lookupKey = rbmTarget.getAuthId() + "-" + rbmTarget.getWarehouseId();
|
| - |
|
290 |
|
| 267 |
float monthlyTarget = rbmTarget.getMonthlyTarget();
|
291 |
float monthlyTarget = rbmTarget.getMonthlyTarget();
|
| 268 |
float achievedSoFar = (float) mtdAchievedTargetModels.stream()
|
292 |
float achievedSoFar = mtdAchievedMap.getOrDefault(lookupKey, 0.0).floatValue();
|
| 269 |
.filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
|
- |
|
| 270 |
.mapToDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
|
- |
|
| 271 |
.sum();
|
- |
|
| 272 |
|
293 |
|
| 273 |
float remainingTarget = monthlyTarget - achievedSoFar;
|
294 |
float remainingTarget = monthlyTarget - achievedSoFar;
|
| 274 |
|
295 |
|
| 275 |
float todayTarget = (remainingWorkingDaysCount > 0 && remainingTarget > 0) ? remainingTarget / remainingWorkingDaysCount : 0;
|
296 |
float todayTarget = (remainingWorkingDaysCount > 0 && remainingTarget > 0) ? remainingTarget / remainingWorkingDaysCount : 0;
|
| 276 |
|
297 |
|
| 277 |
String warehouseName = ProfitMandiConstants.WAREHOUSE_MAP.getOrDefault(rbmTarget.getWarehouseId(), "Unknown");
|
298 |
String warehouseName = ProfitMandiConstants.WAREHOUSE_MAP.getOrDefault(rbmTarget.getWarehouseId(), "Unknown");
|
| 278 |
|
299 |
|
| 279 |
LOGGER.info("rbmTarget ==== {}", rbmTarget);
|
300 |
LOGGER.info("rbmTarget ==== {}", rbmTarget);
|
| 280 |
|
301 |
|
| 281 |
TodayAchievedMovementModel todayAchievedMovementModel = todayAchievedMovementModels.stream()
|
302 |
TodayAchievedMovementModel todayAchievedMovementModel = todayAchievedMap.get(lookupKey);
|
| 282 |
.filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
|
- |
|
| 283 |
.findFirst()
|
- |
|
| 284 |
.orElse(null);
|
- |
|
| 285 |
|
- |
|
| 286 |
|
303 |
|
| 287 |
Optional<RbmTargets> optionalTodayRbmTargets = todayRbmTargetsList.stream()
|
304 |
RbmTargets todayRbmTargets = todayRbmTargetsMap.get(lookupKey);
|
| 288 |
.filter(x -> x.getRbmAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
|
- |
|
| 289 |
.findFirst();
|
- |
|
| 290 |
|
305 |
|
| 291 |
if (optionalTodayRbmTargets.isPresent()) {
|
306 |
if (todayRbmTargets != null) {
|
| 292 |
RbmTargets todayRbmTargets = optionalTodayRbmTargets.get();
|
- |
|
| 293 |
LOGGER.info("todayRbmTargets {}", todayRbmTargets);
|
307 |
LOGGER.info("todayRbmTargets {}", todayRbmTargets);
|
| 294 |
RbmArrViewModel viewModel = new RbmArrViewModel();
|
308 |
RbmArrViewModel viewModel = new RbmArrViewModel();
|
| 295 |
|
309 |
|
| 296 |
viewModel.setAuthId(rbmTarget.getAuthId());
|
310 |
viewModel.setAuthId(rbmTarget.getAuthId());
|
| 297 |
viewModel.setRbmName(rbmTarget.getRbmName());
|
311 |
viewModel.setRbmName(rbmTarget.getRbmName());
|
| Line 348... |
Line 362... |
| 348 |
|
362 |
|
| 349 |
int remainingWorkingDaysCount = (int) getRemainingDaysInMonth(todayDate);
|
363 |
int remainingWorkingDaysCount = (int) getRemainingDaysInMonth(todayDate);
|
| 350 |
|
364 |
|
| 351 |
List<WarehouseMobileStockByMovementModel> warehouseMobileStockByMovementModels = getWarehouseMobileStockByMovement();
|
365 |
List<WarehouseMobileStockByMovementModel> warehouseMobileStockByMovementModels = getWarehouseMobileStockByMovement();
|
| 352 |
|
366 |
|
| - |
|
367 |
// OPTIMIZED: Pre-build maps for O(1) lookup instead of O(n) filter in each iteration
|
| - |
|
368 |
Map<String, Double> mtdAchievedMap = mtdAchievedTargetModels.stream()
|
| - |
|
369 |
.collect(Collectors.groupingBy(
|
| - |
|
370 |
x -> x.getAuthId() + "-" + x.getWarehouseId(),
|
| - |
|
371 |
Collectors.summingDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
|
| - |
|
372 |
));
|
| - |
|
373 |
|
| - |
|
374 |
Map<Integer, WarehouseMobileStockByMovementModel> warehouseStockMap = warehouseMobileStockByMovementModels.stream()
|
| - |
|
375 |
.collect(Collectors.toMap(
|
| - |
|
376 |
WarehouseMobileStockByMovementModel::getWarehouseId,
|
| - |
|
377 |
x -> x,
|
| - |
|
378 |
(a, b) -> a
|
| - |
|
379 |
));
|
| - |
|
380 |
|
| 353 |
for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
|
381 |
for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
|
| 354 |
|
382 |
|
| - |
|
383 |
String lookupKey = rbmTarget.getAuthId() + "-" + rbmTarget.getWarehouseId();
|
| - |
|
384 |
|
| 355 |
float monthlyTarget = rbmTarget.getMonthlyTarget();
|
385 |
float monthlyTarget = rbmTarget.getMonthlyTarget();
|
| 356 |
float achievedSoFar = (float) mtdAchievedTargetModels.stream()
|
386 |
float achievedSoFar = mtdAchievedMap.getOrDefault(lookupKey, 0.0).floatValue();
|
| 357 |
.filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
|
- |
|
| 358 |
.mapToDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
|
- |
|
| 359 |
.sum();
|
- |
|
| 360 |
|
387 |
|
| 361 |
|
388 |
|
| 362 |
float remainingTarget = monthlyTarget - achievedSoFar;
|
389 |
float remainingTarget = monthlyTarget - achievedSoFar;
|
| 363 |
LOGGER.info("remainingTarget {}", remainingTarget);
|
390 |
LOGGER.info("remainingTarget {}", remainingTarget);
|
| 364 |
|
391 |
|
| 365 |
float todayTarget = (remainingWorkingDaysCount > 0 && remainingTarget > 0) ? remainingTarget / remainingWorkingDaysCount : 0;
|
392 |
float todayTarget = (remainingWorkingDaysCount > 0 && remainingTarget > 0) ? remainingTarget / remainingWorkingDaysCount : 0;
|
| 366 |
LOGGER.info("todayTarget {}", todayTarget);
|
393 |
LOGGER.info("todayTarget {}", todayTarget);
|
| 367 |
|
394 |
|
| 368 |
// Get the warehouse stock data
|
395 |
// Get the warehouse stock data
|
| 369 |
WarehouseMobileStockByMovementModel warehouseMobileStockByMovementModel = warehouseMobileStockByMovementModels.stream()
|
396 |
WarehouseMobileStockByMovementModel warehouseMobileStockByMovementModel = warehouseStockMap.get(rbmTarget.getWarehouseId());
|
| 370 |
.filter(x -> x.getWarehouseId() == rbmTarget.getWarehouseId()).findFirst().orElse(null);
|
- |
|
| 371 |
|
397 |
|
| 372 |
|
398 |
|
| 373 |
if (warehouseMobileStockByMovementModel != null) {
|
399 |
if (warehouseMobileStockByMovementModel != null) {
|
| 374 |
|
400 |
|
| 375 |
// Total stock value for this warehouse
|
401 |
// Total stock value for this warehouse
|