소스 검색

360 渠道无登录状态支付.

chenbiao 3 년 전
부모
커밋
ae4cc01363

+ 10 - 0
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -134,4 +134,14 @@ public interface Constant {
 	 * 特殊格式平台邮箱
 	 */
 	String SPECIAL_GOODS_ACCOUNT_IMPORT_KEY = "special_goods_account_import_key";
+
+	/**
+	 * 360渠道名称
+	 */
+	String CHANNEL_NAME_360 = "360";
+
+	/**
+	 * 360渠道折扣
+	 */
+	String CHANNEL_360_DISCOUNT = "channel_360_discount";
 }

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonSearchView.java

@@ -152,4 +152,10 @@ public class OrderDonSearchView {
 
 	@DbIgnore
 	private List<GoodsDonSkuView> benefitsViews;
+
+	/**
+	 * 关联兑换码
+	 */
+	@DbField("o.ex_code")
+	private String exCode;
 }

+ 76 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ChannelPopularizeFrontView.java

@@ -0,0 +1,76 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/*
+ *项目名: netflix
+ *文件名: ChannelPopularizeFrontView
+ *创建者: JavaZou
+ *创建时间:2023/8/11 12:10
+ */
+@Getter
+@Setter
+@SearchBean(tables = "(select * from channel_popularize where :id:) cp left join channel c on c.id = cp.channel_id")
+public class ChannelPopularizeFrontView {
+	/**
+	 * 渠道id
+	 */
+	@DbField("cp.channel_id")
+	private Long channelId;
+
+	@DbField("c.name")
+	private String channelName;
+
+	/**
+	 * 链接名称
+	 */
+	@DbField("cp.name")
+	private String name;
+
+	/**
+	 * url
+	 */
+	@DbField("cp.url")
+	private String url;
+
+	/**
+	 * 样式
+	 */
+	@DbField("cp.modality")
+	private String modality;
+
+	/**
+	 * 支付方式
+	 */
+	@DbField("cp.pay_method")
+	private String payMethod;
+
+	/**
+	 * 是否展示规格弹窗
+	 */
+	@DbField("cp.is_show_sku")
+	private Boolean isShowSku;
+
+	/**
+	 * 是否隐藏平台logo
+	 */
+	@DbField("cp.is_show_logo")
+	private Boolean isShowLogo;
+
+	/**
+	 * 绑定的优惠券
+	 */
+	@DbField("cp.coupon_ids")
+	@JsonIgnore
+	private String couponIds;
+
+	@DbIgnore
+	private List<CouponTfPopularizeView> coupons;
+}

+ 53 - 0
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -11,11 +11,13 @@ import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.snowflake.Sequence;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.dto.RedisKey;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.*;
+import com.cyksj.mapper.channel.ChannelPopularizeMapper;
 import com.cyksj.mapper.manage.exchange.ExchangeCodeMapper;
 import com.cyksj.mapper.market.draw.LuckyDrawRecordMapper;
 import com.cyksj.model.entity.*;
@@ -81,6 +83,10 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 
 	private final GroupRelationFrontService groupRelationFrontService;
 
+	private final ChannelPopularizeMapper channelPopularizeMapper;
+
+	private final OrderDiscountPlusPurchaseSkuRelationMapper orderDiscountPlusPurchaseSkuRelationMapper;
+
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public List<ExcelExchangeCodeData> createExchangeCode(ExchangeCodeReq exchangeCodeReq) {
@@ -153,6 +159,22 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 				.eq(OrderDon::getExCode, exchangeCode.getCode())
 				.notIn(OrderDon::getStatus, Constant.noOrderStatus)
 				.last("limit 1"));
+		Long popularizeId = orderDon.getPopularizeId();
+
+		//360 渠道兑换规则验证.
+		if(popularizeId != null && popularizeId != 0){
+			String channel = channelPopularizeMapper.selectChannelByPid(popularizeId);
+			if (Constant.CHANNEL_NAME_360.equals(channel)) {
+				//查询该用户之前是否存在订单.
+				Integer count = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
+						.eq(OrderDon::getUserId, userId)
+						.notIn(OrderDon::getStatus, Constant.noOrderStatus));
+				if (count > 0) {
+					throw new BusinessRuntimeException("您不符合360活动条件.");
+				}
+			}
+		}
+
 		if (orderDon != null && orderDon.getStatus() == OrderDon.Status.refund) {
 			throw BusinessRuntimeException.getInstance("您的订单已退款,无法使用该兑换码");
 		}
@@ -237,6 +259,37 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 			orderDon.setUserId(userId);
 			orderDon.setStatus(goodsDon.getType() == 1 && goodsDon.getSecondType() == 2 ? OrderDon.Status.complete : OrderDon.Status.hasPayment);
 			orderDonMapper.updateById(orderDon);
