cy
2022-06-22 425675051e544cf29b2132615cfbf7a93dc5e51f
src/cn/ksource/web/facade/zc/ZcywFacadeImpl.java
@@ -1,37 +1,13 @@
package cn.ksource.web.facade.zc;
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.CUSTOMER_CONTACTS;
import cn.ksource.beans.GG_MESSAGE;
import cn.ksource.beans.GG_RECORD;
import cn.ksource.beans.SC_WORKFLOW_INCIDENT;
import cn.ksource.beans.SC_WORKFLOW_INCIDENT_LOCAL;
import cn.ksource.beans.WORKFLOW_BASE;
import cn.ksource.beans.WORKFLOW_NODE;
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.AjaxUtil;
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.util.*;
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.core.workflow.*;
import cn.ksource.web.Constants;
import cn.ksource.web.controller.wechat.util.WechatConstants;
import cn.ksource.web.facade.incident.IncidentFacade;
@@ -42,39 +18,47 @@
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
@@ -82,10 +66,10 @@
   @Override
   public int queryMyZcywCount(Map<String, String> params) {
      StringBuilder builder = new StringBuilder();
      params.put("ysc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE));
      /**
       * 查询逻辑
       * 1.如果节点状态选择为全部,则查询节点表中处理人是我的,或者处理角色是我的并且没有分配处理人的,
@@ -94,13 +78,13 @@
       * 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.*,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 ");
            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")){
@@ -118,7 +102,7 @@
            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.*,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");
            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")){
@@ -136,7 +120,7 @@
            params.put("jdjxz", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_DOING));
         }else {
            builder.append(" SELECT DISTINCT D.* FROM ( ");
            builder.append(" SELECT B.*,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 ");
            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")){
@@ -156,7 +140,7 @@
      } else {
         builder.append(" SELECT DISTINCT D.* FROM ( ");
         //查询处理人是我的
         builder.append(" SELECT B.*,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 ");
         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")){
@@ -172,29 +156,29 @@
         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<String, String> params) {
      StringBuilder builder = new StringBuilder();
      params.put("ysc", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE));
      /**
       * 查询逻辑
       * 1.如果节点状态选择为全部,则查询节点表中处理人是我的,或者处理角色是我的并且没有分配处理人的,
@@ -203,7 +187,7 @@
       * 3.如果节点状态选择为进行中,则查询节点表中处理人是我的 (不需要过滤,因为一个工单进行中节点,只会有一个)
       * 4.如果节点状态查询未已处理,则查询节点表中处理人是我的,需要过滤(因为一个节点一个人可以处理多次,通过节点表作为主表查询出来的工单会有重复)
       */
      String flowstate = params.get("flowstate");
      if(StringUtil.notEmpty(flowstate)) {
         if(flowstate.equals("1")) {
@@ -222,7 +206,7 @@
                  }
               }
            }
            builder.append(")D");
            builder.append(" WHERE D.FLOWSTATE = :jddcl ");
            params.put("jddcl", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_NODE_FLOWSTATE_UNDISPOSE));
@@ -283,10 +267,10 @@
         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)){
@@ -297,7 +281,7 @@
      }
      int begin = Integer.valueOf(currPage);
      int size = Integer.valueOf(pageSize);
      if(!StringUtil.notEmpty(flowstate)) {
         builder.append( " ORDER BY D.CREATETIME DESC" );
         List<Map> result = baseDao.queryForList(builder.toString(),params);
@@ -320,14 +304,14 @@
                  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;
@@ -344,7 +328,7 @@
         return info;
      }
   }
   public StringBuilder getMyZcSql(StringBuilder builder,Map<String, String> params){
      String status = params.get("status");
      if(StringUtil.notEmpty(status)) {
@@ -352,32 +336,32 @@
            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(",");
@@ -395,9 +379,9 @@
            builder.append(")");
         }
      }
      String dg = params.get("dg");
      if(StringUtil.notEmpty(dg)) {
         String[] dgs = dg.split(",");
@@ -415,8 +399,8 @@
            builder.append(")");
         }
      }
      String type = params.get("type");
      if(StringUtil.notEmpty(type)) {
         String[] types = type.split(",");
@@ -434,8 +418,8 @@
            builder.append(")");
         }
      }
      String sl = params.get("sl");
      if(StringUtil.notEmpty(sl)) {
         String[] sls = sl.split(",");
@@ -458,32 +442,32 @@
   @Override
   public int zcywCountForFwt(Map<String, String> 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<String, String> 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<String, String> params){
@@ -491,20 +475,20 @@
      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 ");
@@ -512,7 +496,7 @@
      }
      return builder;
   }
   @Override
   public Map queryZcMsg(HttpServletRequest request) {
      Map result = new HashMap();
@@ -520,10 +504,10 @@
      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"));
@@ -545,8 +529,8 @@
            }
         }
      }
      result.put("customerId", customerId);
      result.put("customerName", customerName);
      result.put("subCustomerId", subCustomerId);
