From c8a179a0bdbc7bdc987788e129efce16d467889f Mon Sep 17 00:00:00 2001 From: p-honggang.li <p-honggang.li@pcitc.com> Date: 星期四, 04 九月 2025 20:44:57 +0800 Subject: [PATCH] 修改购物车逻辑 --- src/main/java/com/webmanage/controller/ProductPricingController.java | 3 src/main/java/com/webmanage/service/impl/CartPersistenceServiceImpl.java | 10 src/main/java/com/webmanage/mapper/CartMapper.java | 6 src/main/java/com/webmanage/service/impl/ProductPricingServiceImpl.java | 8 + src/main/resources/mapper/CartMapper.xml | 7 + src/main/java/com/webmanage/service/impl/CartServiceImpl.java | 148 +++++++++++++++--------- src/main/java/com/webmanage/service/impl/PointsFlowServiceImpl.java | 14 +- src/main/java/com/webmanage/service/CartService.java | 28 ++- src/main/java/com/webmanage/service/ProductPricingService.java | 2 src/main/java/com/webmanage/controller/CartController.java | 84 +++++++++---- src/main/java/com/webmanage/service/CartPersistenceService.java | 4 11 files changed, 198 insertions(+), 116 deletions(-) diff --git a/src/main/java/com/webmanage/controller/CartController.java b/src/main/java/com/webmanage/controller/CartController.java index 350e3a7..666983d 100644 --- a/src/main/java/com/webmanage/controller/CartController.java +++ b/src/main/java/com/webmanage/controller/CartController.java @@ -54,9 +54,10 @@ @ApiOperation("浠庤喘鐗╄溅绉婚櫎鍟嗗搧") public Result<Object> removeFromCart(@RequestParam @NotNull String userId, @RequestParam String unitId, + @RequestParam @NotNull String productId, @RequestParam @NotNull Long pricingId) { try { - boolean result = cartService.removeFromCart(userId, unitId, pricingId); + boolean result = cartService.removeFromCart(userId, unitId, productId, pricingId); if (result) { return Result.success("浠庤喘鐗╄溅绉婚櫎鍟嗗搧鎴愬姛"); } else { @@ -72,10 +73,32 @@ @ApiOperation("鏇存柊璐墿杞﹀晢鍝佹暟閲�") public Result<Object> updateCartItemQuantity(@RequestParam @NotNull String userId, @RequestParam String unitId, + @RequestParam @NotNull String productId, @RequestParam @NotNull Long pricingId, @RequestParam @NotNull @Min(1) Integer quantity) { try { - boolean result = cartService.updateCartItemQuantity(userId, unitId, pricingId, quantity); + boolean result = cartService.updateCartItemQuantity(userId, unitId, productId, pricingId, quantity); + if (result) { + return Result.success("鏇存柊璐墿杞﹀晢鍝佹暟閲忔垚鍔�"); + } else { + return Result.error("鏇存柊璐墿杞﹀晢鍝佹暟閲忓け璐�"); + } + } catch (Exception e) { + log.error("鏇存柊璐墿杞﹀晢鍝佹暟閲忓け璐�", e); + return Result.error("鏇存柊璐墿杞﹀晢鍝佹暟閲忓け璐ワ細" + e.getMessage()); + } + } + + + @PutMapping("/update/duration") + @ApiOperation("鏇存柊璐墿杞﹀晢鍝佹暟閲�") + public Result<Object> updateCartItemDuration(@RequestParam @NotNull String userId, + @RequestParam String unitId, + @RequestParam @NotNull String productId, + @RequestParam @NotNull Long pricingId, + @RequestParam @NotNull @Min(1) Integer duration) { + try { + boolean result = cartService.updateCartItemDuration(userId, unitId, productId, pricingId, duration); if (result) { return Result.success("鏇存柊璐墿杞﹀晢鍝佹暟閲忔垚鍔�"); } else { @@ -90,9 +113,10 @@ @DeleteMapping("/clear") @ApiOperation("娓呯┖璐墿杞�") public Result<Object> clearCart(@RequestParam @NotNull String userId, - @RequestParam String unitId) { + @RequestParam String unitId, + @RequestParam @NotNull String productId) { try { - boolean result = cartService.clearCart(userId, unitId); + boolean result = cartService.clearCart(userId, unitId, productId); if (result) { return Result.success("娓呯┖璐墿杞︽垚鍔�"); } else { @@ -107,9 +131,10 @@ @GetMapping("/info") @ApiOperation("鑾峰彇璐墿杞︿俊鎭�") public Result<Object> getCart(@RequestParam @NotNull String userId, - @RequestParam String unitId) { + @RequestParam String unitId, + @RequestParam @NotNull String productId ) { try { - CartVO cart = cartService.getCart(userId, unitId); + CartVO cart = cartService.getCart(userId, unitId, productId); return Result.success(cart); } catch (Exception e) { log.error("鑾峰彇璐墿杞︿俊鎭け璐�", e); @@ -120,9 +145,10 @@ @GetMapping("/items") @ApiOperation("鑾峰彇璐墿杞﹀晢鍝佸垪琛�") public Result<Object> getCartItems(@RequestParam @NotNull String userId, - @RequestParam String unitId) { + @RequestParam String unitId, + @RequestParam @NotNull String productId) { try { - List<CartItemVO> items = cartService.getCartItems(userId, unitId); + List<CartItemVO> items = cartService.getCartItems(userId, unitId, productId); return Result.success(items); } catch (Exception e) { log.error("鑾峰彇璐墿杞﹀晢鍝佸垪琛ㄥけ璐�", e); @@ -134,9 +160,10 @@ @ApiOperation("鎵归噺鍒犻櫎璐墿杞﹀晢鍝�") public Result<Object> batchRemoveFromCart(@RequestParam @NotNull String userId, @RequestParam String unitId, + @RequestParam @NotNull String productId, @RequestBody List<Long> pricingIds) { try { - boolean result = cartService.batchRemoveFromCart(userId, unitId, pricingIds); + boolean result = cartService.batchRemoveFromCart(userId, unitId, productId, pricingIds); if (result) { return Result.success("鎵归噺鍒犻櫎璐墿杞﹀晢鍝佹垚鍔�"); } else { @@ -151,9 +178,10 @@ @GetMapping("/count") @ApiOperation("鑾峰彇璐墿杞﹀晢鍝佹暟閲�") public Result<Object> getCartItemCount(@RequestParam @NotNull String userId, - @RequestParam String unitId) { + @RequestParam String unitId, + @RequestParam @NotNull String productId ) { try { - Integer count = cartService.getCartItemCount(userId, unitId); + Integer count = cartService.getCartItemCount(userId, unitId, productId); return Result.success(count); } catch (Exception e) { log.error("鑾峰彇璐墿杞﹀晢鍝佹暟閲忓け璐�", e); @@ -164,26 +192,27 @@ @PostMapping("/sync-to-db") @ApiOperation("鍚屾Redis璐墿杞︽暟鎹埌鏁版嵁搴�") public Result<Object> syncCartToDatabase(@RequestParam @NotNull String userId, - @RequestParam @NotNull String unitId) { - try { - boolean result = cartService.syncCartToDatabase(userId, unitId); - if (result) { - return Result.success("鍚屾璐墿杞︽暟鎹埌鏁版嵁搴撴垚鍔�"); - } else { - return Result.error("鍚屾璐墿杞︽暟鎹埌鏁版嵁搴撳け璐�"); + @RequestParam @NotNull String unitId, + @RequestParam @NotNull String productId ) { + try { + boolean result = cartService.syncCartToDatabase(userId, unitId, productId); + if (result) { + return Result.success("鍚屾璐墿杞︽暟鎹埌鏁版嵁搴撴垚鍔�"); + } else { + return Result.error("鍚屾璐墿杞︽暟鎹埌鏁版嵁搴撳け璐�"); + } + } catch (Exception e) { + log.error("鍚屾璐墿杞︽暟鎹埌鏁版嵁搴撳け璐�", e); + return Result.error("鍚屾璐墿杞︽暟鎹埌鏁版嵁搴撳け璐ワ細" + e.getMessage()); } - } catch (Exception e) { - log.error("鍚屾璐墿杞︽暟鎹埌鏁版嵁搴撳け璐�", e); - return Result.error("鍚屾璐墿杞︽暟鎹埌鏁版嵁搴撳け璐ワ細" + e.getMessage()); - } } - @PostMapping("/load-from-db") @ApiOperation("浠庢暟鎹簱鍔犺浇璐墿杞︽暟鎹埌Redis") public Result<Object> loadCartFromDatabase(@RequestParam @NotNull String userId, - @RequestParam @NotNull String unitId) { + @RequestParam @NotNull String unitId, + @RequestParam @NotNull String productId ) { try { - boolean result = cartService.loadCartFromDatabase(userId, unitId); + boolean result = cartService.loadCartFromDatabase(userId, unitId,productId); if (result) { return Result.success("浠庢暟鎹簱鍔犺浇璐墿杞︽暟鎹垚鍔�"); } else { @@ -198,9 +227,10 @@ @GetMapping("/consistency") @ApiOperation("妫�鏌ヨ喘鐗╄溅鏁版嵁涓�鑷存��") public Result<Object> checkCartConsistency(@RequestParam @NotNull String userId, - @RequestParam @NotNull String unitId) { + @RequestParam @NotNull String unitId, + @RequestParam @NotNull String productId) { try { - boolean isConsistent = cartService.checkCartConsistency(userId, unitId); + boolean isConsistent = cartService.checkCartConsistency(userId, unitId, productId); if (isConsistent) { return Result.success("璐墿杞︽暟鎹竴鑷�"); } else { diff --git a/src/main/java/com/webmanage/controller/ProductPricingController.java b/src/main/java/com/webmanage/controller/ProductPricingController.java index 6432aea..fc59a67 100644 --- a/src/main/java/com/webmanage/controller/ProductPricingController.java +++ b/src/main/java/com/webmanage/controller/ProductPricingController.java @@ -127,13 +127,14 @@ @GetMapping("/condition") @ApiOperation("鏍规嵁鏉′欢鏌ヨ浜у搧瀹氫环") public Result<List<ProductPricing>> getPricingByCondition( + @ApiParam("浜у搧ID") @RequestParam(required = false) String productId, @ApiParam("濂椾欢鍚嶇О") @RequestParam(required = false) String suiteName, @ApiParam("閿�鍞舰寮�") @RequestParam(required = false) String salesForm, @ApiParam("瀹㈡埛瀵硅薄") @RequestParam(required = false) String customerType, @ApiParam("浠锋牸绫诲瀷") @RequestParam(required = false) String priceType, @ApiParam("鍚敤鐘舵��") @RequestParam(required = false) Boolean isActive) { try { - List<ProductPricing> result = productPricingService.getPricingByCondition( + List<ProductPricing> result = productPricingService.getPricingByCondition(productId, suiteName, salesForm, customerType, priceType, isActive); return Result.success("鏌ヨ鎴愬姛", result); } catch (Exception e) { diff --git a/src/main/java/com/webmanage/mapper/CartMapper.java b/src/main/java/com/webmanage/mapper/CartMapper.java index 592dc9d..88b3f43 100644 --- a/src/main/java/com/webmanage/mapper/CartMapper.java +++ b/src/main/java/com/webmanage/mapper/CartMapper.java @@ -16,17 +16,17 @@ /** * 鏍规嵁鐢ㄦ埛ID鍜屽崟浣岻D鏌ヨ璐墿杞﹀晢鍝佸垪琛� */ - List<Cart> selectByUserIdAndUnitId(@Param("userId") String userId, @Param("unitId") String unitId); + List<Cart> selectByUserIdAndUnitId(@Param("userId") String userId, @Param("unitId") String unitId, @Param("productId") String productId); /** * 鏍规嵁鐢ㄦ埛ID銆佸崟浣岻D鍜屽畾浠稩D鏌ヨ璐墿杞﹀晢鍝� */ - Cart selectByUserIdUnitIdAndPricingId(@Param("userId") String userId, @Param("unitId") String unitId, @Param("pricingId") Long pricingId); + Cart selectByUserIdUnitIdAndPricingId(@Param("userId") String userId, @Param("unitId") String unitId,@Param("productId") String productId, @Param("pricingId") Long pricingId); /** * 鏍规嵁鐢ㄦ埛ID鍜屽崟浣岻D缁熻璐墿杞﹀晢鍝佹暟閲� */ - Integer countByUserIdAndUnitId(@Param("userId") String userId, @Param("unitId") String unitId); + Integer countByUserIdAndUnitId(@Param("userId") String userId, @Param("unitId") String unitId, @Param("productId") String productId); /** * 鏍规嵁鐢ㄦ埛ID鍜屽崟浣岻D璁$畻璐墿杞︽�婚噾棰� diff --git a/src/main/java/com/webmanage/service/CartPersistenceService.java b/src/main/java/com/webmanage/service/CartPersistenceService.java index 7f51314..7cb27d6 100644 --- a/src/main/java/com/webmanage/service/CartPersistenceService.java +++ b/src/main/java/com/webmanage/service/CartPersistenceService.java @@ -4,8 +4,8 @@ public interface CartPersistenceService { void saveOrUpdate(String userId, String unitId, CartItemVO item); - void remove(String userId, String unitId, Long pricingId); - void clear(String userId, String unitId); + void remove(String userId, String unitId, String productId, Long pricingId); + void clear(String userId, String unitId, String productId); } diff --git a/src/main/java/com/webmanage/service/CartService.java b/src/main/java/com/webmanage/service/CartService.java index 027f6f9..478ab64 100644 --- a/src/main/java/com/webmanage/service/CartService.java +++ b/src/main/java/com/webmanage/service/CartService.java @@ -19,27 +19,33 @@ /** * 浠庤喘鐗╄溅绉婚櫎鍟嗗搧锛圧edis + 鏁版嵁搴擄級 */ - boolean removeFromCart(String userId, String unitId, Long pricingId); + boolean removeFromCart(String userId, String unitId, String productId, Long pricingId); /** * 鏇存柊璐墿杞﹀晢鍝佹暟閲忥紙Redis + 鏁版嵁搴擄級 */ - boolean updateCartItemQuantity(String userId, String unitId, Long pricingId, Integer quantity); - + boolean updateCartItemQuantity(String userId, String unitId,String productId, Long pricingId, Integer quantity); + + /** + * 鏇存柊璐墿杞﹀晢鍝佸勾闄愶紙Redis + 鏁版嵁搴擄級 + */ + boolean updateCartItemDuration(String userId, String unitId,String productId, Long pricingId, Integer duration); + + /** * 娓呯┖璐墿杞︼紙Redis + 鏁版嵁搴擄級 */ - boolean clearCart(String userId, String unitId); + boolean clearCart(String userId, String unitId,String productId); /** * 鑾峰彇璐墿杞︿俊鎭紙浼樺厛Redis锛屽け璐ュ垯浠庢暟鎹簱鍔犺浇锛� */ - CartVO getCart(String userId, String unitId); + CartVO getCart(String userId, String unitId, String productId); /** * 鑾峰彇璐墿杞﹀晢鍝佸垪琛紙浼樺厛Redis锛屽け璐ュ垯浠庢暟鎹簱鍔犺浇锛� */ - List<CartItemVO> getCartItems(String userId, String unitId); + List<CartItemVO> getCartItems(String userId, String unitId,String productId); /** * 妫�鏌ヨ喘鐗╄溅鍟嗗搧搴撳瓨 @@ -49,25 +55,25 @@ /** * 鎵归噺鍒犻櫎璐墿杞﹀晢鍝侊紙Redis + 鏁版嵁搴擄級 */ - boolean batchRemoveFromCart(String userId, String unitId, List<Long> pricingIds); + boolean batchRemoveFromCart(String userId, String unitId, String productId,List<Long> pricingIds); /** * 鑾峰彇璐墿杞﹀晢鍝佹暟閲忥紙浼樺厛Redis锛屽け璐ュ垯浠庢暟鎹簱鍔犺浇锛� */ - Integer getCartItemCount(String userId, String unitId); + Integer getCartItemCount(String userId, String unitId, String productId); /** * 浠庢暟鎹簱鍔犺浇璐墿杞︽暟鎹埌Redis */ - boolean loadCartFromDatabase(String userId, String unitId); + boolean loadCartFromDatabase(String userId, String unitId, String productId); /** * 鍚屾Redis鏁版嵁鍒版暟鎹簱 */ - boolean syncCartToDatabase(String userId, String unitId); + boolean syncCartToDatabase(String userId, String unitId, String productId); /** * 妫�鏌ヨ喘鐗╄溅鏁版嵁涓�鑷存�� */ - boolean checkCartConsistency(String userId, String unitId); + boolean checkCartConsistency(String userId, String unitId, String productId); } diff --git a/src/main/java/com/webmanage/service/ProductPricingService.java b/src/main/java/com/webmanage/service/ProductPricingService.java index 2965484..109fda4 100644 --- a/src/main/java/com/webmanage/service/ProductPricingService.java +++ b/src/main/java/com/webmanage/service/ProductPricingService.java @@ -43,6 +43,6 @@ /** * 鏍规嵁鏉′欢鏌ヨ浜у搧瀹氫环 */ - List<ProductPricing> getPricingByCondition(String suiteName, String salesForm, + List<ProductPricing> getPricingByCondition(String productId, String suiteName, String salesForm, String customerType, String priceType, Boolean isActive); } diff --git a/src/main/java/com/webmanage/service/impl/CartPersistenceServiceImpl.java b/src/main/java/com/webmanage/service/impl/CartPersistenceServiceImpl.java index a41e5a0..ccb18c0 100644 --- a/src/main/java/com/webmanage/service/impl/CartPersistenceServiceImpl.java +++ b/src/main/java/com/webmanage/service/impl/CartPersistenceServiceImpl.java @@ -30,7 +30,7 @@ cart.setUnitId(unitId); } cart.setUpdateTime(LocalDateTime.now()); - Cart existing = cartMapper.selectByUserIdUnitIdAndPricingId(userId, unitId, item.getPricingId()); + Cart existing = cartMapper.selectByUserIdUnitIdAndPricingId(userId, unitId,item.getProductId(), item.getPricingId()); if (existing != null) { cart.setId(existing.getId()); cartMapper.updateById(cart); @@ -43,9 +43,9 @@ @Override @Async("asyncExecutor") - public void remove(String userId, String unitId, Long pricingId) { + public void remove(String userId, String unitId, String productId,Long pricingId) { try { - Cart existing = cartMapper.selectByUserIdUnitIdAndPricingId(userId, unitId, pricingId); + Cart existing = cartMapper.selectByUserIdUnitIdAndPricingId(userId, unitId, productId,pricingId); if (existing != null) { cartMapper.deleteById(existing.getId()); } @@ -54,9 +54,9 @@ @Override @Async("asyncExecutor") - public void clear(String userId, String unitId) { + public void clear(String userId, String unitId,String productId) { try { - java.util.List<Cart> cartItems = cartMapper.selectByUserIdAndUnitId(userId, unitId); + java.util.List<Cart> cartItems = cartMapper.selectByUserIdAndUnitId(userId, unitId, productId); for (Cart item : cartItems) { cartMapper.deleteById(item.getId()); } diff --git a/src/main/java/com/webmanage/service/impl/CartServiceImpl.java b/src/main/java/com/webmanage/service/impl/CartServiceImpl.java index 716c8a2..258e3bd 100644 --- a/src/main/java/com/webmanage/service/impl/CartServiceImpl.java +++ b/src/main/java/com/webmanage/service/impl/CartServiceImpl.java @@ -65,8 +65,8 @@ } // 鏋勫缓璐墿杞ey - String cartKey = buildCartKey(userId,unitId); - String cartItemKey = buildCartItemKey(userId, unitId, cartItemDTO.getPricingId()); + String cartKey = buildCartKey(userId,unitId, cartItemDTO.getProductId()); + String cartItemKey = buildCartItemKey(userId, unitId, cartItemDTO.getProductId(),cartItemDTO.getPricingId()); // 妫�鏌ュ晢鍝佹槸鍚﹀凡鍦ㄨ喘鐗╄溅涓� CartItemVO existingItem = (CartItemVO) redisTemplate.opsForValue().get(cartItemKey); @@ -91,7 +91,7 @@ redisTemplate.opsForValue().set(cartItemKey, existingItem, (cartProperties.getExpireDays() != null ? cartProperties.getExpireDays() : CART_EXPIRE_DAYS), TimeUnit.DAYS); // 鏇存柊璐墿杞﹀晢鍝佸垪琛� - updateCartItemList(userId, unitId, cartItemDTO.getPricingId(), true); + updateCartItemList(userId, unitId, cartItemDTO.getProductId(), cartItemDTO.getPricingId(), true); // 璁剧疆璐墿杞﹁繃鏈熸椂闂� redisTemplate.expire(cartKey, (cartProperties.getExpireDays() != null ? cartProperties.getExpireDays() : CART_EXPIRE_DAYS), TimeUnit.DAYS); @@ -111,19 +111,19 @@ @Override @Transactional(rollbackFor = Exception.class) - public boolean removeFromCart(String userId, String unitId, Long pricingId) { + public boolean removeFromCart(String userId, String unitId, String productId, Long pricingId) { try { - String cartItemKey = buildCartItemKey(userId, unitId, pricingId); + String cartItemKey = buildCartItemKey(userId, unitId, productId, pricingId); // 浠嶳edis涓垹闄ゅ晢鍝侀」 Boolean removed = redisTemplate.delete(cartItemKey); if (Boolean.TRUE.equals(removed)) { // 鏇存柊璐墿杞﹀晢鍝佸垪琛� - updateCartItemList(userId, unitId, pricingId, false); + updateCartItemList(userId, unitId, productId, pricingId, false); // 寮傛浠庢暟鎹簱涓垹闄わ紙鏍规嵁閰嶇疆锛� if (Boolean.TRUE.equals(cartProperties.getEnablePersistence()) && "realtime".equalsIgnoreCase(cartProperties.getSyncStrategy())) { - cartPersistenceService.remove(userId, unitId, pricingId); + cartPersistenceService.remove(userId, unitId, productId,pricingId); } log.info("鐢ㄦ埛{}鎴愬姛浠庤喘鐗╄溅绉婚櫎鍟嗗搧{}", userId, pricingId); @@ -138,13 +138,13 @@ @Override @Transactional(rollbackFor = Exception.class) - public boolean updateCartItemQuantity(String userId, String unitId, Long pricingId, Integer quantity) { + public boolean updateCartItemQuantity(String userId, String unitId, String productId, Long pricingId, Integer quantity) { try { if (quantity <= 0) { - return removeFromCart(userId, unitId, pricingId); + return removeFromCart(userId, unitId, productId, pricingId); } - String cartItemKey = buildCartItemKey(userId, unitId, pricingId); + String cartItemKey = buildCartItemKey(userId, unitId, productId, pricingId); CartItemVO cartItem = (CartItemVO) redisTemplate.opsForValue().get(cartItemKey); if (cartItem == null) { throw new BusinessException("璐墿杞﹀晢鍝佷笉瀛樺湪"); @@ -170,16 +170,48 @@ } } + @Override @Transactional(rollbackFor = Exception.class) - public boolean clearCart(String userId, String unitId) { + public boolean updateCartItemDuration(String userId, String unitId, String productId, Long pricingId, Integer duration) { try { - String cartKey = buildCartKey(userId, unitId); - List<Long> pricingIds = getCartItemPricingIds(userId, unitId); + + String cartItemKey = buildCartItemKey(userId, unitId, productId, pricingId); + CartItemVO cartItem = (CartItemVO) redisTemplate.opsForValue().get(cartItemKey); + if (cartItem == null) { + throw new BusinessException("璐墿杞﹀晢鍝佷笉瀛樺湪"); + } + + cartItem.setDuration(duration); + cartItem.setUpdateTime(LocalDateTime.now()); + + // 鏇存柊鍒癛edis + redisTemplate.opsForValue().set(cartItemKey, cartItem, (cartProperties.getExpireDays() != null ? cartProperties.getExpireDays() : CART_EXPIRE_DAYS), TimeUnit.DAYS); + + // 寮傛鎸佷箙鍖栧埌鏁版嵁搴擄紙鏍规嵁閰嶇疆锛� + if (Boolean.TRUE.equals(cartProperties.getEnablePersistence()) && "realtime".equalsIgnoreCase(cartProperties.getSyncStrategy())) { + cartPersistenceService.saveOrUpdate(userId, unitId, cartItem); + } + + log.info("鐢ㄦ埛{}鎴愬姛鏇存柊璐墿杞﹀晢鍝亄}骞撮檺涓簕}", userId, pricingId, duration); + return true; + } catch (Exception e) { + log.error("鏇存柊璐墿杞﹀晢鍝佹暟閲忓け璐�", e); + throw new BusinessException("鏇存柊璐墿杞﹀晢鍝佹暟閲忓け璐ワ細" + e.getMessage()); + } + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean clearCart(String userId, String unitId, String productId) { + try { + String cartKey = buildCartKey(userId, unitId, productId); + List<Long> pricingIds = getCartItemPricingIds(userId, unitId, productId); // 鍒犻櫎鎵�鏈夊晢鍝侀」 for (Long pricingId : pricingIds) { - String cartItemKey = buildCartItemKey(userId, unitId, pricingId); + String cartItemKey = buildCartItemKey(userId, unitId, productId,pricingId); redisTemplate.delete(cartItemKey); } @@ -188,7 +220,7 @@ // 寮傛娓呯┖鏁版嵁搴撲腑鐨勮喘鐗╄溅鏁版嵁锛堟牴鎹厤缃級 if (Boolean.TRUE.equals(cartProperties.getEnablePersistence()) && "realtime".equalsIgnoreCase(cartProperties.getSyncStrategy())) { - cartPersistenceService.clear(userId, unitId); + cartPersistenceService.clear(userId, unitId, productId); } log.info("鐢ㄦ埛{}鎴愬姛娓呯┖璐墿杞�", userId); @@ -200,14 +232,14 @@ } @Override - public CartVO getCart(String userId, String unitId) { + public CartVO getCart(String userId, String unitId, String productId) { try { CartVO cartVO = new CartVO(); cartVO.setUserId(userId); if (StringUtils.hasText(unitId)){ cartVO.setUnitId(unitId); } - List<CartItemVO> items = getCartItems(userId, unitId); + List<CartItemVO> items = getCartItems(userId, unitId, productId); cartVO.setItems(items); // 璁$畻鎬绘暟閲忓拰鎬婚噾棰� @@ -228,21 +260,21 @@ } @Override - public List<CartItemVO> getCartItems(String userId, String unitId) { + public List<CartItemVO> getCartItems(String userId, String unitId,String productId) { try { // 浼樺厛浠嶳edis鑾峰彇 - List<CartItemVO> items = getCartItemsFromRedis(userId, unitId); + List<CartItemVO> items = getCartItemsFromRedis(userId, unitId,productId); if (items != null && !items.isEmpty()) { return items; } // Redis涓病鏈夋暟鎹紝浠庢暟鎹簱鍔犺浇 log.info("Redis涓棤璐墿杞︽暟鎹紝浠庢暟鎹簱鍔犺浇鐢ㄦ埛{}鐨勮喘鐗╄溅", userId); - return loadCartFromDatabase(userId, unitId) ? getCartItemsFromRedis(userId, unitId) : new ArrayList<>(); + return loadCartFromDatabase(userId, unitId, productId) ? getCartItemsFromRedis(userId, unitId, productId) : new ArrayList<>(); } catch (Exception e) { log.error("鑾峰彇璐墿杞﹀晢鍝佸垪琛ㄥけ璐�", e); // 闄嶇骇鍒版暟鎹簱鏌ヨ - return getCartItemsFromDatabase(userId, unitId); + return getCartItemsFromDatabase(userId, unitId, productId); } } @@ -254,14 +286,14 @@ @Override @Transactional(rollbackFor = Exception.class) - public boolean batchRemoveFromCart(String userId, String unitId, List<Long> pricingIds) { + public boolean batchRemoveFromCart(String userId, String unitId, String productId,List<Long> pricingIds) { try { if (CollectionUtils.isEmpty(pricingIds)) { return true; } for (Long pricingId : pricingIds) { - removeFromCart(userId, unitId, pricingId); + removeFromCart(userId, unitId, productId,pricingId); } return true; @@ -272,17 +304,17 @@ } @Override - public Integer getCartItemCount(String userId, String unitId) { + public Integer getCartItemCount(String userId, String unitId, String productId) { try { // 浼樺厛浠嶳edis鑾峰彇 - String cartKey = buildCartKey(userId, unitId); + String cartKey = buildCartKey(userId, unitId, productId); List<Long> pricingIds = (List<Long>) redisTemplate.opsForValue().get(cartKey); if (pricingIds != null) { return pricingIds.size(); } // 浠庢暟鎹簱鑾峰彇 - return cartMapper.countByUserIdAndUnitId(userId, unitId); + return cartMapper.countByUserIdAndUnitId(userId, unitId, productId); } catch (Exception e) { log.error("鑾峰彇璐墿杞﹀晢鍝佹暟閲忓け璐�", e); return 0; @@ -290,19 +322,19 @@ } @Override - public boolean loadCartFromDatabase(String userId, String unitId) { + public boolean loadCartFromDatabase(String userId, String unitId, String productId) { try { - List<Cart> cartItems = cartMapper.selectByUserIdAndUnitId(userId, unitId); + List<Cart> cartItems = cartMapper.selectByUserIdAndUnitId(userId, unitId, productId); if (CollectionUtils.isEmpty(cartItems)) { return false; } - String cartKey = buildCartKey(userId, unitId); + String cartKey = buildCartKey(userId, unitId, productId); List<Long> pricingIds = new ArrayList<>(); for (Cart cartItem : cartItems) { CartItemVO itemVO = convertCartToCartItemVO(cartItem); - String cartItemKey = buildCartItemKey(userId, unitId, cartItem.getPricingId()); + String cartItemKey = buildCartItemKey(userId, unitId,cartItem.getProductId(), cartItem.getPricingId()); // 淇濆瓨鍒癛edis redisTemplate.opsForValue().set(cartItemKey, itemVO, CART_EXPIRE_DAYS, TimeUnit.DAYS); @@ -321,19 +353,19 @@ } @Override - public boolean syncCartToDatabase(String userId, String unitId) { + public boolean syncCartToDatabase(String userId, String unitId, String productId) { try { - List<CartItemVO> redisItems = getCartItemsFromRedis(userId, unitId); + List<CartItemVO> redisItems = getCartItemsFromRedis(userId, unitId, productId); if (CollectionUtils.isEmpty(redisItems)) { return true; } // 娓呯┖鏁版嵁搴撲腑鐨勮喘鐗╄溅鏁版嵁 - clearCartFromDatabase(userId, unitId); + clearCartFromDatabase(userId, unitId, productId); // 鍚屾Redis鏁版嵁鍒版暟鎹簱 for (CartItemVO item : redisItems) { - syncCartItemToDatabase(userId, unitId, item); + syncCartItemToDatabase(userId, unitId,productId, item); } log.info("鎴愬姛鍚屾Redis璐墿杞︽暟鎹埌鏁版嵁搴擄紝鐢ㄦ埛{}", userId); @@ -345,10 +377,10 @@ } @Override - public boolean checkCartConsistency(String userId, String unitId) { + public boolean checkCartConsistency(String userId, String unitId, String productId) { try { - List<CartItemVO> redisItems = getCartItemsFromRedis(userId, unitId); - List<Cart> dbItems = cartMapper.selectByUserIdAndUnitId(userId, unitId); + List<CartItemVO> redisItems = getCartItemsFromRedis(userId, unitId, productId); + List<Cart> dbItems = cartMapper.selectByUserIdAndUnitId(userId, unitId, productId); if (redisItems.size() != dbItems.size()) { log.warn("璐墿杞︽暟鎹笉涓�鑷达細Redis鏁伴噺{}锛屾暟鎹簱鏁伴噺{}", redisItems.size(), dbItems.size()); @@ -380,22 +412,22 @@ // ==================== 绉佹湁鏂规硶 ==================== - private String buildCartKey(String userId, String unitId) { + private String buildCartKey(String userId, String unitId,String productId) { if(StringUtils.hasText(unitId)){ - return CART_KEY_PREFIX + userId + ":" + unitId; + return CART_KEY_PREFIX + userId + ":" + unitId + ":" + productId; } - return CART_KEY_PREFIX + userId; + return CART_KEY_PREFIX + userId + ":" + productId; } - private String buildCartItemKey(String userId, String unitId, Long pricingId) { + private String buildCartItemKey(String userId, String unitId,String productId, Long pricingId) { if(StringUtils.hasText(unitId)){ - return CART_ITEM_KEY_PREFIX + userId + ":" + unitId + ":" + pricingId; + return CART_ITEM_KEY_PREFIX + userId + ":" + unitId + ":" + productId + ":" + pricingId; } - return CART_ITEM_KEY_PREFIX + userId + ":" + pricingId; + return CART_ITEM_KEY_PREFIX + userId + ":" + productId + ":" + pricingId; } - private void updateCartItemList(String userId, String unitId, Long pricingId, boolean add) { - String cartKey = buildCartKey(userId, unitId); + private void updateCartItemList(String userId, String unitId,String productId ,Long pricingId, boolean add) { + String cartKey = buildCartKey(userId, unitId, productId); List<Long> pricingIds = (List<Long>) redisTemplate.opsForValue().get(cartKey); if (pricingIds == null) { @@ -411,15 +443,15 @@ redisTemplate.opsForValue().set(cartKey, pricingIds, CART_EXPIRE_DAYS, TimeUnit.DAYS); } - private List<Long> getCartItemPricingIds(String userId, String unitId) { - String cartKey = buildCartKey(userId, unitId); + private List<Long> getCartItemPricingIds(String userId, String unitId, String productId) { + String cartKey = buildCartKey(userId, unitId, productId); List<Long> pricingIds = (List<Long>) redisTemplate.opsForValue().get(cartKey); return pricingIds != null ? pricingIds : new ArrayList<>(); } - private List<CartItemVO> getCartItemsFromRedis(String userId, String unitId) { + private List<CartItemVO> getCartItemsFromRedis(String userId, String unitId, String productId) { try { - String cartKey = buildCartKey(userId, unitId); + String cartKey = buildCartKey(userId, unitId, productId); List<Long> pricingIds = (List<Long>) redisTemplate.opsForValue().get(cartKey); if (CollectionUtils.isEmpty(pricingIds)) { @@ -428,7 +460,7 @@ List<CartItemVO> items = new ArrayList<>(); for (Long pricingId : pricingIds) { - String cartItemKey = buildCartItemKey(userId, unitId, pricingId); + String cartItemKey = buildCartItemKey(userId, unitId, productId,pricingId); CartItemVO item = (CartItemVO) redisTemplate.opsForValue().get(cartItemKey); if (item != null) { items.add(item); @@ -442,9 +474,9 @@ } } - private List<CartItemVO> getCartItemsFromDatabase(String userId, String unitId) { + private List<CartItemVO> getCartItemsFromDatabase(String userId, String unitId, String productId) { try { - List<Cart> cartItems = cartMapper.selectByUserIdAndUnitId(userId, unitId); + List<Cart> cartItems = cartMapper.selectByUserIdAndUnitId(userId, unitId, productId); List<CartItemVO> items = new ArrayList<>(); for (Cart cartItem : cartItems) { @@ -464,7 +496,7 @@ return itemVO; } - private void syncCartItemToDatabase(String userId, String unitId, CartItemVO item) { + private void syncCartItemToDatabase(String userId, String unitId, String productId,CartItemVO item) { try { Cart cart = new Cart(); BeanUtils.copyProperties(item, cart); @@ -473,7 +505,7 @@ cart.setUpdateTime(LocalDateTime.now()); // 妫�鏌ユ槸鍚﹀凡瀛樺湪 - Cart existingCart = cartMapper.selectByUserIdUnitIdAndPricingId(userId, unitId, item.getPricingId()); + Cart existingCart = cartMapper.selectByUserIdUnitIdAndPricingId(userId, unitId, productId,item.getPricingId()); if (existingCart != null) { // 鏇存柊 cart.setId(existingCart.getId()); @@ -488,9 +520,9 @@ } } - private void removeCartItemFromDatabase(String userId, String unitId, Long pricingId) { + private void removeCartItemFromDatabase(String userId, String unitId, String productId, Long pricingId) { try { - Cart existingCart = cartMapper.selectByUserIdUnitIdAndPricingId(userId, unitId, pricingId); + Cart existingCart = cartMapper.selectByUserIdUnitIdAndPricingId(userId, unitId, productId,pricingId); if (existingCart != null) { cartMapper.deleteByCustomerCondition(existingCart.getId()); } @@ -499,10 +531,10 @@ } } - private void clearCartFromDatabase(String userId, String unitId) { + private void clearCartFromDatabase(String userId, String unitId, String productId) { try { // 浣跨敤閫昏緫鍒犻櫎 - List<Cart> cartItems = cartMapper.selectByUserIdAndUnitId(userId, unitId); + List<Cart> cartItems = cartMapper.selectByUserIdAndUnitId(userId, unitId, productId); for (Cart item : cartItems) { cartMapper.deleteById(item.getId()); } diff --git a/src/main/java/com/webmanage/service/impl/PointsFlowServiceImpl.java b/src/main/java/com/webmanage/service/impl/PointsFlowServiceImpl.java index 14fd125..00d5dfd 100644 --- a/src/main/java/com/webmanage/service/impl/PointsFlowServiceImpl.java +++ b/src/main/java/com/webmanage/service/impl/PointsFlowServiceImpl.java @@ -221,7 +221,7 @@ if (applyProvider && providerPointsChange != 0) { PointsFlow providerFlow = new PointsFlow(); providerFlow.setUserId(providerId); - providerFlow.setUnitId(providerId); + providerFlow.setUnitId(null); providerFlow.setDataType(ruleType); providerFlow.setDataCategory(addPointsFlowDTO.getCategory()); providerFlow.setPoints(providerPointsChange); @@ -233,8 +233,8 @@ if (!providerSaved) { throw new BusinessException("淇濆瓨鎻愪緵鑰呯Н鍒嗘祦姘村け璐�"); } - - updateProviderUnitPoints(providerId, providerPointsChange); + updateUserPointsByRule(providerId, null, userPointsChange); + // updateProviderUnitPoints(providerId, providerPointsChange); } return true; @@ -492,7 +492,9 @@ userPoints = new UserPoints(); userPoints.setUserId(userId); - userPoints.setUnitId(unitId); + if(StringUtils.hasText(unitId)){ + userPoints.setUnitId(unitId); + } userPoints.setBalance(pointsValue); userPoints.setTotalEarned(pointsValue > 0 ? pointsValue : 0); userPoints.setTotalConsumed(pointsValue < 0 ? Math.abs(pointsValue) : 0); @@ -522,7 +524,7 @@ } // 鏇存柊鍗曚綅绉垎璐︽埛 - QueryWrapper<UserPoints> unitWrapper = new QueryWrapper<>(); + /* QueryWrapper<UserPoints> unitWrapper = new QueryWrapper<>(); unitWrapper.eq("deleted", 0) .eq("unit_id", unitId); @@ -562,7 +564,7 @@ unitPoints.setUpdateTime(LocalDateTime.now()); userPointsMapper.updateById(unitPoints); - } + } */ } /** diff --git a/src/main/java/com/webmanage/service/impl/ProductPricingServiceImpl.java b/src/main/java/com/webmanage/service/impl/ProductPricingServiceImpl.java index a5a63ee..77e20b3 100644 --- a/src/main/java/com/webmanage/service/impl/ProductPricingServiceImpl.java +++ b/src/main/java/com/webmanage/service/impl/ProductPricingServiceImpl.java @@ -172,11 +172,15 @@ } @Override - public List<ProductPricing> getPricingByCondition(String suiteName, String salesForm, + public List<ProductPricing> getPricingByCondition(String productId, String suiteName, String salesForm, String customerType, String priceType, Boolean isActive) { try { QueryWrapper<ProductPricing> queryWrapper = new QueryWrapper<>(); - + + if (StringUtils.hasText(productId)) { + queryWrapper.like("product_id", productId); + } + if (StringUtils.hasText(suiteName)) { queryWrapper.like("suite_name", suiteName); } diff --git a/src/main/resources/mapper/CartMapper.xml b/src/main/resources/mapper/CartMapper.xml index 22f7e4c..1226da6 100644 --- a/src/main/resources/mapper/CartMapper.xml +++ b/src/main/resources/mapper/CartMapper.xml @@ -43,6 +43,9 @@ <if test="unitId !=null and unitId != ''"> AND unit_id = #{unitId} </if> + <if test="productId !=null and productId != ''"> + AND product_id = #{productId} + </if> ORDER BY add_time DESC </select> @@ -55,6 +58,7 @@ AND unit_id = #{unitId} </if> AND pricing_id = #{pricingId} + AND product_id = #{productId} LIMIT 1 </select> @@ -66,6 +70,9 @@ <if test="unitId != '' and unitId != null"> AND unit_id = #{unitId} </if> + <if test="productId != '' and productId != null"> + AND product_id = #{productId} + </if> </select> <select id="sumTotalAmountByUserIdAndUnitId" resultType="java.math.BigDecimal"> -- Gitblit v1.8.0