package process.service;
|
|
import java.text.SimpleDateFormat;
|
import java.util.Collection;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Map.Entry;
|
import java.util.Set;
|
import java.util.UUID;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpSession;
|
|
import oracle.net.aso.s;
|
import oracle.sql.DATE;
|
|
import org.activiti.engine.EngineServices;
|
import org.activiti.engine.RuntimeService;
|
import org.activiti.engine.identity.Group;
|
import org.activiti.engine.identity.User;
|
import org.activiti.engine.runtime.ProcessInstance;
|
|
import com.sun.org.apache.bcel.internal.generic.NEW;
|
|
import process.ProcessUser;
|
import foundation.callable.Callable;
|
import foundation.data.Entity;
|
import foundation.persist.sql.NamedSQL;
|
import foundation.persist.sql.SQLRunner;
|
import foundation.user.OnlineUser;
|
|
public class IdentityService extends Service {
|
|
org.activiti.engine.IdentityService identityService;
|
private HttpServletRequest request;
|
private RuntimeService runtimeService;
|
private HttpSession session;
|
|
|
public IdentityService(Callable context) throws Exception {
|
super(context);
|
identityService = processEngine.getIdentityService();
|
runtimeService = processEngine.getRuntimeService();
|
request = context.getRequest();
|
session = request.getSession();
|
|
}
|
|
@Override
|
public void call(String operator) throws Exception {
|
if ("getUserInfo".equalsIgnoreCase(operator)) {
|
getUserInfo();
|
}
|
else if ("startProcess".equalsIgnoreCase(operator)) {
|
startProcess();
|
}
|
|
}
|
|
|
private void startProcess() throws Exception {
|
String tableName = request.getParameter("tablename");
|
ProcessUser user = (ProcessUser) session.getAttribute("user");
|
if (user == null) {
|
error(" user is null");
|
return;
|
}
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getfrommodelmapping");
|
namedSQL.setParam("field", "formname");
|
namedSQL.setParam("value", tableName);
|
Entity entity = SQLRunner.getEntity(namedSQL);
|
|
String formDispaly = entity.getString("formdisplay");
|
String fieldNames = "id";
|
String id = UUID.randomUUID().toString().replaceAll("-", "");
|
String fieldValues = "'"+id+"'";
|
|
String[] froms = formDispaly.split("@@");
|
for (int i = 0; i < froms.length; i++) {
|
String value = request.getParameter(froms[i]);
|
fieldNames += ","+froms[i];
|
fieldValues += ",'"+value+"'";
|
}
|
fieldNames += ",user_id,apply_time";
|
fieldValues += ",'"+user.getId()+"','"+format.format(new Date())+"'";
|
|
//2.
|
NamedSQL insertNamedSQL = NamedSQL.getInstance("insert");
|
insertNamedSQL.setParam("tablename", tableName);
|
insertNamedSQL.setParam("fieldNames", fieldNames);
|
insertNamedSQL.setParam("fieldValues", fieldValues);
|
int execSQL = SQLRunner.execSQL(insertNamedSQL);
|
if (execSQL>0) {
|
ProcessInstance processInstance = null;
|
try {
|
//3.
|
Map<String, Object> variables = new HashMap<String, Object>();
|
identityService.setAuthenticatedUserId(user.getId());
|
variables.put("tablename", tableName);
|
processInstance = runtimeService.startProcessInstanceByKey(tableName, id, variables);
|
String processInstanceId = processInstance.getId();
|
NamedSQL updateNamedSQL = NamedSQL.getInstance("updateById");
|
String fieldNameValues = "process_instance_id = '"+processInstanceId+"'";
|
updateNamedSQL.setParam("tablename", tableName);
|
updateNamedSQL.setParam("fieldNameId", "id");
|
updateNamedSQL.setParam("id", "'"+id+"'");
|
updateNamedSQL.setParam("fieldNameValues", fieldNameValues);
|
int execSQL2 = SQLRunner.execSQL(updateNamedSQL);
|
if(execSQL2>0){
|
resultPool.addValue("create process successful id :"+ processInstanceId);
|
}
|
}
|
finally {
|
identityService.setAuthenticatedUserId(null);
|
}
|
}
|
else {
|
resultPool.addValue("inset table falied");
|
logger.debug("inset table falied");
|
}
|
|
}
|
|
private void getUserInfo() {
|
HttpSession session = request.getSession();
|
User user = (User)session.getAttribute("user");
|
|
if (user != null) {
|
return;
|
}
|
|
OnlineUser onlineUser = (OnlineUser)session.getAttribute(OnlineUser.class.getSimpleName());
|
ProcessUser processUser = new ProcessUser();
|
processUser.load(onlineUser);
|
session.setAttribute("user", processUser);
|
List<Group> groupList = identityService.createGroupQuery().groupMember(processUser.getId()).list();
|
session.setAttribute("groups", groupList);
|
}
|
|
}
|