diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java index c0916d8..312e8d5 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTableTemplateService.java @@ -28,6 +28,13 @@ public interface ISysTableTemplateService { List findSysTableTemplate(SysTableTemplate sysTableTemplate); /** + * 根据id查询 + * @param sysTableTemplateId + * @return + */ + SysTableTemplate getSysTableTemplateById(Long sysTableTemplateId); + + /** * 更新table模板,如果不存在,则新增对应的模板 * @param sysTableTemplate * @return @@ -54,4 +61,20 @@ public interface ISysTableTemplateService { * @return */ Boolean isExistSysTableTemplate(SysTableTemplate sysTableTemplate); + + + /** + * 判断模板是否存在 + * @param id + * @return + */ + Boolean isExistSysTableTemplateById(Long id); + + + /** + * 判断模板是否存在 + * @param ids + * @return + */ + int deleteSysTableTemplateByIds(Long[] ids); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserPasswordService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserPasswordService.java index ef0ae46..e8822d5 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserPasswordService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserPasswordService.java @@ -38,4 +38,12 @@ public interface ISysUserPasswordService extends ICrudService { @ApiOperation(value = "根据密码反查") public List findPasswordByPassword(String password); + + /** + * 修改密码,根据密码id,和新密码 + * @param pwdId + * @param newPwd + */ + @ApiOperation(value = "供应商忘记密码") + void updatePasswordByPwdIdAndNewPwd(Long pwdId,String newPwd); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java index 87a843e..90e3052 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java @@ -85,6 +85,14 @@ public interface ISysUserService { void updateSysUserPassword(Long userId, String password, String newPwd) throws Exception; /** + * 根据登录名修改密码,供应商已经通过验证码验证 + * @param loginName + * @param password + */ + @ApiOperation(value = "供应商修改密码",notes = "供应商修改密码") + void updateSysUserPwdByLoginName(String loginName,String password); + + /** * 刷新账号登录信息 * * @param userId @@ -259,6 +267,15 @@ public interface ISysUserService { SysUser getSysUserByLoginName(String loginName); /** + * 根据登录名+email获取账号信息 + * @param loginName + * @param email + * @return + */ + @ApiOperation(value = "获取账号信息",notes = "查询用户信息-根据登录名称+邮箱查询") + SysUser getSysUserByLoginNameAndEmail(String loginName,String email); + + /** * 根据手机号查询账号 * * @param email diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index 9012600..60835b9 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -63,6 +63,15 @@ i3plus-icloud-screen + + i3plus.ext.qms + i3plus-ext-qms-icloud + + + + i3plus.eam + i3plus-eam-icloud + i3plus.pojo diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/ScanPackageConfiguration.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/ScanPackageConfiguration.java index 40f7947..40251cb 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/ScanPackageConfiguration.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/ScanPackageConfiguration.java @@ -1,35 +1,36 @@ -//package cn.estsh.i3plus.core.apiservice.configuration; -// -//import cn.estsh.i3plus.platform.common.util.CommonConstWords; -//import cn.estsh.i3plus.pojo.base.jpa.factory.BaseRepositoryFactoryBean; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.boot.autoconfigure.domain.EntityScan; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -// -///** -// * @Description : 需要扫描其他包的配置文件 -// * 此类专门添加需要单独加载的其他模块的包 -// * @Reference : -// * @Author : alwaysfrin -// * @CreateDate : 2018-12-12 20:49 -// * @Modify: -// **/ -//@Configuration -////扫描需要单独处理的包 -//@EntityScan(basePackages = { -// "cn.estsh.i3plus.**.platbean" -//}) -// -////需要单独处理的其他模块包 -//@EnableJpaRepositories(basePackages = { -// "cn.estsh.i3plus.**.platrepository" -//}, repositoryFactoryBeanClass = BaseRepositoryFactoryBean.class) -//public class ScanPackageConfiguration { -// public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); -// -// public ScanPackageConfiguration(){ -// LOGGER.info("【扫描关联包...】"); -// } -//} +package cn.estsh.i3plus.core.apiservice.configuration; + +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.jpa.factory.BaseRepositoryFactoryBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; + +/** + * @Description : 需要扫描其他包的配置文件 + * 此类专门添加需要单独加载的其他模块的包 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-12-12 20:49 + * @Modify: + **/ +@Configuration +//扫描需要单独处理的包 +@EnableFeignClients(basePackages = {//微服方法路径(需要在组件扫面中添加熔断类路径) + "${impp.icloud.ext-packages:}.**" +}) +@ComponentScan(basePackages = { + //微服熔断路径 扫描qms iCloud熔断路径 + "${impp.icloud.ext.fallback-packages:}.**" +}) +public class ScanPackageConfiguration { + public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + public ScanPackageConfiguration(){ + LOGGER.info("【扫描关联包...】"); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index 349e5b5..6910a76 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginStrategyService; import cn.estsh.i3plus.core.api.iservice.busi.*; import cn.estsh.i3plus.core.apiservice.controller.busi.*; +import cn.estsh.i3plus.core.apiservice.util.MailUtil; import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -15,76 +16,66 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.annotation.AnnoIgnoreLog; -import cn.estsh.i3plus.pojo.base.bean.*; +import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; +import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal; +import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.model.common.CloudPagerModel; +import cn.estsh.i3plus.pojo.model.common.ImppEmail; import cn.estsh.i3plus.pojo.model.common.ImppSmsContent; +import cn.estsh.i3plus.pojo.model.common.UserModel; import cn.estsh.i3plus.pojo.model.license.ImppLicense; -import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; -import cn.estsh.i3plus.pojo.model.platform.SysRoleModel; -import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; -import cn.estsh.i3plus.pojo.model.platform.UserDetailPagerModel; +import cn.estsh.i3plus.pojo.model.platform.*; import cn.estsh.i3plus.pojo.platform.bean.*; -import cn.estsh.i3plus.sdk.dingtalk.cn.estsh.i3plus.sdk.service.IDingTalkService; +import cn.estsh.i3plus.sdk.dingtalk.dingrobot.DingRobotRequestBody; +import cn.estsh.i3plus.sdk.dingtalk.service.IDingTalkService; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; -import cn.estsh.impp.framework.boot.fileservice.ImppFileService; import cn.estsh.impp.framework.boot.license.ImppLicenseTool; import cn.estsh.impp.framework.boot.license.serviceimpl.ImppLicenseDecoder; -import cn.estsh.impp.framework.boot.util.ImppRedis; -import cn.estsh.impp.framework.boot.util.LocaleUtils; -import cn.estsh.impp.framework.boot.util.RedisCacheTool; -import cn.estsh.impp.framework.boot.util.ResultBean; -import cn.estsh.impp.framework.boot.util.SpringContextsUtil; -import cn.estsh.impp.framework.boot.util.ValidatorBean; +import cn.estsh.impp.framework.boot.util.*; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest; +import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse; +import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTOHeaders; +import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTORequest; +import com.aliyun.dingtalkrobot_1_0.models.BatchSendOTOResponse; +import com.aliyun.tea.TeaException; +import com.aliyun.teaopenapi.models.Config; +import com.aliyun.teautil.models.RuntimeOptions; +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.OapiV2UserGetbymobileRequest; import com.dingtalk.api.response.OapiV2UserGetResponse; +import com.dingtalk.api.response.OapiV2UserGetbymobileResponse; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import com.taobao.api.ApiException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; -import org.apache.shiro.authc.AuthenticationException; -import org.apache.shiro.authc.CredentialsException; -import org.apache.shiro.authc.ExpiredCredentialsException; -import org.apache.shiro.authc.IncorrectCredentialsException; -import org.apache.shiro.authc.LockedAccountException; -import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authc.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.BiFunction; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * @Description : @@ -107,6 +98,9 @@ public class WhiteController extends CoreBaseController { private SysUserInfoController sysUserInfoController; @Autowired + private ISysUserService sysUserService; + + @Autowired private ISysLocaleLanguageService sysLocaleLanguageService; @Autowired @@ -338,6 +332,7 @@ public class WhiteController extends CoreBaseController { return ResultBean.success("查询成功").setResultList(menuList); } + @GetMapping(value = "/auth/dingtalk/login") @ApiOperation(value = "登录", notes = "登录") public ResultBean loginByPhoneNumber(HttpServletRequest request, String dingTalkTmpAuthCode, @@ -440,7 +435,7 @@ public class WhiteController extends CoreBaseController { if (e.getCause() instanceof ImppBusiException) { ImppBusiException imppBusiException = (ImppBusiException) e.getCause(); result.setErrorMsg(LocaleUtils.getLocaleRes(imppBusiException.getErrorDetail())); - }else { + } else { result.setErrorMsg(e.getCause().getMessage()); } } else { @@ -458,8 +453,8 @@ public class WhiteController extends CoreBaseController { userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR; LOGGER.warn("Impp业务异常Exception 登录失败 ", e); } finally { - if (result != null && !result.isSuccess() ){ - if(CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue() == userLoginStatus.getValue()){ + if (result != null && !result.isSuccess()) { + if (CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue() == userLoginStatus.getValue()) { userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR; } } @@ -467,7 +462,7 @@ public class WhiteController extends CoreBaseController { recordSysUserLog(null, loginModel.getLoginName(), userLoginStatus.getValue()); } - LOGGER.info("会员{}登陆登录完成,登录{},语言:{} , 登录耗时:{}", loginModel.getLoginName(),result.isSuccess()? "成功":"失败", BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime)); + LOGGER.info("会员{}登陆登录完成,登录{},语言:{} , 登录耗时:{}", loginModel.getLoginName(), result.isSuccess() ? "成功" : "失败", BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime)); return result; } @@ -727,6 +722,12 @@ public class WhiteController extends CoreBaseController { Arrays.asList(CommonEnumUtil.LOG_LOGIN_PLATFORM.values())); } + @GetMapping("/sys-auth-platform") + @ApiOperation(value = "登录授权标识", notes = "登录授权标识") + public ResultBean getAuthPlatform() { + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.AUTH_PLATFORM.values())); + } @GetMapping("/sys-organize/list") @ApiOperation(value = "获取全部组织", notes = "获取全部组织") @@ -966,10 +967,60 @@ public class WhiteController extends CoreBaseController { return sysUserInfoController.querySysUserInfo(cloudPagerModel.getObj(), cloudPagerModel.getPager()); } + /** + * 根据登录名,邮箱获取用户账号信息 + * + * @param sysUser + * @return + */ + @PostMapping(value = "/user/query-user") + @ApiOperation(value = "根据条件查询单个用户信息", notes = "根据条件查询单个用户信息") + public ResultBean querySysUser(@RequestBody SysUser sysUser) { + ValidatorBean.checkNotNull(sysUser.getUserLoginName(), "用户登录名不能为空!"); + ValidatorBean.checkNotNull(sysUser.getUserEmail(), "用户email不能为空!"); + SysUser user = null; + try { + user = sysUserService.getSysUserByLoginNameAndEmail(sysUser.getUserLoginName(), sysUser.getUserEmail()); + } catch (ImppBusiException e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功!").setResultObject(user); + } + + @PostMapping(value = "/sendEmail") + @ApiOperation(value = "无需登录,发送邮件") + public ResultBean sendEmail(@RequestBody ImppEmail imppEmail) { + ValidatorBean.checkNotNull(imppEmail.getContent(), "消息内容不能为空"); + ValidatorBean.checkNotNull(imppEmail.getEmail(), "email地址不能为空"); + try { + MailUtil mailUtil = new MailUtil(); + mailUtil.init(); + mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getDescription()); + mailUtil.setNick(imppEmail.getNick()); + mailUtil.setSubject(imppEmail.getSubject()); + mailUtil.setTo(imppEmail.getEmail()); + mailUtil.setBody(imppEmail.getContent()); + mailUtil.send(); + } catch (Exception e) { + LOGGER.error("发送邮件:{}失败:{}", imppEmail.getEmail(), e.getMessage()); + return ResultBean.fail("发送失败,请检查邮箱是否输入正确!"); + } + return ResultBean.success("验证码已发送!"); + } + + @PostMapping(value = "/update-vendor-pwd") + @ApiOperation(value = "忘记密码") + public ResultBean updateVendorPwd(@RequestBody UserModel userModel) { + ValidatorBean.checkNotNull(userModel.getLoginName(), "登录名不能为空!"); + ValidatorBean.checkNotNull(userModel.getPassword(), "密码不能为空!"); + sysUserService.updateSysUserPwdByLoginName(userModel.getLoginName(), userModel.getPassword()); + return ResultBean.success("修改成功!"); + } + @PostMapping("/sendSms") @ApiOperation("无需登录 发送短信") - public ResultBean sendSms(@RequestBody ImppSmsContent imppSmsContent){ - return smsSendRecordController.send(imppSmsContent); + public ResultBean sendSms(@RequestBody ImppSmsContent imppSmsContent) { + return smsSendRecordController.send(imppSmsContent); } @@ -989,8 +1040,8 @@ public class WhiteController extends CoreBaseController { } //过滤SysRefUserRole roleList = sysRoleService.findAllByRoleProperty(sysRole); - if (ObjectUtils.isEmpty(roleList)){ - return ResultBean.success("操作成功"); + if (ObjectUtils.isEmpty(roleList)) { + return ResultBean.success("操作成功"); } List roleIdList = roleList.stream().map(el -> el.getId()).collect(Collectors.toList()); @@ -1007,13 +1058,186 @@ public class WhiteController extends CoreBaseController { * 根据登录的用户名批量修改账号状态 * * @param userLoginNames 用户名数组 - * @param status 状态 + * @param status 状态 * @return 处理结果 */ @PutMapping(value = "/batch-status/userLoginNames") @ApiOperation(value = "根据用户名批量修改账号状态", notes = "根据用户名批量修改账号状态") public ResultBean updateBatchStatusByUserLoginNames(String[] userLoginNames, Integer status) { - return sysUserController.updateBatchStatusByUserLoginNames(userLoginNames,status); + return sysUserController.updateBatchStatusByUserLoginNames(userLoginNames, status); + } + + + private static final Long ACCESS_TOKEN_EXPIRE_TIME = 7080L; + private static final String ACCESS_TOKEN_KEY = "ding_talk:access_token"; + + /** + * 钉钉单聊机器人批量发送消息 + * @param dingSendBatchRequestModel + * @return + */ + @PostMapping(value = "/dingRobot/sendBatchRequest") + @ApiOperation(value = "根据手机号 钉钉单聊机器人批量发送消息", notes = "根据手机号 钉钉单聊机器人批量发送消息") + public ResultBean singleRobotsendBatchRequest(@RequestBody DingSendBatchRequestModel dingSendBatchRequestModel ) { + if(ObjectUtils.isEmpty(dingSendBatchRequestModel)){ + return ResultBean.fail("消息内容不能为空"); + } + List phoneNumberList = dingSendBatchRequestModel.getPhoneNumberList(); + String title = dingSendBatchRequestModel.getTitle(); + String content = dingSendBatchRequestModel.getContent(); + if (StringUtils.isBlank(content)) { + return ResultBean.fail("消息内容不能为空"); + } + if (ObjectUtils.isEmpty(phoneNumberList)) { + return ResultBean.fail("手机号不能为空"); + } + phoneNumberList = phoneNumberList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList()); + if (ObjectUtils.isEmpty(phoneNumberList)) { + return ResultBean.fail("手机号不能为空"); + } + Config config = new Config(); + config.protocol = "https"; + config.regionId = "central"; + com.aliyun.dingtalkrobot_1_0.Client client = null; + try { + client = new com.aliyun.dingtalkrobot_1_0.Client(config); + } catch (Exception e) { + e.printStackTrace(); + return ResultBean.fail(e).setMsg("发送失败"); + } + BatchSendOTOHeaders batchSendOTOHeaders = new BatchSendOTOHeaders(); + batchSendOTOHeaders.xAcsDingtalkAccessToken = getAccessToken(); + BatchSendOTORequest batchSendOTORequest = new BatchSendOTORequest(); + List userIdList = new ArrayList(); + phoneNumberList.forEach(el -> { + ResultBean result = getDingUserIdByPhoneNumber(el, batchSendOTOHeaders.xAcsDingtalkAccessToken); + if (result.isSuccess()) { + userIdList.add((String) result.getResultObject()); + } + + }); + if (userIdList.isEmpty()) { + return ResultBean.fail("发送失败,无法根据手机号获取用户id"); + } +// userIdList.add("27202755621041923"); +// userIdList.add("070537336424114523"); + + String dingTalkAppKey = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_KEY); + batchSendOTORequest.setRobotCode(dingTalkAppKey); + batchSendOTORequest.setUserIds(userIdList); + // markdown officialImageMsg + DingRobotRequestBody requestBody = generateMarkdown(title, content); + batchSendOTORequest.setMsgKey("sampleMarkdown"); + batchSendOTORequest.setMsgParam(JSON.toJSONString(requestBody.getMarkdown())); + try { + BatchSendOTOResponse response = client.batchSendOTOWithOptions(batchSendOTORequest, batchSendOTOHeaders, new RuntimeOptions()); + System.out.println(JSON.toJSONString(response)); + } catch (TeaException err) { + err.printStackTrace(); + if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { + // err 中含有 code 和 message 属性,可帮助开发定位问题 + } + return ResultBean.fail(err).setMsg("发送失败"); + + } catch (Exception _err) { + _err.printStackTrace(); + TeaException err = new TeaException(_err.getMessage(), _err); + if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { + // err 中含有 code 和 message 属性,可帮助开发定位问题 + } + return ResultBean.fail(err).setMsg("发送失败"); + } + return ResultBean.success("发送成功"); + } + + private DingRobotRequestBody generateMarkdown(String title, String content) { + DingRobotRequestBody dingRobotRequestBody = new DingRobotRequestBody(); + DingRobotRequestBody.MarkDown markDown = new DingRobotRequestBody.MarkDown(); + markDown.setTitle(title); + dingRobotRequestBody.setMsgType("markdown"); +// markDown.setText(" # Andon 通知" + +// "\n"+ +// "\n"+ +// " [![qGTEi6.png](https://s1.ax1x.com/2022/03/24/qGTEi6.png)](https://imgtu.com/i/qGTEi6) EP产线-01工位,物料缺料,请及时处理 " +// ); +// markDown.setText(" # Andon 通知" + +// "\n"+ +// "\n"+ +// " [![qGTEi6.png](https://s1.ax1x.com/2022/03/24/qGTEi6.png)](https://imgtu.com/i/qGTEi6) EP产线-01工位,物料缺料,请及时处理 " +// ); +// markDown.setText(" ## Andon 通知" + +// "\n"+ +// "\n"+ +// " [![qGTEi6.png](https://s1.ax1x.com/2022/03/24/qGTEi6.png)](https://imgtu.com/i/qGTEi6) EP产线-01工位,物料缺料,处理措施:联络供应商送货" +// ); + markDown.setText(content); + dingRobotRequestBody.setMarkDown(markDown); + return dingRobotRequestBody; + } + + /** + * 根据手机号获取钉钉的uid + * + * @param phoneNumber + * @return + */ + public ResultBean getDingUserIdByPhoneNumber(String phoneNumber, String accessToken) { + try { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile"); + OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest(); + req.setMobile(phoneNumber); +// req.setMobile("13298408382"); + OapiV2UserGetbymobileResponse rsp = client.execute(req, accessToken); + return ResultBean.success("获取用户id成功").setResultObject(rsp.getResult().getUserid()); + } catch (ApiException e) { + e.printStackTrace(); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 获取accessToken + * + * @return + */ + private String getAccessToken() { + Object accessTokenCached = redisCore.getObject(ACCESS_TOKEN_KEY); + if (accessTokenCached != null) { + return String.valueOf(accessTokenCached); + } + Config config = new Config(); + config.protocol = "https"; + config.regionId = "central"; + com.aliyun.dingtalkoauth2_1_0.Client client = null; + String dingTalkAppKey = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_KEY); + String dingTalkAppSecret = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_SECRET); + try { + client = new com.aliyun.dingtalkoauth2_1_0.Client(config); + } catch (Exception e) { + e.printStackTrace(); + } + GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest() + .setAppKey(dingTalkAppKey) + .setAppSecret(dingTalkAppSecret); + try { + GetAccessTokenResponse response = client.getAccessToken(getAccessTokenRequest); + if (!StringUtils.isEmpty(response.body.accessToken)) { + redisCore.putObject(ACCESS_TOKEN_KEY, response.body.accessToken, ACCESS_TOKEN_EXPIRE_TIME); + } + return response.body.accessToken; + } catch (TeaException err) { + if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { + // err 中含有 code 和 message 属性,可帮助开发定位问题 + } + + } catch (Exception _err) { + TeaException err = new TeaException(_err.getMessage(), _err); + if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { + // err 中含有 code 和 message 属性,可帮助开发定位问题 + } + + } + return ""; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java index 4e182e4..2b41b1f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/PersonnelController.java @@ -116,7 +116,7 @@ public class PersonnelController extends CoreBaseController { } info.setUserInfoStatus(CommonEnumUtil.USER_INFO_STATUS.INCUMBENT.getValue()); - if (info.getUserLoginNum() == null){ + if (info.getUserLoginNum() == null) { info.setUserLoginNum(0); } info.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); @@ -125,7 +125,7 @@ public class PersonnelController extends CoreBaseController { user.setUserType(CommonEnumUtil.USER_TYPE.USER.getValue()); user.setUserStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue()); user.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); - if (user.getUserLoginNum() == null){ + if (user.getUserLoginNum() == null) { user.setUserLoginNum(0); } ConvertBean.modelInitialize(user, AuthUtil.getSessionUser()); @@ -161,7 +161,7 @@ public class PersonnelController extends CoreBaseController { //松下需要创建的新用户 第一次登陆系统就要重置密码 // user.setUserPasswordLastModifyTime(TimeTool.getNowTime(true)); refreshSysUserPassword(user); - SysUser userSaved=personnelService.saveSysUser(user); + SysUser userSaved = personnelService.saveSysUser(user); // 添加保存passwordId进SysUser表 SysUserPassword pwd = new SysUserPassword(); @@ -262,6 +262,13 @@ public class PersonnelController extends CoreBaseController { sysUser.setOrganizeNameRdd(userOrganize.getName()); sysUser.setUserName(userInfo.getName()); sysUser.setUserEmpNo(userInfo.getUserEmpNo()); + sysUser.setAuthPlatform(user.getAuthPlatform()); + + if (StringUtils.isBlank(user.getUserAccountType()) || CommonEnumUtil.USER_ACCOUNT_TYPE.valueOfEnum(user.getUserAccountType()) == null) { + sysUser.setUserAccountType(String.valueOf(CommonEnumUtil.USER_ACCOUNT_TYPE.SYSTEM.getValue())); + } else { + sysUser.setUserAccountType(user.getUserAccountType()); + } // 关系 刷新 refreshRef(sysUser, userInfo, model); @@ -727,9 +734,9 @@ public class PersonnelController extends CoreBaseController { .notNull("infoDepartmentId", model.getInfoDepartmentId()) .notNull("userDepartmentId", model.getUserDepartmentId()) .notNull("userLoginName", model.getUserLoginName()); - // FIXME 松下移除邮箱校验 + // FIXME 松下移除邮箱校验 // .notNull("userEmail", model.getUserEmail()) - // FIXME 松下移除手机号校验 + // FIXME 松下移除手机号校验 // .notNull("userPhone", model.getUserPhone()); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java index 1f725e5..c7043d4 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTableTemplateController.java @@ -9,9 +9,12 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; /** * @author ns @@ -30,7 +33,7 @@ public class SysTableTemplateController { @ApiOperation("新增系统模板") @PostMapping("/insert") - public ResultBean insertSysTableTemplate(SysTableTemplate sysTableTemplate) throws NoSuchFieldException { + public ResultBean insertSysTableTemplate(@RequestBody SysTableTemplate sysTableTemplate) throws NoSuchFieldException { //条件验证 ValidatorBean.beginValid(sysTableTemplate) .notNull("softType", sysTableTemplate.getSoftType()) @@ -38,6 +41,9 @@ public class SysTableTemplateController { .notNull("page", sysTableTemplate.getPage()) .notNull("templateType", sysTableTemplate.getTemplateType()); if (CommonEnumUtil.USER_TYPE.ADMIN.equals(AuthUtil.getUserType())) { + if (iSysTableTemplateService.isExistSysTableTemplate(sysTableTemplate)) { + return ResultBean.fail("同一个软件类型和page下不能有相同的模板类型"); + } return ResultBean.success().setResultObject(iSysTableTemplateService.insertSysTableTemplate((sysTableTemplate))); } return ResultBean.fail("当前用户不是管理员,不能新增"); @@ -46,7 +52,7 @@ public class SysTableTemplateController { @ApiOperation("修改系统模板") @PutMapping("/update") - public ResultBean updateSysTableTemplate(SysTableTemplate sysTableTemplate) throws NoSuchFieldException { + public ResultBean updateSysTableTemplate(@RequestBody SysTableTemplate sysTableTemplate) throws NoSuchFieldException { //条件验证 ValidatorBean.beginValid(sysTableTemplate) .notNull("id", sysTableTemplate.getId()); @@ -58,11 +64,11 @@ public class SysTableTemplateController { @ApiOperation("修改系统模板,如果不存在则新增模板") @PutMapping("/putIfAbsent") - public ResultBean putIfSysTableTemplateAbsent(SysTableTemplate sysTableTemplate) throws NoSuchFieldException { + public ResultBean putIfSysTableTemplateAbsent(@RequestBody SysTableTemplate sysTableTemplate) throws NoSuchFieldException { //条件验证 if (!CommonEnumUtil.USER_TYPE.ADMIN.equals(AuthUtil.getUserType())) { - return ResultBean.fail("当前用户不是管理员,不能修改"); + return ResultBean.fail("当前用户不是管理员,不能修改"); } ValidatorBean validatorBean = ValidatorBean.beginValid(sysTableTemplate); if (ObjectUtils.isEmpty(sysTableTemplate.getId())) { @@ -71,14 +77,21 @@ public class SysTableTemplateController { .notNull("templateData", sysTableTemplate.getTemplateData()) .notNull("page", sysTableTemplate.getPage()) .notNull("templateType", sysTableTemplate.getTemplateType()); + if (iSysTableTemplateService.isExistSysTableTemplate(sysTableTemplate)) { + return ResultBean.fail("同一个软件类型和page下不能有相同的模板类型"); + } return ResultBean.success().setResultObject(iSysTableTemplateService.insertSysTableTemplate((sysTableTemplate))); } + if (!iSysTableTemplateService.isExistSysTableTemplateById(sysTableTemplate.getId())) { + return ResultBean.fail("模板不存在"); + } return ResultBean.success().setResultObject(iSysTableTemplateService.updateSysTableTemplate((sysTableTemplate))); } - @ApiOperation("查询系统模板") + + @ApiOperation("条件查询表格模板") @GetMapping("/find") - public ResultBean findSysTableTemplate(SysTableTemplate sysTableTemplate) throws NoSuchFieldException { + public ResultBean findSysTableTemplate( SysTableTemplate sysTableTemplate) { if (ObjectUtils.isEmpty(sysTableTemplate)) { return ResultBean.fail("查询条件不能为空"); } @@ -88,18 +101,38 @@ public class SysTableTemplateController { && ObjectUtils.isEmpty(sysTableTemplate.getTemplateType())) { return ResultBean.fail("查询条件不能为空"); } - return ResultBean.success().setResultObject(iSysTableTemplateService.findSysTableTemplate((sysTableTemplate))); + return ResultBean.success().setResultList(iSysTableTemplateService.findSysTableTemplate((sysTableTemplate))); + + } + + @ApiOperation("根据id查询表格模板") + @GetMapping("/getSysTableTemplate") + public ResultBean getSysTableTemplateById(Long id) throws NoSuchFieldException { + if (ObjectUtils.isEmpty(id)) { + return ResultBean.fail("id不能为空"); + } + return ResultBean.success().setResultObject(iSysTableTemplateService.getSysTableTemplateById(id)); } - @ApiOperation("分页查询系统模板") + @ApiOperation("分页查询表格模板") @GetMapping("/findBypage") - public ResultBean findSysTableTemplateByPage(SysTableTemplate sysTableTemplate, Pager pager) throws NoSuchFieldException { + public ResultBean findSysTableTemplateByPage(@ApiIgnore SysTableTemplate sysTableTemplate, Pager pager) throws NoSuchFieldException { if (ObjectUtils.isEmpty(pager)) { pager = Pager.defaultPager(); } - return ResultBean.success().setResultObject(iSysTableTemplateService.findSysTableTemplateByPage(sysTableTemplate, pager)); + return ResultBean.success().setListPager(iSysTableTemplateService.findSysTableTemplateByPage(sysTableTemplate, pager)); + + } + + @ApiOperation("根据id删除模板") + @DeleteMapping("/delete") + public ResultBean findSysTableTemplate(Long[] ids) { + if (ObjectUtils.isEmpty(ids)) { + return ResultBean.fail("id为空"); + } + return ResultBean.success().setResultObject(iSysTableTemplateService.deleteSysTableTemplateByIds(ids)); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java index 3f141da..d6cbd3c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java @@ -3,7 +3,9 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService; +import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsCommonCloud; import cn.estsh.i3plus.icloud.andon.sdk.IAndonCommonCloud; +import cn.estsh.i3plus.icloud.eam.sdk.IEamCommonCloud; import cn.estsh.i3plus.icloud.mes.pcn.sdk.IMesPcnCommonCloud; import cn.estsh.i3plus.icloud.mes.sdk.IMesCommonCloud; import cn.estsh.i3plus.icloud.ptl.sdk.IPtlCommonCloud; @@ -100,6 +102,12 @@ public class SysTaskController extends CoreBaseController { private IScreenCommonCloud screenCommonCloud; @Autowired + private IQmsCommonCloud iQmsCommonCloud; + + @Autowired + private IEamCommonCloud iEamCommonCloud; + + @Autowired private EntityManager entityManager; @Autowired @@ -143,6 +151,12 @@ public class SysTaskController extends CoreBaseController { commonService = ptlCommonCloud; } else if (softType == CommonEnumUtil.SOFT_TYPE.SCREEN.getValue()) { commonService = screenCommonCloud; + } else if (softType == CommonEnumUtil.SOFT_TYPE.QMS.getValue()) { + //qms + commonService = iQmsCommonCloud; + }else if (softType == CommonEnumUtil.SOFT_TYPE.EAM.getValue()) { + //eam + commonService = iEamCommonCloud; } return commonService; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java index 2f692bf..c31da29 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java @@ -1,7 +1,10 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.*; +import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsScheduleJobCloud; import cn.estsh.i3plus.icloud.andon.sdk.IAndonScheduleJobCloud; +import cn.estsh.i3plus.icloud.eam.sdk.IEamCommonCloud; +import cn.estsh.i3plus.icloud.eam.sdk.IEamScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.pcn.sdk.IMesPcnScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.sdk.IMesScheduleJobCloud; import cn.estsh.i3plus.icloud.wms.sdk.IWmsScheduleJobCloud; @@ -99,6 +102,13 @@ public class SysTaskCycleController extends CoreBaseController { @Autowired private IAndonScheduleJobCloud andonScheduleJobCloud; + @Autowired + private IQmsScheduleJobCloud qmsScheduleJobCloud; + + + @Autowired + private IEamScheduleJobCloud eamScheduleJobCloud; + /** * 根据来源切换定时任务服务 * @@ -123,6 +133,10 @@ public class SysTaskCycleController extends CoreBaseController { // ANDON } else if (source == CommonEnumUtil.SOFT_TYPE.ANDON.getValue()) { quartzJobService = andonScheduleJobCloud; + }else if (source == CommonEnumUtil.SOFT_TYPE.QMS.getValue()) { + quartzJobService = qmsScheduleJobCloud; + }else if (source == CommonEnumUtil.SOFT_TYPE.EAM.getValue()) { + quartzJobService = eamScheduleJobCloud; } return quartzJobService; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java index 1e71b18..c1be42a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java @@ -4,7 +4,10 @@ import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskCycleService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskPlanService; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService; +import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsCommonCloud; +import cn.estsh.i3plus.ext.qms.icloud.sdk.IQmsScheduleJobCloud; import cn.estsh.i3plus.icloud.andon.sdk.IAndonScheduleJobCloud; +import cn.estsh.i3plus.icloud.eam.sdk.IEamScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.pcn.sdk.IMesPcnScheduleJobCloud; import cn.estsh.i3plus.icloud.mes.sdk.IMesScheduleJobCloud; import cn.estsh.i3plus.icloud.ptl.sdk.IPtlScheduleJobCloud; @@ -123,6 +126,14 @@ public class SysTaskPlanController extends CoreBaseController { @Autowired private IScreenScheduleJobCloud screenScheduleJobCloud; + @Autowired + private IQmsScheduleJobCloud qmsScheduleJobCloud; + + @Autowired + private IEamScheduleJobCloud eamScheduleJobCloud; + + + /** * 根据来源切换定时任务服务 * @@ -155,6 +166,10 @@ public class SysTaskPlanController extends CoreBaseController { quartzJobService = ptlScheduleJobCloud; } else if (source == CommonEnumUtil.SOFT_TYPE.SCREEN.getValue()) { quartzJobService = screenScheduleJobCloud; + }else if (source == CommonEnumUtil.SOFT_TYPE.QMS.getValue()) { + quartzJobService = qmsScheduleJobCloud; + }else if (source == CommonEnumUtil.SOFT_TYPE.EAM.getValue()) { + quartzJobService = eamScheduleJobCloud; } return quartzJobService; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java index db6085f..facbd68 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java @@ -29,11 +29,13 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.text.StrBuilder; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -100,6 +102,9 @@ public class SysUserController extends CoreBaseController { @Resource(name = CommonConstWords.IMPP_REDIS_RES) private ImppRedis redisRes; + @Resource(name = CommonConstWords.IMPP_REDIS_CORE) + protected ImppRedis redisCore; + /** * 新增系统用户 * @@ -277,7 +282,10 @@ public class SysUserController extends CoreBaseController { ValidatorBean.checkNotZero(status, "功能状态不能为空"); sysUserService.updateBatchSysUserStatus(StringTool.getArrayLong(ids), status, AuthUtil.getSessionUser()); - + //当解除锁定状态 重置当天登录错误次数上限 + if (CommonEnumUtil.USER_STATUS.ENABLE.getValue() == status) { + deleteRedisLoginErrorKeys(ids); + } return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -287,22 +295,38 @@ public class SysUserController extends CoreBaseController { } /** + * 删除登录错误的次数 + * + * @param ids + */ + private void deleteRedisLoginErrorKeys(String[] ids) { + String[] keys = new String[ids.length]; + StringBuilder redisKey = new StringBuilder(); + for (int i = 0; i < ids.length; i++) { + redisKey.append(CommonConstWords.USER_LOGIN_ERROR).append(":").append(TimeTool.getToday()).append(":").append(ids[i]); + keys[i] = redisKey.toString(); + redisKey.setLength(0); + } + redisCore.deleteKey(keys); + } + + /** * 根据登录的用户名批量修改账号状态 * * @param userLoginNames 用户名数组 - * @param status 状态 + * @param status 状态 * @return 处理结果 */ @PutMapping(value = "/batch-status/userLoginNames") @ApiOperation(value = "根据用户名批量修改账号状态", notes = "根据用户名批量修改账号状态") public ResultBean updateBatchStatusByUserLoginNames(String[] userLoginNames, Integer status) { try { - if(ObjectUtils.isEmpty(userLoginNames)){ + if (ObjectUtils.isEmpty(userLoginNames)) { return ResultBean.success("操作失败").setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()).setErrorMsg("用户名不能为空"); } ValidatorBean.checkNotZero(status, "账号状态不能为空"); List userLoginNameList = Stream.of(userLoginNames).collect(Collectors.toList()); - sysUserService.updateBatchSysUserStatusByUserLoginNames(userLoginNameList,status); + sysUserService.updateBatchSysUserStatusByUserLoginNames(userLoginNameList, status); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -560,7 +584,8 @@ public class SysUserController extends CoreBaseController { SysUser user = sysUserService.getSysUserById(Long.parseLong(id)); if (user != null) { Integer num = personnelService.checkSysUserResetPassword(user); - num = CommonConstWords.CONFIG_PWD_RESET_PASSWORD_DEFAULT - num; + int numMax = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_PWD_RESET_PASSWORD, CommonConstWords.CONFIG_PWD_RESET_PASSWORD_DEFAULT); + num = numMax - num; // String password = RandomStringUtils.random(6, true, false); @@ -569,7 +594,7 @@ public class SysUserController extends CoreBaseController { String password = SysUserPasswordUtil.generateRandomPassword(); userPasswordService.updatePasswordResetLastModifyTime(user.getId(), password, false); //重置成随机密码会让用户首次登录修改密码 - sysUserService.updateUserLoginNum(user.getId(),0); + sysUserService.updateUserLoginNum(user.getId(), 0); String content = "系统提示:\n" + "\t" + getSessionUser().getUserName() + "使用密码重置功能帮您重置了【" + user.getUserLoginName() + "】账号的密码," + "新密码是:" + password + ""; @@ -619,7 +644,8 @@ public class SysUserController extends CoreBaseController { SysUser user = sysUserService.getSysUserById(Long.parseLong(id)); if (user != null) { Integer num = personnelService.checkSysUserResetPassword(user); - num = CommonConstWords.CONFIG_PWD_RESET_PASSWORD_DEFAULT - num; + int numMax = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_PWD_RESET_PASSWORD, CommonConstWords.CONFIG_PWD_RESET_PASSWORD_DEFAULT); + num = numMax - num; userPasswordService.updatePasswordResetLastModifyTime(user.getId(), password, true); LOGGER.info("系统提示:{} 使用密码重置功能帮{}重置了{}账号的密码,新密码是:{}", diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java index 42f8b40..267728a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java @@ -190,12 +190,16 @@ public class SystemLoginService implements ISystemLoginService { */ @Override public CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform(HttpServletRequest request) { - String value = CookieTool.getCookieValue(request, CommonConstWords.SESSION_LOGIN_PLATFORM); - if (StringUtils.isBlank(value)) { - value = CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue() + ""; + String platformValue; + platformValue = request.getHeader(CommonConstWords.SESSION_LOGIN_PLATFORM); + if (StringUtils.isBlank(platformValue)){ + platformValue = CookieTool.getCookieValue(request, CommonConstWords.SESSION_LOGIN_PLATFORM); + } + if (StringUtils.isBlank(platformValue)) { + platformValue = CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue() + ""; } else { try { - Integer.parseInt(value); + Integer.parseInt(platformValue); } catch (Exception e) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) @@ -205,7 +209,7 @@ public class SystemLoginService implements ISystemLoginService { .build(); } } - CommonEnumUtil.LOG_LOGIN_PLATFORM platform = CommonEnumUtil.LOG_LOGIN_PLATFORM.valueOf(Integer.parseInt(value)); + CommonEnumUtil.LOG_LOGIN_PLATFORM platform = CommonEnumUtil.LOG_LOGIN_PLATFORM.valueOf(Integer.parseInt(platformValue)); return platform == null ? CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE : platform; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java index 68b4c2c..32c4a09 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.i3plus.pojo.platform.bean.SysConfig; import cn.estsh.i3plus.pojo.platform.bean.SysUser; import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.auth.filter.UserFilter; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.RedisCacheTool; @@ -18,6 +19,7 @@ import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authc.CredentialsException; import org.apache.shiro.authc.ExpiredCredentialsException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -66,9 +68,19 @@ public class DefaultLoginStrategy implements ISystemLoginStrategyService { ValidatorBean.checkNotNull(loginModel.getLoginName(), "用户名不能为空"); ValidatorBean.checkNotNull(loginModel.getLoginPwd(), "密码不能为空"); - int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); +// int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + SysUser dbUser = userService.getSysUserByLoginName(loginModel.getLoginName().trim()); + if (dbUser == null) { + throw new CredentialsException("用户不存在"); + } + int sessionMode = UserFilter.getSessionModeByUserAccountType(dbUser.getUserAccountType()); if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { - AuthUtil.logout(); + if (sessionMode == CommonEnumUtil.SESSION_MODE.OVERWRITE.getValue()){ + log.info("session Mode 是{},可以多端登录",sessionMode); + }else{ + log.info("session Mode 是{},把上一个用户挤下线",sessionMode); + AuthUtil.logout(); + } } // 已经对用户名和密码做过验证了 // 获取系统参数【密码过期时间】 进行密码有效时间判断 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java index eeab8b7..3597acb 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java @@ -12,12 +12,15 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.auth.filter.UserFilter; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; +import org.apache.shiro.authc.CredentialsException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -69,7 +72,12 @@ public class E9LoginStrategy implements ISystemLoginStrategyService { BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode()); BaseThreadLocal.setData(PlatformConstWords.AUTH_LOGIN_STRATEGY, ImppEnumUtil.AUTH_LOGIN_STRATEGY.E9.getCode()); - int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); +// int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + SysUser dbUser = userService.getSysUserByLoginName(loginModel.getLoginName().trim()); + if (dbUser == null) { + throw new CredentialsException("用户不存在"); + } + int sessionMode = UserFilter.getSessionModeByUserAccountType(dbUser.getUserAccountType()); if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { AuthUtil.logout(); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java index 77cb826..5095c7c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java @@ -12,12 +12,15 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.auth.filter.UserFilter; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; +import org.apache.shiro.authc.CredentialsException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -65,7 +68,12 @@ public class NameLoginStrategy implements ISystemLoginStrategyService { BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode()); BaseThreadLocal.setData(PlatformConstWords.AUTH_LOGIN_STRATEGY, ImppEnumUtil.AUTH_LOGIN_STRATEGY.NAME.getCode()); - int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); +// int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + SysUser dbUser = userService.getSysUserByLoginName(loginModel.getLoginName().trim()); + if (dbUser == null) { + throw new CredentialsException("用户不存在"); + } + int sessionMode = UserFilter.getSessionModeByUserAccountType(dbUser.getUserAccountType()); if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { AuthUtil.logout(); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java index 1343ab6..4e0720c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTableTemplateService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.platform.bean.SysTableTemplate; import cn.estsh.i3plus.pojo.platform.repository.SysTableTemplateRepository; +import cn.estsh.impp.framework.boot.auth.AuthUtil; import org.springframework.stereotype.Service; import java.util.List; @@ -29,7 +30,7 @@ public class SysTableTemplateService implements ISysTableTemplateService { public ListPager findSysTableTemplateByPage(SysTableTemplate sysTableTemplate, Pager pager) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(sysTableTemplate.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(sysTableTemplate.getSoftType(), "softType", ddlPackBean); - DdlPreparedPack.getStringLikerPack(sysTableTemplate.getPage(), "page", ddlPackBean); + DdlPreparedPack.getStringEqualPack(sysTableTemplate.getPage(), "page", ddlPackBean); DdlPreparedPack.getStringEqualPack(sysTableTemplate.getTemplateType(), "templateType", ddlPackBean); pager = PagerHelper.getPager(pager, sysTableTemplateRepository.findByHqlWhereCount(ddlPackBean)); return new ListPager(sysTableTemplateRepository.findByHqlWherePage(ddlPackBean, pager), pager); @@ -39,13 +40,19 @@ public class SysTableTemplateService implements ISysTableTemplateService { public List findSysTableTemplate(SysTableTemplate sysTableTemplate) { DdlPackBean result = DdlPackBean.getDdlPackBean(sysTableTemplate.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(sysTableTemplate.getSoftType(), "softType", result); - DdlPreparedPack.getStringLikerPack(sysTableTemplate.getPage(), "page", result); + DdlPreparedPack.getStringEqualPack(sysTableTemplate.getPage(), "page", result); DdlPreparedPack.getStringEqualPack(sysTableTemplate.getTemplateType(), "templateType", result); DdlPreparedPack.getNumEqualPack(sysTableTemplate.getId(), "id", result); return sysTableTemplateRepository.findByHqlWhere(result); } @Override + public SysTableTemplate getSysTableTemplateById(Long sysTableTemplateId) { + return sysTableTemplateRepository.getById(sysTableTemplateId); + } + + + @Override public Boolean saveSysTableTemplate(SysTableTemplate sysTableTemplate) { return null; } @@ -62,9 +69,24 @@ public class SysTableTemplateService implements ISysTableTemplateService { } @Override + public Boolean isExistSysTableTemplateById(Long id) { + DdlPackBean ddlPack = DdlPackBean.getDdlPackBean(AuthUtil.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(id, "id", ddlPack); + return sysTableTemplateRepository.isExitByHql(ddlPack); + } + + @Override + public int deleteSysTableTemplateByIds(Long[] ids) { + return sysTableTemplateRepository.deleteByIds(ids); + } + + @Override public Boolean isExistSysTableTemplate(SysTableTemplate sysTableTemplate) { DdlPackBean ddlPack = DdlPackBean.getDdlPackBean(sysTableTemplate.getOrganizeCode()); - DdlPreparedPack.getNumEqualPack(sysTableTemplate.getId(), "id", ddlPack); + DdlPreparedPack.getNumEqualPack(sysTableTemplate.getSoftType(), "softType", ddlPack); + DdlPreparedPack.getStringEqualPack(sysTableTemplate.getPage(), "page", ddlPack); + DdlPreparedPack.getStringEqualPack(sysTableTemplate.getTemplateType(), "templateType", ddlPack); return sysTableTemplateRepository.isExitByHql(ddlPack); } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java index 7318cb8..f801065 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserSavePasswordService.java @@ -181,4 +181,16 @@ public class SysUserSavePasswordService extends CrudService imp DdlPreparedPack.getStringEqualPack(password,"userPassword",ddlPackBean); return userPasswordRDao.findByHqlWhere(ddlPackBean); } + + @Override + public void updatePasswordByPwdIdAndNewPwd(Long pwdId, String newPwd) { + try { + SysUserPassword sup = userPasswordRDao.getById(pwdId); + sup.setUserPassword(SysUserPasswordUtil.encoder(newPwd)); + sup.setModifyDatetime(TimeTool.getNowTime(true)); + userPasswordRDao.update(sup); + } catch (Exception e) { + throw ImppExceptionBuilder.newInstance().setErrorDetail(e.getMessage()).build(); + } + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java index ef84ff5..9b1e223 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -28,12 +28,14 @@ import cn.estsh.i3plus.pojo.platform.repository.SysUserInfoRepository; import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.auth.filter.UserFilter; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.*; import io.swagger.annotations.ApiOperation; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.util.Strings; import org.apache.shiro.authc.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -129,7 +131,6 @@ public class SysUserService implements ISysUserService { SysUser user = null; ResultBean resultBean = ResultBean.fail(); try { - BaseToken token = getToken(loginName, password, languageCode, loginPlatform); user = this.getSysUserByLoginName(loginName); if (user == null) { throw new CredentialsException("用户不存在"); @@ -143,10 +144,13 @@ public class SysUserService implements ISysUserService { resultBean = result; return resultBean; } + BaseToken token = getToken(loginName, password, languageCode, loginPlatform); sessionUser = AuthUtil.login(token); // 判断会话模式 - checkSessionMode(loginPlatform, user.getId()); +// checkSessionMode(loginPlatform, user.getId()); + + checkSessionMode(loginPlatform, user); packSessionUser(sessionUser, user, user.getUserType(), loginPlatform, languageCode, deviceId); packConfigSessionUser(sessionUser, user); @@ -232,19 +236,48 @@ public class SysUserService implements ISysUserService { } } + private void checkSessionMode(Integer loginPlatform, SysUser sysUser) { +// int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + int sessionMode = UserFilter.getSessionModeByUserAccountType(sysUser.getUserAccountType()); + String redisKey; + if (sessionMode == CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { + redisKey = CommonConstWords.SESSION_USER + ":*_" + sysUser.getId(); + } else { + return; + } + + List ds = redisSession.findObject(redisKey); + if (CollectionUtils.isNotEmpty(ds)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.LOGIN_EXCEPTION_LOGGED.getCode()) + .setErrorDetail("用户已在其他设备登录,无法同时登录!") + .setErrorSolution("请联系管理员") + .build(); + } + } + @Override public BaseToken getToken(String loginName, String password, String languageCode, Integer loginPlatform) { SysUser user = this.getSysUserByLoginName(loginName); - if (user != null) { - if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN.getValue())) { - return new AdminToken(loginName, password, languageCode, loginPlatform); - } else if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.SA.getValue())) { - return new SaAdminToken(loginName, password, languageCode, loginPlatform); - } else { - return new UserToken(loginName, password, languageCode, loginPlatform); + //拦截没有权限的账号,供应商账号不能登录pc + loginPlatform = loginPlatform != null ? loginPlatform : CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue(); + //判断条件,如果有authPlatform限制,则进行校验,没有,按照原有登录 + //authPlatform限制,如果不包含平台权限,则不能登录,这里可以扩展多个登录权限限制。 + String authPlatform = user.getAuthPlatform(); + if (Strings.isNotBlank(authPlatform)){ + List authPlatforms = Arrays.stream(authPlatform.split(",")).map(Integer::parseInt).collect(Collectors.toList()); + if (!authPlatforms.contains(loginPlatform)){ + throw ImppExceptionBuilder.newInstance().setErrorDetail("此账号没有权限登录此平台,请联系管理员!").build(); } + } + + if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN.getValue())) { + return new AdminToken(loginName, password, languageCode, loginPlatform); + } else if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.SA.getValue())) { + return new SaAdminToken(loginName, password, languageCode, loginPlatform); } else { - throw new CredentialsException("用户不存在"); + return new UserToken(loginName, password, languageCode, loginPlatform); } } @@ -351,6 +384,25 @@ public class SysUserService implements ISysUserService { } @Override + public void updateSysUserPwdByLoginName(String loginName, String password) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getStringEqualPack(loginName,"userLoginName",ddlPackBean); + List sysUsers = userRDao.findByHqlWhere(ddlPackBean); + if (Objects.isNull(sysUsers)){ + throw ImppExceptionBuilder.newInstance().setErrorDetail("修改密码失败,账号在系统中不存在!").build(); + } + + if (sysUsers.size() > 1){ + throw ImppExceptionBuilder.newInstance().setErrorDetail("登录名不唯一,修改失败!").build(); + } + + SysUser sysUser = sysUsers.get(0); + Long pwdId = sysUser.getUserLoginPasswordId(); + userPasswordService.updatePasswordByPwdIdAndNewPwd(pwdId,password); + } + + + @Override @ApiOperation(value = "刷新账号", notes = "刷新账号登录信息") public void refreshUserLoginInformation(Long userId) { SysUser user = userRDao.getById(userId); @@ -687,6 +739,24 @@ public class SysUserService implements ISysUserService { } @Override + public SysUser getSysUserByLoginNameAndEmail(String loginName, String email) { + LOGGER.debug("平台用户 SYS_USER find By Login Name :{},and email:{}", loginName,email); + + SysUser sysUser = userRDao.getByProperty(new String[]{"userLoginName", "isValid", "isDeleted"}, + new Object[]{loginName, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}); + if (!Objects.isNull(sysUser)){ + String emails = sysUser.getUserEmail(); + if (Strings.isNotBlank(emails)){ + List emailList = Arrays.asList(emails.split(",")); + if (emailList.contains(email)){ + return sysUser; + } + } + } + throw ImppExceptionBuilder.newInstance().setErrorDetail("账号与邮箱不匹配!").build(); + } + + @Override @ApiOperation(value = "账号查询", notes = "根据邮箱查询用户信息") public SysUser getSysUserByEmail(String email) { return userRDao.getByProperty(new String[]{"userEmail", "isValid"}, diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java index 95cbd1d..f7df72d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java @@ -396,13 +396,24 @@ public class MailUtil { mailConfig.setMailPassword("Aa135790"); MailUtil mailUtil = new MailUtil(); mailUtil.init(mailConfig); - mailUtil.setNick("ns"); - mailUtil.setTo("13298408382@163.com"); + mailUtil.setNick("SFP验证码"); + mailUtil.setTo("castle.zang@estsh.com"); +// mailUtil.setTo("ying.he.zang@estsh.com"); mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.TEXT.getDescription()); - mailUtil.setSubject("test"); - mailUtil.setBody("666"); - File file = new File("C:\\Users\\ns\\Desktop\\test.txt"); - mailUtil.addAttachment(file); + mailUtil.setSubject("SFP验证码"); + mailUtil.setBody( + "供应商账号(登录名称),您好!\n" + + "\n" + + "您登录账号“供应商账号(登录名称)”修改密码所需的验证码为: “XXXXX“\n"+ + "\n" + + "您会收到这封自动产生的邮件,是由于有人在供应商端试图通过网络设备修改您的账户密码,且提供了正确的账户名称与邮箱。\n" + + "验证码是修改密码所必需的。没有人能够不访问这封电子邮件就修改您的账户密码。\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "祝您愉快,\n" + + "SFP团队"); mailUtil.send(); } diff --git a/modules/i3plus-core-apiservice/src/main/resources/application.properties b/modules/i3plus-core-apiservice/src/main/resources/application.properties index 032a1e0..0ffe4f2 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application.properties @@ -44,7 +44,13 @@ impp.app.pojo-mongo-dao=${impp.app.base-packages}.**.apiservice.daomongo #\u5BF9\u8C61\u6301\u4E45\u5316\u5305\u8DEF\u5F84\uFF0C\u53EF\u4EE5\u591A\u4E2A\u5305\uFF0C\u9017\u53F7\u5206\u9694 impp.app.pojo-repository=${impp.app.pojo-packages}.**.repository #mongodb\u8D44\u6E90\u4ED3go -impp.app.pojo-mongo-repository=${impp.app.pojo-packages}.**.repositorymon +#impp.app.pojo-mongo-repository=${impp.app.pojo-packages}.**.repositorymon + +###\u4E8C\u5F00\u9879\u76EE\u7684iCloud +impp.icloud.ext-packages=cn.estsh.i3plus.ext.**.icloud.** + +#\u4E8C\u5F00\u9879\u76EEiCloud\u7684fallbalck +impp.icloud.ext.fallback-packages=cn.estsh.i3plus.ext.**.icloud.sdkfallback ################ \u6388\u6743\u8FC7\u6EE4\u914D\u7F6E ################ #\u7528\u6237\u767B\u9646\u8DEF\u5F84 diff --git a/pom.xml b/pom.xml index 3b4ef9f..06760ef 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,8 @@ 1.8 1.0-TEST-SNAPSHOT 2.17.1 + 1.0.0.1 + 1.0.0.1 @@ -132,6 +134,18 @@ ${project.dependency.version} + + i3plus.ext.qms + i3plus-ext-qms-icloud + ${qms.icloud.version} + + + + i3plus.eam + i3plus-eam-icloud + ${eam.icloud.version} + + i3plus.pojo