Преглед изворни кода

抖音免登录链接;cps用户客服设备分销链接

zoujiajian пре 2 година
родитељ
комит
9c701db5ae

+ 16 - 1
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -164,10 +164,15 @@ public interface Constant {
 	String CHANNEL_360_DISCOUNT = "channel_360_discount";
 
 	/**
-	 * 百度渠道 投放链接优惠下单 系统配置key
+	 * 百度链接免登录下单优惠 系统配置key
 	 */
 	String CHANNEL_BAIDU_DISCOUNT_KEY = "channel_baidu_discount_key";
 
+	/**
+	 * 抖音免登录下单优惠 key
+	 */
+	String CHANNEL_DY_DISCOUNT_KEY = "channel_dy_discount_key";
+
 	/**
 	 * GPT 平台账号重复
 	 */
@@ -284,4 +289,14 @@ public interface Constant {
 	 * GPT 镜像车队唯一账号
 	 */
 	String GPT_CAR_ONLY_ACCOUNT = "gptcaroo21213";
+
+	/**
+	 * 免登录渠道
+	 */
+	List<String> NO_SIGN_CHANNEL_NAMES = List.of("百度", "巨量");
+
+	/**
+	 * 设备客服活码用户分销专用
+	 */
+	Long EP_AC_CODE_ID = 5l;
 }

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

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /*
@@ -71,6 +72,15 @@ public class ChannelPopularizeFrontView {
 	@JsonIgnore
 	private String couponIds;
 
+	/**
+	 * 是否免登录
+	 */
+	@DbIgnore
+	private Boolean isSign = false;
+
+	@DbIgnore
+	private BigDecimal discount;
+
 	@DbIgnore
 	private List<CouponTfPopularizeView> coupons;
 }

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/cps/CpsPopularizeService.java

@@ -17,4 +17,6 @@ public interface CpsPopularizeService {
 	void deleteById(long cpsUserId, Long id);
 
 	UserDistributePopularizeView getDefaultPopularizeDetail(long cpsUserId);
+
+	String getServiceCodeUrl(long cpsUserId);
 }

+ 28 - 0
netflix-service/src/main/java/com/cyksj/service/cps/impl/CpsPopularizeServiceImpl.java

@@ -4,11 +4,16 @@ import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.EnvCommonService;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.manage.cps.UserDistributePopularizeMapper;
+import com.cyksj.model.entity.User;
 import com.cyksj.model.entity.UserDistributePopularize;
 import com.cyksj.model.views.UserDistributePopularizeView;
 import com.cyksj.service.cps.CpsPopularizeService;