+			if (orderDon.getIsDp()) {
+				//是否已经发送优惠加购车票
+				OrderDiscountPlusPurchaseSkuRelation purchaseSkuRelation = orderDiscountPlusPurchaseSkuRelationMapper.selectOne(Wrappers.lambdaQuery(OrderDiscountPlusPurchaseSkuRelation.class)
+						.eq(OrderDiscountPlusPurchaseSkuRelation::getOrderId, orderDon.getId()));
+				if (purchaseSkuRelation != null) {
+					String plusSkuIdsStr = purchaseSkuRelation.getPlusSkuIds();
+					String relationIdsStr = purchaseSkuRelation.getRelationIds();
+					if (StrUtil.isNotEmpty(plusSkuIdsStr) && StrUtil.isEmpty(relationIdsStr)) {
+						try {
+							List<Long> plusSkuIds = Jsons.parseList(plusSkuIdsStr, Long.class);
+							//发送优惠加购 规格车票
+							List<Long> dis_relation_ids = new ArrayList<>();
+							plusSkuIds.forEach(plus_skuId -> {
+								GoodsDonSku plus_sku = goodsDonSkuMapper.selectById(plus_skuId);
+								if (plus_sku == null) {
+									log.error("订单id:{}优惠加购规格已被删除 skuId:{},车票未发送", orderDon.getId(), plus_skuId);
+									return;
+								}
+								GroupsRelation relationNoOrder = getRelationNoOrder(plus_sku, orderDon.getUserId());
+								dis_relation_ids.add(relationNoOrder.getId());
+							});
+							//保存订单关联优惠加购车票
+							orderDiscountPlusPurchaseSkuRelationMapper.update(null, Wrappers.lambdaUpdate(OrderDiscountPlusPurchaseSkuRelation.class)
+									.set(OrderDiscountPlusPurchaseSkuRelation::getRelationIds, dis_relation_ids.toString())
+									.eq(OrderDiscountPlusPurchaseSkuRelation::getOrderId, orderDon.getId())
+									.isNull(OrderDiscountPlusPurchaseSkuRelation::getRelationIds));
+						} catch (Exception e) {
+						}
+					}
+				}
+			}
 		} else {
 			/* 生成订单 */
 			String donNo = SEQUENCE.nextId().toString();

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

@@ -36,6 +36,7 @@ import com.cyksj.config.zfb.ZfbProductCode;
 import com.cyksj.dto.RedisKey;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.mapper.*;
+import com.cyksj.mapper.channel.ChannelPopularizeMapper;
 import com.cyksj.mapper.channel.ShopConfigMapper;
 import com.cyksj.mapper.manage.coupon.CouponDistributePopularizeMapper;
 import com.cyksj.mapper.manage.coupon.CouponMapper;
@@ -203,6 +204,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final OrderDiscountPlusPurchaseSkuRelationMapper orderDiscountPlusPurchaseSkuRelationMapper;
 
+	private final ChannelPopularizeMapper channelPopularizeMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -1992,6 +1995,17 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			if (success != 1) throw BusinessRuntimeException.getInstance("您的余额不足!");
 			orderDon.setBalance(balance);
 		}
+		//特殊渠道推广优惠. 360
+		if(orderDon.getPopularizeId() != null && orderDon.getPopularizeId() != 0L){
+			String name = channelPopularizeMapper.selectChannelByPid(orderDon.getPopularizeId());
+			if (Constant.CHANNEL_NAME_360.equals(name)) {
+				SysConfig sysConfig = sysConfigService.getBaseMapper().selectOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, Constant.CHANNEL_360_DISCOUNT));
+				if (sysConfig != null) {
+					BigDecimal discountMoney = orderDon.getMoney().multiply(BigDecimal.valueOf(Double.valueOf(sysConfig.getSysValue())));
+					orderDon.setMoney(discountMoney);
+				}
+			}
+		}
 	}
 
 	/**

+ 6 - 3
netflix-web/src/main/java/com/cyksj/web/controller/channel/ChannelController.java

@@ -9,9 +9,9 @@ import com.cyksj.mapper.channel.ChannelPopularizeMapper;
 import com.cyksj.mapper.channel.ChannelPopularizeVisitMapper;
 import com.cyksj.mapper.channel.MoviesVisitRecordMapper;
 import com.cyksj.mapper.manage.coupon.CouponSkuMapper;
-import com.cyksj.model.entity.ChannelPopularize;
 import com.cyksj.model.entity.ChannelPopularizeVisit;
 import com.cyksj.model.entity.MoviesVisitRecord;
+import com.cyksj.model.views.ChannelPopularizeFrontView;
 import com.cyksj.model.views.CouponTfPopularizeView;
 import com.cyksj.web.util.StpUserUtil;
 import com.ejlchina.searcher.BeanSearcher;
@@ -43,8 +43,11 @@ public class ChannelController {
     private final CouponSkuMapper couponSkuMapper;
 
     @GetMapping("/get/{id}")
-    public Result<ChannelPopularize> getById(@PathVariable Long id, Boolean isLogin) {
-        ChannelPopularize channelPopularize = popularizeMapper.selectById(id);
+    public Result<ChannelPopularizeFrontView> getById(@PathVariable Long id, Boolean isLogin) {
+        ChannelPopularizeFrontView channelPopularize = beanSearcher.searchFirst(ChannelPopularizeFrontView.class, MapUtils.builder()
+                .put("id", String.format("id = %s", id))
+                .build());
+
         if (channelPopularize == null) {
             throw BusinessRuntimeException.getInstance("该链接不存在!");
         }