zoujiajian 3 лет назад
Родитель
Сommit
c0df5a0c02

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/dto/CouponPopularizeDto.java

@@ -18,7 +18,7 @@ public class CouponPopularizeDto {
 	 */
 	private Long couponId;
 
-	private String skuIds;
+	private String goodsSkuIds;
 
 	private Coupon.Type type;
 

+ 9 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/Coupon.java

@@ -55,7 +55,7 @@ public class Coupon extends BaseEntity {
 	/**
 	 * 平台规格集合
 	 */
-	private String skuIds;
+	private String goodsSkuIds;
 
 	/**
 	 * 是否是有效时间
@@ -135,4 +135,12 @@ public class Coupon extends BaseEntity {
 			this.desc = desc;
 		}
 	}
+
+	@Getter
+	@Setter
+	public static class CouponGoodsSku {
+		private Long goodsId;
+
+		private Long skuId;
+	}
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CouponSku.java

@@ -15,6 +15,8 @@ import lombok.Setter;
 public class CouponSku extends BaseEntity{
 	private Long couponId;
 
+	private Long goodsId;
+
 	private Long skuId;
 
 	@TableLogic(value = "1", delval = "0")

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/model/views/CouponActiveView.java

@@ -69,8 +69,8 @@ public class CouponActiveView {
 	/**
 	 * 平台规格集合
 	 */
-	@DbField("c.sku_ids")
-	private String skuIds;
+	@DbField("c.goods_sku_ids")
+	private String goodsSkuIds;
 
 	/**
 	 * 是否是有效时间

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/model/views/CouponUserEnableView.java

@@ -88,8 +88,8 @@ public class CouponUserEnableView {
 	/**
 	 * 平台规格集合
 	 */
-	@DbField("ca.sku_ids")
-	private String skuIds;
+	@DbField("c.goods_sku_ids")
+	private String goodsSkuIds;
 
 	/**
 	 * 是否是有效时间

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/model/views/CouponUserView.java

@@ -88,8 +88,8 @@ public class CouponUserView {
 	/**
 	 * 平台规格集合
 	 */
-	@DbField("c.sku_ids")
-	private String skuIds;
+	@DbField("c.goods_sku_ids")
+	private String goodsSkuIds;
 
 	/**
 	 * 是否是有效时间

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/CouponView.java

@@ -55,7 +55,7 @@ public class CouponView {
 	/**
 	 * 平台规格集合
 	 */
-	private String skuIds;
+	private String goodsSkuIds;
 
 	/**
 	 * 是否是有效时间

+ 1 - 1
netflix-dao/src/main/resources/mapper/CouponMapper.xml

@@ -6,7 +6,7 @@
     <select id="checkExCode" resultType="com.cyksj.model.dto.CouponPopularizeDto">
         select cp.id as couponId,
                cdp.id as popularizeId,
-               cp.sku_ids,
+               cp.goods_sku_ids,
                cp.type,
                cdp.coupon_id as popularizeCouponId
         from `coupon` cp

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

@@ -15,7 +15,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.Set;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /*
  *项目名: netflix
@@ -132,20 +133,24 @@ public class CouponCommonServiceImpl implements CouponCommonService {
 
 
 	public void checkCouponParamsAndSaveOrUpdate(Coupon coupon) throws Exception {
-		Set<Integer> skuIds = null;
+		List<Coupon.CouponGoodsSku> goodsSkuList = null;
 		if (coupon.getType() == Coupon.Type.discount) {
 			if (coupon.getDiscount() == null || (coupon.getDiscount().compareTo(BigDecimal.ZERO) < 0 && coupon.getDiscount().compareTo(BigDecimal.ZERO) > 0)) {
 				throw BusinessRuntimeException.getInstance("请输入正确的折扣");
 			}
 		}
 		if (coupon.getType() == Coupon.Type.reduce) {
-			if (StrUtil.isEmpty(coupon.getSkuIds())) {
+			if (StrUtil.isEmpty(coupon.getGoodsSkuIds())) {
 				throw BusinessRuntimeException.getInstance("立减优惠卷,请配置其平台及规格");
 			}
 			if (coupon.getReduceMoney() == null) {
 				throw BusinessRuntimeException.getInstance("请配置其立减金额");
 			}
-			skuIds = Jsons.parseObject(coupon.getSkuIds(), Set.class);
+			goodsSkuList = Jsons.parseList(coupon.getGoodsSkuIds(), Coupon.CouponGoodsSku.class);
+			if (goodsSkuList.isEmpty()) {
+				throw BusinessRuntimeException.getInstance("所选规格不存在");
+			}
+			List<Long> skuIds = goodsSkuList.stream().map(Coupon.CouponGoodsSku::getSkuId).collect(Collectors.toList());
 			GoodsDonSku sku = goodsDonSkuMapper.selectOne(Wrappers.lambdaQuery(GoodsDonSku.class).in(GoodsDonSku::getId, skuIds).orderByAsc(GoodsDonSku::getPrice).select(GoodsDonSku::getPrice).last("limit 1"));
 			if (sku == null) {
 				throw BusinessRuntimeException.getInstance("所选规格不存在");
@@ -176,19 +181,21 @@ public class CouponCommonServiceImpl implements CouponCommonService {
 		}
 		if (coupon.getId() == null) {
 			couponMapper.insert(coupon);
-			skuIds.forEach(skuId->{
+			goodsSkuList.forEach(goodsSkuId->{
 				CouponSku couponSku = new CouponSku();
 				couponSku.setCouponId(coupon.getId());
-				couponSku.setSkuId(Long.valueOf(skuId));
+				couponSku.setGoodsId(goodsSkuId.getGoodsId());
+				couponSku.setSkuId(goodsSkuId.getSkuId());
 				couponSkuMapper.insert(couponSku);
 			});
 		} else {
 			couponMapper.updateById(coupon);
 			couponSkuMapper.delete(Wrappers.lambdaQuery(CouponSku.class).eq(CouponSku::getCouponId, coupon.getId()));
-			skuIds.forEach(skuId->{
+			goodsSkuList.forEach(goodsSkuId->{
 				CouponSku couponSku = new CouponSku();
 				couponSku.setCouponId(coupon.getId());
-				couponSku.setSkuId(Long.valueOf(skuId));
+				couponSku.setGoodsId(goodsSkuId.getGoodsId());
+				couponSku.setSkuId(goodsSkuId.getSkuId());
 				couponSkuMapper.insert(couponSku);
 			});
 		}

+ 27 - 12
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -35,6 +35,7 @@ import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.*;
 import com.cyksj.mapper.manage.coupon.CouponMapper;
+import com.cyksj.mapper.manage.coupon.CouponSkuMapper;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.model.dto.*;
 import com.cyksj.model.entity.*;
@@ -63,6 +64,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.cyksj.enums.GatewayApiCode.GROUP_INDEX_ALREADY_BE_USER;
 import static com.cyksj.enums.GatewayApiCode.GROUP_INDEX_NOT_FIND;
@@ -126,6 +128,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final CouponUserMapper couponUserMapper;
 
+	private final CouponSkuMapper couponSkuMapper;
 
 	@Transactional(rollbackFor = Throwable.class)
 	@Override
@@ -986,6 +989,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	public void checkCouponStatus(Long skuId, String couponExCode, Long couponId, Long userId) throws Exception {
 		log.info("开始校验兑换码:{},优惠卷id:{}状态", couponExCode, couponId);
+		//实物还是虚物商品
+		GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(skuId);
+		GoodsDon goodsDon = goodsDonMapper.selectById(goodsDonSku.getGoodsId());
 		if (StrUtil.isNotBlank(couponExCode) && couponId != null) {
 			throw BusinessRuntimeException.getInstance("优惠券与优惠码不可同时使用..");
 		}
@@ -994,12 +1000,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			if (exists == null) {
 				throw BusinessRuntimeException.getInstance("该优惠码不存在");
 			}
-			if (exists.getType() == Coupon.Type.reduce) {
-				Set<Integer> skuIds = Jsons.parseObject(exists.getSkuIds(), Set.class);
-				if (!skuIds.contains(Integer.valueOf(String.valueOf(skuId)))) {
-					throw BusinessRuntimeException.getInstance("该优惠码不适用于该规格");
-				}
-			}
+			checkCouponGoods(goodsDon, skuId, exists.getType(), exists.getGoodsSkuIds());
+
 		} else if (couponId != null) {
 			CouponUserView couponUserView = beanSearcher.searchFirst(CouponUserView.class, MapUtils.builder()
 					.field(CouponUserView::getCouponId, couponId).op(Operator.Equal)
@@ -1019,12 +1021,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			if (couponUserView.getCouponUserStatus() != CouponUser.Status.unused) {
 				throw BusinessRuntimeException.getInstance("该优惠卷不可使用");
 			}
-			if (couponUserView.getType() == Coupon.Type.reduce) {
-				Set<Integer> skuIds = Jsons.parseObject(couponUserView.getSkuIds(), Set.class);
-				if (!skuIds.contains(Integer.valueOf(String.valueOf(skuId)))) {
-					throw BusinessRuntimeException.getInstance("该优惠码不适用于该规格");
-				}
-			}
+			checkCouponGoods(goodsDon, skuId, couponUserView.getType(), couponUserView.getGoodsSkuIds());
 		}
 	}
 
@@ -1103,4 +1100,22 @@ 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) throws Exception {
+		if (goodsDon.getType() == 1) {
+			if (type == Coupon.Type.reduce) {
+				List<Coupon.CouponGoodsSku> skuIds = Jsons.parseObject(goodsSkuIds, List.class);
+				Set<Long> collect = skuIds.stream().map(Coupon.CouponGoodsSku::getSkuId).collect(Collectors.toSet());
+				if (!collect.contains(Integer.valueOf(String.valueOf(skuId)))) {
+					throw BusinessRuntimeException.getInstance("该优惠码不适用于该规格");
+				}
+			}
+		} 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"));
+			if (couponSku == null) {
+				throw BusinessRuntimeException.getInstance("该优惠卷不可用于实物商品");
+			}
+		}
+	}
 }

+ 0 - 12
netflix-web/src/main/java/com/cyksj/web/controller/coupon/CouponFrontController.java

@@ -49,7 +49,6 @@ public class CouponFrontController {
 	 */
 	@GetMapping("/center/list")
 	public Result<SearchResult<CouponActiveView>> couponCenterList(HttpServletRequest request) {
-		setToken(8116l);
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		SearchResult<CouponActiveView> search = beanSearcher.search(CouponActiveView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
 		search.getDataList().forEach(data -> {
@@ -75,7 +74,6 @@ public class CouponFrontController {
 	 */
 	@GetMapping("/personal/list")
 	public Result<SearchResult<CouponUserView>> couponPersonalList(HttpServletRequest request) {
-		setToken(8116l);
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		SearchResult<CouponUserView> search = beanSearcher.search(CouponUserView.class,
 				MapUtils.flatBuilder(request.getParameterMap())
@@ -91,7 +89,6 @@ public class CouponFrontController {
 	 */
 	@GetMapping("/available/list")
 	public Result<SearchResult<CouponUserView>> availableCouponList(Long skuId) {
-		setToken(8116l);
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		Integer count = couponUserMapper.countAvailableCouponList(skuId, userId);
 		SearchResult<CouponUserView> couponUserViews = new SearchResult<>();
@@ -108,7 +105,6 @@ public class CouponFrontController {
 	 */
 	@GetMapping("/recommend/list")
 	public Result<SearchResult<CouponRecommendView>> getRecommendList(HttpServletRequest request) {
-		setToken(8116l);
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		CouponNewUserView couponNewUserView = beanSearcher.searchFirst(CouponNewUserView.class, MapUtils.builder().field(CouponNewUserView::getUserId, userId).op(Operator.Equal).build());
 		SearchResult<CouponRecommendView> search = beanSearcher.search(CouponRecommendView.class,
@@ -139,7 +135,6 @@ public class CouponFrontController {
 	 */
 	@PostMapping("/collect/recommend/whole")
 	public Result<String> collectWholeRecommendCoupon() {
-		setToken(8116l);
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		couponFontService.collectWholeRecommendCoupon(userId);
 		return GatewayResponse.SUCCESS.newBuilder().toResult("领取成功");
@@ -150,7 +145,6 @@ public class CouponFrontController {
 	 */
 	@GetMapping("/get/recommend/appear")
 	public Result<Boolean> recommendIsAppear() {
-		setToken(8116l);
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		String zero = DateUtil.beginOfDay(DateTime.now()).toString();
 		Object exists = redisService.get(RedisService.key.RECOMMEND_COUPON_DAY.getNameFormat(String.format("%s-%s", zero, userId)));
@@ -165,7 +159,6 @@ public class CouponFrontController {
 	 */
 	@PostMapping("/collect")
 	public Result<String> collectCoupon(@RequestBody CouponCollectReq couponCollectReq) {
-		setToken(8116l);
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		couponFontService.collectCoupon(couponCollectReq, userId);
 		return GatewayResponse.SUCCESS.newBuilder().toResult("领取优惠卷成功");
@@ -177,13 +170,8 @@ public class CouponFrontController {
 	@PostMapping("/recommend/collect")
 	@Deprecated
 	public Result<String> collectRecommendCoupon(@RequestBody CouponCollectReq couponCollectReq) {
-		setToken(8116l);
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		couponFontService.collectRecommendCoupon(couponCollectReq, userId);
 		return GatewayResponse.SUCCESS.newBuilder().toResult("领取优惠卷成功");
 	}
-
-	public void setToken(Long userId) {
-		StpUserUtil.login(userId);
-	}
 }