package com.opentravelsoft.workflow.activiti;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import com.opentravelsoft.entity.Booking;
import com.opentravelsoft.entity.Express;
import com.opentravelsoft.entity.Plan;
import com.opentravelsoft.entity.finance.Outcome;
import com.opentravelsoft.workflow.TaskDao;
import com.opentravelsoft.workflow.WorkFlowKeyParams;
@Repository("TaskService")
public class TaskDaoImpl extends HibernateDaoSupport implements TaskDao {
private ProcessEngine processEngine;
public void init(SessionFactory factory) {
setSessionFactory(factory);
}
@Autowired
public void setProcessEngine(ProcessEngine processEngine) {
this.processEngine = processEngine;
}
public void supplyJobs() {
logger.debug("scheduling job starting...");
StringBuilder sb = new StringBuilder();
sb.append("from com.opentravelsoft.entity.Express ");
sb.append("where workflowId is null ");
List<Express> list = getHibernateTemplate().find(sb.toString());
logger.debug(list.size() + "个新配送单.");
for (Express express : list) {
final String order_sn = express.getOrderId();
final String expressId = express.getExpressId();
String inAccount = "False";
String inVisa = "False";
if (express.getExpressState().equals("1")
|| express.getExpressState().equals("2")) {
inAccount = "True";
}
if (express.getExpressState().equals("0")
|| express.getExpressState().equals("2")) {
inVisa = "True";
}
// -----------------------------------------------------------------
Map<String, Object> map = new HashMap<String, Object>();
// 订单ID
map.put(WorkFlowKeyParams.WORKFLOW_ORDER_ID, order_sn);
// 配送单ID
map.put(WorkFlowKeyParams.WORKFLOW_EXPRESS_ID, expressId);
// 是否包含团款
map.put(WorkFlowKeyParams.WORKFLOW_EXPRESS_IN_ACCOUNT, inAccount);
// 是否包含签证材料
map.put(WorkFlowKeyParams.WORKFLOW_EXPRESS_IN_VISA, inVisa);
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey("expressWorkflow", map);
express.setWorkflowId(pi.getId());
processEngine.getRuntimeService().createExecutionQuery().singleResult();
getHibernateTemplate().update(express);
}
sb = new StringBuilder();
sb.append("from com.opentravelsoft.entity.Booking ");
sb.append("where readKey!='Y' and workflowId is null ");
List<Booking> list2 = getHibernateTemplate().find(sb.toString());
logger.debug(list2.size() + "个新订单.");
for (Booking order : list2) {
Map<String, Object> map = new HashMap<String, Object>();
// 订单号
map.put("order", order);
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey("reserveOrder", map);
order.setWorkflowId(pi.getId());
getHibernateTemplate().update(order);
}
logger.debug("scheduling job end.");
}
@Override
public List<Task> getMyTask(String userId) {
return processEngine.getTaskService().createTaskQuery()
.taskAssignee(userId).list();
}
@Override
public int callMakePlan(String planNo, String userId) {
Map<String, Object> map = new HashMap<String, Object>();
map.put(WorkFlowKeyParams.WORKFLOW_PLAN_NO, planNo);
processEngine.getRuntimeService().startProcessInstanceByKey("tourWorkFlow",
map);
return 0;
}
@Override
public int callMakeTourAccounts(String planNo, String userId) {
TaskService taskService = processEngine.getTaskService();
Plan plan = getHibernateTemplate().get(Plan.class, planNo);
List<Task> tasks = taskService.createTaskQuery()
.processInstanceId(plan.getWorkflowId()).list();
for (Task task2 : tasks) {
if (task2.getName().equals(WorkFlowKeyParams.CALCULATION_TASK_MAKE))
taskService.complete(task2.getId());
}
return 0;
}
@Override
public int callAuditTourAccounts(String planNo, String userId) {
TaskService taskService = processEngine.getTaskService();
Plan plan = getHibernateTemplate().get(Plan.class, planNo);
Task task = taskService.createTaskQuery()
.processInstanceId(plan.getWorkflowId()).singleResult();
if (task.getName().equals(
WorkFlowKeyParams.FINANCE_CALCULATION_TASK_AUDITING))
taskService.complete(task.getId());
return 0;
}
public int checkTourAccounts(String planNo, String uid) {
TaskService taskService = processEngine.getTaskService();
Plan plan = getHibernateTemplate().get(Plan.class, planNo);
Task task = taskService.createTaskQuery()
.processInstanceId(plan.getWorkflowId()).singleResult();
if (task.getName().equals(WorkFlowKeyParams.CALCULATION_TASK_AUDITING))
taskService.complete(task.getId());
return 0;
}
public List<Task> getTourTaskList(String planNo) {
TaskService taskService = processEngine.getTaskService();
Plan plan = getHibernateTemplate().get(Plan.class, planNo);
List<Task> list = taskService.createTaskQuery()
.processInstanceId(plan.getWorkflowId()).list();
return list;
}
// public List<Plan> getCanBuild(String userId) {
// // TaskService taskService = processEngine.getTaskService();
// // List<Task> list = taskService.createTaskQuery()
// // .taskName(WorkFlowKeyParams.TOUR_TASK_GROUPTOUR).taskAssignee(userId)
// // .list();
// // return list;
// StringBuilder sb = new StringBuilder();
// sb.append("select p ");
// sb.append("from com.opentravelsoft.entity.Plan p, ");
// sb.append("org.jbpm.pvm.internal.task.Task t ");
// sb.append("where t.executionId=p.workflowId ");
// sb.append("and p.line.assigned.userId=? and t.name=? ");
// // sb.append("and t.state!='" + Task.STATE_COMPLETED + "' ");
// sb.append("and p.isBuildup='N' "); // 未成团
// Object[] params = { userId, WorkFlowKeyParams.TOUR_TASK_GROUPTOUR };
// List<Plan> list = getHibernateTemplate().find(sb.toString(), params);
// return list;
// }
// @Override
// public int callSaveBooking(Booking book) {
// String enabled = (String) ActionContext.getContext().getApplication()
// .get(EbizCommon.WORKFLOW_ENABLED);
// if (enabled.equals("1")) {
// Map<String, Object> vals = new HashMap<String, Object>();
// vals.put("order", book);
// ProcessInstance intd = processEngine.getRuntimeService()
// .startProcessInstanceByKey("reserveOrder", vals);
// book.setWorkflowId(intd.getId());
// if (canBuild && enabled.equals("1")) {
// // 如果预订总人数 >= 计划的最小成团人数 就可以生成成团任务
// StringBuilder sb1 = new StringBuilder();
// sb1.append("select t ");
// sb1.append("from org.jbpm.pvm.internal.task.Task t ");
// sb1.append(",com.opentravelsoft.entity.Plan p ");
// sb1.append("where t.executionId=p.workflowId and p.planNo=? ");
// sb1.append("and t.name=? and t.state!='" + Task.STATE_COMPLETED + "' ");
// Object[] params1 = { book.getPlan().getPlanNo(),
// WorkFlowKeyParams.TOUR_TASK_AUTO_BOOK };
// List<Task> taskIns = getHibernateTemplate().find(sb1.toString(),
// params1);
// for (Task taskInstance : taskIns) {
// processEngine.getTaskService().complete(taskInstance.getId());
// } } }
// return 1;
// }
@Override
public int callConfirmBooking(Booking book) {
Booking book1 = getHibernateTemplate().get(Booking.class,
book.getBookingNo());
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId()).list();
for (Task task2 : list) {
if (task2.getName().equals(WorkFlowKeyParams.ORDER_TASK_CONFIRM))
taskService.complete(task2.getId());
}
return 0;
}
public List<Task> getOrderTaskList(String bookingNo) {
Booking book1 = getHibernateTemplate().get(Booking.class, bookingNo);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId()).list();
return list;
}
// @Override
// public List<Booking> getOrderTaskList(String teamId, String userId,
// String taskName) {
// StringBuilder sb = new StringBuilder();
// sb.append("select b ");
// sb.append("from com.opentravelsoft.entity.Booking b");
// sb.append(",org.jbpm.pvm.internal.task.Task t ");
// sb.append("where t.executionId=b.workflowId ");
// // sb.append("and t.name=? and t.state<>'" + Task.STATE_COMPLETED + "' ");
// sb.append("and b.plan.assigned.userId=? ");
// Object[] params = { taskName, userId };
// List<Booking> list = getHibernateTemplate().find(sb.toString(), params);
// return list;
// }
@Override
public List<Task> getExpressTask(String expressId) {
Express express = getHibernateTemplate().get(Express.class, expressId);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(express.getWorkflowId()).list();
return list;
}
// public List<Plan> getTaskList(String taskName, String userId) {
// StringBuilder sb = new StringBuilder();
// List<String> params = new ArrayList<String>();
// sb.append("select p.planNo,p.outDate ");
// sb.append("from com.opentravelsoft.entity.Plan p, ");
// sb.append("org.jbpm.pvm.internal.task.Task t ");
// sb.append("where p.workflowId=t.executionId and t.name=? ");
// // sb.append("and t.state!='" + Task.STATE_COMPLETED + "' ");
// params.add(taskName);
// // 线路专管员
// if (StringUtil.hasLength(userId)) {
// sb.append("and t.assigned.userId=? ");
// params.add(String.valueOf(userId));
// }
// sb.append("order by p.outDate ");
// String[] param = null;
// if (params.size() > 0) {
// param = new String[params.size()];
// for (int i = 0; i < params.size(); i++) {
// param[i] = params.get(i);
// }
// }
// List<Object[]> list = getHibernateTemplate().find(sb.toString(), param);
// List<Plan> res = new ArrayList<Plan>();
// for (Object[] obj : list) {
// Plan tour = new Plan();
// tour.setTourNo(RowDataUtil.getString(obj[0]));
// tour.setOutDate(RowDataUtil.getDate(obj[1]));
// res.add(tour);
// }
// return res;
// }
@Override
public int callArrangeLeader(String planNo, String userId) {
TaskService taskService = processEngine.getTaskService();
Plan plan = getHibernateTemplate().get(Plan.class, planNo);
List<Task> list = taskService.createTaskQuery()
.processInstanceId(plan.getWorkflowId())
.taskName(WorkFlowKeyParams.TOUR_TASK_ARRANGE_LEADER).list();
for (Task taskInstance : list) {
processEngine.getTaskService().complete(taskInstance.getId());
}
return 0;
}
public void flowMethod(String planNo) {
TaskService taskService = processEngine.getTaskService();
Plan plan = getHibernateTemplate().get(Plan.class, planNo);
List<Task> list = taskService.createTaskQuery()
.processInstanceId(plan.getWorkflowId())
.taskName(WorkFlowKeyParams.TOUR_TASK_OUTTOURNOTIFY).list();
for (Task taskInstance : list) {
Map<String, Object> map = new HashMap<String, Object>();
map.put(WorkFlowKeyParams.WORKFLOW_TOUR_NO, planNo);
map.put(WorkFlowKeyParams.WORKFLOW_ACTOR, "");
map.put(WorkFlowKeyParams.WORKFLOW_PLAN_NO, planNo);
processEngine.getTaskService().complete(taskInstance.getId(), map);
}
}
@Override
public int callMakeIncome(String bookingNo, String userId) {
Booking book1 = getHibernateTemplate().get(Booking.class, bookingNo);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId())
.taskName(WorkFlowKeyParams.ORDER_AGREEON).list();
for (Task taskInstance : list) {
Map<String, Object> map = new HashMap<String, Object>();
map.put(WorkFlowKeyParams.WORKFLOW_ACTOR, book1.getOpuser());
processEngine.getTaskService().complete(taskInstance.getId());
}
return 0;
}
@Override
public int callMakePayment(long paymentId, String userId) {
Map<String, Object> map = new HashMap<String, Object>();
map.put(WorkFlowKeyParams.PAY_REQUISITION_ID, paymentId);
map.put(WorkFlowKeyParams.WORKFLOW_ACTOR, "");
map.put(WorkFlowKeyParams.WORKFLOW_TOUR_NO, "");
map.put(WorkFlowKeyParams.OP_AUDITING, "");
map.put(WorkFlowKeyParams.AIR_TICKET_DISTRIBUTION, "");
processEngine.getRuntimeService().startProcessInstanceById(
"DefrayWorkFlow", map);
return 0;
}
@Override
public int callAuditPayment(long paymentId, String userId) {
Outcome book1 = getHibernateTemplate().get(Outcome.class, paymentId);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId())
.taskName(WorkFlowKeyParams.FINANCE_REQUISITION_TASK_AUDITING).list();
for (Task taskInstance : list) {
// if (book1.getFrChecked().equals('Y'))
// {
// taskService.completeTask(taskInstance.getId(), "审核结束");
// } else
// {
// taskService.completeTask(taskInstance.getId(), "审核不通过");
// }
processEngine.getTaskService().complete(taskInstance.getId());
}
return 0;
}
@Override
public int callOpAuditPayment(long paymentId, String userId) {
Outcome book1 = getHibernateTemplate().get(Outcome.class, paymentId);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId())
.taskName(WorkFlowKeyParams.CALCULATION_REQUISITION_TASK_AUDITING)
.list();
for (Task taskInstance : list) {
processEngine.getTaskService().complete(taskInstance.getId());
}
return 0;
}
@Override
public int callBackPayment(long paymentId, String userId) {
// 财务审核后打回给计调(需要机票配送)
// StringBuilder sb1 = new StringBuilder();
// sb1.append("select t ");
// sb1.append("from org.jbpm.pvm.internal.task.Task t ");
// sb1.append(",com.opentravelsoft.entity.Outcome u ");
// sb1.append("where t.executionId=u.workflowId ");
// sb1.append("and u.outcomeId=? and t.name='"
// + WorkFlowKeyParams.AIR_TICKET_TASK_DISTRIBUTION + "' ");
// sb1.append("and t.state!='" + Task.STATE_COMPLETED + "' ");
//
// List<Task> taskInstances1 = getHibernateTemplate().find(sb1.toString(),
// p1);
// if (!taskInstances1.isEmpty()) {
// for (Task taskInstance : taskInstances1) {
// processEngine.getTaskService().completeTask(taskInstance.getId());
// }
// }
// // -----------------------------------------------------------------
// // 财务审核后打回给计调(不需要机票配送)
// StringBuilder sb2 = new StringBuilder();
// sb2.append("select t ");
// sb2.append("from org.jbpm.pvm.internal.task.Task t ");
// sb2.append(",com.opentravelsoft.entity.Outcome u ");
// sb2.append("where t.executionId=u.workflowId ");
// sb2.append("and u.outcomeId=? and t.end is null");
// Object[] p2 = { paymentId };
// List<Task> taskInstances2 = getHibernateTemplate().find(sb2.toString(),
// p2);
//
// if (taskInstances2.isEmpty()) {
// Map<String, Object> map = new HashMap<String, Object>();
// map.put(WorkFlowKeyParams.PAY_REQUISITION_ID, tblOutcome.getOutcomeId());
// map.put(WorkFlowKeyParams.WORKFLOW_ACTOR, tblOutcome.getOpApprovedby());
// map.put(WorkFlowKeyParams.WORKFLOW_TOUR_NO, tblOutcome.getTourNo());
// map.put(WorkFlowKeyParams.OP_AUDITING, "false");
// map.put(WorkFlowKeyParams.AIR_TICKET_DISTRIBUTION,
// tblOutcome.getCarryTicket());
//
// processEngine.getExecutionService().startProcessInstanceByKey(
// "DefrayWorkFlow", map);
// }
//
// // -----------------------------------------------------------------
// // 财务已审核的申请单
// sb = new StringBuilder();
// sb.append("select t ");
// sb.append("from org.jbpm.pvm.internal.task.Task t ");
// sb.append(",com.opentravelsoft.entity.Outcome u ");
// sb.append("where t.executionId=u.workflowId ");
// sb.append("and u.outcomeId=? and t.name='"
// + WorkFlowKeyParams.FINANCE_REQUISITION_TASK_AUDITING + "' ");
// sb.append("and t.state!='" + Task.STATE_COMPLETED + "' ");
// Object[] p = { paymentId };
// List<Task> taskInstances = getHibernateTemplate().find(sb.toString(), p);
//
// for (Task taskInstance : taskInstances) {
// processEngine.getTaskService().complete(taskInstance.getId());
// }
return 0;
}
@Override
public int callParcelPayment(long paymentId, String userId) {
Outcome book1 = getHibernateTemplate().get(Outcome.class, paymentId);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId())
.taskName(WorkFlowKeyParams.AIR_TICKET_TASK_DISTRIBUTION).list();
for (Task taskInstance : list) {
processEngine.getTaskService().complete(taskInstance.getId());
}
return 0;
}
@Override
public int callMakeExpress(String expressId, String userId) {
Express book1 = getHibernateTemplate().get(Express.class, expressId);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId())
.taskName(WorkFlowKeyParams.EXPRESS_TASK_ASSIGN).list();
for (Task taskInstance : list) {
processEngine.getTaskService().complete(taskInstance.getId());
}
return 0;
}
public int auditingIsPass(String expressId, Boolean ispass, String userId) {
Express book1 = getHibernateTemplate().get(Express.class, expressId);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId())
.taskName(WorkFlowKeyParams.EXPRESS_TASK_CHECK).list();
for (Task taskInstance : list) {
processEngine.getTaskService().complete(taskInstance.getId());
}
return 0;
}
public int isExpressAgain(String expressId, boolean isflag, String userId) {
Express book1 = getHibernateTemplate().get(Express.class, expressId);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId())
.taskName(WorkFlowKeyParams.EXPRESS_TASK_AGAIN).list();
for (Task taskInstance : list) {
// taskInstance.createVariable(WorkFlowKeyParams.WORKFLOW_ACTOR,
// userId);
// if (isflag) {
// processEngine.getTaskService().completeTask(taskInstance.getId(),
// "再次配送");
//
// } else {
// processEngine.getTaskService().completeTask(taskInstance.getId(),
// "to 配送结束");
// }
processEngine.getTaskService().complete(taskInstance.getId());
}
return 0;
}
public int examineExpress(String expressId, boolean isPass, String userId) {
Express book1 = getHibernateTemplate().get(Express.class, expressId);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId())
.taskName(WorkFlowKeyParams.EXPRESS_TASK_EXAMINE).list();
for (Task taskInstance : list) {
// if (isPass)
// processEngine.getTaskService().completeTask(taskInstance.getId(),
// "材料审核通过");
// else
// processEngine.getTaskService().completeTask(taskInstance.getId(),
// "材料审核失败");
// }
}
return 0;
}
public int accountExpress(String expressId, String userId) {
Express book1 = getHibernateTemplate().get(Express.class, expressId);
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processInstanceId(book1.getWorkflowId())
.taskName(WorkFlowKeyParams.EXPRESS_TASK_EXAMINE).list();
for (Task taskInstance : list) {
// taskInstance.createVariable(WorkFlowKeyParams.WORKFLOW_ACTOR,
// userId);
processEngine.getTaskService().complete(taskInstance.getId());
}
return 0;
}
@Override
public String callNewOrder(String orderNo) {
String procId = "";
Map<String, Object> map = new HashMap<String, Object>();
map.put(WorkFlowKeyParams.WORKFLOW_ORDER_ID, orderNo);
procId = processEngine.getRuntimeService()
.startProcessInstanceByKey("LineReserve", map).getId();
return procId;
}
}