<?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; /</title><description>WebSVN RSS feed &#x2013; SmartDukaan</description><lastBuildDate>Wed, 06 May 2026 10:28:04 +0530</lastBuildDate><generator>WebSVN 2.8.6-DEV</generator><language>en</language><link>https://svn.smartdukaan.com/log.php?repname=SmartDukaan&amp;path=%2F&amp;max=40&amp;peg=36379</link><atom:link href="https://svn.smartdukaan.com/rss.php?peg=36379&amp;repname=SmartDukaan" rel="self" type="application/rss+xml" />
<item><pubDate>Fri, 24 Apr 2026 17:36:05 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 36379 – Dashboard API</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Dashboard API&lt;/div&gt;+ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/response/DashboardPageResponse.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36379&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36379&amp;peg=36379</guid></item>
<item><pubDate>Fri, 24 Apr 2026 17:24:29 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36378 – code commit for reports section v2</title><description>&lt;div&gt;&lt;strong&gt;ranu – 3 file(s) modified&lt;/strong&gt;&lt;br/&gt;code commit for reports section v2&lt;/div&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&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=%2F&amp;isdir=1&amp;rev=36378&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36378&amp;peg=36379</guid></item>
<item><pubDate>Fri, 24 Apr 2026 17:12:47 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 36377 – Dashboard API</title><description>&lt;div&gt;&lt;strong&gt;vikas – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;Dashboard API&lt;/div&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/fofo/V2FofoOrderController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2HomeController.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/V2WalletController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36377&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36377&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36376&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36376&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36375&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36375&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36374&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36374&amp;peg=36379</guid></item>
<item><pubDate>Fri, 24 Apr 2026 13:00:57 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36373 – login talktime  hours cap on 100%</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;login talktime  hours cap on 100%&lt;/div&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=%2F&amp;isdir=1&amp;rev=36373&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36373&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36372&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36372&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36371&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36371&amp;peg=36379</guid></item>
<item><pubDate>Thu, 23 Apr 2026 23:36:33 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 36370 – Fix: App login</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix: App login&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LoginController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36370&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36370&amp;peg=36379</guid></item>
<item><pubDate>Thu, 23 Apr 2026 19:47:05 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 36369 – Fix: Sale purchase invoice item quantity calculation</title><description>&lt;div&gt;&lt;strong&gt;vikas – 5 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix: Sale purchase invoice item quantity calculation&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/LoginController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/RetailerController.java&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/resources/META-INF/dev.properties&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/resources/META-INF/prod.properties&lt;br /&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/retailer-info.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36369&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36369&amp;peg=36379</guid></item>
<item><pubDate>Thu, 23 Apr 2026 18:18:30 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36368 – Fix:Update Timeline Title</title><description>&lt;div&gt;&lt;strong&gt;aman – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:Update Timeline Title&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/onboarding_timeline.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36368&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36368&amp;peg=36379</guid></item>
<item><pubDate>Thu, 23 Apr 2026 17:07:24 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36367 – HDFC webhook: delegate writes to HdfcProcessingHelper; always respond OK  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;HDFC webhook: delegate writes to HdfcProcessingHelper; always respond OK&lt;br /&gt;
&lt;br /&gt;
Fixes the concurrent-duplicate deadlock observed on hadb1 2026-04-23 12:54:11&lt;br /&gt;
(two HDFC retries inserting same utr=&apos;308490624083&apos; → InnoDB deadlock →&lt;br /&gt;
LockAcquisitionException → 500 → HDFC retries again → amplification).&lt;br /&gt;
&lt;br /&gt;
- addPayment: the HDFC row build + persist + wallet/sidbi is now a single call&lt;br /&gt;
  to hdfcProcessingHelper.processPayment() which runs in REQUIRES_NEW. The&lt;br /&gt;
  helper catches DataIntegrityViolationException and logs silently; our tx&lt;br /&gt;
  is unaffected.&lt;br /&gt;
- The else branch (pre-select found an existing row) now returns the same&lt;br /&gt;
  code=100 status=Success as the main path instead of code=200 Duplicate.&lt;br /&gt;
  Per product direction: HDFC should see &apos;OK&apos; regardless of whether the row&lt;br /&gt;
  already existed from a prior webhook, manual entry, or reconciliation —&lt;br /&gt;
  retries stop cleanly, no &apos;Duplicate&apos; surface distinction.&lt;br /&gt;
