From 644c00953c108d0ba00e315d9a1a4e391d1c607c Mon Sep 17 00:00:00 2001 From: sangelxiu1 <15781802@163.com> Date: Tue, 2 Sep 2025 13:46:25 +0800 Subject: [PATCH] ## Fix - (368/367/366/365) --- .../com/hzs/third/sms/ISmsServiceApi.java | 12 ++++++ .../controller/api/ApiMemberController.java | 18 ++++++-- .../RetailMemberTokenController.java | 24 ++++++++++- .../ICuMemberRetailAchieveService.java | 3 ++ .../api/ApiRetailOrderController.java | 7 ++++ .../service/impl/RetailOrderServiceImpl.java | 7 ++++ .../core/context/SecurityContextHolder.java | 2 +- .../common/core/enums/EAliSmsTemplate.java | 5 +++ bd-gateway/src/main/resources/bootstrap.yml | 1 + .../sms/provider/SmsServiceProvider.java | 15 +++++++ .../java/com/hzs/third/sms/util/SmsUtil.java | 41 +++++++++++++++++++ 11 files changed, 130 insertions(+), 5 deletions(-) diff --git a/bd-api/bd-api-third/src/main/java/com/hzs/third/sms/ISmsServiceApi.java b/bd-api/bd-api-third/src/main/java/com/hzs/third/sms/ISmsServiceApi.java index b407c772..95032bb9 100644 --- a/bd-api/bd-api-third/src/main/java/com/hzs/third/sms/ISmsServiceApi.java +++ b/bd-api/bd-api-third/src/main/java/com/hzs/third/sms/ISmsServiceApi.java @@ -19,4 +19,16 @@ public interface ISmsServiceApi { */ R sendAliSms(String phone, String code, EAliSmsTemplate aliSmsTemplate); + + /** + * 发送会员注册短信 + * + * @param phone + * @param aliSmsTemplate + * @param memberCode + * @param loginPwd + * @param payPwd + * @return + */ + R sendMemberRegister(String phone, EAliSmsTemplate aliSmsTemplate, String memberCode, String loginPwd, String payPwd); } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/controller/api/ApiMemberController.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/controller/api/ApiMemberController.java index 9bf9cf14..52aba15e 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/controller/api/ApiMemberController.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/controller/api/ApiMemberController.java @@ -4,14 +4,17 @@ import cn.hutool.core.codec.Base64Decoder; import cn.hutool.core.collection.CollectionUtil; import com.hzs.common.core.annotation.RepeatSubmitSimple; import com.hzs.common.core.config.BdConfig; +import com.hzs.common.core.constant.CacheConstants; import com.hzs.common.core.constant.msg.CommonMsgConstants; import com.hzs.common.core.constant.msg.ConfigMsgConstants; import com.hzs.common.core.constant.msg.MemberMsgConstants; import com.hzs.common.core.domain.FileResult; import com.hzs.common.core.domain.R; import com.hzs.common.core.enums.*; +import com.hzs.common.core.service.RedisService; import com.hzs.common.core.utils.DateUtils; import com.hzs.common.core.utils.StringUtils; +import com.hzs.common.core.utils.uuid.IdUtils; import com.hzs.common.core.web.controller.BaseController; import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.core.web.page.TableDataInfo; @@ -38,6 +41,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; import java.util.*; +import java.util.concurrent.TimeUnit; /** * 会员控制器 @@ -54,6 +58,9 @@ public class ApiMemberController extends BaseController { @Autowired private IApiAliSmsService iApiAliSmsService; + @Autowired + private RedisService redisService; + @DubboReference IGradeServiceApi iGradeServiceApi; @@ -404,6 +411,10 @@ public class ApiMemberController extends BaseController { if (null == cuMemberExt) { return AjaxResult.error("注册会员失败,请联系客服处理"); } + // 自动登录 uuid 标记 + String uuid = IdUtils.simpleUUID(); + // 根据会员编号放一个登录 uuid 做为自动登录校验使用(120分钟有效) + redisService.setCacheObject(CacheConstants.AUTO_LOGIN + cuMemberExt.getMemberCode(), uuid, CacheConstants.LOGIN_TOKEN_REFRESH_TIME * 2, TimeUnit.MINUTES); return AjaxResult.success(MemberShare.builder() .memberName(cuMemberExt.getMemberName()) @@ -412,9 +423,10 @@ public class ApiMemberController extends BaseController { .loginPassword(cuMemberExt.getLoginPassword()) .payPassword(cuMemberExt.getPayPassword()) .urlAddress(BdConfig.getPc()) - .gzh(BdConfig.getGzh()) - .ios(BdConfig.getIos()) - .android(BdConfig.getAndroid()) +// .gzh(BdConfig.getGzh()) +// .ios(BdConfig.getIos()) +// .android(BdConfig.getAndroid()) + .uuid(uuid) .build()); } } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/login/controller/RetailMemberTokenController.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/login/controller/RetailMemberTokenController.java index b74f3aca..9432276a 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/login/controller/RetailMemberTokenController.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/login/controller/RetailMemberTokenController.java @@ -66,8 +66,30 @@ public class RetailMemberTokenController { return AjaxResult.success(memberTokenService.createToken(loginMember)); } + + /** - * 新零售会员自动登录 + * 新零售会员自动登录-分享注册后自动登录 + * + * @param param 自助登录参数 + * @return + */ + @PostMapping("/registered-auto-login") + public AjaxResult registeredAutoLogin(@Valid @RequestBody RetailAutoLoginParam param) { + String tmpUuid = redisService.getCacheObject(CacheConstants.AUTO_LOGIN + param.getUsername()); + if (!param.getUuid().equals(tmpUuid)) { + // 没有自动登录标记 或者 标记不对,则不能自动登录 + return AjaxResult.error("当前会员已不能快递登录"); + } + + // 用户登录 + LoginMember loginMember = iRetailMemberLoginService.login(param.getUsername(), param.getPassword()); + // 获取登录token + return AjaxResult.success(memberTokenService.createToken(loginMember)); + } + + /** + * 新零售会员自动登录-分享注册前自动登录 * * @param param 自助登录参数 * @return diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/ICuMemberRetailAchieveService.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/ICuMemberRetailAchieveService.java index e14c104d..b81e10c1 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/ICuMemberRetailAchieveService.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/ICuMemberRetailAchieveService.java @@ -97,4 +97,7 @@ public interface ICuMemberRetailAchieveService extends IService getMarketDynamics(MarketDynamicsQueryDateParam param); + + + } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java index 001f3362..8f59ed42 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java @@ -1,6 +1,7 @@ package com.hzs.retail.sale.controller.api; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.codec.Base64Decoder; import cn.hutool.core.collection.CollectionUtil; import com.hzs.common.core.annotation.RepeatSubmit; import com.hzs.common.core.config.BdConfig; @@ -884,6 +885,12 @@ public class ApiRetailOrderController { } registerParam.setOrderItemsParams(orderItemsParams); CuMemberShare memberShare = memberTokenService.getLoginMember().getCuMemberShare(); + CuMember parentMember = iMemberServiceApi.getMember(memberShare.getPkParent()).getData(); + // 校验手机号必须唯一 + String relationStr = iMemberServiceApi.checkRegisterRelation(registerParam.getPhone(), parentMember.getMemberCode()).getData(); + if (relationStr != null) { + return AjaxResult.error(relationStr); + } registerParam.setCuMemberShare(memberShare); // registerParam.setPkCreator(memberShare.getPkParent()); // 确认订单 diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java index cc89a1b0..0f284d36 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java @@ -52,6 +52,7 @@ import com.hzs.sale.wares.service.IBdWaresRangeService; import com.hzs.system.base.ICurrencyServiceApi; import com.hzs.system.base.dto.CurrencyDTO; import com.hzs.system.config.IGradeServiceApi; +import com.hzs.third.sms.ISmsServiceApi; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -114,6 +115,8 @@ public class RetailOrderServiceImpl implements IRetailOrderService { IMemberServiceApi iMemberServiceApi; @DubboReference IMemberAccountServiceApi iMemberAccountServiceApi; + @DubboReference + ISmsServiceApi iSmsServiceApi; @Override @@ -564,6 +567,10 @@ public class RetailOrderServiceImpl implements IRetailOrderService { } this.pushOrderMq(saOrderExt); + + // 发送会员注册成功短信 + iSmsServiceApi.sendMemberRegister(newMember.getPhone(), EAliSmsTemplate.MEMBER_REGISTER, + newMember.getMemberCode(), newMember.getLoginPassword(), newMember.getPayPassword()); return null; } diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/context/SecurityContextHolder.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/context/SecurityContextHolder.java index 77476c18..3cd48602 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/context/SecurityContextHolder.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/context/SecurityContextHolder.java @@ -91,7 +91,7 @@ public class SecurityContextHolder { } public static Integer getSystemType() { - return Convert.toInt(get(SecurityConstants.SYSTEM_TYPE), null); + return Convert.toInt(get(SecurityConstants.SYSTEM_TYPE), 2); } public static void setSystemType(String systemType) { diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EAliSmsTemplate.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EAliSmsTemplate.java index 03a67ce7..5c01ce9c 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EAliSmsTemplate.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EAliSmsTemplate.java @@ -25,6 +25,11 @@ public enum EAliSmsTemplate { * 2025年6月12日 替换为北大 */ MEMBER_SMS("SMS_485350565"), + + /** + * 会员注册成功(尊敬的会员,您新注册的会员编号:${memberCode},登录密码:${loginPwd},支付密码:${payPwd},请妥善保管) + */ + MEMBER_REGISTER("SMS_491370028"), // MEMBER_SMS("SMS_476795282"), // MEMBER_SMS("SMS_474440238"), diff --git a/bd-gateway/src/main/resources/bootstrap.yml b/bd-gateway/src/main/resources/bootstrap.yml index 95c199fd..ba57ba1f 100644 --- a/bd-gateway/src/main/resources/bootstrap.yml +++ b/bd-gateway/src/main/resources/bootstrap.yml @@ -177,6 +177,7 @@ security: - /member/api/member/fans-order/* - /system/api/idempotent/generate - /member/api/retail-auth/auto-login + - /member/api/retail-auth/registered-auto-login # 日志配置 logging: diff --git a/bd-third/src/main/java/com/hzs/third/sms/provider/SmsServiceProvider.java b/bd-third/src/main/java/com/hzs/third/sms/provider/SmsServiceProvider.java index f5bf997a..ef7c74fd 100644 --- a/bd-third/src/main/java/com/hzs/third/sms/provider/SmsServiceProvider.java +++ b/bd-third/src/main/java/com/hzs/third/sms/provider/SmsServiceProvider.java @@ -29,4 +29,19 @@ public class SmsServiceProvider implements ISmsServiceApi { } } + @Override + public R sendMemberRegister(String phone, EAliSmsTemplate aliSmsTemplate, String memberCode, String loginPwd, String payPwd) { + try { + String str = SmsUtil.sendMemberRegister(phone, aliSmsTemplate, memberCode, loginPwd, payPwd); + if (null == str) { + return R.ok(); + } + log.error("发送会员注册短信失败: {}", str); + return R.fail(str); + } catch (Exception e) { + log.error("发送会员注册短信异常 phone: {}, memberCode: {}", phone, memberCode, e); + return R.fail(e.getMessage()); + } + } + } diff --git a/bd-third/src/main/java/com/hzs/third/sms/util/SmsUtil.java b/bd-third/src/main/java/com/hzs/third/sms/util/SmsUtil.java index dbb19a93..1a307325 100644 --- a/bd-third/src/main/java/com/hzs/third/sms/util/SmsUtil.java +++ b/bd-third/src/main/java/com/hzs/third/sms/util/SmsUtil.java @@ -77,6 +77,47 @@ public class SmsUtil implements InitializingBean { return null; } + public static String sendMemberRegister(String phone, EAliSmsTemplate aliSmsTemplate, String memberCode, String loginPwd, String payPwd) { + if (StringUtils.isAnyEmpty(phone)) { + return "手机号为空"; + } + log.info("注册会员成功,发送手机号:{}, memberCode:{}", phone, memberCode); + if (smsConfig.isEnable()) { + // 只有当开启发送短信才进行发送 + try { + Map templateParam = new HashMap<>(); + templateParam.put("memberCode", memberCode); + templateParam.put("loginPwd", loginPwd); + templateParam.put("payPwd", payPwd); + + Client client = new Client(new Config() + .setAccessKeyId(smsConfig.getAliAccessKeyId()) + .setAccessKeySecret(smsConfig.getAliAccessKeySecret()) + // 短信发送域 + .setEndpoint(smsConfig.getAliEndpoint())); + + SendSmsRequest sendSmsRequest = new SendSmsRequest() + .setPhoneNumbers(phone) + // 短信签名 + .setSignName(smsConfig.getAliSign()) + // 短信模板 + .setTemplateCode(aliSmsTemplate.getCode()) + .setTemplateParam(JSONUtil.toJsonStr(templateParam)); + + SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest); + + if (Constants.SUCCESS.equals(sendSmsResponse.getStatusCode())) { + if ("OK".equals(sendSmsResponse.getBody().getCode())) { + return null; + } + log.error("阿里云短信发送失败: {}", sendSmsResponse.getBody().getMessage()); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } @Override public void afterPropertiesSet() { smsConfig = SpringUtils.getBean(SmsConfig.class);