diff --git a/src/com/engine/salary/cache/SalaryCacheKey.java b/src/com/engine/salary/cache/SalaryCacheKey.java index 76d19ea7d..27017f24b 100644 --- a/src/com/engine/salary/cache/SalaryCacheKey.java +++ b/src/com/engine/salary/cache/SalaryCacheKey.java @@ -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 */ diff --git a/src/com/engine/salary/entity/salaryBill/param/SMSCodeCheckParam.java b/src/com/engine/salary/entity/salaryBill/param/SMSCodeCheckParam.java new file mode 100644 index 000000000..322db1253 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SMSCodeCheckParam.java @@ -0,0 +1,32 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 短信验证码发送参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SMSCodeCheckParam { + + /** + * 工资单id + */ + private Long id; + + /** + * 验证码 + */ + private String mobileCode; + +} diff --git a/src/com/engine/salary/entity/salaryBill/param/SMSCodeSendParam.java b/src/com/engine/salary/entity/salaryBill/param/SMSCodeSendParam.java new file mode 100644 index 000000000..9d25ea87a --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SMSCodeSendParam.java @@ -0,0 +1,28 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 短信验证码发送参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SMSCodeSendParam { + + /** + * 工资单id + */ + private Long id; + + +} diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml index d609b4e03..95a44fd54 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendInfoMapper.xml @@ -50,7 +50,7 @@ diff --git a/src/com/engine/salary/service/SalarySendService.java b/src/com/engine/salary/service/SalarySendService.java index d85b9cd5d..36864da21 100644 --- a/src/com/engine/salary/service/SalarySendService.java +++ b/src/com/engine/salary/service/SalarySendService.java @@ -175,4 +175,16 @@ public interface SalarySendService { * @param ids */ void deleteBySalaryAcctRecordIds(Collection ids); + + /** + * 发送短信验证码 + * @param param + */ + void sendMobileCode(SMSCodeSendParam param); + + /** + * 校验验证码 + * @param param + */ + Boolean checkMobileCode(SMSCodeCheckParam param); } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 46c7cdd0b..581d9adce 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -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; + } } diff --git a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java index 680eb9337..44fcad1c8 100644 --- a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java @@ -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 allSalaryEmployees = this.getManageRangeSalaryEmployees(taxAgentId, allRanges, salaryEmployees); taxAgentEmpSaveParamList.add(getTaxAgentEmpSyncParam(taxAgentId, allSalaryEmployees)); - List allSubAdminRanges = Optional.ofNullable(allRangeMap.get(taxAgentId + "-" + TaxAgentRangeTypeEnum.SUBADMIN.getValue())).orElse(Collections.emptyList()); - subAdminEmpSaveParamList.addAll(getTaxAgentSubAdminEmpSyncParam(taxAgentId, allSubAdminRanges, salaryEmployees)); +// List allSubAdminRanges = Optional.ofNullable(allRangeMap.get(taxAgentId + "-" + TaxAgentRangeTypeEnum.SUBADMIN.getValue())).orElse(Collections.emptyList()); +// subAdminEmpSaveParamList.addAll(getTaxAgentSubAdminEmpSyncParam(taxAgentId, allSubAdminRanges, salaryEmployees)); }); Long employeeId = 0L; // 同步管理员的人员 diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 477a173c7..46b1ad642 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -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>(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>(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(user).run(getSalarySendWrapper(user)::checkMobileCode, param); + } } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 19dc48f78..914ca60d5 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -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); + } } + + + + +