+import com.cyksj.service.user.UserService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.dao.DuplicateKeyException;
@@ -26,6 +31,12 @@ import org.springframework.stereotype.Service;
 public class CpsPopularizeServiceImpl implements CpsPopularizeService {
 	private final UserDistributePopularizeMapper popularizeMapper;
 
+	private final UserMapper userMapper;
+
+	private final EnvCommonService envCommonService;
+
+	private final UserService userService;
+
 	@Override
 	public void insert(UserDistributePopularize popularize) {
 		saveOrUpdate(popularize);
@@ -86,4 +97,21 @@ public class CpsPopularizeServiceImpl implements CpsPopularizeService {
 	public UserDistributePopularizeView getDefaultPopularizeDetail(long cpsUserId) {
 		return popularizeMapper.getDefaultPopularizeDetail(cpsUserId);
 	}
+
+	@Override
+	public String getServiceCodeUrl(long cpsUserId) {
+		User user = userMapper.selectById(cpsUserId);
+		String dsCode = user.getShowId();
+		if (StrUtil.isEmpty(dsCode)) {
+			user.setShowId(userService.getUserShowId(user.getId()));
+		}
+		String sharedUrl;
+		if (envCommonService.isPrdEnv()) {
+			sharedUrl = String.format(envCommonService.getDomain() + "serviceCode/?serviceCode=%s&dsCode=%s", Constant.EP_AC_CODE_ID, dsCode);
+		} else {
+			//测试环境
+			sharedUrl = String.format(envCommonService.getDomain() + "test/web/serviceCode?serviceCode=%s&dsCode=%s", Constant.EP_AC_CODE_ID, dsCode);
+		}
+		return sharedUrl;
+	}
 }

+ 61 - 41
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -2192,43 +2192,51 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		//特殊渠道推广优惠. 360
 		if (orderDon.getPopularizeId() != null && orderDon.getPopularizeId() != 0L) {
+			String name = channelPopularizeMapper.selectChannelByPid(orderDon.getPopularizeId());
 			//使用了优惠券 不再使用360渠道 折扣
 			if (couponUser == null && goodsType == 1) {
-				//百度渠道 专门优惠链接
-				SysConfig baiduConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
-						.eq(SysConfig::getSysKey, Constant.CHANNEL_BAIDU_DISCOUNT_KEY).last("limit 1"));
-				if (baiduConfig != null) {
-					String sysValue = baiduConfig.getSysValue();
-					if (StrUtil.isNotBlank(sysValue)) {
-						try {
-							ChannelBaiDuDiscountDto baiDuDiscountDto = Jsons.parseObject(sysValue, ChannelBaiDuDiscountDto.class);
-							List<Long> baiduPopularizeIds = baiDuDiscountDto.getPopularizeIds();
-							BigDecimal discount = baiDuDiscountDto.getDiscount();
-							if (CollUtil.isNotEmpty(baiduPopularizeIds) && discount != null && discount.compareTo(BigDecimal.ZERO) > 0) {
-								if (baiduPopularizeIds.contains(orderDon.getPopularizeId())) {
-									BigDecimal discountMoney = orderDon.getMoney().multiply(discount);
-									orderDon.setMoney(discountMoney);
+				if (name.contains(Constant.NO_SIGN_CHANNEL_NAMES.get(0)) || name.contains(Constant.NO_SIGN_CHANNEL_NAMES.get(1))) {
+					String key;
+					if (name.contains(Constant.NO_SIGN_CHANNEL_NAMES.get(0))) {
+						//百度渠道 专门优惠链接
+						key = Constant.CHANNEL_BAIDU_DISCOUNT_KEY;
+					} else {
+						//抖音
+						key = Constant.CHANNEL_DY_DISCOUNT_KEY;
+					}
+					SysConfig channelNoSignConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
+							.eq(SysConfig::getSysKey, key).last("limit 1"));
+					if (channelNoSignConfig != null) {
+						String sysValue = channelNoSignConfig.getSysValue();
+						if (StrUtil.isNotBlank(sysValue)) {
+							try {
+								ChannelBaiDuDiscountDto baiDuDiscountDto = Jsons.parseObject(sysValue, ChannelBaiDuDiscountDto.class);
+								List<Long> baiduPopularizeIds = baiDuDiscountDto.getPopularizeIds();
+								BigDecimal discount = baiDuDiscountDto.getDiscount();
+								if (CollUtil.isNotEmpty(baiduPopularizeIds) && discount != null && discount.compareTo(BigDecimal.ZERO) > 0) {
+									if (baiduPopularizeIds.contains(orderDon.getPopularizeId())) {
+										BigDecimal discountMoney = orderDon.getMoney().multiply(discount);
+										orderDon.setMoney(discountMoney);
+									}
 								}
-							}
 
-						} catch (Exception e) {
+							} catch (Exception e) {
+							}
 						}
 					}
-				} else {
-					//360
-					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);
-						}
+				}
+			} else {
+				//360
+				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);
 					}
 				}
-
 			}
-		}
 
+		}
 		//存在余额
 		deductBalancePayOrderMoney(orderDon, balance, user);
 	}
@@ -2409,24 +2417,36 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				sendTelegramMsg(orderDon, goodsDon, sku);
 			});
 		}
