package cn.ksource.web.facade.wechat.ewyw; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.ksource.beans.CUSTOMER_CONTACTS; import cn.ksource.beans.GG_MESSAGE; import cn.ksource.beans.GG_RECORD; import cn.ksource.beans.HANG_UP_INFO; import cn.ksource.beans.ORDER_ASSIGN_TEMP; import cn.ksource.beans.QUESTION_ZD_HISTORY; import cn.ksource.beans.SC_WORKFLOW_INCIDENT; import cn.ksource.beans.SC_WORKFLOW_INCIDENT_LOCAL; import cn.ksource.beans.SC_WORKFLOW_QUESTION; import cn.ksource.beans.WORKFLOW_BASE; import cn.ksource.beans.WORKFLOW_NODE; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.DateUtil; import cn.ksource.core.util.JsonUtil; import cn.ksource.core.util.NumberUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.core.web.SysInfoMsg; import cn.ksource.core.web.WebUtil; import cn.ksource.core.workflow.NodeAnswerEntity; import cn.ksource.core.workflow.NodeDealEntity; import cn.ksource.core.workflow.NodeFinishEntity; import cn.ksource.core.workflow.WorkflowBusinessService; import cn.ksource.core.workflow.WorkflowCoreService; import cn.ksource.web.Constants; import cn.ksource.web.controller.wechat.util.WechatConstants; import cn.ksource.web.facade.incident.IncidentFacade; import cn.ksource.web.facade.message.MessageFacade; import cn.ksource.web.facade.question.QuestionFacade; 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; @Service("ewQuestionFacade") public class EwQuestionFacadeImpl implements EwQuestionFacade { @Autowired private BaseDao baseDao; @Autowired private WorkflowCoreService workflowCoreService; @Autowired private DataDictionaryService dataDictionaryService; @Autowired private IncidentFacade incidentFacade; @Autowired private FileService fileService; @Autowired private WorkOrderCodeService workOrderCodeService; @Autowired private WorkflowBusinessService workflowBusinessService; @Autowired private MessageFacade messageFacade; @Autowired private RecordService recordService; @Autowired private OrderService orderService; @Autowired private DeviceService deviceService; @Autowired private QuestionFacade questionFacade; /** * 执行问题工单响应 */ @Override public String doOrderConfirm(Map params) { WORKFLOW_BASE base = new WORKFLOW_BASE(params.get("flowId")).getInstanceById(); WORKFLOW_NODE node = new WORKFLOW_NODE(params.get("nodeId")).getInstanceById(); NodeAnswerEntity entity = new NodeAnswerEntity(); entity.setUser_id(params.get("ID")); entity.setUser_name(params.get("ZSXM")); boolean result = workflowCoreService.answerNode(base, node, entity); if(!result) { return "2"; } //判断是否是第一次响应,如果是第一次响应的话,则更新事件表中实际响应时间(第一次响应时间) String selectSql = "SELECT SHOULI_TIME,CREATE_TIME FROM SC_WORKFLOW_QUESTION WHERE ID = :questionid"; Map map = baseDao.queryForMap(selectSql,new SqlParameter("questionid",base.getBusiness_id())); String shouli_time = ConvertUtil.obj2StrBlank(map.get("SHOULI_TIME")); long create_time = ConvertUtil.obj2Long(map.get("CREATE_TIME")); Map paramMap = new HashMap(); if(!StringUtil.notEmpty(shouli_time)) { StringBuilder builder = new StringBuilder("UPDATE SC_WORKFLOW_QUESTION SET "); long answer_time = DateUtil.getCurrentDate14(); builder.append(" SHOULI_USERID = :shouli_userid,SHOULI_USERNAME = :shouli_username,SHOULI_TIME = :answerTime,SHOULI_USE_TIME = :answer_user_time "); paramMap.put("answerTime",answer_time); paramMap.put("shouli_userid",params.get("ID")); paramMap.put("shouli_username",params.get("ZSXM")); //计算第一次响应时间和创建问题的时间差 将时间差转化为分钟 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 = :questionid"); paramMap.put("questionid", base.getBusiness_id()); baseDao.execute(builder.toString(), paramMap); } return "1"; } @Override public Map queryQuestionReport(String orderId) { String flowId = new String(); if(StringUtil.notEmpty(orderId)) { SC_WORKFLOW_QUESTION incident = new SC_WORKFLOW_QUESTION(orderId).getInstanceById(); flowId = incident.getFlow_id(); } Map param =new HashMap(); param.put("questionId", orderId); param.put("flowId", flowId); StringBuilder sql=new StringBuilder(); sql.append("SELECT c.*,u.SJHM FROM SC_WORKFLOW_QUESTION c,gg_user u WHERE c.CREATE_USER_ID=u.id AND c.ID=:questionId "); Map questionMap=baseDao.queryForMap(sql.toString(), param); questionMap.put("STATE", Constants.getmapSC_WORKFLOW_QUESTION_STATE_Label(questionMap.get("STATE").toString())); //关联工单 List orderList=orderService.queryLinkOrders(flowId); questionMap.put("orderList", orderList); //关联设备 sql.setLength(0); List deviceList = incidentFacade.queryDevices(flowId); questionMap.put("ciList", deviceList); //关联文档 List fileList=fileService.getFileList(flowId); questionMap.put("fileList", fileList); return questionMap; } @Override public Map gobackNodeSubmit(Map params) { String flowId = params.get("flowId"); String nodeId = params.get("nodeId"); String orderId = params.get("orderId"); String userId = params.get("userId"); String userName = params.get("userName"); WORKFLOW_BASE base = new WORKFLOW_BASE(flowId).getInstanceById(); NodeFinishEntity finishEntity = new NodeFinishEntity(); finishEntity.setDeal_result(3); finishEntity.setDeal_note_title(params.get("userName")+"回退了节点"); finishEntity.setDeal_note(params.get("backReason")); WORKFLOW_NODE node = new WORKFLOW_NODE(nodeId).getInstanceById(); WORKFLOW_NODE beforenode = new WORKFLOW_NODE(node.getSource_node_instance_id()).getInstanceById(); String node_template_id = beforenode.getNode_template_id(); Map nodeMap = questionFacade.getBeforeNodeMsg(nodeId); List nodesList = baseDao.queryForList("SELECT * FROM WORKFLOW_NODE WHERE FLOWID = :flowid AND SAME_NODE_KEY = :same_node_key ",new SqlParameter("flowid",flowId).addValue("same_node_key", node.getSame_node_key())); //回退时,关闭所有节点 for(Map nodes:nodesList){ WORKFLOW_NODE nodeid = new WORKFLOW_NODE(ConvertUtil.obj2StrBlank(nodes.get("ID"))); nodeid.setDealtime(ConvertUtil.obj2Long(nodes.get("DEALTIME"))).setAnswer_time(ConvertUtil.obj2Long(nodes.get("ANSWER_TIME"))); workflowCoreService.finishNode(base,nodeid , finishEntity); } String state = ""; if(node_template_id.equals(Constants.WTSL)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_SL; } else if(node_template_id.equals(Constants.WTSH)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_SH; } else if(node_template_id.equals(Constants.WTZD)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_WTZD; } else if(node_template_id.equals(Constants.WTFASP)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_FASP; } else if(node_template_id.equals(Constants.WTFASS)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_FASS; } else if(node_template_id.equals(Constants.WTHG)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_HG; }else{ state = Constants.SC_WORKFLOW_QUESTION_STATE_YDJ; } //更新问题状态 String updateSql = "UPDATE SC_WORKFLOW_QUESTION SET STATE = :state WHERE ID = :questionId "; baseDao.execute(updateSql, new SqlParameter("state",state).addValue("questionId", orderId)); List list = new ArrayList(); Map map = new HashMap(); map.put("USER_ID", nodeMap.get("CURRENT_DEALER_ID")); map.put("USER_NAME", nodeMap.get("CURRENT_DEALER_NAME")); map.put("IS_ADMIN", "1"); list.add(map); NodeDealEntity entity = new NodeDealEntity(); entity.setBefore_Dealer_type(2); entity.setDealer_type(2); entity.setDealerList(list); entity.setFlow_type(2); entity.setSource_node_instance_id(node.getId()); //回退到上一节点 workflowCoreService.toNode(base, ConvertUtil.obj2Str(nodeMap.get("NODE_TEMPLATE_ID")), entity); String wxUrl = WechatConstants.ORDER_INCIDENT_DETAIL_ADDRESS+"?orderId="+base.getBusiness_id()+"&orderType="+Constants.WORKFLOW_BASE_BUSINESS_TYPE_QUESTION; //发送消息 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.QUESTION_WEB_MSG_URL+"?flowId="+base.getId()+"&orderId="+base.getBusiness_id()) .setWx_url(wxUrl) .setOrder_code(base.getOrder_code()) .setType(Constants.GG_MESSAGE_TYPE_WTGL); messageFacade.doSendMessage(message, list); Map resultMap = new HashMap(); SysInfoMsg msg = new SysInfoMsg("2",ConvertUtil.obj2Str(nodeMap.get("CURRENT_DEALER_NAME")),Constants.questionNode.get(ConvertUtil.obj2Str(nodeMap.get("NODE_TEMPLATE_ID")))); resultMap.put("msg", msg); return resultMap; } @Override public Map saveQuestion(HttpServletRequest request, SC_WORKFLOW_QUESTION sc_workflow_question) { String changeId = request.getParameter("changeId"); String bustype = request.getParameter("bustype"); Map resultMap = new HashMap(); resultMap.put("result", 2); String sh = request.getParameter("sh"); String flowId = request.getParameter("flowId"); String nodeId = request.getParameter("nodeId"); String bz = request.getParameter("bz"); Map user = WebUtil.getEngineerMsg(request); String userId = ConvertUtil.obj2StrBlank(user.get("ID")); String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); String customerId = sc_workflow_question.getCustomer_id(); String customerName = sc_workflow_question.getCustomer_name(); String subCustomerId = ""; String subCustomerName = ""; if(!StringUtil.isEmpty(customerId)){ String[] subs = customerId.split("--"); String[] subNames = customerName.split("--"); if(subs.length > 1){ customerId = subs[0]; subCustomerId = subs[1]; customerName = subNames[0]; subCustomerName = subNames[1]; }else{ subCustomerId = subs[0]; subCustomerName = subNames[0]; } } String want_deal_time = request.getParameter("want_deal_time"); want_deal_time = want_deal_time.replace("-", "").replace(" ", "").replace(":", ""); sc_workflow_question.setWant_deal_time(ConvertUtil.obj2Long(want_deal_time+"00")); sc_workflow_question.setCustomer_id(customerId).setSub_customer_id(subCustomerId).setSub_customer_name(subCustomerName); String source_name = ConvertUtil.obj2StrBlank(dataDictionaryService.getDataDictionaryByKey(sc_workflow_question.getSource_id()).get("DATAVALUE")); sc_workflow_question.setSource_name(source_name); String priority_name = ConvertUtil.obj2StrBlank(dataDictionaryService.getDataDictionaryByKey(sc_workflow_question.getPriority_id()).get("DATAVALUE")); sc_workflow_question.setPriority_name(priority_name); String influence_name = ConvertUtil.obj2StrBlank(dataDictionaryService.getDataDictionaryByKey(sc_workflow_question.getInfluence_id()).get("DATAVALUE")); sc_workflow_question.setInfluence_name(influence_name); 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 selectUser = request.getParameter("selectUser"); if(StringUtil.notEmpty(selectUser)) { String[] userMsg = selectUser.split("&"); String state = Constants.SC_WORKFLOW_QUESTION_STATE_SL; String dealer_type = "1"; String dealUserId = userId; String dealUserName = userName; String nextnodeid = ""; if(userMsg.length==4) { dealer_type = userMsg[0]; nextnodeid = userMsg[1]; dealUserId = userMsg[2]; dealUserName = userMsg[3]; if(nextnodeid.equals(Constants.WTSL)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_SL; } else if(nextnodeid.equals(Constants.WTSH)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_SH; } else if(nextnodeid.equals(Constants.WTZD)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_WTZD; } else if(nextnodeid.equals(Constants.WTFASP)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_FASP; } else if(nextnodeid.equals(Constants.WTFASS)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_FASS; } else if(nextnodeid.equals(Constants.WTHG)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_HG; }else{ state = Constants.SC_WORKFLOW_QUESTION_STATE_YDJ; } String sla_id = request.getParameter("sla_id"); String sla_name = request.getParameter("sla_name"); String order_code = workOrderCodeService.getQuestionOrderCode(); long createTime = DateUtil.getCurrentDate14(); sc_workflow_question.setPri_level_id(sla_id).setPri_level(sla_name) .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); if(StringUtil.isBlank(sc_workflow_question.getId())){ sc_workflow_question.setCreate_user_id(userId).setCreate_user_name(userName).setCreate_time(createTime); sc_workflow_question.setOrder_code(order_code); } sc_workflow_question.setState(ConvertUtil.obj2Integer(state)).setFlow_name(sc_workflow_question.getName()).insertOrUpdate(); //获取当前所处的节点 Map flowMsg = questionFacade.getFlowMsg(flowId,userId); String nodeid = ConvertUtil.obj2StrBlank(flowMsg.get("ID")); String nodeName = ConvertUtil.obj2StrBlank(flowMsg.get("NODENAME")); if("1".equals(sh)){ //增加问题处理记录 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); record.setNode_id(nodeid).setNode_name(nodeName); recordService.addRecord(record); } if(!"1".equals(sh)){ WORKFLOW_BASE base = new WORKFLOW_BASE(); if(!"2".equals(sh)){ //发起流程 base = workflowBusinessService.startQuestionWorkflow(sc_workflow_question.getId(),bz); //增加问题处理记录 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(base.getId()); record.setNode_id(nodeid).setNode_name(nodeName); recordService.addRecord(record); flowId = base.getId(); }else{ base = new WORKFLOW_BASE(flowId).getInstanceById(); NodeFinishEntity finishEntity = new NodeFinishEntity(); finishEntity.setDeal_result(1); finishEntity.setDeal_note_title(userName+"完成了节点"); finishEntity.setDeal_note(userName+"完成了节点"); WORKFLOW_NODE node = new WORKFLOW_NODE(nodeId).getInstanceById(); //关闭当前节点 workflowCoreService.finishNode(base, node, finishEntity); } NodeDealEntity entity = new NodeDealEntity(); List userMap = new ArrayList(); if("2".equals(sh)){ dealer_type = "2"; entity.setBefore_Dealer_type(2); WORKFLOW_NODE node = new WORKFLOW_NODE(nodeId).getInstanceById(); WORKFLOW_NODE beforenode = new WORKFLOW_NODE(node.getSource_node_instance_id()).getInstanceById(); String node_template_id = beforenode.getNode_template_id(); nextnodeid = node_template_id; String sql = "SELECT * FROM WORKFLOW_NODE WHERE FLOWID = :flowid AND NODE_TEMPLATE_ID = :node_template_id AND IS_ADMIN = :is_admin "; Map param = new HashMap(); param.put("flowid", beforenode.getFlowid()); param.put("node_template_id", node_template_id); param.put("is_admin", "1"); Map nodeMap = baseDao.queryForMap(sql, param); Map map = new HashMap(); map.put("USER_ID", nodeMap.get("CURRENT_DEALER_ID")); map.put("USER_NAME", nodeMap.get("CURRENT_DEALER_NAME")); map.put("IS_ADMIN", "1"); userMap.add(map); entity.setDealerList(userMap); dealUserName = ConvertUtil.obj2StrBlank(nodeMap.get("CURRENT_DEALER_NAME")); }else{ dealer_type = getDealUser(entity,flowId,dealer_type,userMap,dealUserId,dealUserName); } workflowCoreService.toNode(base,nextnodeid , 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_question.getCustomer_id()) .setContact_name(sc_workflow_question.getContact_name()).setContacts_type(sc_workflow_question.getContact_phone()).setYwks(sc_workflow_question.getKeshi()) .setIs_satis(0).setState(1).setIsemail(1).setIsphone(1).setAllow_login(2).setSub_customer_id(sc_workflow_question.getSub_customer_id()).setSub_customer_name(sc_workflow_question.getSub_customer_name()); project_contacts.insert(); } String wxUrl = WechatConstants.ORDER_INCIDENT_DETAIL_ADDRESS+"?nodeId="+base.getCurrent_node_id()+"&orderId="+base.getBusiness_id()+"&orderType="+Constants.WORKFLOW_BASE_BUSINESS_TYPE_QUESTION; //发送消息 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.QUESTION_WEB_MSG_URL+"?flowId="+base.getId()+"&orderId="+base.getBusiness_id()) .setWx_url(wxUrl) .setOrder_code(sc_workflow_question.getOrder_code()) .setType(Constants.GG_MESSAGE_TYPE_WTGL); messageFacade.doSendMessage(message, userMap); resultMap.put("result", 1); } String usertype = "1"; if("1".equals(dealer_type)){ usertype = "2"; } Map paramuser = new HashMap(); paramuser.put("ID", StringUtil.getUUID()); paramuser.put("WORKFLOWID", sc_workflow_question.getFlow_id()); paramuser.put("PNAME", "处理人"); paramuser.put("PVALUE", usertype+"@"+selectUser); if(nextnodeid.equals(Constants.WTSL)) { baseDao.execute("INSERT INTO WORKFLOW_PARAMETER(ID,WORKFLOWID,PNAME,PVALUE) VALUES(:ID,:WORKFLOWID,:PNAME,:PVALUE)", paramuser); } else if(nextnodeid.equals(Constants.WTSH)) { baseDao.execute("UPDATE WORKFLOW_PARAMETER SET PVALUE=:PVALUE WHERE WORKFLOWID = :WORKFLOWID AND PNAME = :PNAME ", paramuser); } Map paramrecord = new HashMap(); paramrecord.put("flowId", flowId); //提交工单时添加关联工单 //先删除已存在的工单 baseDao.execute("DELETE FROM ORDER_REF_ORDER WHERE BUSINESS_ID = :flowId ", paramrecord); String[] orderId = request.getParameterValues("orderId"); orderService.saveLinkOrders(flowId,orderId,request); //提交工单时上传文档附件 //fileService.uploadFile(request,flowId,flowId,null,null,Constants.GG_FOLDERS_WTFOLDERS,Constants.FILE_STATE_SHTG,null); //提交工单时添加关联设备 //先删除已存在的设备 baseDao.execute("DELETE FROM CMDB_CI_REF_ORDER WHERE FLOW_ID = :flowId ", paramrecord); String[] deviceId = request.getParameterValues("deviceId"); deviceService.saveLinkDevices(flowId,deviceId); SysInfoMsg msg = new SysInfoMsg(dealer_type,dealUserName,Constants.questionNode.get(nextnodeid)); resultMap.put("msg", msg); } //事件转问题 if(!StringUtil.isEmpty(changeId)){ if(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT == ConvertUtil.obj2Int(bustype)){ SC_WORKFLOW_INCIDENT incident = new SC_WORKFLOW_INCIDENT(changeId); incident.setQuestionid(sc_workflow_question.getId()).update(); }else if(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT_LOCAL == ConvertUtil.obj2Int(bustype)){ SC_WORKFLOW_INCIDENT_LOCAL zcyw = new SC_WORKFLOW_INCIDENT_LOCAL(changeId); zcyw.setQuestionid(sc_workflow_question.getId()).update(); } } }else{ resultMap.put("nouser", 3); } return resultMap; } public String getDealUser(NodeDealEntity entity,String flowId,String dealer_type,List userMap,String dealUserId,String dealUserName) { Map param = new HashMap(); param.put("ID", StringUtil.getUUID()); param.put("WORKFLOWID", flowId); param.put("PNAME", "处理人"); entity.setDealer_type(3); if(dealer_type.equals("1")||dealer_type.equals("3")) { entity.setBefore_Dealer_type(2); String sqluser = "select * from gg_user "; List userList = baseDao.queryForList(sqluser); Map cacheuser = new HashMap(); for(Map users:userList){ cacheuser.put(users.get("ID"), users.get("ZSXM")); } String[] userList2 = dealUserId.split(","); String[] userNameList2 = dealUserName.split(","); for(int i=0;i dealerList = new ArrayList(); //问题回顾处理人 /*Map value = baseDao.queryForMap("SELECT * FROM WORKFLOW_PARAMETER WHERE WORKFLOWID = :ID ", new SqlParameter("ID",flowId)); String[] uservalues = ConvertUtil.obj2StrBlank(value.get("PVALUE")).split("@"); if(uservalues[0].equals("1")) { entity.setBefore_Dealer_type(2); String sqluser = "select * from gg_user "; List userList = baseDao.queryForList(sqluser); Map cacheuser = new HashMap(); for(Map users:userList){ cacheuser.put(users.get("ID"), users.get("ZSXM")); } String[] userIdList2 = uservalues[1].split("&"); String[] userList2 = userIdList2[0].split(","); for(int i=0;i xxList = baseDao.queryForList(sql,new SqlParameter("flowid",flowId).addValue("node_template_id",Constants.WTSL)); if(xxList!=null && xxList.size()>0){ entity.setRoleID(ConvertUtil.obj2StrBlank(xxList.get(0).get("CURRENT_DEALER_ID"))); entity.setRoleName(ConvertUtil.obj2StrBlank(xxList.get(0).get("CURRENT_DEALER_NAME"))); Map dealer = new HashMap(); dealer.put("USER_ID", ConvertUtil.obj2StrBlank(xxList.get(0).get("CURRENT_DEALER_ID"))); dealer.put("USER_NAME", ConvertUtil.obj2StrBlank(xxList.get(0).get("CURRENT_DEALER_NAME"))); dealer.put("IS_ADMIN", "1"); dealerList.add(dealer); dealUserName= ConvertUtil.obj2StrBlank(xxList.get(0).get("CURRENT_DEALER_NAME")); }else{ //如果问题受理阶段为空就发给创建人 String sql_cj="select * from WORKFLOW_node where FLOWID=:flowid and NODE_TEMPLATE_ID=:node_template_id order by CREATETIME desc limit 0,1"; List cjList = baseDao.queryForList(sql_cj,new SqlParameter("flowid",flowId).addValue("node_template_id",Constants.WTFQ)); entity.setRoleID(ConvertUtil.obj2StrBlank(cjList.get(0).get("CURRENT_DEALER_ID"))); entity.setRoleName(ConvertUtil.obj2StrBlank(cjList.get(0).get("CURRENT_DEALER_NAME"))); Map dealer = new HashMap(); dealer.put("USER_ID", ConvertUtil.obj2StrBlank(cjList.get(0).get("CURRENT_DEALER_ID"))); dealer.put("USER_NAME", ConvertUtil.obj2StrBlank(cjList.get(0).get("CURRENT_DEALER_NAME"))); dealer.put("IS_ADMIN", "1"); dealerList.add(dealer); dealUserName= ConvertUtil.obj2StrBlank(cjList.get(0).get("CURRENT_DEALER_NAME")); } entity.setDealerList(dealerList); NodeFinishEntity finishEntity = new NodeFinishEntity(); finishEntity.setDeal_result(1); finishEntity.setDeal_note_title("节点转至 :" + dealUserName); finishEntity.setDeal_note("实施结束"); WORKFLOW_NODE node = new WORKFLOW_NODE(nodeId).getInstanceById(); WORKFLOW_BASE base = new WORKFLOW_BASE(flowId).getInstanceById(); boolean canFinish = workflowCoreService.finishNode(base, node, finishEntity); if (canFinish) { workflowBusinessService.toNode(base, Constants.WTHG, entity); } //添加处理记录 //获取当前所处的节点 Map flowMsg = questionFacade.getFlowMsg(flowId,userId); String curnodeid = ConvertUtil.obj2StrBlank(flowMsg.get("ID")); String nodeName = ConvertUtil.obj2StrBlank(flowMsg.get("NODENAME")); //添加修改信息处理记录 String id = StringUtil.getUUID(); 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); record.setNode_id(curnodeid).setNode_name(nodeName); recordService.addRecord(record); //fileService.uploadFile(request, id, flowId, null, null); String wxUrl = WechatConstants.ORDER_INCIDENT_DETAIL_ADDRESS+"?nodeId="+base.getCurrent_node_id()+"&orderId="+base.getBusiness_id()+"&orderType="+Constants.WORKFLOW_BASE_BUSINESS_TYPE_QUESTION; //发送消息 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.QUESTION_WEB_MSG_URL+"?flowId="+base.getId()+"&orderId="+base.getBusiness_id()) .setWx_url(wxUrl) .setOrder_code(base.getOrder_code()) .setType(Constants.GG_MESSAGE_TYPE_WTGL); messageFacade.doSendMessage(message, dealerList); String type = ConvertUtil.obj2StrBlank(entity.getBefore_Dealer_type()); resultMap.put("result", 1); SysInfoMsg msg = new SysInfoMsg(type,dealUserName,Constants.questionNode.get(Constants.WTHG)); resultMap.put("msg", msg); return resultMap; } @Override public void updateResolveType(HttpServletRequest request) { String orderId = request.getParameter("orderId"); String flowId = request.getParameter("flowId"); String nodeId = request.getParameter("nodeId"); String solveWay = request.getParameter("solveWay"); String solveWayName = request.getParameter("solveWayName"); String repeat_order = request.getParameter("repeat_order"); //String content = request.getParameter("content"); String bz = request.getParameter("bz"); //修改问题信息的解决方式 SC_WORKFLOW_QUESTION question = new SC_WORKFLOW_QUESTION(); question.setResolve_type_id(solveWay).setResolve_type_name(solveWayName); if("WTCF".equals(solveWay)){ question.setRepeat_order(repeat_order).setRepeat_mark("1"); } question.setId(orderId).setState(ConvertUtil.obj2Integer(Constants.SC_WORKFLOW_QUESTION_STATE_YGB)).update(); //添加处理记录 Map user = WebUtil.getEngineerMsg(request); String createUserId = ConvertUtil.obj2StrBlank(user.get("ID")); String createUserName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); //获取当前所处的节点 Map flowMsg = questionFacade.getFlowMsg(flowId,createUserId); String nodeid = ConvertUtil.obj2StrBlank(flowMsg.get("ID")); String nodeName = ConvertUtil.obj2StrBlank(flowMsg.get("NODENAME")); //增加问题处理记录 GG_RECORD record = new GG_RECORD(); record.setDeal_content("关闭问题:"+createUserName+"关闭了问题"); record.setDeal_time(DateUtil.getCurrentDate14()); record.setDeal_user_id("1"); record.setDeal_user_name(createUserName); record.setBusiness_id(flowId); record.setNode_id(nodeid).setNode_name(nodeName); record = recordService.addRecord(record); //fileService.uploadFile(request, record.getId(), flowId, null, null); WORKFLOW_BASE base = new WORKFLOW_BASE(flowId).getInstanceById(); NodeFinishEntity finishEntity = new NodeFinishEntity(); finishEntity.setDeal_result(1); finishEntity.setDeal_note_title(createUserName+"结束节点"); finishEntity.setDeal_note(bz); WORKFLOW_NODE node = new WORKFLOW_NODE(nodeId).getInstanceById(); //关闭当前节点 workflowCoreService.finishNode(base, node, finishEntity); //关闭工单 workflowCoreService.closeWorkFlow(base); } @Override public void updateQuestiongq(HttpServletRequest request) { String orderId = request.getParameter("orderId"); String flowId = request.getParameter("flowId"); String nodeId = request.getParameter("nodeId"); String solveWay = request.getParameter("solveWay"); String solveWayName = request.getParameter("solveWayName"); String content = request.getParameter("content"); //添加处理记录 Map user = WebUtil.getEngineerMsg(request); String createUserId = ConvertUtil.obj2StrBlank(user.get("ID")); String createUserName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); String sql = "INSERT INTO HANG_UP_INFO(ID,BUS_ID,BUS_STATE,STATE,HANG_UP_USERID,HANG_UP_USERNAME,HANG_UP_TIME,HANG_UP_REASONID,HANG_UP_REASON,HANG_UP_NOTE) VALUES(:id,:bus_id,:bus_state,:state,:hang_up_userid,:hang_up_username,:hang_up_time,:hang_up_reasonid,:hang_up_reason,:hang_up_note)"; Map param = new HashMap(); param.put("id", StringUtil.getUUID()); param.put("bus_id", orderId); String bus_state = baseDao.queryForString("SELECT STATE FROM SC_WORKFLOW_QUESTION WHERE ID = :id ", new SqlParameter("id",orderId)); param.put("bus_state", bus_state); param.put("state", "1"); param.put("hang_up_userid", createUserId); param.put("hang_up_username", createUserName); param.put("hang_up_time", DateUtil.getCurrentDate14()); param.put("hang_up_reasonid", solveWay); param.put("hang_up_reason", solveWayName); param.put("hang_up_note", content); baseDao.execute(sql, param); //修改问题信息的状态 SC_WORKFLOW_QUESTION question = new SC_WORKFLOW_QUESTION(); question.setId(orderId).setState(ConvertUtil.obj2Integer(Constants.SC_WORKFLOW_QUESTION_STATE_GQ)).update(); //修改问题流程信息的状态 WORKFLOW_BASE base = new WORKFLOW_BASE(); base.setId(flowId).setWfstate(ConvertUtil.obj2Integer(Constants.WORKFLOW_BASE_WFSTATE_UP)).update(); //获取当前所处的节点 Map flowMsg = questionFacade.getFlowMsg(flowId,createUserId); String nodeid = ConvertUtil.obj2StrBlank(flowMsg.get("ID")); String nodeName = ConvertUtil.obj2StrBlank(flowMsg.get("NODENAME")); //增加问题处理记录 GG_RECORD record = new GG_RECORD(); record.setDeal_content("挂起问题:"+createUserName+"挂起了问题"); record.setDeal_time(DateUtil.getCurrentDate14()); record.setDeal_user_id("1"); record.setDeal_user_name(createUserName); record.setBusiness_id(flowId); record.setNode_id(nodeid).setNode_name(nodeName); record = recordService.addRecord(record); //fileService.uploadFile(request, record.getId(), flowId, null, null); } @Override public void updateZdMsg(HttpServletRequest request) { String flowId = request.getParameter("flowId"); String id = request.getParameter("id"); String type = request.getParameter("type"); String resolve = request.getParameter("resolve"); String suggest = request.getParameter("suggest"); String reason = request.getParameter("reason"); //判断请求是否来自微信(/ewyw/ewQuestion/ewQuestionZdReport微信) String url = request.getServletPath(); Map user = new HashMap(); if(url.substring(1, 5).equals("ewyw")){ user = WebUtil.getWywEngineerLoginUser(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(); QUESTION_ZD_HISTORY zd = new QUESTION_ZD_HISTORY(); if("1".equals(type)){ Map param = new HashMap(); param.put("reason", reason); param.put("resolve", resolve); param.put("suggest", suggest); param.put("flowid", flowId); param.put("istheend", 1); SC_WORKFLOW_QUESTION question = new SC_WORKFLOW_QUESTION(id); question.setTrue_reason(reason).setResolve(resolve).setSuggest(suggest).update(); String selsql = "SELECT ID FROM QUESTION_ZD_HISTORY WHERE FLOWID = :flowid AND ISTHEEND = :istheend "; String zdid = baseDao.queryForString(selsql, param); zd.setId(zdid); String sql = "UPDATE QUESTION_ZD_HISTORY SET REASON = :reason ,RESOLVE = :resolve,SUGGEST = :suggest WHERE FLOWID = :flowid AND ISTHEEND = :istheend "; baseDao.execute(sql, param); }else{ if(!StringUtil.isEmpty(id)){ zd.setId(id); }else{ zd.setFlowid(flowId).setCreate_user_id(userId).setCreate_user_name(userName).setCreate_time(DateUtil.getCurrentDate14()); } zd.setReason(reason).setResolve(resolve).setSuggest(suggest).insertOrUpdate(); } //fileService.uploadFile(request, zd.getId(), flowId, null, null); } @Override public Map updateAssign(HttpServletRequest request) { Map resultMap = new HashMap(); resultMap.put("result", 2); String savetype = request.getParameter("savetype"); String id = request.getParameter("flowId"); String selectUser = request.getParameter("alluserid"); String saveusername = request.getParameter("saveusername"); String usertype = request.getParameter("type"); String nextnodeid = request.getParameter("node"); String curnodeId = request.getParameter("curnodeId"); String true_reason = request.getParameter("reason"); String resolve = request.getParameter("resolve"); String suggest = request.getParameter("suggest"); String bz = request.getParameter("bz"); Map user = WebUtil.getEngineerMsg(request); String userId = ConvertUtil.obj2StrBlank(user.get("ID")); String userName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); WORKFLOW_BASE base = new WORKFLOW_BASE(id).getInstanceById(); SC_WORKFLOW_QUESTION myQuestion = new SC_WORKFLOW_QUESTION(base.getBusiness_id()).getInstanceById(); //获取当前所处的节点 Map flowMsg = questionFacade.getFlowMsg(id,userId); String nodeid = ConvertUtil.obj2StrBlank(flowMsg.get("ID")); String nodeName = ConvertUtil.obj2StrBlank(flowMsg.get("NODENAME")); if("1".equals(savetype)){ Map dealuser = new HashMap(); dealuser.put("userid", selectUser); dealuser.put("username", saveusername); baseDao.execute("DELETE FROM ORDER_ASSIGN_TEMP WHERE NODE_ID = :node_id ", new SqlParameter("node_id",nodeid)); ORDER_ASSIGN_TEMP temp = new ORDER_ASSIGN_TEMP(); temp.setDealer(JsonUtil.map2Json(dealuser)).setNode_id(nodeid) .setExtend1(usertype).setExtend2(true_reason).setExtend3(resolve).setExtend4(suggest).setExtend5(bz).insert(); resultMap.put("result", 1); }else{ String dealUserId = new String(); String dealUserName = new String(); String state = new String(); String type = new String(); String node_template_id = Constants.WTFQ; if(StringUtil.notEmpty(selectUser)) { if(usertype.equals("3")){ usertype = "1"; } node_template_id = nextnodeid; Map param = new HashMap(); param.put("ID", StringUtil.getUUID()); param.put("WORKFLOWID", id); param.put("PNAME", "处理人"); param.put("PVALUE", usertype+"@"+selectUser); if(nextnodeid.equals(Constants.WTSL)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_SL; baseDao.execute("INSERT INTO WORKFLOW_PARAMETER(ID,WORKFLOWID,PNAME,PVALUE) VALUES(:ID,:WORKFLOWID,:PNAME,:PVALUE)", param); } else if(nextnodeid.equals(Constants.WTSH)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_SH; baseDao.execute("UPDATE WORKFLOW_PARAMETER SET PVALUE=:PVALUE WHERE WORKFLOWID = :WORKFLOWID AND PNAME = :PNAME ", param); } else if(nextnodeid.equals(Constants.WTZD)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_WTZD; } else if(nextnodeid.equals(Constants.WTFASP)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_FASP; } else if(nextnodeid.equals(Constants.WTFASS)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_FASS; } else if(nextnodeid.equals(Constants.WTHG)) { state = Constants.SC_WORKFLOW_QUESTION_STATE_HG; }else{ state = Constants.SC_WORKFLOW_QUESTION_STATE_YDJ; } } if(StringUtil.notEmpty(selectUser)) { //执行分派任务 NodeDealEntity entity = new NodeDealEntity(); entity.setDealer_type(3); List dealerList = new ArrayList(); if(usertype.equals("1")) { entity.setBefore_Dealer_type(2); String sqluser = "select * from gg_user "; List userList = baseDao.queryForList(sqluser); Map cacheuser = new HashMap(); for(Map users:userList){ cacheuser.put(users.get("ID"), users.get("ZSXM")); } String[] userIdList2 = selectUser.split("&"); String[] userList2 = userIdList2[0].split(","); for(int i=0;i zdList = questionFacade.getZdMsgList(flowId); if(zdList.size() > 0){ Map map = zdList.get(0); updateSql.append(" ,TRUE_REASON = :true_reason ,RESOLVE = :resolve ,SUGGEST = :suggest "); paramMap.put("true_reason", map.get("REASON")); paramMap.put("resolve", map.get("RESOLVE")); paramMap.put("suggest", map.get("SUGGEST")); } } paramMap.put("state", state); paramMap.put("resolveTime", resolveTime); paramMap.put("solveWay", solveWay); paramMap.put("solveWayName", solveWayName); paramMap.put("questionId", orderId); updateSql.append(" WHERE ID = :questionId"); baseDao.execute(updateSql.toString(), paramMap); //添加处理记录 //获取当前所处的节点 Map flowMsg = questionFacade.getFlowMsg(flowId,userId); String nodeid = ConvertUtil.obj2StrBlank(flowMsg.get("ID")); String nodeName = ConvertUtil.obj2StrBlank(flowMsg.get("NODENAME")); //增加问题处理记录 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); record.setNode_id(nodeid).setNode_name(nodeName); recordService.addRecord(record); //结束工单 WORKFLOW_BASE base = new WORKFLOW_BASE(flowId).getInstanceById(); List list = new ArrayList(); NodeFinishEntity finishEntity = new NodeFinishEntity(); finishEntity.setDeal_result(1); finishEntity.setDeal_note_title(userName+"处理完成"); finishEntity.setDeal_note(reason); WORKFLOW_NODE node = new WORKFLOW_NODE(nodeId).getInstanceById(); workflowCoreService.finishNode(base, node, finishEntity); if("1".equals(solve)){ workflowCoreService.finishWorkFlow(base); }else{ workflowCoreService.closeWorkFlow(base); } } @Override public Map getZdMsgById(String id) { String sql = "SELECT * FROM QUESTION_ZD_HISTORY WHERE ID = :id ORDER BY CREATE_TIME DESC"; return baseDao.queryForMap(sql, new SqlParameter("id",id)); } @Override public void updateQuestionOpen(HttpServletRequest request) { Map user = WebUtil.getWywEngineerLoginUser(request); String createUserId = ConvertUtil.obj2StrBlank(user.get("ID")); String createUserName = ConvertUtil.obj2StrBlank(user.get("ZSXM")); String orderId = request.getParameter("orderId"); String note = request.getParameter("note"); Map param = new HashMap(); param.put("bus_id", orderId); String sql = "SELECT * FROM HANG_UP_INFO WHERE STATE = 1 AND BUS_ID = :bus_id "; Map qgMap = baseDao.queryForMap(sql, param); SC_WORKFLOW_QUESTION question = new SC_WORKFLOW_QUESTION(); question.setId(orderId).setState(ConvertUtil.obj2Integer(qgMap.get("BUS_STATE"))).update(); String basesql = "UPDATE WORKFLOW_BASE SET WFSTATE = 1 WHERE BUSINESS_ID = :bus_id "; baseDao.execute(basesql, param); HANG_UP_INFO qg = new HANG_UP_INFO(ConvertUtil.obj2StrBlank(qgMap.get("ID"))); qg.setState(2).setHang_down_reason(note).update(); } @Override public String getIsOpenQuestion(HttpServletRequest request) { String orderId = request.getParameter("orderId"); String userId = WebUtil.getWywEngineerLoginUser(request).get("ID").toString(); String sql = "SELECT COUNT(ID) FROM HANG_UP_INFO WHERE BUS_ID = :bus_id AND STATE = 1 AND HANG_UP_USERID = :userId "; Map param = new HashMap(); param.put("bus_id", orderId); param.put("userId", userId); int count = baseDao.queryForInteger(sql, param); if(count > 0){ return "1"; }else{ return "0"; } } }