package cn.ksource.web.facade.zc; import cn.ksource.beans.*; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.page.PageInfo; import cn.ksource.core.util.*; import cn.ksource.core.web.SysInfoMsg; import cn.ksource.core.web.WebUtil; import cn.ksource.core.workflow.*; import cn.ksource.web.Constants; import cn.ksource.web.controller.wechat.util.WechatConstants; import cn.ksource.web.facade.incident.IncidentFacade; import cn.ksource.web.facade.message.MessageFacade; import cn.ksource.web.service.DataDictionaryService; import cn.ksource.web.service.WorkOrderCodeService; import cn.ksource.web.service.device.DeviceService; import cn.ksource.web.service.file.FileService; import cn.ksource.web.service.order.OrderService; import cn.ksource.web.service.record.RecordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service("zcywFacade") public class ZcywFacadeImpl implements ZcywFacade { @Autowired private BaseDao baseDao; @Autowired private WorkOrderCodeService workOrderCodeService; @Autowired private FileService fileService; @Autowired private WorkflowBusinessService workflowBusinessService; @Autowired private WorkflowCoreService workflowCoreService; @Autowired private MessageFacade messageFacade; @Autowired private RecordService recordService; @Autowired private OrderService orderService; @Autowired private DeviceService deviceService; @Autowired private IncidentFacade incidentFacade; @Autowired private DataDictionaryService dataDictionaryService; @Override public int queryMyZcywCount(Map params) { StringBuilder builder = new StringBuilder(); params.put("ysc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); /** * 查询逻辑 * 1.如果节点状态选择为全部,则查询节点表中处理人是我的,或者处理角色是我的并且没有分配处理人的, * 但查询出来的数据会有重复,因为一个节点我可以处理多次,这样查询出来会有重复的工单,需要过滤,如果同一个工单 有待处理,已处理 或者进行中,已处理,则显示待处理 或进行中,不显示已处理 (待处理和进行中是不会同时存在的) * 2.如果节点状态选择为待处理,则查询节点表中处理人是我的,或者处理角色是我的并且没有分配处理人的 (不需要过滤,因为一个工单待处理节点,只会有一个) * 3.如果节点状态选择为进行中,则查询节点表中处理人是我的 (不需要过滤,因为一个工单进行中节点,只会有一个) * 4.如果节点状态查询未已处理,则查询节点表中处理人是我的,需要过滤(因为一个节点一个人可以处理多次,通过节点表作为主表查询出来的工单会有重复) */ String flowstate = params.get("flowstate"); if(StringUtil.notEmpty(flowstate)) { if(flowstate.equals("1")) { builder.append(" SELECT DISTINCT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.ID,B.WFNAME,B.BUSINESSTYPE,B.WFSTATE,B.WORKFLOWTYPE,B.CREATERNAME,B.CREATERID,B.CREATETIME,B.ENDTIME,B.MAINFLOWID,B.CURRENT_NODE_NAME,B.CURRENT_NODE_ID,B.DEAL_TYPE,B.CURRENT_DEALER_ID,B.CURRENT_DEALER_NAME,B.CURRENT_DEAL_ROLEIDA,B.CURRENT_DEAL_ROLENAME,B.WF_TEMPLATE_ID,B.BUSINESS_ID,B.ORDER_CODE,B.CUSTOMER_ID,B.CUSTOMER_NAME,B.PROJECT_ID,B.PROJECT_NAME,B.SUB_CUSTOMER_NAME,B.SUB_CUSTOMER_ID,C.NAME,C.CONTACT_NAME,C.PRIORITY_ID,C.INFLUENCE_ID,C.SLA_ID,C.THIRD_CATEGORY_ID,C.TYPE_ID FROM WORKFLOW_NODE A,WORKFLOW_BASE B,SC_WORKFLOW_INCIDENT_LOCAL C WHERE A.FLOWID = B.ID AND B.BUSINESS_ID = C.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jddcl "); String status = params.get("status"); if(StringUtil.notEmpty(status)) { if(status.equals("0")){ builder.append(" AND (C.DEAL_TIMEOUT =1 or C.ANSWER_TIMEOUT=1) "); String csstate=params.get("csstate"); if(StringUtil.notEmpty(csstate)){ if(csstate.equals("1")){ builder.append(" AND B.WFSTATE=1 "); } } } } builder.append(")D"); builder.append(" WHERE 1 = 1 "); params.put("jddcl", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_UNDISPOSE)); } else if(flowstate.equals("2")) { builder.append(" SELECT DISTINCT D.* FROM ( "); builder.append(" SELECT B.ID,B.WFNAME,B.BUSINESSTYPE,B.WFSTATE,B.WORKFLOWTYPE,B.CREATERNAME,B.CREATERID,B.CREATETIME,B.ENDTIME,B.MAINFLOWID,B.CURRENT_NODE_NAME,B.CURRENT_NODE_ID,B.DEAL_TYPE,B.CURRENT_DEALER_ID,B.CURRENT_DEALER_NAME,B.CURRENT_DEAL_ROLEIDA,B.CURRENT_DEAL_ROLENAME,B.WF_TEMPLATE_ID,B.BUSINESS_ID,B.ORDER_CODE,B.CUSTOMER_ID,B.CUSTOMER_NAME,B.PROJECT_ID,B.PROJECT_NAME,B.SUB_CUSTOMER_NAME,B.SUB_CUSTOMER_ID,C.NAME,C.CONTACT_NAME,C.PRIORITY_ID,C.INFLUENCE_ID,C.SLA_ID,C.THIRD_CATEGORY_ID,C.TYPE_ID FROM WORKFLOW_NODE A,WORKFLOW_BASE B,SC_WORKFLOW_INCIDENT_LOCAL C WHERE A.FLOWID = B.ID AND B.BUSINESS_ID = C.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jdjxz"); String status = params.get("status"); if(StringUtil.notEmpty(status)) { if(status.equals("0")){ builder.append(" AND (C.DEAL_TIMEOUT =1 or C.ANSWER_TIMEOUT=1) "); String csstate=params.get("csstate"); if(StringUtil.notEmpty(csstate)){ if(csstate.equals("1")){ builder.append(" AND B.WFSTATE=1 "); } } } } builder.append(")D"); builder.append(" WHERE 1 = 1"); params.put("jdjxz", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_DOING)); }else { builder.append(" SELECT DISTINCT D.* FROM ( "); builder.append(" SELECT B.ID,B.WFNAME,B.BUSINESSTYPE,B.WFSTATE,B.WORKFLOWTYPE,B.CREATERNAME,B.CREATERID,B.CREATETIME,B.ENDTIME,B.MAINFLOWID,B.CURRENT_NODE_NAME,B.CURRENT_NODE_ID,B.DEAL_TYPE,B.CURRENT_DEALER_ID,B.CURRENT_DEALER_NAME,B.CURRENT_DEAL_ROLEIDA,B.CURRENT_DEAL_ROLENAME,B.WF_TEMPLATE_ID,B.BUSINESS_ID,B.ORDER_CODE,B.CUSTOMER_ID,B.CUSTOMER_NAME,B.PROJECT_ID,B.PROJECT_NAME,B.SUB_CUSTOMER_NAME,B.SUB_CUSTOMER_ID,C.NAME,C.CONTACT_NAME,C.PRIORITY_ID,C.INFLUENCE_ID,C.SLA_ID,C.THIRD_CATEGORY_ID,C.TYPE_ID FROM WORKFLOW_NODE A,WORKFLOW_BASE B,SC_WORKFLOW_INCIDENT_LOCAL C WHERE A.FLOWID = B.ID AND B.BUSINESS_ID = C.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jdywc "); String status = params.get("status"); if(StringUtil.notEmpty(status)) { if(status.equals("0")){ builder.append(" AND (C.DEAL_TIMEOUT =1 or C.ANSWER_TIMEOUT=1) "); String csstate=params.get("csstate"); if(StringUtil.notEmpty(csstate)){ if(csstate.equals("1")){ builder.append(" AND B.WFSTATE=1 "); } } } } builder.append(")D"); builder.append(" WHERE 1 = 1 "); params.put("jdywc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_FINISH)); } } else { builder.append(" SELECT DISTINCT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.ID,B.WFNAME,B.BUSINESSTYPE,B.WFSTATE,B.WORKFLOWTYPE,B.CREATERNAME,B.CREATERID,B.CREATETIME,B.ENDTIME,B.MAINFLOWID,B.CURRENT_NODE_NAME,B.CURRENT_NODE_ID,B.DEAL_TYPE,B.CURRENT_DEALER_ID,B.CURRENT_DEALER_NAME,B.CURRENT_DEAL_ROLEIDA,B.CURRENT_DEAL_ROLENAME,B.WF_TEMPLATE_ID,B.BUSINESS_ID,B.ORDER_CODE,B.CUSTOMER_ID,B.CUSTOMER_NAME,B.PROJECT_ID,B.PROJECT_NAME,B.SUB_CUSTOMER_NAME,B.SUB_CUSTOMER_ID,C.NAME,C.CONTACT_NAME,C.PRIORITY_ID,C.INFLUENCE_ID,C.SLA_ID,C.THIRD_CATEGORY_ID,C.TYPE_ID FROM WORKFLOW_NODE A,WORKFLOW_BASE B,SC_WORKFLOW_INCIDENT_LOCAL C WHERE A.FLOWID = B.ID AND B.BUSINESS_ID = C.ID AND A.CURRENT_DEALER_ID = :userId "); String status = params.get("status"); if(StringUtil.notEmpty(status)) { if(status.equals("0")){ builder.append(" AND (C.DEAL_TIMEOUT =1 or C.ANSWER_TIMEOUT=1) "); String csstate=params.get("csstate"); if(StringUtil.notEmpty(csstate)){ if(csstate.equals("1")){ builder.append(" AND B.WFSTATE=1 "); } } } } builder.append(")D"); builder.append(" WHERE D.WFSTATE != :ysc "); } builder = getMyZcSql(builder,params); builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); StringBuilder newBuild = new StringBuilder(); newBuild.append("SELECT COUNT(*) FROM ( "); newBuild.append(builder.toString()); newBuild.append(") E"); return baseDao.queryForInteger(newBuild.toString(),params); } @Override public PageInfo queryMyZcywData(PageInfo pageInfo, Map params) { StringBuilder builder = new StringBuilder(); params.put("ysc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); /** * 查询逻辑 * 1.如果节点状态选择为全部,则查询节点表中处理人是我的,或者处理角色是我的并且没有分配处理人的, * 但查询出来的数据会有重复,因为一个节点我可以处理多次,这样查询出来会有重复的工单,需要过滤,如果同一个工单 有待处理,已处理 或者进行中,已处理,则显示待处理 或进行中,不显示已处理 (待处理和进行中是不会同时存在的) * 2.如果节点状态选择为待处理,则查询节点表中处理人是我的,或者处理角色是我的并且没有分配处理人的 (不需要过滤,因为一个工单待处理节点,只会有一个) * 3.如果节点状态选择为进行中,则查询节点表中处理人是我的 (不需要过滤,因为一个工单进行中节点,只会有一个) * 4.如果节点状态查询未已处理,则查询节点表中处理人是我的,需要过滤(因为一个节点一个人可以处理多次,通过节点表作为主表查询出来的工单会有重复) */ String flowstate = params.get("flowstate"); if(StringUtil.notEmpty(flowstate)) { if(flowstate.equals("1")) { builder.append(" SELECT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.*,A.FLOWSTATE,C.NAME,C.CONTACT_NAME,C.PRIORITY_ID,C.INFLUENCE_ID,C.SLA_ID,C.THIRD_CATEGORY_ID,C.TYPE_ID,C.INCIDENT_ID FROM WORKFLOW_NODE A,WORKFLOW_BASE B,SC_WORKFLOW_INCIDENT_LOCAL C WHERE A.FLOWID = B.ID AND B.BUSINESS_ID = C.ID AND A.CURRENT_DEALER_ID = :userId "); String status = params.get("status"); if(StringUtil.notEmpty(status)) { if(status.equals("0")){ builder.append(" AND (C.DEAL_TIMEOUT =1 or C.ANSWER_TIMEOUT=1) "); String csstate=params.get("csstate"); if(StringUtil.notEmpty(csstate)){ if(csstate.equals("1")){ builder.append(" AND B.WFSTATE=1 "); } } } } builder.append(")D"); builder.append(" WHERE D.FLOWSTATE = :jddcl "); params.put("jddcl", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_UNDISPOSE)); } else if(flowstate.equals("2")) { builder.append(" SELECT D.* FROM ( "); builder.append(" SELECT B.*,A.FLOWSTATE,C.NAME,C.CONTACT_NAME,C.PRIORITY_ID,C.INFLUENCE_ID,C.SLA_ID,C.THIRD_CATEGORY_ID,C.TYPE_ID,C.INCIDENT_ID FROM WORKFLOW_NODE A,WORKFLOW_BASE B,SC_WORKFLOW_INCIDENT_LOCAL C WHERE A.FLOWID = B.ID AND B.BUSINESS_ID = C.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jdjxz"); String status = params.get("status"); if(StringUtil.notEmpty(status)) { if(status.equals("0")){ builder.append(" AND (C.DEAL_TIMEOUT =1 or C.ANSWER_TIMEOUT=1) "); String csstate=params.get("csstate"); if(StringUtil.notEmpty(csstate)){ if(csstate.equals("1")){ builder.append(" AND B.WFSTATE=1 "); } } } } builder.append(")D"); builder.append(" WHERE 1 = 1 "); params.put("jdjxz", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_DOING)); }else { builder.append(" SELECT D.* FROM ( "); builder.append(" SELECT DISTINCT B.*,A.FLOWSTATE,C.NAME,C.CONTACT_NAME,C.PRIORITY_ID,C.INFLUENCE_ID,C.SLA_ID,C.THIRD_CATEGORY_ID,C.TYPE_ID,C.INCIDENT_ID FROM WORKFLOW_NODE A,WORKFLOW_BASE B,SC_WORKFLOW_INCIDENT_LOCAL C WHERE A.FLOWID = B.ID AND B.BUSINESS_ID = C.ID AND A.CURRENT_DEALER_ID = :userId AND A.FLOWSTATE = :jdywc "); String status = params.get("status"); if(StringUtil.notEmpty(status)) { if(status.equals("0")){ builder.append(" AND (C.DEAL_TIMEOUT =1 or C.ANSWER_TIMEOUT=1) "); } String csstate=params.get("csstate"); if(StringUtil.notEmpty(csstate)){ if(csstate.equals("1")){ builder.append(" AND B.WFSTATE=1 "); } } } builder.append(")D"); builder.append(" WHERE 1 = 1 "); params.put("jdywc",ConvertUtil.obj2StrBlank( Constants.WORKFLOW_NODE_FLOWSTATE_FINISH)); } } else { builder.append(" SELECT D.* FROM ( "); //查询处理人是我的 builder.append(" SELECT B.*,A.FLOWSTATE,C.NAME,C.CONTACT_NAME,C.PRIORITY_ID,C.INFLUENCE_ID,C.SLA_ID,C.THIRD_CATEGORY_ID,C.TYPE_ID,C.INCIDENT_ID FROM WORKFLOW_NODE A,WORKFLOW_BASE B,SC_WORKFLOW_INCIDENT_LOCAL C WHERE A.FLOWID = B.ID AND B.BUSINESS_ID = C.ID AND A.CURRENT_DEALER_ID = :userId "); String status = params.get("status"); if(StringUtil.notEmpty(status)) { if(status.equals("0")){ builder.append(" AND (C.DEAL_TIMEOUT =1 or C.ANSWER_TIMEOUT=1) "); String csstate=params.get("csstate"); if(StringUtil.notEmpty(csstate)){ if(csstate.equals("1")){ builder.append(" AND B.WFSTATE=1 "); } } } } builder.append(")D"); builder.append(" WHERE D.WFSTATE != :ysc "); } builder = getMyZcSql(builder,params); builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); String pageSize = pageInfo.getPageSize(); String currPage = pageInfo.getCurrPage(); if(!StringUtil.notEmptyNum(pageSize)){ pageSize = "10"; } if(!StringUtil.notEmptyNum(currPage)){ currPage = "1"; } int begin = Integer.valueOf(currPage); int size = Integer.valueOf(pageSize); if(!StringUtil.notEmpty(flowstate)) { builder.append( " ORDER BY D.CREATETIME DESC" ); List result = baseDao.queryForList(builder.toString(),params); List resultList = new ArrayList(); List list = new ArrayList(); Map cacheMap = new HashMap(); if(null!=result && result.size()>0) { for(Map m : result) { String flowId = ConvertUtil.obj2StrBlank(m.get("ID")); if(cacheMap.containsKey(flowId)) { String flowState = ConvertUtil.obj2StrBlank(m.get("FLOWSTATE")); if(flowState.equals(Constants.WORKFLOW_NODE_FLOWSTATE_UNDISPOSE.toString()) || flowState.equals(Constants.WORKFLOW_NODE_FLOWSTATE_DOING.toString())) { cacheMap.put(flowId, m); if(!list.contains(flowId)) { list.add(flowId); } } } else { cacheMap.put(flowId, m); list.add(flowId); } } if(cacheMap.size()>0) { for(String str : list) { resultList.add(cacheMap.get(str)); } } } int infoCount = resultList.size(); int bin = (begin-1)* size ; int end = (begin-1)* size + size; if(end>infoCount){ end=infoCount; } PageInfo info = new PageInfo(); info.setDatas(resultList.subList(bin, end)); info.setRowNum(infoCount); return info; } else { builder.append( " ORDER BY D.CREATETIME DESC "); PageInfo info = baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params); return info; } } public StringBuilder getMyZcSql(StringBuilder builder,Map params){ String status = params.get("status"); if(StringUtil.notEmpty(status)) { if(!status.equals("0")){ builder.append(" AND D.WFSTATE = :status "); } } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND D.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String hjName = params.get("hjName"); if(StringUtil.notEmpty(hjName)) { builder.append(" AND D.CURRENT_NODE_NAME LIKE :hjName "); params.put("hjName", "%"+hjName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND D.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+orderCode+"%"); } String contract = params.get("contract"); if(StringUtil.notEmpty(contract)) { builder.append(" AND D.CONTACT_NAME LIKE :contract "); params.put("contract", "%"+contract+"%"); } String pri = params.get("pri"); if(StringUtil.notEmpty(pri)) { String[] pris = pri.split(","); if(pris.length==1) { builder.append(" AND D.PRIORITY_ID = :priority_id"); params.put("priority_id", pris[0]); } else { builder.append(" AND D.PRIORITY_ID IN ("); for(int i=0; i params) { StringBuilder builder = new StringBuilder(); builder.append("SELECT COUNT(WB.ID) "); builder.append("FROM WORKFLOW_BASE WB,SC_WORKFLOW_INCIDENT_LOCAL B WHERE WB.BUSINESS_ID = B.ID "); builder.append(" AND WB.BUSINESSTYPE = :businessType "); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); builder = getZcSql(builder,params); return baseDao.queryForInteger(builder.toString(), params); } @Override public PageInfo zcywDataForFwt(PageInfo pageInfo, Map params) { StringBuilder builder = new StringBuilder(); builder.append("SELECT WB.ID,WB.ORDER_CODE,WB.WFNAME,WB.BUSINESSTYPE,WB.CREATERNAME,WB.CREATETIME,WB.WFNOTE, "); 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 WHERE WB.BUSINESS_ID = B.ID "); builder.append(" AND WB.BUSINESSTYPE = :businessType "); params.put("businessType", ConvertUtil.obj2StrBlank( Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); builder = getZcSql(builder,params); builder.append( " ORDER BY WB.CREATETIME DESC "); return baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params); } public StringBuilder getZcSql(StringBuilder builder,Map params){ String customer_id = params.get("customer_id"); if(StringUtil.notEmpty(customer_id)) { builder.append(" AND B.CUSTOMER_ID = :customer_id "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND WB.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderStatus = params.get("orderStatus"); if(StringUtil.notEmpty(orderStatus)) { builder.append(" AND WB.WFSTATE = :orderStatus "); params.put("orderStatus", orderStatus); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND WB.ORDER_CODE LIKE :orderCode "); params.put("orderCode", "%"+orderCode+"%"); } return builder; } @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.getLoginedUserId(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; } @Override public List queryAllZcry(HttpServletRequest request) { String subCustomerId = request.getParameter("subCustomerId"); String sql = "SELECT * FROM SC_CUSTOMER_ZC_UESR WHERE CUSTOMER_ID = :subCustomerId "; return baseDao.queryForList(sql,new SqlParameter("subCustomerId",subCustomerId)); } @Override public Map saveZcyw(HttpServletRequest request,SC_WORKFLOW_INCIDENT_LOCAL sc_workflow_incident_local) { Map resultMap = new HashMap(); Map user = WebUtil.getLoginUser(request).getLoginUser(); String userId = ConvertUtil.obj2StrBlank(user.get("ID")); String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); String serivceListId = request.getParameter("serivceListId"); String serivceList = request.getParameter("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 = request.getParameter("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("selectUser"); 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 dealerList = new ArrayList(); Map map = new HashMap(); map.put("USER_ID", dealUserId); map.put("USER_NAME", dealUserName); map.put("IS_ADMIN", "1"); dealerList.add(map); entity.setDealerList(dealerList); workflowBusinessService.toNode(base, node_template_id, entity); String hasMsg = request.getParameter("hasMsg"); /*if(StringUtil.notEmptyNum(hasMsg) && hasMsg.equals("2")) { //保存联系人的信息 CUSTOMER_CONTACTS project_contacts = new CUSTOMER_CONTACTS(); project_contacts.setId(StringUtil.getUUID()).setCustomer_id(sc_workflow_incident_local.getCustomer_id()) .setContact_name(sc_workflow_incident_local.getContact_name()).setContacts_type(sc_workflow_incident_local.getContact_phone()).setYwks(sc_workflow_incident_local.getKeshi()) .setIs_satis(0).setState(1).setIsemail(1).setIsphone(1).setAllow_login(2).setSub_customer_id(sc_workflow_incident_local.getSub_customer_id()).setSub_customer_name(sc_workflow_incident_local.getSub_customer_name()); project_contacts.insert(); }*/ 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[] orderId = request.getParameterValues("orderId"); orderService.saveLinkOrders(flowId,orderId,request); //提交工单时上传文档附件 // /fileService.uploadFile(request, flowId, flowId, null, null); //提交工单时上传文档附件 fileService.uploadFile(request,flowId,flowId,null,null,Constants.GG_FOLDERS_ZCYWSJFOLDERS,Constants.FILE_STATE_SHTG,null); //提交工单时添加关联设备 String[] deviceId = request.getParameterValues("deviceId"); 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; } @Override public void doEndTask(HttpServletRequest request) { String incidentId = request.getParameter("incidentId"); 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; } /** * 执行关闭事件操作 */ @Override public void doCloseReason(HttpServletRequest request) { String incidentId = request.getParameter("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); } /** * 查询驻场运维事件流转记录 */ @Override public List incidentLocalLzRecord(String flowId) { String selectSql = "SELECT N.* FROM WORKFLOW_NODE N,WORKFLOW_TEMPLATE_NODE B WHERE N.NODE_TEMPLATE_ID = B.ID AND N.FLOWID = :flowId ORDER BY N.CREATETIME DESC,B.ORDERNUMBER DESC "; List lzs = baseDao.queryForList(selectSql,new SqlParameter("flowId",flowId)); //格式化响应时间为分钟,格式化处理时间为小时 if(null!=lzs && lzs.size()>0) { for(Map lz : lzs) { String answer_usertime = ConvertUtil.obj2StrBlank(lz.get("ANSWER_USERTIME")); if(StringUtil.notEmpty(answer_usertime) && !answer_usertime.equals("0")) { String answerTime = DateUtil.getFormatSeconds(ConvertUtil.obj2Int(answer_usertime)); lz.put("ANSWER_USERTIME", answerTime); } String deal_usetime = ConvertUtil.obj2StrBlank(lz.get("DEAL_USETIME")); if(StringUtil.notEmpty(deal_usetime) && !deal_usetime.equals("0")) { String dealTime = DateUtil.getFormatSeconds(ConvertUtil.obj2Int(deal_usetime)); lz.put("DEAL_USETIME", dealTime); } } } return lzs; } /** * 查询驻场运维记录基本信息 */ @Override public Map queryIncidentLocalBaseMsg(String orderId) { String selectSql = "SELECT A.*,N.ANSWER_TIME AS XY_TIME,B.WFSTATE FROM SC_WORKFLOW_INCIDENT_LOCAL A LEFT JOIN WORKFLOW_BASE B ON A.ID = B.BUSINESS_ID LEFT JOIN WORKFLOW_NODE N ON B.CURRENT_NODE_ID = N.ID WHERE A.ID = :orderId "; Map baseMap = baseDao.queryForMap(selectSql,new SqlParameter("orderId",orderId)); if(null!=baseMap && baseMap.size()>0) { //查询附件 List files = fileService.getFileList(orderId); baseMap.put("files", files); } return baseMap; } @Override public List queryDealRecord(String orderId) { List list = recordService.queryRecord(orderId); if(null!=list && list.size()>0) { Map cacheFile = new HashMap(); //查询所有该事件工单下的文档 List files = fileService.getFileList(orderId,1); if(null!=files && files.size()>0) { for(Map file :files) { String extend = ConvertUtil.obj2StrBlank(file.get("BUSINESS_ID")); if(StringUtil.notEmpty(extend)) { List cacheList = new ArrayList(); if(cacheFile.containsKey(extend)) { cacheList = (List)cacheFile.get(extend); } cacheList.add(file); cacheFile.put(extend, cacheList); } } } if(null!=cacheFile && cacheFile.size()>0) { for(Map record : list) { String recordId = ConvertUtil.obj2StrBlank(record.get("ID")); if(cacheFile.containsKey(recordId)) { record.put("files", cacheFile.get(recordId)); } } } } return list; } @Override public List queryDevices(String flowId) { //查询流程所有的关联设备 List devices = deviceService.queryLinkDevices(flowId); return devices; } @Override public List queryFiles(String flowId) { List files = fileService.getFileList(flowId,1); if(null!=files && files.size()>0) { for(Map file : files) { file.put("FILE_SIZE", StringUtil.getFileSize(ConvertUtil.obj2Double(file.get("FILE_SIZE")))); } } return files; } @Override public List queryOrders(String flowId) { List orders = orderService.queryLinkOrders(flowId); return orders; } @Override public List queryZcyws(HttpServletRequest request) { String incidentId = request.getParameter("incidentId"); Map incident = queryIncidentLocalBaseMsg(incidentId); String customerId = new String(); if(null!=incident && incident.size()>0) { customerId = ConvertUtil.obj2StrBlank(incident.get("CUSTOMER_ID")); } String name = AjaxUtil.decode(request.getParameter("name")); StringBuilder builder = new StringBuilder("SELECT * FROM SC_WORKFLOW_INCIDENT_LOCAL WHERE CUSTOMER_ID = :customerId AND ID <> :incidentId "); Map paramMap = new HashMap(); paramMap.put("customerId", customerId); paramMap.put("incidentId", incidentId); if(StringUtil.notEmpty(name)) { builder.append(" AND NAME LIKE :name "); paramMap.put("name", "%"+name+"%"); } builder.append(" ORDER BY CREATE_TIME DESC "); return baseDao.queryForList(builder.toString(),paramMap); } /** * 执行工单确认操作 */ @Override public String doOrderConfirm(HttpServletRequest request) { String incidentId = request.getParameter("incidentId"); String flowId = request.getParameter("flowId"); Map user = WebUtil.getLoginUser(request).getLoginUser(); String userId = ConvertUtil.obj2StrBlank(user.get("ID")); String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); NodeAnswerEntity answerEntity = new NodeAnswerEntity(); answerEntity.setUser_id(userId); answerEntity.setUser_name(userName); WORKFLOW_BASE base = new WORKFLOW_BASE(flowId).getInstanceById(); //工单响应 workflowCoreService.answerNode(base, new WORKFLOW_NODE(base.getCurrent_node_id()).getInstanceById(), answerEntity); //判断是否是第一次响应,如果是第一次响应的话,则更新事件表中实际响应时间(第一次响应时间) 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 String updateZcywMsg(HttpServletRequest request,SC_WORKFLOW_INCIDENT_LOCAL incident) { SC_WORKFLOW_INCIDENT_LOCAL incident_old= new SC_WORKFLOW_INCIDENT_LOCAL(incident.getId()).getInstanceById(); String name_old= incident_old.getName(); String descrip_old= incident_old.getDescrip(); String name=request.getParameter("name"); String descrip=request.getParameter("descrip"); //当事件名称和事件备注改变时同时改变流程表里的信息 if(!name_old.equals(name) || !descrip.equals(descrip_old)){ String sql="update WORKFLOW_BASE set wfname=:name, wfnote=:descrip where BUSINESS_ID=:business_id"; Map map=new HashMap(); map.put("name",name); map.put("descrip",descrip); map.put("business_id",incident.getId()); baseDao.execute(sql,map); } String serivceListId = request.getParameter("serivceListId"); String serivceList = request.getParameter("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]; } //响应时间为分钟 Long requestAnswerTime = incident.getRequest_answer_time(); //处理时间为小时 Long dealTime = incident.getRequest_deal_time(); if(null == requestAnswerTime) { requestAnswerTime = Long.valueOf(0); } if(null == dealTime) { dealTime = Long.valueOf(0); } String selectCreateTimeSql = "SELECT CREATE_TIME,ANSWER_TIME,RESOLVE_TIME FROM SC_WORKFLOW_INCIDENT_LOCAL WHERE ID = :incidentId"; Map m = baseDao.queryForMap(selectCreateTimeSql,new SqlParameter("incidentId",incident.getId())); long createTime = ConvertUtil.obj2Long(m.get("CREATE_TIME")); long answerTimeoutTime = DateUtil.getTimeAdd(createTime, ConvertUtil.obj2Int(requestAnswerTime),2); long dealTimeoutTime = DateUtil.getTimeAdd(createTime, ConvertUtil.obj2Int(dealTime),1); long currentTime = DateUtil.getCurrentDate14(); //判断当前是否已经响应超时 String answer_time = ConvertUtil.obj2StrBlank(m.get("ANSWER_TIME")); if(StringUtil.notEmpty(answer_time)) { if(ConvertUtil.obj2Long(answer_time) > answerTimeoutTime) { incident.setAnswer_timeout(1); } } else { if(currentTime > answerTimeoutTime) { incident.setAnswer_timeout(1); } } //判断当前是否已经处理超时 String resolve_time = ConvertUtil.obj2StrBlank(m.get("RESOLVE_TIME")); if(StringUtil.notEmpty(resolve_time)) { if(ConvertUtil.obj2Long(resolve_time) > dealTimeoutTime) { incident.setDeal_timeout(1); } } else { if(currentTime > dealTimeoutTime) { incident.setDeal_timeout(1); } } incident.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).setAnswer_timeout_time(answerTimeoutTime).setDeal_timeout_time(dealTimeoutTime); incident.update(); String id = incident.getId(); fileService.uploadFile(request, id,id,null,null); return "1"; } /** * 执行升级为事件操作 */ @Override public String updateUpTask(HttpServletRequest request) { String id = request.getParameter("id"); if(StringUtil.notEmpty(id)) { SC_WORKFLOW_INCIDENT_LOCAL local = new SC_WORKFLOW_INCIDENT_LOCAL(id).getInstanceById(); String flowId = local.getFlow_id(); SC_WORKFLOW_INCIDENT incident = new SC_WORKFLOW_INCIDENT(); try { incident = copyProperties(incident,local); } catch (Exception e) { e.printStackTrace(); } //查询当前项目的服务台组的编号 String selectSql = "SELECT A.* FROM AC_ROLE A WHERE A.ID = :roleid "; Map map = baseDao.queryForMap(selectSql,new SqlParameter("roleid",Constants.AC_ROLE_FWT)); String groupId = ConvertUtil.obj2StrBlank(map.get("ID")); String groupName = ConvertUtil.obj2StrBlank(map.get("ROLENAME")); String state = Constants.SC_WORKFLOW_INCIDENT_STATE_FPDFWT; String node_template_id = Constants.KFRY; String order_code = workOrderCodeService.getIncidentOrderCode(); //响应时间为分钟 Long requestAnswerTime = incident.getRequest_answer_time(); Long dealTime = incident.getRequest_deal_time(); if(null == requestAnswerTime) { requestAnswerTime = Long.valueOf(0); } if(null == dealTime) { dealTime = Long.valueOf(0); } //处理时间为小时 long createTime = DateUtil.getCurrentDate14(); long answerTimeoutTime = DateUtil.getTimeAdd(createTime, ConvertUtil.obj2Int(requestAnswerTime),2); long dealTimeoutTime = DateUtil.getTimeAdd(createTime, ConvertUtil.obj2Int(dealTime),1); Map user = WebUtil.getLoginUser(request).getLoginUser(); String userId = ConvertUtil.obj2StrBlank(user.get("ID")); String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); String incidentId = StringUtil.getUUID(); incident.setCreate_user_id(userId).setCreate_user_name(userName).setCreate_time(createTime).setId(incidentId).setState(ConvertUtil.obj2Integer(state)).setOrder_code(order_code).setFlow_name(incident.getName()).setAnswer_timeout(2).setAnswer_timeout_time(answerTimeoutTime).setDeal_timeout(2).setDeal_timeout_time(dealTimeoutTime).setCreate_type(3).setDeal_use_time(null).setAnswer_use_time(null); incident.insert(); //启动流程 WORKFLOW_BASE base = workflowBusinessService.startIncidentWorkflow(incidentId,""); //启动流程 NodeDealEntity entity = new NodeDealEntity(); entity.setDealer_type(3); List dealerList = new ArrayList(); entity.setBefore_Dealer_type(1); entity.setRoleID(groupId); entity.setRoleName(groupName); //查询改组下面的所有人员信息 String selectUser = "SELECT B.ID AS USER_ID,B.ZSXM AS USER_NAME FROM AC_USER_REF_ROLE A,GG_USER B WHERE A.JSBH = :groupId AND A.YHBH = B.ID AND B.ZT = 1 "; dealerList = baseDao.queryForList(selectUser,new SqlParameter("groupId",groupId)); 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(incident.getName()) .setContent(incident.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_SJGL); messageFacade.doSendMessage(message, dealerList); //添加关联工单 List orders = orderService.queryLinkOrders(flowId); StringBuilder builder = new StringBuilder(); List orderIds = new ArrayList(); if(null!=orders && orders.size()>0) { for(Map order : orders) { String orderId = ConvertUtil.obj2StrBlank(order.get("RELATE_FLOW_ID")); builder.append(orderId).append(","); } builder.deleteCharAt(builder.length()-1); String[] orderId = builder.toString().split(","); orderService.saveLinkOrders(base.getId(),orderId,request); } //添加关联设备 String selectDeviceSql = "SELECT * FROM CMDB_CI_REF_ORDER WHERE FLOW_ID = :flowId"; List devices = baseDao.queryForList(selectDeviceSql,new SqlParameter("flowId",flowId)); if(null!=devices && devices.size()>0) { List list = new ArrayList(); String insertSql = "INSERT INTO CMDB_CI_REF_ORDER(ID,FLOW_ID,CI_ID) VALUES (:id,:flowId,:ciId)"; for(Map device : devices) { SqlParameter sqlParameter = new SqlParameter(); sqlParameter.put("id", StringUtil.getUUID()); sqlParameter.put("ciId", device.get("CI_ID")); sqlParameter.put("flowId", base.getId()); list.add(sqlParameter); } baseDao.executeBatch(insertSql,list); } //查询文档附件 List files = fileService.getFileList(id,1); if(null!=files && files.size()>0) { String sql = "INSERT INTO GG_FILES(ID,FILE_NAME,FILE_PATH,FILE_SIZE,FILE_FORMAT,BUSINESS_ID,FILE_NOTE,ORDERNUM,EXTEND1,EXTEND2,EXTEND3,CREATE_TIME,DEL_FLAG)" + "VALUES(:ID,:FILE_NAME,:FILE_PATH,:FILE_SIZE,:FILE_FORMAT,:BUSINESS_ID,:FILE_NOTE,:ORDERNUM,:EXTEND1,:EXTEND2,:EXTEND3,:CREATE_TIME,1)"; List parameters = new ArrayList(); for(Map file : files) { SqlParameter sqlParameter = new SqlParameter(); sqlParameter.put("ID", StringUtil.getUUID()); sqlParameter.put("FILE_NAME", file.get("FILE_NAME")); sqlParameter.put("FILE_PATH", file.get("FILE_PATH")); sqlParameter.put("FILE_SIZE", file.get("FILE_SIZE")); sqlParameter.put("FILE_FORMAT", file.get("FILE_SIZE")); sqlParameter.put("BUSINESS_ID", incidentId); sqlParameter.put("ORDERNUM", file.get("ORDERNUM")); sqlParameter.put("FILE_NOTE", file.get("FILE_NOTE")); sqlParameter.put("EXTEND1", incidentId); sqlParameter.put("EXTEND2", null); sqlParameter.put("EXTEND3", null); sqlParameter.put("CREATE_TIME", createTime); parameters.add(sqlParameter); } baseDao.executeBatch(sql,parameters); } String resolve = request.getParameter("resolve"); String bz = request.getParameter("bz"); //设置驻场运维工单为已挂起 String updateZcyw = "UPDATE SC_WORKFLOW_INCIDENT_LOCAL SET STATE = :state,RESOLVE_USER_ID = :userId,RESOLVE_USER_NAME = :userName,RESOLVE_TIME = :resolveTime,RESOLVE = :solveWay,INCIDENT_ID = :incidentId WHERE ID = :id"; baseDao.execute(updateZcyw, new SqlParameter("state",Constants.SC_WORKFLOW_INCIDENT_LOCAL_STATE_YGQ).addValue("id", id).addValue("resolveTime", createTime).addValue("incidentId", incidentId).addValue("userId", userId).addValue("userName", userName).addValue("solveWay", resolve)); //执行挂起操作 WORKFLOW_BASE base1 = new WORKFLOW_BASE(new SC_WORKFLOW_INCIDENT_LOCAL(id).getInstanceById().getFlow_id()).getInstanceById(); WORKFLOW_NODE workflow_node = new WORKFLOW_NODE(base1.getCurrent_node_id()).getInstanceById(); /*NodeAnswerEntity entity1 = new NodeAnswerEntity(); entity1.setUser_id(userId); entity1.setUser_name(userName); workflowCoreService.answerNode(base1, workflow_node, entity1);*/ NodeFinishEntity finishEntity = new NodeFinishEntity(); finishEntity.setDeal_result(1); finishEntity.setDeal_note_title("流程挂起"); finishEntity.setDeal_note(bz); boolean canFinish = workflowCoreService.finishNode(base, new WORKFLOW_NODE(base1.getCurrent_node_id()).getInstanceById(), finishEntity); if (canFinish) { workflowCoreService.upWorkFlow(base1); } //增加事件处理记录 GG_RECORD record = new GG_RECORD(); record.setDeal_content("升级事件:"+userName+"升级了事件"); record.setDeal_time(DateUtil.getCurrentDate14()); record.setDeal_user_id("1"); record.setDeal_user_name(userName); record.setBusiness_id(flowId); recordService.addRecord(record); return incidentId; } return null; } /** * @param incident * @param local * @return */ private SC_WORKFLOW_INCIDENT copyProperties(SC_WORKFLOW_INCIDENT incident,SC_WORKFLOW_INCIDENT_LOCAL local) { incident.setName(local.getName()).setDescrip(local.getDescrip()).setHappen_time(local.getHappen_time()).setFirst_category_id(local.getFirst_category_id()).setFirst_category_name(local.getFirst_category_name()) .setSecond_category_id(local.getSecond_category_id()).setSecond_category_name(local.getSecond_category_name()).setThird_category_id(local.getThird_category_id()) .setThird_category_name(local.getThird_category_name()).setPriority_id(local.getPriority_id()).setPriority_name(local.getPriority_name()).setInfluence_id(local.getInfluence_id()) .setInfluence_name(local.getInfluence_name()).setSla_id(local.getSla_id()).setSla_name(local.getSla_name()).setCustomer_id(local.getCustomer_id()) .setCustomer_name(local.getCustomer_name()).setContact_id(local.getContact_id()).setContact_name(local.getContact_name()).setContact_phone(local.getContact_phone()).setKeshi(local.getKeshi()).setApply_type_id(local.getApply_type_id()) .setApply_type_name(local.getApply_type_name()).setApply_user_name(local.getApply_user_name()).setApply_user_phone(local.getApply_user_phone()).setApply_time(local.getApply_time()) .setCreate_user_id(local.getCreate_user_id()).setCreate_user_name(local.getCreate_user_name()).setType_id(local.getType_id()).setType_name(local.getType_name()).setSource_id(local.getSource_id()).setSource_name(local.getSource_name()) .setRequest_answer_time(local.getRequest_answer_time()).setRequest_deal_time(local.getRequest_deal_time()).setAnswer_timeout(2).setDeal_timeout(2) .setSub_customer_id(local.getSub_customer_id()).setSub_customer_name(local.getSub_customer_name()).setCreate_type(3); return incident; } @Override public Map queryWcReport(String orderId) { Map incident = new SC_WORKFLOW_INCIDENT_LOCAL(orderId).getBeanMapById(); String flowId = ConvertUtil.obj2StrBlank(incident.get("FLOW_ID")); //查询关联工单 if(null!=incident && incident.size()>0) { List orders = queryOrders(flowId); List devices = incidentFacade.queryDevices(flowId); List files = queryFiles(flowId); incident.put("orders", orders); incident.put("devices", devices); incident.put("files", files); } return incident; } @Override public Map queryCloseReport(String orderId) { Map incident = new SC_WORKFLOW_INCIDENT_LOCAL(orderId).getBeanMapById(); if(null!=incident && incident.size()>0) { String merged_business_id = ConvertUtil.obj2StrBlank(incident.get("MERGED_BUSINESS_ID")); if(StringUtil.notEmpty(merged_business_id)) { Map linkIncident = new SC_WORKFLOW_INCIDENT_LOCAL(merged_business_id).getBeanMapById(); incident.put("linkIncident", linkIncident); } } return incident; } @Override public Map saveDispatchTask(HttpServletRequest request) { Map resultMap = new HashMap(); resultMap.put("result", 2); String id = request.getParameter("id"); String selectUser = request.getParameter("userMsg"); String dealUserId = new String(); String dealUserName = new String(); String state = Constants.SC_WORKFLOW_INCIDENT_LOCAL_STATE_FPDZCGCS; String node_template_id = Constants.ZCYW_FWSL; if(StringUtil.notEmpty(selectUser)) { String[] userMsg = selectUser.split("-"); if(userMsg.length==2) { dealUserId = userMsg[0]; dealUserName = userMsg[1]; } } if(StringUtil.notEmpty(dealUserId) && StringUtil.notEmpty(dealUserName)) { //执行分派任务 WORKFLOW_BASE base = new WORKFLOW_BASE(id).getInstanceById(); NodeDealEntity entity = new NodeDealEntity(); entity.setDealer_type(3); entity.setBefore_Dealer_type(2); List dealerList = new ArrayList(); Map map = new HashMap(); map.put("USER_ID", dealUserId); map.put("USER_NAME", dealUserName); map.put("IS_ADMIN", "1"); dealerList.add(map); entity.setDealerList(dealerList); String bz = request.getParameter("bz"); NodeFinishEntity finishEntity = new NodeFinishEntity(); finishEntity.setDeal_result(1); finishEntity.setDeal_note_title("节点转至 :" + dealUserName); finishEntity.setDeal_note(bz); NodeAnswerEntity answerEntity = new NodeAnswerEntity(); answerEntity.setUser_id(dealUserId); answerEntity.setUser_name(dealUserName); WORKFLOW_NODE node = new WORKFLOW_NODE(base.getCurrent_node_id()).getInstanceById(); boolean canFinish = workflowCoreService.finishNode(base, node, finishEntity); if (canFinish) { workflowBusinessService.toNode(base, node_template_id, entity); } //更新事件状态 String updateIncidentSql = "UPDATE SC_WORKFLOW_INCIDENT_LOCAL SET STATE = :state WHERE ID = :incidentId "; baseDao.execute(updateIncidentSql, new SqlParameter("state",state).addValue("incidentId", base.getBusiness_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")); String flowId = base.getId(); //增加事件处理记录 GG_RECORD record = new GG_RECORD(); record.setDeal_content("指派任务:"+userName+"将事件指派给了"+dealUserName); record.setDeal_time(DateUtil.getCurrentDate14()); record.setDeal_user_id("1"); record.setDeal_user_name(userName); record.setBusiness_id(base.getId()); recordService.addRecord(record); 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(base.getWfname()) .setContent(base.getWfname()) .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) .setType(Constants.GG_MESSAGE_TYPE_XCYW); messageFacade.doSendMessage(message, dealerList); resultMap.put("result", 1); } SysInfoMsg msg = new SysInfoMsg("2",dealUserName,"服务受理"); resultMap.put("msg", msg); return resultMap; } @Override public Map getOrderNum(Map params) { String type = params.get("type"); //事件待响应 int dxycount = 0; //事件已超时 int ycscount = 0; //事件进行中 int jxzcount = 0; params.put("state", "1"); dxycount = getOrederStateNum(params); params.put("state", "2"); jxzcount = getOrederStateNum(params); params.put("state", "3"); ycscount = queryZcywTimeoutCount(params); Map map = new HashMap(); map.put("dxycount", dxycount); map.put("jxzcount", jxzcount); map.put("ycscount", ycscount); return map; } @Override public int getOrederStateNum(Map param){ String sql="select count(w.num) from (select COUNT(a.id) num from sc_workflow_incident_local a," + "workflow_base b,workflow_node n where a.id=b.BUSINESS_ID and n.FLOWID=b.id" + " and n.FLOWSTATE=:state and n.CURRENT_DEALER_ID=:userId "; sql+=" GROUP BY a.id) w "; return baseDao.queryForInteger(sql, param); } @Override public int queryZcywTimeoutCount(Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT COUNT(D.ID) FROM (SELECT B.ID FROM SC_WORKFLOW_INCIDENT_LOCAL B,WORKFLOW_BASE WB,WORKFLOW_NODE N "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType AND WB.WFSTATE = 1 AND (B.ANSWER_TIMEOUT = 1 OR B.DEAL_TIMEOUT = 1 ) AND N.CURRENT_DEALER_ID = :current_dealer_id "); params.put("current_dealer_id", params.get("userId")); sql.append(sqlpart); sql.append(" AND N.FLOWID=WB.ID GROUP BY B.ID ) D"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); return baseDao.queryForInteger(sql.toString(), params); } @Override public Map getLastMonthZcywEffect(Map params) { Map chartMap = new HashMap(); String userId = params.get("userId"); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay, -30, 8); params.put("startTime", startDay + "000000"); params.put("endTime", endDay + "600000"); StringBuilder builder = new StringBuilder(); if (StringUtil.isBlank(userId)) { builder.append(" SELECT count(ID) NUM,INFLUENCE_ID FROM SC_WORKFLOW_INCIDENT_LOCAL WHERE "); builder.append(" CUSTOMER_ID = :cusId AND CREATE_TIME >= :startTime AND CREATE_TIME <= :endTime "); builder.append(" GROUP BY INFLUENCE_ID "); } else { builder.append(" SELECT count(q.ID) NUM,q.INFLUENCE_ID FROM SC_WORKFLOW_INCIDENT_LOCAL q,WORKFLOW_BASE b "); builder.append(" where b.ID = q.FLOW_ID and EXISTS ( "); builder.append(" select FLOWID from workflow_node n where b.ID = n.FLOWID and n.CURRENT_DEALER_ID = :userId "); builder.append(" ) and q.CUSTOMER_ID = :cusId and q.CREATE_TIME>=:startTime and q.CREATE_TIME<=:endTime group by q.INFLUENCE_ID "); } List dataList = baseDao.queryForList(builder.toString(), params); if (dataList != null && dataList.size() > 0) { Map dataMap = new HashMap(); Map tempMap = new HashMap(); List serieslist = new ArrayList(); for (Map data : dataList) { dataMap.put(data.get("INFLUENCE_ID").toString(), data); } List catelist = dataDictionaryService.getDataDictionaryByCategoryKey(Constants.EVENT_EFFECT_DG); if (catelist != null && catelist.size() > 0) { for (Map cate : catelist) { List tempList = new ArrayList(); tempList.add(cate.get("DATAVALUE").toString()); if (dataMap.get(cate.get("DATAKEY").toString()) != null) { tempList.add(((Map) dataMap.get(cate.get("DATAKEY").toString())).get("NUM")); } else { tempList.add(0); } serieslist.add(tempList); } } chartMap.put("seriesData", serieslist); } return chartMap; } @Override public Map getLastMonthZcywCount(Map params) { Map chartMap = new HashMap(); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay, -30, 8); String userId = params.get("userId"); StringBuilder builder = new StringBuilder(); params.put("startTime", startDay + "000000"); params.put("endTime", endDay + "600000"); if (StringUtil.isBlank(userId)) { builder.append(" select count(ID) NUM,DATE_FORMAT(CREATE_TIME,'%Y%m%d') CREATEDAY from SC_WORKFLOW_INCIDENT_LOCAL where CUSTOMER_ID = :cusId "); builder.append(" and CREATE_TIME>=:startTime and CREATE_TIME<=:endTime group by DATE_FORMAT(CREATE_TIME,'%Y%m%d') "); } else { builder.append(" select count(q.ID) NUM,DATE_FORMAT(q.CREATE_TIME,'%Y%m%d') CREATEDAY from workflow_base b ,SC_WORKFLOW_INCIDENT_LOCAL q "); builder.append(" where b.ID = q.FLOW_ID and EXISTS ( "); builder.append(" select FLOWID from workflow_node n where b.ID = n.FLOWID and n.CURRENT_DEALER_ID = :userId "); builder.append(" ) and q.CUSTOMER_ID = :cusId and q.CREATE_TIME>=:startTime and q.CREATE_TIME<=:endTime group by DATE_FORMAT(q.CREATE_TIME,'%Y%m%d') "); } List dataList = baseDao.queryForList(builder.toString(), params); if (dataList != null && dataList.size() > 0) { List categories = DateUtil.getDates(startDay, endDay); categories.add(String.valueOf(DateUtil.getCurrentDate8())); List categories_format = new ArrayList(); Map dataMap = new HashMap(); Map tempMap = new HashMap(); List series = new ArrayList(); tempMap.put("name", "驻场事件数量"); List tempList = new ArrayList(); for (Map data : dataList) { dataMap.put(data.get("CREATEDAY").toString(), data); } for (String day : categories) { categories_format.add(DateUtil.format("yyyy-MM-dd", day)); if (dataMap.get(day) != null) { tempList.add(((Map) dataMap.get(day)).get("NUM")); } else { tempList.add(0); } } tempMap.put("data", tempList); series.add(tempMap); chartMap.put("categories", categories_format); chartMap.put("step", Math.ceil(categories.size() / 9)); chartMap.put("series", series); } return chartMap; } @Override public Map getLastMonthZcywLv(Map params) { Map chartMap = new HashMap(); String userId = params.get("userId"); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay, -30, 8); params.put("startTime", startDay + "000000"); params.put("endTime", endDay + "600000"); StringBuilder builder = new StringBuilder(); if (StringUtil.isBlank(userId)) { builder.append(" SELECT count(ID) NUM,SLA_ID FROM SC_WORKFLOW_INCIDENT_LOCAL WHERE "); builder.append(" CUSTOMER_ID = :cusId AND CREATE_TIME >= :startTime AND CREATE_TIME <= :endTime "); builder.append(" GROUP BY SLA_ID "); } else { builder.append(" SELECT count(q.ID) NUM,q.SLA_ID FROM SC_WORKFLOW_INCIDENT_LOCAL q,WORKFLOW_BASE b "); builder.append(" where b.ID = q.FLOW_ID and EXISTS ( "); builder.append(" select FLOWID from workflow_node n where b.ID = n.FLOWID and n.CURRENT_DEALER_ID = :userId "); builder.append(" ) and q.CUSTOMER_ID = :cusId and q.CREATE_TIME>=:startTime and q.CREATE_TIME<=:endTime group by q.SLA_ID "); } List dataList = baseDao.queryForList(builder.toString(), params); if (dataList != null && dataList.size() > 0) { Map dataMap = new HashMap(); Map tempMap = new HashMap(); List serieslist = new ArrayList(); for (Map data : dataList) { dataMap.put(data.get("SLA_ID").toString(), data); } builder.setLength(0); builder.append(" select ID LEVEL_ID,LEVEL_NAME from SC_SLA where state=1 order by SERIAL "); List catelist = baseDao.queryForList(builder.toString(), params); for (Map cate : catelist) { List tempList = new ArrayList(); tempList.add(cate.get("LEVEL_NAME").toString()); if (dataMap.get(cate.get("LEVEL_ID").toString()) != null) { tempList.add(((Map) dataMap.get(cate.get("LEVEL_ID").toString())).get("NUM")); } else { tempList.add(0); } serieslist.add(tempList); } chartMap.put("seriesData", serieslist); } return chartMap; } @Override public Map getLastMonthZcywPri(Map params) { Map chartMap = new HashMap(); String userId = params.get("userId"); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay, -30, 8); params.put("startTime", startDay + "000000"); params.put("endTime", endDay + "600000"); StringBuilder builder = new StringBuilder(); if (StringUtil.isBlank(userId)) { builder.append(" SELECT count(ID) NUM,PRIORITY_ID FROM SC_WORKFLOW_INCIDENT_LOCAL WHERE "); builder.append(" CUSTOMER_ID = :cusId AND CREATE_TIME >= :startTime AND CREATE_TIME <= :endTime "); builder.append(" GROUP BY PRIORITY_ID "); } else { builder.append(" SELECT count(q.ID) NUM,q.PRIORITY_ID FROM SC_WORKFLOW_INCIDENT_LOCAL q,WORKFLOW_BASE b "); builder.append(" where b.ID = q.FLOW_ID and EXISTS ( "); builder.append(" select FLOWID from workflow_node n where b.ID = n.FLOWID and n.CURRENT_DEALER_ID = :userId "); builder.append(" ) and q.CUSTOMER_ID = :cusId and q.CREATE_TIME>=:startTime and q.CREATE_TIME<=:endTime group by q.PRIORITY_ID "); } List dataList = baseDao.queryForList(builder.toString(), params); if (dataList != null && dataList.size() > 0) { Map dataMap = new HashMap(); Map tempMap = new HashMap(); List serieslist = new ArrayList(); for (Map data : dataList) { dataMap.put(data.get("PRIORITY_ID").toString(), data); } List catelist = dataDictionaryService.getDataDictionaryByCategoryKey(Constants.EVENT_PRI); for (Map cate : catelist) { List tempList = new ArrayList(); tempList.add(cate.get("DATAVALUE").toString()); if (dataMap.get(cate.get("DATAKEY").toString()) != null) { tempList.add(((Map) dataMap.get(cate.get("DATAKEY").toString())).get("NUM")); } else { tempList.add(0); } serieslist.add(tempList); } chartMap.put("seriesData", serieslist); } return chartMap; } @Override public Map getLastMonthZcywServer(Map params) { Map chartMap = new HashMap(); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay, -30, 8); String userId = params.get("userId"); params.put("startTime", startDay + "000000"); params.put("endTime", endDay + "600000"); StringBuilder builder = new StringBuilder(); if (StringUtil.isBlank(userId)) { builder.append(" select count(ID) NUM,THIRD_CATEGORY_ID SERVER_ID from SC_WORKFLOW_INCIDENT_LOCAL where CUSTOMER_ID = :cusId "); builder.append(" and CREATE_TIME>=:startTime and CREATE_TIME<=:endTime group by THIRD_CATEGORY_ID "); } else { builder.append(" select count(q.ID) NUM,q.THIRD_CATEGORY_ID SERVER_ID from SC_WORKFLOW_INCIDENT_LOCAL q,WORKFLOW_BASE b "); builder.append(" where b.ID = q.FLOW_ID and EXISTS ( "); builder.append(" select FLOWID from workflow_node n where b.ID = n.FLOWID and n.CURRENT_DEALER_ID = :userId "); builder.append(" ) and q.CUSTOMER_ID = :cusId and q.CREATE_TIME>=:startTime and q.CREATE_TIME<=:endTime group by q.THIRD_CATEGORY_ID "); } List dataList = baseDao.queryForList(builder.toString(), params); if (dataList != null && dataList.size() > 0) { builder.setLength(0); builder.append(" SELECT C.ID SERVER_ID,C.CATEGORY_NAME SERVER_NAME FROM SC_SERVCE_CATEGORY C,SC_SERVCE_CATEGORY_CUSTOMER P "); builder.append(" WHERE C.ID = P.CATEGORY_ID and C.LEVEL = 3 and C.STATE=1 "); builder.append(" AND P.STATE = 1 AND P.CUSTOMER_ID = :cusId ORDER BY SERIAL ASC "); List categoriesList = baseDao.queryForList(builder.toString(), params); List categories = new ArrayList(); Map dataMap = new HashMap(); Map tempMap = new HashMap(); List series = new ArrayList(); tempMap.put("name", "数量"); List tempList = new ArrayList(); for (Map data : dataList) { dataMap.put(data.get("SERVER_ID").toString(), data); } for (Map cate : categoriesList) { categories.add(cate.get("SERVER_NAME").toString()); if (dataMap.get(cate.get("SERVER_ID").toString()) != null) { tempList.add(((Map) dataMap.get(cate.get("SERVER_ID").toString())).get("NUM")); } else { tempList.add(0); } } tempMap.put("data", tempList); series.add(tempMap); chartMap.put("categories", categories); chartMap.put("series", series); } return chartMap; } @Override public Map getZcywNum(Map params) { //驻场事件待响应 int dxycount = 0; //驻场事件已超时 int ycscount = 0; //驻场事件进行中 int jxzcount = 0; params.put("state", "1"); dxycount = getOrederZcywNumDxy(params); params.put("state", "2"); jxzcount = getOrederZcywNumJxz(params); params.put("state", "3"); ycscount = getOrederZcywTimeoutCount(params); Map map = new HashMap(); map.put("dxycount", dxycount); map.put("jxzcount", jxzcount); map.put("ycscount", ycscount); return map; } @Override public int getOrederZcywNumDxy(Map params){ StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT COUNT(D.ID) FROM (SELECT B.ID FROM SC_WORKFLOW_INCIDENT_LOCAL B,WORKFLOW_BASE WB , WORKFLOW_NODE C "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND C.FLOWID = WB.ID AND C.FLOWSTATE = 1 AND C.CURRENT_DEALER_ID IS NOT NULL AND WB.BUSINESSTYPE = :businessType "); String customerId=ConvertUtil.obj2StrBlank(params.get("customerId")); if(StringUtil.notEmpty(customerId)){ sqlpart.append(" AND B.CUSTOMER_ID=:customerId "); } sql.append(sqlpart); sql.append(" GROUP BY B.ID ) D"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); return baseDao.queryForInteger(sql.toString(), params); } @Override public int getOrederZcywNumJxz(Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT COUNT(D.ID) FROM (SELECT B.ID FROM SC_WORKFLOW_INCIDENT_LOCAL B,WORKFLOW_BASE WB "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType AND WB.WFSTATE = 1 "); String customerId=ConvertUtil.obj2StrBlank(params.get("customerId")); if(StringUtil.notEmpty(customerId)){ sqlpart.append(" AND B.CUSTOMER_ID=:customerId "); } sql.append(sqlpart); sql.append(" GROUP BY B.ID ) D"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); return baseDao.queryForInteger(sql.toString(), params); } @Override public int getOrederZcywTimeoutCount(Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT COUNT(D.ID) FROM (SELECT B.ID FROM SC_WORKFLOW_INCIDENT_LOCAL B,WORKFLOW_BASE WB "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType AND WB.WFSTATE = 1 AND (B.ANSWER_TIMEOUT = 1 OR B.DEAL_TIMEOUT = 1 ) "); params.put("current_dealer_id", params.get("userId")); String customerId=ConvertUtil.obj2StrBlank(params.get("customerId")); if(StringUtil.notEmpty(customerId)){ sqlpart.append(" AND B.CUSTOMER_ID=:customerId "); } sql.append(sqlpart); sql.append(" GROUP BY B.ID ) D"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); return baseDao.queryForInteger(sql.toString(), params); } @Override public PageInfo zcywNodeData(PageInfo pageInfo, Map params) { StringBuilder builder = new StringBuilder(); String state=params.get("state"); builder.append("SELECT WB.ID,WB.ORDER_CODE,WB.WFNAME,WB.BUSINESSTYPE,WB.CREATERNAME,WB.CREATETIME,WB.WFNOTE, "); 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(state.equals("1")){ builder.append(",WORKFLOW_NODE N "); } builder.append(" WHERE WB.BUSINESS_ID = B.ID "); if(state.equals("1")){ builder.append(" AND N.FLOWID=WB.ID AND N.FLOWSTATE=1 "); } builder.append(" AND WB.BUSINESSTYPE = :businessType "); params.put("businessType", ConvertUtil.obj2StrBlank( Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); if(state.equals("0")){ builder.append(" and (B.ANSWER_TIMEOUT=1 or B.DEAL_TIMEOUT=1) and WB.WFSTATE=1 "); }else if(state.equals("2")){ builder.append(" and WB.WFSTATE=1 "); }else if(state.equals("3")){ builder.append(" and WB.WFSTATE=2 "); }else if(state.equals("4")){ builder.append(" and WB.WFSTATE=4 "); } builder = getZcSql(builder,params); if(state.equals("1")){ builder.append(" group by B.ID "); } builder.append( " ORDER BY WB.CREATETIME DESC "); return baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params); } @Override public int zcywNodeCount(Map params) { StringBuilder builder = new StringBuilder(); String state=params.get("state"); if(state.equals("1")){ builder.append("select count(d.num) from (SELECT COUNT(WB.ID) num "); builder.append("FROM WORKFLOW_BASE WB,SC_WORKFLOW_INCIDENT_LOCAL B,WORKFLOW_NODE N WHERE WB.BUSINESS_ID = B.ID AND N.FLOWID=WB.ID AND WB.WFSTATE=1 AND N.FLOWSTATE=1 "); builder.append(" AND WB.BUSINESSTYPE = :businessType "); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); builder = getZcSql(builder,params); builder.append(" group by B.ID) d "); }else{ builder.append("SELECT COUNT(WB.ID) "); builder.append("FROM WORKFLOW_BASE WB,SC_WORKFLOW_INCIDENT_LOCAL B WHERE WB.BUSINESS_ID = B.ID "); builder.append(" AND WB.BUSINESSTYPE = :businessType "); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL)); if(state.equals("0")){ builder.append(" and (B.ANSWER_TIMEOUT=1 or B.DEAL_TIMEOUT=1) and WB.WFSTATE=1 "); }else if(state.equals("2")){ builder.append(" and WB.WFSTATE=1 "); }else if(state.equals("3")){ builder.append(" and WB.WFSTATE=2 "); }else if(state.equals("4")){ builder.append(" and WB.WFSTATE=4 "); } builder = getZcSql(builder,params); } return baseDao.queryForInteger(builder.toString(), params); } }