| 
					
				 | 
			
			
				@@ -4170,6 +4170,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 查询商品表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<GoodsEntity> goodsEntities = goodsService.queryGoodsStockByQueryGoodsVoList(goodsVos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, GoodsEntity> goodsMap = goodsEntities.stream().collect(Collectors.toMap(GoodsEntity::getSku, Function.identity(), (k1, k2) -> k2)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          * 2.查询当前时间,该门店是否有活动,如果有活动,查询开启了哪些营销方式 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4209,7 +4210,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Integer> brandIdList = goodsEntities.stream().map(GoodsEntity::getBrandId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Integer> categoryIdList = goodsEntities.stream().map(GoodsEntity::getCategoryId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 活动互斥标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 活动标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         AtomicBoolean activityFlag = new AtomicBoolean(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 限时特价活动标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         AtomicBoolean promotionActivityFlag = new AtomicBoolean(false); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4235,7 +4236,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Constants.ActivityTopicEnum activityTopicEnum = Constants.ActivityTopicEnum.valueOf(mkaTopic.toUpperCase()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 活动之间的优先级:特价>打折>满减/满赠>优惠券>积分抵扣 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (activityTopicEnum == Constants.ActivityTopicEnum.LSCX && activityFlag.get()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (activityTopicEnum == Constants.ActivityTopicEnum.LSCX) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 判断商品是否符合限时特价活动要求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 List<MkActivitiesPromotionEntity> mkActivitiesPromotionEntities = mkActivitiesPromotionService.queryListByMkaIdAndStoreId(mkaId.intValue(), storeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (CollectionUtils.isEmpty(mkActivitiesPromotionEntities)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4252,26 +4253,23 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (!org.springframework.util.StringUtils.isEmpty(rejectScore) && Constants.PromotionActivityRejectEnum.REJECT.getCode().equals(rejectScore)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         promotionSkuList.add(entityGoodsSn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    goodsEntities.forEach(goodsEntity -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        String sku = goodsEntity.getSku(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        String prodBarcode = goodsEntity.getProdBarcode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        String storeId2 = String.valueOf(goodsEntity.getStoreId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        BigDecimal retailPrice = goodsEntity.getRetailPrice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (entityBarcode.equals(prodBarcode) && entityGoodsSn.equals(sku) && shopSn.equals(storeId2)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            GoodsDetailsDto goodsDetailsDto = new GoodsDetailsDto(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    goodsDetailsDtos.forEach(goodsDetailsDto -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        String sku = goodsDetailsDto.getSku(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        String prodBarcode = goodsDetailsDto.getProdBarcode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        BigDecimal retailPrice = goodsDetailsDto.getRetailPrice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (entityBarcode.equals(prodBarcode) && entityGoodsSn.equals(sku) && shopSn.equals(storeId)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            GoodsEntity goodsEntity = goodsMap.get(sku); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             BigDecimal tax = CalculateTax.calculateFinalTax(goodsEntity, activityPrice, goodsService).setScale(3, RoundingMode.HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            BeanUtils.copyProperties(goodsDetailsDto, goodsEntity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             goodsDetailsDto.setActualPaymentAmount(activityPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume())))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.LSCX.getTopicName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             goodsDetailsDto.setDiscountedPrice(retailPrice.subtract(activityPrice)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            goodsDetailsDtos.add(goodsDetailsDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             activityFlag.set(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             promotionActivityFlag.set(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else if (activityTopicEnum == Constants.ActivityTopicEnum.MZ && activityFlag.get()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (activityTopicEnum == Constants.ActivityTopicEnum.MZ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 判断商品是否符合满赠活动要求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 MkActivitiesFullGiftEntity mkActivitiesFullGiftEntity = mkActivitiesFullGiftService.queryObjectByMkaIdAndStoreId(mkaId.intValue(), storeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (Objects.isNull(mkActivitiesFullGiftEntity)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4350,7 +4348,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             throw new ServiceException(String.format("未知满赠类型【%s,%s】!请联系管理员!", fullGiftActivityType.getActivityType(), fullGiftActivityType.getActivityTypeCode())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else if (activityTopicEnum == Constants.ActivityTopicEnum.YHQ && activityFlag.get()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (activityTopicEnum == Constants.ActivityTopicEnum.YHQ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 判断商品是否符合优惠券活动要求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 List<MkActivitiesCouponEntity> mkActivitiesCouponEntities = mkActivitiesCouponService.queryListByMkaIdAndStoreId(mkaId, storeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (CollectionUtils.isEmpty(mkActivitiesCouponEntities)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4468,6 +4466,20 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 throw new ServiceException(String.format("未知的活动类型:【%s,%s】,请检查活动设置!!", activityTopicEnum.getTopicCode(), activityTopicEnum.getTopicName())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orderTotalPrice = BigDecimal.ZERO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (GoodsDetailsDto good : goodsDetailsDtos) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            QueryGoodsVO queryGoodsVo = new QueryGoodsVO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BeanUtils.copyProperties(good, queryGoodsVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            queryGoodsVo.setSku(good.getGoodsSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            queryGoodsVo.setStoreId(Long.parseLong(storeId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            queryGoodsVo.setDisCountedPrice(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            queryGoodsVo.setTotalPrice(good.getActualPaymentAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderTotalPrice = orderTotalPrice.add(good.getActualPaymentAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            goodsVos.add(queryGoodsVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calculateOrderDiscountPriceResponseVO.setOrderTotalPrice(orderTotalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calculateOrderDiscountPriceResponseVO.setGoodsDetailsDtos(goodsDetailsDtos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 计算完活动优惠后,计算积分抵扣。(活动与积分抵扣不互斥) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!org.springframework.util.StringUtils.isEmpty(memberCode)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4501,7 +4513,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Integer score = memberInfoDTO.getScore(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (Objects.nonNull(score) && score > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 有积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    afterDiscountPrice = calculatePreferentialPrice(orderTotalPrice, score, memberCode, calculateOrderDiscountPriceResponseVO, goodsDetailsDtos, promotionSkuList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    afterDiscountPrice = calculatePreferentialPrice(orderTotalPrice, score, memberCode, activityFlag, calculateOrderDiscountPriceResponseVO, goodsDetailsDtos, promotionSkuList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     LOGGER.info("会员【{}】,当前积分:{},积分抵扣后的订单金额:{},积分抵扣前的订单金额:{}", memberCode, score, afterDiscountPrice, orderTotalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     calculateOrderDiscountPriceResponseVO.setOrderTotalPrice(afterDiscountPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     calculateOrderDiscountPriceResponseVO.setGoodsDetailsDtos(goodsDetailsDtos); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4534,6 +4546,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param score             积分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param memberCode        会员码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param goodsDetailsDtos  订单商品详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param activityFlag      是否参加过活动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param calculateOrderDiscountPriceResponseVO 响应数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param promotionSkuList  参与了限时特价活动并且与积分抵扣互斥的sku集合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4542,6 +4555,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private BigDecimal calculatePreferentialPrice(BigDecimal orderTotalPrice, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                   Integer score, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                   String memberCode, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                  AtomicBoolean activityFlag, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                   CalculateOrderDiscountPriceResponseVO calculateOrderDiscountPriceResponseVO, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                   List<GoodsDetailsDto> goodsDetailsDtos, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                   List<String> promotionSkuList) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4616,6 +4630,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     BigDecimal scoreLimitDecimal = skuScoreLimitMap.get(sku); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     String prodBarcode = goodsDetailsDto.getProdBarcode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     BigDecimal retailPrice = goodsDetailsDto.getRetailPrice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    BigDecimal actualPaymentAmount = goodsDetailsDto.getActualPaymentAmount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 计算抵扣,当商品不是最后一个商品 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (i < index) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 商品总价 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4627,7 +4642,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         goodsDetailScoreDeductionPrice = goodsDetailScoreDeductionPrice.add(discountedPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         goodsDetailsDto.setDiscountedPrice(discountedPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         goodsDetailsDto.setDeductionScore(shareScoreItem.intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        goodsDetailsDto.setActualPaymentAmount(retailPrice.subtract(discountedPrice)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        goodsDetailsDto.setActualPaymentAmount(actualPaymentAmount.subtract(discountedPrice)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 订单商品详情最后一个商品并且详情不止一个商品 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (i == index && size > 1) {// 商品总价 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4637,13 +4652,13 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         goodsDetailScoreDeductionPrice = goodsDetailScoreDeductionPrice.add(discountedPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         goodsDetailsDto.setDiscountedPrice(discountedPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         goodsDetailsDto.setDeductionScore(shareScoreItem.intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        goodsDetailsDto.setActualPaymentAmount(retailPrice.subtract(discountedPrice)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        goodsDetailsDto.setActualPaymentAmount(actualPaymentAmount.subtract(discountedPrice)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 订单商品详情只有一个商品的情况下 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (size == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         shareScore = scoreIntegerDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 3-1. 计算总价的50%,百分比可以进行设置,算出整数(向下取整) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        BigDecimal halfPrice = orderTotalPrice.multiply(scoreLimitDecimal).setScale(0, BigDecimal.ROUND_FLOOR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        BigDecimal halfPrice = orderTotalPrice.multiply(new BigDecimal("0.5")).setScale(0, BigDecimal.ROUND_FLOOR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 3-3. 计算积分抵扣后的价格 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         BigDecimal discountedPrice = scoreMayDeductionPriceDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (halfPrice.compareTo(discountedPrice) <= 0) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4653,7 +4668,7 @@ public class OrderServiceImpl implements OrderService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         goodsDetailScoreDeductionPrice = goodsDetailScoreDeductionPrice.add(discountedPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         goodsDetailsDto.setDiscountedPrice(discountedPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         goodsDetailsDto.setDeductionScore(shareScore.intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        goodsDetailsDto.setActualPaymentAmount(retailPrice.subtract(discountedPrice)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        goodsDetailsDto.setActualPaymentAmount(actualPaymentAmount.subtract(discountedPrice)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     LOGGER.info("--------------------------------------------------------"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     LOGGER.info("【计算优惠价】sku:【{}】,条码:【{}】积分抵扣{}元,抵扣积分{}分", sku, prodBarcode, goodsDetailsDto.getDiscountedPrice(), shareScore.intValue()); 
			 |