公司项目使用到snaker流程引擎,要使用发送邮件功能,即在审批提交的时候通知下一步的处理人处理审批。主要涉及到MailService接口,mailServiceImpl接口,*.properties文件中配置发送者信息以及在具体地方调用接口。
1、我在message.properties中配置:
send_mail_adress=smtp.163.com
send_mail_userName=1825607****@163.com
send_mail_passwd=*****
2、MailService.java接口代码如下:
package com.wonders.bigdata.manageplatform.service.common.service;
import java.util.Map;
public interface MailService {
/**
* 发送邮件
* @return
*/
public void sendEmailData(String receiver,String subject,Map<String,String> content);
/**
* 发送邮件
* @param receiver 邮件接受者
* @param subject 邮件主题
* @param content 邮件内容
*/
}
3、MailServiceImpl.java接口的代码如下:(也可以看详细的对于方法参数的讲解http://blog.163.com/java_star/blog/static/11771480520136511023957/(转侵删))
package com.wonders.bigdata.manageplatform.service.common.service.Impl;
import com.wonders.bigdata.manageplatform.service.common.service.MailService;
import com.wonders.bigdata.manageplatform.utils.Messages;
import org.springframework.stereotype.Service;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Map;
import java.util.Properties;
/**
* Created by Administrator on 2016/3/23.
*/
@Service("MailServiceImpl")
public class MailServiceImpl implements MailService{
private static String send_mail_adress = Messages.getString("send_mail_adress");
private static String send_mail_userName = Messages.getString("send_mail_userName");
private static String send_mail_passwd = Messages.getString("send_mail_passwd");
private static Thread thread;
@Override
public void sendEmailData(final String receiver, final String subject, final Map<String, Object> content) {
final Properties props = new Properties();
thread = new Thread(new Runnable() {
@Override
public void run() {
//表示SMTP发送邮件,需要进行身份验证
props.put("mail.smtp.auth","true");
props.put("mail.smtp.host",send_mail_adress);
//发件人帐号
props.put("mail.user",send_mail_userName);
props.put("mail.password",send_mail_passwd);
//构建授权信息,用于进行SMTP身份验证
Authenticator authenticator = new Authenticator(){
@Override
protected PasswordAuthentication getPasswordAuthentication(){
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName,password);
}
};
//使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props,authenticator);
//创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
//设置发件人
InternetAddress form = null;
try {
form = new InternetAddress(props.getProperty("mail.user"));
message.setFrom(form);
//设置收件人
InternetAddress to = new InternetAddress(receiver);//receiver为收件人邮箱!
message.setRecipient(Message.RecipientType.TO,to);
//设置邮件标题
message.setSubject("【大数据管理平台】"+subject);
//设置邮件的内容体
String cd = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>"
+ "<html xmlns='http://www.w3.org/1999/xhtml'>"
+ "<head>"
+ "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"
+ "<title>无标题文档</title>"
+ "</head>"
+ "<body>"
// + "<p>【大数据管理平台】</p>"
+ "<p>尊敬的"+content.get("userName")+",您好:</p>"
+ "<p>您有一条来自"+"【大数据管理平台】"+"的"+"【"+subject+"】"+"待处理事件,请及时处理!</p>"
// + "<p>您有一条来自"+"["+content.get("applyOwner")+"]"+"的"+"["+subject+"]"+"申请,请及时处理!</p>"
+ "<p>【大数据管理平台】网址:https://data.wondersgroup.com</p>"
+ "<div align='center'>"
+ "<p align='center'> </p>"
+ "<div data-spm='100' class='copyright-100 ' margin-up='300px'>"
+ "<div class='y-row copyright' data-spm='25'>"
+ "<h4 align='center' class='big'>"
+ "<a target='blank' href='http://www.wondersgroup.com/about-wd/201412310639133820.html'>关于我们</a> "
+ "<a target='blank' href='http://www.wondersgroup.com/news'>服务公告</a> "
+ "<a target='blank' href='http://www.wondersgroup.com/contact'>联系我们</a> "
+ "</h4><h5> © 1995 - 2015 WONDERS INFORMATION CO., LTD. ALL RIGHTS RESERVED. **信息股份有限公司版权所有 沪ICP备05002296号 </h5></div></div></body></html>";
message.setContent(cd,"text/html;charset=UTF-8");
//发送邮件
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
}
备注:如出现com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 126 smtp6,j9KowAAnRcUi.......这样的bug。 在MailService接口中将邮件给自己抄送一份就行了不懂的见http://blog.163.com/java_star/blog/static/11771480520136511023957/
4.1 项目ApplyPackageController.java中具体调用的地方:
//发送短信、邮件
String nextOperator_message = params.get("S-ACTOR").toString();//本项目中获取下一步处理人
String applyName_message = params.get("packName").toString();//本项目中获取申请名称
String decision_message = params.get("decision").toString();//这也是本项目独有的
if (StringUtils.isNotEmpty(nextOperator_message) && StringUtils.isNotEmpty(applyName_message)) {
UserPO userPO = accountService.findUserByLoginName(nextOperator_message);
if (userPO != null) {
String reciver = userPO.getName(); //获取接收人用户名
String reciveNum = userPO.getMobile(); //获取接收人手机号
Map<String,Object> map = new HashMap<>();
map.put("userMailAddress",userPO.getEmail());//给map增加的信息,以备使用
map.put("userName",userPO.getName());//给map增加的信息,以备使用
String receiver = userPO.getEmail();//接受人的邮箱赋值给receiver
if (decision_message.equals("1")) {
}
//以上都是获取需要的相关参数,比如发送邮件方法中的接受邮箱, 申请名,map包含的信息,再调用发送邮件接口,
mailService.sendEmailData(receiver, applyName_message,map );
//调用发送短信接口,这是项目的另一个功能
textAndEmailService.sendMessageInfo(reciver, reciveNum, applyName_message);
}
}
4.2 整个ApplyPackageController.java:(可以不看)package com.wonders.bigdata.manageplatform.web.flow;
import com.wonders.bigdata.manageplatform.engine.EngineFacets;
import com.wonders.bigdata.manageplatform.service.common.service.HiveService;
import com.wonders.bigdata.manageplatform.service.common.service.MailService;//导入
import com.wonders.bigdata.manageplatform.service.common.service.TextAndEmailService;
import com.wonders.bigdata.manageplatform.service.datapackage.model.po.DataPackagePO;
import com.wonders.bigdata.manageplatform.service.datapackage.service.DataPackageService;
import com.wonders.bigdata.manageplatform.service.metadata.model.po.MetadataTablePO;
import com.wonders.bigdata.manageplatform.service.metadata.service.MetadataTableService;
import com.wonders.bigdata.manageplatform.service.processrelate.service.ProcessRelateService;
import com.wonders.bigdata.manageplatform.service.resourcetype.model.po.CatalogTablePO;
import com.wonders.bigdata.manageplatform.service.resourcetype.model.po.StandardCatalogPO;
import com.wonders.bigdata.manageplatform.service.resourcetype.service.CatalogTableService;
import com.wonders.bigdata.manageplatform.service.resourcetype.service.StandardCatalogService;
import com.wonders.bigdata.manageplatform.service.sysauthoritymanage.model.po.UserUsergroupPO;
import com.wonders.bigdata.manageplatform.service.sysauthoritymanage.model.po.UsergroupPO;
import com.wonders.bigdata.manageplatform.service.sysauthoritymanage.service.UserUsergroupService;
import com.wonders.bigdata.manageplatform.service.sysauthoritymanage.service.UsergroupService;
import com.wonders.bigdata.manageplatform.service.user.dao.UserDao;
import com.wonders.bigdata.manageplatform.service.user.model.po.UserDataPackagePO;
import com.wonders.bigdata.manageplatform.service.user.model.po.UserPO;
import com.wonders.bigdata.manageplatform.service.user.service.Impl.ShiroDbRealm.ShiroUser;
import com.wonders.bigdata.manageplatform.service.user.service.AccountService;
import com.wonders.bigdata.manageplatform.service.user.service.UserDataPackageService;
import com.wonders.bigdata.manageplatform.service.user.service.UserGradeService;
import com.wonders.bigdata.manageplatform.utils.Constant;
import com.wonders.bigdata.manageplatform.utils.LogsSave;
import com.wonders.bigdata.manageplatform.utils.Messages;
import com.wonders.bud.framework.common.util.RestMsg;
import com.wonders.engine.SnakerEngine;
import com.wonders.engine.access.QueryFilter;
import com.wonders.engine.entity.HistoryOrder;
import com.wonders.engine.entity.HistoryTask;
import com.wonders.engine.entity.Order;
import com.wonders.engine.entity.Task;
import com.wonders.engine.helper.JsonHelper;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.hibernate.internal.util.ConfigHelper;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
@Controller
@RequestMapping("api/flow/applyPacakgeprocess")
public class ApplyPackageController {
protected Logger log = Logger.getLogger(ApplyPackageController.class);
private Log logProgress = LogFactory.getLog("Administrator_Process");
private Log logger = LogFactory.getLog("Tenant_Application"); //数据申请日志 输出日志格式:数据申请+” ”+用户名+” ”+ip地址+” ”+日期+” ”+申请名称+” ”+表名(多表用逗号隔开)+” ”+所属数据目录+Description;
@Autowired
private EngineFacets facets;
@Autowired
private UserDataPackageService userDataPackageService;
@Autowired
private DataPackageService dataPackageService;
@Autowired
private HiveService hiveService;
@Autowired
private MetadataTableService metadataTableService;
@Autowired
private CatalogTableService catalogTableService;
@Autowired
private UserDao userDao;
@Autowired
private StandardCatalogService standardCatalogService;
@Autowired
private AccountService accountService;
@Resource
private UserUsergroupService userUsergroupService;
@Resource
private UsergroupService usergroupService;
@Resource
private TextAndEmailService textAndEmailService;
@Resource
private MailService mailService;//导入
/**
* 用户暂存申请信息
*
* @param request
* @return
*/
@RequestMapping(value = "/tempStore", method = RequestMethod.POST)
@ResponseBody
public RestMsg<String> tempStore(HttpServletRequest request) {
RestMsg<String> rm = new RestMsg<String>();
Map<String, Object> params = GetParametersCommon(request);
//数据申请日志
LogsSave.Tenant_Application(logger,this.getUname(),request.getRemoteAddr(),params.get("packName").toString(),params.get("selectedTablesName").toString(),params.get("selectedSourcesName").toString()," 用户暂存申请信息");
//根据流程类型获取流程id
CommonProcess commonProcess = new CommonProcess(facets);
String processId = commonProcess.getProcessIdByType(Constant.PROCESS_TYPE_USERAPPLY);
String orderId = request.getParameter("orderId");
String taskId = request.getParameter("taskId");
String username = getUname();
if (StringUtils.isEmpty(orderId) && StringUtils.isEmpty(taskId)) {
facets.startAndTempStore(processId, username, params);
} else {
String methodStr = request.getParameter("method");
int method = 0;
if (StringUtils.isNotEmpty(methodStr)) {
method = Integer.parseInt(methodStr);
}
switch (method) {
case 0://任务执行
Task task = facets.getEngine().query().getTask(taskId);
task.setVariable(JsonHelper.toJson(params));
facets.getEngine().task().updateTask(task);
break;
case -1://驳回、任意跳转
facets.executeAndJump(taskId, username, params, request.getParameter("nodeName"));
break;
default:
facets.execute(taskId, username, params);
break;
}
}
rm.successMsg();
return rm;
}
/**
* 管理员暂存申请包的生成
*
* @param request
* @return
*/
@RequestMapping(value = "/adminTempStoreApply", method = RequestMethod.POST)
@ResponseBody
public RestMsg<String> adminTempStoreApply(HttpServletRequest request) {
RestMsg<String> rm = new RestMsg<String>();
Map<String, Object> params = new HashMap<String, Object>();
Enumeration<String> paraNames = request.getParameterNames();
while (paraNames.hasMoreElements()) {
String element = paraNames.nextElement();
int index = element.indexOf("_");
String paraValue = request.getParameter(element);
if (element.equals("processId") || element.equals("orderId") || element.equals("taskId")) {
continue;
} else {
if (index == -1) {
params.put(element, paraValue);
} else {
char type = element.charAt(0);
String name = element.substring(index + 1);
Object value = null;
switch (type) {
default:
value = paraValue;
break;
}
params.put(name, value);
}
}
}
String processId = request.getParameter("processId");
String orderId = request.getParameter("orderId");
String taskId = request.getParameter("taskId");
String username = getUname();
if (StringUtils.isEmpty(orderId) && StringUtils.isEmpty(taskId)) {
facets.startAndExecute(processId, username, params);
} else {
String methodStr = request.getParameter("method");
int method = 0;
if (StringUtils.isNotEmpty(methodStr)) {
method = Integer.parseInt(methodStr);
}
switch (method) {
case 0://任务执行
facets.AdminTempStoreDeason(taskId, username, params);
break;
case -1://驳回、任意跳转
facets.executeAndJump(taskId, username, params, request.getParameter("nodeName"));
break;
default:
facets.execute(taskId, username, params);
break;
}
}
rm.successMsg();
return rm;
}
/**
* 申请包管理员创建
*
* @param request
* @return
*/
@RequestMapping(value = "/admincreate", method = RequestMethod.POST)
@ResponseBody
public RestMsg<String> adminCreate(HttpServletRequest request) {
RestMsg<String> rm = new RestMsg<String>();
String i_decision = request.getParameter("I_decision");
boolean allowUpdate = false;
allowUpdate = Boolean.valueOf(request.getParameter("allowUpdate"));
String dataPackageName = request.getParameter("S_dataPackageName");
String tableInfos = request.getParameter("S_tableInfos");
String tableInfosLogger = "";
Long dpId = 0L;
if (Integer.valueOf(i_decision) == 0) {
ArrayList<String> flag = new ArrayList<String>();
JSONObject infosJson = new JSONObject();
List<Integer> tableGrade = new ArrayList<>();
try {
infosJson = new JSONObject(tableInfos);
JSONArray jsonTableArray = infosJson.getJSONArray("tables");// 得到页面传过来的表信息
for (int t = 0; t < jsonTableArray.length(); t++) {
JSONObject tableJsonObject = jsonTableArray.getJSONObject(t);
tableInfosLogger += tableJsonObject.getString("name")+"("+tableJsonObject.getString("remark")+")"+",";
//处理新增的表
if (tableJsonObject.getString("type").equals("0")) {
//获取申请租户loginName
String orderId = request.getParameter("orderId");
HistoryOrder historyOrder = facets.getEngine().query().getHistOrder(orderId);
String creator = historyOrder.getCreator();
String tableName = creator + "_" + tableJsonObject.getString("name");// 将用户登录名+前台填写的表名作为生成表的名字
tableJsonObject.put("name", tableName);// 更新name字段的值
String selectSql = tableJsonObject.getString("sql");// 得到表的select语句
selectSql = selectSql.toLowerCase();
//解析sql语句获得源表
tableGrade = analyseSQLgetTable(selectSql);
String previewData = genPreviewData(selectSql);// 生成预览数据
tableJsonObject.put("previewData", previewData);
tableJsonObject.put("dataGrade", tableGrade.get(0));
if (previewData.indexOf("error") > -1) {
flag.add(Integer.toString(t + 1));
}
} else {//处理选择已有表
String tableType = tableJsonObject.getString("type");
String tableId = tableJsonObject.getString("sqlId");
String tableRemark = "";
String tableDescription = "";
String previewData = "";
String dataGrade = "";
//如果是公共包
if (tableType.equals("2")) {
MetadataTablePO metadataTablePO = metadataTableService.findById(Long.parseLong(tableId));
tableRemark = metadataTablePO.getRemark() == null ? "" : metadataTablePO.getRemark();
tableDescription = metadataTablePO.getDescription() == null ? "" : metadataTablePO.getDescription();
previewData = metadataTablePO.getExample() == null ? "" : metadataTablePO.getExample();
dataGrade = metadataTablePO.getOpenLevel().toString();
} else {//如果是数据目录
CatalogTablePO catalogTablePO = catalogTableService.findById(Long.parseLong(tableId));
tableRemark = catalogTablePO.getRemark();
tableDescription = catalogTablePO.getDescription();
previewData = catalogTablePO.getExample();
dataGrade = catalogTablePO.getDataGrade().toString();
}
tableJsonObject.put("remark", tableRemark);// 更新remark字段的值
tableJsonObject.put("desription", tableDescription);//更新description字段的值
tableJsonObject.put("previewData", previewData);
tableJsonObject.put("type", "1");
tableJsonObject.put("dataGrade", dataGrade);
}
tableJsonObject.put("allowUpdate", allowUpdate);
}
} catch (JSONException e) {
e.printStackTrace();
flag.add("json转换异常");
log.error("json转换", e);
}
boolean index = false;
if (flag != null && flag.size() > 0) {
if (flag.get(0).indexOf("json转换异常") > -1) {
rm.errorMsg("json数据转换异常");
} else {
StringBuffer sb = new StringBuffer();
for (String str : flag) {
if (index) {
sb.append(",");
} else {
index = true;
}
sb.append(str);
}
rm.errorMsg(sb.toString());
}
} else {
String dataPackRemark = "";
String dataPackdescript = "";
dataPackRemark = request.getParameter("S_dataPackRemark");
dataPackdescript = request.getParameter("S_dataPackdescript");
String resourceTypeId = request.getParameter("S_resourceTypeId");
Long userId = getUid();// 当前登录的用户id
try {
dpId = dataPackageService.flowCreatePubPackView(dpId, userId, dataPackageName, infosJson.toString(),
resourceTypeId, dataPackRemark, dataPackdescript).getId();
DataPackagePO dataPackagePO1 = dataPackageService.getDataPackageById(dpId);
dataPackagePO1.setType(Constant.DATA_DATAPACKAGE_TYPE_APPLY);
dataPackagePO1.setTypeId((long) -1);
dataPackageService.saveDataPackage(dataPackagePO1);
// 结束
} catch (Exception e) {
e.printStackTrace();
rm.errorMsg("发生异常,请稍后再试");
log.error("管理员创建数据包", e);
return rm;
}
}
/*tableInfosLogger = tableInfosLogger.substring(0,tableInfosLogger.length()-1);
LogsSave.Administrator_Process(logProgress,getUname(),request.getRemoteAddr(),dataPackageName,tableInfosLogger,"创建数据包");
rm.successMsg();
return rm;*/
}
//执行流程引擎方法
Map<String, Object> params = GetParametersCommon(request);
if (dpId == 0L)
{ params.put("dpId", "");}
else
{ params.put("dpId", dpId);}
Date date = new Date();
SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd");
params.put("adminFinishTime",bartDateFormat.format(date));
params.put("isAdminCreated","true");//标志管理员已创建
params.put("adminName",getUname());//数据包创建者管理员的名字
params.put("isUserConfirm","");
String processId = request.getParameter("processId");
String orderId = request.getParameter("orderId");
String taskId = request.getParameter("taskId");
String sActorName = facets.getEngine().query().getOrder(orderId).getVariableMap().get("S-ACTOR").toString();
UserPO sActor = accountService.findUserByLoginName(sActorName);
if("0".equals(i_decision)){//在管理员同意创建的情况下
UserPO po = accountService.findUserById(getUserGroupHeadManId(sActor.getId()));
if(po.getLoginName().equals(Constant.SK_ZUZHANG1)){//如果该申请的组长是gaoju,decision置为1
params.put("decision",1);
}
//TODO 更多组长需要补充更多的判断
}
String username = getUname();
try {
if (StringUtils.isEmpty(orderId) && StringUtils.isEmpty(taskId) && orderId != null && taskId != null) {
facets.startAndExecute(processId, username, params);
} else {
String methodStr = request.getParameter("method");
int method = 0;
if (StringUtils.isNotEmpty(methodStr)) {
method = Integer.parseInt(methodStr);
}
switch (method) {
case 0://任务执行
Task task = facets.executeAdminTempStore(taskId, username, params);
if (task != null) {
facets.execute(task.getId(), username, params);
} else {
facets.execute(taskId, username, params);
}
break;
case -1://驳回、任意跳转
facets.executeAndJump(taskId, username, params, request.getParameter("nodeName"));
break;
default:
facets.execute(taskId, username, params);
break;
}
}
//发送短信、邮件
String nextOperator_message = params.get("S-ACTOR").toString();
String applyName_message = params.get("packName").toString();
if (StringUtils.isNotEmpty(nextOperator_message) && StringUtils.isNotEmpty(applyName_message)) {
UserPO userPO = accountService.findUserByLoginName(nextOperator_message);
if (userPO != null) {
String reciver = userPO.getName(); //获取接收人用户名
String reciveNum = userPO.getMobile(); //获取接收人手机号
Map<String,Object> map = new HashMap<>();
map.put("userMailAddress",userPO.getEmail());
map.put("userName",userPO.getName());
String receiver = userPO.getEmail();
//调用发送邮件接口
mailService.sendEmailData(receiver, applyName_message,map );
//调用发送短信接口
textAndEmailService.sendMessageInfo(reciver, reciveNum, applyName_message);
}
}
} catch (Exception e) {
e.printStackTrace();
dataPackageService.deleteDataPackageById(dpId);
log.error("管理员创建数据包", e);
rm.errorMsg("流程执行出错,回退完成...");
return rm;
}
if(tableInfosLogger != null && !"".equals(tableInfosLogger)){
tableInfosLogger = tableInfosLogger.substring(0,tableInfosLogger.length()-1);
LogsSave.Administrator_Process(logProgress,getUname(),request.getRemoteAddr(),dataPackageName,tableInfosLogger,"创建数据包");
}
rm.successMsg();
return rm;
}
//解析sql语句获得源表
private List<Integer> analyseSQLgetTable(String selectSql) {
List<Integer> tableGrade = new ArrayList<>();
if (selectSql.contains("where")) {//包含where条件的解析方法
String namesWhere = selectSql.split("from")[1];
String names = namesWhere.split("where")[0];
names = names.trim();
if (names.contains(",")) {//有","说明包含多个表名
String[] catalogTableNames = names.split(",");
int grade = -1;
for (String catalogTableName : catalogTableNames) {
List<CatalogTablePO> tempCatalogTablePOs = catalogTableService.getByTableOrPackageName(catalogTableName);
if (tempCatalogTablePOs.size() != 0) {
int temp = catalogTableService.getByTableOrPackageName(catalogTableName).get(0).getDataGrade();
if (temp > grade) {
grade = temp;
}
}
}
tableGrade.add(grade);
} else {
List<CatalogTablePO> tempCatalogTablePOs = catalogTableService.getByTableOrPackageName(names);
if (tempCatalogTablePOs.size() != 0) {
int grade = catalogTableService.getByTableOrPackageName(names).get(0).getDataGrade();
tableGrade.add(grade);
} else {
int grade = 1;
tableGrade.add(grade);
}
}
} else {//不包含where的解析方法
String names = selectSql.split("from")[1];
if (names.contains("group by")) {
names = names.split("group by")[0];
names = names.trim();
if (names.contains(",")) {//有","说明包含多个表名
String[] catalogTableNames = names.split(",");
int grade = -1;
for (String catalogTableName : catalogTableNames) {
catalogTableName = catalogTableName.trim();
List<CatalogTablePO> tempCatalogTablePOs = catalogTableService.getByTableOrPackageName(catalogTableName);
if (tempCatalogTablePOs.size() != 0) {
int temp = catalogTableService.getByTableOrPackageName(catalogTableName).get(0).getDataGrade();
if (temp > grade) {
grade = temp;
}
}
}
tableGrade.add(grade);
} else {
List<CatalogTablePO> tempCatalogTablePOs = catalogTableService.getByTableOrPackageName(names);
if (tempCatalogTablePOs.size() != 0) {
int grade = catalogTableService.getByTableOrPackageName(names).get(0).getDataGrade();
tableGrade.add(grade);
} else {
int grade = 1;
tableGrade.add(grade);
}
}
} else {
names = names.trim();
if (names.contains(",")) {//有","说明包含多个表名
String[] catalogTableNames = names.split(",");
int grade = -1;
for (String catalogTableName : catalogTableNames) {
catalogTableName = catalogTableName.trim();
List<CatalogTablePO> tempCatalogTablePOs = catalogTableService.getByTableOrPackageName(catalogTableName);
if (tempCatalogTablePOs.size() != 0) {
int temp = catalogTableService.getByTableOrPackageName(catalogTableName).get(0).getDataGrade();
if (temp > grade) {
grade = temp;
}
}
}
tableGrade.add(grade);
} else {
List<CatalogTablePO> tempCatalogTablePOs = catalogTableService.getByTableOrPackageName(names);
if (tempCatalogTablePOs.size() != 0) {
int grade = catalogTableService.getByTableOrPackageName(names).get(0).getDataGrade();
tableGrade.add(grade);
} else {
int grade = 1;
tableGrade.add(grade);
}
}
}
}
return tableGrade;
}
/*
* 生成预览数据
*
* @param sql
*
* @return result String
*/
private String genPreviewData(String sql) {
try {
ArrayList<String[]> datas = hiveService.searchBySelcet(sql);
if (datas != null && datas.size() > 0) {
String data = "";
for (int c = 0; c < datas.size(); c++) {
if (c == 0) {
data = data + "<tr>";
String[] rows = datas.get(c);
for (int r = 0; r < rows.length; r++) {
String row = rows[r];
if (row.contains(".")) {
row = row.split("\\.")[1];
}
data = data + "<th>" + row + "</th>";
}
data = data + "</tr>";
} else {
data = data + "<tr>";
String[] rows = datas.get(c);
for (int r = 0; r < rows.length; r++) {
String row = rows[r];
data = data + "<td>" + row + "</td>";
}
data = data + "</tr>";
}
}
return data;
} else {
return "select error";
}
} catch (SQLException e) {
e.printStackTrace();
log.error("生成预览数据", e);
return "select error";
}
}
/**
* 租户确认生成数据包,写入user_datapacakge表
*
* @return
* @author WYP
*/
@RequestMapping(value = "/userConfirm", method = RequestMethod.POST)
@ResponseBody
public RestMsg<String> UserConfirm(HttpServletRequest request) {
RestMsg<String> rm = new RestMsg<String>();
String orderId = request.getParameter("orderId");
Map<String, Object> params = GetParametersCommon(request);//得到前端页面传来的参数
int usrDecision = Integer.parseInt(request.getParameter("I_decision"));
String dpId = "";
List<HistoryTask> listasks = facets.getEngine().query().getHistoryTasks(new QueryFilter().setOrderId(orderId));
try {
for (HistoryTask e : listasks) {
JSONObject contentJsonObject = new JSONObject(e.getVariable());
if (contentJsonObject.has("dpId")) {
dpId = contentJsonObject.getString("dpId");
break;
} else continue;
}
} catch (Exception e) {
e.printStackTrace();
log.error("", e);
}
Long dataPackageId = 0L;
try {
if(usrDecision != 2){
if (StringUtils.isNotBlank(dpId)) {
dataPackageId = Long.parseLong(dpId);
DataPackagePO dpPo = dataPackageService.getDataPackageById(dataPackageId);
dpPo.setDeleteFlag(Constant.DATA_DATAPACKAGE_NOT_DELETE);
dpPo.setCreateStatus(Constant.DATA_DATAPACKAGE_CREATE_STATUS_CREATING);//设置创建状态为创建中
dpPo.setCreator(userDao.get(getUid()).getLoginName());
dataPackageService.saveDataPackage(dpPo);
UserDataPackagePO udpPos = userDataPackageService.findByDpId(dataPackageId);
if (udpPos == null) {//判断是新增用户数据包还是更新用户数据包
UserDataPackagePO udpPo = new UserDataPackagePO();
udpPo.setUserId(getUid());
udpPo.setDpId(dataPackageId);
udpPo.setStatus(Constant.USERDATAPACKAGE_NOT_USED);//用户数据包未使用标志
udpPo.setType(Constant.USERDATAPACKAGE_TYPE_APPLY);//用户数据包是申请包
udpPo.setCreateDate(new Date());
udpPo.setDeleteFlag(Constant.USERDATAPACKAGE_NOT_DELETE);
udpPo.setCreator(dpPo.getCreator());
userDataPackageService.addUserDataPackage(udpPo);
} else {
udpPos.setCreateDate(new Date());
userDataPackageService.addUserDataPackage(udpPos);
}
String result = "";
if (request.getParameter("I_decision").equals("0")) {
result = "true";
} else {
result = "false";
}
if ("true".equals(result)) {
String flag = dataPackageService.confirmGenPriPackage(dataPackageId, result, getUid());
if ("success".equals(flag) || "您的账户空间已满".equals(flag)) {
DataPackagePO ddpo = dataPackageService.getDataPackageById(dataPackageId);
ddpo.setCreateStatus(Constant.DATA_DATAPACKAGE_CREATE_STATUS_CREATED);
dataPackageService.saveDataPackage(ddpo);
dataPackageService.saveUserCatalogInfo(dataPackageId, getUid());//保存租户生成申请资产到租户目录中
params.put("decision", 1);//转向
RunFlowProcess(request, params);//运行流程
} else {
int failReason = getFailConstantValueFromTheFlag(flag);//获得确认生成数据包失败原因
DataPackagePO ddpo = dataPackageService.getDataPackageById(dataPackageId);
ddpo.setCreateStatus(Constant.DATA_DATAPACKAGE_CREATE_STATUS_CREATE_FAIL);
ddpo.setFailReason(failReason);//保存确认生成失败原因
dataPackageService.saveDataPackage(ddpo);
dataPackageService.saveUserCatalogInfo(dataPackageId, getUid());//保存租户生成申请资产到租户目录中
RunFlowProcess(request, params);//运行流程
rm.errorMsg(flag);
rm.setCode(-1);
return rm;
}
rm.successMsg("数据包生成成功!");
} else if ("false".equals(result)) {
DataPackagePO ddpo = dataPackageService.getDataPackageById(dataPackageId);
ddpo.setCreateStatus(Constant.DATA_DATAPACKAGE_CREATE_STATUS_CREATE_FAIL);
dataPackageService.saveDataPackage(ddpo);
rm.successMsg("不接受确认生成,操作已成功!");
RunFlowProcess(request, params);//运行流程
HistoryOrder histOrder = facets.getEngine().query().getHistOrder(orderId);
histOrder.setOrderState(Constant.SNAKE_ORDER_STATE_NotAccept);
facets.getEngine().order().updateHistoryOrder(histOrder);
}
} else {
rm.errorMsg();
return rm;
}
}else{
params.put("decision", 2);//转向
params.put("isUserConfirm","true");//设置组长已经接受这个申请
RunFlowProcess(request, params);//运行流程
}
} catch (Exception e) {
DataPackagePO ddpo = dataPackageService.getDataPackageById(dataPackageId);
ddpo.setCreateStatus(Constant.DATA_DATAPACKAGE_CREATE_STATUS_CREATE_FAIL);
dataPackageService.saveDataPackage(ddpo);
/*facets.getEngine().order().terminate(orderId);//终结流程*/
String adminName = (String) facets.getEngine().query().getOrder(orderId).getVariableMap().get("adminName");
if(adminName.equals(Constant.SK_ADMIN0)){//管理员是钱涌
params.put("decision", 1);//转向
}else if(adminName.equals(Constant.SK_ADMIN1)){
params.put("decision", 2);//转向
}
RunFlowProcess(request, params);//运行流程
e.printStackTrace();
rm = rm.errorMsg("确认生成数据包失败!");
rm.setCode(-1);
return rm;
}
rm.successMsg();
return rm;
}
/**
* 数据回填s
*
* @param request
* @return DataPackageApplyVO
* @throws JSONException
* @author holysanwish
*/
@RequestMapping(value = "/getReWritenInfo", method = RequestMethod.GET, produces = "text/html;charset=UTF-8")
@ResponseBody
public String getReWritenInfo(HttpServletRequest request) {
try {
String taskId = request.getParameter("taskId");
Task temp = facets.getEngine().query().getTask(taskId);
if (temp != null) {
JSONObject variable = new JSONObject(temp.getVariable());
if (variable.has("tableInfos")) {
JSONObject tableInfos = new JSONObject(variable.getString("tableInfos"));
JSONArray tables = tableInfos.getJSONArray("tables");
if (null != tables) {
for (int i = 0; i < tables.length(); i++) {
JSONObject table = tables.getJSONObject(i);
if(table.has("catalogId")){
String catalogId = table.getString("catalogId");
table.put("catalogName", "");
if (null != catalogId && !"".equals(catalogId)) {
Long standCatalogId = Long.parseLong(catalogId);
StandardCatalogPO standardCatalogPO = standardCatalogService.findById(standCatalogId);
if (null != standardCatalogPO) {
table.put("catalogName", standardCatalogPO.getName());
}
}
}
}
}
variable.put("tableInfos", tableInfos.toString());
return variable.toString();
} else {
return temp.getVariable();
}
} else {
return null;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
log.error("获取数据包暂存数据", e);
return null;
}
}
/**
* 根据失败的具体详情,取得对应常量标示
*
* @param flag 具体错误详情
* @return 对应常量标示
* @author XB 2015-12-1 16:45:29
*/
private int getFailConstantValueFromTheFlag(String flag) {
int failReson = -1;
log.info("根据失败的具体详情,取得对应常量标示");
if (StringUtils.isEmpty(flag)) {//如果参数为空,则返回默认值-1
return failReson;
}
switch (flag) {
case "hive表已经存在":
failReson = Constant.DATA_DATAPACKAGE_FAIL_REASON_TABLE_EXIST;
break;
case "没有sql语句!":
failReson = Constant.DATA_DATAPACKAGE_FAIL_REASON_NO_SQL;
break;
case "您的账户空间已满":
failReson = Constant.DATA_DATAPACKAGE_FAIL_REASON_USER_NOPLACE;
break;
default:
failReson = Constant.DATA_DATAPACKAGE_FAIL_REASON_OTHER;
break;
}
return failReson;
}
/**
* @param : 无
* @return : Page<Process>
* @Description : 管理员帮助重新申请
* @author : XCL
* @date : 2016年6月15日15:17:29
*/
@RequestMapping(value = "/managerHelp/ReApplyAgain", method = RequestMethod.GET)
@ResponseBody
public RestMsg<String> ReApplyAgain(HttpServletRequest request) {
Map<String, Object> params = null;
RestMsg<String> rm = new RestMsg<>();
String dpId = request.getParameter("dpId");
String taskId = request.getParameter("taskId");
String orderId = request.getParameter("orderId");
if (!(StringUtils.isNotEmpty(dpId) && StringUtils.isNotEmpty(taskId) && StringUtils.isNotEmpty(orderId))) {
rm.errorMsg();
rm.setMsg("传入参数缺少或者为空!");
return rm;
}
Long dataPackageId = Long.parseLong(dpId);
String flag = null;
try {
DataPackagePO ddpo = dataPackageService.getDataPackageById(dataPackageId);
UserPO userPO = accountService.findUserByLoginName(ddpo.getCreator());//获取申请数据用户信息
flag = dataPackageService.confirmGenPriPackage(dataPackageId, "true", userPO.getId());
if ("success".equals(flag)) {
ddpo.setCreateStatus(Constant.DATA_DATAPACKAGE_CREATE_STATUS_CREATED);
dataPackageService.saveDataPackage(ddpo);
dataPackageService.saveUserCatalogInfo(dataPackageId, userPO.getId());//保存租户生成申请资产到租户目录中
rm.successMsg();
rm.setResult("数据包生成成功!");
facets.execute(taskId, getUname(), params);
} else {
int failReason = getFailConstantValueFromTheFlag(flag);//获得确认生成数据包失败原因
ddpo.setCreateStatus(Constant.DATA_DATAPACKAGE_CREATE_STATUS_CREATE_FAIL);
ddpo.setFailReason(failReason);//保存确认生成失败原因
dataPackageService.saveDataPackage(ddpo);
dataPackageService.saveUserCatalogInfo(dataPackageId, userPO.getId());//保存租户生成申请资产到租户目录中
rm.errorMsg(flag);
rm.setResult("数据包生成失败!");
}
} catch (Exception e) {
e.printStackTrace();
facets.getEngine().order().terminate(orderId, getUname());
}
return rm;
}
/**
* 用户申请信息显示
*
* @param request
* @return
*/
@RequestMapping(value = "/applyInfo", method = RequestMethod.POST)
@ResponseBody
public RestMsg<String> applyInfo(HttpServletRequest request) {
RestMsg<String> rm = new RestMsg<String>();
try {
String taskId = request.getParameter("taskId");
Task task = facets.getEngine().query().getTask(taskId);
JSONObject json = new JSONObject(task.getVariable());
if (json.has("packName")) rm.setResult(task.getVariable());
else {
String orderId = task.getOrderId();
Order order = facets.getEngine().query().getOrder(orderId);
rm.setResult(order.getVariable());
}
} catch (Exception e) {
e.printStackTrace();
rm.errorMsg();
log.error("用户申请信息显示", e);
}
return rm;
}
/**
* 申请名称重名判断
*
* @param request
* @return
*/
@RequestMapping(value = "/checkReName", method = RequestMethod.POST)
@ResponseBody
public RestMsg<String> checkReName(HttpServletRequest request) {
RestMsg<String> rm = new RestMsg<String>();
try {
String name = request.getParameter("name");
String orderId = request.getParameter("orderId");
Long userId = getUid();//获取当前用户id
String userLoginName = getUname();//获取当前用户的登录名
//在数据包列表中查找
List<DataPackagePO> list = dataPackageService.getDataPackageAndApply(name, userId);
//在order列表中查找
String sql = "SELECT * FROM wf_order WHERE variable LIKE \'%\"packName\":\"" + name + "\"%\' AND creator=\'" + userLoginName + "\' AND id!=\'" + orderId + "\';";
List<Order> rs = facets.getEngine().query().nativeQueryList(Order.class, sql);
if ((list != null && list.size() > 0) || (rs != null && rs.size() > 0)) {
rm.setResult("重名");
} else {
rm.setResult("无重名");
}
rm.successMsg();
} catch (Exception e) {
e.printStackTrace();
rm.errorMsg("查询信息失败,无法判断重名!");
log.error("申请名称重名判断", e);
}
return rm;
}
/**
* @param
* @return RestMsg
* @description 查询管理员驳回信息,回填给领导
* @author WYP
*/
@RequestMapping(value = "/managerRejShow", method = RequestMethod.GET)
@ResponseBody
public RestMsg<String> managerRegShow(HttpServletRequest request) {
RestMsg<String> rm = new RestMsg<>();
String taskId = request.getParameter("taskId");
try {
Task task = facets.getEngine().query().getTask(taskId);
String variable = task.getVariable();
JSONObject var = new JSONObject(variable);
if (var.has("managerResult")) {
rm.setResult(var.getString("managerResult"));
rm.successMsg();
}
} catch (Exception e) {
rm.setCode(-1);
rm.errorMsg();
e.printStackTrace();
}
return rm;
}
/**
* 租户申请资产进入流程方法
* create by XB 2016-6-17 15:51:00
*
* @return
*/
@RequestMapping(value = "/enterProcess", method = RequestMethod.POST)
@ResponseBody
public String enterProcess(MultipartHttpServletRequest request) {
Map<String, Object> params = null;
String info = "";
List<String> fileAdresses = new ArrayList<>();
String fileAdress = "";
try {
params = GetParametersCommon(request);
List<MultipartFile> list = request.getFiles("S_file");
//SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = new Date();
long currentTime = d.getTime();//为防止申请名是中文的情况,改用毫秒时间来记录不同的申请
String packName = (String) params.get("packName");
String isAdminCreated = "false";//用来记录管理员是否已经创建,作为领导端页面判断的依据
String realPath = Messages.getString("skFile");
int fileCount = 0;//记录总共有多少个文件
//获得上传文件
for(MultipartFile file:list){
File inFile = new File(realPath);
if(!inFile.isFile() && !inFile.isDirectory()){
inFile.mkdirs();
}
File rootfile = new File(realPath+ "/" +this.getUname());
if(!rootfile.isFile() && !rootfile.isDirectory()){
rootfile.mkdirs();
}
File outfile = new File(realPath+this.getUname() + "/" + currentTime);
if(!outfile.isFile() && !outfile.isDirectory()){
outfile.mkdirs();
}
String fileName = file.getOriginalFilename();
int idx = fileName.lastIndexOf(".");
String suffix = fileName.substring(idx + 1, fileName.length());//文件后缀名
//因为a标签无法用中文下载;所有
String filePath = realPath+this.getUname() + "/" + currentTime + "/" + fileName;
/*params.put("userFile"+fileCount,fileName);
fileCount++;*/
File tartFile = new File(filePath);
if (tartFile.exists()) {
tartFile.delete();
}
fileAdresses.add(filePath);
file.transferTo(tartFile);
}
for(String adress:fileAdresses){
fileAdress = fileAdress + adress + ";";
}
//去除最后一个“;”
if (!fileAdress.equals("")) {
fileAdress = fileAdress.substring(0, fileAdress.length() - 1);
}
//补充地址入流程引擎
params.put("isAdminCreated",isAdminCreated);
params.put("fileAdress",fileAdress);
//补充创建者入流程引擎
params.put("creator",this.getUname());
//补充三领导审批结果的数据入流程引擎
params.put("leaderDecision0","-2");
params.put("leaderDecisionTime0","-2");
params.put("leaderDecision1","-2");
params.put("leaderDecisionTime1","-2");
params.put("leaderDecision2","-2");
params.put("leaderDecisionTime2","-2");
params.put("leaderDecision3","-2");
params.put("leaderDecisionTime3","-2");
//补充管理员创建完成时间入流程引擎
params.put("adminFinishTime","-2");
//数据申请日志
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
logger.info("数据申请"+" "+this.getUname()+" "+request.getRemoteAddr()+" "+df.format(new Date())+" "+params.get("packName")+" "+params.get("selectedTablesName")+" "+params.get("selectedSourcesName")+" 租户申请资产进入流程方法");
//根据流程类型获取流程id
CommonProcess commonProcess = new CommonProcess(facets);
String processId = commonProcess.getProcessIdByType(Constant.PROCESS_TYPE_USERAPPLY);
String taskId = request.getParameter("taskId");
String orderId = request.getParameter("orderId");
String nextOperator = request.getParameter("");
String username = getUname();
if (StringUtils.isEmpty(orderId) && StringUtils.isEmpty(taskId)) {
facets.startAndExecute(processId, username, params);
//发送短信、邮件
String nextOperator_message = params.get("S-ACTOR").toString();
String applyName_message = params.get("packName").toString();
if (StringUtils.isNotEmpty(nextOperator_message) && StringUtils.isNotEmpty(applyName_message)) {
UserPO userPO = accountService.findUserByLoginName(nextOperator_message);
if (userPO != null) {
String reciver = userPO.getName(); //获取接收人用户名
String reciveNum = userPO.getMobile(); //获取接收人手机号
Map<String,Object> map = new HashMap<>();
map.put("userMailAddress",userPO.getEmail());
map.put("userName",userPO.getName());
String receiver = userPO.getEmail();
//调用发送邮件接口
mailService.sendEmailData(receiver, applyName_message,map );
//调用发送短信接口
textAndEmailService.sendMessageInfo(reciver, reciveNum, applyName_message);
}
}
} else {
String methodStr = request.getParameter("method");
int method = 0;
if (StringUtils.isNotEmpty(methodStr)) {
method = Integer.parseInt(methodStr);
}
switch (method) {
case 0://任务执行
Task task = facets.executeTempStore(taskId, username, params);
if (task == null) {
facets.execute(taskId, username, params);
//发送短信、邮件
String nextOperator_message = params.get("S-ACTOR").toString();
String applyName_message = params.get("packName").toString();
if (StringUtils.isNotEmpty(nextOperator_message) && StringUtils.isNotEmpty(applyName_message)) {
UserPO userPO = accountService.findUserByLoginName(nextOperator_message);
if (userPO != null) {
String reciver = userPO.getName(); //获取接收人用户名
String reciveNum = userPO.getMobile(); //获取接收人手机号
Map<String,Object> map = new HashMap<>();
map.put("userMailAddress",userPO.getEmail());
map.put("userName",userPO.getName());
String receiver = userPO.getEmail();
//调用发送邮件接口
mailService.sendEmailData(receiver, applyName_message,map );
//调用发送短信接口
textAndEmailService.sendMessageInfo(reciver, reciveNum, applyName_message);
}
}
} else {
List<Task> listtask = facets.getEngine().query().getActiveTasks(new QueryFilter().setOrderId(orderId));
for (Task t : listtask) {
if (!taskId.equals(t.getId())) {
facets.getEngine().task().complete(t.getId());
} else continue;
}
facets.execute(task.getId(), username, params);
//发送短信、邮件
String nextOperator_message = params.get("S-ACTOR").toString();
String applyName_message = params.get("packName").toString();
if (StringUtils.isNotEmpty(nextOperator_message) && StringUtils.isNotEmpty(applyName_message)) {
UserPO userPO = accountService.findUserByLoginName(nextOperator_message);
if (userPO != null) {
String reciver = userPO.getName(); //获取接收人用户名
String reciveNum = userPO.getMobile(); //获取接收人手机号
Map<String,Object> map = new HashMap<>();
map.put("userMailAddress",userPO.getEmail());
map.put("userName",userPO.getName());
String receiver = userPO.getEmail();
//调用发送邮件接口
mailService.sendEmailData(receiver, applyName_message,map );
//调用发送短信接口
textAndEmailService.sendMessageInfo(reciver, reciveNum, applyName_message);
}
}
}
break;
case -1://驳回、任意跳转
facets.executeAndJump(taskId, username, params, request.getParameter("nodeName"));
break;
case 1://转办
if (StringUtils.isNotEmpty(nextOperator)) {
facets.transferMajor(taskId, username, nextOperator.split(","));
}
break;
case 2://协办
if (StringUtils.isNotEmpty(nextOperator)) {
facets.transferAidant(taskId, username, nextOperator.split(","));
}
break;
default:
facets.execute(taskId, username, params);
break;
}
}
info = "1";
} catch (Exception e) {
e.printStackTrace();
log.error("租户申请资产进入流程", e);
info = "进入租户申请资产流程失败!";
}
return info;
}
/**
* 通用流程,增加leader2用户
*
* @return
*/
@RequestMapping(value = "/process", method = RequestMethod.POST)
@ResponseBody
public String process(HttpServletRequest request) {
try{
Map<String, Object> params = null;
params = GetParametersCommon(request);
RunFlowProcess(request, params);
return "1";
}catch (Exception e){
log.error(e.getLocalizedMessage());
return "1";
}
}
//读取前台数据
public Map<String, Object> GetParametersCommon(HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
Enumeration<String> paraNames = request.getParameterNames();
while (paraNames.hasMoreElements()) {
String element = paraNames.nextElement();
int index = element.indexOf("_");
String paraValue = request.getParameter(element);
//过滤processId、orderId和taskId
if (element.equals("processId") || element.equals("orderId") || element.equals("taskId")) {
continue;
} else {
if (index == -1) {
params.put(element, paraValue);
} else {
char type = element.charAt(0);
String name = element.substring(index + 1);
Object value = null;
//这段对于前台传过来的表单每个Id的name值作为参数,这里的S,I指类型String和Integer
switch (type) {
case 'S':
value = paraValue;
break;
case 'I':
value = ConvertUtils.convert(paraValue, Integer.class);
break;
default:
value = paraValue;
break;
}
params.put(name, value);
}
}
}
return params;
}
/**
* 领导上传文件
* author rk
* @param request
* @return
*/
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String upload(MultipartHttpServletRequest request) {
List<MultipartFile> list = request.getFiles("S_leaderfile");
String realPath = Messages.getString("skFile");
String orderId = request.getParameter("orderId");
List<String> fileAdresses = new ArrayList<>();
Map<String,Object> map = new HashMap<>();
String fileAdress = "";
try {
Date d = new Date();
long currentTime = d.getTime();
for(MultipartFile file:list){
File inFile = new File(realPath);
if(!inFile.isFile() && !inFile.isDirectory()){
inFile.mkdirs();
}
File rootfile = new File(realPath+ "/" +this.getUname());
if(!rootfile.isFile() && !rootfile.isDirectory()){
rootfile.mkdirs();
}
File outfile = new File(realPath+this.getUname() + "/" + currentTime);
if(!outfile.isFile() && !outfile.isDirectory()){
outfile.mkdirs();
}
String fileName = file.getOriginalFilename();
int idx = fileName.lastIndexOf(".");
String suffix = fileName.substring(idx + 1, fileName.length());//文件后缀名
String filePath = realPath+this.getUname() + "/" + currentTime + "/" + fileName;
/*params.put("userFile"+fileCount,fileName);
fileCount++;*/
File tartFile = new File(filePath);
if (tartFile.exists()) {
tartFile.delete();
}
fileAdresses.add(filePath);
file.transferTo(tartFile);
}
for(String adress:fileAdresses){
fileAdress = fileAdress + adress + ";";
}
if (!fileAdress.equals("")) {
fileAdress = fileAdress.substring(0, fileAdress.length() - 1);
}
Map<String,Object> vMap = facets.getEngine().query().getOrder(orderId).getVariableMap();
String oldAdress = "";
if(vMap.containsKey("leaderFileAdress")){
oldAdress = vMap.get("leaderFileAdress").toString();
}
if(!"".equals(oldAdress.trim())){
fileAdress = oldAdress + ";" + fileAdress;
}
map.put("leaderFileAdress",fileAdress);
facets.getEngine().order().addVariable(orderId,map);
} catch (IOException e) {
e.printStackTrace();
return "发生错误";
}
return "1";
}
/**
* 领导第二次上传文件
* author rk
* @param request
* @return
*/
@RequestMapping(value = "/uploadSecond", method = RequestMethod.POST)
@ResponseBody
public String uploadSecond(MultipartHttpServletRequest request) {
List<MultipartFile> list = request.getFiles("S_leaderfile");
String realPath = Messages.getString("skFile");
String orderId = request.getParameter("orderId");
List<String> fileAdresses = new ArrayList<>();
Map<String,Object> map = new HashMap<>();
String fileAdress = "";
try {
Date d = new Date();
long currentTime = d.getTime();
for(MultipartFile file:list){
File inFile = new File(realPath);
if(!inFile.isFile() && !inFile.isDirectory()){
inFile.mkdirs();
}
File rootfile = new File(realPath+ "/" +this.getUname());
if(!rootfile.isFile() && !rootfile.isDirectory()){
rootfile.mkdirs();
}
File outfile = new File(realPath+this.getUname() + "/" + currentTime);
if(!outfile.isFile() && !outfile.isDirectory()){
outfile.mkdirs();
}
String fileName = file.getOriginalFilename();
int idx = fileName.lastIndexOf(".");
String suffix = fileName.substring(idx + 1, fileName.length());//文件后缀名
String filePath = realPath+this.getUname() + "/" + currentTime + "/" + fileName;
/*params.put("userFile"+fileCount,fileName);
fileCount++;*/
File tartFile = new File(filePath);
if (tartFile.exists()) {
tartFile.delete();
}
fileAdresses.add(filePath);
file.transferTo(tartFile);
}
for(String adress:fileAdresses){
fileAdress = fileAdress + adress + ";";
}
if (!fileAdress.equals("")) {
fileAdress = fileAdress.substring(0, fileAdress.length() - 1);
}
map.put("leaderFileAdressSecond",fileAdress);
facets.getEngine().order().addVariable(orderId,map);
} catch (IOException e) {
e.printStackTrace();
return "发生错误";
}
return "1";
}
//流程运转
public void RunFlowProcess(HttpServletRequest request, Map<String, Object> params) {
String processId = request.getParameter("processId");
String taskId = request.getParameter("taskId");
String orderId = request.getParameter("orderId");
String nextOperator = request.getParameter("");
String isCreated = "";
String leaderDataType = "";
String leaderExecuteOpnion = "";
String isLastLeader = "";
if(params.containsKey("isAdminCreateInput")) {
isCreated = params.get("isAdminCreateInput").toString();
}
if(params.containsKey("leaderDataType")) {
leaderDataType = params.get("leaderDataType").toString();
}
if(params.containsKey("leaderExecuteOpnion")) {
leaderExecuteOpnion = params.get("leaderExecuteOpnion").toString();
}
String dataTypeOther = "";
if(params.containsKey("dataTypeOther")) {
dataTypeOther = params.get("dataTypeOther").toString();
}
if(params.containsKey("isLastLeader")) {
isLastLeader = params.get("isLastLeader").toString();
}
if(getUrow().equals("leadership,领导") && isCreated.equals("true")){
params.put("realLeaderDataType",leaderDataType);
params.put("realDataTypeOther",dataTypeOther);
}
if(getUrow().equals("leadership,领导") && isCreated.equals("false")){
params.put("realleaderExecuteOpnion",leaderExecuteOpnion);
}
if(getUrow().equals("leadership,领导") && isLastLeader.equals("1")){
String sActorName = facets.getEngine().query().getOrder(orderId).getVariableMap().get("S-ACTOR").toString();
UserPO sActor = accountService.findUserByLoginName(sActorName);
UserPO po = accountService.findUserById(getUserGroupHeadManId(sActor.getId()));
if(po.getLoginName().equals(Constant.SK_ZUZHANG1)){//如果该申请的组长是gaoju,decision置为1
params.put("decision",1);
}
}
String username = getUname();
Date date = new Date();
SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Object decision = params.get("decision");
if(isCreated.equals("false")){
if(this.getUrow().equals("leadership,领导")) {
params.put("leaderDecision0", decision);
params.put("leaderDecisionTime0",bartDateFormat.format(date));
if(params.containsKey("leaderResult")){
params.put("leaderResult0",params.get("leaderResult"));
params.put("leaderChoosen0",params.get("leaderChoosen"));
}
}else if(this.getUrow().equals("leadership1")){
params.put("leaderDecision1", decision);
params.put("leaderDecisionTime1",bartDateFormat.format(date));
if(params.containsKey("leaderResult")){
params.put("leaderResult1",params.get("leaderResult"));
params.put("leaderChoosen1",params.get("leaderChoosen"));
}
}else if(this.getUrow().equals("leadership2")){
params.put("leaderDecision2", decision);
params.put("leaderDecisionTime2",bartDateFormat.format(date));
if(params.containsKey("leaderResult")){
params.put("leaderResult2",params.get("leaderResult"));
params.put("leaderChoosen2",params.get("leaderChoosen"));
}
}else if(this.getUrow().equals("leadership3")){
params.put("leaderDecision3", decision);
params.put("leaderDecisionTime3",bartDateFormat.format(date));
if(params.containsKey("leaderResult")){
params.put("leaderResult3",params.get("leaderResult"));
params.put("leaderChoosen3",params.get("leaderChoosen"));
}
}
}else{
if(this.getUrow().equals("leadership,领导")) {
params.put("leaderDecision0after", decision);
params.put("leaderDecisionTime0after",bartDateFormat.format(date));
if(params.containsKey("leaderResult")){
params.put("leaderResult0after",params.get("leaderResult"));
params.put("leaderChoosen0after",params.get("leaderChoosen"));
}
}else if(this.getUrow().equals("leadership1")){
params.put("leaderDecision1after", decision);
params.put("leaderDecisionTime1after",bartDateFormat.format(date));
if(params.containsKey("leaderResult")){
params.put("leaderResult1after",params.get("leaderResult"));
params.put("leaderChoosen1after",params.get("leaderChoosen"));
}
}else if(this.getUrow().equals("leadership2")){
params.put("leaderDecision2after", decision);
params.put("leaderDecisionTime2after",bartDateFormat.format(date));
if(params.containsKey("leaderResult")){
params.put("leaderResult2after",params.get("leaderResult"));
params.put("leaderChoosen2after",params.get("leaderChoosen"));
}
}else if(this.getUrow().equals("leadership3")){
params.put("leaderDecision3after", decision);
params.put("leaderDecisionTime3after",bartDateFormat.format(date));
if(params.containsKey("leaderResult")){
params.put("leaderResult3after",params.get("leaderResult"));
params.put("leaderChoosen3after",params.get("leaderChoosen"));
}
}else if(this.getUrow().equals("leadership4")){
params.put("leaderDecision4after", decision);
params.put("leaderDecisionTime4after",bartDateFormat.format(date));
if(params.containsKey("leaderResult")){
params.put("leaderResult4after",params.get("leaderResult"));
params.put("leaderChoosen4after",params.get("leaderChoosen"));
}
}
}
if (StringUtils.isEmpty(orderId) && StringUtils.isEmpty(taskId)) {
facets.startAndExecute(processId, username, params);
} else {
String methodStr = request.getParameter("method");
int method = 0;
if (StringUtils.isNotEmpty(methodStr)) {
method = Integer.parseInt(methodStr);
}
/*
* 虚拟机申请流程中的前端和其他前端利用的流程判断字段不同
* 所以单独写一段代码判断该流程的流向
* */
CommonProcess commonProcess = new CommonProcess(facets);
String processId1 = commonProcess.getProcessIdByType(Constant.PROCESS_TYPE_VIRTUALAPPLY);
if(!processId.isEmpty() && processId.equals(processId1)){
methodStr = request.getParameter("I_decision");
if(StringUtils.isNotEmpty(methodStr)){
method = Integer.parseInt(methodStr);
}
}
switch (method) {
case 0://任务执行
Task task = facets.executeTempStore(taskId, username, params);
if (task == null) {
facets.execute(taskId, username, params);
} else {
List<Task> listtask = facets.getEngine()
.query()
.getActiveTasks(new QueryFilter().setOrderId(orderId));
for (Task t : listtask) {
if (!taskId.equals(t.getId())) {
facets.getEngine().task().complete(t.getId());
} else continue;
}
facets.execute(task.getId(), username, params);
}
break;
case -1://驳回、任意跳转
facets.executeAndJump(taskId, username, params, request.getParameter("nodeName"));
break;
case 1://转办
if (StringUtils.isNotEmpty(nextOperator)) {
facets.transferMajor(taskId, username, nextOperator.split(","));
}
break;
case 2://协办
if (StringUtils.isNotEmpty(nextOperator)) {
facets.transferAidant(taskId, username, nextOperator.split(","));
}
break;
default:
facets.execute(taskId, username, params);
break;
}
//发送短信、邮件
String nextOperator_message = params.get("S-ACTOR").toString();
String applyName_message = params.get("packName").toString();
String decision_message = params.get("decision").toString();
if (StringUtils.isNotEmpty(nextOperator_message) && StringUtils.isNotEmpty(applyName_message)) {
UserPO userPO = accountService.findUserByLoginName(nextOperator_message);
if (userPO != null) {
String reciver = userPO.getName(); //获取接收人用户名
String reciveNum = userPO.getMobile(); //获取接收人手机号
Map<String,Object> map = new HashMap<>();
map.put("userMailAddress",userPO.getEmail());
map.put("userName",userPO.getName());
String receiver = userPO.getEmail();
if (decision_message.equals("1")) {
}
//调用发送邮件接口
mailService.sendEmailData(receiver, applyName_message,map );
//调用发送短信接口
textAndEmailService.sendMessageInfo(reciver, reciveNum, applyName_message);
}
}
}
}
//获取当前用户id
public Long getUid() {
log.info("获取当前用户id");
ShiroUser shiroUser = (ShiroUser) SecurityUtils.getSubject().getPrincipal();
return shiroUser.getId();
}
public String getUname() {
log.info("获取当前用户登录名");
ShiroUser shiroUser = (ShiroUser) SecurityUtils.getSubject().getPrincipal();
return shiroUser.getLoginName();
}
public String getUrow() {
log.info("获取当前用户角色");
ShiroUser shiroUser = (ShiroUser) SecurityUtils.getSubject().getPrincipal();
return shiroUser.getRoles();
}
@RequestMapping(value = "/getUrow", method = RequestMethod.POST)
@ResponseBody
public String getAjaxUrow() {
log.info("获取当前用户角色");
ShiroUser shiroUser = (ShiroUser) SecurityUtils.getSubject().getPrincipal();
return shiroUser.getRoles();
}
public Long getUserGroupHeadManId(Long userId){
//根据用户Id,找到用户所在的所有组
List<UserUsergroupPO> userUsergroupPOs = userUsergroupService.getByUserId(userId);
if(userUsergroupPOs == null || userUsergroupPOs.size()<2){//判空,只有用户同时在用户组和协作组中才有意义
return null;
}else {
for(UserUsergroupPO po : userUsergroupPOs){//遍历po
UsergroupPO usergroupPO = usergroupService.get(po.getUsergroupId());//根据组Id找到相应的组信息
if(usergroupPO.getType() == Constant.USERGROUP_TYPE_TEAM) {//当为true时,该组为协作组
String name[] = usergroupPO.getName().trim().split("&");//根据该协作组,得到组长ID
if (name[0] != null && name[1] != null) {
return accountService.findUserByLoginName(name[1]).getId();
}
}
}
}
return null;
}
}