1.自动工单非重复任务保存优化

main
yitonglei 3 years ago
parent a56aec045e
commit f8e54a3474
  1. 35
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/jinhong/BaseUtils.java
  2. 148
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/jinhong/IdentityInterceptor.java
  3. 90
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/jinhong/Validator.java
  4. 9
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/AutoStartModelServiceImpl.java
  5. 35
      lab-service/lab-system/src/main/java/org/springblade/system/jinhong/BaseUtils.java
  6. 148
      lab-service/lab-system/src/main/java/org/springblade/system/jinhong/IdentityInterceptor.java
  7. 90
      lab-service/lab-system/src/main/java/org/springblade/system/jinhong/Validator.java

@ -0,0 +1,35 @@
package org.springblade.plugin.jinhong;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
public class BaseUtils
{
/**
* 获取配置文件中的配置信息
*
* @param key配置文件key值
* @return
* @throws IOException
*/
public static String getConfigValue(String key)
{
try
{
Properties props = new Properties();
InputStream in = BaseUtils.class.getClassLoader()
.getResourceAsStream("config.properties");
BufferedReader bf = new BufferedReader(new InputStreamReader(in,
"UTF-8"));
props.load(bf);
return props.getProperty(key);
}
catch (IOException ex)
{
return "";
}
}
}

@ -0,0 +1,148 @@
package org.springblade.plugin.jinhong;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义拦截器拦截符合条件url的请求 身份验证拦截
* (是否有登录用户信息)
*/
@Slf4j
@Component
public class IdentityInterceptor extends HandlerInterceptorAdapter
{
// 读取ssoToken参数
private static final String strToken = BaseUtils.getConfigValue("ssoKey");
public final static String SEESION_USER = "seesion_user";
/**
* 在业务处理器处理请求之前被调用 如果返回false 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
* 如果返回true 执行下一个拦截器,直到所有的拦截器都执行完毕 再执行被拦截的Controller 然后进入拦截器链,
* 从最后一个拦截器往回执行所有的postHandle() 接着再从最后一个拦截器往回执行所有的afterCompletion()
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception
{
log.debug("==============执行顺序: 1、preHandle================");
// 获取当前请求的url
String requestUri = request.getRequestURI();
Validator validator = Validator.getInstance();
// 注入当前session
// validator.init(request);
String strResponse = request.getParameter(strToken);
//真实环境需要放开如下注释
/**
*
if (strResponse != null)
{
// 如果服务器端通过认证后,会返回后执行改操作,然后写入cookie
SSOResponse ssoResp = new SSOResponse(strResponse);
TicketManager tm = ssoResp.CreatePSOTicket();
if (tm == null)
{
PSORequest psoRequest = new PSORequest(request);
String requeststr = psoRequest.CreateHash();
String keeperUrl = BaseUtils.getConfigValue("keeperUrl");
keeperUrl = keeperUrl + "?" + strToken + "="
+ URLEncoder.encode(requeststr, "UTF-8");
response.sendRedirect(keeperUrl);
}
else
{
String domainName = BaseUtils.getConfigValue("domain");
tm.SaveTicket(response, domainName);
Iterator<Entry<String, String[]>> iterator = request
.getParameterMap().entrySet().iterator();
StringBuffer param = new StringBuffer();
int i = 0;
while (iterator.hasNext())
{
Entry<String, String[]> entry = (Entry<String, String[]>) iterator
.next();
if (entry.getKey().equals(strToken))
continue;
else
{
i++;
if (i == 1)
param.append("?").append(entry.getKey())
.append("=");
else
param.append("&").append(entry.getKey())
.append("=");
if (entry.getValue() instanceof String[])
{
param.append(((String[]) entry.getValue())[0]);
}
else
{
param.append(entry.getValue());
}
}
}
response.sendRedirect(requestUri + param.toString());
return false;
}
}
else
{
TicketManager tm = new TicketManager();
if (!tm.LoadTicket(request))
{
PSORequest psoRequest = new PSORequest(request);
String requeststr = psoRequest.CreateHash();
String keeperUrl = BaseUtils.getConfigValue("keeperUrl");
keeperUrl = keeperUrl + "?" + strToken + "="
+ URLEncoder.encode(requeststr, "UTF-8");
response.sendRedirect(keeperUrl);
return false;
}
}
validator.SetUserTicket(request);
return true;
*/
return false;
}
/**
* 在业务处理器处理请求执行完成后,生成视图之前执行的动作 可在modelAndView中加入数据比如当前时间
*/
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception
{
log.debug("==============执行顺序: 2、postHandle================");
}
/**
* 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等
*
* 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()
*/
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception
{
log.debug("==============执行顺序: 3、afterCompletion================");
}
}