@@ -558,20 +542,20 @@
   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();
@@ -590,11 +574,11 @@
         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;
@@ -606,47 +590,47 @@
               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);
@@ -655,13 +639,13 @@
      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")) {
         //保存联系人的信息
@@ -671,8 +655,8 @@
         .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();
@@ -687,29 +671,29 @@
      .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+"创建了驻场运维事件");
@@ -722,19 +706,19 @@
      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{
@@ -742,23 +726,23 @@
      }
      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);
@@ -771,77 +755,77 @@
      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+"解决了事件");
@@ -849,36 +833,36 @@
      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;
   }
   /**
    * 执行关闭事件操作
    */
@@ -887,17 +871,17 @@
      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);
@@ -906,20 +890,20 @@
      }
      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);
@@ -932,70 +916,70 @@
      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();
@@ -1013,7 +997,7 @@
   public List<Map> 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<Map> lzs = baseDao.queryForList(selectSql,new SqlParameter("flowId",flowId));
      //格式化响应时间为分钟,格式化处理时间为小时
      if(null!=lzs && lzs.size()>0) {
         for(Map lz : lzs) {
@@ -1022,16 +1006,16 @@
               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;
   }
@@ -1050,8 +1034,8 @@
      return baseMap;
   }
   @Override
   public List queryDealRecord(String orderId) {
      List<Map> list = recordService.queryRecord(orderId);
@@ -1066,7 +1050,7 @@
                  List cacheList = new ArrayList();
                  if(cacheFile.containsKey(extend)) {
                     cacheList = (List)cacheFile.get(extend);
                  }
                  }
                  cacheList.add(file);
                  cacheFile.put(extend, cacheList);
               }
@@ -1081,8 +1065,8 @@
            }
         }
      }
      return list;
   }
@@ -1118,7 +1102,7 @@
      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();
@@ -1131,7 +1115,7 @@
      builder.append(" ORDER BY CREATE_TIME DESC ");
      return baseDao.queryForList(builder.toString(),paramMap);
   }
   /**
    * 执行工单确认操作
    */
@@ -1139,65 +1123,65 @@
   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) {
@@ -1235,7 +1219,7 @@
         third_category_id = serivceListIds[2];
         third_category_name = serivceLists[2];
      }
      //响应时间为分钟
      Long requestAnswerTime = incident.getRequest_answer_time();
      //处理时间为小时
@@ -1243,17 +1227,17 @@
      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"));
@@ -1266,7 +1250,7 @@
            incident.setAnswer_timeout(1);
         }
      }
      //判断当前是否已经处理超时
      String resolve_time = ConvertUtil.obj2StrBlank(m.get("RESOLVE_TIME"));
      if(StringUtil.notEmpty(resolve_time)) {
@@ -1278,18 +1262,18 @@
            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";
   }
   /**
    * 执行升级为事件操作
    */
@@ -1304,65 +1288,65 @@
            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<Map> dealerList = new ArrayList<Map>();
         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;
         //发送消息
@@ -1378,7 +1362,7 @@
         .setOrder_code(order_code)
         .setType(Constants.GG_MESSAGE_TYPE_SJGL);
         messageFacade.doSendMessage(message, dealerList);
         //添加关联工单
         List<Map> orders = orderService.queryLinkOrders(flowId);
         StringBuilder builder = new StringBuilder();
@@ -1392,8 +1376,8 @@
            String[] orderId = builder.toString().split(",");
            orderService.saveLinkOrders(base.getId(),orderId,request);
         }
         //添加关联设备
         String selectDeviceSql = "SELECT * FROM CMDB_CI_REF_ORDER WHERE FLOW_ID = :flowId";
         List<Map> devices = baseDao.queryForList(selectDeviceSql,new SqlParameter("flowId",flowId));
