package cn.ksource.web.facade.wechat.ewyw;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import cn.ksource.beans.GG_MESSAGE;
|
import cn.ksource.beans.GG_RECORD;
|
import cn.ksource.beans.SC_WORKFLOW_INCIDENT_LOCAL;
|
import cn.ksource.beans.WORKFLOW_BASE;
|
import cn.ksource.beans.WORKFLOW_NODE;
|
import cn.ksource.core.dao.BaseDao;
|
import cn.ksource.core.dao.SqlParameter;
|
import cn.ksource.core.page.PageInfo;
|
import cn.ksource.core.util.ConvertUtil;
|
import cn.ksource.core.util.DateUtil;
|
import cn.ksource.core.util.NumberUtil;
|
import cn.ksource.core.util.StringUtil;
|
import cn.ksource.core.web.SysInfoMsg;
|
import cn.ksource.core.web.WebUtil;
|
import cn.ksource.core.workflow.NodeAnswerEntity;
|
import cn.ksource.core.workflow.NodeDealEntity;
|
import cn.ksource.core.workflow.NodeFinishEntity;
|
import cn.ksource.core.workflow.WorkflowBusinessService;
|
import cn.ksource.core.workflow.WorkflowCoreService;
|
import cn.ksource.web.Constants;
|
import cn.ksource.web.controller.wechat.util.WechatConstants;
|
import cn.ksource.web.facade.message.MessageFacade;
|
import cn.ksource.web.service.WorkOrderCodeService;
|
import cn.ksource.web.service.device.DeviceService;
|
import cn.ksource.web.service.order.OrderService;
|
import cn.ksource.web.service.record.RecordService;
|
|
@Service("ewZcFacade")
|
public class EwZcFacadeImpl implements EwZcFacade {
|
|
@Autowired
|
private BaseDao baseDao;
|
|
@Autowired
|
private WorkflowCoreService workflowCoreService;
|
@Autowired
|
private WorkOrderCodeService workOrderCodeService;
|
@Autowired
|
private WorkflowBusinessService workflowBusinessService;
|
@Autowired
|
private MessageFacade messageFacade;
|
@Autowired
|
private OrderService orderService;
|
@Autowired
|
private DeviceService deviceService;
|
@Autowired
|
private RecordService recordService;
|
|
@Override
|
public String doOrderConfirm(Map<String, String> params) {
|
String incidentId = params.get("incidentId");
|
String flowId = params.get("flowId");
|
|
String userId = ConvertUtil.obj2StrBlank(params.get("ID"));
|
String userName = ConvertUtil.obj2StrBlank(params.get("ZSXM"));
|
|
NodeAnswerEntity answerEntity = new NodeAnswerEntity();
|
answerEntity.setUser_id(userId);
|
answerEntity.setUser_name(userName);
|
|
WORKFLOW_BASE base = new WORKFLOW_BASE(flowId).getInstanceById();
|
|
//工单响应
|
boolean result = workflowCoreService.answerNode(base, new WORKFLOW_NODE(base.getCurrent_node_id()).getInstanceById(), answerEntity);
|
if(!result) {
|
return "2";
|
}
|
|
//判断是否是第一次响应,如果是第一次响应的话,则更新事件表中实际响应时间(第一次响应时间)
|
String selectSql = "SELECT ANSWER_TIME,CREATE_TIME,ANSWER_TIMEOUT_TIME FROM SC_WORKFLOW_INCIDENT_LOCAL WHERE ID = :incidentId";
|
Map map = baseDao.queryForMap(selectSql,new SqlParameter("incidentId",incidentId));
|
String answerTime = ConvertUtil.obj2StrBlank(map.get("ANSWER_TIME"));
|
long create_time = ConvertUtil.obj2Long(map.get("CREATE_TIME"));
|
|
|
Map paramMap = new HashMap();
|
StringBuilder builder = new StringBuilder("UPDATE SC_WORKFLOW_INCIDENT_LOCAL SET STATE = STATE + 1");
|
if(!StringUtil.notEmpty(answerTime)) {
|
|
long answer_time = DateUtil.getCurrentDate14();
|
//判断是否响应超时
|
long answer_timeout_time = ConvertUtil.obj2Long(map.get("ANSWER_TIMEOUT_TIME"));
|
|
String answer_timeout = "2";
|
if(answer_time>answer_timeout_time) {
|
answer_timeout = "1";
|
}
|
|
builder.append(",ANSWER_TIME = :answerTime,ANSWER_USE_TIME = :answer_user_time,ANSWER_TIMEOUT = :answer_timeout ");
|
paramMap.put("answerTime",answer_time);
|
paramMap.put("answer_timeout", answer_timeout);
|
|
|
//计算第一次响应时间和创建事件的事件差 将时间差转化为分钟
|
long seconds = DateUtil.getSecondsFormDate2Date(create_time, answer_time);
|
//将秒转化为分钟
|
double sjxysj = NumberUtil.div(ConvertUtil.obj2Double(seconds), ConvertUtil.obj2Double(60), 1);
|
|
paramMap.put("answer_user_time", sjxysj);
|
|
|
}
|
|
builder.append(" WHERE ID = :incidentId");
|
paramMap.put("incidentId", incidentId);
|
baseDao.execute(builder.toString(), paramMap);
|
|
return "1";
|
}
|
|
@Override
|
public int eZcCount(Map<String, String> params) {
|
String status = params.get("flowstate");
|
|
StringBuilder builder = new StringBuilder();
|
builder.append("SELECT COUNT(WB.ID) ");
|
builder.append("FROM WORKFLOW_BASE WB,SC_WORKFLOW_INCIDENT_LOCAL B ");
|
if(status.equals("11")){
|
builder.append(", WORKFLOW_NODE C ");
|
}
|
builder.append(" WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType ");
|
if(status.equals("11")){
|
builder.append(" AND C.FLOWID = WB.ID AND C.FLOWSTATE = 1 AND C.CURRENT_DEALER_ID IS NOT NULL ");
|
}
|
params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL));
|
|
|
if(StringUtil.notEmpty(status) && !status.equals("11")) {
|
builder.append(" AND WB.WFSTATE = :orderStatus ");
|
params.put("orderStatus", status);
|
}
|
|
return baseDao.queryForInteger(builder.toString(), params);
|
}
|
|
@Override
|
public PageInfo eZcData(PageInfo pageInfo,Map<String, String> params) {
|
String status = params.get("flowstate");
|
|
StringBuilder builder = new StringBuilder();
|
builder.append("SELECT WB.ID,WB.ORDER_CODE,WB.WFNAME,WB.BUSINESSTYPE,WB.CREATERNAME,WB.CREATETIME,WB.WFNOTE,WB.PROJECT_NAME, ");
|
builder.append("WB.CURRENT_NODE_ID,WB.CURRENT_NODE_NAME,WB.CUSTOMER_NAME,WB.CURRENT_DEALER_NAME,WB.BUSINESS_ID,WB.WFSTATE,B.ANSWER_TIMEOUT,B.DEAL_TIMEOUT ");
|
builder.append("FROM WORKFLOW_BASE WB,SC_WORKFLOW_INCIDENT_LOCAL B ");
|
if(status.equals("11")){
|
builder.append(", WORKFLOW_NODE C ");
|
}
|
builder.append(" WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType ");
|
if(status.equals("11")){
|
builder.append(" AND C.FLOWID = WB.ID AND C.FLOWSTATE = 1 AND C.CURRENT_DEALER_ID IS NOT NULL ");
|
}
|
params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL));
|
|
|
if(StringUtil.notEmpty(status) && !status.equals("11")) {
|
builder.append(" AND WB.WFSTATE = :orderStatus ");
|
params.put("orderStatus", status);
|
}
|
|
builder.append( " ORDER BY WB.CREATETIME DESC ");
|
|
|
return baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params);
|
}
|
|
/* (non-Javadoc)
|
* @see cn.ksource.web.facade.wechat.ewyw.EwZcFacade#queryZcMsg(javax.servlet.http.HttpServletRequest)
|
*/
|
@Override
|
public Map queryZcMsg(HttpServletRequest request) {
|
Map result = new HashMap();
|
String customerId = new String();
|
String customerName = new String();
|
String subCustomerId = new String();
|
String subCustomerName = new String();
|
|
String userId = WebUtil.getEngineerUserId(request);
|
String selectSql1 = "SELECT A.CUSTOMER_ID FROM SC_CUSTOMER_ZC_UESR A WHERE A.USER_ID = :userId ";
|
|
Map zcz = baseDao.queryForMap(selectSql1,new SqlParameter("userId",userId));
|
if(null!=zcz && zcz.size()>0) {
|
String cId = ConvertUtil.obj2StrBlank(zcz.get("CUSTOMER_ID"));
|
if(StringUtil.notEmpty(cId)) {
|
subCustomerId = cId;
|
String selectName = "SELECT CUSTOMER_NAME,CUSTOMER_ID FROM SC_PARTNER_CUSTOMER_SUB WHERE ID = :id";
|
Map subCustomer = baseDao.queryForMap(selectName,new SqlParameter("id",cId));
|
if(null!=subCustomer && subCustomer.size()>0){
|
customerId = ConvertUtil.obj2StrBlank(subCustomer.get("CUSTOMER_ID"));
|
subCustomerName = ConvertUtil.obj2StrBlank(subCustomer.get("CUSTOMER_NAME"));
|
String selectcusName = "SELECT CUSTOMER_NAME FROM SC_PARTNER_CUSTOMER_INFO WHERE ID = :id";
|
customerName = baseDao.queryForString(selectcusName,new SqlParameter("id",customerId));
|
}else{
|
customerId = cId;
|
subCustomerId = cId;
|
String selectcusName = "SELECT CUSTOMER_NAME FROM SC_PARTNER_CUSTOMER_INFO WHERE ID = :id";
|
customerName = baseDao.queryForString(selectcusName,new SqlParameter("id",cId));
|
subCustomerName = customerName;
|
}
|
}
|
}
|
|
|
result.put("customerId", customerId);
|
result.put("customerName", customerName);
|
result.put("subCustomerId", subCustomerId);
|
result.put("subCustomerName", subCustomerName);
|
return result;
|
}
|
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
@Override
|
public Map saveZcyw(Map map,HttpServletRequest request, SC_WORKFLOW_INCIDENT_LOCAL sc_workflow_incident_local) {
|
Map resultMap = new HashMap();
|
Map user = WebUtil.getEngineerMsg(request);
|
|
|
String userId = ConvertUtil.obj2StrBlank(user.get("ID"));
|
String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM"));
|
|
|
String serivceListId = ConvertUtil.obj2Str(map.get("serivceListId"));
|
String serivceList = ConvertUtil.obj2Str(map.get("serivceList"));
|
String first_category_id = new String();
|
String first_category_name = new String();
|
String second_category_id = new String();
|
String second_category_name = new String();
|
String third_category_id = new String();
|
String third_category_name = new String();
|
if(StringUtil.notEmpty(serivceListId) && StringUtil.notEmpty(serivceList)) {
|
String[] serivceListIds = serivceListId.split("-");
|
String[] serivceLists = serivceList.split("->");
|
first_category_id = serivceListIds[0];
|
first_category_name = serivceLists[0];
|
second_category_id = serivceListIds[1];
|
second_category_name = serivceLists[1];
|
third_category_id = serivceListIds[2];
|
third_category_name = serivceLists[2];
|
}
|
|
|
String dealUserId = userId;
|
String dealUserName = userName;
|
|
String type = ConvertUtil.obj2Str(map.get("type"));
|
String state = Constants.SC_WORKFLOW_INCIDENT_LOCAL_STATE_FPDZCGCS;
|
String node_template_id = Constants.ZCYW_FWSL;
|
if(type.equals("1")) {
|
String selectUser = request.getParameter("userMsg");
|
if(StringUtil.notEmpty(selectUser)) {
|
String[] userMsg = selectUser.split("-");
|
if(userMsg.length==2) {
|
dealUserId = userMsg[0];
|
dealUserName = userMsg[1];
|
}
|
}
|
|
|
|
}
|
|
|
String order_code = workOrderCodeService.getIncidentOrderCode();
|
|
long createTime = DateUtil.getCurrentDate14();
|
|
|
//响应时间为分钟
|
Long requestAnswerTime = sc_workflow_incident_local.getRequest_answer_time();
|
Long dealTime = sc_workflow_incident_local.getRequest_deal_time();
|
if(null == requestAnswerTime) {
|
requestAnswerTime = Long.valueOf(0);
|
}
|
|
if(null == dealTime) {
|
dealTime = Long.valueOf(0);
|
}
|
|
//处理时间为小时
|
|
long answerTimeoutTime = DateUtil.getTimeAdd(createTime, ConvertUtil.obj2Int(requestAnswerTime),2);
|
long dealTimeoutTime = DateUtil.getTimeAdd(createTime, ConvertUtil.obj2Int(dealTime),1);
|
|
|
|
sc_workflow_incident_local.setFirst_category_id(first_category_id).setFirst_category_name(first_category_name).setSecond_category_id(second_category_id)
|
.setSecond_category_name(second_category_name).setThird_category_id(third_category_id).setThird_category_name(third_category_name).setCreate_user_id(userId).setCreate_user_name(userName)
|
.setCreate_time(createTime);
|
String id = StringUtil.getUUID();
|
sc_workflow_incident_local.setId(id).setState(ConvertUtil.obj2Integer(state)).setOrder_code(order_code).setFlow_name(sc_workflow_incident_local.getName()).setAnswer_timeout(2).setAnswer_timeout_time(answerTimeoutTime).setDeal_timeout(2).setDeal_timeout_time(dealTimeoutTime);
|
sc_workflow_incident_local.insert();
|
|
String bz = request.getParameter("bz");
|
//启动流程
|
WORKFLOW_BASE base = workflowBusinessService.startIncident_LocalWorkflow(id,bz);
|
|
NodeDealEntity entity = new NodeDealEntity();
|
entity.setDealer_type(3);
|
entity.setBefore_Dealer_type(2);
|
List<Map> dealerList = new ArrayList<Map>();
|
Map mapa = new HashMap();
|
mapa.put("USER_ID", dealUserId);
|
mapa.put("USER_NAME", dealUserName);
|
mapa.put("IS_ADMIN", "1");
|
|
dealerList.add(mapa);
|
|
entity.setDealerList(dealerList);
|
|
workflowBusinessService.toNode(base, node_template_id, entity);
|
|
|
|
String wxUrl = WechatConstants.ORDER_INCIDENT_DETAIL_ADDRESS+"?orderId="+base.getBusiness_id()+"&orderType="+Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL;
|
//发送消息
|
GG_MESSAGE message = new GG_MESSAGE();
|
message.setTitle(sc_workflow_incident_local.getName())
|
.setContent(sc_workflow_incident_local.getName())
|
.setSender_id(userId)
|
.setSender_name(userName)
|
.setSend_time(DateUtil.getCurrentDate14())
|
.setBusiness_id(base.getBusiness_id())
|
.setWeb_url(Constants.INCIDENT_WEB_MSG_URL+"?flowId="+base.getId()+"&orderId="+base.getBusiness_id())
|
.setWx_url(wxUrl)
|
.setOrder_code(order_code)
|
.setType(Constants.GG_MESSAGE_TYPE_XCYW);
|
messageFacade.doSendMessage(message, dealerList);
|
|
|
|
//所有的业务主键都是flowId(即流程主表的id)
|
String flowId = base.getId();
|
|
|
//提交工单时添加关联工单
|
String orderIds=ConvertUtil.obj2Str(map.get("orderId"));
|
if(StringUtil.notEmpty(orderIds)){
|
String[] orderId = orderIds.split(",");
|
orderService.saveLinkOrders(flowId,orderId,request);
|
}
|
|
|
//提交工单时添加关联设备
|
String deviceIds=ConvertUtil.obj2Str(map.get("deviceId"));
|
if(StringUtil.notEmpty(deviceIds)){
|
String[] deviceId = deviceIds.split(",");
|
deviceService.saveLinkDevices(flowId,deviceId);
|
}
|
|
|
//添加处理记录
|
GG_RECORD record = new GG_RECORD();
|
record.setDeal_content("创建事件:"+userName+"创建了驻场运维事件");
|
record.setDeal_user_id("1");
|
record.setDeal_user_name(userName);
|
record.setBusiness_id(flowId);
|
recordService.addRecord(record);
|
|
|
|
|
|
SysInfoMsg msg = new SysInfoMsg("2",dealUserName,"驻场工程师");
|
resultMap.put("msg", msg);
|
resultMap.put("incidentId", id);
|
return resultMap;
|
}
|
|
/* (non-Javadoc)
|
* @see cn.ksource.web.facade.wechat.ewyw.EwZcFacade#doEndTask(javax.servlet.http.HttpServletRequest, java.lang.String)
|
*/
|
@Override
|
public void doEndTask(HttpServletRequest request, String orderId) {
|
String incidentId = orderId;
|
String solveWay = request.getParameter("solveWay");
|
String solveWayName = request.getParameter("solveWayName");
|
|
|
String resolve = request.getParameter("resolve");
|
String suggest = request.getParameter("suggest");
|
String bz = request.getParameter("bz");
|
Map user=new HashMap();
|
|
if(request.getParameter("isWechat")!=null && request.getParameter("isWechat").equals("1")){
|
user = WebUtil.getEngineerMsg(request);
|
}else{
|
user = WebUtil.getLoginUser(request).getLoginUser();
|
}
|
String userId = ConvertUtil.obj2StrBlank(user.get("ID"));
|
String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM"));
|
|
long resolveTime = DateUtil.getCurrentDate14();
|
|
String state = Constants.SC_WORKFLOW_INCIDENT_LOCAL_STATE_YJJ;
|
|
|
|
Map result = getHs(incidentId,baseDao,resolveTime);
|
//获取解决耗时
|
double sjjjsj = ConvertUtil.obj2Double(result.get("sjjjsj"));
|
|
String deal_timeout = ConvertUtil.obj2StrBlank(result.get("deal_timeout"));
|
|
|
|
String updateSql = "UPDATE SC_WORKFLOW_INCIDENT_LOCAL SET STATE = :state , RESOLVE_USER_ID = :userId,RESOLVE_USER_NAME = :userName,RESOLVE_TIME = :resolveTime,DEAL_USE_TIME = :deal_use_time,RESOLVE_TYPE_ID = :solveWay,RESOLVE_TYPE_NAME = :solveWayName,RESOLVE = :resolve,SUGGEST = :suggest,DEAL_TIMEOUT = :deal_timeout WHERE ID = :incidentId ";
|
|
Map paramMap = new HashMap();
|
paramMap.put("state", state);
|
paramMap.put("userId", userId);
|
paramMap.put("userName", userName);
|
paramMap.put("resolveTime", resolveTime);
|
paramMap.put("solveWay", solveWay);
|
paramMap.put("solveWayName", solveWayName);
|
paramMap.put("resolve", resolve);
|
paramMap.put("suggest", suggest);
|
paramMap.put("incidentId", incidentId);
|
paramMap.put("deal_use_time", sjjjsj);
|
paramMap.put("deal_timeout", deal_timeout);
|
|
|
baseDao.execute(updateSql, paramMap);
|
|
//=====================执行结束流程(事件已解决)
|
WORKFLOW_BASE base = new WORKFLOW_BASE(new SC_WORKFLOW_INCIDENT_LOCAL(incidentId).getInstanceById().getFlow_id()).getInstanceById();
|
|
WORKFLOW_NODE workflow_node = new WORKFLOW_NODE(base.getCurrent_node_id()).getInstanceById();
|
|
//事件响应
|
NodeAnswerEntity entity = new NodeAnswerEntity();
|
entity.setUser_id(userId);
|
entity.setUser_name(userName);
|
workflowCoreService.answerNode(base, workflow_node, entity);
|
|
|
|
//判断是否是第一次响应,如果是第一次响应的话,则更新事件表中实际响应时间(第一次响应时间)
|
String selectSql = "SELECT ANSWER_TIME,CREATE_TIME,ANSWER_TIMEOUT_TIME FROM SC_WORKFLOW_INCIDENT_LOCAL WHERE ID = :incidentId";
|
Map map = baseDao.queryForMap(selectSql,new SqlParameter("incidentId",incidentId));
|
String answerTime = ConvertUtil.obj2StrBlank(map.get("ANSWER_TIME"));
|
long create_time = ConvertUtil.obj2Long(map.get("CREATE_TIME"));
|
|
if(!StringUtil.notEmpty(answerTime)) {
|
StringBuilder builder = new StringBuilder("UPDATE SC_WORKFLOW_INCIDENT_LOCAL SET ");
|
long answer_time = DateUtil.getCurrentDate14();
|
//判断是否响应超时
|
long answer_timeout_time = ConvertUtil.obj2Long(map.get("ANSWER_TIMEOUT_TIME"));
|
|
String answer_timeout = "2";
|
if(answer_time>answer_timeout_time) {
|
answer_timeout = "1";
|
}
|
|
builder.append(" ANSWER_TIME = :answerTime,ANSWER_USE_TIME = :answer_user_time,ANSWER_TIMEOUT = :answer_timeout ");
|
paramMap.put("answerTime",answer_time);
|
paramMap.put("answer_timeout", answer_timeout);
|
|
//计算第一次响应时间和创建事件的事件差 将时间差转化为分钟
|
long seconds = DateUtil.getSecondsFormDate2Date(create_time, answer_time);
|
//将秒转化为分钟
|
double sjxysj = NumberUtil.div(ConvertUtil.obj2Double(seconds), ConvertUtil.obj2Double(60), 1);
|
|
paramMap.put("answer_user_time", sjxysj);
|
builder.append(" WHERE ID = :incidentId");
|
paramMap.put("incidentId", incidentId);
|
baseDao.execute(builder.toString(), paramMap);
|
}
|
|
|
|
|
|
|
NodeFinishEntity finishEntity = new NodeFinishEntity();
|
finishEntity.setDeal_result(1);
|
finishEntity.setDeal_note_title("流程结束");
|
finishEntity.setDeal_note(bz);
|
|
|
//判断是否能够结束节点
|
boolean canFinish = workflowCoreService.finishNode(base, workflow_node, finishEntity);
|
if (canFinish) {
|
//关闭流程
|
workflowCoreService.finishWorkFlow(base);
|
}
|
//=====================执行结束流程完毕(事件已解决)
|
|
|
String flowId = base.getId();
|
|
//增加事件处理记录
|
GG_RECORD record = new GG_RECORD();
|
record.setDeal_content("解决事件:"+userName+"解决了事件");
|
record.setDeal_user_id("1");
|
record.setDeal_user_name(userName);
|
record.setBusiness_id(flowId);
|
recordService.addRecord(record);
|
|
}
|
private Map getHs(String incidentId,BaseDao baseDao,long resolveTime) {
|
String selectCreateTime = "SELECT CREATE_TIME,DEAL_TIMEOUT_TIME FROM SC_WORKFLOW_INCIDENT_LOCAL WHERE ID = :id ";
|
Map map = baseDao.queryForMap(selectCreateTime,new SqlParameter("id",incidentId));
|
long create_time = ConvertUtil.obj2Long(map.get("CREATE_TIME"));
|
long deal_timeout_time = ConvertUtil.obj2Long(map.get("DEAL_TIMEOUT_TIME"));
|
|
//计算第解决时间和创建事件的事件差 将时间差转化为小时
|
long jjSeconds = DateUtil.getSecondsFormDate2Date(create_time, resolveTime);
|
|
//将秒转化为小时
|
double sjjjsj = NumberUtil.div(ConvertUtil.obj2Double(jjSeconds), ConvertUtil.obj2Double(3600), 2);
|
|
Map result = new HashMap();
|
result.put("sjjjsj", sjjjsj);
|
|
if(resolveTime>deal_timeout_time) {
|
result.put("deal_timeout", 1);
|
|
} else {
|
result.put("deal_timeout", 2);
|
}
|
|
return result;
|
}
|
|
/* (non-Javadoc)
|
* @see cn.ksource.web.facade.wechat.ewyw.EwZcFacade#doCloseReason(javax.servlet.http.HttpServletRequest, java.lang.String)
|
*/
|
@Override
|
public void doCloseReason(HttpServletRequest request, String incidentId) {
|
String solveWay = request.getParameter("solveWay");
|
String solveWayName = request.getParameter("solveWayName");
|
|
|
String resolve = request.getParameter("resolve");
|
String bz = request.getParameter("bz");
|
|
String merged_business_id = new String();
|
|
if(solveWay.equals(Constants.SJCF)) {
|
merged_business_id = request.getParameter("merged_business_id");
|
}
|
|
Map user=new HashMap();
|
if(request.getParameter("isWechat")!=null && request.getParameter("isWechat").equals("1")){
|
user = WebUtil.getEngineerMsg(request);
|
}else{
|
user = WebUtil.getLoginUser(request).getLoginUser();
|
}
|
String userId = ConvertUtil.obj2StrBlank(user.get("ID"));
|
String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM"));
|
|
long resolveTime = DateUtil.getCurrentDate14();
|
|
String state = Constants.SC_WORKFLOW_INCIDENT_LOCAL_STATE_YGB;
|
|
|
Map result = getHs(incidentId,baseDao,resolveTime);
|
//获取解决耗时
|
double sjjjsj = ConvertUtil.obj2Double(result.get("sjjjsj"));
|
|
String deal_timeout = ConvertUtil.obj2StrBlank(result.get("deal_timeout"));
|
|
String updateSql = "UPDATE SC_WORKFLOW_INCIDENT_LOCAL SET STATE = :state , RESOLVE_USER_ID = :userId,RESOLVE_USER_NAME = :userName,RESOLVE_TIME = :resolveTime,DEAL_USE_TIME = :deal_use_time,RESOLVE_TYPE_ID = :solveWay,RESOLVE_TYPE_NAME = :solveWayName,RESOLVE = :resolve,MERGED_BUSINESS_ID = :merged_business_id,DEAL_TIMEOUT = :deal_timeout WHERE ID = :incidentId";
|
|
Map paramMap = new HashMap();
|
paramMap.put("state", state);
|
paramMap.put("userId", userId);
|
paramMap.put("userName", userName);
|
paramMap.put("resolveTime", resolveTime);
|
paramMap.put("solveWay", solveWay);
|
paramMap.put("solveWayName", solveWayName);
|
paramMap.put("resolve", resolve);
|
paramMap.put("merged_business_id", merged_business_id);
|
paramMap.put("incidentId", incidentId);
|
paramMap.put("deal_use_time", sjjjsj);
|
paramMap.put("deal_timeout", deal_timeout);
|
|
baseDao.execute(updateSql, paramMap);
|
|
//=====================执行结束流程(事件已关闭)
|
WORKFLOW_BASE base = new WORKFLOW_BASE(new SC_WORKFLOW_INCIDENT_LOCAL(incidentId).getInstanceById().getFlow_id()).getInstanceById();
|
|
WORKFLOW_NODE workflow_node = new WORKFLOW_NODE(base.getCurrent_node_id()).getInstanceById();
|
|
//事件响应
|
NodeAnswerEntity entity = new NodeAnswerEntity();
|
entity.setUser_id(userId);
|
entity.setUser_name(userName);
|
workflowCoreService.answerNode(base, workflow_node, entity);
|
|
//判断是否是第一次响应,如果是第一次响应的话,则更新事件表中实际响应时间(第一次响应时间)
|
String selectSql = "SELECT ANSWER_TIME,CREATE_TIME,ANSWER_TIMEOUT_TIME FROM SC_WORKFLOW_INCIDENT_LOCAL WHERE ID = :incidentId";
|
Map map = baseDao.queryForMap(selectSql,new SqlParameter("incidentId",incidentId));
|
String answerTime = ConvertUtil.obj2StrBlank(map.get("ANSWER_TIME"));
|
long create_time = ConvertUtil.obj2Long(map.get("CREATE_TIME"));
|
|
if(!StringUtil.notEmpty(answerTime)) {
|
StringBuilder builder = new StringBuilder("UPDATE SC_WORKFLOW_INCIDENT_LOCAL SET ");
|
long answer_time = DateUtil.getCurrentDate14();
|
//判断是否响应超时
|
long answer_timeout_time = ConvertUtil.obj2Long(map.get("ANSWER_TIMEOUT_TIME"));
|
|
String answer_timeout = "2";
|
if(answer_time>answer_timeout_time) {
|
answer_timeout = "1";
|
}
|
|
builder.append(" ANSWER_TIME = :answerTime,ANSWER_USE_TIME = :answer_user_time,ANSWER_TIMEOUT = :answer_timeout ");
|
paramMap.put("answerTime",answer_time);
|
paramMap.put("answer_timeout", answer_timeout);
|
|
//计算第一次响应时间和创建事件的事件差 将时间差转化为分钟
|
long seconds = DateUtil.getSecondsFormDate2Date(create_time, answer_time);
|
//将秒转化为分钟
|
double sjxysj = NumberUtil.div(ConvertUtil.obj2Double(seconds), ConvertUtil.obj2Double(60), 1);
|
|
paramMap.put("answer_user_time", sjxysj);
|
builder.append(" WHERE ID = :incidentId");
|
paramMap.put("incidentId", incidentId);
|
baseDao.execute(builder.toString(), paramMap);
|
}
|
|
|
|
|
|
NodeFinishEntity finishEntity = new NodeFinishEntity();
|
finishEntity.setDeal_result(1);
|
finishEntity.setDeal_note_title("流程关闭");
|
finishEntity.setDeal_note(bz);
|
|
|
//判断是否能够结束节点
|
boolean canFinish = workflowCoreService.finishNode(base, workflow_node, finishEntity);
|
if (canFinish) {
|
//关闭流程
|
workflowCoreService.closeWorkFlow(base);
|
}
|
//=====================执行结束流程完毕(事件已解决)
|
|
String flowId = base.getId();
|
//增加事件处理记录
|
GG_RECORD record = new GG_RECORD();
|
record.setDeal_content("关闭事件:"+userName+"关闭了驻场运维事件");
|
record.setDeal_user_id("1");
|
record.setDeal_user_name(userName);
|
record.setBusiness_id(flowId);
|
recordService.addRecord(record);
|
|
}
|
|
}
|