From e06785032b0305e146eb17cce8094476cca2e8ef Mon Sep 17 00:00:00 2001 From: guo Date: Sun, 7 Apr 2024 16:20:41 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E7=BD=AE=E5=AF=86=E7=A0=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SystemUserController.java | 43 ++++++ .../basicdata/service/ISystemUserService.java | 9 ++ .../service/impl/SystemUserServiceImpl.java | 125 +++++++++++++++--- .../controller/UfaceDevApiController.java | 29 +++- .../xz/controller/XzRegistryController.java | 10 +- .../xz/service/IXzRegistryService.java | 3 + .../service/impl/XzRegistryServiceImpl.java | 16 ++- .../zhgd/xmgl/security/WebSecurityConfig.java | 10 +- .../java/com/zhgd/xmgl/util/NumberUtils.java | 22 +++ 9 files changed, 241 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java index 9e04e7368..0323d615a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/SystemUserController.java @@ -14,7 +14,9 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -228,4 +230,45 @@ public class SystemUserController { return Result.success(systemUserService.getTenantListBySn(map)); } + @ApiOperation(value = "星纵验证账号", notes = "星纵验证账号", httpMethod = "POST") + @PostMapping(value = "/xz/checkAccount") + public Result checkAccount(@RequestBody SystemUser systemUser) { + systemUserService.checkAccount(systemUser); + return Result.ok(); + } + + @ApiOperation(value = "根据账号获取邮箱验证码", notes = "根据账号获取邮箱验证码", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "type", required = true, value = "1修改密码", paramType = "body"), + @ApiImplicitParam(name = "account", required = true, value = "账号", paramType = "body"), + }) + @PostMapping(value = "/getEmailCodeByAccount") + public Result getEmailCodeByAccount(@ApiIgnore @RequestBody HashMap paramMap) { + systemUserService.getEmailCodeByAccount(paramMap); + return Result.ok(); + } + + @ApiOperation(value = "重置密码验证邮箱", notes = "重置密码验证邮箱", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "account", required = true, value = "账号", paramType = "body"), + @ApiImplicitParam(name = "code", required = true, value = "邮箱验证码", paramType = "body"), + }) + @PostMapping(value = "/resetPwValidCode") + public Result> resetPwValidCode(@ApiIgnore @RequestBody HashMap paramMap) { + return Result.success(systemUserService.resetPwValidCode(paramMap)); + } + + @ApiOperation(value = "重置密码通过邮箱方式", notes = "重置密码通过邮箱方式", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "account", required = true, value = "账号", paramType = "body"), + @ApiImplicitParam(name = "password", required = true, value = "新密码", paramType = "body"), + @ApiImplicitParam(name = "uuid", required = true, value = "随机id", paramType = "body"), + }) + @PostMapping(value = "/resetPwByEmail") + public Result resetPwByEmail(@ApiIgnore @RequestBody HashMap paramMap) { + systemUserService.resetPwByEmail(paramMap); + return Result.ok(); + } + + } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ISystemUserService.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ISystemUserService.java index ca2329e18..8b8d7838a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ISystemUserService.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ISystemUserService.java @@ -7,6 +7,7 @@ import com.zhgd.xmgl.modules.basicdata.entity.dto.LoginInfoByTokenDto; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -76,4 +77,12 @@ public interface ISystemUserService extends IService { void xzUpdatePw(SystemUser systemUser); List getTenantListBySn(Map map); + + void checkAccount(SystemUser systemUser); + + void getEmailCodeByAccount(HashMap hashMap); + + HashMap resetPwValidCode(HashMap paramMap); + + void resetPwByEmail(HashMap paramMap); } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java index dfd2ff976..64639e3c0 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java @@ -33,13 +33,11 @@ import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper; import com.zhgd.xmgl.modules.worker.service.IUserEnterpriseService; import com.zhgd.xmgl.modules.xz.entity.XzRegistry; import com.zhgd.xmgl.modules.xz.mapper.XzRegistryMapper; +import com.zhgd.xmgl.modules.xz.service.impl.XzRegistryServiceImpl; import com.zhgd.xmgl.security.JwtTokenProvider; import com.zhgd.xmgl.security.entity.UserInfo; import com.zhgd.xmgl.security.util.SecurityUtils; -import com.zhgd.xmgl.util.EnvironmentUtil; -import com.zhgd.xmgl.util.GovDanzhouSafeHatUtil; -import com.zhgd.xmgl.util.MessageUtil; -import com.zhgd.xmgl.util.PwUtil; +import com.zhgd.xmgl.util.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -76,6 +74,8 @@ public class SystemUserServiceImpl extends ServiceImpl getTenantListBySn(Map map) { return baseMapper.getTenantListBySn(map); } + @Override + public void checkAccount(SystemUser systemUser) { + checkCode(systemUser); + Integer count = systemUserMapper.selectCount(new LambdaQueryWrapper() + .eq(SystemUser::getAccount, systemUser.getAccount())); + if (count == 0) { + throw new OpenAlertException("账号不存在"); + } + } + + @Override + public void getEmailCodeByAccount(HashMap hashMap) { + Integer type = MapUtils.getInteger(hashMap, "type"); + if (Objects.equals(type, 1)) { + String account = MapUtils.getString(hashMap, "account"); + SystemUser systemUser = new SystemUser(); + systemUser.setAccount(account); + SystemUser su = systemUserMapper.selectOne(new LambdaQueryWrapper() + .eq(SystemUser::getAccount, systemUser.getAccount())); + if (su == null) { + throw new OpenAlertException("账号不存在"); + } + String code = NumberUtils.randomNum(6); + redisRepository.set(UPDATE_PW_EMAIL_CODE + su.getAccount(), code, 1200L); + HashMap registryEmailMap = xzRegistryService.getRegistryEmail(systemUser); + String subject = "重置密码"; + String content = "您收到这封邮件是因为我们收到了一个重设密码的请求,您的账号是" + systemUser.getAccount() + ",验证码是," + code + + "请注意,为了您的账户安全,请勿与他人分享您的验证码。"; + emailUtils.sendSimpleMail(MapUtils.getString(registryEmailMap, "email"), subject, content); + } else { + throw new OpenAlertException("type不能为空"); + } + } + + @Override + public HashMap resetPwValidCode(HashMap paramMap) { + String account = MapUtils.getString(paramMap, "account"); + String code = MapUtils.getString(paramMap, "code"); + String key = UPDATE_PW_EMAIL_CODE + account; + Object o = redisRepository.get(key); + redisRepository.del(key); + if (!Objects.equals(code, o)) { + throw new OpenAlertException("验证码不正确或者失效"); + } + HashMap map = new HashMap<>(); + String uuid = IdUtil.randomUUID(); + map.put("uuid", uuid); + String uuidKey = UPDATE_PW_UUID + account; + redisRepository.set(uuidKey, uuid, 300L); + return map; + } + + @Override + public void resetPwByEmail(HashMap paramMap) { + String account = MapUtils.getString(paramMap, "account"); + String uuid = MapUtils.getString(paramMap, "uuid"); + String password = MapUtils.getString(paramMap, "password"); + String uuidKey = UPDATE_PW_UUID + account; + Object o = redisRepository.get(uuidKey); + if (!Objects.equals(uuid, o)) { + throw new OpenAlertException("uuid不正确或者失效"); + } + SystemUser systemUser = systemUserMapper.selectOne(new LambdaQueryWrapper() + .eq(SystemUser::getAccount, account)); + String showPassword = systemUser.getShowPassword(); + systemUser.setPwUpdateTime(new Date()); + systemUser.setPassword(passwordEncoder.encode(showPassword)); + systemUser.setShowPassword(password); + systemUserMapper.updateById(systemUser); + + } + public static void main(String[] args) { String timestamp = "1711613997695"; String pw = "123"; diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/controller/UfaceDevApiController.java b/src/main/java/com/zhgd/xmgl/modules/worker/controller/UfaceDevApiController.java index 68cf7a470..166b4f758 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/controller/UfaceDevApiController.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/controller/UfaceDevApiController.java @@ -1,7 +1,5 @@ package com.zhgd.xmgl.modules.worker.controller; -import com.zhgd.jeecg.common.api.vo.Result; -import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance; import com.zhgd.xmgl.modules.worker.entity.dto.GetWorkerInfoByDevDto; import com.zhgd.xmgl.modules.worker.entity.vo.GetWorkerInfoByDevVo; import com.zhgd.xmgl.modules.worker.entity.vo.UploadAttendanceByDevDto; @@ -12,6 +10,10 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import javax.ws.rs.GET; +import java.util.HashMap; @RestController @RequestMapping @@ -24,16 +26,35 @@ public class UfaceDevApiController { IWorkerAttendanceService workerAttendanceService; @ApiOperation(value = "下载白名单(拉取允许通行人员信息)", notes = "下载白名单(拉取允许通行人员信息)", httpMethod = "GET") - @GetMapping(value = "/service-address/workers") + @GetMapping(value = "/workers") public GetWorkerInfoByDevVo getWorkerInfoByDev(GetWorkerInfoByDevDto dto) { return workerInfoService.getWorkerInfoByDev(dto); } @ApiOperation(value = "考勤照片上传", notes = "考勤照片上传", httpMethod = "POST") - @PostMapping(value = "/service-address/photo") + @PostMapping(value = "/photo") public GetWorkerInfoByDevVo uploadAttendanceByDev(@RequestBody UploadAttendanceByDevDto dto) { return workerAttendanceService.uploadAttendanceByDev(dto); } + @ApiOperation(value = "时间同步", notes = "时间同步", httpMethod = "POST") + @GetMapping(value = "/init") + public String init(@ApiIgnore @RequestParam HashMap paramMap) { + long time = System.currentTimeMillis() / 1000; + return "{\n" + + "\"success\": true,\n" + + "\"code\": 0,\n" + + "\"message\": \"success\",\n" + + "\"time\": " + time + ",\n" + + "\"data\": {\n" + + " \"dgBaseInfo\": {\n" + + " },\n" + + " \"setting\": {\n" + + " }\n" + + "},\n" + + "\"event\":\"init\"\n" + + "}"; + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRegistryController.java b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRegistryController.java index 68ae7844c..d38c78b80 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRegistryController.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzRegistryController.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.wf.captcha.base.Captcha; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.redis.lock.RedisRepository; +import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.xz.captcha.LoginCode; import com.zhgd.xmgl.modules.xz.captcha.LoginCodeEnum; import com.zhgd.xmgl.modules.xz.captcha.LoginProperties; @@ -22,7 +23,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -145,7 +145,7 @@ public class XzRegistryController { captchaValue = captchaValue.split("\\.")[0]; } // 保存 - redisRepository.set(uuid, captchaValue, loginProperties.getLoginCode().getExpiration()); + redisRepository.set(uuid, captchaValue, loginProperties.getLoginCode().getExpiration() * 60); // 验证码信息 Map imgResult = new HashMap(2) {{ put("img", captcha.toBase64()); @@ -169,4 +169,10 @@ public class XzRegistryController { public static void main(String[] args) { System.out.println(DateUtil.parse("2024-03-30").getTime() / 1000); } + + @ApiOperation(value = "根据账号查询注册邮箱", notes = "根据账号查询注册邮箱", httpMethod = "POST") + @PostMapping(value = "/getRegistryEmail") + public Result> getRegistryEmail(@RequestBody SystemUser systemUser) { + return Result.success(xzRegistryService.getRegistryEmail(systemUser)); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzRegistryService.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzRegistryService.java index e67a561ff..268e8ac5c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzRegistryService.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzRegistryService.java @@ -1,5 +1,6 @@ package com.zhgd.xmgl.modules.xz.service; +import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.xz.entity.XzRegistry; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -26,4 +27,6 @@ public interface IXzRegistryService extends IService { void delete(String id); void approval(XzRegistry xzRegistry); + + HashMap getRegistryEmail(SystemUser systemUser); } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzRegistryServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzRegistryServiceImpl.java index d7be87eb7..13f4da582 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzRegistryServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzRegistryServiceImpl.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.sun.mail.smtp.SMTPSendFailedException; import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.system.query.QueryGenerator; import com.zhgd.xmgl.modules.basicdata.entity.SystemLogoConfig; @@ -104,6 +103,7 @@ public class XzRegistryServiceImpl extends ServiceImpl getRegistryEmail(SystemUser systemUser) { + XzRegistry xzRegistry = xzRegistryMapper.selectOne(new LambdaQueryWrapper() + .eq(XzRegistry::getAccount, systemUser.getAccount()) + .eq(XzRegistry::getApprovalProcess, 2) + .last("order by create_time desc limit 1") + ); + if (xzRegistry == null) { + throw new OpenAlertException("账号未注册成功"); + } + HashMap map = new HashMap<>(); + map.put("email", xzRegistry.getEmail()); + return map; + } } diff --git a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java index 2b4ff1538..7edf11eae 100644 --- a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java +++ b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java @@ -269,8 +269,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers("/xmgl/smartBeamFieldMaintainData/**").permitAll() .antMatchers("/xmgl/smartBeamFieldMakeBeamPedestal/list").permitAll() .antMatchers("/xmgl/smartBeamFieldBeam/countSmartBeamFieldBeam").permitAll() - .antMatchers("/service-address/workers").permitAll() - .antMatchers("/service-address/photo").permitAll() + .antMatchers("/workers").permitAll() + .antMatchers("/photo").permitAll() + .antMatchers("/init").permitAll() .antMatchers("/xmgl/sewageData/add").permitAll() .antMatchers("/xmgl/rtTool/updateRtToolStatus").permitAll() .antMatchers("/xmgl/rtWorkTicket/countRtWorkTicket").permitAll() @@ -347,6 +348,11 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers("/xmgl/exteriorScaffoldingMonitorType/page").permitAll() .antMatchers("/xmgl/exteriorScaffoldingMonitorType/selectMonitorTypeCount").permitAll() .antMatchers("/xmgl/hikvision/eventCallback").permitAll() + .antMatchers("/xmgl/systemUser/xz/checkAccount").permitAll() + .antMatchers("/xmgl/xzRegistry/getRegistryEmail").permitAll() + .antMatchers("/xmgl/systemUser/getEmailCodeByAccount").permitAll() + .antMatchers("/xmgl/systemUser/resetPwValidCode").permitAll() + .antMatchers("/xmgl/systemUser/resetPwByEmail").permitAll() .antMatchers(HttpMethod.OPTIONS, "/**").anonymous() .anyRequest().authenticated() // 剩下所有的验证都需要验证. .and() diff --git a/src/main/java/com/zhgd/xmgl/util/NumberUtils.java b/src/main/java/com/zhgd/xmgl/util/NumberUtils.java index c88989408..eb9209c98 100644 --- a/src/main/java/com/zhgd/xmgl/util/NumberUtils.java +++ b/src/main/java/com/zhgd/xmgl/util/NumberUtils.java @@ -4,6 +4,8 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; +import java.util.Random; + public class NumberUtils { /** * 除以 @@ -124,4 +126,24 @@ public class NumberUtils { } return null; } + + /** + * 生成数字随机数 + * + * @param place 定义随机数的位数 + */ + public static String randomNum(int place) { + String base = "0123456789"; + StringBuffer sb = new StringBuffer(); + Random rd = new Random(); + for (int i = 0; i < place; i++) { + sb.append(base.charAt(rd.nextInt(base.length()))); + } + return sb.toString(); + } + + public static void main(String[] args) { + System.out.println(randomNum(6)); + } + }