<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SmartDukaan &#x2013; /trunk/profitmandi-dao/</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Sat, 25 Apr 2026 18:00:44 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;max=40&amp;</link><atom:link href="https://svn.smartdukaan.com/rss.php?isdir=1&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Fri, 24 Apr 2026 18:31:25 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36387 – code commit for reports section v2</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;code commit for reports section v2&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/InventoryServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoInventoryController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoReportsController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/enumeration/PartnerReportType.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36387</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36387</guid></item>
<item><pubDate>Fri, 24 Apr 2026 18:05:26 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36383 – Add DbErrorTranslator: translates Spring DataIntegrityViolationException (truncation / duplicate key / ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add DbErrorTranslator: translates Spring DataIntegrityViolationException (truncation / duplicate key / FK violation) into ProfitMandiBusinessException with prettified field label.&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/exception&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/exception/DbErrorTranslator.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36383</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36383</guid></item>
<item><pubDate>Fri, 24 Apr 2026 16:44:47 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36376 – Feat:Cart Api Implementation</title><description>&lt;div&gt;&lt;strong&gt;aman – 43 file(s) modified&lt;/strong&gt;&lt;br/&gt;Feat:Cart Api Implementation&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/BlockerType.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartBlocker.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartContent.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartEventType.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartHydrationService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartHydrationServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartLifecycleStatus.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartReservationConstants.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartReservationService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartReservationServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartValidationService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartValidationServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CartWarning.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CheckoutValidationResult.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/CouponState.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/HydratedCart.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/HydratedLine.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/InsuranceBinding.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/LineReservation.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/LineStatus.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/LiveInventory.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/LivePrice.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/OpenCartValidationResult.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/PricingBreakup.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/Reservation.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/SaleType.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/TaxBreakup.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/cart/v2/WarningType.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/Cart.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/user/CartLine.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/dtr/AccountType.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/UserAccountRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/dtr/UserAccountRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/CartRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/user/CartRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-web/docs&lt;br /&gt;+ /trunk/profitmandi-web/docs/tests&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/checkout/OrderController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/StoreController.java&lt;br /&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2BillingController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2CartController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2OrderController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36376</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36376</guid></item>
<item><pubDate>Fri, 24 Apr 2026 15:36:20 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36375 – Added Rising Star/NEW</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Added Rising Star/NEW&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/SDCreditServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36375</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36375</guid></item>
<item><pubDate>Fri, 24 Apr 2026 15:23:35 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36374 – schemes and offer for v2 version</title><description>&lt;div&gt;&lt;strong&gt;ranu – 9 file(s) modified&lt;/strong&gt;&lt;br/&gt;schemes and offer for v2 version&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/catalog/Scheme.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/OfferRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/OfferRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/SchemeRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/SchemeRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoOfferController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoSchemeController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36374</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36374</guid></item>
<item><pubDate>Fri, 24 Apr 2026 12:46:08 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36372 – Wallet: SELECT FOR UPDATE on user_wallet mutations to close lost-update ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;Wallet: SELECT FOR UPDATE on user_wallet mutations to close lost-update hole&lt;br /&gt;
&lt;br /&gt;
addAmountToWallet/consumeAmountFromWallet(x2)/rollbackAmountFromWallet all&lt;br /&gt;
follow a read-modify-write pattern on user_wallet with no pessimistic lock&lt;br /&gt;
and no @Version, so two concurrent tx for the same partner both read the&lt;br /&gt;
same pre-snapshot amount, compute their own deltas, and commit - the second&lt;br /&gt;
UPDATE silently overwrites the first&apos;s credit/debit. user_wallet_history&lt;br /&gt;
still gets both rows, so balance drifts vs sum(history) with no exception.&lt;br /&gt;
&lt;br /&gt;
Replaces the misnamed (and body-broken) selectByIdForUpdate - whose&lt;br /&gt;
implementation was a plain selectById, not a lock - with a new&lt;br /&gt;
selectByRetailerIdForUpdate that issues SELECT ... FOR UPDATE via&lt;br /&gt;
LockModeType.PESSIMISTIC_WRITE, mirroring the idiom already used in&lt;br /&gt;
GenericRepositoryImpl.selectByIdForUpdate and OrderRepositoryImpl.&lt;br /&gt;
Preserves the create-on-missing behavior of selectByRetailerId so&lt;br /&gt;
first-time partners keep working.&lt;br /&gt;
&lt;br /&gt;
Switches the four read-modify-write call sites in WalletServiceImpl from&lt;br /&gt;
selectByRetailerId to the new locking variant. Read-only callers&lt;br /&gt;
(getUserWalletByUserId, getUserWalletHistoryByUserId, etc.) keep using&lt;br /&gt;
the non-locking selectByRetailerId - MVCC snapshot reads stay non-blocking&lt;br /&gt;
for display/statement endpoints.&lt;br /&gt;
&lt;br /&gt;
Also drops the stale commented-out selectByIdForUpdate line in&lt;br /&gt;
rollbackAmountFromWallet and removes the broken method from the&lt;br /&gt;
UserWalletRepository interface / impl - it had zero live callers.&lt;br /&gt;
&lt;br /&gt;
Blast radius: every write call to these three wallet methods now holds&lt;br /&gt;
an X-lock on the target user_wallet row for the rest of the outer tx.&lt;br /&gt;
Concurrent write tx for the same partner will briefly serialize at the&lt;br /&gt;
SELECT FOR UPDATE - correct serialization instead of silent drift.&lt;br /&gt;
Read-only traffic is unaffected (MVCC).&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/UserWalletRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/UserWalletRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/wallet/WalletServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36372</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36372</guid></item>
<item><pubDate>Fri, 24 Apr 2026 12:10:46 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36371 – HDFC webhook: INSERT IGNORE on hdfc_payment to fix concurrent-duplicate 500 ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;HDFC webhook: INSERT IGNORE on hdfc_payment to fix concurrent-duplicate 500 storm&lt;br /&gt;
&lt;br /&gt;
Replaces persist() with a native INSERT IGNORE so concurrent same-UTR webhook&lt;br /&gt;
retries serialize on the unique-index check, and the loser gets a 0-row no-op&lt;br /&gt;
(warning, not exception). Outer @Transactional session stays clean, Spring&lt;br /&gt;
commits normally, HDFC sees 200 on both the winner (Success) and the loser&lt;br /&gt;
(Duplicate) - retry amplification ends.&lt;br /&gt;
&lt;br /&gt;
Flow:&lt;br /&gt;
  persist(hdfcPayment)  -&gt;  insertIgnore(hdfcPayment) + selectByUtrNo(utr)&lt;br /&gt;
  - inserted == 1: proceed with wallet / sidbi side-effects using fetched id&lt;br /&gt;
  - inserted == 0: respond Duplicate, skip side-effects (owned by winning tx)&lt;br /&gt;
  - defensive: log warn if insertIgnore returned 0 but selectByUtrNo finds&lt;br /&gt;
    no row (could mean IGNORE swallowed a non-duplicate issue like truncation)&lt;br /&gt;
&lt;br /&gt;
Also drops HdfcProcessingHelper (r36366) which used REQUIRES_NEW for the same&lt;br /&gt;
goal; that approach required a second JDBC connection and is no longer needed&lt;br /&gt;
with SQL-level idempotency.&lt;br /&gt;
&lt;br /&gt;
Does NOT touch the wallet-side lost-update hole (user_wallet read-modify-write&lt;br /&gt;
without FOR UPDATE). That is a separate commit.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/HdfcPaymentRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/HdfcPaymentRepositoryImpl.java&lt;br /&gt;x /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/HdfcProcessingHelper.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/hdfc/HdfcPaymentController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36371</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36371</guid></item>
<item><pubDate>Thu, 23 Apr 2026 17:07:04 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36366 – Add HdfcProcessingHelper: per-payment REQUIRES_NEW wrapper for HDFC credit writes  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add HdfcProcessingHelper: per-payment REQUIRES_NEW wrapper for HDFC credit writes&lt;br /&gt;
&lt;br /&gt;
Isolates the hdfc_payment insert + wallet-credit / sidbi-sanction writes in&lt;br /&gt;
their own transaction so concurrent duplicate webhooks (HDFC retry, manual&lt;br /&gt;
entry, reconciliation) can&apos;t poison the caller&apos;s session. On the deadlock/&lt;br /&gt;
duplicate-key path (DataIntegrityViolationException), logs once at INFO and&lt;br /&gt;
returns silently — the row&apos;s side-effects are owned by whichever path&lt;br /&gt;
inserted it first; re-applying would double-credit.&lt;br /&gt;
&lt;br /&gt;
Mirrors the OfferProcessingHelper pattern (also REQUIRES_NEW per item),&lt;br /&gt;
keeping the controller&apos;s outer transaction clean and making this method&lt;br /&gt;
safe to invoke from a batch loop later without refactor.&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/HdfcProcessingHelper.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36366</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36366</guid></item>
<item><pubDate>Thu, 23 Apr 2026 14:44:31 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36364 – Fix /activateFinanceServices returning empty row for retailers without partner_onboarding_panel  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix /activateFinanceServices returning empty row for retailers without partner_onboarding_panel&lt;br /&gt;
&lt;br /&gt;
Change selectFinanceServicesByFofoId named query to LEFT JOIN PartnerOnBoardingPanel.&lt;br /&gt;
Previously an inner join filtered out 32 fofo_stores (16 internal + 16 external)&lt;br /&gt;
lacking an onboarding panel row, so the /activateFinanceServices response rendered&lt;br /&gt;
empty for them (e.g. codeInt=1359 / UPGBN1359) even though the partner_service&lt;br /&gt;
save itself worked.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/ServiceBrandsConfig.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36364</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36364</guid></item>
<item><pubDate>Wed, 22 Apr 2026 19:49:38 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36362 – Make fofo_order creation idempotent on (fofo_id, invoice_number)  Fixes insert-intention ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Make fofo_order creation idempotent on (fofo_id, invoice_number)&lt;br /&gt;
&lt;br /&gt;
Fixes insert-intention gap-lock deadlocks on idx_invoice_number observed in&lt;br /&gt;
SHOW ENGINE INNODB STATUS at 2026-04-22 13:01:54 — two concurrent requests&lt;br /&gt;
inserting the same invoice_number for the same customer (client retry /&lt;br /&gt;
upstream webhook retry pattern).&lt;br /&gt;
&lt;br /&gt;
- OrderServiceImpl.createAndGetFofoOrder: select-then-insert idempotency.&lt;br /&gt;
  Fast path returns existing row if already created; slow-race path catches&lt;br /&gt;
  DataIntegrityViolationException and re-selects the winner&apos;s row.&lt;br /&gt;
- add_uk_fofo_order_fofo_invoice.sql: adds UNIQUE KEY (fofo_id, invoice_number)&lt;br /&gt;
  so the loser of a concurrent-insert race gets a clean DIVE instead of a&lt;br /&gt;
  silent duplicate row (pre-check showed zero existing dup groups, safe).&lt;br /&gt;
&lt;br /&gt;
findExistingFofoOrder wraps the repo call to swallow the repo&apos;s declared&lt;br /&gt;
ProfitMandiBusinessException — the impl actually returns null on not-found&lt;br /&gt;
(constructs an exception but never throws), so the swallow matches reality.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/order/OrderServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/add_uk_fofo_order_fofo_invoice.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36362</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36362</guid></item>
<item><pubDate>Wed, 22 Apr 2026 18:27:39 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36359 – rbm rating dashboard view commited</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm rating dashboard view commited&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36359</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36359</guid></item>
<item><pubDate>Wed, 22 Apr 2026 17:43:38 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36357 – Fix background-thread &apos;no session&apos; error in DB guard. CronBatchRepository.selectRunningForOffer uses ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix background-thread &apos;no session&apos; error in DB guard. CronBatchRepository.selectRunningForOffer uses getCurrentSession() which needs an open tx; when OfferBatchService.processOfferWithBatch is called from the async worker thread (no outer tx), the guard query crashed with &apos;Could not obtain transaction-synchronized Session&apos;. Offer 8819 submit succeeded but the background run died at the guard — before createBatch, so no cron_batch / cron_batch_item rows. Added CronBatchService.findRunningForOffer wrapping the repo call in @Transactional(readOnly=true); orchestrator calls the service method instead of repo directly. Matches the pattern used by loadOfferRequest / createBatch / calculate*Payouts — every caller opens its own tx.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/cron/CronBatchService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferBatchService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36357</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36357</guid></item>
<item><pubDate>Wed, 22 Apr 2026 17:16:50 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36356 – rbm rating dashboard view commited</title><description>&lt;div&gt;&lt;strong&gt;ranu – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm rating dashboard view commited&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/RbmRating.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/RbmRatingRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/RbmRatingRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/MonitorController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36356</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36356</guid></item>
<item><pubDate>Wed, 22 Apr 2026 16:40:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36355 – Skip already-paid partners before creating cron_batch_item rows. Adds hasRemainingSellinPayout / ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Skip already-paid partners before creating cron_batch_item rows. Adds hasRemainingSellinPayout / hasRemainingOfferPayout predicates on OfferProcessingHelper that mirror the amount calc in processPartner*Payout. Orchestrator filters partnerPayouts through these before createBatch — partners whose serials are fully paid (amount=0 after subtracting serialNumberPaid) are excluded entirely. Reruns of a completed offer now create no batch at all (log says &apos;all N eligible partners already fully paid, skipping batch&apos;); partial reruns log filtered count. Avoids audit-trail noise of SUCCESS items that did zero work.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferBatchService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferProcessingHelper.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36355</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36355</guid></item>
<item><pubDate>Wed, 22 Apr 2026 16:17:20 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36354 – DB-backed concurrent-run guard for OfferBatchService.processOfferWithBatch. Adds CronBatchRepository.selectRunningForOffer(offerId) — single HQL ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;DB-backed concurrent-run guard for OfferBatchService.processOfferWithBatch. Adds CronBatchRepository.selectRunningForOffer(offerId) — single HQL query for RUNNING cron_batch rows named processSellinOffer-N or processActivationOffer-N. OfferBatchService early-returns (with a log) if any such row exists. Covers the three gaps the in-memory guard can&apos;t: JVM restart, multi-JVM, cron CLI + user click racing. Applies to both sync (cron --processOffersWithBatch) and async (/offer/process HTTP) paths.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferBatchService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36354</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36354</guid></item>
<item><pubDate>Wed, 22 Apr 2026 15:00:24 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36351 – Add CronBatchRepository.selectRecent(limit) and CronBatchItemRepository.selectByBatchId(batchId) for admin batch review UI. selectRecent ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add CronBatchRepository.selectRecent(limit) and CronBatchItemRepository.selectByBatchId(batchId) for admin batch review UI. selectRecent returns most-recent-first via selectAllOrderByDescPaginated(&apos;id&apos;); selectByBatchId uses selectAllByEqualOrderByDesc.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchItemRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36351</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36351</guid></item>
<item><pubDate>Wed, 22 Apr 2026 14:57:24 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36350 – Fix:Add brand commitment, ASM details, and finance option in WOD ...</title><description>&lt;div&gt;&lt;strong&gt;aman – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:Add brand commitment, ASM details, and finance option in WOD initiation email&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/user/StoreTimelineTatServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36350</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36350</guid></item>
<item><pubDate>Wed, 22 Apr 2026 14:43:56 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36347 – Add submitBatchAsync for fire-and-forget /offer/process — schedules processOfferWithBatch on a ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add submitBatchAsync for fire-and-forget /offer/process — schedules processOfferWithBatch on a bounded background pool (3 daemon threads) and returns immediately with a human-readable message. In-memory ConcurrentHashMap.newKeySet() per-offerId guard prevents duplicate concurrent runs for the same offer (the scenario that caused offer 8802 deadlocks). Sync processOfferWithBatch kept unchanged for cron CLI (--processOffersWithBatch).&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferBatchService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36347</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36347</guid></item>
<item><pubDate>Wed, 22 Apr 2026 13:47:10 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36346 – rbm rating dashboard view commited</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm rating dashboard view commited&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/WarehouseAgingStockModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36346</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36346</guid></item>
<item><pubDate>Wed, 22 Apr 2026 12:30:47 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36342 – Add OfferBatchService orchestrator — shared batch entrypoint for offer processing, ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add OfferBatchService orchestrator — shared batch entrypoint for offer processing, used by cron CLI and /offer/process controllers. Loads offer, calls calculate*Payouts (read), creates cron_batch, runs each partner in REQUIRES_NEW via OfferProcessingHelper, finalizes batch and emails on partial failure. No @Transactional on the class — must not carry outer tx.&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferBatchService.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36342</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36342</guid></item>
<item><pubDate>Wed, 22 Apr 2026 11:53:38 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36337 – Move CronBatchService and OfferProcessingHelper from cron to dao so web/fofo ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Move CronBatchService and OfferProcessingHelper from cron to dao so web/fofo can reuse the batch infra; fix empty-IMEI NPE in getInventoryItemMap that broke /offer/process for partners with no billed/scanned serials&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/cron&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/cron/CronBatchService.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferProcessingHelper.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36337</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36337</guid></item>
<item><pubDate>Wed, 22 Apr 2026 11:46:23 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36336 – sales dispostion updated</title><description>&lt;div&gt;&lt;strong&gt;ranu – 7 file(s) modified&lt;/strong&gt;&lt;br/&gt;sales dispostion updated&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/RbmRating.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/fofo/SalesRating.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/RbmRatingRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/RbmRatingRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/SalesRatingRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/SalesRatingRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/controller/LeadController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36336</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36336</guid></item>
<item><pubDate>Tue, 21 Apr 2026 18:18:22 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36335 – rbm rating dashboard view commited</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm rating dashboard view commited&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/WarehouseAgingStockModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36335</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36335</guid></item>
<item><pubDate>Tue, 21 Apr 2026 18:16:07 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36334 – rbm rating dashboard view commited</title><description>&lt;div&gt;&lt;strong&gt;ranu – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm rating dashboard view commited&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/RbmPerformanceDashboardModel.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/MonitorController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/today_po_rbm.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36334</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36334</guid></item>
<item><pubDate>Tue, 21 Apr 2026 18:08:09 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36333 – Fix IllegalStateException: drop &apos;unless&apos; when using @Cacheable(sync=true)  Spring Cache ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix IllegalStateException: drop &apos;unless&apos; when using @Cacheable(sync=true)&lt;br /&gt;
&lt;br /&gt;
Spring Cache rejects @Cacheable with both sync=true AND an &apos;unless&apos; attribute,&lt;br /&gt;
throwing IllegalStateException on every invocation. Surfaced in production log&lt;br /&gt;
on smartdukaan — MonitorController.todayPORBM:739 was returning 500 on 40&lt;br /&gt;
observed calls this session.&lt;br /&gt;
&lt;br /&gt;
Dropped &apos;unless&apos;. Caching an occasionally-empty List for 5 min is harmless:&lt;br /&gt;
months with no sales produce an empty result, which is cheaper to re-query&lt;br /&gt;
after 5 min than to keep special-casing. The real fix driver for sync=true&lt;br /&gt;
(stampede protection) is preserved.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36333</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36333</guid></item>
<item><pubDate>Tue, 21 Apr 2026 17:37:58 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36332 – moveToBill: fix loop reassigning order back to worse warehouse  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;moveToBill: fix loop reassigning order back to worse warehouse&lt;br /&gt;
&lt;br /&gt;
- Break after first warehouse that covers remaining qty; loop used to&lt;br /&gt;
  fall through and overwrite fulfilment WH with every subsequent snapshot,&lt;br /&gt;
  so orders ended up pinned to the last (least-available) candidate.&lt;br /&gt;
- Sort candidates by net availability (availability - reserved) desc&lt;br /&gt;
  so the best warehouse is tried first.&lt;br /&gt;
- Track remainingQty across splits; keep current orderId on the chunk&lt;br /&gt;
  being placed and move the leftover to the deferred order.&lt;br /&gt;
- Null guard on itemSnapshots when no vendor under the billing WH has&lt;br /&gt;
  stock/reservation for the item.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36332</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36332</guid></item>
<item><pubDate>Tue, 21 Apr 2026 16:34:45 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36331 – Fix @Cacheable name collision between getSaholicStockList variants  SaholicInventoryServiceImpl:271 and ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix @Cacheable name collision between getSaholicStockList variants&lt;br /&gt;
&lt;br /&gt;
SaholicInventoryServiceImpl:271 and :282 both used @Cacheable(value =&lt;br /&gt;
&apos;saholicCISList&apos;) on no-arg methods. Spring&apos;s default SimpleKey.EMPTY means&lt;br /&gt;
both methods shared ONE cache entry — whichever was called first poisoned the&lt;br /&gt;
cache for the other, even though they return different filtered sets:&lt;br /&gt;
&lt;br /&gt;
- getSaholicStockList (:272) runs selectWarehouseCisNew — tl.active=1 only&lt;br /&gt;
- getSaholicStockListWithoutCatalogMovingStatus (:283) runs&lt;br /&gt;
  selectWarehouseCisNewWithoutCatalogMovingStatus — includes catalog moving&lt;br /&gt;
  status join and filters out non-stocked OTHER/SLOWMOVING items&lt;br /&gt;
&lt;br /&gt;
Renamed the second cache to &apos;saholicCISListWithStatus&apos; so each method uses&lt;br /&gt;
its own namespace. Consumers of either method now get their method&apos;s actual&lt;br /&gt;
result, not a random earlier caller&apos;s.&lt;br /&gt;
&lt;br /&gt;
This is a correctness fix (wrong cached data) more than a perf fix, though&lt;br /&gt;
it does mean both caches fill independently now (tiny cold-path DB uptick,&lt;br /&gt;
already mitigated by 5-min TTL via timeoutCacheManager).&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/SaholicInventoryServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36331</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36331</guid></item>
<item><pubDate>Tue, 21 Apr 2026 16:10:52 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36330 – Fix getWarehousewiseCollection: add timestamp index, drop misleading FORCE INDEX  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix getWarehousewiseCollection: add timestamp index, drop misleading FORCE INDEX&lt;br /&gt;
&lt;br /&gt;
EXPLAIN on hadb1 showed the query was full-scanning transaction.userwallethistory&lt;br /&gt;
(1.9M rows) despite FORCE INDEX (idx_uwh_wallet_timestamp). The composite&lt;br /&gt;
(wallet_id, timestamp) needs an equality predicate on wallet_id to be usable,&lt;br /&gt;
but this query filters by uwh.timestamp at the scan level with no wallet_id —&lt;br /&gt;
driven from fofo_store via joins. Optimizer correctly rejected the hint and&lt;br /&gt;
picked ALL. Query averaged 773 ms across 4,095 calls (3,167 s cumulative).&lt;br /&gt;
&lt;br /&gt;
- add_idx_uwh_timestamp_reftype.sql: new index on (timestamp, reference_type)&lt;br /&gt;
  so the range scan narrows by time and reference_type filters inline.&lt;br /&gt;
- UserWalletRepositoryImpl:110: drop FORCE INDEX hint; let optimizer choose.&lt;br /&gt;
  Updated comment to explain why.&lt;br /&gt;
&lt;br /&gt;
Left PartnerCollectionPlanRepositoryImpl.getCommitmentCollectionSummary:117&lt;br /&gt;
untouched — that query drives from pcp → userwallet → userwallethistory and&lt;br /&gt;
the join has wallet_id = uw.id known at scan, so (wallet_id, timestamp) is&lt;br /&gt;
the right index there; FORCE INDEX remains appropriate.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/UserWalletRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/add_idx_uwh_timestamp_reftype.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36330</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36330</guid></item>
<item><pubDate>Tue, 21 Apr 2026 16:05:02 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36329 – Tune rbmWeeklyBilling cache: 2m→5m TTL + sync=true  The RBM ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Tune rbmWeeklyBilling cache: 2m→5m TTL + sync=true&lt;br /&gt;
&lt;br /&gt;
The RBM weekly billing aggregate query takes ~2s per call (1,924 cumulative hits&lt;br /&gt;
on hadb1 = 3,800s DB time). Previously cached for only 2 minutes with no&lt;br /&gt;
stampede protection — every 2m window, every concurrent dashboard load ran the&lt;br /&gt;
aggregate in parallel and burnt Hikari slots simultaneously.&lt;br /&gt;
&lt;br /&gt;
- 2m → 5m: this is month-level aggregate bucketed by week, doesn&apos;t need&lt;br /&gt;
  sub-minute freshness for an RBM dashboard.&lt;br /&gt;
- sync=true: single in-JVM computation per (monthStart, monthEnd) key per&lt;br /&gt;
  expiry window; concurrent misses wait for the in-flight load instead of&lt;br /&gt;
  racing to the DB.&lt;br /&gt;
&lt;br /&gt;
fiveMintimeoutCacheManager already exists in CacheConfig:73 (Caffeine, in-memory,&lt;br /&gt;
so no Redis/LocalDateTime serialization concerns).&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/RbmTargetServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36329</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36329</guid></item>
<item><pubDate>Tue, 21 Apr 2026 14:55:02 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36328 – Remove @Cacheable from getFirstBillingDate — LocalDateTime + Redis incompatibility  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Remove @Cacheable from getFirstBillingDate — LocalDateTime + Redis incompatibility&lt;br /&gt;
&lt;br /&gt;
The redisOneDayCacheManager (CacheConfig.java:109-116) is configured with&lt;br /&gt;
enableDefaultTyping(NON_FINAL, JsonTypeInfo.As.PROPERTY). That embeds type info&lt;br /&gt;
as a JSON object property, which is only valid for objects ({}) — not arrays.&lt;br /&gt;
JavaTimeModule serializes LocalDateTime as an array ([y,m,d,h,m,s]), so the&lt;br /&gt;
write drops type metadata and reads fail with MismatchedInputException&lt;br /&gt;
(&apos;need JSON String that contains type id&apos;).&lt;br /&gt;
&lt;br /&gt;
The underlying NamedQuery (Order.selectFirstBillingByRetailer) uses MIN() on&lt;br /&gt;
the idx_order_customer_billing composite index — EXPLAIN reports &apos;Select tables&lt;br /&gt;
optimized away&apos;. Per-call latency is microseconds even uncached, so Redis&lt;br /&gt;
caching was optimization rather than requirement. Simpler to drop the annotation&lt;br /&gt;
than reconfigure the shared cache manager.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/TransactionRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36328</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36328</guid></item>
<item><pubDate>Tue, 21 Apr 2026 13:35:46 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36327 – Fix currentinventorysnapshot/currentreservationsnapshot deadlock and optimize getFirstBillingDate  - SaholicInventoryServiceImpl: enforce ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 4 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix currentinventorysnapshot/currentreservationsnapshot deadlock and optimize getFirstBillingDate&lt;br /&gt;
&lt;br /&gt;
- SaholicInventoryServiceImpl: enforce reservation-snapshot → inventory-snapshot&lt;br /&gt;
  lock order in addReservationCount and reduceReservationCount via explicit&lt;br /&gt;
  session.flush(); eliminates the hadb1 deadlock recorded 2026-04-20 19:43:24&lt;br /&gt;
  between these two methods&apos; opposite-order writes.&lt;br /&gt;
- SaholicInventorySnapshot: add @DynamicUpdate so UPDATEs only rewrite the&lt;br /&gt;
  changed column instead of all three — cuts redo/binlog write amplification&lt;br /&gt;
  and makes deadlock dumps pinpoint the actual business path.&lt;br /&gt;
- TransactionRepositoryImpl.getFirstBillingDate: replace filesort-over-all-billed-&lt;br /&gt;
  orders with MIN(billingTimestamp) via new Order.selectFirstBillingByRetailer&lt;br /&gt;
  named query (Select tables optimized away). Preserves 2017-01-01 cutoff and&lt;br /&gt;
  null-for-unbilled-partner semantics.&lt;br /&gt;
- Add @Cacheable on redisOneDayCacheManager keyed by fofoId (unless null) so the&lt;br /&gt;
  8 call sites stop piling up identical SELECTs on the order table — this was&lt;br /&gt;
  the query pinning Hikari slots at 150-460s each in recent processlist dumps.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/inventory/SaholicInventorySnapshot.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/transaction/Order.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/TransactionRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/SaholicInventoryServiceImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36327</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36327</guid></item>
<item><pubDate>Tue, 21 Apr 2026 12:22:08 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36323 – Fix app config</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix app config&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/resources/shared-prod.properties&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36323</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36323</guid></item>
<item><pubDate>Mon, 20 Apr 2026 19:11:40 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36318 – Fix:Migrate legacy Purchase Return flow (Report + Bulk Create + ...</title><description>&lt;div&gt;&lt;strong&gt;aman – 10 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:Migrate legacy Purchase Return flow (Report + Bulk Create + Debit Notes) into FOFO&lt;/div&gt;+ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/ImeiVerificationResult.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/PurchaseReturn.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/PurchaseReturnSettlementEntity.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/PurchaseReturnRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/PurchaseReturnRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/PurchaseReturnSettlementRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/PurchaseReturnSettlementRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/migration_unsettled_purchase_return_menu.sql&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/create-purchase-return.vm&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/unsettled-purchase-returns.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36318</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36318</guid></item>
<item><pubDate>Mon, 20 Apr 2026 19:00:06 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36316 – Fix:Migrate legacy Purchase Return flow (Report + Bulk Create + ...</title><description>&lt;div&gt;&lt;strong&gt;aman – 9 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:Migrate legacy Purchase Return flow (Report + Bulk Create + Debit Notes) into FOFO&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/warehouse/DebitNoteType.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/PurchaseReturnOrderRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/fofo/PurchaseReturnOrderRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/WarehouseInventoryItemRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/inventory/PurchaseReturnServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/PurchaseReturnController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/resources/js/business/return.js&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36316</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36316</guid></item>
<item><pubDate>Mon, 20 Apr 2026 14:56:22 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36315 – rbm rating dashboard view commited</title><description>&lt;div&gt;&lt;strong&gt;ranu – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm rating dashboard view commited&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/RbmPerformanceDashboardModel.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/monitors/MonitorController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/service/KnowlarityInsightsService.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/rbm_call_target.vm&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/today_po_rbm.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36315</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36315</guid></item>
<item><pubDate>Mon, 20 Apr 2026 12:09:16 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36314 – Fix Dummy warehouse creation defaults and backfill invoice receiveDate  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix Dummy warehouse creation defaults and backfill invoice receiveDate&lt;br /&gt;
&lt;br /&gt;
- ensureDummyForBillingRegion: set isAvailabilityMonitored=0, transferDelayInHours=0,&lt;br /&gt;
  source=0 explicitly; copy logisticsLocation and pincode from billing warehouse&lt;br /&gt;
  (matches createVendorWarehouse pattern)&lt;br /&gt;
- Add SQL to backfill warehouse.invoice.receiveDate from warehouse.purchase.receivedOn&lt;br /&gt;
  for received invoices where receiveDate is NULL&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/fix_invoice_receiveDate_from_purchase.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36314</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36314</guid></item>
<item><pubDate>Mon, 20 Apr 2026 07:58:35 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36311 – rbm rating dashboard view commited</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;rbm rating dashboard view commited&lt;/div&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/model/RbmPerformanceDashboardModel.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36311</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36311</guid></item>
<item><pubDate>Mon, 20 Apr 2026 00:16:35 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36309 – Route phantom orders to per-region Dummy warehouse; complete applyColorChange rename ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 8 file(s) modified&lt;/strong&gt;&lt;br/&gt;Route phantom orders to per-region Dummy warehouse; complete applyColorChange rename&lt;br /&gt;
&lt;br /&gt;
- Phantom allocations in getFulfillments route to the Dummy/GOOD/OURS warehouse under&lt;br /&gt;
  vendor 40 for the partner&apos;s billing region. WarehouseServiceImpl.ensureDummyForBillingRegion&lt;br /&gt;
  returns the existing Dummy or creates one on the fly. createVendorWarehouse hook auto-seeds&lt;br /&gt;
  a Dummy when a new billing region&apos;s first warehouse is created.&lt;br /&gt;
- WarehouseRepository.selectByVendorBillingAndType supports the lookup.&lt;br /&gt;
- OrderService interface: rename notifyColorChange -&gt; applyColorChange to match r36305&apos;s impl&lt;br /&gt;
  rename (r36305 renamed only the impl, leaving trunk inconsistent).&lt;br /&gt;
- PurchaseOrderServiceImpl: remove auto-rebalance on PO receive. Real-wh rebalancing and&lt;br /&gt;
  phantom-to-real binding are now ops-driven via the order billing UI&lt;br /&gt;
  (changeFulfillmentWarehouse / applyColorChange / moveOrdersFulfilmentWarehouse).&lt;br /&gt;
- migration_dummy_warehouses.sql: idempotent seeding script for 14 Dummy/GOOD/OURS warehouses&lt;br /&gt;
  under vendor 40, one per WAREHOUSE_MAP billing region that lacked one. Already applied to&lt;br /&gt;
  hadb1 and local.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/WarehouseRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/inventory/WarehouseRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/warehouse/BrandRegionMappingRepository.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/order/OrderService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/PurchaseOrderServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/warehouse/WarehouseServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/migration_dummy_warehouses.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36309</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36309</guid></item>
<item><pubDate>Sun, 19 Apr 2026 07:57:42 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36305 – Batch processing infrastructure + per-partner offer processing + partner limit ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 21 file(s) modified&lt;/strong&gt;&lt;br/&gt;Batch processing infrastructure + per-partner offer processing + partner limit optimization + investment cache eviction on billing/payment/cancellation with 3hr TTL&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/config/CacheConfig.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/transaction/CronBatch.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/entity/transaction/CronBatchItem.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/transaction/CronBatchItemStatus.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/enumuration/transaction/CronBatchStatus.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchItemRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchItemRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchRepository.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/CronBatchRepositoryImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/transaction/OrderRepositoryImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferPartnerPayoutData.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/OfferServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/offers/SellinPartnerPayoutData.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/order/OrderServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/PartnerInvestmentService.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/PartnerInvestmentServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/PartnerLimitUpdateData.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/transaction/TransactionServiceImpl.java&lt;br /&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/service/wallet/WalletServiceImpl.java&lt;br /&gt;+ /trunk/profitmandi-dao/src/main/resources/sql/create_cron_batch_tables.sql&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36305</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36305</guid></item>
<item><pubDate>Fri, 17 Apr 2026 18:15:45 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36302 – Add 2-min cache on Catalog.selectAllGoodStockBrandWise  Hottest query right now ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add 2-min cache on Catalog.selectAllGoodStockBrandWise&lt;br /&gt;
&lt;br /&gt;
Hottest query right now on the DB: 3851 execs x 297ms = ~1143 s over&lt;br /&gt;
2.9h uptime. Fired once per target-slab in TodayOfferServiceImpl&apos;s&lt;br /&gt;
findAllTodayOffer loop whenever the slab has no explicit catalog IDs.&lt;br /&gt;
&lt;br /&gt;
Input is a single String brand (only ~10 brands), output is a list of&lt;br /&gt;
Catalog entities with no associations (all primitive/String columns,&lt;br /&gt;
no lazy-init risk) and the caller only invokes getBrand/getId on the&lt;br /&gt;
results. Safe to cache in the existing in-memory Caffeine&lt;br /&gt;
twoMintimeoutCacheManager.&lt;br /&gt;
&lt;br /&gt;
Default Spring key (= brand) is stable; unless skips empty results.&lt;/div&gt;~ /trunk/profitmandi-dao/src/main/java/com/spice/profitmandi/dao/repository/catalog/CatalogRepositoryImpl.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36302</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2Ftrunk%2Fprofitmandi-dao%2F&amp;isdir=1&amp;rev=36302</guid></item>
</channel></rss>