@ -0,0 +1,90 @@
package org.springblade.plugin.jinhong;
import com.yawei.pso.TicketManager;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* 验证器
*/
public class Validator
{
private static ThreadLocal<Validator> validatorHolder = new ThreadLocal<Validator>()
{
protected Validator initialValue()
{
return new Validator();
}
};
// 当前请求的session
private HttpSession session = null;
// 当前的请求
private HttpServletRequest request = null;
private Validator()
{
}
public static Validator getInstance()
{
return validatorHolder.get();
}
/**
* 执行初始化
* @param httpRequest
*/
public void init(HttpServletRequest httpRequest)
{
this.request = httpRequest;
this.session = request.getSession();
}
/**
* 将凭证身份加入到session
* @param httpRequest
*/
public void SetUserTicket(HttpServletRequest httpRequest)
{
try
{
if (httpRequest.getSession()
.getAttribute(IdentityInterceptor.SEESION_USER) == null)
{
TicketManager ticket = new TicketManager();
if (ticket.LoadTicket(httpRequest))
{
// 登录用户姓名
String userName = ticket.getUserName();
// 登录用户账号
String userAccount = ticket.getUserID();
// 登录用户标识
String userGuid = ticket.getADGUID();
System.out.println("===userName===" + userName);
System.out.println("===userAccount===" + userAccount);
System.out.println("===userGuid===" + userGuid);
}
}
else
{
}
}
catch (Exception ex)
{
}
}
/**
* 清除session
*/
public void cancel()
{
this.session = null;
}
}

@ -344,6 +344,7 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
workOrder.setTenantId(WfTaskUtil.getTenantId());
workOrder.setProcessInstanceId(processInstanceId);
workOrder.setExpectedCompletionTime(variables.get("qiwangwanchengshijian").toString());
workOrder.setRepeatMode(variables.get("chongfumoshi").toString());
//如果是运维公司发起的日常任务(普通),生成工单,并标记为已完成
User applyUser = UserCache.getUser(Long.valueOf(variables.get("applyUser").toString()));
String roleId = applyUser.getRoleId();
@ -383,10 +384,10 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
autoStartModel.setOperateModule(Long.valueOf(variables.get("xitongmokuaishujubiao").toString()));
autoStartModel.setIsDeleted(0);
autoStartModel.setUploadRecord(JSON.toJSONString(variables.get("uploadrecord")));
String deptId = AuthUtil.getDeptId();
Long userId = AuthUtil.getUser().getUserId();
autoStartModel.setCreateUser(userId);
autoStartModel.setCreateDept(Long.valueOf(deptId));
// String deptId = AuthUtil.getDeptId();
// Long userId = AuthUtil.getUser().getUserId();
// autoStartModel.setCreateUser(userId);
// autoStartModel.setCreateDept(Long.valueOf(deptId));
autoStartModel.setCreateTime(DateUtil.now());
autoStartModel.setStatus(10);
baseMapper.insert(autoStartModel);

@ -0,0 +1,35 @@
package org.springblade.system.jinhong;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
public class BaseUtils
{
/**
* 获取配置文件中的配置信息
*
* @param key配置文件key值
* @return
* @throws IOException
*/
public static String getConfigValue(String key)
{
try
{
Properties props = new Properties();
InputStream in = BaseUtils.class.getClassLoader()
.getResourceAsStream("config.properties");
BufferedReader bf = new BufferedReader(new InputStreamReader(in,
"UTF-8"));
props.load(bf);
return props.getProperty(key);
}
catch (IOException ex)
{
return "";
}
}
}

