ソースを参照

无登录订单 预留手机号免登录

zoujiajian 2 年 前
コミット
495a6b1238

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

@@ -209,9 +209,9 @@ public interface Constant {
 	 */
 	String AC_CODE_KEY = "ac_code_key:";
 
-	String AI_RENEW_MSG = "有人续费了 %s %s,请及时处理【银河录像局】";
+	String AI_RENEW_MSG = "用户ID:%s续费了 %s %s 账号为:%s,请及时处理【银河录像局】";
 
-	String PAY_MSG = "有人购买了 %s %s,请及时处理【银河录像局】";
+	String PAY_MSG = "用户ID:%s购买了 %s %s 请及时处理【银河录像局】";
 
 	/**
 	 * 通知手机号

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/mange/account/CmsAccountServiceImpl.java

@@ -240,7 +240,7 @@ public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> i
 					}
 					insert.setGoodsId(goodsId);
 					if (goodsId.equals(31l)) {
-						if (part.length > 9) {
+						if (part.length >= 9) {
 							StringBuilder sb = new StringBuilder();
 							String country = part[part.length - 1];
 							if (country.contains("国")) {

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

@@ -85,6 +85,7 @@ import com.cyksj.service.telegram.TelegramService;
 import com.cyksj.service.template.TemplateCommonService;
 import com.cyksj.service.user.UserBenefitsService;
 import com.cyksj.service.user.UserBindRelationService;
+import com.cyksj.service.user.UserService;
 import com.cyksj.service.wechat.WeChatService;
 import com.cyksj.task.JobManager;
 import com.ejlchina.searcher.BeanSearcher;
@@ -124,6 +125,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final UserMapper userMapper;
 
+	private final UserService userService;
+
 	private final WeChatService weChatService;
 
 	private final RedisService redisService;
@@ -242,6 +245,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final YhShopGoodsSkuMapper yhShopGoodsSkuMapper;
 
+	private final AccountMapper accountMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -287,7 +292,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			couponUser = couponStatusRecord(payRequest.getCouponExCode(), payRequest.getCouponId(), payRequest.getUserId(), couponPopularizeDto);
 		}
 		Boolean isNoLogin = payRequest.getIsNoLogin();
-		User user;
+		User user = null;
 		String payOpenId = null;
 		Long relationId = 0L;
 		Boolean isNeedTicket = checkIsNeedGroupsRelation(goodsDon);
@@ -301,9 +306,17 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		}
 		GroupsRelation relation = null;
+		String orderPhone = payRequest.getPhone();
+		if (StrUtil.isNotBlank(orderPhone)) {
+			user = saveOrGetOrderPhoneUser(payRequest);
+			userId = user.getId();
+			payRequest.setUserId(userId);
+			isNoLogin = false;
+		}
 		if (userId == null) {
 			user = new User();
 			user.setId(0l);
+			isNoLogin = true;
 		} else {
 			user = userMapper.selectById(userId);
 			if (user == null) throw BusinessRuntimeException.getGatewayApiCode(GatewayApiCode.CMS_TOKEN_VALID);
@@ -499,7 +512,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		orderDon.setPayTitle(payTitle.toString());
 		//下单手机号
-		orderDon.setPhone(payRequest.getPhone());
+		orderDon.setPhone(orderPhone);
 		this.saveOrUpdate(orderDon);
 
 		if (orderDon.getIsDp()) {
@@ -975,15 +988,19 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		OrderDetailView detail = beanSearcher.searchFirst(OrderDetailView.class, builder.build());
 		//获取对应车票订单 账号密码
-		RenewalView renewalView = beanSearcher.searchFirst(RenewalView.class, MapUtils.builder()
-				.field(RenewalView::getUserId, userId)
-				.field(RenewalView::getRelationId, detail.getRelationId())
-				.onlySelect(RenewalView::getAccount, RenewalView::getPassword)
-				.build());
-		if (renewalView != null) {
-			detail.setAccount(renewalView.getAccount());
-			detail.setPassword(renewalView.getPassword());
+		if (userId != null) {
+			List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+			RenewalView renewalView = beanSearcher.searchFirst(RenewalView.class, MapUtils.builder()
+					.field(RenewalView::getUserId, userIdList).op(Operator.InList)
+					.field(RenewalView::getRelationId, detail.getRelationId())
+					.onlySelect(RenewalView::getAccount, RenewalView::getPassword)
+					.build());
+			if (renewalView != null) {
+				detail.setAccount(renewalView.getAccount());
+				detail.setPassword(renewalView.getPassword());
+			}
 		}
+
 		if (detail.getRelationId() != 0) {
 			detail.setTransport(transportMapper.selectOne(Wrappers.lambdaQuery(OrderDonTransport.class).eq(OrderDonTransport::getOrderId, detail.getId()).last(" limit 1")));
 			detail.setWaybill(waybillMapper.selectOne(Wrappers.lambdaQuery(OrderDonWaybill.class).eq(OrderDonWaybill::getOrderId, detail.getId()).last(" limit 1")));
@@ -1294,7 +1311,12 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 					//ChatGPT plus 独立和Midjourney 独立有人续费了发短信
 					if (Constant.AI_goodsIds.contains(order.getGoodsId()) && sku.getNum() == 1) {
 						try {
-							String renew_msg = String.format(Constant.AI_RENEW_MSG, goodsDon.getTitle(), sku.getSpecVal());
+							String accountStr = StrUtil.EMPTY;
+							Account account = accountMapper.selectById(groupsTrips.getAccountId());
+							if (account != null) {
+								accountStr = account.getAccount();
+							}
+							String renew_msg = String.format(Constant.AI_RENEW_MSG, order.getUserId(), goodsDon.getTitle(), sku.getSpecVal(), accountStr);
 							SmsUtil.sendLuoKey2Msg(Constant.SERVICE_PHONE, renew_msg);
 						} catch (Exception e) {
 						}
@@ -1303,7 +1325,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				//GPT 代充 发送短信通知
 				if (envCommonService.isPrdEnv() && order.getGoodsId() == 40l) {
 					try {
-						String pay_msg = String.format(Constant.PAY_MSG, goodsDon.getTitle(), sku.getSpecVal());
+						String pay_msg = String.format(Constant.PAY_MSG, order.getUserId(), goodsDon.getTitle(), sku.getSpecVal());
 						SmsUtil.sendLuoKey2Msg(Constant.SERVICE_PHONE, pay_msg);
 					} catch (Exception e) {
 					}
@@ -2541,4 +2563,27 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		return sku;
 	}
+
+	public User saveOrGetOrderPhoneUser(OrderPayRequest payRequest) {
+		String orderPhone = payRequest.getPhone();
+		User user = userMapper.selectOne(Wrappers.lambdaQuery(User.class)
+				.eq(User::getLoginPhone, orderPhone).last("limit 1"));
+		if (user == null) {
+			user = new User();
+			StringBuilder name = new StringBuilder();
+			name.append(Constant.DEFAULT_NAME);
+			user.setPopularizeId(payRequest.getPopularizeId());
+			user.setLoginPhone(orderPhone);
+			user.setNickname(String.format("%s%s", name.toString(), RandomUtil.randomString(6)));
+			//默认头像
+			user.setHeadimgurl(Constant.DEFAULT_HEAD_IMG);
+			String registerEnv = null;
+			user.setRegisterEnv(StrUtil.isEmpty(registerEnv) ? User.RegisterEnv.pc.name() : registerEnv);
+			userMapper.insert(user);
+			if (StrUtil.isEmpty(user.getShowId())) {
+				user.setShowId(userService.getUserShowId(user.getId()));
+			}
+		}
+		return user;
+	}
 }

+ 28 - 3
netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderController.java

@@ -1,8 +1,10 @@
 package com.cyksj.web.controller.payment;
 
+import cn.hutool.core.codec.Base64;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
+import cn.hutool.json.JSONObject;
 import com.alipay.api.response.AlipayFundTransCommonQueryResponse;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
@@ -56,6 +58,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
@@ -124,13 +127,35 @@ public class OrderController {
      * @date 2021-10-11 下午4:56
      */
     @PostMapping("/post/submit")
-    public Result<OrderDon> submit(@Validated @RequestBody OrderPayRequest payRequest) throws Exception {
+    public Result<OrderDon> submit(@Validated @RequestBody OrderPayRequest payRequest, HttpServletResponse response) throws Exception {
         final String methodName = "吊起微信支付";
-        payRequest.setUserId(StpUserUtil.getUserIdAfterLogin());
-        log.info("{}[start] params:{}",methodName,payRequest);
+        Long userId = StpUserUtil.getUserIdAfterLogin();
+        payRequest.setUserId(userId);
+        log.info("{}[start] params:{}", methodName, payRequest);
 
         OrderDon orderDon = orderDonService.submit(payRequest);
 
+        //无登录订单 预留手机号免登录
+        if (userId == null && payRequest.getPopularizeId() != null && StrUtil.isNotBlank(payRequest.getPhone())) {
+            User user = userMapper.selectById(orderDon.getUserId());
+            //写回登陆信息
+            StpUserUtil.login(user.getId());
+            response.addHeader("satoken-user", StpUserUtil.getTokenValue());
+
+            Cookie cookie = new Cookie("satoken-user", StpUserUtil.getTokenValue());
+            cookie.setMaxAge(31536000);
+            cookie.setPath("/");
+            response.addCookie(cookie);
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.putOpt("showId", user.getShowId());
+            jsonObject.putOpt("nickName", user.getNickname());
+
+            Cookie userInfo = new Cookie("info", Base64.encode(jsonObject.toString()));
+            cookie.setMaxAge(31536000);
+            cookie.setPath("/");
+            response.addCookie(userInfo);
+        }
+
         return GatewayResponse.SUCCESS.newBuilder().toResult(orderDon);
     }