合并代码

yun-zuoyi
nies 3 years ago
commit d6e12e0363

@ -28,6 +28,13 @@ public interface ISysTableTemplateService {
List<SysTableTemplate> 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);
}

@ -38,4 +38,12 @@ public interface ISysUserPasswordService extends ICrudService<SysUserPassword> {
@ApiOperation(value = "根据密码反查")
public List<SysUserPassword> findPasswordByPassword(String password);
/**
* id,
* @param pwdId
* @param newPwd
*/
@ApiOperation(value = "供应商忘记密码")
void updatePasswordByPwdIdAndNewPwd(Long pwdId,String newPwd);
}

@ -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

@ -63,6 +63,15 @@
<artifactId>i3plus-icloud-screen</artifactId>
</dependency>
<dependency>
<groupId>i3plus.ext.qms</groupId>
<artifactId>i3plus-ext-qms-icloud</artifactId>
</dependency>
<dependency>
<groupId>i3plus.eam</groupId>
<artifactId>i3plus-eam-icloud</artifactId>
</dependency>
<!-- 对象 -->
<dependency>
<groupId>i3plus.pojo</groupId>

@ -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("【扫描关联包...】");
}
}

@ -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,9 +967,59 @@ 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){
public ResultBean sendSms(@RequestBody ImppSmsContent imppSmsContent) {
return smsSendRecordController.send(imppSmsContent);
}
@ -989,7 +1040,7 @@ public class WhiteController extends CoreBaseController {
}
//过滤SysRefUserRole
roleList = sysRoleService.findAllByRoleProperty(sysRole);
if (ObjectUtils.isEmpty(roleList)){
if (ObjectUtils.isEmpty(roleList)) {
return ResultBean.success("操作成功");
}
@ -1013,7 +1064,180 @@ public class WhiteController extends CoreBaseController {
@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<String> 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<String> userIdList = new ArrayList<String>();
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 "";
}

@ -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);

@ -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,7 +64,7 @@ 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())) {
@ -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));
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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,6 +295,22 @@ 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
@ -297,12 +321,12 @@ public class SysUserController extends CoreBaseController {
@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<String> 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("系统提示:{} 使用密码重置功能帮{}重置了{}账号的密码,新密码是:{}",

@ -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;
}

@ -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,10 +68,20 @@ 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()) {
if (sessionMode == CommonEnumUtil.SESSION_MODE.OVERWRITE.getValue()){
log.info("session Mode 是{},可以多端登录",sessionMode);
}else{
log.info("session Mode 是{},把上一个用户挤下线",sessionMode);
AuthUtil.logout();
}
}
// 已经对用户名和密码做过验证了
// 获取系统参数【密码过期时间】 进行密码有效时间判断
userService.validatePasswordByLoginNameAndReturnUser(loginModel.getLoginName(),loginModel.getLoginPwd());

@ -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();
}

@ -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();
}

@ -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<SysTableTemplate> 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<SysTableTemplate> 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);
}
}

@ -181,4 +181,16 @@ public class SysUserSavePasswordService extends CrudService<SysUserPassword> 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();
}
}
}

@ -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,10 +236,42 @@ 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<Object> 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) {
//拦截没有权限的账号供应商账号不能登录pc
loginPlatform = loginPlatform != null ? loginPlatform : CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue();
//判断条件如果有authPlatform限制则进行校验没有按照原有登录
//authPlatform限制如果不包含平台权限则不能登录这里可以扩展多个登录权限限制。
String authPlatform = user.getAuthPlatform();
if (Strings.isNotBlank(authPlatform)){
List<Integer> 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())) {
@ -243,9 +279,6 @@ public class SysUserService implements ISysUserService {
} else {
return new UserToken(loginName, password, languageCode, loginPlatform);
}
} else {
throw new CredentialsException("用户不存在");
}
}
@Override
@ -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<SysUser> 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<String> 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"},

@ -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();
}

@ -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

@ -39,6 +39,8 @@
<app.jdk.version>1.8</app.jdk.version>
<project.dependency.version>1.0-TEST-SNAPSHOT</project.dependency.version>
<log4j2.version>2.17.1</log4j2.version>
<qms.icloud.version>1.0.0.1</qms.icloud.version>
<eam.icloud.version>1.0.0.1</eam.icloud.version>
</properties>
<dependencies>
@ -132,6 +134,18 @@
<version>${project.dependency.version}</version>
</dependency>
<dependency>
<groupId>i3plus.ext.qms</groupId>
<artifactId>i3plus-ext-qms-icloud</artifactId>
<version>${qms.icloud.version}</version>
</dependency>
<dependency>
<groupId>i3plus.eam</groupId>
<artifactId>i3plus-eam-icloud</artifactId>
<version>${eam.icloud.version}</version>
</dependency>
<!-- 基础对象调用 -->
<dependency>
<groupId>i3plus.pojo</groupId>

Loading…
Cancel
Save