server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java
@@ -1050,7 +1050,7 @@ aftersale.setCode(getNextInCode()); //订单退回返回给经销商的积分 if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getReturnCustomerIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){ if(Objects.nonNull(goodsorder.getDistributionShopId())){ Shop shop = shopMapper.selectById(goodsorder.getDistributionShopId()); //经销商存在剩余积分 if(Objects.nonNull(shop)&&shop.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){ @@ -1072,7 +1072,7 @@ } //订单退回 经销商结算余额 if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getShopSettlement().compareTo(BigDecimal.ZERO)>Constants.ZERO){ if(Objects.nonNull(goodsorder.getDistributionShopId())){ Shop shop = shopMapper.selectById(goodsorder.getDistributionShopId()); //经销商存在剩余积分 if(Objects.nonNull(shop)&&shop.getAmount().compareTo(BigDecimal.ZERO)>Constants.ZERO){ @@ -1095,7 +1095,7 @@ } //订单退回 返还给客户的积分 if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getReturnMemberIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){ if(Objects.nonNull(goodsorder.getDistributionShopId())){ Member member = memberMapper.selectById(goodsorder.getMemberId()); //客户存在剩余积分 if(Objects.nonNull(member)&&member.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){ server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -973,6 +973,7 @@ MPJLambdaWrapper<Goods> wrapper = new MPJLambdaWrapper<Goods>() .selectAll(Goods.class) .select(" ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0) ",Goods::getMinPrice) .select(" ifnull(( select min(gs.SHOW_PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0) ",Goods::getLinePrice) .leftJoin(SystemUser.class, SystemUser::getId, Goods::getCreator) .eq(Goods::getIsdeleted,Constants.ZERO) .eq(!Objects.isNull(model) && Objects.nonNull(model.getCategoryId()), @@ -1062,7 +1063,6 @@ //真实销量 = realSaleNum - saleNum; //真实库存= sumStock - (realSaleNum - saleNum) goodsResponse.setStock(sumStock); goodsResponse.setRealSaleNum(goodsResponse.getRealSaleNum()+sumStock); goodsResponse.setGoodsSkuResponseList(goodsSkuResponseList); //Sku基础信息 List<SkuResponse> skuResponseList = skuMapper.getSkuResponseList(goodsResponse.getId()); server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -857,12 +857,14 @@ if(!Constants.equalsInteger(goods.getStatus(),Constants.ZERO)||!Constants.equalsInteger(goods.getIsdeleted(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在商品已删除或已下架,无法下单"); } if(Objects.nonNull(goodsSku.getStock())){ if(goodsSku.getStock().compareTo(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum())))<Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在商品库存不足,无法下单!"); } //商品库存扣除 goodsSku.setStock(goodsSku.getStock().subtract(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum())))); goodsSkuMapper.updateById(goodsSku); } GoodsorderDetail goodsOrderDetail = new GoodsorderDetail(); goodsOrderDetail.setCreator(member.getId()); goodsOrderDetail.setCreateDate(new Date()); @@ -1443,6 +1445,7 @@ orderPayConfirmResponse.setCouponAmount(couponAmount); //获取可以使用的优惠券 List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(request.getPayDetailRequestList(),request.getMemberId()); if(CollectionUtils.isNotEmpty(memberCouponList)){ orderPayConfirmResponse.setMemberCouponList(memberCouponList); if(Objects.nonNull(request.getCouponId())&&Constants.equalsInteger(request.getCouponId(),-Constants.ONE)&&Objects.nonNull(memberCouponList)){ @@ -1456,11 +1459,11 @@ } memberCoupon = memberCoupons.get(Constants.ZERO); couponAmount = memberCoupon.getValidAmount(); memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount); // memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount); orderPayConfirmResponse.setMemberCoupon(memberCoupon); } }else { if(Objects.nonNull(request.getCouponId())){ if(Objects.nonNull(request.getCouponId())&&!Constants.equalsInteger(request.getCouponId(),-Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无可用优惠券,请刷新查看"); } } @@ -1533,7 +1536,7 @@ orderPayConfirmResponse.setIntegralAmount(integralAmount); } //使用优惠券 减去优惠券抵扣金额 if(Objects.nonNull(request.getCouponId())){ if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){ orderPayConfirmResponse.setCouponAmount(couponAmount); } //实际支付金额 减去优惠券、积分抵扣金额 @@ -2285,6 +2288,7 @@ List<Goodsorder> goodsorderList = goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda() .eq(Goodsorder::getIsdeleted,Constants.ZERO) .eq(Goodsorder::getReceiveType,Constants.ONE) .isNotNull(Goodsorder::getExchangeCode) .in(Goodsorder::getStatus,Constants.OrderStatus.WAIT_RECEIVE.getKey(), Constants.OrderStatus.WAIT_PAY.getKey(), Constants.OrderStatus.PAY_DONE.getKey()) @@ -2325,7 +2329,7 @@ List<Goodsorder> goodsorderList = goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda() .eq(Goodsorder::getIsdeleted, Constants.ZERO) .eq(Goodsorder::getStatus, Constants.OrderStatus.WAIT_PAY.getKey()) .ge(Goodsorder::getCreateDate, "DATE_SUB(NOW(), INTERVAL 15 MINUTE)") .apply(" CREATE_DATE > DATE_SUB(NOW(), INTERVAL 15 MINUTE) ") ); if(CollectionUtils.isNotEmpty(goodsorderList)){ for (Goodsorder goodsorder:goodsorderList) { server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
@@ -594,9 +594,13 @@ if(CollectionUtils.isNotEmpty(allCoupon)){ for (MemberCoupon memberCoupon:allCoupon) { //适用类型:0=全场;1=品类;2=指定商品 if(this.calculateCouponRata(memberCoupon,goodsCalculateList,totalAmount).compareTo(memberCoupon.getPrice())<=Constants.ZERO){ continue; } memberCouponList.add(memberCoupon); /*//适用类型:0=全场;1=品类;2=指定商品 if(Constants.equalsInteger(memberCoupon.getApplyType(),Constants.ZERO)){ memberCoupon.setValidAmount(memberCoupon.getPrice()); memberCoupon.setValidAmount(memberCoupon.getMaxPrice()); memberCouponList.add(memberCoupon); }else{ List<String> applyIdList = Arrays.asList(memberCoupon.getApplyIds().split(",")); @@ -604,13 +608,13 @@ isVaildUse(applyIdList,goodsCalculateList,memberCoupon.getApplyType()); BigDecimal skuAmount = goodsCalculateList.stream().filter(i->i.getUseCoupon()).map(i->i.getSkuAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); if(skuAmount.compareTo(memberCoupon.getLimitPrice())>=Constants.ZERO){ //根据金额计算实际折扣金额 BigDecimal couponPrice = skuAmount.multiply(memberCoupon.getPrice()).divide(new BigDecimal("100"),2, RoundingMode.HALF_UP); //根据金额计算实际折扣金额 PRICE 存储折扣值 例如 5折 存储值 5 BigDecimal couponPrice = skuAmount.multiply(memberCoupon.getPrice()).divide(new BigDecimal("10"),2, RoundingMode.HALF_UP); //折扣金额大于最大可折扣金额 则使用最大可折扣金额 memberCoupon.setValidAmount(couponPrice.compareTo(memberCoupon.getMaxPrice())>Constants.ZERO?memberCoupon.getMaxPrice():couponPrice); memberCouponList.add(memberCoupon); } } }*/ } } // 使用 Stream 排序 reversed() 表示倒序 @@ -683,14 +687,15 @@ /** * 计算当前已选择优惠券每个商品占比金额 * 计算优惠券每个商品占比金额 * @param coupon 优惠券信息 * @param goodsCalculateList 商品集合 * @param totalAmount 订单总金额 * @return 可以使用优惠券的商品总金额 */ public void calculateCouponRata(MemberCoupon coupon,List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalAmount){ public BigDecimal calculateCouponRata(MemberCoupon coupon,List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalAmount){ //总余额 BigDecimal validAmount = coupon.getValidAmount(); BigDecimal validAmount = coupon.getMaxPrice(); //剩余可分配金额 BigDecimal surplusValidAmount = validAmount; //已用占比比例值 @@ -699,12 +704,22 @@ if(!Constants.equalsInteger(coupon.getApplyType(),Constants.ZERO)){ List<String> applyIdList = Arrays.asList(coupon.getApplyIds().split(",")); isVaildUse(applyIdList,goodsCalculateList,coupon.getApplyType()); //Constants.equalsInteger(coupon.getApplyType(),Constants.ONE)?Constants.ONE:Constants.ZERO); }else{ isVaildUse(null,goodsCalculateList,coupon.getApplyType()); } //使用了优惠券的商品数量 Integer countCouponNum = goodsCalculateList.stream().filter(i->i.getUseCoupon()).collect(Collectors.toList()).size(); //使用优惠券的总金额 BigDecimal useCouponPrice = goodsCalculateList.stream().filter(i->i.getUseCoupon()) .map(i->i.getSkuAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); if(Constants.equalsInteger(coupon.getCouponType(),Constants.ONE)){ //最大可优惠金额 BigDecimal couponAmount = useCouponPrice.multiply(coupon.getPrice()).divide(new BigDecimal("10"),2,BigDecimal.ROUND_DOWN); if(couponAmount.compareTo(validAmount)<=Constants.ZERO){ validAmount = couponAmount; surplusValidAmount = validAmount; } } Integer useCouponNum = Constants.ZERO; for (int i = 0; i < goodsCalculateList.size(); i++) { if(!goodsCalculateList.get(i).getUseCoupon()){ @@ -714,6 +729,7 @@ if(Constants.equalsInteger(useCouponNum+1,countCouponNum)){ goodsCalculateList.get(i).setOrderCouponRata(new BigDecimal("1").subtract(rata)); goodsCalculateList.get(i).setCouponDeductCash(surplusValidAmount); surplusValidAmount = BigDecimal.ZERO; break; } goodsCalculateList.get(i).setOrderCouponRata(goodsCalculateList.get(i).getSkuAmount().divide(totalAmount,2,BigDecimal.ROUND_DOWN)); @@ -722,6 +738,8 @@ rata = rata.add(goodsCalculateList.get(i).getOrderCouponRata()); useCouponNum = useCouponNum + 1; } coupon.setValidAmount(validAmount.subtract(surplusValidAmount)); return useCouponPrice; } server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -724,9 +724,7 @@ String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode(); for(Shop model:shopList){ model.setImgFullUrl(StringUtils.isNotBlank(model.getImgurl())?path+model.getImgurl():null); } return shopList; }