package cn.ksource.web.facade.uc.order; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; 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.SC_WORKFLOW_INCIDENT; import cn.ksource.beans.WORKFLOW_BASE; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.page.PageInfo; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.DateUtil; import cn.ksource.core.util.JsonUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.core.web.WebUtil; import cn.ksource.web.Constants; import cn.ksource.web.service.DataDictionaryService; 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("ucIncidentFacade") public class UcIncidentFacadeImpl implements UcIncidentFacade { @Autowired private BaseDao baseDao; @Autowired private DataDictionaryService dataDictionaryService; @Autowired private FileService fileService; @Autowired private RecordService recordService; @Autowired private OrderService orderService; @Autowired private DeviceService deviceService; /** * 查询服务目录三级树 */ @Override public Map serviceListTree(String cusId,String sl) { String sql="SELECT A.* FROM SC_SERVCE_CATEGORY A,SC_SERVCE_CATEGORY_CUSTOMER B WHERE B.CATEGORY_ID = A.ID AND B.CUSTOMER_ID = :customer_id ORDER BY LEVEL,SERIAL "; Map slMap = new HashMap(); if(StringUtil.notEmpty(sl)) { String[] sls = sl.split(","); for(String s : sls) { slMap.put(s, s); } } List categoryList = baseDao.queryForList(sql,new SqlParameter("customer_id",cusId)); Map result = new HashMap(); List resultList = new LinkedList(); Map yjgnCache = new HashMap(); Map ejgnCache = new HashMap(); Map sjgnCache = new HashMap(); for (Map map : categoryList) { //一级树 if (map.get("LEVEL").toString().equalsIgnoreCase("1")) { yjgnCache.put(map.get("ID").toString(), map); List ejgnList = new LinkedList(); map.put("ejTree", ejgnList); resultList.add(map); continue; } //二级树 if (map.get("LEVEL").toString().equalsIgnoreCase("2")) { Map yjgnMap = yjgnCache.get(map.get("P_ID").toString()); List list = (List)yjgnMap.get("ejTree"); map.put("sjTree", new LinkedList()); list.add(map); ejgnCache.put(map.get("ID").toString(), map); continue; } //三级树 if (map.get("LEVEL").toString().equalsIgnoreCase("3")) { if(null!=map.get("P_ID")){ if(slMap.containsKey(map.get("ID"))) { slMap.put(map.get("ID"), map.get("CATEGORY_NAME")); map.put("check", 1); } else { map.put("check", 2); } Map ejgnMap = ejgnCache.get(map.get("P_ID").toString()); List list = (List)ejgnMap.get("sjTree"); list.add(map); } } } Map resultMap = new HashMap(); resultMap.put("categoryList", resultList); resultMap.put("slMap", slMap); return resultMap; } @Override public Map queryIncidentCount(String cusId) { //初始化变量 //未完成 int wyc = 0; //SLA即将到期 int slaWillTimeOut = 0; //SLA过期 int slaTimeOut = 0; //服务台 int fwt = 0; //服务台已登记 int fwtydj = 0; //服务台处理中 int fwtclz = 0; //一线 int yx = 0; //一线待响应 int yxdxy = 0; //一线处理中 int yxclz = 0; //二线 int ex = 0; //二线待响应 int exdxy = 0; //二线处理中 int exclz = 0; //三线 int sx = 0; //三线待响应 int sxdxy = 0; //三线处理中 int sxclz = 0; //已完成 int ywc = 0; //满意度待调查 int mydddc = 0; //满意度已调查 int mydydc = 0; String selectSql = new String(); String sql = new String(); Map paramMap = new HashMap(); selectSql = "SELECT COUNT(*) AS NUM,A.STATE FROM SC_WORKFLOW_INCIDENT A WHERE A.CUSTOMER_ID = :cusId GROUP BY A.STATE"; sql = "SELECT ANSWER_TIMEOUT,DEAL_TIMEOUT FROM SC_WORKFLOW_INCIDENT WHERE STATE != :yjj AND STATE!=:gb AND STATE != :ypj AND CUSTOMER_ID = :cusId"; paramMap.put("cusId", cusId); List list = baseDao.queryForList(selectSql,paramMap); if(null!=list && list.size()>0) { for(Map map : list) { String state = ConvertUtil.obj2StrBlank(map.get("STATE")); int num = ConvertUtil.obj2Int(map.get("NUM")); if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDFWT)) { fwtydj += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FWTCLZ)) { fwtclz += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDYCJSZC)) { fwtydj += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_YCJSZCCLZ)) { fwtclz += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDYX)) { yxdxy = num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_YXCLZ)) { yxclz = num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDEX)) { exdxy = num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_EXCLZ)) { exclz = num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDSX)) { sxdxy = num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_SXCLZ)) { sxclz = num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_YJJ)) { mydddc += num; continue; } /*if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_GB)) { mydddc += num; continue; }*/ if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_YPJ)) { mydydc = num; } } } fwt = fwtydj + fwtclz; yx = yxdxy + yxclz; ex = exdxy + exclz; sx = sxdxy + sxclz; //ywc = mydddc + mydydc; ywc = mydddc; Map map = new HashMap(); map.put("fwt", fwt); map.put("fwtydj", fwtydj); map.put("fwtclz", fwtclz); map.put("yx", yx); map.put("yxdxy", yxdxy); map.put("yxclz", yxclz); map.put("ex", ex); map.put("exdxy", exdxy); map.put("exclz", exclz); map.put("sx", sx); map.put("sxdxy", sxdxy); map.put("sxclz", sxclz); map.put("ywc", ywc); map.put("mydddc", mydddc); map.put("mydydc", mydydc); //查询该加盟商未完成的事件 paramMap.put("yjj", Constants.SC_WORKFLOW_INCIDENT_STATE_YJJ); paramMap.put("gb", Constants.SC_WORKFLOW_INCIDENT_STATE_GB); paramMap.put("ypj", Constants.SC_WORKFLOW_INCIDENT_STATE_YPJ); List wycList = baseDao.queryForList(sql,paramMap); if(null!=wycList && wycList.size()>0) { wyc = wycList.size(); for(Map m : wycList) { String answer_timeout = ConvertUtil.obj2StrBlank(m.get("ANSWER_TIMEOUT")); String deal_timeout = ConvertUtil.obj2StrBlank(m.get("DEAL_TIMEOUT")); if(answer_timeout.equals("1") || deal_timeout.equals("1")) { slaTimeOut += 1; } else { slaWillTimeOut += 1; } } } map.put("wwc", wyc); map.put("slaWillTimeOut", slaWillTimeOut); map.put("slaTimeOut", slaTimeOut); return map; } @Override public PageInfo queryIncidentOrderList(PageInfo pageInfo,Map params) { String cusId = params.get("cusId"); StringBuilder sql = new StringBuilder(); sql.append("SELECT WB.ID,WB.ORDER_CODE,WB.WFNAME,WB.BUSINESSTYPE,WB.CREATERNAME,WB.CREATETIME,WB.WFNOTE, "); sql.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 "); sql.append("FROM WORKFLOW_BASE WB,SC_WORKFLOW_INCIDENT B WHERE WB.BUSINESS_ID = B.ID "); sql.append("AND WB.BUSINESSTYPE = :businessType "); sql.append(" AND B.CUSTOMER_ID = :cusId "); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); params.put("cusId", cusId); sql = getincidentSql(sql,params); sql.append( " ORDER BY WB.CREATETIME DESC "); return baseDao.queryforSplitPageInfo(pageInfo,sql.toString(),params); } @Override public int queryIncidentOrderCount(Map params) { String cusId = params.get("cusId"); StringBuilder sql = new StringBuilder(); sql.append("SELECT COUNT(WB.ID) FROM WORKFLOW_BASE WB,SC_WORKFLOW_INCIDENT B WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType "); sql.append(" AND B.CUSTOMER_ID = :cusId "); params.put("cusId", cusId); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); sql = getincidentSql(sql,params); return baseDao.queryForInteger(sql.toString(),params); } public StringBuilder getincidentSql(StringBuilder sql,Map params){ String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { sql.append(" AND B.NAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { sql.append(" AND B.ORDER_CODE LIKE :orderCode "); params.put("orderCode", "%"+orderCode+"%"); } String contract = params.get("contract"); if(StringUtil.notEmpty(contract)) { sql.append(" AND B.CONTACT_NAME LIKE :contract "); params.put("contract", "%"+contract+"%"); } String state = params.get("state"); if(StringUtil.notEmpty(state)) { sql.append(" AND WB.WFSTATE = :state "); params.put("state", state); } String pri = params.get("pri"); if(StringUtil.notEmpty(pri)) { String[] pris = pri.split(","); if(pris.length==1) { sql.append(" AND B.PRIORITY_ID = :priority_id"); params.put("priority_id", pris[0]); } else { sql.append(" AND B.PRIORITY_ID IN ("); for(int i=0; i0) { //查询附件 List files = fileService.getFileList(orderId); baseMap.put("files", files); } return baseMap; } //查询事件流转记录 @Override public List incidentLzRecord(String flowId) { //查询该流程中,所有的流程节点模板对应的流程 String nodeSql = "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,N.IS_ADMIN DESC "; /** * 1.分配到分组 * 2.分配到单个人员 * 3.分配到多个人 */ List records = baseDao.queryForList(nodeSql,new SqlParameter("flowId",flowId)); if(null!=records && records.size()>0) { List list = new ArrayList(); Map cacheMap = new HashMap(); Map cacheName = new HashMap(); for(Map record : records) { String node_template_id = ConvertUtil.obj2StrBlank(record.get("NODE_TEMPLATE_ID")); String same_node_key = ConvertUtil.obj2StrBlank(record.get("SAME_NODE_KEY")); String unitKey = node_template_id +"-"+ same_node_key; String nodeName = ConvertUtil.obj2StrBlank(record.get("NODENAME")); String dealType = ConvertUtil.obj2StrBlank(record.get("DEAL_TYPE")); String current_deal_roleida = ConvertUtil.obj2StrBlank(record.get("CURRENT_DEAL_ROLEIDA")); String current_dealer_id = ConvertUtil.obj2StrBlank(record.get("CURRENT_DEALER_ID")); if(dealType.equals("1") && StringUtil.notEmpty(current_deal_roleida) && !StringUtil.notEmpty(current_dealer_id)) { List users = queryUser(current_deal_roleida); StringBuilder builder = new StringBuilder(); if(null!=users && users.size()>0) { for(Map user : users) { String userName = ConvertUtil.obj2StrBlank(user.get("USER_NAME")); builder.append(userName).append("  "); } } record.put("users", builder.toString()); } cacheName.put(unitKey, nodeName); if(cacheMap.containsKey(unitKey)) { List rs = (List)cacheMap.get(unitKey); rs.add(record); } else { List rs = new ArrayList(); rs.add(record); cacheMap.put(unitKey, rs); list.add(unitKey); } String answer_usertime = ConvertUtil.obj2StrBlank(record.get("ANSWER_USERTIME")); if(StringUtil.notEmpty(answer_usertime) && !answer_usertime.equals("0")) { String answerTime = DateUtil.getFormatSeconds(ConvertUtil.obj2Int(answer_usertime)); record.put("ANSWER_USERTIME", answerTime); } String deal_usetime = ConvertUtil.obj2StrBlank(record.get("DEAL_USETIME")); if(StringUtil.notEmpty(deal_usetime) && !deal_usetime.equals("0")) { String dealTime = DateUtil.getFormatSeconds(ConvertUtil.obj2Int(deal_usetime)); record.put("DEAL_USETIME", dealTime); } } //查询工单类型 List result = new ArrayList(); for(String key : list) { Map map = new HashMap(); map.put("node_template_id", key); map.put("node_template_name", cacheName.get(key)); List rds = (List)cacheMap.get(key); for(Map rd : rds) { //判断主负责人的状态 String isAdmin = ConvertUtil.obj2StrBlank((rd.get("IS_ADMIN"))); if(isAdmin.equals("1")) { map.put("flowstate", rd.get("FLOWSTATE")); } } map.put("rds", rds); result.add(map); } System.out.println(JsonUtil.list2Json(result)); return result; } return null; } private List queryUser(String current_deal_roleida) { String selectSql = "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 ORDER BY B.ZSXM "; List users = baseDao.queryForList(selectSql,new SqlParameter("groupId",current_deal_roleida)); return users; } @Override public List queryDealRecord(String flowId) { List list = recordService.queryRecord(flowId); if(null!=list && list.size()>0) { Map cacheFile = new HashMap(); //查询所有该事件工单下的文档 List files = fileService.getFileList(flowId,1); if(null!=files && files.size()>0) { for(Map file :files) { String extend = ConvertUtil.obj2StrBlank(file.get("BUSINESS_ID")); if(StringUtil.notEmpty(extend)) { List cacheList = new ArrayList(); if(cacheFile.containsKey(extend)) { cacheList = (List)cacheFile.get(extend); } cacheList.add(file); cacheFile.put(extend, cacheList); } } } if(null!=cacheFile && cacheFile.size()>0) { for(Map record : list) { String recordId = ConvertUtil.obj2StrBlank(record.get("ID")); if(cacheFile.containsKey(recordId)) { record.put("files", cacheFile.get(recordId)); } } } } return list; } /** * 查询该事件工单关联的设备 */ @Override public List queryDevices(String flowId) { //查询流程所有的关联设备 List devices = deviceService.queryLinkDevices(flowId); return devices; } /** * 查询关联工单 */ @Override public List queryOrders(String flowId) { List orders = orderService.queryLinkOrders(flowId); return orders; } /** * 查询所有的文档附件 */ @Override public List queryFiles(String flowId) { List files = fileService.getFileList(flowId,1); if(null!=files && files.size()>0) { for(Map file : files) { file.put("FILE_SIZE", StringUtil.getFileSize(ConvertUtil.obj2Double(file.get("FILE_SIZE")))); } } return files; } @Override public Map queryWcReport(String orderId) { Map incident = new SC_WORKFLOW_INCIDENT(orderId).getBeanMapById(); String flowId = ConvertUtil.obj2StrBlank(incident.get("FLOW_ID")); //查询关联工单 if(null!=incident && incident.size()>0) { List orders = queryOrders(flowId); List devices = queryDevices(flowId); List files = queryFiles(flowId); incident.put("orders", orders); incident.put("devices", devices); incident.put("files", files); } //判断当前事件工单是否已评价 WORKFLOW_BASE base = new WORKFLOW_BASE(flowId).getInstanceById(); int wfstate = base.getWfstate(); if(wfstate == Constants.WORKFLOW_BASE_WFSTATE_EVALUATE) { //查询调查记录 Map statis = queryStatis(flowId); incident.put("statis", statis); } return incident; } private Map queryStatis(String flowId) { Map map = new HashMap(); String selectSql = " SELECT * FROM ORDER_SATIS_INFO WHERE BUSINESS_ID = :flowId "; map = baseDao.queryForMap(selectSql,new SqlParameter("flowId",flowId)); return map; } @Override public Map queryCloseReport(String orderId) { Map incident = new SC_WORKFLOW_INCIDENT(orderId).getBeanMapById(); if(null!=incident && incident.size()>0) { String merged_business_id = ConvertUtil.obj2StrBlank(incident.get("MERGED_BUSINESS_ID")); if(StringUtil.notEmpty(merged_business_id)) { Map linkIncident = new SC_WORKFLOW_INCIDENT(merged_business_id).getBeanMapById(); incident.put("linkIncident", linkIncident); } } return incident; } /** * 查询文档信息 */ @Override public Map queryFileMsg(String fileId) { String selectSql = "SELECT * FROM GG_FILES WHERE ID = :id"; return baseDao.queryForMap(selectSql,new SqlParameter("id",fileId)); } @Override public Map getLastMonthIncidentEffect(HttpServletRequest request) { Map chartMap = new HashMap(); String cusId = request.getParameter("cusId"); String userId = request.getParameter("userId"); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay,-30,8); SqlParameter param = new SqlParameter(); param.addValue("startTime", startDay+"000000") .addValue("endTime", endDay + "600000") .addValue("userId", userId) .addValue("cusId", cusId); StringBuilder builder = new StringBuilder(); if(StringUtil.isBlank(userId)){ builder.append(" SELECT count(ID) NUM,INFLUENCE_ID FROM SC_WORKFLOW_INCIDENT WHERE "); builder.append(" CUSTOMER_ID = :cusId AND CREATE_TIME >= :startTime AND CREATE_TIME <= :endTime "); builder.append(" GROUP BY INFLUENCE_ID "); }else{ builder.append(" SELECT count(q.ID) NUM,q.INFLUENCE_ID FROM SC_WORKFLOW_INCIDENT q,WORKFLOW_BASE b "); builder.append(" where b.ID = q.FLOW_ID and EXISTS ( "); builder.append(" select FLOWID from workflow_node n where b.ID = n.FLOWID and n.CURRENT_DEALER_ID = :userId "); builder.append(" ) and q.CUSTOMER_ID = :cusId and q.CREATE_TIME>=:startTime and q.CREATE_TIME<=:endTime group by q.INFLUENCE_ID "); } List dataList = baseDao.queryForList(builder.toString(),param); if(dataList!=null&&dataList.size()>0){ Map dataMap = new HashMap(); Map tempMap = new HashMap(); List serieslist = new ArrayList(); for(Map data : dataList){ dataMap.put(data.get("INFLUENCE_ID").toString(), data); } List catelist = dataDictionaryService.getDataDictionaryByCategoryKey(Constants.EVENT_EFFECT_DG); if(catelist!=null&&catelist.size()>0){ for(Map cate : catelist){ List tempList = new ArrayList(); tempList.add(cate.get("DATAVALUE").toString()); if(dataMap.get(cate.get("DATAKEY").toString())!=null){ tempList.add(((Map)dataMap.get(cate.get("DATAKEY").toString())).get("NUM")); }else{ tempList.add(0); } serieslist.add(tempList); } } chartMap.put("seriesData", serieslist); } return chartMap; } @Override public Map getLastMonthIncidentServer(HttpServletRequest request) { Map chartMap = new HashMap(); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay,-30,8); String cusId = request.getParameter("cusId"); String userId = request.getParameter("userId"); StringBuilder builder = new StringBuilder(); SqlParameter param = new SqlParameter(); param.addValue("cusId", cusId) .addValue("startTime", startDay+"000000") .addValue("endTime", endDay + "600000") .addValue("userId", userId); if(StringUtil.isBlank(userId)){ builder.append(" select count(ID) NUM,THIRD_CATEGORY_ID SERVER_ID from SC_WORKFLOW_INCIDENT where CUSTOMER_ID = :cusId "); builder.append(" and CREATE_TIME>=:startTime and CREATE_TIME<=:endTime group by SERVER_ID "); }else{ builder.append(" select count(q.ID) NUM,q.THIRD_CATEGORY_ID SERVER_ID from SC_WORKFLOW_INCIDENT 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 "); } List dataList = baseDao.queryForList(builder.toString(),param); if(dataList!=null&&dataList.size()>0){ builder.setLength(0); builder.append(" SELECT C.ID SERVER_ID,C.CATEGORY_NAME SERVER_NAME FROM SC_SERVCE_CATEGORY C,SC_SERVCE_CATEGORY_CUSTOMER P "); builder.append(" WHERE C.ID = P.CATEGORY_ID and C.LEVEL = 3 and C.STATE=1 "); builder.append(" AND P.STATE = 1 AND P.CUSTOMER_ID = :cusId ORDER BY SERIAL ASC "); List categoriesList = baseDao.queryForList(builder.toString(),param); List categories = new ArrayList(); Map dataMap = new HashMap(); Map tempMap = new HashMap(); List series = new ArrayList(); tempMap.put("name", "数量"); List tempList = new ArrayList(); for(Map data:dataList){ dataMap.put(data.get("SERVER_ID").toString(), data); } for(Map cate:categoriesList){ categories.add(cate.get("SERVER_NAME").toString()); if(dataMap.get(cate.get("SERVER_ID").toString())!=null){ tempList.add(((Map)dataMap.get(cate.get("SERVER_ID").toString())).get("NUM")); }else{ tempList.add(0); } } tempMap.put("data", tempList); series.add(tempMap); chartMap.put("categories",categories); chartMap.put("series",series); } return chartMap; } @Override public Map getLastMonthIncidentLv(HttpServletRequest request) { Map chartMap = new HashMap(); String cusId = request.getParameter("cusId"); String userId = request.getParameter("userId"); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay,-30,8); SqlParameter param = new SqlParameter(); param.addValue("startTime", startDay+"000000") .addValue("endTime", endDay + "600000") .addValue("userId", userId) .addValue("cusId", cusId); StringBuilder builder = new StringBuilder(); if(StringUtil.isBlank(userId)){ builder.append(" SELECT count(ID) NUM,SLA_ID FROM SC_WORKFLOW_INCIDENT WHERE "); builder.append(" CUSTOMER_ID = :cusId AND CREATE_TIME >= :startTime AND CREATE_TIME <= :endTime "); builder.append(" GROUP BY SLA_ID "); }else{ builder.append(" SELECT count(q.ID) NUM,q.SLA_ID FROM SC_WORKFLOW_INCIDENT q,WORKFLOW_BASE b "); builder.append(" where b.ID = q.FLOW_ID and EXISTS ( "); builder.append(" select FLOWID from workflow_node n where b.ID = n.FLOWID and n.CURRENT_DEALER_ID = :userId "); builder.append(" ) and q.CUSTOMER_ID = :cusId and q.CREATE_TIME>=:startTime and q.CREATE_TIME<=:endTime group by q.SLA_ID "); } List dataList = baseDao.queryForList(builder.toString(),param); if(dataList!=null&&dataList.size()>0){ Map dataMap = new HashMap(); Map tempMap = new HashMap(); List serieslist = new ArrayList(); for(Map data : dataList){ dataMap.put(data.get("SLA_ID").toString(), data); } builder.setLength(0); builder.append(" select ID LEVEL_ID,LEVEL_NAME from SC_SLA order by SERIAL "); List catelist = baseDao.queryForList(builder.toString()); for(Map cate : catelist){ List tempList = new ArrayList(); tempList.add(cate.get("LEVEL_NAME").toString()); if(dataMap.get(cate.get("LEVEL_ID").toString())!=null){ tempList.add(((Map)dataMap.get(cate.get("LEVEL_ID").toString())).get("NUM")); }else{ tempList.add(0); } serieslist.add(tempList); } chartMap.put("seriesData", serieslist); } return chartMap; } @Override public Map getLastMonthIncidentPri(HttpServletRequest request) { Map chartMap = new HashMap(); String cusId = request.getParameter("cusId"); String userId = request.getParameter("userId"); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay,-30,8); SqlParameter param = new SqlParameter(); param.addValue("startTime", startDay+"000000") .addValue("endTime", endDay + "600000") .addValue("userId", userId) .addValue("cusId", cusId); StringBuilder builder = new StringBuilder(); if(StringUtil.isBlank(userId)){ builder.append(" SELECT count(ID) NUM,PRIORITY_ID FROM SC_WORKFLOW_INCIDENT WHERE "); builder.append(" CUSTOMER_ID = :cusId AND CREATE_TIME >= :startTime AND CREATE_TIME <= :endTime "); builder.append(" GROUP BY PRIORITY_ID "); }else{ builder.append(" SELECT count(q.ID) NUM,q.PRIORITY_ID FROM SC_WORKFLOW_INCIDENT q,WORKFLOW_BASE b "); builder.append(" where b.ID = q.FLOW_ID and EXISTS ( "); builder.append(" select FLOWID from workflow_node n where b.ID = n.FLOWID and n.CURRENT_DEALER_ID = :userId "); builder.append(" ) and q.CUSTOMER_ID = :cusId and q.CREATE_TIME>=:startTime and q.CREATE_TIME<=:endTime group by q.PRIORITY_ID "); } List dataList = baseDao.queryForList(builder.toString(),param); if(dataList!=null&&dataList.size()>0){ Map dataMap = new HashMap(); Map tempMap = new HashMap(); List serieslist = new ArrayList(); for(Map data : dataList){ dataMap.put(data.get("PRIORITY_ID").toString(), data); } List catelist = dataDictionaryService.getDataDictionaryByCategoryKey(Constants.EVENT_PRI); for(Map cate : catelist){ List tempList = new ArrayList(); tempList.add(cate.get("DATAVALUE").toString()); if(dataMap.get(cate.get("DATAKEY").toString())!=null){ tempList.add(((Map)dataMap.get(cate.get("DATAKEY").toString())).get("NUM")); }else{ tempList.add(0); } serieslist.add(tempList); } chartMap.put("seriesData", serieslist); } return chartMap; } @Override public Map getLastMonthIncidentCount(HttpServletRequest request) { Map chartMap = new HashMap(); Long endDay = DateUtil.getCurrentDate8(); Long startDay = DateUtil.getDateAdd(endDay,-30,8); String cusId = request.getParameter("cusId"); String userId = request.getParameter("userId"); StringBuilder builder = new StringBuilder(); SqlParameter param = new SqlParameter(); param.addValue("cusId", cusId) .addValue("startTime", startDay+"000000") .addValue("userId", userId) .addValue("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 where CUSTOMER_ID = :cusId "); builder.append(" and CREATE_TIME>=:startTime and CREATE_TIME<=:endTime group by CREATEDAY "); }else{ builder.append(" select count(q.ID) NUM,DATE_FORMAT(q.CREATE_TIME,'%Y%m%d') CREATEDAY from workflow_base b ,SC_WORKFLOW_INCIDENT 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 "); } List dataList = baseDao.queryForList(builder.toString(),param); if(dataList!=null&&dataList.size()>0){ List categories = DateUtil.getDates(startDay ,endDay); categories.add(String.valueOf(DateUtil.getCurrentDate8())); List categories_format = new ArrayList(); Map dataMap = new HashMap(); Map tempMap = new HashMap(); List series = new ArrayList(); tempMap.put("name", "事件数量"); List tempList = new ArrayList(); for(Map data:dataList){ dataMap.put(data.get("CREATEDAY").toString(), data); } for(String day:categories){ categories_format.add(DateUtil.format("yyyy-MM-dd",day)); if(dataMap.get(day)!=null){ tempList.add(((Map)dataMap.get(day)).get("NUM")); }else{ tempList.add(0); } } tempMap.put("data", tempList); series.add(tempMap); chartMap.put("categories",categories_format); chartMap.put("step",Math.ceil(categories.size()/9)); chartMap.put("series",series); } return chartMap; } @Override public int incidentpoolCount(Map params) { /** * 查询我的工单池规则 * 如果是一二三线或者驻场工程师桌面,则直接查询工单表中 所属分组是当前工程师所在组的 * 如果是项目服务台,则直接查询工单表中所属分组是当前工程师所在组的 (同上) * 如果是客户服务台,查询我的工单池 则查询工单表中分组是 (查询该客户下所有的项目的服务台分组) * 如果是总服务台,则查询所有客户下(加盟商下所有项目的服务台分组) */ StringBuffer sql = new StringBuffer(); params.put("wfstate", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); sql.append("SELECT COUNT(D.ID) FROM SC_WORKFLOW_INCIDENT E,WORKFLOW_BASE D,(SELECT B.ID,B.ROLENAME FROM AC_ROLE B WHERE B.STATE = 1"); sql.append(") C WHERE E.ID = D.BUSINESS_ID AND D.CURRENT_DEAL_ROLEIDA = C.ID AND D.WFSTATE != :wfstate AND (D.CURRENT_DEALER_ID IS NULL OR D.CURRENT_DEALER_ID = '' )"); StringBuilder builder = new StringBuilder(sql); String cusId = params.get("cusId"); if(StringUtil.notEmpty(cusId)) { builder.append(" AND D.CUSTOMER_ID = :cusId "); } String status = params.get("status"); if(StringUtil.notEmpty(status)) { builder.append(" AND E.STATE = :status "); } String subCustomerId = params.get("subCustomerId"); if(StringUtil.notEmpty(subCustomerId)) { builder.append(" AND D.SUB_CUSTOMER_ID = :subCustomerId "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND D.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND D.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+orderCode+"%"); } String customerName = params.get("customerName"); if(StringUtil.notEmpty(customerName)) { builder.append(" AND D.CUSTOMER_NAME LIKE :customerName "); params.put("customerName", "%"+customerName+"%"); } builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); int count = baseDao.queryForInteger(builder.toString(),params); return count; } @Override public PageInfo incidentpoolData(PageInfo pageInfo,Map params) { /** * 查询我的工单池规则 * 如果是项目服务台,则直接查询工单表 * 如果是客户服务台,查询我的工单池 则查询工单表中分组是 (查询该客户下所有的项目的分组) * 如果是总服务台,则查询所有客户下(加盟商下所有项目的分组) */ StringBuffer sql = new StringBuffer(); params.put("wfstate", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_WFSTATE_DELETE)); //查询该人员所属的项目 sql.append("SELECT D.* FROM SC_WORKFLOW_INCIDENT E,WORKFLOW_BASE D,(SELECT B.ID,B.ROLENAME FROM AC_ROLE B WHERE B.STATE = 1 "); sql.append(") C WHERE E.ID = D.BUSINESS_ID AND D.CURRENT_DEAL_ROLEIDA = C.ID AND D.WFSTATE != :wfstate AND (D.CURRENT_DEALER_ID IS NULL OR D.CURRENT_DEALER_ID = '' )"); StringBuilder builder = new StringBuilder(sql); String status = params.get("status"); if(StringUtil.notEmpty(status)) { builder.append(" AND E.STATE = :status "); params.put("status", status); } String cusId = params.get("cusId"); if(StringUtil.notEmpty(cusId)) { builder.append(" AND D.CUSTOMER_ID = :cusId "); params.put("cusId", cusId); } String subCustomerId = params.get("subCustomerId"); if(StringUtil.notEmpty(subCustomerId)) { builder.append(" AND D.SUB_CUSTOMER_ID = :subCustomerId "); params.put("subCustomerId", subCustomerId); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { builder.append(" AND D.WFNAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND D.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+orderCode+"%"); } String customerName = params.get("customerName"); if(StringUtil.notEmpty(customerName)) { builder.append(" AND D.CUSTOMER_NAME LIKE :customerName "); params.put("customerName", "%"+customerName+"%"); } builder.append(" AND D.BUSINESSTYPE = :businessType"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); PageInfo result = baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params); return result; } @Override public Map queryincidentpoolCount(String cusId) { //初始化变量 int ywc = 0; //服务台 int fwt = 0; //一线工程师 int yxgcs = 0; //二线工程师 int exgcs = 0; //三线工程师 int sxgcs = 0; StringBuffer sql = new StringBuffer(); StringBuffer sqlall = new StringBuffer(); Map paramMap = new HashMap(); paramMap.put("wfstate", Constants.WORKFLOW_BASE_WFSTATE_DELETE); paramMap.put("cusId", cusId); sql.append("SELECT COUNT(*) AS NUM,E.STATE FROM SC_WORKFLOW_INCIDENT E,WORKFLOW_BASE D,(SELECT B.ID,B.ROLENAME FROM AC_ROLE B WHERE B.STATE = 1 "); sqlall.append("SELECT COUNT(F.ID) FROM (SELECT E.* FROM SC_WORKFLOW_INCIDENT E,WORKFLOW_BASE D,(SELECT B.ID,B.ROLENAME FROM AC_ROLE B WHERE B.STATE = 1 "); sql.append(") C WHERE E.ID = D.BUSINESS_ID AND E.CUSTOMER_ID = :cusId AND D.CURRENT_DEAL_ROLEIDA = C.ID AND D.WFSTATE != :wfstate AND (D.CURRENT_DEALER_ID IS NULL OR D.CURRENT_DEALER_ID = '' )"); sql.append(" GROUP BY E.STATE "); sqlall.append(") C WHERE E.ID = D.BUSINESS_ID AND E.CUSTOMER_ID = :cusId AND D.CURRENT_DEAL_ROLEIDA = C.ID AND D.WFSTATE != :wfstate AND (D.CURRENT_DEALER_ID IS NULL OR D.CURRENT_DEALER_ID = '' )"); sqlall.append(" GROUP BY E.ID) F "); List list = baseDao.queryForList(sql.toString(),paramMap); if(null!=list && list.size()>0) { for(Map map : list) { String state = ConvertUtil.obj2StrBlank(map.get("STATE")); int num = ConvertUtil.obj2Int(map.get("NUM")); if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDFWT)) { fwt += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDYX)) { yxgcs += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDEX)) { exgcs += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDSX)) { sxgcs += num; continue; } } } int all = baseDao.queryForInteger(sqlall.toString(), paramMap); Map map = new HashMap(); map.put("fwt", fwt); map.put("yxgcs", yxgcs); map.put("exgcs", exgcs); map.put("sxgcs", sxgcs); map.put("all", all); return map; } @Override public Map queryincidentNodeCount(String cusId) { //初始化变量 int ywc = 0; //服务台 int fwt = 0; //一线工程师 int yxgcs = 0; //二线工程师 int exgcs = 0; //三线工程师 int sxgcs = 0; //只有服务台和管理人员才可以看到所有的工单,(所以查询当前的用户属于那种服务台) StringBuffer selectSql = new StringBuffer(); StringBuffer sql = new StringBuffer(); Map paramMap = new HashMap(); paramMap.put("cusId", cusId); selectSql.append( "SELECT COUNT(*) AS NUM,D.STATE FROM (SELECT A.* FROM SC_WORKFLOW_INCIDENT A,WORKFLOW_BASE B , WORKFLOW_NODE C WHERE B.ID = C.FLOWID AND C.FLOWSTATE = 1 AND C.CURRENT_DEALER_ID IS NOT NULL AND A.ID = B.BUSINESS_ID "); sql.append( "SELECT COUNT(D.ID) FROM (SELECT A.* FROM SC_WORKFLOW_INCIDENT A,WORKFLOW_BASE B , WORKFLOW_NODE C WHERE B.ID = C.FLOWID AND C.FLOWSTATE = 1 AND C.CURRENT_DEALER_ID IS NOT NULL AND A.ID = B.BUSINESS_ID "); selectSql.append(" AND A.CUSTOMER_ID = :cusId "); sql.append(" AND A.CUSTOMER_ID =:cusId "); selectSql.append(" GROUP BY A.ID) D GROUP BY D.STATE "); sql.append(" GROUP BY A.ID) D "); List list = baseDao.queryForList(selectSql.toString(),paramMap); if(null!=list && list.size()>0) { for(Map map : list) { String state = ConvertUtil.obj2StrBlank(map.get("STATE")); int num = ConvertUtil.obj2Int(map.get("NUM")); if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDFWT)) { fwt += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDYX)) { yxgcs += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDEX)) { exgcs += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDSX)) { sxgcs += num; continue; } } } int all = baseDao.queryForInteger(sql.toString(), paramMap); Map map = new HashMap(); map.put("fwt", fwt); map.put("yxgcs", yxgcs); map.put("exgcs", exgcs); map.put("sxgcs", sxgcs); map.put("all", all); return map; } @Override public int queryincidentOrderNodeCount(Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT COUNT(D.ID) FROM (SELECT B.* FROM SC_WORKFLOW_INCIDENT 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 "); sqlpart = getIncidentNodeSql(sqlpart,params); sql.append(sqlpart); sql.append( " GROUP BY B.ID ) D"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); return baseDao.queryForInteger(sql.toString(),params); } @Override public PageInfo queryincidentOrderNodeList(PageInfo pageInfo,Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT WB.ID,WB.ORDER_CODE,WB.WFNAME,WB.BUSINESSTYPE,WB.CREATERNAME,WB.CREATETIME,WB.WFNOTE , "); sql.append("WB.CURRENT_NODE_ID,WB.CURRENT_NODE_NAME,WB.CUSTOMER_NAME,WB.SUB_CUSTOMER_NAME,WB.PROJECT_NAME,WB.CURRENT_DEALER_NAME,WB.BUSINESS_ID,WB.WFSTATE,B.STATE ,B.NAME "); sql.append("FROM SC_WORKFLOW_INCIDENT 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 "); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); sqlpart = getIncidentNodeSql(sqlpart,params); sql.append(sqlpart); sql.append( " GROUP BY WB.ID ORDER BY WB.CREATETIME DESC "); return baseDao.queryforSplitPageInfo(pageInfo, sql.toString(), params); } public StringBuilder getIncidentNodeSql(StringBuilder sqlpart,Map params){ String cusId = params.get("cusId"); if(StringUtil.notEmpty(cusId)) { sqlpart.append(" AND B.CUSTOMER_ID = :cusId "); } String subCustomerId = params.get("subCustomerId"); if(StringUtil.notEmpty(subCustomerId)) { sqlpart.append(" AND B.SUB_CUSTOMER_ID = :subCustomerId "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { sqlpart.append(" AND B.NAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { sqlpart.append(" AND B.ORDER_CODE LIKE :orderCode "); params.put("orderCode", "%"+orderCode+"%"); } String contract = params.get("contract"); if(StringUtil.notEmpty(contract)) { sqlpart.append(" AND B.CONTACT_NAME LIKE :contract "); params.put("contract", "%"+contract+"%"); } String pri = params.get("pri"); if(StringUtil.notEmpty(pri)) { String[] pris = pri.split(","); if(pris.length==1) { sqlpart.append(" AND B.PRIORITY_ID = :priority_id"); params.put("priority_id", pris[0]); } else { sqlpart.append(" AND B.PRIORITY_ID IN ("); for(int i=0; i params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT COUNT(D.ID) FROM (SELECT B.* FROM SC_WORKFLOW_INCIDENT B,WORKFLOW_BASE WB "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType AND WB.WFSTATE = 1 "); sqlpart = getIncidentJxzSql(sqlpart,params); sql.append(sqlpart); sql.append( " GROUP BY B.ID ) D"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); return baseDao.queryForInteger(sql.toString(),params); } @Override public PageInfo queryincidentJxzList(PageInfo pageInfo,Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT WB.ID,WB.ORDER_CODE,WB.WFNAME,WB.BUSINESSTYPE,WB.CREATERNAME,WB.CREATETIME,WB.WFNOTE , "); sql.append("WB.CURRENT_NODE_ID,WB.CURRENT_NODE_NAME,WB.CUSTOMER_NAME,WB.SUB_CUSTOMER_NAME,WB.PROJECT_NAME,WB.CURRENT_DEALER_NAME,WB.BUSINESS_ID,WB.WFSTATE,B.STATE ,B.NAME "); sql.append("FROM SC_WORKFLOW_INCIDENT B,WORKFLOW_BASE WB , WORKFLOW_NODE C "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND C.FLOWID = WB.ID AND WB.BUSINESSTYPE = :businessType AND WB.WFSTATE = 1 "); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); sqlpart = getIncidentJxzSql(sqlpart,params); sql.append(sqlpart); sql.append( " GROUP BY WB.ID ORDER BY WB.CREATETIME DESC "); return baseDao.queryforSplitPageInfo(pageInfo, sql.toString(), params); } public StringBuilder getIncidentJxzSql(StringBuilder sqlpart,Map params){ String cusId = params.get("cusId"); if(StringUtil.notEmpty(cusId)) { sqlpart.append(" AND B.CUSTOMER_ID = :cusId "); } String subCustomerId = params.get("subCustomerId"); if(StringUtil.notEmpty(subCustomerId)) { sqlpart.append(" AND B.SUB_CUSTOMER_ID = :subCustomerId "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { sqlpart.append(" AND B.NAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { sqlpart.append(" AND B.ORDER_CODE LIKE :orderCode "); params.put("orderCode", "%"+orderCode+"%"); } String contract = params.get("contract"); if(StringUtil.notEmpty(contract)) { sqlpart.append(" AND B.CONTACT_NAME LIKE :contract "); params.put("contract", "%"+contract+"%"); } String pri = params.get("pri"); if(StringUtil.notEmpty(pri)) { String[] pris = pri.split(","); if(pris.length==1) { sqlpart.append(" AND B.PRIORITY_ID = :priority_id"); params.put("priority_id", pris[0]); } else { sqlpart.append(" AND B.PRIORITY_ID IN ("); for(int i=0; i list = baseDao.queryForList(selectSql.toString(),paramMap); if(null!=list && list.size()>0) { for(Map map : list) { String state = ConvertUtil.obj2StrBlank(map.get("STATE")); int num = ConvertUtil.obj2Int(map.get("NUM")); if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDFWT)||state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FWTCLZ)) { fwt += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDYX)||state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_YXCLZ)) { yxgcs += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDEX)||state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_EXCLZ)) { exgcs += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDSX)||state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_SXCLZ)) { sxgcs += num; continue; } } } int all = baseDao.queryForInteger(sql.toString(), paramMap); Map map = new HashMap(); map.put("fwt", fwt); map.put("yxgcs", yxgcs); map.put("exgcs", exgcs); map.put("sxgcs", sxgcs); map.put("all", all); return map; } @Override public int queryincidentEndCount(Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT COUNT(D.ID) FROM (SELECT B.* FROM SC_WORKFLOW_INCIDENT B,WORKFLOW_BASE WB "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType AND WB.WFSTATE = :type "); sqlpart = getEndSql(sqlpart,params); sql.append(sqlpart); sql.append( " GROUP BY B.ID ) D"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); return baseDao.queryForInteger(sql.toString(),params); } @Override public PageInfo queryincidentEndList(PageInfo pageInfo,Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT B.RESOLVE_TYPE_NAME,B.CREATE_TIME,B.CREATE_USER_NAME,WB.ID,WB.ORDER_CODE,WB.WFNAME,WB.BUSINESSTYPE,WB.CREATERNAME,WB.CREATETIME,WB.WFNOTE ,WB.ENDTIME , "); sql.append("WB.CURRENT_NODE_ID,WB.CURRENT_NODE_NAME,WB.CUSTOMER_NAME,WB.SUB_CUSTOMER_NAME,WB.PROJECT_NAME,WB.CURRENT_DEALER_NAME,WB.BUSINESS_ID,WB.WFSTATE,B.STATE ,B.NAME ,"); sql.append(" D.HANG_UP_USERNAME,D.HANG_UP_TIME,D.HANG_UP_REASON ,WB.SCORE "); sql.append("FROM (SELECT F.*,E.SCORE FROM WORKFLOW_BASE F LEFT JOIN ORDER_SATIS_INFO E ON F.ID = E.BUSINESS_ID WHERE F.BUSINESSTYPE = :businessType ) WB, WORKFLOW_NODE C ,SC_WORKFLOW_INCIDENT B LEFT JOIN HANG_UP_INFO D ON B.ID = D.BUS_ID "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND C.FLOWID = WB.ID AND WB.WFSTATE = :type "); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); sqlpart = getEndSql(sqlpart,params); sql.append(sqlpart); sql.append( " GROUP BY WB.ID ORDER BY WB.CREATETIME DESC "); return baseDao.queryforSplitPageInfo(pageInfo, sql.toString(), params); } public StringBuilder getEndSql(StringBuilder sqlpart,Map params){ String cusId = params.get("cusId"); if(StringUtil.notEmpty(cusId)) { sqlpart.append(" AND B.CUSTOMER_ID = :cusId "); } String subCustomerId = params.get("subCustomerId"); if(StringUtil.notEmpty(subCustomerId)) { sqlpart.append(" AND B.SUB_CUSTOMER_ID = :subCustomerId "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { sqlpart.append(" AND B.NAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { sqlpart.append(" AND B.ORDER_CODE LIKE :orderCode "); params.put("orderCode", "%"+orderCode+"%"); } String contract = params.get("contract"); if(StringUtil.notEmpty(contract)) { sqlpart.append(" AND B.CONTACT_NAME LIKE :contract "); params.put("contract", "%"+contract+"%"); } String pri = params.get("pri"); if(StringUtil.notEmpty(pri)) { String[] pris = pri.split(","); if(pris.length==1) { sqlpart.append(" AND B.PRIORITY_ID = :priority_id"); params.put("priority_id", pris[0]); } else { sqlpart.append(" AND B.PRIORITY_ID IN ("); for(int i=0; i list = baseDao.queryForList(selectSql.toString(),paramMap); if(null!=list && list.size()>0) { for(Map map : list) { String state = ConvertUtil.obj2StrBlank(map.get("STATE")); int num = ConvertUtil.obj2Int(map.get("NUM")); if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDFWT)||state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FWTCLZ)) { fwt += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDYX)||state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_YXCLZ)) { yxgcs += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDEX)||state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_EXCLZ)) { exgcs += num; continue; } if(state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_FPDSX)||state.equals(Constants.SC_WORKFLOW_INCIDENT_STATE_SXCLZ)) { sxgcs += num; continue; } } } int all = baseDao.queryForInteger(sql.toString(), paramMap); Map map = new HashMap(); map.put("fwt", fwt); map.put("yxgcs", yxgcs); map.put("exgcs", exgcs); map.put("sxgcs", sxgcs); map.put("all", all); return map; } @Override public int queryincidentTimeoutCount(Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT COUNT(D.ID) FROM (SELECT B.* FROM SC_WORKFLOW_INCIDENT B,WORKFLOW_BASE WB "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType AND WB.WFSTATE = 1 AND (B.ANSWER_TIME = 1 OR B.DEAL_TIMEOUT = 1 ) "); sqlpart = getIncidentTimeoutSql(sqlpart,params); sql.append(sqlpart); sql.append( " GROUP BY B.ID ) D"); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); return baseDao.queryForInteger(sql.toString(),params); } @Override public PageInfo queryincidentTimeoutList(PageInfo pageInfo,Map params) { StringBuilder sql = new StringBuilder(); StringBuilder sqlpart = new StringBuilder(); sql.append("SELECT WB.ID,WB.ORDER_CODE,WB.WFNAME,WB.BUSINESSTYPE,WB.CREATERNAME,WB.CREATETIME,WB.WFNOTE , "); sql.append("WB.CURRENT_NODE_ID,WB.CURRENT_NODE_NAME,WB.CUSTOMER_NAME,WB.SUB_CUSTOMER_NAME,WB.PROJECT_NAME,WB.CURRENT_DEALER_NAME,WB.BUSINESS_ID,WB.WFSTATE,B.STATE ,B.NAME "); sql.append("FROM SC_WORKFLOW_INCIDENT B,WORKFLOW_BASE WB "); sqlpart.append(" WHERE WB.BUSINESS_ID = B.ID AND WB.BUSINESSTYPE = :businessType AND WB.WFSTATE = 1 AND (B.ANSWER_TIME = 1 OR B.DEAL_TIMEOUT = 1 ) "); params.put("businessType", ConvertUtil.obj2StrBlank(Constants.WORKFLOW_BASE_BUSINESS_TYPE_INCIDENT)); sqlpart = getIncidentTimeoutSql(sqlpart,params); sql.append(sqlpart); sql.append( " GROUP BY WB.ID ORDER BY WB.CREATETIME DESC "); return baseDao.queryforSplitPageInfo(pageInfo, sql.toString(), params); } public StringBuilder getIncidentTimeoutSql(StringBuilder sqlpart,Map params){ String cusId = params.get("cusId"); if(StringUtil.notEmpty(cusId)) { sqlpart.append(" AND B.CUSTOMER_ID = :cusId "); } String subCustomerId = params.get("subCustomerId"); if(StringUtil.notEmpty(subCustomerId)) { sqlpart.append(" AND B.SUB_CUSTOMER_ID = :subCustomerId "); } String orderName = params.get("orderName"); if(StringUtil.notEmpty(orderName)) { sqlpart.append(" AND B.NAME LIKE :orderName "); params.put("orderName", "%"+orderName+"%"); } String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { sqlpart.append(" AND B.ORDER_CODE LIKE :orderCode "); params.put("orderCode", "%"+orderCode+"%"); } String contract = params.get("contract"); if(StringUtil.notEmpty(contract)) { sqlpart.append(" AND B.CONTACT_NAME LIKE :contract "); params.put("contract", "%"+contract+"%"); } String pri = params.get("pri"); if(StringUtil.notEmpty(pri)) { String[] pris = pri.split(","); if(pris.length==1) { sqlpart.append(" AND B.PRIORITY_ID = :priority_id"); params.put("priority_id", pris[0]); } else { sqlpart.append(" AND B.PRIORITY_ID IN ("); for(int i=0; i subCus = baseDao.queryForList(selectSubSql,paramMap); List subs = new ArrayList(); List checkSl = new ArrayList(); if(null!=subCus && subCus.size()>0){ Map cacheMap = new HashMap(); for(Map cus : subCus) { String level = ConvertUtil.obj2StrBlank(cus.get("MY_LEVEL")); String id = ConvertUtil.obj2Str(cus.get("ID")); String name = ConvertUtil.obj2StrBlank(cus.get("CUSTOMER_NAME")); if(subCustomerId.equals(id)) { cus.put("checked", 1); Map map = new HashMap(); map.put("checkId", id); map.put("checkName", name); checkSl.add(map); } else { cus.put("checked", 2); } if(level.equals("1")) { List ejList = new ArrayList(); cacheMap.put(id, ejList); cus.put("subs", ejList); subs.add(cus); continue; } if(level.equals("2")) { String pid = ConvertUtil.obj2StrBlank(cus.get("P_ID")); List ejList = (List)cacheMap.get(pid); ejList.add(cus); } } } resultMap.put("subs", subs); resultMap.put("checks", checkSl); return resultMap; } }