短信验证码功能

This commit is contained in:
钱涛 2023-06-14 15:51:26 +08:00
parent 8bde871286
commit 57798a8e3e
9 changed files with 202 additions and 20 deletions

View File

@ -35,6 +35,11 @@ public class SalaryCacheKey {
*/
public final static String SALARY_WITHDRAW_PROGRESS = "SALARY_WITHDRAW_PROGRESS";
/**
* 短信验证码缓存
*/
public final static String SALARY_CACHE_SMS_CODE = "SALARY_CACHE_SMS_CODE";
/**
* ecology系统的token
*/

View File

@ -0,0 +1,32 @@
package com.engine.salary.entity.salaryBill.param;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 短信验证码发送参数
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SMSCodeCheckParam {
/**
* 工资单id
*/
private Long id;
/**
* 验证码
*/
private String mobileCode;
}

View File

@ -0,0 +1,28 @@
package com.engine.salary.entity.salaryBill.param;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 短信验证码发送参数
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SMSCodeSendParam {
/**
* 工资单id
*/
private Long id;
}

View File

@ -50,7 +50,7 @@
<select id="getById" resultType="com.engine.salary.entity.salaryBill.po.SalarySendInfoPO">
SELECT
<include refid="baseColumns"/>
FROM hrsa_salary_send_info
FROM hrsa_salary_send_info t
WHERE delete_type = 0
AND id = #{id}
</select>

View File

@ -175,4 +175,16 @@ public interface SalarySendService {
* @param ids
*/
void deleteBySalaryAcctRecordIds(Collection<Long> ids);
/**
* 发送短信验证码
* @param param
*/
void sendMobileCode(SMSCodeSendParam param);
/**
* 校验验证码
* @param param
*/
Boolean checkMobileCode(SMSCodeCheckParam param);
}

View File

@ -1,5 +1,6 @@
package com.engine.salary.service.impl;
import cn.hutool.core.lang.Validator;
import com.alibaba.fastjson.JSONArray;
import com.api.formmode.mybatis.util.SqlProxyHandle;
import com.cloudstore.dev.api.bean.MessageBean;
@ -65,6 +66,7 @@ import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import weaver.common.MessageUtil;
import weaver.hrm.User;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.resource.ResourceComInfo;
@ -74,9 +76,13 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import java.util.stream.Collectors;
import static com.engine.salary.cache.SalaryCacheKey.SALARY_CACHE_SMS_CODE;
/**
* @Description: 工资单发放
* @Author: wangxiangzhong
@ -167,6 +173,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
return ServiceUtil.getService(SalaryBillServiceImpl.class, user);
}
private SalaryCacheService getSalaryCacheService(User user) {
return ServiceUtil.getService(SalaryCacheServiceImpl.class, user);
}
@Override
public SalarySendPO getById(Long salarySendId) {
@ -1436,4 +1445,66 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
getSalarySendInfoMapper().deleteBySalaryAcctRecordIds(ids);
}
}
@Override
public void sendMobileCode(SMSCodeSendParam param) {
Long id = param.getId();
SalarySendInfoPO po = getSalarySendInfoMapper().getById(id);
if (po == null) {
throw new SalaryRunTimeException("未获取工资单发放信息");
}
Long employeeId = po.getEmployeeId();
DataCollectionEmployee employee = getSalaryEmployeeService(user).getEmployeeById(employeeId);
if (employee == null) {
throw new SalaryRunTimeException("未获取人员信息");
}
String mobile = employee.getMobile();
if (Validator.isMobile(mobile)) {
throw new SalaryRunTimeException("手机号信息有误");
}
boolean checkSendSMS = MessageUtil.checkSendSMS();
if (!checkSendSMS) {
throw new SalaryRunTimeException("短信服务异常");
}
//1生成6位验证码
String mobileCode = (int) ((Math.random() * 9 + 1) * 100000) + "";
//失效时间
long expirationTime = LocalDateTime.now().plusMinutes(10L).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
String cacheValue = mobileCode + "_" + expirationTime;
//2验证码缓存10分钟失效
getSalaryCacheService(user).set(SALARY_CACHE_SMS_CODE + "_" + id, cacheValue);
//3发送短信
MessageUtil.sendSMS(mobile, "验证码:" + mobileCode + "有效时间10分钟用于查看工资单请不要告诉他人。");
}
@Override
public Boolean checkMobileCode(SMSCodeCheckParam param) {
Long id = param.getId();
String mobileCode = param.getMobileCode();
//取出验证码
String cacheValue = getSalaryCacheService(user).get(SALARY_CACHE_SMS_CODE + "_" + id);
String[] cache = cacheValue.split("_");
String code = cache[0];
//失效时间
long expirationTime = Long.parseLong(cache[1]);
long nowTime = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
if (nowTime > expirationTime) {
throw new SalaryRunTimeException("验证码已失效,请重新发送");
}
if (!StringUtils.equals(code, mobileCode)) {
throw new SalaryRunTimeException("验证码错误");
}
return true;
}
}

View File

@ -4,7 +4,6 @@ import com.api.formmode.mybatis.util.SqlProxyHandle;
import com.cloudstore.dev.api.util.Util_DataCache;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.biz.EmployBiz;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.hrm.DeptInfo;
import com.engine.salary.entity.hrm.HrmStatus;
@ -462,8 +461,8 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM
List<DataCollectionEmployee> allSalaryEmployees = this.getManageRangeSalaryEmployees(taxAgentId, allRanges, salaryEmployees);
taxAgentEmpSaveParamList.add(getTaxAgentEmpSyncParam(taxAgentId, allSalaryEmployees));
List<TaxAgentManageRangePO> allSubAdminRanges = Optional.ofNullable(allRangeMap.get(taxAgentId + "-" + TaxAgentRangeTypeEnum.SUBADMIN.getValue())).orElse(Collections.emptyList());
subAdminEmpSaveParamList.addAll(getTaxAgentSubAdminEmpSyncParam(taxAgentId, allSubAdminRanges, salaryEmployees));
// List<TaxAgentManageRangePO> allSubAdminRanges = Optional.ofNullable(allRangeMap.get(taxAgentId + "-" + TaxAgentRangeTypeEnum.SUBADMIN.getValue())).orElse(Collections.emptyList());
// subAdminEmpSaveParamList.addAll(getTaxAgentSubAdminEmpSyncParam(taxAgentId, allSubAdminRanges, salaryEmployees));
});
Long employeeId = 0L;
// 同步管理员的人员

View File

@ -512,10 +512,6 @@ public class SalaryBillController {
@Produces(MediaType.APPLICATION_JSON)
public String mySalaryBillList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryBillQueryParam queryParam) {
User user = HrmUserVarify.getUser(request, response);
// if (StringUtils.isEmpty(queryParam.getToken())) {
// throw new SalaryRunTimeException(SalrayCheckSecondAuthConstant.CHECK_SECOND_FAIL_NO_TOKEN);
// }
// queryParam.setEmployeeId((long) user.getUID());
return new ResponseResult<SalaryBillQueryParam, Map<String, Object>>(user).run(getSalarySendWrapper(user)::mySalaryBillList, queryParam);
}
@ -544,18 +540,35 @@ public class SalaryBillController {
}
/******** 工资单发放 end ***********************************************************************************************/
// /**
// *
// *
// * @param
// * @return
// */
// @GET
// @Path("/mySalaryBillItemDetail")
// @Produces(MediaType.APPLICATION_JSON)
// public String mySalaryBillItemDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody) {
//
// }
/**
* 短信验证码
*
* @param param
* @return
*/
@POST
@Path("/sendMobileCode")
@Produces(MediaType.APPLICATION_JSON)
public String sendSMSCode(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SMSCodeSendParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SMSCodeSendParam, Map<String, Object>>(user).run(getSalarySendWrapper(user)::sendMobileCode, param);
}
/**
* 校验验证码
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/checkMobileCode")
@Produces(MediaType.APPLICATION_JSON)
public String checkMobileCode(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SMSCodeCheckParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SMSCodeCheckParam, Boolean>(user).run(getSalarySendWrapper(user)::checkMobileCode, param);
}
}

View File

@ -646,4 +646,26 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy
return datas;
}
/**
* 发送短信验证码
* @param param 短信验证码发送参数
*/
public void sendMobileCode(SMSCodeSendParam param) {
getSalarySendService(user).sendMobileCode(param);
}
/**
* 校验短信验证码
* @param param
* @return
*/
public Boolean checkMobileCode(SMSCodeCheckParam param) {
return getSalarySendService(user).checkMobileCode(param);
}
}