+
 		if (orderDon.getPopularizeId() != null && orderDon.getPopularizeId() != 0 && StrUtil.isNotEmpty(orderDon.getPhone())) {
+			String name = channelPopularizeMapper.selectChannelByPid(orderDon.getPopularizeId());
 			//百度渠道 专门优惠链接
-			SysConfig baiduConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
-					.eq(SysConfig::getSysKey, Constant.CHANNEL_BAIDU_DISCOUNT_KEY).last("limit 1"));
-			if (baiduConfig != null) {
-				String sysValue = baiduConfig.getSysValue();
-				if (StrUtil.isNotBlank(sysValue)) {
-					try {
-						ChannelBaiDuDiscountDto baiDuDiscountDto = Jsons.parseObject(sysValue, ChannelBaiDuDiscountDto.class);
-						List<Long> couponIds = baiDuDiscountDto.getCouponIds();
-						//下单成功后 发送优惠券
-						if (CollUtil.isNotEmpty(couponIds)) {
-							List<Long> baiduPopularizeIds = baiDuDiscountDto.getPopularizeIds();
-							if (baiduPopularizeIds.contains(orderDon.getPopularizeId())) {
-								couponIds.forEach(couponId -> couponCommonService.sendCouponToUser(orderDon.getUserId(), couponId, null, null, null, CouponUser.Channel.manual));
+			if (name.contains(Constant.NO_SIGN_CHANNEL_NAMES.get(0)) || name.contains(Constant.NO_SIGN_CHANNEL_NAMES.get(1))) {
+				String key;
+				if (name.contains(Constant.NO_SIGN_CHANNEL_NAMES.get(0))) {
+					//百度渠道 专门优惠链接
+					key = Constant.CHANNEL_BAIDU_DISCOUNT_KEY;
+				} else {
+					//抖音
+					key = Constant.CHANNEL_DY_DISCOUNT_KEY;
+				}
+				SysConfig channelNoSignConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
+						.eq(SysConfig::getSysKey, key).last("limit 1"));
+				if (channelNoSignConfig != null) {
+					String sysValue = channelNoSignConfig.getSysValue();
+					if (StrUtil.isNotBlank(sysValue)) {
+						try {
+							ChannelBaiDuDiscountDto baiDuDiscountDto = Jsons.parseObject(sysValue, ChannelBaiDuDiscountDto.class);
+							List<Long> couponIds = baiDuDiscountDto.getCouponIds();
+							//下单成功后 发送优惠券
+							if (CollUtil.isNotEmpty(couponIds)) {
+								List<Long> baiduPopularizeIds = baiDuDiscountDto.getPopularizeIds();
+								if (baiduPopularizeIds.contains(orderDon.getPopularizeId())) {
+									couponIds.forEach(couponId -> couponCommonService.sendCouponToUser(orderDon.getUserId(), couponId, null, null, null, CouponUser.Channel.manual));
+								}
 							}
+						} catch (Exception e) {
 						}
-					} catch (Exception e) {
 					}
 				}
 			}

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/user/UserService.java

@@ -57,4 +57,6 @@ public interface UserService extends IService<User> {
 	UserSharedDto getUserShredDtoByDsCode(String dsCode);
 
 	Long getSharedIdByUserId(Long userId);
+
+	void bindUserDistributeShared(Long userId, String dsCode);
 }

+ 14 - 0
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -746,4 +746,18 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 		}
 		return distributeShared.getSharedId();
 	}
+
+	@Override
+	public void bindUserDistributeShared(Long userId, String dsCode) {
+		User user = userMapper.selectById(userId);
+		if (StrUtil.equals(user.getShowId(), dsCode)) {
+			return;
+		}
+		UserSharedDto userSharedDto = getUserShredDtoByDsCode(dsCode);
+		Long sharedId = userSharedDto.getSharedId();
+		Long dsPopularizeId = userSharedDto.getDsPopularizeId();
+		//建立绑定关系
+		log.info("建立用户userId:{}与sharedId:{}绑定关系", userId, sharedId);
+		distributeService.saveDistributionInvitation(sharedId, user.getId(), dsPopularizeId);
+	}
 }

+ 33 - 1
netflix-web/src/main/java/com/cyksj/web/controller/channel/ChannelController.java

@@ -1,6 +1,9 @@
 package com.cyksj.web.controller.channel;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
@@ -9,8 +12,11 @@ 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.mapper.sys.SysConfigMapper;
 import com.cyksj.model.entity.ChannelPopularizeVisit;
 import com.cyksj.model.entity.MoviesVisitRecord;
+import com.cyksj.model.entity.SysConfig;
+import com.cyksj.model.manage.dto.ChannelBaiDuDiscountDto;
 import com.cyksj.model.views.ChannelPopularizeFrontView;
 import com.cyksj.model.views.CouponTfPopularizeView;
 import com.cyksj.service.corp.CorpCustomerAcquistionService;
@@ -50,10 +56,12 @@ public class ChannelController {
 
     private final CorpCustomerAcquistionService corpCustomerAcquistionService;
 
+    private final SysConfigMapper sysConfigMapper;
+
 
 
     @GetMapping("/get/{id}")
-    public Result<ChannelPopularizeFrontView> getById(@PathVariable Long id, Boolean isLogin) {
+    public Result<ChannelPopularizeFrontView> getById(@PathVariable Long id) {
         ChannelPopularizeFrontView channelPopularize = beanSearcher.searchFirst(ChannelPopularizeFrontView.class, MapUtils.builder()
                 .put("id", String.format("id = %s", id))
                 .build());
@@ -79,6 +87,30 @@ public class ChannelController {
                 System.out.println(e.getMessage());
             }
         }
+        String channelName = channelPopularize.getChannelName();
+        if (channelName.contains(Constant.NO_SIGN_CHANNEL_NAMES.get(0)) || channelName.contains(Constant.NO_SIGN_CHANNEL_NAMES.get(1))) {
+            String key;
+            if (channelName.contains(Constant.NO_SIGN_CHANNEL_NAMES.get(0))) {
+                key = Constant.CHANNEL_BAIDU_DISCOUNT_KEY;
+            } else {
+                key = Constant.CHANNEL_DY_DISCOUNT_KEY;
+            }
+            SysConfig baiduConfig = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class)
+                    .eq(SysConfig::getSysKey, key).last("limit 1"));
+            if (baiduConfig != null) {
+                String sysValue = baiduConfig.getSysValue();
+                if (StrUtil.isNotBlank(sysValue)) {
+                    try {
+                        ChannelBaiDuDiscountDto baiDuDiscountDto = Jsons.parseObject(sysValue, ChannelBaiDuDiscountDto.class);
+                        if (baiDuDiscountDto != null && CollUtil.isNotEmpty(baiDuDiscountDto.getPopularizeIds()) && baiDuDiscountDto.getPopularizeIds().contains(id)) {
+                            channelPopularize.setIsSign(true);
+                            channelPopularize.setDiscount(baiDuDiscountDto.getDiscount());
+                        }
+                    } catch (Exception e) {
+                    }
+                }
+            }
+        }
         ChannelPopularizeVisit channelPopularizeVisit = new ChannelPopularizeVisit();
         channelPopularizeVisit.setPopularizeId(id);
         channelPopularizeVisitMapper.insert(channelPopularizeVisit);

+ 0 - 6
netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsDistribtueDataController.java

@@ -6,8 +6,6 @@ import cn.hutool.core.util.StrUtil;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GoodsDonMapper;
-import com.cyksj.mapper.UserMapper;
-import com.cyksj.mapper.manage.distribute.DistributeMoneyApplyMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.model.entity.DistributeMoneyApply;
 import com.cyksj.model.entity.DistributeWaitingSendPoints;
@@ -55,10 +53,6 @@ public class CpsDistribtueDataController {
 
 	private final UserDistributeMapper userDistributeMapper;
 
-	private final UserMapper userMapper;
-
-	private final DistributeMoneyApplyMapper distributeMoneyApplyMapper;
-
 	/**
 	 * 个人分销平台数据详情
 	 */

+ 12 - 1
netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsPopularizeController.java

@@ -70,7 +70,7 @@ public class CpsPopularizeController {
 	public Result<UserDistributePopularizeView> getDefaultDetail() {
 		long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
 		User user = userService.getById(cpsUserId);
-		UserDistributePopularizeView view = Optional.ofNullable(cpsPopularizeService.getDefaultPopularizeDetail(cpsUserId)).orElseGet(()->{
+		UserDistributePopularizeView view = Optional.ofNullable(cpsPopularizeService.getDefaultPopularizeDetail(cpsUserId)).orElseGet(() -> {
 			UserDistributePopularizeView newPopularizeView = new UserDistributePopularizeView();
 			newPopularizeView.setOrders(0);
 			newPopularizeView.setOrdersMoney(BigDecimal.ZERO);
@@ -145,4 +145,15 @@ public class CpsPopularizeController {
 				.onlySelect(GoodsDon::getId, GoodsDon::getCategory, GoodsDon::getType, GoodsDon::getTitle, GoodsDon::getSecondType).build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(goodsDons);
 	}
+
+	/**
+	 * 复制客服活码链接
+	 * 用于cps用户实物分销
+	 */
+	@GetMapping("/get/service/code")
+	public Result<String> getServiceCodeUrl() {
+		long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
+		return GatewayResponse.SUCCESS.newBuilder().toResult(cpsPopularizeService.getServiceCodeUrl(cpsUserId));
+	}
+
 }

+ 11 - 1
netflix-web/src/main/java/com/cyksj/web/controller/landing/CorpFollowActiveCodeController.java

@@ -1,8 +1,11 @@
 package com.cyksj.web.controller.landing;
 
+import cn.hutool.core.util.StrUtil;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.service.corp.CorpFollowActiveCodeFrontService;
+import com.cyksj.service.user.UserService;
+import com.cyksj.web.util.StpUserUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -21,12 +24,19 @@ import org.springframework.web.bind.annotation.RestController;
 public class CorpFollowActiveCodeController {
 	private final CorpFollowActiveCodeFrontService corpFollowActiveCodeFrontService;
 
+	private final UserService userService;
+
 	/**
 	 * 活动活码落地页 获取对应客服二维码
 	 */
 	@GetMapping("/get/corp/active/qrCode/{id}")
-	public Result<String> getCorpActiveQrCode(@PathVariable Long id) throws Exception {
+	public Result<String> getCorpActiveQrCode(@PathVariable Long id, String dsCode) throws Exception {
 		String qrCode = corpFollowActiveCodeFrontService.getCorpActiveQrCode(id);
+		Long userId = StpUserUtil.getUserIdAfterLogin();
+		if (userId != null && StrUtil.isNotBlank(dsCode)) {
+			//绑定关系
+			userService.bindUserDistributeShared(userId, dsCode);
+		}
 		return GatewayResponse.SUCCESS.newBuilder().toResult(qrCode);
 	}
 }