@@ -1409,9 +1393,9 @@
            }
            baseDao.executeBatch(insertSql,list);
         }
         //查询文档附件
         List<Map> files = fileService.getFileList(id,1);
         if(null!=files && files.size()>0) {
@@ -1425,7 +1409,7 @@
               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"));
@@ -1437,40 +1421,40 @@
            }
            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+"升级了事件");
@@ -1478,16 +1462,16 @@
         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
@@ -1505,18 +1489,18 @@
      .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<Map> orders = queryOrders(flowId);
         List<Map> devices = incidentFacade.queryDevices(flowId);
         List<Map> files = queryFiles(flowId);
         incident.put("orders", orders);
         incident.put("devices", devices);
         incident.put("files", files);
@@ -1536,35 +1520,35 @@
      }
      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);
@@ -1573,32 +1557,32 @@
         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);
@@ -1607,7 +1591,7 @@
         }
         String userId = ConvertUtil.obj2StrBlank(user.get("ID"));
         String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM"));
         String flowId = base.getId();
         //增加事件处理记录
         GG_RECORD record = new GG_RECORD();
@@ -1616,11 +1600,11 @@
         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();
@@ -1634,10 +1618,10 @@
         .setWx_url(wxUrl)
         .setType(Constants.GG_MESSAGE_TYPE_XCYW);
         messageFacade.doSendMessage(message, dealerList);
         resultMap.put("result", 1);
      }
      SysInfoMsg msg = new SysInfoMsg("2",dealUserName,"服务受理");
@@ -1678,7 +1662,7 @@
    public int queryZcywTimeoutCount(Map<String, String> params) {
      StringBuilder sql = new StringBuilder();
        StringBuilder sqlpart = new StringBuilder();
        sql.append("SELECT COUNT(D.ID) FROM (SELECT B.* FROM SC_WORKFLOW_INCIDENT_LOCAL B,WORKFLOW_BASE WB,WORKFLOW_NODE N   ");
        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);
@@ -1746,12 +1730,12 @@
        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 CREATEDAY ");
            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 CREATEDAY ");
            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<Map> dataList = baseDao.queryForList(builder.toString(), params);
@@ -1832,7 +1816,7 @@
        }
        return chartMap;
    }
   @Override
    public Map getLastMonthZcywPri(Map<String, String> params) {
        Map chartMap = new HashMap();
@@ -1888,12 +1872,12 @@
        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 SERVER_ID ");
            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 SERVER_ID ");
            builder.append(" ) and q.CUSTOMER_ID = :cusId and q.CREATE_TIME>=:startTime and q.CREATE_TIME<=:endTime  group by q.THIRD_CATEGORY_ID ");
        }
        List<Map> dataList = baseDao.queryForList(builder.toString(), params);
@@ -1952,7 +1936,7 @@
   public int getOrederZcywNumDxy(Map params){
       StringBuilder sql = new StringBuilder();
           StringBuilder sqlpart = new StringBuilder();
           sql.append("SELECT COUNT(D.ID) FROM (SELECT B.* FROM SC_WORKFLOW_INCIDENT_LOCAL B,WORKFLOW_BASE WB , WORKFLOW_NODE C   ");
           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)){
@@ -1968,7 +1952,7 @@
    public int getOrederZcywNumJxz(Map params) {
        StringBuilder sql = new StringBuilder();
        StringBuilder sqlpart = new StringBuilder();
        sql.append("SELECT COUNT(D.ID) FROM (SELECT B.* FROM SC_WORKFLOW_INCIDENT_LOCAL B,WORKFLOW_BASE WB   ");
        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)){
@@ -1985,7 +1969,7 @@
    public int getOrederZcywTimeoutCount(Map<String, String> params) {
        StringBuilder sql = new StringBuilder();
        StringBuilder sqlpart = new StringBuilder();
        sql.append("SELECT COUNT(D.ID) FROM (SELECT B.* FROM SC_WORKFLOW_INCIDENT_LOCAL B,WORKFLOW_BASE WB   ");
        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"));
@@ -2003,7 +1987,7 @@
   public PageInfo zcywNodeData(PageInfo pageInfo, Map<String, String> 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  ");
@@ -2030,8 +2014,8 @@
         builder.append(" group by B.ID  ");
      }
        builder.append( " ORDER BY WB.CREATETIME DESC ");
      return baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params);
   }
@@ -2044,11 +2028,11 @@
         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 ");
@@ -2061,10 +2045,10 @@
            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);
   }
}