@ -0,0 +1,148 @@
package org.springblade.system.jinhong;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义拦截器拦截符合条件url的请求 身份验证拦截
* (是否有登录用户信息)
*/
@Slf4j
@Component
public class IdentityInterceptor extends HandlerInterceptorAdapter
{
// 读取ssoToken参数
private static final String strToken = BaseUtils.getConfigValue("ssoKey");
public final static String SEESION_USER = "seesion_user";
/**
* 在业务处理器处理请求之前被调用 如果返回false 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
* 如果返回true 执行下一个拦截器,直到所有的拦截器都执行完毕 再执行被拦截的Controller 然后进入拦截器链,
* 从最后一个拦截器往回执行所有的postHandle() 接着再从最后一个拦截器往回执行所有的afterCompletion()
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception
{
log.debug("==============执行顺序: 1、preHandle================");
// 获取当前请求的url
String requestUri = request.getRequestURI();
Validator validator = Validator.getInstance();
// 注入当前session
// validator.init(request);
String strResponse = request.getParameter(strToken);
//真实环境需要放开如下注释
/**
*
if (strResponse != null)
{
// 如果服务器端通过认证后,会返回后执行改操作,然后写入cookie
SSOResponse ssoResp = new SSOResponse(strResponse);
TicketManager tm = ssoResp.CreatePSOTicket();
if (tm == null)
{
PSORequest psoRequest = new PSORequest(request);
String requeststr = psoRequest.CreateHash();
String keeperUrl = BaseUtils.getConfigValue("keeperUrl");
keeperUrl = keeperUrl + "?" + strToken + "="
+ URLEncoder.encode(requeststr, "UTF-8");
response.sendRedirect(keeperUrl);
}
else
{
String domainName = BaseUtils.getConfigValue("domain");
tm.SaveTicket(response, domainName);
Iterator<Entry<String, String[]>> iterator = request
.getParameterMap().entrySet().iterator();
StringBuffer param = new StringBuffer();
int i = 0;
while (iterator.hasNext())
{
Entry<String, String[]> entry = (Entry<String, String[]>) iterator
.next();
if (entry.getKey().equals(strToken))
continue;
else
{
i++;
if (i == 1)
param.append("?").append(entry.getKey())
.append("=");
else
param.append("&").append(entry.getKey())
.append("=");
if (entry.getValue() instanceof String[])
{
param.append(((String[]) entry.getValue())[0]);
}
else
{
param.append(entry.getValue());
}
}
}
response.sendRedirect(requestUri + param.toString());
return false;
}
}
else
{
TicketManager tm = new TicketManager();
if (!tm.LoadTicket(request))
{
PSORequest psoRequest = new PSORequest(request);
String requeststr = psoRequest.CreateHash();
String keeperUrl = BaseUtils.getConfigValue("keeperUrl");
keeperUrl = keeperUrl + "?" + strToken + "="
+ URLEncoder.encode(requeststr, "UTF-8");
response.sendRedirect(keeperUrl);
return false;
}
}
validator.SetUserTicket(request);
return true;
*/
return false;
}
/**
* 在业务处理器处理请求执行完成后,生成视图之前执行的动作 可在modelAndView中加入数据比如当前时间
*/
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception
{
log.debug("==============执行顺序: 2、postHandle================");
}
/**
* 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等
*
* 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()
*/
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception
{
log.debug("==============执行顺序: 3、afterCompletion================");
}
}

@ -0,0 +1,90 @@
package org.springblade.system.jinhong;
import com.yawei.pso.TicketManager;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* 验证器
*/
public class Validator
{
private static ThreadLocal<Validator> validatorHolder = new ThreadLocal<Validator>()
{
protected Validator initialValue()
{
return new Validator();
}
};
// 当前请求的session
private HttpSession session = null;
// 当前的请求
private HttpServletRequest request = null;
private Validator()
{
}
public static Validator getInstance()
{
return validatorHolder.get();
}
/**
* 执行初始化
* @param httpRequest
*/
public void init(HttpServletRequest httpRequest)
{
this.request = httpRequest;
this.session = request.getSession();
}
/**
* 将凭证身份加入到session
* @param httpRequest
*/
public void SetUserTicket(HttpServletRequest httpRequest)
{
try
{
if (httpRequest.getSession()
.getAttribute(IdentityInterceptor.SEESION_USER) == null)
{
TicketManager ticket = new TicketManager();
if (ticket.LoadTicket(httpRequest))
{
// 登录用户姓名
String userName = ticket.getUserName();
// 登录用户账号
String userAccount = ticket.getUserID();
// 登录用户标识
String userGuid = ticket.getADGUID();
System.out.println("===userName===" + userName);
System.out.println("===userAccount===" + userAccount);
System.out.println("===userGuid===" + userGuid);
}
}
else
{
}
}
catch (Exception ex)
{
}
}
/**
* 清除session
*/
public void cancel()
{
this.session = null;
}
}
Loading…
Cancel
Save