Selaa lähdekoodia

fix 强制绑定手机号、下单后发送其手机号第一次短信

zoujiajian 2 vuotta sitten
vanhempi
sitoutus
c67972ac18

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

@@ -153,4 +153,6 @@ public interface Constant {
 	 * GPT 平台账号重复
 	 */
 	List<Long> GPT_GOODS_IDS = List.of(18l, 29l, 30l);
+
+	String ORDER_MSG_FIRST_NOTIFY = "%s购买成功,收藏官网https://nf.video/ 合租账号就上银河录像局【银河录像局】";
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserPhoneSendRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserPhoneSendRecord;
+
+/*
+ *项目名: netflix
+ *文件名: UserPhoneSendRecordMapper
+ *创建者: JavaZou
+ *创建时间:2023/9/7 15:12
+ */
+public interface UserPhoneSendRecordMapper extends BaseMapper<UserPhoneSendRecord> {
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserPhoneSendRecord.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: UserPhoneSendRecord
+ *创建者: JavaZou
+ *创建时间:2023/9/7 15:12
+ */
+@Getter
+@Setter
+public class UserPhoneSendRecord extends BaseEntity{
+	private Long orderUserId;
+
+	private String phone;
+}

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

@@ -722,10 +722,10 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                         .in(GroupsRelationExpiryRecord::getReBuyOrderId, orderDon.getId())
                         .eq(GroupsRelationExpiryRecord::getRelationId, orderDon.getRelationId()).last("limit 1"));
                 if (groupsRelationExpiryRecord == null) {
-                    log.info("订单orderId:{}退款,同步是否有重记录不是直接续费车票",orderDon.getId());
+                    log.info("订单orderId:{}退款,同步是否有重记录不是直接续费车票",orderDon.getId());
                     List<GroupsRelationExpiryRecord> groupsRelationExpiryRecords = groupsRelationExpiryRecordService.list(Wrappers.lambdaQuery(GroupsRelationExpiryRecord.class)
                             .in(GroupsRelationExpiryRecord::getReBuyOrderId, orderDon.getId()));
-                    log.info("订单orderId:{}退款,重记录不是直接续费车票大小:{}",groupsRelationExpiryRecords.size());
+                    log.info("订单orderId:{}退款,重记录不是直接续费车票大小:{}",groupsRelationExpiryRecords.size());
                     if (CollUtil.isNotEmpty(groupsRelationExpiryRecords)) {
                         groupsRelationExpiryRecords.forEach(data -> {
                             data.setIsReBuy(false);

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/market/impl/MarketFrontServiceImpl.java

@@ -476,6 +476,9 @@ public class MarketFrontServiceImpl implements MarketFrontService {
 				if (index == -1) {
 					throw BusinessRuntimeException.getInstance("系统异常,请刷新页面重新操作");
 				}
+				if (index > list.size()) {
+					throw BusinessRuntimeException.getInstance("抽奖异常,请联系客服");
+				}
 				LuckyDrawView next = list.get(index);
 				num++;
 				return randomNum(next, list, num, userId);

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

@@ -28,6 +28,7 @@ import com.cyksj.common.snowflake.Sequence;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Codec;
 import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.SmsUtil;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.config.WeChatConfig;
 import com.cyksj.config.zfb.AliPayClientFactory;
@@ -212,6 +213,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final GroupsRelationExpiryRecordService groupsRelationExpiryRecordService;
 
+	private final UserPhoneSendRecordMapper userPhoneSendRecordMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -981,6 +984,40 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		});
 	}
 
+	private void sendOrderPhoneMsg(Long userId) {
+		User user = userMapper.selectById(userId);
+		String phone = null;
+		if (StrUtil.isNotBlank(user.getLoginPhone())) {
+			phone = user.getLoginPhone();
+		} else {
+			//获取对应手机号
+			UserBindDetail userBindDetail = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+					.eq(StrUtil.isNotBlank(user.getOpenId()), UserBindDetail::getUserId, user.getId())
+					.eq(StrUtil.isNotBlank(user.getEmail()), UserBindDetail::getEmailUserId, user.getId()));
+			if (userBindDetail != null && StrUtil.isNotBlank(userBindDetail.getPhone())) {
+				phone = userBindDetail.getPhone();
+			}
+		}
+		if (StrUtil.isNotBlank(phone)) {
+			//是否发送过手机短信
+			UserPhoneSendRecord userPhoneSendRecord = userPhoneSendRecordMapper.selectOne(Wrappers.lambdaQuery(UserPhoneSendRecord.class)
+					.eq(UserPhoneSendRecord::getPhone, phone).last("limit 1"));
+			if (userPhoneSendRecord == null) {
+				try {
+					Boolean is_success = SmsUtil.sendLuoKey2Msg(phone, String.format(Constant.ORDER_MSG_FIRST_NOTIFY, user.getNickname()));
+					if (is_success) {
+						log.info("用户userId:{},购买成功,发送第一次手机号:{}短信官网信息通知", userId, phone);
+						userPhoneSendRecord = new UserPhoneSendRecord();
+						userPhoneSendRecord.setOrderUserId(userId);
+						userPhoneSendRecord.setPhone(phone);
+						userPhoneSendRecordMapper.insert(userPhoneSendRecord);
+					}
+				} catch (Exception e) {
+				}
+			}
+		}
+	}
+
 	public void setRelation(Long relationId, Long groupsId, Long userId, Long goodsId, Boolean isLoginPopularize, GroupsRelation.Status status) {
 		if (isLoginPopularize == null || !isLoginPopularize) {
 			int noPayCount = count(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getUserId, userId).eq(OrderDon::getGoodsId, goodsId).eq(OrderDon::getStatus, OrderDon.Status.noPayment.toString()));
@@ -2144,6 +2181,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		//同步车票是否重购 记录
 		TASK_POOL.execute(() -> {
 			groupsRelationExpiryRecordService.syncGroupsRelationExpiryRecord(orderDon, goodsDon, sku);
+
+			//发送下单后 若有手机 发送短信
+			sendOrderPhoneMsg(orderDon.getUserId());
 		});
 	}
 

+ 2 - 1
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -180,7 +180,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 	    BeanUtil.copyProperties(user, userWhoami);
 
 	    UserBindDetail bindPhone = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
-			    .eq(UserBindDetail::getUserId, userId).last("limit 1"));
+			    .eq(StrUtil.isNotEmpty(user.getOpenId()), UserBindDetail::getUserId, userId)
+			    .eq(StrUtil.isNotEmpty(user.getEmail()), UserBindDetail::getEmailUserId, userId).last("limit 1"));
 	    //手机号
 	    if (bindPhone != null) {
 		    userWhoami.setBindPhone(bindPhone.getPhone());

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

@@ -458,12 +458,15 @@ public class OrderController {
         if (user == null) {
             throw BusinessRuntimeException.getGatewayApiCode(GatewayApiCode.CMS_TOKEN_VALID);
         }
-        if (StrUtil.isEmpty(user.getOpenId())) {
+        //手机号注册 无需绑定
+        if (StrUtil.isNotEmpty(user.getLoginPhone())) {
             return GatewayResponse.SUCCESS.newBuilder().toResult(true);
         }
+        //是否绑定了手机号
         UserBindDetail userBindDetail = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
-                .eq(UserBindDetail::getUserId, userId));
-        if (userBindDetail == null) {
+                .eq(StrUtil.isNotEmpty(user.getPhone()), UserBindDetail::getUserId, userId)
+                .eq(StrUtil.isNotEmpty(user.getEmail()), UserBindDetail::getEmailUserId, userId));
+        if (userBindDetail == null || StrUtil.isEmpty(userBindDetail.getPhone())) {
             return GatewayResponse.SUCCESS.newBuilder().toResult(false);
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult(true);