| Line 55... |
Line 55... |
| 55 |
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
55 |
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
| 56 |
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
56 |
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
| 57 |
import org.springframework.beans.factory.annotation.Autowired;
|
57 |
import org.springframework.beans.factory.annotation.Autowired;
|
| 58 |
import org.springframework.cache.CacheManager;
|
58 |
import org.springframework.cache.CacheManager;
|
| 59 |
import org.springframework.cache.annotation.Cacheable;
|
59 |
import org.springframework.cache.annotation.Cacheable;
|
| - |
|
60 |
import org.springframework.transaction.annotation.Transactional;
|
| 60 |
import org.springframework.stereotype.Component;
|
61 |
import org.springframework.stereotype.Component;
|
| 61 |
|
62 |
|
| 62 |
import java.io.IOException;
|
63 |
import java.io.IOException;
|
| 63 |
import java.io.InputStream;
|
64 |
import java.io.InputStream;
|
| 64 |
import java.time.LocalDate;
|
65 |
import java.time.LocalDate;
|
| Line 1196... |
Line 1197... |
| 1196 |
Offer offer = offerRepository.selectById(createOfferRequest.getId());
|
1197 |
Offer offer = offerRepository.selectById(createOfferRequest.getId());
|
| 1197 |
offer.setProcessedTimestamp(LocalDateTime.now());
|
1198 |
offer.setProcessedTimestamp(LocalDateTime.now());
|
| 1198 |
}
|
1199 |
}
|
| 1199 |
|
1200 |
|
| 1200 |
@Override
|
1201 |
@Override
|
| - |
|
1202 |
@Transactional(readOnly = true)
|
| - |
|
1203 |
public List<OfferPartnerPayoutData> calculateOfferPayouts(CreateOfferRequest createOfferRequest) throws ProfitMandiBusinessException {
|
| - |
|
1204 |
List<OfferPartnerPayoutData> result = new ArrayList<>();
|
| - |
|
1205 |
|
| - |
|
1206 |
List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
|
| - |
|
1207 |
List<ItemCriteriaPayout> itemCriteriaPayouts = createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts();
|
| - |
|
1208 |
Map<Integer, ItemCriteriaPayout> itemCriteriaPayoutMap = itemCriteriaPayouts.stream().collect(Collectors.toMap(x -> x.getItemCriteria().getId(), x -> x));
|
| - |
|
1209 |
|
| - |
|
1210 |
Map<Integer, Map<Integer, Double>> fixedSlabCriteriaPartnerMap = offerPayouts.stream()
|
| - |
|
1211 |
.filter(x -> itemCriteriaPayoutMap.containsKey((int) x.getCriteriaId()) &&
|
| - |
|
1212 |
itemCriteriaPayoutMap.get((int) x.getCriteriaId()).getAmountType().equals(AmountType.SLAB_FIXED))
|
| - |
|
1213 |
.collect(Collectors.groupingBy(x -> (int) x.getCriteriaId(),
|
| - |
|
1214 |
Collectors.groupingBy(x -> (int) x.getFofoId(), Collectors.summingDouble(x -> x.getSlabAmount()))));
|
| - |
|
1215 |
|
| - |
|
1216 |
Map<String, Double> serialNumberPaid = offerPayouts.stream()
|
| - |
|
1217 |
.filter(x -> x.getRejectTimestamp() == null)
|
| - |
|
1218 |
.collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
|
| - |
|
1219 |
|
| - |
|
1220 |
Map<Integer, Map<Integer, List<FofoOrderItem>>> criteriaPartnerwiseTertiary = offerRepository.getCriteriaWisePartnerTertiary(createOfferRequest);
|
| - |
|
1221 |
|
| - |
|
1222 |
Map<String, AgeingSummaryModel> ageingSummaryModelsMap = null;
|
| - |
|
1223 |
final Map<String, LocalDateTime> activatedImeisActivationDateMap;
|
| - |
|
1224 |
List<String> imeisAllowedManually = offerEligibleImeiRepository.selectEligibleImeisByOfferId(createOfferRequest.getId());
|
| - |
|
1225 |
|
| - |
|
1226 |
if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
|
| - |
|
1227 |
List<String> serialNumbers = criteriaPartnerwiseTertiary.entrySet().stream()
|
| - |
|
1228 |
.flatMap(x -> x.getValue().entrySet().stream().flatMap(foiList -> foiList.getValue().stream()))
|
| - |
|
1229 |
.flatMap(y -> y.getFofoLineItems().stream()).filter(fli -> fli.getSerialNumber() != null)
|
| - |
|
1230 |
.map(x -> x.getSerialNumber()).collect(Collectors.toList());
|
| - |
|
1231 |
if (serialNumbers.size() > 0) {
|
| - |
|
1232 |
if (imeisAllowedManually != null) {
|
| - |
|
1233 |
serialNumbers = serialNumbers.stream().filter(x -> imeisAllowedManually.contains(x)).collect(Collectors.toList());
|
| - |
|
1234 |
}
|
| - |
|
1235 |
activatedImeisActivationDateMap = activatedImeiRepository.selectBySerialNumbers(serialNumbers).stream()
|
| - |
|
1236 |
.filter(x -> createOfferRequest.isWithinRange(x.getActivationTimestamp()))
|
| - |
|
1237 |
.collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x.getActivationTimestamp()));
|
| - |
|
1238 |
ageingSummaryModelsMap = warehouseInventoryItemRepository.findStockAgeingByFofoIdSerialNumbers(0, serialNumbers)
|
| - |
|
1239 |
.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> v));
|
| - |
|
1240 |
} else {
|
| - |
|
1241 |
activatedImeisActivationDateMap = null;
|
| - |
|
1242 |
}
|
| - |
|
1243 |
} else {
|
| - |
|
1244 |
activatedImeisActivationDateMap = null;
|
| - |
|
1245 |
}
|
| - |
|
1246 |
|
| - |
|
1247 |
Map<Integer, Integer> userBaseQtyMap = new HashMap<>();
|
| - |
|
1248 |
Map<Integer, Integer> userBaseValueMap = new HashMap<>();
|
| - |
|
1249 |
Map<Integer, Integer> calcEligibleBaseQtyMap = new HashMap<>();
|
| - |
|
1250 |
Map<Integer, Integer> calcEligibleBaseValueMap = new HashMap<>();
|
| - |
|
1251 |
|
| - |
|
1252 |
if (createOfferRequest.isBaseCriteria()) {
|
| - |
|
1253 |
Map<Integer, List<FofoOrderItem>> foiMap = criteriaPartnerwiseTertiary.get(0);
|
| - |
|
1254 |
if (foiMap != null) {
|
| - |
|
1255 |
for (Map.Entry<Integer, List<FofoOrderItem>> orderEntry : foiMap.entrySet()) {
|
| - |
|
1256 |
int fofoId = orderEntry.getKey();
|
| - |
|
1257 |
List<FofoOrderItem> fofoOrderItems = orderEntry.getValue();
|
| - |
|
1258 |
int totalBaseQty = fofoOrderItems.stream().collect(Collectors.summingInt(x -> (x.getQuantity())));
|
| - |
|
1259 |
int totalBaseValue = fofoOrderItems.stream().collect(Collectors.summingInt(x -> (Math.round(x.getDp())) * x.getQuantity()));
|
| - |
|
1260 |
userBaseQtyMap.put(fofoId, totalBaseQty);
|
| - |
|
1261 |
userBaseValueMap.put(fofoId, totalBaseValue);
|
| - |
|
1262 |
if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
|
| - |
|
1263 |
Map<Integer, Integer> inventoryItemValueMap = new HashMap<>();
|
| - |
|
1264 |
for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
|
| - |
|
1265 |
fofoOrderItem.getFofoLineItems().stream().filter(x -> x.getSerialNumber() != null).forEach(
|
| - |
|
1266 |
lineItem -> {
|
| - |
|
1267 |
if (activatedImeisActivationDateMap == null || activatedImeisActivationDateMap.containsKey(lineItem.getSerialNumber())) {
|
| - |
|
1268 |
inventoryItemValueMap.put(lineItem.getInventoryItemId(), (int) fofoOrderItem.getDp());
|
| - |
|
1269 |
}
|
| - |
|
1270 |
}
|
| - |
|
1271 |
);
|
| - |
|
1272 |
}
|
| - |
|
1273 |
calcEligibleBaseQtyMap.put(fofoId, inventoryItemValueMap.size());
|
| - |
|
1274 |
calcEligibleBaseValueMap.put(fofoId, inventoryItemValueMap.entrySet().stream().collect(Collectors.summingInt(x -> x.getValue())));
|
| - |
|
1275 |
} else {
|
| - |
|
1276 |
calcEligibleBaseQtyMap.put(fofoId, totalBaseQty);
|
| - |
|
1277 |
calcEligibleBaseValueMap.put(fofoId, totalBaseValue);
|
| - |
|
1278 |
}
|
| - |
|
1279 |
}
|
| - |
|
1280 |
}
|
| - |
|
1281 |
}
|
| - |
|
1282 |
|
| - |
|
1283 |
for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
|
| - |
|
1284 |
int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
|
| - |
|
1285 |
Map<Integer, List<FofoOrderItem>> ordersMap = criteriaPartnerwiseTertiary.get(criteriaId);
|
| - |
|
1286 |
if (ordersMap == null) continue;
|
| - |
|
1287 |
|
| - |
|
1288 |
for (Map.Entry<Integer, List<FofoOrderItem>> orderEntry : ordersMap.entrySet()) {
|
| - |
|
1289 |
int fofoId = orderEntry.getKey();
|
| - |
|
1290 |
List<FofoOrderItem> fofoOrderItems = orderEntry.getValue();
|
| - |
|
1291 |
int totalQty = fofoOrderItems.stream().collect(Collectors.summingInt(x -> (x.getQuantity())));
|
| - |
|
1292 |
int totalValue = fofoOrderItems.stream().collect(Collectors.summingInt(x -> Math.round(x.getDp()) * (x.getQuantity())));
|
| - |
|
1293 |
int eligibleQty = totalQty;
|
| - |
|
1294 |
int eligibleValue = totalValue;
|
| - |
|
1295 |
Map<FofoLineItem, Integer> lineItemValueMap = new HashMap<>();
|
| - |
|
1296 |
if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
|
| - |
|
1297 |
for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
|
| - |
|
1298 |
fofoOrderItem.getFofoLineItems().stream().filter(x -> x.getSerialNumber() != null).forEach(
|
| - |
|
1299 |
lineItem -> {
|
| - |
|
1300 |
if (activatedImeisActivationDateMap == null) {
|
| - |
|
1301 |
lineItemValueMap.put(lineItem, (int) fofoOrderItem.getDp());
|
| - |
|
1302 |
} else if (activatedImeisActivationDateMap.containsKey(lineItem.getSerialNumber())) {
|
| - |
|
1303 |
if (itemCriteriaPayout.isWithinRange(activatedImeisActivationDateMap.get(lineItem.getSerialNumber()))) {
|
| - |
|
1304 |
lineItemValueMap.put(lineItem, (int) fofoOrderItem.getDp());
|
| - |
|
1305 |
}
|
| - |
|
1306 |
}
|
| - |
|
1307 |
}
|
| - |
|
1308 |
);
|
| - |
|
1309 |
}
|
| - |
|
1310 |
eligibleQty = lineItemValueMap.size();
|
| - |
|
1311 |
eligibleValue = lineItemValueMap.entrySet().stream().collect(Collectors.summingInt(x -> x.getValue()));
|
| - |
|
1312 |
}
|
| - |
|
1313 |
|
| - |
|
1314 |
int eligibleBaseQty = eligibleQty;
|
| - |
|
1315 |
int eligibleBaseValue = eligibleValue;
|
| - |
|
1316 |
if (createOfferRequest.isBaseCriteria()) {
|
| - |
|
1317 |
eligibleBaseQty = calcEligibleBaseQtyMap.get(fofoId) == null ? 0 : calcEligibleBaseQtyMap.get(fofoId);
|
| - |
|
1318 |
eligibleBaseValue = calcEligibleBaseValueMap.get(fofoId) == null ? 0 : calcEligibleBaseValueMap.get(fofoId);
|
| - |
|
1319 |
}
|
| - |
|
1320 |
|
| - |
|
1321 |
int eligibleSale = eligibleBaseValue;
|
| - |
|
1322 |
int eligibleCriteriaSaleDp = eligibleValue;
|
| - |
|
1323 |
if (createOfferRequest.getTargetType().equals(AchievementType.QUANTITY)) {
|
| - |
|
1324 |
eligibleSale = eligibleBaseQty;
|
| - |
|
1325 |
}
|
| - |
|
1326 |
|
| - |
|
1327 |
float eligiblePayoutValue = 0;
|
| - |
|
1328 |
float previousPayoutValue = 0;
|
| - |
|
1329 |
double finalPayout;
|
| - |
|
1330 |
for (PayoutSlab payoutSlab : itemCriteriaPayout.getPayoutSlabs()) {
|
| - |
|
1331 |
if (payoutSlab.getOnwardsAmount() <= eligibleSale) {
|
| - |
|
1332 |
eligiblePayoutValue = payoutSlab.getPayoutAmount();
|
| - |
|
1333 |
previousPayoutValue = Math.min(eligiblePayoutValue, previousPayoutValue);
|
| - |
|
1334 |
} else {
|
| - |
|
1335 |
break;
|
| - |
|
1336 |
}
|
| - |
|
1337 |
}
|
| - |
|
1338 |
if (AmountType.PERCENTAGE.equals(itemCriteriaPayout.getAmountType())) {
|
| - |
|
1339 |
finalPayout = (eligiblePayoutValue * eligibleCriteriaSaleDp) / 100;
|
| - |
|
1340 |
} else if (AmountType.FIXED.equals(itemCriteriaPayout.getAmountType())) {
|
| - |
|
1341 |
finalPayout = eligiblePayoutValue * eligibleQty;
|
| - |
|
1342 |
} else {
|
| - |
|
1343 |
Map<Integer, Double> fofoCriteriaMap = fixedSlabCriteriaPartnerMap.get(criteriaId);
|
| - |
|
1344 |
finalPayout = eligiblePayoutValue;
|
| - |
|
1345 |
if (fofoCriteriaMap != null && fofoCriteriaMap.containsKey(fofoId)) {
|
| - |
|
1346 |
finalPayout = eligiblePayoutValue - previousPayoutValue;
|
| - |
|
1347 |
if (Math.abs(finalPayout) < Utils.DOUBLE_EPSILON) {
|
| - |
|
1348 |
finalPayout = 0;
|
| - |
|
1349 |
}
|
| - |
|
1350 |
}
|
| - |
|
1351 |
}
|
| - |
|
1352 |
|
| - |
|
1353 |
if (finalPayout > 0) {
|
| - |
|
1354 |
result.add(new OfferPartnerPayoutData(
|
| - |
|
1355 |
fofoId, criteriaId, finalPayout, eligiblePayoutValue,
|
| - |
|
1356 |
lineItemValueMap, itemCriteriaPayout, serialNumberPaid,
|
| - |
|
1357 |
ageingSummaryModelsMap, createOfferRequest.isDiscount()));
|
| - |
|
1358 |
}
|
| - |
|
1359 |
}
|
| - |
|
1360 |
}
|
| - |
|
1361 |
|
| - |
|
1362 |
return result;
|
| - |
|
1363 |
}
|
| - |
|
1364 |
|
| - |
|
1365 |
@Override
|
| 1201 |
public void processSellin(CreateOfferRequest createOfferRequest) throws Exception {
|
1366 |
public void processSellin(CreateOfferRequest createOfferRequest) throws Exception {
|
| 1202 |
|
1367 |
|
| 1203 |
//List<OfferRowModel> offerRowModels = new ArrayList<>();
|
1368 |
//List<OfferRowModel> offerRowModels = new ArrayList<>();
|
| 1204 |
List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
|
1369 |
List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
|
| 1205 |
Map<String, Double> serialNumberPaid = offerPayouts.stream().filter(x -> x.getRejectTimestamp() == null).collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
|
1370 |
Map<String, Double> serialNumberPaid = offerPayouts.stream().filter(x -> x.getRejectTimestamp() == null).collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
|
| Line 1380... |
Line 1545... |
| 1380 |
}
|
1545 |
}
|
| 1381 |
Offer offer = offerRepository.selectById(createOfferRequest.getId());
|
1546 |
Offer offer = offerRepository.selectById(createOfferRequest.getId());
|
| 1382 |
offer.setProcessedTimestamp(LocalDateTime.now());
|
1547 |
offer.setProcessedTimestamp(LocalDateTime.now());
|
| 1383 |
}
|
1548 |
}
|
| 1384 |
|
1549 |
|
| - |
|
1550 |
@Override
|
| - |
|
1551 |
@Transactional(readOnly = true)
|
| - |
|
1552 |
public List<SellinPartnerPayoutData> calculateSellinPayouts(CreateOfferRequest createOfferRequest) throws Exception {
|
| - |
|
1553 |
List<SellinPartnerPayoutData> result = new ArrayList<>();
|
| - |
|
1554 |
|
| - |
|
1555 |
List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
|
| - |
|
1556 |
Map<String, Double> serialNumberPaid = offerPayouts.stream()
|
| - |
|
1557 |
.filter(x -> x.getRejectTimestamp() == null)
|
| - |
|
1558 |
.collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
|
| - |
|
1559 |
|
| - |
|
1560 |
List<ItemCriteriaPayout> itemCriteriaPayouts = createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts();
|
| - |
|
1561 |
Map<Integer, ItemCriteriaPayout> itemCriteriaPayoutMap = itemCriteriaPayouts.stream()
|
| - |
|
1562 |
.collect(Collectors.toMap(x -> x.getItemCriteria().getId(), x -> x));
|
| - |
|
1563 |
Map<Integer, Map<Integer, Double>> fixedSlabCriteriaPartnerMap = offerPayouts.stream()
|
| - |
|
1564 |
.filter(x -> itemCriteriaPayoutMap.containsKey((int) x.getCriteriaId()) &&
|
| - |
|
1565 |
itemCriteriaPayoutMap.get((int) x.getCriteriaId()).getAmountType().equals(AmountType.SLAB_FIXED))
|
| - |
|
1566 |
.collect(Collectors.groupingBy(x -> (int) x.getCriteriaId(),
|
| - |
|
1567 |
Collectors.groupingBy(x -> (int) x.getFofoId(), Collectors.summingDouble(x -> x.getSlabAmount()))));
|
| - |
|
1568 |
Set<Long> fofoIds = offerPayouts.stream().map(x -> x.getFofoId()).collect(Collectors.toSet());
|
| - |
|
1569 |
|
| - |
|
1570 |
Map<Integer, Map<Integer, List<Order>>> criteriaOrdersMap = offerRepository.getPartnerWiseSellin(createOfferRequest, true);
|
| - |
|
1571 |
|
| - |
|
1572 |
Map<Integer, List<Order>> userBaseCriteriaOrdersMap = null;
|
| - |
|
1573 |
if (criteriaOrdersMap.get(0) != null && criteriaOrdersMap.get(0).size() > 0) {
|
| - |
|
1574 |
userBaseCriteriaOrdersMap = criteriaOrdersMap.get(0).entrySet().stream()
|
| - |
|
1575 |
.filter(x -> !fofoIds.contains(x.getKey())).collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
|
| - |
|
1576 |
}
|
| - |
|
1577 |
|
| - |
|
1578 |
Map<Integer, Integer> userBaseQtyMap = null;
|
| - |
|
1579 |
Map<Integer, Integer> userBaseValueMap = null;
|
| - |
|
1580 |
if (userBaseCriteriaOrdersMap != null) {
|
| - |
|
1581 |
userBaseQtyMap = new HashMap<>();
|
| - |
|
1582 |
userBaseValueMap = new HashMap<>();
|
| - |
|
1583 |
for (Map.Entry<Integer, List<Order>> orderEntry : userBaseCriteriaOrdersMap.entrySet()) {
|
| - |
|
1584 |
int fofoId = orderEntry.getKey();
|
| - |
|
1585 |
List<Order> orders = orderEntry.getValue();
|
| - |
|
1586 |
int totalBaseQty = orders.stream().collect(Collectors.summingInt(x -> (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty())));
|
| - |
|
1587 |
int totalBaseValue = orders.stream().collect(Collectors.summingInt(x ->
|
| - |
|
1588 |
Math.round(x.getLineItem().getUnitPrice() * (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty()))
|
| - |
|
1589 |
));
|
| - |
|
1590 |
userBaseQtyMap.put(fofoId, totalBaseQty);
|
| - |
|
1591 |
userBaseValueMap.put(fofoId, totalBaseValue);
|
| - |
|
1592 |
}
|
| - |
|
1593 |
}
|
| - |
|
1594 |
|
| - |
|
1595 |
for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
|
| - |
|
1596 |
int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
|
| - |
|
1597 |
if (criteriaOrdersMap.get(criteriaId) == null) continue;
|
| - |
|
1598 |
Map<Integer, List<Order>> ordersMap = criteriaOrdersMap.get(criteriaId).entrySet().stream()
|
| - |
|
1599 |
.filter(x -> !fofoIds.contains(x.getKey())).collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
|
| - |
|
1600 |
|
| - |
|
1601 |
for (Map.Entry<Integer, List<Order>> orderEntry : ordersMap.entrySet()) {
|
| - |
|
1602 |
int fofoId = orderEntry.getKey();
|
| - |
|
1603 |
List<Order> orders = orderEntry.getValue();
|
| - |
|
1604 |
int totalQty = orders.stream().collect(Collectors.summingInt(x -> (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty())));
|
| - |
|
1605 |
int totalValue = orders.stream().collect(Collectors.summingInt(x -> Math.round(x.getLineItem().
|
| - |
|
1606 |
getUnitPrice() * (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty()))));
|
| - |
|
1607 |
int totalBaseQty = totalQty;
|
| - |
|
1608 |
int totalBaseValue = totalValue;
|
| - |
|
1609 |
if (userBaseCriteriaOrdersMap != null) {
|
| - |
|
1610 |
if (userBaseQtyMap.containsKey(fofoId)) {
|
| - |
|
1611 |
totalBaseQty = userBaseQtyMap.get(fofoId);
|
| - |
|
1612 |
totalBaseValue = userBaseValueMap.get(fofoId);
|
| - |
|
1613 |
} else {
|
| - |
|
1614 |
continue;
|
| - |
|
1615 |
}
|
| - |
|
1616 |
}
|
| - |
|
1617 |
|
| - |
|
1618 |
int purchasedValue;
|
| - |
|
1619 |
if (createOfferRequest.getTargetType().equals(AchievementType.VALUE)) {
|
| - |
|
1620 |
purchasedValue = totalBaseValue;
|
| - |
|
1621 |
} else {
|
| - |
|
1622 |
purchasedValue = totalBaseQty;
|
| - |
|
1623 |
}
|
| - |
|
1624 |
|
| - |
|
1625 |
PayoutSlab eligibleSlab = null;
|
| - |
|
1626 |
for (PayoutSlab payoutSlab : itemCriteriaPayout.getPayoutSlabs()) {
|
| - |
|
1627 |
if (payoutSlab.getOnwardsAmount() <= purchasedValue) {
|
| - |
|
1628 |
eligibleSlab = payoutSlab;
|
| - |
|
1629 |
} else {
|
| - |
|
1630 |
break;
|
| - |
|
1631 |
}
|
| - |
|
1632 |
}
|
| - |
|
1633 |
if (eligibleSlab == null) continue;
|
| - |
|
1634 |
|
| - |
|
1635 |
List<Integer> orderIds = orders.stream().map(x -> x.getId()).collect(Collectors.toList());
|
| - |
|
1636 |
Map<Integer, LineItem> lineItemMap = orders.stream().collect(Collectors.toMap(x -> x.getLineItem().getId(), x -> x.getLineItem()));
|
| - |
|
1637 |
List<WarehouseScan> warehouseScans = warehouseScanRepository.selectAllByOrderIds(orderIds);
|
| - |
|
1638 |
List<Integer> warehouseInventoryItemIds = warehouseScans.stream().collect(Collectors.groupingBy(x -> x.getInventoryItemId())).entrySet()
|
| - |
|
1639 |
.stream().filter(x -> x.getValue().size() == 1).map(x -> x.getKey()).collect(Collectors.toList());
|
| - |
|
1640 |
|
| - |
|
1641 |
List<OfferPayout> partnerPayouts = offerPayouts.stream().filter(x -> x.getFofoId() == fofoId).collect(Collectors.toList());
|
| - |
|
1642 |
Set<String> serialNumbersRejected = partnerPayouts.stream().filter(x -> x.getStatus().equals(SchemePayoutStatus.REJECTED)).map(x -> x.getSerialNumber()).collect(Collectors.toSet());
|
| - |
|
1643 |
|
| - |
|
1644 |
Set<String> billedNotCancelledSerialNumbers;
|
| - |
|
1645 |
if (warehouseInventoryItemIds.size() > 0) {
|
| - |
|
1646 |
List<WarehouseInventoryItem> warehouseInventoryItems = warehouseInventoryItemRepository.selectAllByIds(warehouseInventoryItemIds);
|
| - |
|
1647 |
billedNotCancelledSerialNumbers = warehouseInventoryItems.stream().map(x -> x.getSerialNumber()).collect(Collectors.toSet());
|
| - |
|
1648 |
} else {
|
| - |
|
1649 |
billedNotCancelledSerialNumbers = new HashSet<>();
|
| - |
|
1650 |
}
|
| - |
|
1651 |
|
| - |
|
1652 |
Map<String, LineItem> serialNumberMap = lineItemImeisRepository.selectByLineItemIds(new ArrayList<>(lineItemMap.keySet()))
|
| - |
|
1653 |
.stream().filter(x -> !serialNumbersRejected.contains(x.getSerialNumber()))
|
| - |
|
1654 |
.collect(Collectors.toMap(x -> x.getSerialNumber(), x -> lineItemMap.get(x.getLineItemId()), (x1, x2) -> x1.getId() > x2.getId() ? x1 : x2));
|
| - |
|
1655 |
|
| - |
|
1656 |
List<String> manuallyEligibleImeis = offerEligibleImeiRepository.selectEligibleImeisByOfferId(createOfferRequest.getId());
|
| - |
|
1657 |
|
| - |
|
1658 |
serialNumberMap = serialNumberMap.entrySet().stream().filter(x -> billedNotCancelledSerialNumbers.contains(x.getKey()))
|
| - |
|
1659 |
.collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
|
| - |
|
1660 |
|
| - |
|
1661 |
Map<String, InventoryItem> serialNumberInventoryItemMap = this.getInventoryItemMap(fofoId, serialNumberMap);
|
| - |
|
1662 |
if (serialNumberInventoryItemMap.size() < billedNotCancelledSerialNumbers.size()) continue;
|
| - |
|
1663 |
|
| - |
|
1664 |
if (manuallyEligibleImeis != null) {
|
| - |
|
1665 |
serialNumberMap = serialNumberMap.entrySet().stream().filter(x -> manuallyEligibleImeis.contains(x.getKey()))
|
| - |
|
1666 |
.collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
|
| - |
|
1667 |
if (serialNumberMap.size() == 0) continue;
|
| - |
|
1668 |
serialNumberInventoryItemMap = this.getInventoryItemMap(fofoId, serialNumberMap);
|
| - |
|
1669 |
}
|
| - |
|
1670 |
if (serialNumberMap.size() == 0) continue;
|
| - |
|
1671 |
|
| - |
|
1672 |
float eligiblePayoutValue = eligibleSlab.getPayoutAmount();
|
| - |
|
1673 |
double finalPayout;
|
| - |
|
1674 |
if (AmountType.PERCENTAGE.equals(itemCriteriaPayout.getAmountType())) {
|
| - |
|
1675 |
finalPayout = (eligiblePayoutValue * purchasedValue) / 100;
|
| - |
|
1676 |
} else if (AmountType.FIXED.equals(itemCriteriaPayout.getAmountType())) {
|
| - |
|
1677 |
finalPayout = eligiblePayoutValue * totalQty;
|
| - |
|
1678 |
} else {
|
| - |
|
1679 |
Map<Integer, Double> fofoCriteriaPayoutMap = fixedSlabCriteriaPartnerMap.get(criteriaId);
|
| - |
|
1680 |
finalPayout = eligiblePayoutValue;
|
| - |
|
1681 |
if (fofoCriteriaPayoutMap != null && fofoCriteriaPayoutMap.containsKey(fofoId)) {
|
| - |
|
1682 |
finalPayout = eligiblePayoutValue - fofoCriteriaPayoutMap.get(fofoId);
|
| - |
|
1683 |
if (Math.abs(finalPayout) < Utils.DOUBLE_EPSILON) {
|
| - |
|
1684 |
finalPayout = 0;
|
| - |
|
1685 |
}
|
| - |
|
1686 |
}
|
| - |
|
1687 |
}
|
| - |
|
1688 |
|
| - |
|
1689 |
if (finalPayout > 0) {
|
| - |
|
1690 |
result.add(new SellinPartnerPayoutData(
|
| - |
|
1691 |
fofoId, criteriaId, finalPayout, eligiblePayoutValue,
|
| - |
|
1692 |
serialNumberInventoryItemMap, itemCriteriaPayout,
|
| - |
|
1693 |
serialNumberPaid, createOfferRequest.isDiscount()));
|
| - |
|
1694 |
}
|
| - |
|
1695 |
}
|
| - |
|
1696 |
}
|
| - |
|
1697 |
|
| - |
|
1698 |
return result;
|
| - |
|
1699 |
}
|
| - |
|
1700 |
|
| 1385 |
private void rollbackPayout(int fofoId, int offerId, List<
|
1701 |
private void rollbackPayout(int fofoId, int offerId, List<
|
| 1386 |
OfferPayout> partnerPayouts, Set<String> returnedSerialNumbers) throws ProfitMandiBusinessException {
|
1702 |
OfferPayout> partnerPayouts, Set<String> returnedSerialNumbers) throws ProfitMandiBusinessException {
|
| 1387 |
LOGGER.info("Rollback payout called for offerId {}", offerId);
|
1703 |
LOGGER.info("Rollback payout called for offerId {}", offerId);
|
| 1388 |
float amountToRollback = 0;
|
1704 |
float amountToRollback = 0;
|
| 1389 |
int totalImeis = 0;
|
1705 |
int totalImeis = 0;
|