## 会员端发送短信恢复;

This commit is contained in:
cabbage 2025-05-09 10:32:34 +08:00
parent 198e9333fa
commit 46919717af
46 changed files with 651 additions and 1815 deletions

View File

@ -6,18 +6,9 @@ import com.hzs.third.sms.dto.SmsServiceDTO;
/**
* 短信服务接口
* @author hzs
*/
public interface ISmsServiceApi {
/**
* 发送
*
* @param param
* @return
*/
R<String> send(SmsServiceDTO param);
/**
* 阿里发送
*

View File

@ -19,7 +19,7 @@ import com.hzs.member.account.service.ICuMemberAuthenticationService;
import com.hzs.member.account.service.ICuMemberBaseService;
import com.hzs.member.account.vo.CuMemberAuthenticationVO;
import com.hzs.member.base.service.ICuMemberService;
import com.hzs.member.sms.service.impl.ApiSmsServiceImpl;
import com.hzs.member.sms.service.IApiAliSmsService;
import com.hzs.third.idcard.IdCardServiceApi;
import com.hzs.third.idcard.dto.IdCardOcrDTO;
import org.apache.dubbo.config.annotation.DubboReference;
@ -32,18 +32,15 @@ import java.time.format.DateTimeFormatter;
/**
* 实名认证 前端控制器
*
* @author hzs
* @since 2023-04-17
*/
@RestController
@RequestMapping("/api/authentication")
public class ApiCuMemberAuthenticationController extends BaseController {
@Autowired
private ApiSmsServiceImpl apiSmsService;
private IApiAliSmsService iApiAliSmsService;
@Autowired
private ICuMemberAuthenticationService authenticationService;
private ICuMemberAuthenticationService iCuMemberAuthenticationService;
@Autowired
private ICuMemberBaseService iCuMemberBaseService;
@Autowired
@ -52,7 +49,6 @@ public class ApiCuMemberAuthenticationController extends BaseController {
@DubboReference
IdCardServiceApi idCardServiceApi;
/**
* 调用身份证OCR接口
*
@ -119,16 +115,15 @@ public class ApiCuMemberAuthenticationController extends BaseController {
Integer pkCountry = SecurityUtils.getPkCountry();
//查询是否已实名
CuMemberAuthenticationVO queryAuthenticationVO = authenticationService.selectCuMemberAuthenticationByPkMember(CuMemberAuthenticationVO.builder().pkMember(pkMember).pkCountry(pkCountry).build());
CuMemberAuthenticationVO queryAuthenticationVO = iCuMemberAuthenticationService.selectCuMemberAuthenticationByPkMember(CuMemberAuthenticationVO.builder().pkMember(pkMember).pkCountry(pkCountry).build());
if (null != queryAuthenticationVO) {
return AjaxResult.error(FinanceMsgConstants.MEMBER_REAL_NAME);
}
// TODO new 先不需要短信校验
// String verificationCode = authenticationVO.getVerificationCode();
// if (StringUtils.isEmpty(verificationCode)) {
// return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.VERIFICATION_CODE_CANNOT_EMPTY));
// }
String verificationCode = authenticationVO.getVerificationCode();
if (StringUtils.isEmpty(verificationCode)) {
return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.VERIFICATION_CODE_CANNOT_EMPTY));
}
//真实姓名
String accountName = authenticationVO.getAccountName();
if (StringUtils.isEmpty(accountName)) {
@ -161,16 +156,14 @@ public class ApiCuMemberAuthenticationController extends BaseController {
return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.ID_BACK_CANNOT_EMPTY));
}
// TODO new 先不需要短信校验
// String key = ESmsTemplate.VERIFICATION.getCache() + pkMember;
// String message = apiSmsService.checkSms(key, verificationCode);
// if (null != message) {
// return AjaxResult.error(message);
// }
String message = iApiAliSmsService.checkCode(null, verificationCode, null, pkMember);
if (null != message) {
return AjaxResult.error(message);
}
authenticationVO.setPkCountry(pkCountry);
authenticationVO.setPkMember(pkMember);
return toAjax(authenticationService.saveAuthentication(authenticationVO));
return toAjax(iCuMemberAuthenticationService.saveAuthentication(authenticationVO));
}
@ -193,7 +186,7 @@ public class ApiCuMemberAuthenticationController extends BaseController {
//配置后才进行验证
if (null != bdTradeConfig) {
//查询是否已实名认证
CuMemberAuthenticationVO authenticationVO = authenticationService.selectCuMemberAuthenticationByPkMember(CuMemberAuthenticationVO.builder().pkMember(pkMember).pkCountry(pkCountry).build());
CuMemberAuthenticationVO authenticationVO = iCuMemberAuthenticationService.selectCuMemberAuthenticationByPkMember(CuMemberAuthenticationVO.builder().pkMember(pkMember).pkCountry(pkCountry).build());
flag = null == authenticationVO ? EYesNo.NO.getValue() : EYesNo.YES.getValue();
}
}
@ -210,7 +203,7 @@ public class ApiCuMemberAuthenticationController extends BaseController {
public AjaxResult showDetail() {
Long pkMember = SecurityUtils.getUserId();
Integer pkCountry = SecurityUtils.getPkCountry();
CuMemberAuthenticationVO authenticationVO = authenticationService.selectCuMemberAuthenticationByPkMember(CuMemberAuthenticationVO.builder().pkMember(pkMember).pkCountry(pkCountry).build());
CuMemberAuthenticationVO authenticationVO = iCuMemberAuthenticationService.selectCuMemberAuthenticationByPkMember(CuMemberAuthenticationVO.builder().pkMember(pkMember).pkCountry(pkCountry).build());
return AjaxResult.success(authenticationVO);
}
@ -263,11 +256,11 @@ public class ApiCuMemberAuthenticationController extends BaseController {
Long pkMember = SecurityUtils.getUserId();
Integer pkCountry = SecurityUtils.getPkCountry();
//查询是否已实名
CuMemberAuthenticationVO queryAuthenticationVO = authenticationService.selectCuMemberAuthenticationByPkMember(CuMemberAuthenticationVO.builder().pkMember(pkMember).pkCountry(pkCountry).build());
CuMemberAuthenticationVO queryAuthenticationVO = iCuMemberAuthenticationService.selectCuMemberAuthenticationByPkMember(CuMemberAuthenticationVO.builder().pkMember(pkMember).pkCountry(pkCountry).build());
if (null == queryAuthenticationVO) {
return AjaxResult.error(FinanceMsgConstants.MEMBER_NOT_REAL_NAME);
}
return toAjax(authenticationService.memberRenewalContract(pkMember));
return toAjax(iCuMemberAuthenticationService.memberRenewalContract(pkMember));
}

View File

@ -6,7 +6,6 @@ import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.constant.msg.FinanceMsgConstants;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EBusinessModule;
import com.hzs.common.core.enums.ESmsTemplate;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.controller.BaseController;
@ -20,7 +19,7 @@ import com.hzs.member.account.service.ICuMemberBankService;
import com.hzs.member.account.service.ICuMemberBaseService;
import com.hzs.member.account.service.ICuMemberWithdrawService;
import com.hzs.member.account.vo.CuMemberBankVO;
import com.hzs.member.sms.service.impl.ApiSmsServiceImpl;
import com.hzs.member.sms.service.IApiAliSmsService;
import com.hzs.third.bankcard.IBankCardServiceApi;
import com.hzs.third.bankcard.dto.BankCardParam;
import org.apache.dubbo.config.annotation.DubboReference;
@ -38,16 +37,16 @@ import java.util.List;
public class ApiCuMemberBankController extends BaseController {
@Autowired
private ICuMemberBankService cuMemberBankService;
private ICuMemberBankService iCuMemberBankService;
@Autowired
private ApiSmsServiceImpl apiSmsService;
private IApiAliSmsService iApiAliSmsService;
@Autowired
private ICuMemberBaseService iCuMemberBaseService;
@Autowired
private ICuMemberWithdrawService cuMemberWithdrawService;
private ICuMemberWithdrawService iCuMemberWithdrawService;
@DubboReference
IBankCardServiceApi bankCardServiceApi;
IBankCardServiceApi iBankCardServiceApi;
/**
* 是否绑定银行卡
@ -58,7 +57,7 @@ public class ApiCuMemberBankController extends BaseController {
public AjaxResult isBindBank() {
Long pkMember = SecurityUtils.getUserId();
Integer pkCountry = SecurityUtils.getPkCountry();
CuMemberBankVO cuMemberBank = cuMemberBankService.isBindBank(pkMember, pkCountry);
CuMemberBankVO cuMemberBank = iCuMemberBankService.isBindBank(pkMember, pkCountry);
String flag = null == cuMemberBank.getDefaultCard() ? EYesNo.NO.getValue() : EYesNo.YES.getValue();
return AjaxResult.success().put("flag", flag);
}
@ -74,15 +73,15 @@ public class ApiCuMemberBankController extends BaseController {
Integer pkCountry = SecurityUtils.getPkCountry();
Long pkMember = SecurityUtils.getUserId();
//查询默认银行卡
CuMemberBankVO cuMemberBankVO = cuMemberBankService.selectCuMemberBankById(pkId);
CuMemberBankVO cuMemberBankVO = iCuMemberBankService.selectCuMemberBankById(pkId);
//解绑默认银行卡需校验是否有进行的提现
if (null != cuMemberBankVO) {
List<Long> pkIds = cuMemberWithdrawService.selectWithdrawMember(pkCountry, pkMember);
List<Long> pkIds = iCuMemberWithdrawService.selectWithdrawMember(pkCountry, pkMember);
if (CollUtil.isNotEmpty(pkIds)) {
return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.WITHDRAWAL_APPROVAL));
}
}
return AjaxResult.success(cuMemberBankService.unbindBank(pkId, pkMember));
return AjaxResult.success(iCuMemberBankService.unbindBank(pkId, pkMember));
}
/**
@ -110,7 +109,7 @@ public class ApiCuMemberBankController extends BaseController {
BankCardParam bankCard = BankCardParam.builder().name(memberBankParam.getAccountName())
.idCard(memberBankParam.getIdCard()).mobile(memberBankParam.getPhone())
.bankCard(StringUtils.deleteWhitespace(memberBankParam.getCardNumber())).build();
R<?> result = bankCardServiceApi.verifyBankCard(bankCard);
R<?> result = iBankCardServiceApi.verifyBankCard(bankCard);
return result.isSuccess() ? AjaxResult.success() : AjaxResult.error(result.getMsg());
}
@ -127,45 +126,44 @@ public class ApiCuMemberBankController extends BaseController {
Long pkMember = SecurityUtils.getUserId();
//是否配置提现白名单
String configWhite = getConfigWhite(pkCountry, pkMember);
//海外不校验验证码四要素 国内配置了提现白名单不校验
// 海外不校验验证码四要素 国内配置了提现白名单不校验
if (pkCountry.equals(CountryConstants.CHINA_COUNTRY) && configWhite.equals(EYesNo.NO.getValue())) {
// TODO new 先不需要校验短信
// String verificationCode = cuMemberBankParam.getVerificationCode();
// if (StringUtils.isEmpty(verificationCode)) {
// return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.VERIFICATION_CODE_CANNOT_EMPTY));
// }
String verificationCode = cuMemberBankParam.getVerificationCode();
if (StringUtils.isEmpty(verificationCode)) {
return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.VERIFICATION_CODE_CANNOT_EMPTY));
}
//支行名称
String subBankName = cuMemberBankParam.getSubBankName();
if (StringUtils.isEmpty(subBankName)) {
return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.OPENING_BRANCH_CANNOT_EMPTY));
}
// TODO new 先不需要校验短信
// String Key = ESmsTemplate.VERIFICATION.getCache() + pkMember;
// String message = apiSmsService.checkSms(Key, verificationCode);
// if (null != message) {
// return AjaxResult.error(message);
// }
// 校验短信验证码
String message = iApiAliSmsService.checkCode(null, verificationCode, null, pkMember);
if (null != message) {
return AjaxResult.error(message);
}
//银行卡号去空格
String cardNumber = cuMemberBankParam.getCardNumber();
cuMemberBankParam.setCardNumber(StringUtils.deleteWhitespace(cardNumber));
}
cuMemberBankParam.setPkCountry(pkCountry);
cuMemberBankParam.setPkMember(pkMember);
return toAjax(cuMemberBankService.saveMemberBank(cuMemberBankParam));
return toAjax(iCuMemberBankService.saveMemberBank(cuMemberBankParam));
}
@GetMapping("/list")
public AjaxResult getBankCardList() {
Long pkMember = SecurityUtils.getUserId();
Integer pkCountry = SecurityUtils.getPkCountry();
return AjaxResult.success(cuMemberBankService.selectBankCardByPkMember(pkMember, pkCountry));
return AjaxResult.success(iCuMemberBankService.selectBankCardByPkMember(pkMember, pkCountry));
}
@GetMapping("/default-bank")
public AjaxResult getDefaultBankCard() {
Long pkMember = SecurityUtils.getUserId();
Integer pkCountry = SecurityUtils.getPkCountry();
return AjaxResult.success(cuMemberBankService.isBindBank(pkMember, pkCountry));
return AjaxResult.success(iCuMemberBankService.isBindBank(pkMember, pkCountry));
}
/**
@ -179,15 +177,15 @@ public class ApiCuMemberBankController extends BaseController {
Long pkMember = SecurityUtils.getUserId();
Integer pkCountry = SecurityUtils.getPkCountry();
//查询银行卡
CuMemberBank cuMemberBank = cuMemberBankService.getById(pkId);
CuMemberBank cuMemberBank = iCuMemberBankService.getById(pkId);
//解绑默认银行卡需校验是否有进行的提现
if (null != cuMemberBank) {
List<Long> pkIds = cuMemberWithdrawService.selectWithdrawMember(pkCountry, pkMember);
List<Long> pkIds = iCuMemberWithdrawService.selectWithdrawMember(pkCountry, pkMember);
if (CollUtil.isNotEmpty(pkIds)) {
return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.WITHDRAWAL_APPROVAL));
}
}
return toAjax(cuMemberBankService.updateDefault(pkId, pkMember, pkCountry));
return toAjax(iCuMemberBankService.updateDefault(pkId, pkMember, pkCountry));
}
/**

View File

@ -13,12 +13,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 会员交易明细 服务类
* </p>
*
* @author hzs
* @since 2022-09-06
*/
public interface ICuMemberTradeService extends IService<CuMemberTrade> {
@ -99,7 +94,8 @@ public interface ICuMemberTradeService extends IService<CuMemberTrade> {
* @param: [mbbList]
* @return: java.util.List<com.hzs.member.account.dto.MemberBalanceDTO>
**/
List<MemberBusinessBalanceDTO> selectBusinessBalanceNotEnoughMember(List<MemberBusinessBalanceDTO> mbbList,Integer pkCountry);
List<MemberBusinessBalanceDTO> selectBusinessBalanceNotEnoughMember(List<MemberBusinessBalanceDTO> mbbList, Integer pkCountry);
/**
* @description: 特殊业务业务办理专用查询会员余额
* @author: zhang jing
@ -107,9 +103,7 @@ public interface ICuMemberTradeService extends IService<CuMemberTrade> {
* @param: [mbbList, pkCountry]
* @return: java.util.List<com.hzs.member.account.dto.MemberBusinessBalanceDTO>
**/
List<MemberBusinessBalanceDTO> selectSpecialBusinessBalanceNotEnoughMember(List<MemberBusinessBalanceDTO> mbbList,Integer pkCountry);
List<MemberBusinessBalanceDTO> selectSpecialBusinessBalanceNotEnoughMember(List<MemberBusinessBalanceDTO> mbbList, Integer pkCountry);
/**

View File

@ -3,14 +3,11 @@ package com.hzs.member.base.controller.api;
import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.hzs.common.core.annotation.RepeatSubmit;
import com.hzs.common.core.annotation.RepeatSubmitSimple;
import com.hzs.common.core.config.BdConfig;
import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import com.hzs.common.core.constant.SysConstants;
import com.hzs.common.core.constant.msg.ConfigMsgConstants;
import com.hzs.common.core.constant.msg.FinanceMsgConstants;
import com.hzs.common.core.constant.msg.MemberMsgConstants;
import com.hzs.common.core.domain.FileResult;
import com.hzs.common.core.domain.R;
@ -37,10 +34,9 @@ import com.hzs.common.core.utils.UploadFileUtil;
import com.hzs.member.base.vo.*;
import com.hzs.member.detail.service.ICuMemberChangeLogService;
import com.hzs.member.param.MemberParam;
import com.hzs.member.sms.service.IApiSmsService;
import com.hzs.member.sms.service.IApiAliSmsService;
import com.hzs.system.base.ICountryServiceApi;
import com.hzs.system.base.ICurrencyServiceApi;
import com.hzs.system.base.ISystemConfigServiceApi;
import com.hzs.system.base.dto.CountryDTO;
import com.hzs.system.base.dto.CurrencyDTO;
import com.hzs.system.config.IAgreementRenewalWhiteServiceApi;
@ -57,11 +53,7 @@ import java.math.BigDecimal;
import java.util.*;
/**
* @Description: 会员控制器
* @Author: jiang chao
* @Time: 2023/1/10 15:18
* @Classname: ApiMemberController
* @PackageName: com.hzs.member.base.controller.api
* 会员控制器
*/
@Slf4j
@RequestMapping("/api/member")
@ -75,9 +67,9 @@ public class ApiMemberController extends BaseController {
@Autowired
private ICuMemberService iCuMemberService;
@Autowired
private ICuMemberChangeLogService memberChangeLogService;
private ICuMemberChangeLogService iCuMemberChangeLogService;
@Autowired
private IApiSmsService iApiSmsService;
private IApiAliSmsService iApiAliSmsService;
@DubboReference
IGradeServiceApi iGradeServiceApi;
@ -88,8 +80,6 @@ public class ApiMemberController extends BaseController {
@DubboReference
ICurrencyServiceApi iCurrencyServiceApi;
@DubboReference
ISystemConfigServiceApi iSystemConfigServiceApi;
@DubboReference
IAgreementRenewalWhiteServiceApi iAgreementRenewalWhiteServiceApi;
/**
@ -269,52 +259,52 @@ public class ApiMemberController extends BaseController {
return AjaxResult.error();
}
/**
* 更新邮箱
*
* @param param
* @return
*/
@PutMapping("/update-email")
public AjaxResult updateEmail(@RequestBody MemberDataParam param) {
if (StringUtils.isEmpty(param.getEmail())) {
// 缺少参数
return AjaxResult.error("缺少参数");
}
if (StringUtils.isEmpty(param.getCode())) {
// 验证码不能为空
return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.VERIFICATION_CODE_CANNOT_EMPTY));
}
Long memberId = SecurityUtils.getUserId();
CuMember member = iCuMemberService.getMemberById(memberId);
if (null == member) {
// 会员不存在
return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.MEMBER_NOT_EXITS));
}
// 短信校验码校验
String checkStr = iApiSmsService.checkSms(ESmsTemplate.VERIFICATION.getCache() + memberId, param.getCode());
if (null != checkStr) {
return AjaxResult.error(checkStr);
}
// 会员修改信息
CuMember cuMember = new CuMember();
cuMember.setPkId(memberId);
cuMember.setEmail(param.getEmail());
cuMember.setPkModified(memberId);
cuMember.setModifiedTime(new Date());
// 会员修改记录信息
CuMemberChangeLog cuMemberChangeLog = CuMemberChangeLog.builder()
.pkMember(memberId)
.changeType(EMemberChangeType.EMAIL.getValue())
.changeFront(member.getEmail())
.changeAfter(param.getEmail())
.build();
iMemberInfoService.updateMemberInfo(cuMember, Collections.singletonList(cuMemberChangeLog));
return AjaxResult.success();
}
// /**
// * 更新邮箱
// *
// * @param param
// * @return
// */
// @PutMapping("/update-email")
// public AjaxResult updateEmail(@RequestBody MemberDataParam param) {
// if (StringUtils.isEmpty(param.getEmail())) {
// // 缺少参数
// return AjaxResult.error("缺少参数");
// }
// if (StringUtils.isEmpty(param.getCode())) {
// // 验证码不能为空
// return AjaxResult.error(TransactionUtils.getContent(FinanceMsgConstants.VERIFICATION_CODE_CANNOT_EMPTY));
// }
//
// Long memberId = SecurityUtils.getUserId();
// CuMember member = iCuMemberService.getMemberById(memberId);
// if (null == member) {
// // 会员不存在
// return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.MEMBER_NOT_EXITS));
// }
//
// // 短信校验码校验
// String checkStr = iApiSmsService.checkSms(ESmsTemplate.VERIFICATION.getCache() + memberId, param.getCode());
// if (null != checkStr) {
// return AjaxResult.error(checkStr);
// }
//
// // 会员修改信息
// CuMember cuMember = new CuMember();
// cuMember.setPkId(memberId);
// cuMember.setEmail(param.getEmail());
// cuMember.setPkModified(memberId);
// cuMember.setModifiedTime(new Date());
// // 会员修改记录信息
// CuMemberChangeLog cuMemberChangeLog = CuMemberChangeLog.builder()
// .pkMember(memberId)
// .changeType(EMemberChangeType.EMAIL.getValue())
// .changeFront(member.getEmail())
// .changeAfter(param.getEmail())
// .build();
// iMemberInfoService.updateMemberInfo(cuMember, Collections.singletonList(cuMemberChangeLog));
// return AjaxResult.success();
// }
/**
* 忘记密码更新
@ -336,7 +326,7 @@ public class ApiMemberController extends BaseController {
Long memberId = cuMemberExt.getPkId();
// 短信校验码校验
String checkStr = iApiSmsService.checkSms(ESmsTemplate.FORGET_PASSWORD.getCache() + memberId, param.getCode());
String checkStr = iApiAliSmsService.checkRecoverCode(cuMemberExt.getPhone(), param.getCode(), cuMemberExt.getPkId());
if (null != checkStr) {
return AjaxResult.error(checkStr);
}
@ -380,7 +370,7 @@ public class ApiMemberController extends BaseController {
Long memberId = cuMemberExt.getPkId();
// 短信校验码校验
String checkStr = iApiSmsService.checkSms(ESmsTemplate.VERIFICATION.getCache() + memberId, param.getCode());
String checkStr = iApiAliSmsService.checkPayPasswordCode(cuMemberExt.getPhone(), param.getCode(), memberId);
if (null != checkStr) {
return AjaxResult.error(checkStr);
}
@ -401,92 +391,91 @@ public class ApiMemberController extends BaseController {
.build();
iMemberInfoService.updateMemberInfo(cuMember, Collections.singletonList(cuMemberChangeLog));
return AjaxResult.success();
}
/**
* @param memberParam 订单参数
* @Description: 确认注册订单生成待支付订单,只有注册订单有待支付订单
* @return: AjaxResult
* @Author: sui q
* @Date: 2022/8/27 16:47
*/
@RepeatSubmit
@PostMapping("/reg-share-member")
public AjaxResult confirmRegisterOrder(@RequestBody MemberParam memberParam) {
if (EEnv.TEST.getValue().equals(BdConfig.getEnv())) {
if (new Date().getTime() >= SysConstants.CLOSE_ZERO_DATE_TEST) {
return AjaxResult.error("二维码已停用,请联系相应亲友协助办理注册");
}
} else {
if (new Date().getTime() >= SysConstants.CLOSE_ZERO_DATE_ONLINE) {
return AjaxResult.error("二维码已停用,请联系相应亲友协助办理注册");
}
}
// 验证必输项
if (validateFieldNotNull(memberParam, memberParam.getValidConfirmField())) {
return AjaxResult.error(MemberMsgConstants.REQUIRED_NOT_EMPTY);
}
// 验证CN后是否全部数字
String memberCode = memberParam.getMemberCode();
AjaxResult memberCodeResult = validateMemberCode(memberCode);
if (memberCodeResult != null) {
return memberCodeResult;
}
// 上级编码推荐人
Long pkParent = Long.parseLong(new String(Base64Decoder.decode(memberParam.getParent())));
memberParam.setPkParent(pkParent);
// 验证推荐人
CuMember cuMember = iCuMemberService.getMember(memberParam.getPkParent());
if (cuMember == null) {
return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.PARENT_NOT_EXISTS));
}
// 验证一个手机号可以注册多少次
// 验证手机号注册次数
List<CuMemberExt> cuMemberExtList = iCuMemberService.getMemberInfoByCondition(CuMember.builder().phone(memberParam.getPhone()).pkSettleGrade(EGrade.START_UP.getValue()).pkSettleCountry(cuMember.getPkSettleCountry()).build());
// 系统中存在该手机号走的验证
if (cuMemberExtList.size() > 0) {
// 手机号注册次数
String value = iSystemConfigServiceApi.getBonusSystemConfig(cuMember.getPkSettleCountry(), ESystemConfig.HA_FUN_REGISTER_NUMBER.getKey()).getData();
if (cuMemberExtList.size() >= Integer.parseInt(value)) {
// 手机注册次数已达系统上限
return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.SYSTEM_REGISTER_COUNT));
}
}
memberParam.setMemberCode(SysConstants.HAI_FUN_PREFIX + memberParam.getMemberCode());
if (StringUtils.isNotEmpty(memberParam.getMemberCode())) {
CuMember existCuMember = iCuMemberService.getMemberByCode(memberParam.getMemberCode());
// 验证该编号是否存在会员系统中
if (existCuMember != null) {
return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.EMPTY_MEMBER_REPEAT_1));
}
}
// 短信校验码校验
String checkStr = iApiSmsService.checkSms(ESmsTemplate.VERIFICATION.getCache() + memberParam.getPhone(), memberParam.getCode());
if (null != checkStr) {
return AjaxResult.error(checkStr);
}
CuMember newCuMember = iCuMemberService.confirmShareMemberByMemberParam(memberParam);
if (newCuMember != null) {
MemberShare memberShare = MemberShare.builder().memberCode(newCuMember.getMemberCode())
.memberName(newCuMember.getMemberName())
.phone(newCuMember.getPhone())
.loginPassword(newCuMember.getLoginPassword())
.payPassword(newCuMember.getPayPassword())
.urlAddress(BdConfig.getPc())
.gzh(BdConfig.getGzh())
.ios(BdConfig.getIos())
.android(BdConfig.getAndroid())
.build();
return AjaxResult.success(memberShare);
} else {
return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.TOKEN_REPEAT_SUBMIT));
}
}
// /**
// * @param memberParam 订单参数
// * @Description: 确认注册订单生成待支付订单,只有注册订单有待支付订单
// * @return: AjaxResult
// * @Author: sui q
// * @Date: 2022/8/27 16:47
// */
// @RepeatSubmit
// @PostMapping("/reg-share-member")
// public AjaxResult confirmRegisterOrder(@RequestBody MemberParam memberParam) {
// if (EEnv.TEST.getValue().equals(BdConfig.getEnv())) {
// if (new Date().getTime() >= SysConstants.CLOSE_ZERO_DATE_TEST) {
// return AjaxResult.error("二维码已停用,请联系相应亲友协助办理注册");
// }
// } else {
// if (new Date().getTime() >= SysConstants.CLOSE_ZERO_DATE_ONLINE) {
// return AjaxResult.error("二维码已停用,请联系相应亲友协助办理注册");
// }
// }
//
// // 验证必输项
// if (validateFieldNotNull(memberParam, memberParam.getValidConfirmField())) {
// return AjaxResult.error(MemberMsgConstants.REQUIRED_NOT_EMPTY);
// }
// // 验证CN后是否全部数字
// String memberCode = memberParam.getMemberCode();
// AjaxResult memberCodeResult = validateMemberCode(memberCode);
// if (memberCodeResult != null) {
// return memberCodeResult;
// }
// // 上级编码推荐人
// Long pkParent = Long.parseLong(new String(Base64Decoder.decode(memberParam.getParent())));
// memberParam.setPkParent(pkParent);
// // 验证推荐人
// CuMember cuMember = iCuMemberService.getMember(memberParam.getPkParent());
// if (cuMember == null) {
// return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.PARENT_NOT_EXISTS));
// }
//
// // 验证一个手机号可以注册多少次
// // 验证手机号注册次数
// List<CuMemberExt> cuMemberExtList = iCuMemberService.getMemberInfoByCondition(CuMember.builder().phone(memberParam.getPhone()).pkSettleGrade(EGrade.START_UP.getValue()).pkSettleCountry(cuMember.getPkSettleCountry()).build());
// // 系统中存在该手机号走的验证
// if (cuMemberExtList.size() > 0) {
// // 手机号注册次数
// String value = iSystemConfigServiceApi.getBonusSystemConfig(cuMember.getPkSettleCountry(), ESystemConfig.HA_FUN_REGISTER_NUMBER.getKey()).getData();
// if (cuMemberExtList.size() >= Integer.parseInt(value)) {
// // 手机注册次数已达系统上限
// return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.SYSTEM_REGISTER_COUNT));
// }
// }
// memberParam.setMemberCode(SysConstants.HAI_FUN_PREFIX + memberParam.getMemberCode());
// if (StringUtils.isNotEmpty(memberParam.getMemberCode())) {
// CuMember existCuMember = iCuMemberService.getMemberByCode(memberParam.getMemberCode());
// // 验证该编号是否存在会员系统中
// if (existCuMember != null) {
// return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.EMPTY_MEMBER_REPEAT_1));
// }
// }
//
// // 短信校验码校验
// String checkStr = iApiSmsService.checkSms(ESmsTemplate.VERIFICATION.getCache() + memberParam.getPhone(), memberParam.getCode());
// if (null != checkStr) {
// return AjaxResult.error(checkStr);
// }
// CuMember newCuMember = iCuMemberService.confirmShareMemberByMemberParam(memberParam);
// if (newCuMember != null) {
// MemberShare memberShare = MemberShare.builder().memberCode(newCuMember.getMemberCode())
// .memberName(newCuMember.getMemberName())
// .phone(newCuMember.getPhone())
// .loginPassword(newCuMember.getLoginPassword())
// .payPassword(newCuMember.getPayPassword())
// .urlAddress(BdConfig.getPc())
// .gzh(BdConfig.getGzh())
// .ios(BdConfig.getIos())
// .android(BdConfig.getAndroid())
// .build();
// return AjaxResult.success(memberShare);
// } else {
// return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.TOKEN_REPEAT_SUBMIT));
// }
// }
private AjaxResult validateMemberCode(String memberCode) {
boolean result = memberCode.matches("[0-9]+");
@ -616,10 +605,7 @@ public class ApiMemberController extends BaseController {
}
/*
* @description: 验证是否连续数字
* @author: sui q
* @date: 2023/7/4 16:48
* @param: null null
* 验证是否连续数字
**/
private Boolean compareConDigits(String memberCode) {
String[] codeList = memberCode.split("");
@ -762,7 +748,7 @@ public class ApiMemberController extends BaseController {
LambdaUpdateWrapper<CuMemberChangeLog> qw = new LambdaUpdateWrapper<>();
qw.eq(CuMemberChangeLog::getPkMember, memberId);
qw.eq(CuMemberChangeLog::getChangeType, EMemberChangeType.LOGIN_PWD.getValue());
int count = memberChangeLogService.count(qw);
int count = iCuMemberChangeLogService.count(qw);
return AjaxResult.success(count);
}

View File

@ -1,19 +1,16 @@
package com.hzs.member.self.controller.api;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.common.core.annotation.RepeatSubmit;
import com.hzs.common.core.annotation.RepeatSubmitSimple;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.msg.ConfigMsgConstants;
import com.hzs.common.core.constant.msg.FinanceMsgConstants;
import com.hzs.common.core.enums.EApprovalBusiness;
import com.hzs.common.core.enums.ESmsTemplate;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.member.self.CuSelfServiceLog;
import com.hzs.common.security.service.MemberTokenService;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.common.util.TransactionUtils;
import com.hzs.member.account.dto.BusinessCommissionDTO;
@ -25,12 +22,9 @@ import com.hzs.member.account.vo.CuMemberAuthenticationVO;
import com.hzs.member.base.service.ICuMemberService;
import com.hzs.member.self.service.ICuSelfServiceLogService;
import com.hzs.member.self.vo.DomicileChangeVO;
import com.hzs.member.sms.service.impl.ApiSmsServiceImpl;
import com.hzs.member.sms.service.IApiAliSmsService;
import com.hzs.system.config.IServiceChargeServiceApi;
import com.hzs.system.config.dto.ServiceChargeDTO;
import com.hzs.system.sys.IApprovalServiceApi;
import com.hzs.system.sys.dto.ApprovalInfoDTO;
import com.hzs.system.sys.dto.ApprovalItemInfoDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
@ -38,48 +32,29 @@ import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 变理户籍
*
* @Description:
* @Author: ljc
* @Time: 2023/4/18 10:07
* @Classname: ApiDomicileChangeController
* @Package_name: com.hzs.member.self.controller.api
*/
@Slf4j
@RequestMapping("/api/change-domicile")
@RestController
public class ApiDomicileChangeController extends BaseController {
@Autowired
private ICuMemberAuthenticationService cuMemberAuthenticationService;
@Autowired
private ICuMemberService cuMemberService;
private ICuMemberAuthenticationService iCuMemberAuthenticationService;
@Autowired
ApiSmsServiceImpl apiSmsService;
private ICuMemberService iCuMemberService;
@Autowired
private ICuMemberTradeService cuMemberTradeService;
private ICuMemberTradeService iCuMemberTradeService;
@Autowired
private ICuSelfServiceLogService serviceLogService;
private ICuSelfServiceLogService iCuSelfServiceLogService;
@Autowired
private MemberTokenService memberTokenService;
private IApiAliSmsService iApiAliSmsService;
@DubboReference
private IServiceChargeServiceApi serviceChargeServiceApi;
@DubboReference
private IApprovalServiceApi iApprovalServiceApi;
IServiceChargeServiceApi iServiceChargeServiceApi;
/**
* 查询可申请信息
@ -89,7 +64,7 @@ public class ApiDomicileChangeController extends BaseController {
@GetMapping("/application-info-list")
public AjaxResult applicationInformation() {
Long pkMember = SecurityUtils.getUserId();
CuMemberExt member = cuMemberService.getMemberById(pkMember);
CuMemberExt member = iCuMemberService.getMemberById(pkMember);
DomicileChangeVO domicileChangeVO = DomicileChangeVO.builder().memberCode(member.getMemberCode())
.memberName(member.getMemberName()).phone(member.getPhone())
.changeNum(MagicNumberConstants.CHANGE_NUM).build();
@ -99,7 +74,7 @@ public class ApiDomicileChangeController extends BaseController {
@GetMapping("/application-info-detail")
public AjaxResult applicationInformationDetail() {
return AjaxResult.success(serviceLogService.selectDomicileChangeByPkMember(SecurityUtils.getUserId(), EApprovalBusiness.DOMICILE_CHANGE.getValue(), SecurityUtils.getPkCountry()));
return AjaxResult.success(iCuSelfServiceLogService.selectDomicileChangeByPkMember(SecurityUtils.getUserId(), EApprovalBusiness.DOMICILE_CHANGE.getValue(), SecurityUtils.getPkCountry()));
}
/**
@ -111,11 +86,10 @@ public class ApiDomicileChangeController extends BaseController {
public AjaxResult appliedInformation() {
DomicileChangeVO domicileChangeVO = DomicileChangeVO.builder().pkMember(SecurityUtils.getUserId())
.pkCountry(SecurityUtils.getPkCountry()).editType(EApprovalBusiness.DOMICILE_CHANGE.getValue()).build();
List<DomicileChangeVO> domicileChangeVOList = (List<DomicileChangeVO>) serviceLogService.selectSelfServiceByPkMember(domicileChangeVO)[1];
List<DomicileChangeVO> domicileChangeVOList = (List<DomicileChangeVO>) iCuSelfServiceLogService.selectSelfServiceByPkMember(domicileChangeVO)[1];
return AjaxResult.success(domicileChangeVOList);
}
/**
* 自助服务是否显示户籍认证
*
@ -123,11 +97,9 @@ public class ApiDomicileChangeController extends BaseController {
*/
@GetMapping("/show-index-domicile")
public AjaxResult showIndexDomicile() {
return AjaxResult.success(serviceLogService.showIndexDomicile(SecurityUtils.getPkCountry(),SecurityUtils.getUserId()));
return AjaxResult.success(iCuSelfServiceLogService.showIndexDomicile(SecurityUtils.getPkCountry(), SecurityUtils.getUserId()));
}
/**
* 申请户籍变更
*
@ -170,12 +142,11 @@ public class ApiDomicileChangeController extends BaseController {
return accountBalance;
}
//验证码校验
String Key = ESmsTemplate.VERIFICATION.getCache() + pkMember;
String message = apiSmsService.checkSms(Key, domicileChangeVO.getVerificationCode());
String message = iApiAliSmsService.checkCode(null, domicileChangeVO.getVerificationCode(), null, pkMember);
if (null != message) {
return AjaxResult.error(message);
}
return toAjax(serviceLogService.saveChangeDomicile(domicileChangeVO));
return toAjax(iCuSelfServiceLogService.saveChangeDomicile(domicileChangeVO));
}
@ -190,10 +161,10 @@ public class ApiDomicileChangeController extends BaseController {
String idFront = null;
Long pkMember = SecurityUtils.getUserId();
Integer pkCountry = SecurityUtils.getPkCountry();
CuMemberExt member = cuMemberService.getMemberById(pkMember);
CuMemberExt member = iCuMemberService.getMemberById(pkMember);
//查询实名认证信息原证件图
CuMemberAuthenticationVO authenticationVO = CuMemberAuthenticationVO.builder().pkCountry(pkCountry).pkMember(pkMember).build();
CuMemberAuthenticationVO cuMemberAuthenticationVO = cuMemberAuthenticationService.selectCuMemberAuthenticationByPkMember(authenticationVO);
CuMemberAuthenticationVO cuMemberAuthenticationVO = iCuMemberAuthenticationService.selectCuMemberAuthenticationByPkMember(authenticationVO);
if (null != cuMemberAuthenticationVO) {
idBack = cuMemberAuthenticationVO.getIdBack();
idFront = cuMemberAuthenticationVO.getIdFront();
@ -217,7 +188,7 @@ public class ApiDomicileChangeController extends BaseController {
cuSelfServiceLog.setPkCountry(domicileChangeVO.getPkCountry());
cuSelfServiceLog.setEditType(EApprovalBusiness.DOMICILE_CHANGE.getValue());
cuSelfServiceLog.setPkMember(domicileChangeVO.getPkMember());
Integer check = serviceLogService.checkSelfService(cuSelfServiceLog);
Integer check = iCuSelfServiceLogService.checkSelfService(cuSelfServiceLog);
if (check > 0) {
return AjaxResult.error(TransactionUtils.getContent(ConfigMsgConstants.MEMBER_UPDATE_CODE_REPEAT));
}
@ -236,7 +207,7 @@ public class ApiDomicileChangeController extends BaseController {
serviceChargeDTO.setType(EApprovalBusiness.DOMICILE_CHANGE.getValue());
serviceChargeDTO.setPkCountry(pkCountry);
serviceChargeDTO.setQuantity(MagicNumberConstants.CHANGE_NUM);
return serviceChargeServiceApi.getServiceChargeByType(serviceChargeDTO).getData();
return iServiceChargeServiceApi.getServiceChargeByType(serviceChargeDTO).getData();
}
/**
@ -249,30 +220,11 @@ public class ApiDomicileChangeController extends BaseController {
List<MemberAmountDTO> memberAmountDTOList = new ArrayList<>();
memberAmountDTOList.add(MemberAmountDTO.builder().pkMember(domicileChangeVO.getPkMember()).tradeAmount(domicileChangeVO.getAmount()).build());
BusinessCommissionDTO businessCommissionDTO = BusinessCommissionDTO.builder().pkAccount(domicileChangeVO.getPkAccount()).memberAmountDTOList(memberAmountDTOList).build();
List<MemberBalanceDTO> memberBalanceList = cuMemberTradeService.selectBalanceNotEnoughMember(businessCommissionDTO);
List<MemberBalanceDTO> memberBalanceList = iCuMemberTradeService.selectBalanceNotEnoughMember(businessCommissionDTO);
if (CollectionUtil.isNotEmpty(memberBalanceList)) {
return AjaxResult.error(TransactionUtils.getContent(ConfigMsgConstants.MEMBER_BALANCE_INSUFFICIENT));
}
return AjaxResult.success();
}
/**
* 是否配置审批人信息
*
* @param pkCountry 国家ID
* @return AjaxResult
*/
private AjaxResult isConfigApprovalInfo(Integer pkCountry, DomicileChangeVO domicileChangeVO) {
Map<Integer, ApprovalInfoDTO> approvalInfoMap = iApprovalServiceApi.queryApprovalInfo(Collections.singletonList(EApprovalBusiness.DOMICILE_CHANGE.getValue()), pkCountry).getData();
// 根据审批业务类型判断是否配置审批流程
ApprovalInfoDTO approvalInfo = approvalInfoMap.get(EApprovalBusiness.DOMICILE_CHANGE.getValue());
if (null == approvalInfo || CollectionUtil.isEmpty(approvalInfo.getItemList())) {
log.error("{} 提交认证失败,未配置审批流程", EApprovalBusiness.DOMICILE_CHANGE.getLabel());
return AjaxResult.error("提交认证失败,请联系客服");
}
List<Long> userList = approvalInfo.getItemList().stream().map(ApprovalItemInfoDTO::getPkUser).collect(Collectors.toList());
domicileChangeVO.setUserIdList(userList);
return AjaxResult.success();
}
}

View File

@ -1,17 +1,15 @@
package com.hzs.member.sms.controller.api;
import com.hzs.common.core.annotation.RepeatSubmitSimple;
import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.constant.msg.ConfigMsgConstants;
import com.hzs.common.core.constant.msg.MemberMsgConstants;
import com.hzs.common.core.enums.ESmsTemplate;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.common.util.TransactionUtils;
import com.hzs.member.base.service.ICuMemberService;
import com.hzs.member.sms.service.IApiSmsService;
import com.hzs.member.sms.service.IApiAliSmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@ -19,31 +17,47 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description: 短信处理控制器
* @Author: jiang chao
* @Time: 2023/3/8 15:54
* @Classname: SmsController
* @PackageName: com.hzs.member.sms.controller
* 短信处理控制器
*/
@RequestMapping("/api/sms")
@RestController
public class ApiSmsController extends BaseController {
@Autowired
private IApiSmsService iApiSmsService;
private IApiAliSmsService iApiAliSmsService;
@Autowired
private ICuMemberService iCuMemberService;
/**
* 验证码
* 登录用户发送短信
*
* @param phone 手机号码
* @return
*/
@RepeatSubmitSimple
@GetMapping("/verification")
public AjaxResult verification(@RequestParam(required = false) String phone) {
return toAjax(iApiSmsService.verificationSms(SecurityUtils.getUserId(), SecurityUtils.getPkCountry(), phone));
@GetMapping("/self-verification")
public AjaxResult selfVerification() {
CuMemberExt cuMemberExt = iCuMemberService.getMemberById(SecurityUtils.getUserId());
if (null == cuMemberExt) {
// 会员不存在
return AjaxResult.error(TransactionUtils.getContent(ConfigMsgConstants.MEMBER_NOT_EXIST));
}
return toAjax(iApiAliSmsService.sendCode(cuMemberExt.getPhone(), null, null, SecurityUtils.getUserId()));
}
/**
* 重置支付密码
*
* @return
*/
@RepeatSubmitSimple
@GetMapping("/reset-verification")
public AjaxResult resetVerification() {
CuMemberExt cuMemberExt = iCuMemberService.getMemberById(SecurityUtils.getUserId());
if (null == cuMemberExt) {
// 会员不存在
return AjaxResult.error(TransactionUtils.getContent(ConfigMsgConstants.MEMBER_NOT_EXIST));
}
return toAjax(iApiAliSmsService.resetPayPasswordCode(cuMemberExt.getPhone(), SecurityUtils.getUserId()));
}
/**
@ -66,35 +80,8 @@ public class ApiSmsController extends BaseController {
// 会员不存在或者手机号不相同
return AjaxResult.error(TransactionUtils.getContent(MemberMsgConstants.MEMBER_INFO_ERROR));
}
return toAjax(iApiSmsService.verificationSms(cuMember.getPkId(), cuMember.getPkSettleCountry(), phone, ESmsTemplate.FORGET_PASSWORD));
return toAjax(iApiAliSmsService.sendRecoverCode(phone, cuMember.getPkId()));
}
/**
* 注册验证码 -- 不登录
*
* @param phone 手机号码
* @return
*/
@RepeatSubmitSimple
@GetMapping("/fans-verification")
public AjaxResult fansVerification(@RequestParam String phone) {
// 前端取不到结算国此处写死为中国
return toAjax(iApiSmsService.verificationSmsByPhone(CountryConstants.CHINA_COUNTRY, phone));
}
/**
* 登录用户发送短信
*
* @return
*/
@GetMapping("/self-verification")
public AjaxResult selfVerification() {
CuMemberExt cuMemberExt = iCuMemberService.getMemberById(SecurityUtils.getUserId());
if (null == cuMemberExt) {
// 会员不存在
return AjaxResult.error(TransactionUtils.getContent(ConfigMsgConstants.MEMBER_NOT_EXIST));
}
return toAjax(iApiSmsService.verificationSms(SecurityUtils.getUserId(), SecurityUtils.getPkCountry(), cuMemberExt.getPhone()));
}
}

View File

@ -0,0 +1,100 @@
package com.hzs.member.sms.service;
/**
* 阿里短信发送服务
*/
public interface IApiAliSmsService {
/**
* 短信验证码
*
* @param phone 手机号码
* @param checkKey 验证码KEY -- 为空使用默认
* @param sendTimKey 验证码重复发送间隔KEY -- 为空使用默认
* @param pkMember 会员ID -- 如果有值优先缓存使用
* @return
*/
String sendCode(String phone, String checkKey, String sendTimKey, Long pkMember);
/**
* 校验短信验证码
*
* @param phone 手机号码 -- 会员ID有值手机号码可以为空
* @param smsCode 短信验证码
* @param checkKey 验证码KEY -- 为空使用默认
* @param pkMember 会员ID -- 如果有值优先缓存使用
* @return
*/
String checkCode(String phone, String smsCode, String checkKey, Long pkMember);
// /**
// * 登录发送验证码
// *
// * @param phone 手机号码
// * @return
// */
// String sendLoginCode(String phone);
//
// /**
// * 校验登录验证码
// *
// * @param phone 手机号码
// * @param smsCode 短信验证码
// * @return
// */
// String checkLoginCode(String phone, String smsCode);
// /**
// * 注册发送验证码
// *
// * @param phone 手机号码
// * @return
// */
// String sendRegisterCode(String phone);
//
// /**
// * 校验注册验证码
// *
// * @param phone 手机号码
// * @param smsCode 短信验证码
// * @return
// */
// String checkRegisterCode(String phone, String smsCode);
/**
* 找回密码发送验证码
*
* @param phone 手机号码
* @param pkMember 会员ID
* @return
*/
String sendRecoverCode(String phone, Long pkMember);
/**
* 校验找回密码验证码
*
* @param phone 手机号码
* @param smsCode 短信验证码
* @param pkMember 会员ID
* @return
*/
String checkRecoverCode(String phone, String smsCode, Long pkMember);
/**
* 重置支付密码发送验证码
*
* @param phone 手机号码
* @return
*/
String resetPayPasswordCode(String phone, Long pkMember);
/**
* 校验重置支付密码验证码
*
* @param phone 手机号码
* @param smsCode 短信验证码
* @return
*/
String checkPayPasswordCode(String phone, String smsCode, Long pkMember);
}

View File

@ -1,63 +0,0 @@
package com.hzs.member.sms.service;
import com.hzs.common.core.enums.ESmsTemplate;
/**
* @Description: 短信处理服务
* @Author: jiang chao
* @Time: 2023/3/8 15:55
* @Classname: ISmsService
* @PackageName: com.hzs.member.sms.service
*/
public interface IApiSmsService {
/**
* 校验验证码
*
* @param cacheKey 验证码缓存key
* @param code 验证码
* @return 如果返回null为正确其它为错误内容
*/
String checkSms(String cacheKey, String code);
/**
* 根据会员发送验证码
*
* @param pkMember 会员ID
* @param pkCountry 国家ID
* @param phone 手机号
* @return boolean
*/
boolean verificationSms(Long pkMember, Integer pkCountry, String phone);
/**
* 根据会员发送指定模板
*
* @param pkMember 会员ID
* @param pkCountry 国家ID
* @param phone 手机号
* @param eSmsTemplate 短信模板
* @return
*/
boolean verificationSms(Long pkMember, Integer pkCountry, String phone, ESmsTemplate eSmsTemplate);
/**
* 根据手机号发送验证码
*
* @param pkCountry 国家ID
* @param phone 手机号
* @return
*/
boolean verificationSmsByPhone(Integer pkCountry, String phone);
/**
* 根据手机号发送指定模板
*
* @param pkCountry 国家ID
* @param phone 手机号
* @param eSmsTemplate 短信模板
* @return
*/
boolean verificationSmsByPhone(Integer pkCountry, String phone, ESmsTemplate eSmsTemplate);
}

View File

@ -0,0 +1,170 @@
package com.hzs.member.sms.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.hzs.common.core.config.BdConfig;
import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EAliSmsTemplate;
import com.hzs.common.core.enums.EEnv;
import com.hzs.common.core.service.RedisService;
import com.hzs.common.core.utils.VerificationCodeUtil;
import com.hzs.member.sms.service.IApiAliSmsService;
import com.hzs.third.sms.ISmsServiceApi;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* 阿里短信发送服务
*/
@Slf4j
@Service
public class ApiAliSmsServiceImpl implements IApiAliSmsService {
@Autowired
private RedisService redisService;
@DubboReference
ISmsServiceApi iSmsServiceApi;
@Override
public String sendCode(String phone, String checkKey, String sendTimKey, Long pkMember) {
// 每个手机号每天只能获取20次短信验证码
String smsCountKey = String.format(CacheConstants.SMS_COUNT, DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN));
Object smsCountObj = redisService.getCacheMapValue(smsCountKey, phone);
if (smsCountObj != null) {
if (Integer.parseInt(smsCountObj.toString()) > 20) {
return "当前手机号码获取短信已达当日上限";
}
}
if (null == checkKey) {
// 如果为空使用默认发送短信key
checkKey = CacheConstants.DEFAULT_CHECK;
}
if (null == sendTimKey) {
// 如果为空使用默认发送短信key间隔时间
sendTimKey = CacheConstants.DEFAULT_SEND_TIME;
}
if (redisService.hasKey(sendTimKey + phone)) {
return "获取验证码过于频繁,请稍后再试";
}
// 生成4位验证码
String code = VerificationCodeUtil.createCode();
log.info("发送短信验证码phone: {}, code: {}", phone, code);
R<String> sendResult = iSmsServiceApi.sendAliSms(phone, code, EAliSmsTemplate.MEMBER_SMS);
if (sendResult.isSuccess()) {
// 返回成功验证码放入缓存
// 验证码缓存有效期10分钟
redisService.setCacheObject(checkKey + (null != pkMember ? pkMember : phone), code, 10L, TimeUnit.MINUTES);
// 验证码发送间隔不能低于1分钟
redisService.setCacheObject(sendTimKey + phone, "", 1L, TimeUnit.MINUTES);
if (smsCountObj == null) {
redisService.setCacheMapValue(smsCountKey, phone, 1);
redisService.expire(smsCountKey, 1, TimeUnit.DAYS);
} else {
redisService.setCacheMapValue(smsCountKey, phone, Integer.parseInt(smsCountObj.toString()) + 1);
}
return null;
}
log.error("发送短信失败:{}", sendResult.getMsg());
return "获取验证码失败,请稍候重试";
}
@Override
public String checkCode(String phone, String smsCode, String checkKey, Long pkMember) {
if (EEnv.TEST.getValue().equals(BdConfig.getEnv()) && "ASDF".equals(smsCode)) {
// 测试环境暂时不发放短信
return null;
}
if (null == checkKey) {
// 如果为空使用默认发送短信key
checkKey = CacheConstants.DEFAULT_CHECK;
}
String cacheSmsCode = redisService.getCacheObject(checkKey + (null != pkMember ? pkMember : phone));
if (null == cacheSmsCode) {
return "验证码已失效";
}
if (!cacheSmsCode.equals(smsCode)) {
// TODO 验证码错误需不需要清除缓存验证码会不会存在暴力破解情况
return "验证码错误";
}
// 校验通过删除验证码缓存
redisService.deleteObject(checkKey + (null != pkMember ? pkMember : phone));
return null;
}
// @Override
// public String sendLoginCode(String phone) {
// return this.sendCode(phone, CacheConstants.LOGIN_CHECK, CacheConstants.LOGIN_SEND_TIME);
// }
//
// @Override
// public String checkLoginCode(String phone, String smsCode) {
// String str = this.checkCode(phone, smsCode, CacheConstants.LOGIN_CHECK);
// if (null == str) {
// // 删除验证码间隔时间缓存
// redisService.deleteObject(CacheConstants.LOGIN_SEND_TIME + phone);
// }
// return str;
// }
// @Override
// public String sendRegisterCode(String phone) {
// return this.sendCode(phone, CacheConstants.REGISTER_CHECK, CacheConstants.REGISTER_SEND_TIME);
// }
//
// @Override
// public String checkRegisterCode(String phone, String smsCode) {
// String str = this.checkCode(phone, smsCode, CacheConstants.REGISTER_CHECK);
// if (null == str) {
// // 删除验证码间隔时间缓存
// redisService.deleteObject(CacheConstants.REGISTER_SEND_TIME + phone);
// }
// return str;
// }
@Override
public String sendRecoverCode(String phone, Long pkMember) {
return this.sendCode(phone, CacheConstants.RECOVER_CHECK, CacheConstants.RECOVER_SEND_TIME, pkMember);
}
@Override
public String checkRecoverCode(String phone, String smsCode, Long pkMember) {
String str = this.checkCode(phone, smsCode, CacheConstants.RECOVER_CHECK, pkMember);
if (null == str) {
// 删除验证码间隔时间缓存
redisService.deleteObject(CacheConstants.RECOVER_SEND_TIME + phone);
}
return str;
}
@Override
public String resetPayPasswordCode(String phone, Long pkMember) {
return this.sendCode(phone, CacheConstants.RESET_CHECK, CacheConstants.RESET_SEND_TIME, pkMember);
}
@Override
public String checkPayPasswordCode(String phone, String smsCode, Long pkMember) {
String str = this.checkCode(phone, smsCode, CacheConstants.RESET_CHECK, pkMember);
if (null == str) {
// 删除验证码间隔时间缓存
redisService.deleteObject(CacheConstants.RESET_SEND_TIME + phone);
}
return str;
}
}

View File

@ -1,124 +0,0 @@
package com.hzs.member.sms.service.impl;
import com.hzs.common.core.constant.SmsConstants;
import com.hzs.common.core.constant.msg.SystemMsgConstants;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.ESmsTemplate;
import com.hzs.common.core.exception.ServiceException;
import com.hzs.common.core.service.RedisService;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.utils.VerificationCodeUtil;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.util.TransactionUtils;
import com.hzs.member.base.service.ICuMemberService;
import com.hzs.member.sms.service.IApiSmsService;
import com.hzs.third.sms.ISmsServiceApi;
import com.hzs.third.sms.dto.SmsServiceDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
/**
* @Description: 短信处理服务
* @Author: jiang chao
* @Time: 2023/3/8 15:56
* @Classname: ApiSmsServiceImpjl
* @PackageName: com.hzs.member.sms.service.impl
*/
@Slf4j
@Service
public class ApiSmsServiceImpl implements IApiSmsService {
@Autowired
private ICuMemberService iCuMemberService;
@Autowired
private RedisService redisService;
@DubboReference
ISmsServiceApi iSmsServiceApi;
@Override
public String checkSms(String cacheKey, String code) {
Object codeObj = redisService.getCacheObject(cacheKey);
if (null != codeObj) {
if (codeObj.toString().equals(code)) {
// 校验正确之后删除缓存
redisService.deleteObject(cacheKey);
return null;
} else {
// 验证码错误
return TransactionUtils.getContent(SystemMsgConstants.CODE_ERROR);
}
}
// 验证码已失效
return TransactionUtils.getContent(SystemMsgConstants.CODE_EXPIRE);
}
@Override
public boolean verificationSms(Long pkMember, Integer pkCountry, String phone) {
return this.verificationSms(pkMember, pkCountry, phone, ESmsTemplate.VERIFICATION);
}
@Override
public boolean verificationSms(Long pkMember, Integer pkCountry, String phone, ESmsTemplate eSmsTemplate) {
if (StringUtils.isEmpty(phone)) {
// 查询用户获取手机号
CuMember cuMember = iCuMemberService.getMember(pkMember);
phone = cuMember.getPhone();
}
// 生成4位验证码
String code = VerificationCodeUtil.createCode();
// 发送短信
R<String> sendR = iSmsServiceApi.send(SmsServiceDTO.builder()
.templateCode(eSmsTemplate.getCode())
.pkMember(pkMember)
.phone(phone)
.paramList(Collections.singletonList(code))
.userId(pkMember)
.pkCountry(pkCountry)
.saveFlag(false)
.build());
if (sendR.isSuccess()) {
// 返回成功验证码放入缓存
redisService.setCacheObject(eSmsTemplate.getCache() + pkMember, code, SmsConstants.FAILURE_TIME, TimeUnit.MINUTES);
return true;
} else {
log.error("发送短信失败:{}", sendR.getMsg());
throw new ServiceException(sendR.getMsg());
}
}
@Override
public boolean verificationSmsByPhone(Integer pkCountry, String phone) {
return this.verificationSmsByPhone(pkCountry, phone, ESmsTemplate.VERIFICATION);
}
@Override
public boolean verificationSmsByPhone(Integer pkCountry, String phone, ESmsTemplate eSmsTemplate) {
// 生成4位验证码
String code = VerificationCodeUtil.createCode();
// 发送短信
R<String> sendR = iSmsServiceApi.send(SmsServiceDTO.builder()
.templateCode(eSmsTemplate.getCode())
.phone(phone)
.paramList(Collections.singletonList(code))
.pkCountry(pkCountry)
.saveFlag(false)
.build());
if (sendR.isSuccess()) {
// 返回成功验证码放入缓存
redisService.setCacheObject(eSmsTemplate.getCache() + phone, code, SmsConstants.FAILURE_TIME, TimeUnit.MINUTES);
return true;
}
log.error("发送短信失败:{}", sendR.getMsg());
return false;
}
}

View File

@ -69,8 +69,8 @@ public class CuBonusStatisController extends BaseController {
cuBonusStatisVO.setPkCountry(pkCountry);
// 默认查询当前日期的前一天
Date date = DateUtils.currentDate();
if (StringUtils.isEmpty(cuBonusStatisVO.getStartDate()) ||
StringUtils.isEmpty(cuBonusStatisVO.getEndDate())) {
if (StringUtils.isEmpty(cuBonusStatisVO.getStartDate())
|| StringUtils.isEmpty(cuBonusStatisVO.getEndDate())) {
cuBonusStatisVO.setStartDate(DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, date));
cuBonusStatisVO.setEndDate(DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, date));
}
@ -145,8 +145,8 @@ public class CuBonusStatisController extends BaseController {
itm.setMainBonusPvRate(itm.getMainBonusPvRate().divide(itm.getFirstPurchaseAll(), 4, RoundingMode.HALF_UP));
}
// 重新算总拨比
if (itm.getFirstPurchaseAll().compareTo(BigDecimal.ZERO) > 0 ||
itm.getRepurchaseAllAmount().compareTo(BigDecimal.ZERO) > 0) {
if (itm.getFirstPurchaseAll().compareTo(BigDecimal.ZERO) > 0
|| itm.getRepurchaseAllAmount().compareTo(BigDecimal.ZERO) > 0) {
BigDecimal totalBonusRate = cent.multiply((itm.getTotalBonus()).multiply(currency.getData().getInExchangeRate()));
totalBonusRate = totalBonusRate.divide(itm.getFirstPurchaseAll().add(itm.getRepurchaseAllAmount()), 4, RoundingMode.HALF_UP);
itm.setTotalBonusRate(totalBonusRate);

View File

@ -719,8 +719,6 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
* @param saOrderExt 订单
* @param newCuMember 新会员信息
* @param cuMemberAccountExt 支付账户信息
* @Author: sui q
* @Date: 2022/9/13 13:37
*/
@Transactional(rollbackFor = Exception.class)
@Override
@ -797,7 +795,6 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
}
try {
sendMessage(newCuMember);
log.info("生产活动消息activity.exchange{}", JSONUtil.toJsonStr(saOrderExt));
rabbitTemplate.convertAndSend(RabbitMqConstants.ACTIVITY_EXCHANGE, RabbitMqConstants.ACTIVITY_KEY, saOrderExt);
// //计算奖金通过mq分发消息异步处理
@ -818,28 +815,6 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
return Boolean.TRUE;
}
/**
* @param newCuMember 会员编号
* @Description: 发送短信
* @return: void
* @Author: sui q
* @Date: 2023/3/9 14:28
*/
private void sendMessage(CuMember newCuMember) {
List<String> paramList = new ArrayList<>();
paramList.add(newCuMember.getMemberName());
paramList.add(newCuMember.getMemberCode());
SmsServiceDTO smsServiceDTO = SmsServiceDTO.builder().templateCode(ESmsTemplate.REGISTER_SUCCESS.getCode())
.pkCountry(newCuMember.getPkSettleCountry())
.phone(newCuMember.getPhone())
.pkMember(newCuMember.getPkId())
.userId(newCuMember.getPkId())
.paramList(paramList)
// .saveFlag(Boolean.FALSE)
.build();
iSmsServiceApi.send(smsServiceDTO);
}
/**
* @param newCuMember 修改的会员
* @Description: 尝试重新换位置

View File

@ -4,82 +4,46 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.system.base.BdCubasdoc;
import com.hzs.common.domain.system.base.ext.BdCubasdocExt;
import com.hzs.system.base.param.BdCubasdocParam;
import com.hzs.system.base.vo.BdCubasdocVO;
import java.util.List;
/**
* <p>
* 供应商设置 服务类
* </p>
*
* @author hzs
* @since 2023-11-20
*/
public interface IBdCubasdocService extends IService<BdCubasdoc> {
/*
* @description: 根据条件查询供应商
* @author: sui q
* @date: 2023/11/20 16:47
* @param: null null
**/
List<BdCubasdocExt> querySupplierByCondition(BdCubasdocParam cubasdocParam);
/*
* @description: 根据条件查询供应商(业务领用专用)
* @author: zhang jing
* @date: 2024/5/7 14:15
* @param: [cubasdocParam]
* @return: java.util.List<com.hzs.common.domain.system.base.ext.BdCubasdocExt>
**/
List<BdCubasdocExt> querySupplierByProduct(BdCubasdocParam cubasdocParam);
/*
* @description: 根据条件查询客户
* @author: sui q
* @date: 2023/11/29 13:42
* @param: null null
**/
List<BdCubasdocExt> queryCustomerByCondition(BdCubasdocParam cubasdocParam);
/*
* @description: 根据条件查询客商
* @author: sui q
* @date: 2023/11/20 10:57
* @param: null null
**/
List<BdCubasdocExt> queryCubasdocByCondition(BdCubasdocParam cubasdocParam);
/*
* @description: 保存供应商
* @author: sui q
* @date: 2023/11/20 10:58
* @param: null null
**/
void saveCubasdoc(BdCubasdocParam cubasdocParam, Long pkMember);
/*
* @description: 删除客商
* @author: sui q
* @date: 2023/11/20 13:43
* @param: null null
**/
void deleteCuBasdoc(Integer pkId, Long pkMember);
/*
* @description: 获得供应商
* @author: sui q
* @date: 2023/11/20 16:38
* @param: null null
**/
BdCubasdoc getBdCubasdocById(Integer pkId);
/**
* @description: 查询登录管理员是否为供应商
* @author: zhang jing
* @date: 2024/5/6 11:12
* @param: [userId]
* @return: java.lang.Integer
**/
Integer queryThSupplierApplyUserList(Long userId);
}

View File

@ -1,43 +1,28 @@
package com.hzs.system.base.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.SystemFieldConstants;
import com.hzs.common.core.enums.ECustomerType;
import com.hzs.common.core.enums.ESupplierType;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.core.service.RedisService;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.system.base.BdCubasdoc;
import com.hzs.common.domain.system.base.ext.BdCubasdocExt;
import com.hzs.system.base.mapper.BdCubasdocMapper;
import com.hzs.system.base.param.BdCubasdocParam;
import com.hzs.system.base.service.IBdCubasdocService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 供应商设置 服务实现类
* </p>
*
* @author hzs
* @since 2023-11-20
*/
@Service
public class BdCubasdocServiceImpl extends ServiceImpl<BdCubasdocMapper, BdCubasdoc> implements IBdCubasdocService {
@Autowired
private RedisService redisService;
@Override
public List<BdCubasdocExt> querySupplierByCondition(BdCubasdocParam cubasdocParam) {
List<Integer> custTypeList = new ArrayList<>();
@ -47,13 +32,6 @@ public class BdCubasdocServiceImpl extends ServiceImpl<BdCubasdocMapper, BdCubas
return queryCubasdocByCondition(cubasdocParam);
}
/**
* @description: 根据条件查询供应商(业务领用专用)
* @author: zhang jing
* @date: 2024/5/7 14:15
* @param: [cubasdocParam]
* @return: java.util.List<com.hzs.common.domain.system.base.ext.BdCubasdocExt>
**/
@Override
public List<BdCubasdocExt> querySupplierByProduct(BdCubasdocParam cubasdocParam) {
List<Integer> custTypeList = new ArrayList<>();
@ -63,7 +41,6 @@ public class BdCubasdocServiceImpl extends ServiceImpl<BdCubasdocMapper, BdCubas
return baseMapper.querySupplierByProduct(cubasdocParam);
}
@Override
public List<BdCubasdocExt> queryCustomerByCondition(BdCubasdocParam cubasdocParam) {
List<Integer> custTypeList = new ArrayList<>();
@ -88,13 +65,13 @@ public class BdCubasdocServiceImpl extends ServiceImpl<BdCubasdocMapper, BdCubas
@Override
public void saveCubasdoc(BdCubasdocParam cubasdocParam, Long pkMember) {
if(cubasdocParam.getPkId() == null){
if (cubasdocParam.getPkId() == null) {
BdCubasdoc bdCubasdoc = BeanUtil.copyProperties(cubasdocParam, BdCubasdoc.class);
// 供应商编号自动生成
if(cubasdocParam.getCustCode() == null){
if(cubasdocParam.getCustType() == 1 || cubasdocParam.getCustType() == 2) {
if (cubasdocParam.getCustCode() == null) {
if (cubasdocParam.getCustType() == 1 || cubasdocParam.getCustType() == 2) {
bdCubasdoc.setCustCode(createCuBasDocCode("SU"));
}else{
} else {
bdCubasdoc.setCustCode(createCuBasDocCode("CU"));
}
}
@ -102,7 +79,7 @@ public class BdCubasdocServiceImpl extends ServiceImpl<BdCubasdocMapper, BdCubas
bdCubasdoc.setPkCreator(pkMember);
bdCubasdoc.setPkUser(pkMember);
baseMapper.insert(bdCubasdoc);
}else {
} else {
BdCubasdoc bdCubasdoc = baseMapper.selectById(cubasdocParam.getPkId());
bdCubasdoc.setCustName(cubasdocParam.getCustName());
bdCubasdoc.setCustType(cubasdocParam.getCustType());
@ -119,80 +96,43 @@ public class BdCubasdocServiceImpl extends ServiceImpl<BdCubasdocMapper, BdCubas
bdCubasdoc.setModifiedTime(DateUtils.currentDateTime());
bdCubasdoc.setPkSupplier(cubasdocParam.getPkId());
baseMapper.updateById(bdCubasdoc);
flushCubasdoc(cubasdocParam.getPkId());
}
}
private String createCuBasDocCode(String prefix) {
// 生成loginName
long next = (long) (Math.random() * (9999999L - 1000000L + 1)+1000000L);
long next = (long) (Math.random() * (9999999L - 1000000L + 1) + 1000000L);
String basDocCode = prefix + next;
// 2023.10.19 需求加校验会员编号不能出现 4 0
if (basDocCode.contains("4") || basDocCode.contains("0")) {
return createCuBasDocCode(prefix);
}
BdCubasdoc bdCubasdoc = queryBdCuBasdoc(basDocCode);
if(bdCubasdoc != null){
return createCuBasDocCode(prefix);
if (bdCubasdoc != null) {
return createCuBasDocCode(prefix);
}
return basDocCode;
}
private BdCubasdoc queryBdCuBasdoc(String custCode){
QueryWrapper<BdCubasdoc> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("CUST_CODE", custCode);
private BdCubasdoc queryBdCuBasdoc(String custCode) {
LambdaQueryWrapper<BdCubasdoc> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BdCubasdoc::getCustCode, custCode);
return baseMapper.selectOne(queryWrapper);
}
@Override
public void deleteCuBasdoc(Integer pkId, Long pkMember) {
UpdateWrapper<BdCubasdoc> updateWrapper = new UpdateWrapper<>();
updateWrapper.set(SystemFieldConstants.DEL_FLAG, EYesNo.NO.getIntValue());
updateWrapper.set(SystemFieldConstants.PK_MODIFIED, pkMember);
updateWrapper.set(SystemFieldConstants.MODIFIED_TIME, DateUtils.currentDateTime());
updateWrapper.eq(SystemFieldConstants.PK_ID, pkId);
LambdaUpdateWrapper<BdCubasdoc> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(BdCubasdoc::getDelFlag, EYesNo.NO.getIntValue());
updateWrapper.set(BdCubasdoc::getPkModified, pkMember);
updateWrapper.set(BdCubasdoc::getModifiedTime, DateUtils.currentDateTime());
updateWrapper.eq(BdCubasdoc::getPkId, pkId);
baseMapper.delete(updateWrapper);
flushCubasdoc(pkId);
}
@Override
public BdCubasdoc getBdCubasdocById(Integer pkId) {
if (pkId == null) {
return null;
}
BdCubasdoc cubasdoc = redisService.getCacheObject(CacheConstants.CUSTOMER_ID + pkId);
if (null == cubasdoc) {
// 如果缓存中不存在则查询并放入缓存
cubasdoc = baseMapper.selectById(pkId);
if(cubasdoc != null){
redisService.setCacheObject(CacheConstants.CUSTOMER_ID + pkId, cubasdoc);
}
}
return cubasdoc;
}
/*
* @description: 刷新缓存
* @author: sui q
* @date: 2023/11/20 16:44
* @param: null null
**/
private void flushCubasdoc(Integer pkId){
BdCubasdoc cubasdoc = redisService.getCacheObject(CacheConstants.CUSTOMER_ID + pkId);
if (cubasdoc != null) {
redisService.deleteObjectByKey(CacheConstants.CUSTOMER_ID + cubasdoc);
}
}
/**
* @description: 查询登录管理员是否为供应商
* @author: zhang jing
* @date: 2024/5/6 11:11
* @param: [userId]
* @return: java.lang.Integer
**/
@Override
public Integer queryThSupplierApplyUserList(Long userId) {
return baseMapper.queryThSupplierApplyUserList(userId);
}
}

View File

@ -8,11 +8,6 @@ import java.io.Serializable;
/**
* @description: 供应商vo
* @author: sui q
* @time: 2023/11/20 10:53
* @classname: BdCubasdocVO
* @package_name: com.hzs.system.base.vo
* version 1.0.0
*/
@Data
public class BdCubasdocVO implements Serializable {
@ -35,7 +30,7 @@ public class BdCubasdocVO implements Serializable {
/**
* ECustType 1=内部供应商 2=外部供应商 3=内部客户 4=外部客户
*/
@Transaction(transactionKey= EnumsPrefixConstants.SUPPLIER_TYPE)
@Transaction(transactionKey = EnumsPrefixConstants.SUPPLIER_TYPE)
private Integer custType;
private String custTypeVal;

View File

@ -2,16 +2,11 @@ package com.hzs.system.login.controller;
import javax.servlet.http.HttpServletRequest;
import com.hzs.common.core.annotation.RepeatSubmitSimple;
import com.hzs.common.core.enums.EAliSmsTemplate;
import com.hzs.common.core.enums.EDataSource;
import com.hzs.common.core.enums.ELoginType;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.system.sys.SysUser;
import com.hzs.system.login.service.IUserLoginService;
import com.hzs.system.sms.service.ISmsService;
import com.hzs.system.sys.dto.LoginUser;
import com.hzs.system.sys.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.hzs.common.auth.LoginBody;
@ -23,8 +18,6 @@ import com.hzs.common.security.utils.SecurityUtils;
/**
* 管理端 token 控制
*
* @author hzs
*/
@RequestMapping("/auth/manage")
@RestController
@ -34,10 +27,6 @@ public class UserTokenController {
private UserTokenService userTokenService;
@Autowired
private IUserLoginService iUserLoginService;
@Autowired
private ISysUserService iSysUserService;
@Autowired
private ISmsService iSmsService;
/**
* 用户登录
@ -100,23 +89,23 @@ public class UserTokenController {
// return AjaxResult.error("登录用户不存在");
// }
/**
* 管理员登录发送验证码
*
* @param userName 管理员编号
* @return
*/
@RepeatSubmitSimple
@GetMapping("/user-sms-send")
public AjaxResult userSmsSend(@RequestParam String userName) {
SysUser sysUser = iSysUserService.selectUserByUserName(userName);
if (null != sysUser) {
if (iSmsService.sendLoginSms(sysUser.getPhonenumber(), EAliSmsTemplate.MANAGE_LOGIN)) {
return AjaxResult.success();
}
return AjaxResult.error("短信发送失败");
}
return AjaxResult.error("登录用户不存在");
}
// /**
// * 管理员登录发送验证码
// *
// * @param userName 管理员编号
// * @return
// */
// @RepeatSubmitSimple
// @GetMapping("/user-sms-send")
// public AjaxResult userSmsSend(@RequestParam String userName) {
// SysUser sysUser = iSysUserService.selectUserByUserName(userName);
// if (null != sysUser) {
// if (iSmsService.sendLoginSms(sysUser.getPhonenumber(), EAliSmsTemplate.MANAGE_LOGIN)) {
// return AjaxResult.success();
// }
// return AjaxResult.error("短信发送失败");
// }
// return AjaxResult.error("登录用户不存在");
// }
}

View File

@ -4,13 +4,11 @@ import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.constant.msg.SystemMsgConstants;
import com.hzs.common.core.enums.EDelFlag;
import com.hzs.common.core.enums.EStatus;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.core.service.RedisService;
import com.hzs.common.domain.system.sys.SysLogininfor;
import com.hzs.common.domain.system.sys.SysUser;
import com.hzs.common.util.TransactionUtils;
import com.hzs.system.login.service.IUserLoginService;
import com.hzs.system.sms.service.ISmsService;
import com.hzs.system.sys.ILogServiceApi;
import com.hzs.system.sys.IUserServiceApi;
import org.apache.dubbo.config.annotation.DubboReference;
@ -28,14 +26,10 @@ import com.hzs.system.sys.dto.LoginUser;
/**
* 登录校验方法
*
* @author hzs
*/
@Component
public class UserLoginServiceImpl implements IUserLoginService {
@Autowired
private ISmsService iSmsService;
@Autowired
private RedisService redisService;
@ -69,16 +63,16 @@ public class UserLoginServiceImpl implements IUserLoginService {
LoginUser loginUser = userResult.getData();
SysUser user = userResult.getData().getLoginSysUser();
if (EYesNo.YES.getIntValue() == user.getSms()) {
// 启用短信登录需要校验短信验证码
if (StringUtils.isEmpty(smsCode)) {
throw new ServiceException("短信验证码不能为空");
}
String str = iSmsService.checkLoginSms(user.getPhonenumber(), smsCode);
if (null != str) {
throw new ServiceException(str);
}
}
// if (EYesNo.YES.getIntValue() == user.getSms()) {
// // 启用短信登录需要校验短信验证码
// if (StringUtils.isEmpty(smsCode)) {
// throw new ServiceException("短信验证码不能为空");
// }
// String str = iSmsService.checkLoginSms(user.getPhonenumber(), smsCode);
// if (null != str) {
// throw new ServiceException(str);
// }
// }
if (EDelFlag.UN_DELETE.getValue() != user.getDelFlag()) {
recordLogininfor(userName, Constants.LOGIN_FAIL, "您的账号已被删除");

View File

@ -1,32 +0,0 @@
package com.hzs.system.sms.service;
import com.hzs.common.core.enums.EAliSmsTemplate;
/**
* @Description: 短信服务
* @Author: jiang chao
* @Time: 2024/8/5 14:34
* @Classname: ISmsService
* @PackageName: com.hzs.system.sms.service
*/
public interface ISmsService {
/**
* 根据会员发送验证码
*
* @param phoneNumber 手机号码
* @param aliSmsTemplate 阿里短信模板
* @return boolean
*/
boolean sendLoginSms(String phoneNumber, EAliSmsTemplate aliSmsTemplate);
/**
* 校验验证码
*
* @param phoneNumber 手机号码
* @param code 验证码
* @return 如果返回null为正确其它为错误内容
*/
String checkLoginSms(String phoneNumber, String code);
}

View File

@ -1,73 +0,0 @@
package com.hzs.system.sms.service.impl;
import com.hzs.common.core.constant.SmsConstants;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EAliSmsTemplate;
import com.hzs.common.core.enums.ESmsTemplate;
import com.hzs.common.core.service.RedisService;
import com.hzs.common.core.utils.VerificationCodeUtil;
import com.hzs.system.sms.service.ISmsService;
import com.hzs.third.sms.ISmsServiceApi;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
/**
* @Description: 短信服务
* @author: jiang chao
* @Time: 2024/8/5 14:34
* @Classname: SmsServiceImpl
* @PackageName: com.hzs.system.sms.service.impl
*/
@Slf4j
@Service
public class SmsServiceImpl implements ISmsService {
@Autowired
private RedisService redisService;
@DubboReference
ISmsServiceApi iSmsServiceApi;
@Override
public boolean sendLoginSms(String phoneNumber, EAliSmsTemplate aliSmsTemplate) {
// 生成4位验证码
String code = VerificationCodeUtil.createCode();
R<String> sendR = iSmsServiceApi.sendAliSms(phoneNumber, code, aliSmsTemplate);
if (sendR.isSuccess()) {
// 返回成功验证码放入缓存
redisService.setCacheObject(ESmsTemplate.VERIFICATION_MANAGE.getCache() + phoneNumber, code, SmsConstants.FAILURE_TIME, TimeUnit.MINUTES);
return true;
}
log.error("发送短信失败:{}", sendR.getMsg());
return false;
}
@Override
public String checkLoginSms(String phoneNumber, String code) {
// 短信发送枚举
ESmsTemplate eSmsTemplate = ESmsTemplate.VERIFICATION_MANAGE;
// 短信缓存
String cacheKey = eSmsTemplate.getCache() + phoneNumber;
Object codeObj = redisService.getCacheObject(cacheKey);
if (null != codeObj) {
if (codeObj.toString().equals(code)) {
// 校验正确之后删除缓存
redisService.deleteObject(cacheKey);
return null;
} else {
// 验证码错误
return "短信验证码错误";
}
}
// 验证码已失效
return "短信验证码已失效";
}
}

View File

@ -8,13 +8,6 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description:
* @Author: sui q
* @Time: 2022/8/29 9:35
* @Classname: ApiIdempotentController
* @PackageName: com.hzs.system.tools.controller.api
*/
@RestController
@RequestMapping("/api/idempotent")
@Slf4j
@ -27,16 +20,9 @@ public class ApiIdempotentController {
this.idempotentService = idempotentService;
}
/**
* @param
* @throws
* @Description: 生成用于保证幂等的token
* @return: AjaxResult
* @Author: sui q
* @Date: 2022/8/29 9:36
*/
@GetMapping("/generate")
public AjaxResult generateIdempotentToken() {
return AjaxResult.success(idempotentService.generateToken());
}
}

View File

@ -12,13 +12,8 @@ public class CacheConstants {
public final static String UPD_MEMBER = CACHE_PREFIX + "upd:member_name:";
/**
* 会员账户
*/
public final static String MEMBER_ACCOUNT = CACHE_PREFIX + "account:";
public final static String CUSTOMER_ID = CACHE_PREFIX + "customer:";
/**
* 会员缓存刷新时间默认30天
*/
@ -279,11 +274,6 @@ public class CacheConstants {
*/
public static final String SHOPPIN_GCART = CACHE_PREFIX + "shopping:cart:";
/**
* 短信缓存key前缀
*/
public final static String CACHE_SMS_PREFIX = CACHE_PREFIX + "sms:";
/**
* 抽奖奖品
*/
@ -390,6 +380,53 @@ public class CacheConstants {
/**
* 在线支付回调上锁
*/
public final static String ONLINE_PAYE_KEY = CACHE_PREFIX + "online:payment:";
public final static String ONLINE_PAY_KEY = CACHE_PREFIX + "online:payment:";
/**
* 手机每天获取短信缓存 -- Hashsms:count: 年月日, 登录名
*/
public final static String SMS_COUNT = CACHE_PREFIX + "sms:count:%s:";
// /**
// * 登录短信重复发送间隔KEY1分钟
// */
// public final static String LOGIN_SEND_TIME = CACHE_PREFIX + "login:send:time:";
// /**
// * 登录短信验证码有效期KEY5分钟
// */
// public final static String LOGIN_CHECK = CACHE_PREFIX + "login:valid:";
/**
* 注册短信重复发送间隔KEY1分钟
*/
public final static String REGISTER_SEND_TIME = CACHE_PREFIX + "register:send:time:";
/**
* 注册短信验证码有效期KEY5分钟
*/
public final static String REGISTER_CHECK = CACHE_PREFIX + "register:valid:";
/**
* 找回密码短信重复发送间隔KEY1分钟
*/
public final static String RECOVER_SEND_TIME = CACHE_PREFIX + "recover:send:time:";
/**
* 找回密码短信验证码有效期KEY5分钟
*/
public final static String RECOVER_CHECK = CACHE_PREFIX + "recover:check:";
/**
* 重置支付密码短信重复发送间隔KEY1分钟
*/
public final static String RESET_SEND_TIME = CACHE_PREFIX + "reset:send:time:";
/**
* 重置支付密码短信验证码有效期KEY5分钟
*/
public final static String RESET_CHECK = CACHE_PREFIX + "reset:check:";
/**
* 默认发送短信验证码有效期期KEY5分钟
*/
public final static String DEFAULT_CHECK = CACHE_PREFIX + "default:check:";
/**
* 默认发送短信重复发送间隔KEY1分钟
*/
public final static String DEFAULT_SEND_TIME = CACHE_PREFIX + "default:send:time:";
}

View File

@ -4,25 +4,21 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Description: 阿里短信模板枚举
* @Author: jiang chao
* @Time: 2024/10/15 17:32
* @Classname: EAliSmsTemplate
* @PackageName: com.hzs.common.core.enums
* 阿里短信模板枚举
*/
@AllArgsConstructor
@Getter
public enum EAliSmsTemplate {
/**
* 后台管理登录
*/
MANAGE_LOGIN("SMS_471485440"),
// /**
// * 后台管理登录
// */
// MANAGE_LOGIN("SMS_471485440"),
/**
* 会员验证码尊敬的会员您的验证码为 ${code} 该验证码5分钟内有效
* 会员验证码尊敬的会员您好您的验证码为 ${code} 该验证码10分钟内有效请勿泄露于他人
*/
MEMBER_SMS("SMS_474440238"),
MEMBER_SMS("SMS_485350565"),
;

View File

@ -1,147 +0,0 @@
package com.hzs.common.core.enums;
import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.constant.SmsConstants;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Description: 短信模板类型
* @Author: jiang chao
* @Time: 2023/3/9 14:10
* @Classname: ESmsTemplate
* @PackageName: com.hzs.common.core.enums
*/
@AllArgsConstructor
@Getter
public enum ESmsTemplate {
/**
* 每日业绩
*/
ACHIEVEMENT(SmsConstants.SMS_CODE_PREFIX + "1", "", false),
/**
* 结算安置问题
*/
SETTLE_ACHIEVE(SmsConstants.SMS_CODE_PREFIX + "2", "", false),
/**
* 特殊用户
*/
SPECIAL_MEMBER(SmsConstants.SMS_CODE_PREFIX + "5", "", false),
/**
* 验证码
*/
VERIFICATION(SmsConstants.SMS_CODE_PREFIX + "10", CacheConstants.CACHE_SMS_PREFIX + "verification:", false),
/**
* 后台验证码
*/
VERIFICATION_MANAGE(SmsConstants.SMS_CODE_PREFIX + "10", CacheConstants.CACHE_SMS_PREFIX + "verificationManage:", false),
/**
* 会员注册成功
*/
REGISTER_SUCCESS(SmsConstants.SMS_CODE_PREFIX + "11", "", false),
/**
* 忘记密码
*/
FORGET_PASSWORD(SmsConstants.SMS_CODE_PREFIX + "12", CacheConstants.CACHE_SMS_PREFIX + "forget:", false),
/**
* 订单发货
*/
ORDER_SHIPPING(SmsConstants.SMS_CODE_PREFIX + "13", "", false),
/**
* 库存预警
*/
STOCK_WARNING(SmsConstants.SMS_CODE_PREFIX + "15", "", false),
/**
* 余额核对
*/
BALANCE_CHECK(SmsConstants.SMS_CODE_PREFIX + "17", "", false),
/**
* 沙棘提货提醒
*/
PICK_REMIND(SmsConstants.SMS_CODE_PREFIX + "18", "", false),
//////////////////// 上面的短信不能进行手动发送 ////////////////////
/**
* 售后收货
*/
SMS21(SmsConstants.SMS_CODE_PREFIX + "21", "", true),
/**
* 售后换新
*/
SMS22(SmsConstants.SMS_CODE_PREFIX + "22", "", true),
/**
* 售后原件
*/
SMS23(SmsConstants.SMS_CODE_PREFIX + "23", "", true),
/**
* 售后换件
*/
SMS24(SmsConstants.SMS_CODE_PREFIX + "24", "", true),
/**
* 产品补发
*/
SMS25(SmsConstants.SMS_CODE_PREFIX + "25", "", true),
/**
* 售后受理
*/
SMS26(SmsConstants.SMS_CODE_PREFIX + "26", "", true),
/**
* 疫情延迟补发
*/
SMS27(SmsConstants.SMS_CODE_PREFIX + "27", "", true),
/**
* 疫情延迟发货
*/
SMS28(SmsConstants.SMS_CODE_PREFIX + "28", "", true),
/**
* 售后快速处理
*/
SMS29(SmsConstants.SMS_CODE_PREFIX + "29", "", true),
/**
* 支付订单退款
*/
SMS30(SmsConstants.SMS_CODE_PREFIX + "30", "", true),
;
/**
* 短信模板编号
*/
private final String code;
/**
* 短信模板缓存KEY
*/
private final String cache;
/**
* 是否可以手动创建true则可以通过短信发送功能进行发送
*/
private final boolean create;
/**
* 根据编号获取枚举
*
* @param code
* @return
*/
public static ESmsTemplate getEnumsByCode(String code) {
for (ESmsTemplate value : ESmsTemplate.values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}
}

View File

@ -90,6 +90,16 @@ public class BaseController {
return result ? success() : error();
}
/**
* 响应返回结果
*
* @param result 结果
* @return 操作结果
*/
protected AjaxResult toAjax(String result) {
return null != result ? error(result) : success();
}
/**
* 返回成功
*/

View File

@ -15,9 +15,6 @@ import java.util.Date;
/**
* 短信发送记录
*
* @author hzs
* @since 2023-03-08
*/
@Data
@EqualsAndHashCode(callSuper = true)

View File

@ -189,7 +189,6 @@ security:
# 登录退出相关
- /system/auth/**
- /system/manage/third/**
- /member/manager/member/third-member
- /member/auth/**
- /system/api/area/provinceList
- /system/api/country/list
@ -207,19 +206,17 @@ security:
# 找回密码相关
- /member/api/sms/forget-verification
- /member/api/member/forget-password
# 嗨粉短信验证码
- /member/api/sms/fans-verification
# 分享注册
- /member/api/member/reg-share-member
- /member/api/member/validate-share-member/*
- /member/api/member/query-country-prefix/*
# 分享注册校验
- /member/api/share/check-share-code
# 嗨粉注册
- /member/api/fans/register
# # 分享注册
# - /member/api/member/reg-share-member
# - /member/api/member/validate-share-member/*
# - /member/api/member/query-country-prefix/*
# # 分享注册校验
# - /member/api/share/check-share-code
# # 嗨粉注册
# - /member/api/fans/register
- /system/api/idempotent/generate
# 获取点亮区域
- /system/manage/area/get-light-area
# # 获取点亮区域
# - /system/manage/area/get-light-area
# 日志配置

View File

@ -5,26 +5,16 @@ import com.hzs.common.core.domain.R;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.member.account.IMemberJobServiceApi;
import com.hzs.member.base.IMemberServiceApi;
import com.hzs.third.sms.util.SmsUtil;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* 会员模块定时任务
*
* @Description:
* @Author: ljc
* @Time: 2023/4/11 19:11
* @Classname: CuMemberJob
* @Package_name: com.hzs.member.job
*/
@ConditionalOnProperty(name = "xxl-job.start", havingValue = "true")
@Component
@ -83,7 +73,6 @@ public class CuMemberJob {
memberJobServiceApi.saveGoalsMonthRecord();
}
// @Scheduled(cron = "00 21 11 * * ?")
@XxlJob("sendPlaceErrorMsg")
public void sendPlaceErrorMsg() {
List<CuMemberExt> cuMemberList = memberServiceApi.queryPlaceErrorCode().getData();
@ -96,15 +85,7 @@ public class CuMemberJob {
}
sb.append("结算错误,安置有问题");
List<String> phoneList = new ArrayList<>();
phoneList.add("15910608312");
phoneList.add("18665770108");
phoneList.forEach(phone -> {
String smsStr = SmsUtil.sendSms(phone, sb.toString());
log.info("发送短信{}", smsStr);
});
}
}

View File

@ -12,7 +12,6 @@ import com.hzs.member.account.IMemberJobServiceApi;
import com.hzs.sale.order.ISaOrderServiceApi;
import com.hzs.system.base.ICurrencyServiceApi;
import com.hzs.system.base.dto.CurrencyDTO;
import com.hzs.third.sms.util.SmsUtil;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
@ -24,14 +23,6 @@ import java.math.RoundingMode;
import java.time.temporal.ChronoUnit;
import java.util.*;
/**
* @BelongsProject: hzs_cloud
* @BelongsPackage: com.hzs.third.job
* @Author: sui qing
* @CreateTime: 2023-03-29 18:39
* @Description: 定时发送业绩短信
* @Version: 1.0
*/
@Slf4j
@ConditionalOnProperty(name = "xxl-job.start", havingValue = "true")
@Component
@ -47,7 +38,6 @@ public class OrderJob {
/**
* 定时关单 订单三十分钟未支付自动关闭
*/
// TODO 设置定时任务 启动频率
@XxlJob("autoCloseOrder")
public void timingCloseOrder() {
orderServiceApi.closeOrder();
@ -55,12 +45,8 @@ public class OrderJob {
/*
* @description: 定时发送业绩短信
* @author: sui q
* @date: 2023/9/6 13:54
* @param: null null
**/
@XxlJob("sendOrderAchieve")
// @Scheduled(cron = "00 49 15 * * ?")
public void sendOrderAchieveMsg() {
Date startDate = DateUtils.currentDate();
Date endDate = DateUtils.afterDate(1, ChronoUnit.DAYS);
@ -110,14 +96,6 @@ public class OrderJob {
.append("D=").append(calculateAchieve(haiFunAchieve))
.append(",合计=").append(calculateAchieve(registerAchieve.add(updateAchieve)
.add(repurchaseAchieve).add(haiFunAchieve).add(directSupplyAchieve))).append("Q=").append(calculateAchieve(rechargeTotalAmount)).append("");
List<String> phoneList = new ArrayList<>();
phoneList.add("18454272386");
phoneList.add("18389196333");
phoneList.add("18561823095");
phoneList.forEach(phone -> {
String smsStr = SmsUtil.sendSms(phone, stringBuilder.toString());
log.info("发送短信{}", smsStr);
});
}
}

View File

@ -1,76 +0,0 @@
package com.hzs.third.job;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.SystemFieldConstants;
import com.hzs.common.core.enums.ESmsSendResult;
import com.hzs.common.core.enums.ESmsSendStatus;
import com.hzs.common.core.enums.ESmsSendType;
import com.hzs.common.domain.third.sms.TSmsRecord;
import com.hzs.third.sms.service.ITSmsRecordService;
import com.hzs.third.sms.util.SmsUtil;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
* @Description: 短信定时任务
* @Author: jiang chao
* @Time: 2023/3/11 16:22
* @Classname: SmsJob
* @PackageName: com.hzs.third.job
*/
@Slf4j
@ConditionalOnProperty(name = "xxl-job.start", havingValue = "true")
@Component
public class SmsJob {
@Autowired
private ITSmsRecordService itSmsRecordService;
/**
* 定时发送短信
*/
// @Scheduled(cron = "0 * * * * ?")
@XxlJob("sendSms")
public void sendSms() {
log.info("定时发送短信任务开始!");
Date date = new Date();
QueryWrapper<TSmsRecord> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("SEND_TYPE", ESmsSendType.SCHEDULED.getValue());
queryWrapper.eq("SEND_STATUS", ESmsSendStatus.NOT_SEND.getValue());
queryWrapper.le("SEND_TIME", date);
queryWrapper.orderByAsc(SystemFieldConstants.CREATION_TIME);
List<TSmsRecord> list = itSmsRecordService.list(queryWrapper);
if (CollectionUtil.isNotEmpty(list)) {
log.info("本次共需要发送短信{}条", list.size());
for (TSmsRecord tSmsRecord : list) {
String str = SmsUtil.sendSms(tSmsRecord.getPhone(), tSmsRecord.getContent());
if (null == str) {
// 发送成功
tSmsRecord.setSendResult(ESmsSendResult.SUCCESS.getValue());
} else {
tSmsRecord.setSendResult(ESmsSendResult.FAIL.getValue());
}
tSmsRecord.setSendStatus(ESmsSendStatus.SEND.getValue());
tSmsRecord.setPkModified(MagicNumberConstants.PK_ADMIN);
tSmsRecord.setModifiedTime(date);
itSmsRecordService.updateById(tSmsRecord);
}
} else {
log.info("本次没有需要发送的短信");
}
log.info("定时发送短信任务结束!");
}
}

View File

@ -62,7 +62,7 @@ public class PayServiceImpl implements IPayService {
String payNumber, Date payTime, BigDecimal payMoney,
EPayChannel ePayChannel, String channelNumber) {
Long pkId = null;
String redisKey = CacheConstants.ONLINE_PAYE_KEY + businessCode;
String redisKey = CacheConstants.ONLINE_PAY_KEY + businessCode;
try {
// 校验支付信息状态业务与支付金额是否一致等

View File

@ -6,44 +6,17 @@ import org.springframework.stereotype.Component;
/**
* 短信配置
* @author hzs
*/
@Data
@Component
@ConfigurationProperties(prefix = "sms")
public class SmsConfig {
/**
* 企业ID
*/
private String corpId;
/**
* 密码
*/
private String pwd;
/**
* 短信请求URL
*/
private String url;
/**
* 是否发送短信true发送false不发送
*/
private boolean enable;
/**
* 企业ID国际
*/
private String corpIdInter;
/**
* 密码国际
*/
private String pwdInter;
/**
* 短信请求URL国际
*/
private String urlInter;
/**
* 阿里短信accessKeyId
*/

View File

@ -4,11 +4,9 @@ import com.hzs.common.core.annotation.Log;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.poi.ExcelUtil;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.domain.third.sms.ext.TSmsRecordExt;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.third.sms.param.SmsCreateParam;
import com.hzs.third.sms.param.SmsRecordQueryParam;
import com.hzs.third.sms.service.ITSmsRecordService;
import org.springframework.beans.factory.annotation.Autowired;
@ -18,11 +16,7 @@ import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @Description: 短信发送记录
* @Author: jiang chao
* @Time: 2023/3/9 16:10
* @Classname: SmsRecordController
* @PackageName: com.hzs.third.sms.controller
* 短信发送记录
*/
@RestController
@RequestMapping("/manage/sms-record/")
@ -37,7 +31,7 @@ public class SmsRecordController extends BaseController {
* @param param
* @return
*/
@Log(module = EOperationModule.SMS_CONFIG, business = EOperationBusiness.SMS_RECORD ,method = EOperationMethod.SELECT)
@Log(module = EOperationModule.SMS_CONFIG, business = EOperationBusiness.SMS_RECORD, method = EOperationMethod.SELECT)
@GetMapping("/list")
public TableDataInfo list(SmsRecordQueryParam param) {
startPage();
@ -56,7 +50,7 @@ public class SmsRecordController extends BaseController {
* @param response
* @param param
*/
@Log(module = EOperationModule.SMS_CONFIG, business = EOperationBusiness.SMS_RECORD ,method = EOperationMethod.EXPORT)
@Log(module = EOperationModule.SMS_CONFIG, business = EOperationBusiness.SMS_RECORD, method = EOperationMethod.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, SmsRecordQueryParam param) {
List<TSmsRecordExt> list = itSmsRecordService.queryList(param, SecurityUtils.getPkCountry());
@ -70,28 +64,4 @@ public class SmsRecordController extends BaseController {
util.exportExcel(response, list, "短信记录导出");
}
/**
* 创建短信
*
* @param param
* @return
*/
@Log(module = EOperationModule.SMS_CONFIG, business = EOperationBusiness.SMS_CREATE ,method = EOperationMethod.INSERT)
@PostMapping("/create")
public AjaxResult create(@RequestBody SmsCreateParam param) {
if (null == param.getTemplateId() || null == param.getSendScope() || null == param.getSendType()) {
return AjaxResult.error("缺少参数");
}
if (ESmsSendType.SCHEDULED.getValue() == param.getSendType() && null == param.getSendTime()) {
// 定时发送需要有发送时间
return AjaxResult.error("缺少参数");
}
String str = itSmsRecordService.pageSms(param, SecurityUtils.getUserId(), SecurityUtils.getPkCountry());
if (null == str) {
return AjaxResult.success();
}
return AjaxResult.error(str);
}
}

View File

@ -10,9 +10,6 @@ import java.util.List;
/**
* 短信发送记录 Mapper 接口
*
* @author hzs
* @since 2023-03-08
*/
public interface TSmsRecordMapper extends BaseMapper<TSmsRecord> {
@ -25,12 +22,4 @@ public interface TSmsRecordMapper extends BaseMapper<TSmsRecord> {
*/
List<TSmsRecordExt> queryList(@Param("param") SmsRecordQueryParam param, @Param("pkCountry") Integer pkCountry);
/**
* 批量插入
*
* @param list
* @return
*/
int insertBatch(@Param("list") List<TSmsRecord> list);
}

View File

@ -1,59 +0,0 @@
package com.hzs.third.sms.param;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @Description: 创建短信入参
* @Author: jiang chao
* @Time: 2023/3/9 18:12
* @Classname: SmsCreateParam
* @PackageName: com.hzs.third.sms.param
*/
@Data
public class SmsCreateParam {
/**
* 短信模板ID
*/
private Integer templateId;
/**
* 发送范围 -- ESmsSendScope
*/
private Integer sendScope;
/**
* 会员ID列表
*/
private List<Long> memberList;
/**
* 订单ID列表
*/
private List<Long> orderList;
/**
* 指定手机号串
*/
private String phones;
/**v
* 参数列表
*/
private List<String> paramList;
/**
* 发送方式 -- ESmsSendType
*/
private Integer sendType;
/**
* 发送时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date sendTime;
}

View File

@ -5,11 +5,7 @@ import lombok.Data;
import java.util.Date;
/**
* @Description: 短信发送记录查询入参
* @Author: jiang chao
* @Time: 2023/3/8 10:45
* @Classname: SmsTemplateParam
* @PackageName: com.hzs.third.sms.param
* 短信发送记录查询入参
*/
@Data
public class SmsRecordQueryParam {

View File

@ -5,11 +5,7 @@ import lombok.Data;
import java.util.Date;
/**
* @Description: 短信模板查询入参
* @Author: jiang chao
* @Time: 2023/3/8 10:45
* @Classname: SmsTemplateParam
* @PackageName: com.hzs.third.sms.param
* 短信模板查询入参
*/
@Data
public class SmsTemplateQueryParam {

View File

@ -3,50 +3,26 @@ package com.hzs.third.sms.provider;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EAliSmsTemplate;
import com.hzs.third.sms.ISmsServiceApi;
import com.hzs.third.sms.dto.SmsServiceDTO;
import com.hzs.third.sms.service.ISmsService;
import com.hzs.third.sms.util.SmsUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
/**
* 短信服务提供类
* @author hzs
*/
@Slf4j
@DubboService
public class SmsServiceProvider implements ISmsServiceApi {
@Autowired
private ISmsService iSmsService;
@Override
public R<String> send(SmsServiceDTO param) {
try {
// String str = iSmsService.sendSms(param);
// if (null == str) {
// return R.ok();
// }
// log.error("发送短信失败: {}", str);
// return R.fail(str);
return R.fail("功能正在完善中...");
} catch (Exception e) {
log.error("发送短信异常 param: {}", param, e);
return R.fail(e.getMessage());
}
}
@Override
public R<String> sendAliSms(String phone, String code, EAliSmsTemplate aliSmsTemplate) {
try {
// String str = SmsUtil.sendAliSms(phone, code, aliSmsTemplate);
// if (null == str) {
// return R.ok();
// }
// log.error("发送阿里短信失败: {}", str);
// return R.fail(str);
return R.fail("功能正在完善中...");
String str = SmsUtil.sendAliSms(phone, code, aliSmsTemplate);
if (null == str) {
return R.ok();
}
log.error("发送阿里短信失败: {}", str);
return R.fail(str);
} catch (Exception e) {
log.error("发送阿里短信异常 phone: {}, code: {}", phone, code, e);
return R.fail(e.getMessage());

View File

@ -1,22 +0,0 @@
package com.hzs.third.sms.service;
import com.hzs.third.sms.dto.SmsServiceDTO;
/**
* @Description: 短信服务
* @Author: jiang chao
* @Time: 2023/3/8 14:18
* @Classname: ISmsService
* @PackageName: com.hzs.third.sms.service
*/
public interface ISmsService {
/**
* 实时发送短信
*
* @param param
* @return
*/
String sendSms(SmsServiceDTO param);
}

View File

@ -3,16 +3,12 @@ package com.hzs.third.sms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.third.sms.TSmsRecord;
import com.hzs.common.domain.third.sms.ext.TSmsRecordExt;
import com.hzs.third.sms.param.SmsCreateParam;
import com.hzs.third.sms.param.SmsRecordQueryParam;
import java.util.List;
/**
* 短信发送记录 服务类
*
* @author hzs
* @since 2023-03-08
*/
public interface ITSmsRecordService extends IService<TSmsRecord> {
@ -25,14 +21,4 @@ public interface ITSmsRecordService extends IService<TSmsRecord> {
*/
List<TSmsRecordExt> queryList(SmsRecordQueryParam param, Integer pkCountry);
/**
* 页面添加短信
*
* @param param
* @param userId
* @param pkCountry
* @return
*/
String pageSms(SmsCreateParam param, Long userId, Integer pkCountry);
}

View File

@ -1,99 +0,0 @@
package com.hzs.third.sms.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.domain.third.sms.TSmsRecord;
import com.hzs.common.domain.third.sms.TSmsTemplate;
import com.hzs.third.sms.dto.SmsServiceDTO;
import com.hzs.third.sms.service.ISmsService;
import com.hzs.third.sms.service.ITSmsRecordService;
import com.hzs.third.sms.service.ITSmsTemplateService;
import com.hzs.third.sms.util.SmsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @Description: 短信服务
* @Author: jiang chao
* @Time: 2023/3/8 14:18
* @Classname: SmsServiceImpl
* @PackageName: com.hzs.third.sms.service.impl
*/
@Service
public class SmsServiceImpl implements ISmsService {
@Autowired
private ITSmsTemplateService itSmsTemplateService;
@Autowired
private ITSmsRecordService itSmsRecordService;
@Override
public String sendSms(SmsServiceDTO param) {
QueryWrapper<TSmsTemplate> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("TEMPLATE_CODE", param.getTemplateCode());
queryWrapper.eq("PK_COUNTRY", param.getPkCountry());
TSmsTemplate smsTemplate = itSmsTemplateService.getOne(queryWrapper);
if (null == smsTemplate) {
return "短信模板不存在";
}
if (EYesNo.NO.getIntValue() == smsTemplate.getEnable()) {
return "短信模板禁止使用";
}
// 手机号
String phone = param.getPhone();
// 发送内容
String content = smsTemplate.getTemplateContent();
// 参数列表
List<String> paramList = param.getParamList();
if (smsTemplate.getParamNum() != 0) {
if (smsTemplate.getParamNum() != paramList.size()) {
return "缺少短信参数";
}
content = String.format(content, paramList.toArray());
}
Date nowDate = new Date();
// 短信发送记录
TSmsRecord smsRecord = new TSmsRecord();
// 发送短信
String smsStr = SmsUtil.sendSms(phone, content);
if (null == smsStr) {
// 发送成功
smsRecord.setSendResult(ESmsSendResult.SUCCESS.getValue());
} else {
// 发送失败
smsRecord.setSendResult(ESmsSendResult.FAIL.getValue());
}
if (null == param.getSaveFlag() || param.getSaveFlag()) {
// 保存短信发送记录
smsRecord.setPkSmsTemplate(smsTemplate.getPkId());
smsRecord.setPkMember(param.getPkMember());
smsRecord.setPhone(phone);
smsRecord.setContent(content);
smsRecord.setSendScope(ESmsSendScope.MEMBER.getValue());
smsRecord.setSendType(ESmsSendType.IMMEDIATELY.getValue());
smsRecord.setSendStatus(ESmsSendStatus.SEND.getValue());
smsRecord.setSendTime(nowDate);
if (null != param.getUserId()) {
smsRecord.setPkCreator(param.getUserId());
} else {
smsRecord.setPkCreator(MagicNumberConstants.PK_ADMIN);
}
smsRecord.setCreationTime(nowDate);
smsRecord.setModifiedTime(nowDate);
smsRecord.setPkCountry(param.getPkCountry());
itSmsRecordService.save(smsRecord);
}
return smsStr;
}
}

View File

@ -1,248 +1,24 @@
package com.hzs.third.sms.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.third.sms.TSmsRecord;
import com.hzs.common.domain.third.sms.TSmsTemplate;
import com.hzs.common.domain.third.sms.ext.TSmsRecordExt;
import com.hzs.member.base.IMemberServiceApi;
import com.hzs.sale.order.ISaOrderServiceApi;
import com.hzs.third.sms.mapper.TSmsRecordMapper;
import com.hzs.third.sms.param.SmsCreateParam;
import com.hzs.third.sms.param.SmsRecordQueryParam;
import com.hzs.third.sms.service.ITSmsRecordService;
import com.hzs.third.sms.service.ITSmsTemplateService;
import com.hzs.third.sms.util.SmsUtil;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
* 短信发送记录 服务实现类
*
* @author hzs
* @since 2023-03-08
*/
@Service
public class TSmsRecordServiceImpl extends ServiceImpl<TSmsRecordMapper, TSmsRecord> implements ITSmsRecordService {
@Autowired
private ITSmsTemplateService itSmsTemplateService;
@DubboReference
private IMemberServiceApi iMemberServiceApi;
@DubboReference
private ISaOrderServiceApi iSaOrderServiceApi;
@Override
public List<TSmsRecordExt> queryList(SmsRecordQueryParam param, Integer pkCountry) {
return baseMapper.queryList(param, pkCountry);
}
@Transactional(rollbackFor = Exception.class)
@Override
public String pageSms(SmsCreateParam param, Long userId, Integer pkCountry) {
TSmsTemplate smsTemplate = itSmsTemplateService.getById(param.getTemplateId());
if (null == smsTemplate) {
return "短信模板不存在";
}
if (EYesNo.NO.getIntValue() == smsTemplate.getEnable()) {
return "短信模板禁止使用";
}
// 模板编号
String templateCode = smsTemplate.getTemplateCode();
// 发送内容
String templateContent = smsTemplate.getTemplateContent();
ESmsTemplate eSmsTemplate = ESmsTemplate.getEnumsByCode(templateCode);
if (null != eSmsTemplate) {
// 短信枚举存在
if (!eSmsTemplate.isCreate()) {
return "该短信模板不能手动发送";
}
}
// 需要入库的短信记录列表
List<TSmsRecord> smsRecordList = new ArrayList<>();
// 发送范围
Integer sendScope = param.getSendScope();
// 发送方式
Integer sendType = param.getSendType();
// 发送时间
Date sendTime = param.getSendTime();
// 参数列表
List<String> paramList = param.getParamList();
// 短信枚举存在则需要判断使用哪种方式
if (ESmsSendScope.MEMBER.getValue() == sendScope) {
// 指定会员
List<Long> pkMemberList = param.getMemberList();
if (CollectionUtil.isNotEmpty(pkMemberList)) {
// 根据传入的会员ID查询会员信息
List<CuMemberExt> cuMemberList = iMemberServiceApi.findMemberByMemberId(pkMemberList, pkCountry).getData();
// 预置会员短信模板参数使用固定值进行填
if (SmsUtil.getMemberTemplateList().contains(smsTemplate.getTemplateCode())) {
// 预置模板可以进行处理
} else {
// 非预置模板
for (CuMemberExt cuMember : cuMemberList) {
// 发送内容
String content;
if (CollectionUtil.isNotEmpty(paramList)) {
// 传入参数列表
content = String.format(templateContent, paramList.toArray());
} else {
// 非传入参数列表默认使用会员编号做为填充参数
content = String.format(templateContent, cuMember.getMemberCode());
}
smsRecordList.add(this.createRecord(
smsTemplate.getPkId(), cuMember.getPkId(), cuMember.getPhone(),
content, sendScope, sendType, sendTime, userId, pkCountry
));
}
}
}
} else if (ESmsSendScope.ORDER.getValue() == sendScope) {
// 指定订单
List<Long> orderIdList = param.getOrderList();
if (CollectionUtil.isNotEmpty(orderIdList)) {
// 根据传入的订单ID查询订单信息
List<SaOrderItemsExt> saOrderList = iSaOrderServiceApi.queryOrderItemsListByOrderId(orderIdList, pkCountry).getData();
// 预置订单短信模板参数使用固定值进行填
if (SmsUtil.getOrderTemplateList().contains(smsTemplate.getTemplateCode())) {
// 预置模板可以进行处理
for (SaOrderItemsExt saOrder : saOrderList) {
// 发送内容
String content = templateContent;
if (CollectionUtil.isNotEmpty(paramList)) {
// 传入参数列表
content = String.format(templateContent, paramList.toArray());
} else {
// 非传入参数列表默认使用快递单号做为填充参数
if (smsTemplate.getParamNum() == 1) {
content = String.format(templateContent, saOrder.getLogisticsCode());
}
}
smsRecordList.add(this.createRecord(
smsTemplate.getPkId(), saOrder.getPkMember(), saOrder.getRecPhone(),
content, sendScope, sendType, sendTime, userId, pkCountry
));
}
} else {
// 非预置模板
for (SaOrderItemsExt saOrder : saOrderList) {
// 发送内容
String content = templateContent;
if (CollectionUtil.isNotEmpty(paramList)) {
// 传入参数列表
content = String.format(templateContent, paramList.toArray());
} else {
// 非传入参数列表默认使用快递单号做为填充参数
if (smsTemplate.getParamNum() == 1) {
content = String.format(templateContent, saOrder.getLogisticsCode());
} else if (smsTemplate.getParamNum() == 2) {
content = String.format(templateContent, saOrder.getOrderCode(), saOrder.getLogisticsCode());
}
}
smsRecordList.add(this.createRecord(
smsTemplate.getPkId(), saOrder.getPkMember(), saOrder.getRecPhone(),
content, sendScope, sendType, sendTime, userId, pkCountry
));
}
}
}
} else {
// 自定义手机号
String phones = param.getPhones();
if (StringUtils.isNotEmpty(phones)) {
// 处理传入手机号
String[] phoneArr = phones.replaceAll("", ";").split(";");
// 自定义手机号不区分短信模板
for (String phone : phoneArr) {
// 发送内容
String content = templateContent;
if (CollectionUtil.isNotEmpty(paramList)) {
// 传入参数列表
content = String.format(templateContent, paramList.toArray());
}
smsRecordList.add(this.createRecord(
smsTemplate.getPkId(), null, phone,
content, sendScope, sendType, sendTime, userId, pkCountry
));
}
}
}
if (StringUtils.isNotEmpty(smsRecordList)) {
// 有发送数据则进行处理
if (ESmsSendType.IMMEDIATELY.getValue() == sendType) {
// 立即发送
Date nowDate = new Date();
// 目前单现程推送后续如果发送慢可以考虑多线程处理
smsRecordList.forEach((tSmsRecord -> {
// 已发送
tSmsRecord.setSendStatus(ESmsSendStatus.SEND.getValue());
tSmsRecord.setSendTime(nowDate);
if (null == SmsUtil.sendSms(tSmsRecord.getPhone(), tSmsRecord.getContent())) {
// 发送成功
tSmsRecord.setSendResult(ESmsSendResult.SUCCESS.getValue());
} else {
// 发送失败
tSmsRecord.setSendResult(ESmsSendResult.FAIL.getValue());
}
}));
}
baseMapper.insertBatch(smsRecordList);
}
return null;
}
/**
* 创建短信记录
*
* @param templateId 模板ID
* @param pkMember 接收用户ID
* @param phone 发送手机号
* @param content 发送内容
* @param sendScope 发送范围 -- ESmsSendScope
* @param sendType 发送类型 -- ESmsSendType
* @param sendTime 发送时间
* @param userId 操作用户ID
* @param pkCountry 所属国家
* @return
*/
private TSmsRecord createRecord(Integer templateId, Long pkMember, String phone,
String content, Integer sendScope, Integer sendType,
Date sendTime, Long userId, Integer pkCountry) {
TSmsRecord tSmsRecord = new TSmsRecord();
tSmsRecord.setPkSmsTemplate(templateId);
tSmsRecord.setPkMember(pkMember);
tSmsRecord.setPhone(phone);
tSmsRecord.setContent(content);
tSmsRecord.setSendScope(sendScope);
tSmsRecord.setSendType(sendType);
tSmsRecord.setSendStatus(ESmsSendStatus.NOT_SEND.getValue());
tSmsRecord.setSendResult(ESmsSendResult.NOT_SEND.getValue());
tSmsRecord.setSendTime(sendTime);
tSmsRecord.setPkCreator(userId);
tSmsRecord.setPkCountry(pkCountry);
return tSmsRecord;
}
}

View File

@ -4,8 +4,6 @@ import cn.hutool.json.JSONUtil;
import com.aliyun.dysmsapi20170525.Client;
import com.hzs.common.core.constant.Constants;
import com.hzs.common.core.enums.EAliSmsTemplate;
import com.hzs.common.core.enums.ESmsTemplate;
import com.hzs.common.core.utils.HttpClientUtil;
import com.hzs.common.core.utils.SpringUtils;
import com.hzs.third.sms.config.SmsConfig;
import lombok.extern.slf4j.Slf4j;
@ -16,18 +14,11 @@ import org.springframework.stereotype.Component;
import com.aliyun.dysmsapi20170525.models.*;
import com.aliyun.teaopenapi.models.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Description: 发送短信工具类
*
* @author: jiang chao
* Time: 2022/9/24 9:58
* Classname: SmsUtil
* PackageName: com.hzs.common.utils
* 发送短信工具类
*/
@Slf4j
@Component
@ -35,64 +26,6 @@ public class SmsUtil implements InitializingBean {
private static SmsConfig smsConfig;
// 会员预置短信模板
private static List<String> memberTemplateList;
// 订单预置短信模板
private static List<String> orderTemplateList;
/**
* 发送短信
*
* @param phone 手机号
* @param content 发送内容
* @return
*/
public static String sendSms(String phone, String content) {
if (StringUtils.isAnyEmpty(phone, content)) {
return "手机号或内容为空";
}
if (smsConfig.isEnable()) {
// 只有当开启发送短信才进行发送
String corpid = smsConfig.getCorpId();
String pwd = smsConfig.getPwd();
String url = smsConfig.getUrl();
if (phone.length() == 10 && phone.startsWith("09")) {
// 台湾手机号码处理10位长度以09开头
corpid = smsConfig.getCorpIdInter();
pwd = smsConfig.getPwdInter();
url = smsConfig.getUrl();
}
Map<String, String> paramMap = new HashMap<>();
paramMap.put("corpid", corpid);
paramMap.put("pwd", pwd);
paramMap.put("mobile", phone);
paramMap.put("content", content);
log.info("短信发送参数: {}", paramMap);
String result = HttpClientUtil.get(url, paramMap);
log.info("短信发送结果: {}", result);
if (StringUtils.isNotEmpty(result)) {
if (Integer.parseInt(result) > 0) {
return null;
} else {
log.error("短信发送失败, status: {}", result);
}
}
return "发送失败";
} else {
log.info("短信发送手机:{}, 内容: {}", phone, content);
}
return null;
}
/**
* 发送阿里短信
*
@ -104,7 +37,7 @@ public class SmsUtil implements InitializingBean {
if (StringUtils.isAnyEmpty(phone, code)) {
return "手机号或验证码为空";
}
System.out.println("短信验证码:" + code);
log.info("短信验证码,发送手机号:{}, code:{}", phone, code);
if (smsConfig.isEnable()) {
// 只有当开启发送短信才进行发送
try {
@ -125,11 +58,11 @@ public class SmsUtil implements InitializingBean {
.setTemplateCode(aliSmsTemplate.getCode())
.setTemplateParam(JSONUtil.toJsonStr(templateParam));
log.info("阿里云短信发送参数: {}", sendSmsRequest);
// log.info("阿里云短信发送参数: {}", sendSmsRequest);
SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
log.info("阿里云短信发送结果: {}", sendSmsResponse.getBody());
// log.info("阿里云短信发送结果: {}", sendSmsResponse.getBody());
if (Constants.SUCCESS.equals(sendSmsResponse.getStatusCode())) {
if ("OK".equals(sendSmsResponse.getBody().getCode())) {
@ -144,32 +77,9 @@ public class SmsUtil implements InitializingBean {
return null;
}
public static List<String> getMemberTemplateList() {
return memberTemplateList;
}
public static List<String> getOrderTemplateList() {
return orderTemplateList;
}
@Override
public void afterPropertiesSet() {
smsConfig = SpringUtils.getBean(SmsConfig.class);
// 会员预置短信模板初始化
memberTemplateList = new ArrayList<>();
// 订单预置短信模板初始化
orderTemplateList = new ArrayList<>();
orderTemplateList.add(ESmsTemplate.SMS21.getCode());
orderTemplateList.add(ESmsTemplate.SMS22.getCode());
orderTemplateList.add(ESmsTemplate.SMS23.getCode());
orderTemplateList.add(ESmsTemplate.SMS24.getCode());
orderTemplateList.add(ESmsTemplate.SMS25.getCode());
orderTemplateList.add(ESmsTemplate.SMS26.getCode());
orderTemplateList.add(ESmsTemplate.SMS27.getCode());
orderTemplateList.add(ESmsTemplate.SMS28.getCode());
orderTemplateList.add(ESmsTemplate.SMS29.getCode());
}
}

View File

@ -215,9 +215,9 @@ baofu:
fastCallbackUrl: http://p1.hzs413.com/inter-api/pay/baofu/fast-notify
## 宝付退款回调地址
refundCallbackUrl: http://p1.hzs413.com/inter-api/pay/baofu-refund/notify
## 宝付支付小程序appId海之圣BPay
## 宝付支付小程序appId
appletPayAppId: wx93cdfabba48ff37d
## 宝付支付小程序appSecret海之圣BPay
## 宝付支付小程序appSecret
appletPaySecret: 68984ec2a14e11a7ead9bf4847b6e6e1
@ -267,21 +267,13 @@ huifu:
## 短信配置
sms:
## 凌凯国内短信配置
corpId: CQJT001019
pwd: 3FDA8B
url: https://sdk3.028lk.com:9988/BatchSend2.aspx
## 是否发送短信true发送false不发送
enable: false
## 凌凯国际短信配置
corpIdInter: CQJT000992
pwdInter: 1263BA
urlInter: https://sdk3.028lk.com:9988/IntlSend.aspx
enable: true
## 阿里短信
aliAccessKeyId: LTAI5tSjEQgSVXVrVvDEkcNh
aliAccessKeySecret: do1zRINS8MZ78UG6Vsa3SglZ3jPcOS
aliAccessKeyId: LTAI5tECf4VYcpQNvaZ2bFg6
aliAccessKeySecret: 68vOfID5RWE8KhlMjV9qpMpoX5ZX9D
aliEndpoint: dysmsapi.aliyuncs.com
aliSign: 青岛海之圣电子商务
aliSign: 北方大陆
## 快递100配置
express:

View File

@ -2,26 +2,6 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.third.sms.mapper.TSmsRecordMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.hzs.common.domain.third.sms.TSmsRecord">
<id column="PK_ID" property="pkId"/>
<result column="DEL_FLAG" property="delFlag"/>
<result column="CREATION_TIME" property="creationTime"/>
<result column="MODIFIED_TIME" property="modifiedTime"/>
<result column="PK_COUNTRY" property="pkCountry"/>
<result column="PK_CREATOR" property="pkCreator"/>
<result column="PK_MODIFIED" property="pkModified"/>
<result column="PK_SMS_TEMPLATE" property="pkSmsTemplate"/>
<result column="PK_MEMBER" property="pkMember"/>
<result column="PHONE" property="phone"/>
<result column="CONTENT" property="content"/>
<result column="SEND_SCOPE" property="sendScope"/>
<result column="SEND_TYPE" property="sendType"/>
<result column="SEND_STATUS" property="sendStatus"/>
<result column="SEND_RESULT" property="sendResult"/>
<result column="SEND_TIME" property="sendTime"/>
</resultMap>
<!-- 查询列表 -->
<select id="queryList" resultType="com.hzs.common.domain.third.sms.ext.TSmsRecordExt">
select tsr.*, tst.template_code, tst.template_name
@ -50,22 +30,4 @@
order by tsr.CREATION_TIME desc
</select>
<!-- 批量插入 -->
<insert id="insertBatch">
INSERT ALL
<foreach collection="list" item="item" separator=" ">
into T_SMS_RECORD (
PK_SMS_TEMPLATE, PK_MEMBER, PHONE, CONTENT,
SEND_SCOPE, SEND_TYPE, SEND_STATUS, SEND_RESULT,
SEND_TIME, PK_COUNTRY, PK_CREATOR
)
values (
#{item.pkSmsTemplate}, #{item.pkMember, jdbcType=NUMERIC}, #{item.phone}, #{item.content},
#{item.sendScope}, #{item.sendType}, #{item.sendStatus}, #{item.sendResult},
#{item.sendTime}, #{item.pkCountry}, #{item.pkCreator}
)
</foreach>
SELECT 1 FROM dual
</insert>
</mapper>

View File

@ -1,5 +0,0 @@
https://cloud.jdl.com/#/open-business-document/api-doc/267/841
客户编码010K2141860
账号海之圣2023
密码haizhisheng2023