&lt;br /&gt;
Did NOT add @Transactional(readOnly=true) on the outer method despite its&lt;br /&gt;
read-heavy shape — checkManualPayments() at line 277 has a write side-effect&lt;br /&gt;
(rejecting pending manual wallet requests for the same utr) which would be&lt;br /&gt;
silently dropped in a read-only session. Kept class-level writable tx for&lt;br /&gt;
the outer; only HDFC writes moved to REQUIRES_NEW helper.&lt;/div&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=%2F&amp;isdir=1&amp;rev=36367&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36367&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36366&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36366&amp;peg=36379</guid></item>
<item><pubDate>Thu, 23 Apr 2026 16:59:28 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 36365 – Homepage API</title><description>&lt;div&gt;&lt;strong&gt;vikas – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Homepage API&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2HomeController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36365&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36365&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36364&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36364&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 19:49:51 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36363 – Idempotent fofo_order creation in UpSaleController (mirrors r36362 in dao)  ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Idempotent fofo_order creation in UpSaleController (mirrors r36362 in dao)&lt;br /&gt;
&lt;br /&gt;
Same change as OrderServiceImpl.createAndGetFofoOrder: pre-select by&lt;br /&gt;
(fofo_id, invoice_number) and catch DataIntegrityViolationException as the&lt;br /&gt;
slow-race fallback. Paired with uk_fofo_order_fofo_invoice unique key.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/UpSaleController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36363&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36363&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36362&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36362&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 19:39:16 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36361 – Switch @Scheduled updatePartnerLimit to batch-tracked version. Was calling legacy scheduledTasks.updatePartnerLimit ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Switch @Scheduled updatePartnerLimit to batch-tracked version. Was calling legacy scheduledTasks.updatePartnerLimit (one synchronized tx, writes to all ~1500 partners each run, no audit). Now calls batchScheduledTasks.updatePartnerLimitWithBatch (writes only changed partners in per-partner REQUIRES_NEW, records each run in cron_batch / cron_batch_item, sends failure email on partial failures). Same cadence (every 20 min), same business logic. Runs are now visible in /admin/cron-batches UI.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/ScheduledSkeleton.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36361&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36361&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 18:42:25 +0530</pubDate><dc:creator>ranu</dc:creator><title>Rev 36360 – login talktime  hours cap on 100%</title><description>&lt;div&gt;&lt;strong&gt;ranu – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;login talktime  hours cap on 100%&lt;/div&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=%2F&amp;isdir=1&amp;rev=36360&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36360&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36359&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36359&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 18:21:49 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36358 – Replace non-ASCII separators in cron-batches modal with ASCII. Title middle-dot ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Replace non-ASCII separators in cron-batches modal with ASCII. Title middle-dot (U+00B7) and empty-timestamp em-dash (U+2014) were rendering as mojibake (&apos;Â·&apos; and &apos;â€&apos;) — response was being served without charset=UTF-8 in the Content-Type header despite Velocity being UTF-8 configured. Swapped to &apos;|&apos; and &apos;-&apos; to avoid the encoding issue without chasing it through Velocity/Tomcat config.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/cron-batches.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36358&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36358&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36357&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36357&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36356&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36356&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36355&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36355&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36354&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36354&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 15:02:02 +0530</pubDate><dc:creator>vikas</dc:creator><title>Rev 36353 – Login issue</title><description>&lt;div&gt;&lt;strong&gt;vikas – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Login issue&lt;/div&gt;~ /trunk/profitmandi-common/src/main/java/com/spice/profitmandi/common/model/GoogleLoginRequest.java&lt;br /&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/config/WebMVCConfig.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36353&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36353&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 15:00:33 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36352 – Add admin cron batch review UI at /admin/cron-batches. Single page ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 2 file(s) modified&lt;/strong&gt;&lt;br/&gt;Add admin cron batch review UI at /admin/cron-batches. Single page lists recent 200 batches grouped by date (most recent on top), clicking a row opens a modal with per-partner items (fofoId, partner, status, error, timestamps). Manual Refresh button re-fetches JSON. Admin-only via roleManager.isAdmin. Uses existing velocity layout (1-line passthrough). Three endpoints: GET /admin/cron-batches (HTML), /list (JSON), /{batchId}/items (JSON). Uses dao r36351 repo methods.&lt;/div&gt;+ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/CronBatchAdminController.java&lt;br /&gt;+ /trunk/profitmandi-fofo/src/main/webapp/WEB-INF/views/ftl/cron-batches.vm&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36352&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36352&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36351&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36351&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36350&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36350&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 14:44:11 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36349 – V2 /offer/process/{offerId} now fire-and-forget via submitBatchAsync (dao r36347). Response adds ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;V2 /offer/process/{offerId} now fire-and-forget via submitBatchAsync (dao r36347). Response adds a &apos;message&apos; field alongside success=true so the UI can surface &apos;Offer N submitted for processing&apos; or &apos;already being processed&apos;.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoOfferController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36349&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36349&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 14:44:04 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36348 – /offer/process/{offerId} now fire-and-forget: calls offerBatchService.submitBatchAsync (dao r36347) and returns the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;/offer/process/{offerId} now fire-and-forget: calls offerBatchService.submitBatchAsync (dao r36347) and returns the status message immediately. User no longer waits on the 5+ min batch run; duplicate clicks for the same offer return &apos;already being processed&apos; instead of spawning parallel deadlocking batches.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/OfferController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36348&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36348&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36347&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36347&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36346&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36346&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 12:31:10 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36345 – Route V2 /offer/process/{offerId} through OfferBatchService (dao r36342). Same motivation as ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Route V2 /offer/process/{offerId} through OfferBatchService (dao r36342). Same motivation as fofo r36344: per-partner REQUIRES_NEW eliminates lock contention seen on offer 8802 and isolates failures.&lt;/div&gt;~ /trunk/profitmandi-web/src/main/java/com/spice/profitmandi/web/v2/controller/fofo/V2FofoOfferController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36345&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36345&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 12:31:04 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36344 – Route /offer/process/{offerId} through OfferBatchService (dao r36342). Per-partner REQUIRES_NEW replaces the ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Route /offer/process/{offerId} through OfferBatchService (dao r36342). Per-partner REQUIRES_NEW replaces the single outer transaction — fixes lock-acquisition failures (e.g. offer 8802) by releasing row locks between partners and isolating per-partner failures in cron_batch_item instead of aborting the whole run.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/OfferController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36344&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36344&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 12:30:54 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36343 – Delegate processOfferWithBatch to OfferBatchService (dao r36342). Removes the two private ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Delegate processOfferWithBatch to OfferBatchService (dao r36342). Removes the two private offer-processing privates now living in the shared orchestrator; drops unused OfferService/OfferProcessingHelper autowires. CLI entrypoint (--processOffersWithBatch) behavior unchanged.&lt;/div&gt;~ /trunk/profitmandi-cron/src/main/java/com/smartdukaan/cron/scheduled/BatchScheduledTasks.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36343&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36343&amp;peg=36379</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=%2F&amp;isdir=1&amp;rev=36342&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36342&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 12:29:25 +0530</pubDate><dc:creator>aman</dc:creator><title>Rev 36341 – Fix:Remove Fin-service team from wod request mail</title><description>&lt;div&gt;&lt;strong&gt;aman – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Fix:Remove Fin-service team from wod request mail&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/FinServiceController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36341&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36341&amp;peg=36379</guid></item>
<item><pubDate>Wed, 22 Apr 2026 12:14:58 +0530</pubDate><dc:creator>amit</dc:creator><title>Rev 36340 – Narrow downloadInvoice: release JDBC before PDF streaming + clean error ...</title><description>&lt;div&gt;&lt;strong&gt;amit – 1 file(s) modified&lt;/strong&gt;&lt;br/&gt;Narrow downloadInvoice: release JDBC before PDF streaming + clean error codes&lt;br /&gt;
&lt;br /&gt;
OrderManagementController has class-level @Transactional(rollbackFor=Throwable),&lt;br /&gt;
so every downloadInvoice request held a Hikari connection for the entire HTTP&lt;br /&gt;
response duration — including the PDF streaming phase over a user&apos;s (often&lt;br /&gt;
slow) mobile network. The endpoint is the #1 JDBC-slot holder in production.&lt;br /&gt;
&lt;br /&gt;
- Method-level @Transactional(propagation = NOT_SUPPORTED) suspends the&lt;br /&gt;
  class-level tx for this endpoint so no connection is held by default.&lt;br /&gt;
- A short read-only TransactionTemplate scopes the single SELECT (order lookup&lt;br /&gt;
  by invoice number) inside its own tx. Connection returns to the pool as soon&lt;br /&gt;
  as the SELECT commits; file streaming then runs without any JDBC session.&lt;br /&gt;
- Bounds-check orders.isEmpty() — 2 IndexOutOfBoundsException per log window&lt;br /&gt;
  previously, now a clean 404 with message body.&lt;br /&gt;
- Invoice-not-yet-generated stops surfacing as a 500 with stack trace&lt;br /&gt;
  (1,534 occurrences in yesterday&apos;s log = #1 noise source). Now a 404 with&lt;br /&gt;
  &apos;please retry shortly&apos; JSON body. Saves log disk and error-budget.&lt;/div&gt;~ /trunk/profitmandi-fofo/src/main/java/com/spice/profitmandi/web/controller/warehouse/OrderManagementController.java&lt;br /&gt;</description><link>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36340&amp;peg=36379</link><guid>https://svn.smartdukaan.com/revision.php?repname=SmartDukaan&amp;path=%2F&amp;isdir=1&amp;rev=36340&amp;peg=36379</guid></item>
</channel></rss>