Sfoglia il codice sorgente

Merge branch 'fix_coupon'

zoujiajian 3 anni fa
parent
commit
8e0ea69855

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/coupon/CouponSkuMapper.java

@@ -2,10 +2,13 @@ package com.cyksj.mapper.manage.coupon;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.entity.CouponSku;
+import com.cyksj.model.views.CouponSkuView;
 import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
+import java.util.List;
+
 /*
  *项目名: netflix
  *文件名: CouponSkuMapper
@@ -23,4 +26,7 @@ public interface CouponSkuMapper extends BaseMapper<CouponSku> {
 
 	@Delete("delete from coupon_sku where coupon_id = #{couponId}")
 	void deleteRelationSku(Long couponId);
+
+	@Select("select goods_id,sku_id from coupon_sku where coupon_id = #{couponId}")
+	List<CouponSkuView> getGoodsSkuByCouponId(Long couponId);
 }

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/views/CouponSkuView.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.views;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: CouponSkuView
+ *创建者: JavaZou
+ *创建时间:2022/12/9 16:05
+ */
+@Getter
+@Setter
+public class CouponSkuView {
+	private Long goodsId;
+
+	private Long skuId;
+}

+ 8 - 4
netflix-service/src/main/java/com/cyksj/service/coupon/impl/CouponFontServiceImpl.java

@@ -6,15 +6,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.mapper.manage.coupon.*;
 import com.cyksj.model.entity.Coupon;
 import com.cyksj.model.entity.CouponActive;
 import com.cyksj.model.entity.CouponUser;
 import com.cyksj.model.request.CouponCollectReq;
-import com.cyksj.model.views.CouponAvailableRecommendView;
-import com.cyksj.model.views.CouponNewUserView;
-import com.cyksj.model.views.CouponUserView;
-import com.cyksj.model.views.GoodsDonSkuView;
+import com.cyksj.model.views.*;
 import com.cyksj.service.coupon.CouponFontService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.param.Operator;
@@ -154,6 +152,12 @@ public class CouponFontServiceImpl implements CouponFontService {
 			page.getRecords().stream().forEach(data->{
 				String str = couponSkuMapper.selectGoodsSkuStr(data.getCouponId());
 				data.setGoodsSkuStr(str.replaceAll(",", "/").replaceAll(";", ""));
+				List<CouponSkuView> couponSkus = couponSkuMapper.getGoodsSkuByCouponId(data.getCouponId());
+				try {
+					data.setGoodsSkuIds(Jsons.toJson(couponSkus));
+				} catch (Exception e) {
+
+				}
 				if (!data.getIsAvailable()) {
 					data.setReason(String.format("仅限%s", data.getGoodsSkuStr()));
 					if (isRenew != null && isRenew && data.getIsRenew()) {

+ 2 - 2
netflix-service/src/main/java/com/cyksj/service/mange/coupon/impl/CouponCommonServiceImpl.java

@@ -222,7 +222,7 @@ public class CouponCommonServiceImpl implements CouponCommonService {
 					if (sku == null) {
 						throw BusinessRuntimeException.getInstance("所选规格不存在");
 					}
-					if (coupon.getReduceMoney().compareTo(sku.getPrice()) > 0) {
+					if (coupon.getReduceMoney().compareTo(sku.getPrice()) >= 0) {
 						throw BusinessRuntimeException.getInstance("可减金额必须小于规格金额");
 					}
 				});
@@ -233,7 +233,7 @@ public class CouponCommonServiceImpl implements CouponCommonService {
 					if (price == null) {
 						throw BusinessRuntimeException.getInstance("实物商品不存在");
 					}
-					if (coupon.getReduceMoney().compareTo(price) > 0) {
+					if (coupon.getReduceMoney().compareTo(price) >= 0) {
 						throw BusinessRuntimeException.getInstance("可减金额必须小于实物最小规格金额");
 					}
 				});

+ 17 - 14
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -34,14 +34,10 @@ import com.cyksj.dto.RedisKey;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.*;
-import com.cyksj.mapper.manage.distribute.*;
-import com.cyksj.model.dto.AliPayParams;
-import com.cyksj.model.dto.H5JsPayParams;
-import com.cyksj.model.dto.WxMpTemplateData;
-import com.cyksj.model.dto.WxMpTemplateMessage;
 import com.cyksj.mapper.manage.coupon.CouponMapper;
 import com.cyksj.mapper.manage.coupon.CouponSkuMapper;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
+import com.cyksj.mapper.manage.distribute.*;
 import com.cyksj.model.dto.*;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.OrderDonView;
@@ -69,8 +65,10 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 
 import static com.cyksj.enums.GatewayApiCode.GROUP_INDEX_ALREADY_BE_USER;
 import static com.cyksj.enums.GatewayApiCode.GROUP_INDEX_NOT_FIND;
@@ -1154,7 +1152,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			if (exists == null) {
 				throw BusinessRuntimeException.getInstance("该优惠码不存在");
 			}
-			checkCouponGoods(goodsDon, skuId, exists.getType(), exists.getGoodsSkuIds(), true);
+			checkCouponGoods(goodsDon, skuId, exists.getCouponId(), true);
 			//检验是否续费可使用
 			if (isRenew && !exists.getIsRenew()) {
 				throw BusinessRuntimeException.getInstance("该优惠券续费时不可使用");
@@ -1186,7 +1184,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			if (couponUserView.getCouponUserStatus() != CouponUser.Status.unused) {
 				throw BusinessRuntimeException.getInstance(couponUserView.getReason());
 			}
-			checkCouponGoods(goodsDon, skuId, couponUserView.getType(), couponUserView.getGoodsSkuIds(), false);
+			checkCouponGoods(goodsDon, skuId, couponUserView.getCouponId(), false);
 			//检验是否续费可使用
 			if (isRenew && !couponUserView.getIsRenew()) {
 				throw BusinessRuntimeException.getInstance("该优惠券续费时不可使用");
@@ -1261,16 +1259,21 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		log.info("订单:{}退款,优惠券返还end...", orderDon.getId());
 	}
 
-	public void checkCouponGoods(GoodsDon goodsDon, Long skuId, Coupon.Type type, String goodsSkuIds, Boolean isCouponCode) throws Exception {
+	public void checkCouponGoods(GoodsDon goodsDon, Long skuId, Long couponId, Boolean isCouponCode) throws Exception {
 		if (goodsDon.getType() == 1) {
-			List<Coupon.CouponGoodsSku> skuIds = Jsons.parseList(goodsSkuIds, Coupon.CouponGoodsSku.class);
-			Set<Long> collect = skuIds.stream().map(Coupon.CouponGoodsSku::getSkuId).collect(Collectors.toSet());
-			if (!collect.contains(skuId)) {
+			CouponSku couponSku = couponSkuMapper.selectOne(Wrappers.lambdaQuery(CouponSku.class)
+					.eq(CouponSku::getSkuId, skuId)
+					.eq(CouponSku::getCouponId, couponId)
+					.select(CouponSku::getId).last("limit 1"));
+			if (couponSku == null) {
 				throw BusinessRuntimeException.getInstance(String.format("该%s不适用于该规格", isCouponCode ? "优惠码" : "优惠券"));
 			}
 		} else {
 			Long gid = goodsDon.getId();
-			CouponSku couponSku = couponSkuMapper.selectOne(Wrappers.lambdaQuery(CouponSku.class).eq(CouponSku::getGoodsId, gid).eq(CouponSku::getDeleted, true).select(CouponSku::getId).last("limit 1"));
+			CouponSku couponSku = couponSkuMapper.selectOne(Wrappers.lambdaQuery(CouponSku.class)
+					.eq(CouponSku::getGoodsId, gid)
+					.eq(CouponSku::getCouponId, couponId)
+					.select(CouponSku::getId).last("limit 1"));
 			if (couponSku == null) {
 				throw BusinessRuntimeException.getInstance(String.format("该%s不可用于实物商品", isCouponCode ? "优惠码" : "优惠券"));
 			}

+ 25 - 5
netflix-web/src/main/java/com/cyksj/web/controller/coupon/CouponFrontController.java

@@ -2,6 +2,7 @@ package com.cyksj.web.controller.coupon;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.common.annotation.NoSubmit;
 import com.cyksj.common.exception.BusinessRuntimeException;
@@ -14,6 +15,7 @@ import com.cyksj.mapper.manage.coupon.CouponSkuMapper;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.model.dto.CouponPopularizeDto;
 import com.cyksj.model.entity.Coupon;
+import com.cyksj.model.entity.CouponSku;
 import com.cyksj.model.request.CouponCollectReq;
 import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
@@ -26,8 +28,6 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
 
 /*
  *项目名: netflix
@@ -63,6 +63,12 @@ public class CouponFrontController {
 		page.getRecords().forEach(data -> {
 			String str = couponSkuMapper.selectGoodsSkuStr(data.getCouponId());
 			data.setGoodsSkuStr(str.replaceAll(",", "/").replaceAll(";", ""));
+			List<CouponSkuView> couponSkus = couponSkuMapper.getGoodsSkuByCouponId(data.getCouponId());
+			try {
+				data.setGoodsSkuIds(Jsons.toJson(couponSkus));
+			} catch (Exception e) {
+
+			}
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(page);
 	}
@@ -77,6 +83,12 @@ public class CouponFrontController {
 		page.getRecords().forEach(data -> {
 			String str = couponSkuMapper.selectGoodsSkuStr(data.getCouponId());
 			data.setGoodsSkuStr(str.replaceAll(",", "/").replaceAll(";", ""));
+			List<CouponSkuView> couponSkus = couponSkuMapper.getGoodsSkuByCouponId(data.getCouponId());
+			try {
+				data.setGoodsSkuIds(Jsons.toJson(couponSkus));
+			} catch (Exception e) {
+
+			}
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(page);
 	}
@@ -126,6 +138,12 @@ public class CouponFrontController {
 			}
 			String str = couponSkuMapper.selectGoodsSkuStr(data.getCouponId());
 			data.setGoodsSkuStr(str.replaceAll(",", "/").replaceAll(";", ""));
+			List<CouponSkuView> couponSkus = couponSkuMapper.getGoodsSkuByCouponId(data.getCouponId());
+			try {
+				data.setGoodsSkuIds(Jsons.toJson(couponSkus));
+			} catch (Exception e) {
+
+			}
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(page);
 	}
@@ -220,9 +238,11 @@ public class CouponFrontController {
 		if (dto.getIsValidTime() && dto.getValidEndTime().before(DateTime.now())) {
 			throw BusinessRuntimeException.getInstance("该优惠码已失效");
 		}
-		List<Coupon.CouponGoodsSku> skuIds = Jsons.parseList(dto.getGoodsSkuIds(), Coupon.CouponGoodsSku.class);
-		Set<Long> collect = skuIds.stream().map(Coupon.CouponGoodsSku::getSkuId).collect(Collectors.toSet());
-		if (!collect.contains(skuId)) {
+		CouponSku couponSku = couponSkuMapper.selectOne(Wrappers.lambdaQuery(CouponSku.class)
+				.eq(CouponSku::getSkuId, skuId)
+				.eq(CouponSku::getCouponId, dto.getCouponId())
+				.select(CouponSku::getId).last("limit 1"));
+		if (couponSku == null) {
 			throw BusinessRuntimeException.getInstance("该优惠码不适用于该规格");
 		}
 		return GatewayResponse.SUCCESS.newBuilder().toResult(dto);