package cn.ksource.web.facade.tj; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.util.*; import cn.ksource.web.Constants; import cn.ksource.web.service.DataDictionaryService; import cn.ksource.web.util.ChartUtil; 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 public class QuestionStatisFacadeImpl implements QuestionStatisFacade { @Autowired private BaseDao baseDao; @Autowired private DataDictionaryService dataDictionaryService; //获取查询Map private Map getQueryMap(HttpServletRequest request){ String focus = request.getParameter("focus"); Map queryMap = new HashMap(); if(focus.equals("QUESTION_SOURCE")){//按问题来源 queryMap.put("col","SOURCE_ID"); queryMap.put("focus",focus); queryMap.put("dicCategoryKey",Constants.QUESTION_SOURCE); }else if(focus.equals("QUESTION_CLOSE")){//关闭原因 queryMap.put("col","RESOLVE_TYPE_ID"); queryMap.put("focus",focus); queryMap.put("dicCategoryKey",Constants.QUESTIONCLOSE_RESOLVE_TYPE); }else if(focus.equals("QUESTION_PRI")){//优先级 queryMap.put("col","PRIORITY_ID"); queryMap.put("focus",focus); queryMap.put("dicCategoryKey",Constants.INCIDENT_EVENT_PRI); }else if(focus.equals("QUESTION_EFFECT")){//影响度 queryMap.put("col","INFLUENCE_ID"); queryMap.put("focus",focus); queryMap.put("dicCategoryKey",Constants.EVENT_EFFECT_DG); }else if(focus.equals("QUESTION_SERVER_CATALOG")){//服务目录 String lv1Id = request.getParameter("lv1Id"); String lv2Id = request.getParameter("lv2Id"); if(StringUtil.isBlank(lv1Id)){ queryMap.put("col","FIRST_CATEGORY_ID"); }else if(StringUtil.isNotBlank(lv1Id)&&StringUtil.isBlank(lv2Id)){ queryMap.put("col","SECOND_CATEGORY_ID"); }else if(StringUtil.isNotBlank(lv2Id)){ queryMap.put("col","THIRD_CATEGORY_ID"); } queryMap.put("lv1Id",lv1Id); queryMap.put("lv2Id",lv2Id); queryMap.put("focus",focus); } return queryMap; } //获取初始化list private List getQueryTypeList(Map queryMap){ String focus = ConvertUtil.obj2StrBlank(queryMap.get("focus")); List queryTypeList = new ArrayList(); if(focus.equals("QUESTION_SOURCE")||focus.equals("QUESTION_CLOSE")||focus.equals("QUESTION_PRI")||focus.equals("QUESTION_EFFECT")){ queryTypeList = dataDictionaryService.getDataDictionaryByCategoryKey(queryMap.get("dicCategoryKey").toString()); }else if(focus.equals("QUESTION_SERVER_CATALOG")){ if(StringUtil.isBlank(queryMap.get("lv1Id").toString())){ String sql = "select ID DATAKEY,CATEGORY_NAME DATAVALUE from sc_servce_category where level=1 "; queryTypeList = baseDao.queryForList(sql); }else if(StringUtil.isNotBlank(queryMap.get("lv1Id").toString())&&StringUtil.isBlank(queryMap.get("lv2Id").toString())){ String sql = "select ID DATAKEY,CATEGORY_NAME DATAVALUE from sc_servce_category where level=2 and p_id=:lv1Id "; queryTypeList = baseDao.queryForList(sql,new SqlParameter().addValue("lv1Id", queryMap.get("lv1Id").toString())); }else if(StringUtil.isNotBlank(queryMap.get("lv2Id").toString())) { String sql = "select ID DATAKEY,CATEGORY_NAME DATAVALUE from sc_servce_category where level=3 and p_id=:lv2Id "; queryTypeList = baseDao.queryForList(sql,new SqlParameter().addValue("lv2Id", queryMap.get("lv2Id").toString())); } } return queryTypeList; } @Override public List questionTypePie(HttpServletRequest request) { String cusId = request.getParameter("cusId"); String frequency = request.getParameter("frequency"); String beginTime = request.getParameter("beginTime"); String endTime = request.getParameter("endTime"); if(!StringUtil.notEmptyNum(frequency)) { frequency = "2"; } if(frequency.equals("1")) { beginTime = beginTime.replace("-", "")+"01"; endTime = endTime.replace("-", "")+"31"; } else { beginTime = beginTime.replace("-", ""); endTime = endTime.replace("-", ""); } //获取初始化LIST Map queryMap = getQueryMap(request); List list = getQueryTypeList(queryMap); List dataList = getQueryList_Pie(request,queryMap); //组装数据 List listResult = new ArrayList(); if(list!=null&&list.size() > 0){ for(Map resMap:list){ List pieDate = new ArrayList(); resMap.put("num", 0); if(dataList!=null&&dataList.size()>0){ for(Map tempMap:dataList){ if(tempMap.get("COLKEY").toString().equals(resMap.get("DATAKEY").toString())){ resMap.put("num", tempMap.get("NUM")); break; } } } pieDate.add(resMap.get("DATAVALUE")); pieDate.add(resMap.get("num")); listResult.add(pieDate); } } System.out.println("JSON---------------------->"+JsonUtil.list2Json(listResult)); return listResult; } @Override public Map questionTypeLine(HttpServletRequest request) { String frequency = request.getParameter("frequency"); String beginTime = request.getParameter("beginTime"); String endTime = request.getParameter("endTime"); if(!StringUtil.notEmptyNum(frequency)) { frequency = "2"; } List categories = new ArrayList();//获取X轴数据 if(frequency.equals("1")) { categories = DateUtil.getBetweenTwoDateList(beginTime, endTime, 1, "yyyyMM"); } else { categories = DateUtil.getBetweenTwoDateList(beginTime, endTime, 2, "yyyyMMdd"); } Map queryMap = getQueryMap(request); List types = getQueryTypeList(queryMap); List typeMsg = getQueryList_Line(request,queryMap); Map cacheMap = new HashMap(); if(null!=typeMsg && typeMsg.size()>0) { for(Map msg : typeMsg) { String typeId = ConvertUtil.obj2StrBlank(msg.get("COLKEY")); int num = ConvertUtil.obj2Int(msg.get("NUM")); String time = ConvertUtil.obj2StrBlank(msg.get("DC_TIME")); String key = time + "-" + typeId; cacheMap.put(key, num); } } List resultList = new ArrayList(); if(null!=types && types.size()>0) { for(Map t : types) { Map newMap = new HashMap(); String key = ConvertUtil.obj2StrBlank(t.get("DATAKEY")); String name = ConvertUtil.obj2StrBlank(t.get("DATAVALUE")); newMap.put("name", name); List list = new ArrayList(); for(String cate : categories) { String unitKey = cate + "-" + key; if(cacheMap.containsKey(unitKey)) { list.add(cacheMap.get(unitKey)); } else { list.add(0); } } newMap.put("data", list); resultList.add(newMap); } } //System.out.println(JsonUtil.list2Json(resultList)); Map resultMap = new HashMap(); resultMap.put("cate", categories); resultMap.put("data", resultList); resultMap.put("step", Math.ceil(categories.size()/8)); System.out.println("line-------------->"+JsonUtil.map2Json(resultMap)); return resultMap; } //获取饼状图查询结果 private List getQueryList_Pie(HttpServletRequest request,Map queryMap){ String cusId = request.getParameter("cusId"); String frequency = request.getParameter("frequency"); String beginTime = request.getParameter("beginTime"); String endTime = request.getParameter("endTime"); String queryType = request.getParameter("queryType"); List queryList = new ArrayList(); Map paramMap = new HashMap(); StringBuilder buffer = new StringBuilder("SELECT $KEY as COLKEY,COUNT(C.ID) AS NUM FROM SC_WORKFLOW_QUESTION C WHERE state!=7 "); if(StringUtil.notEmpty(queryType)){ buffer = new StringBuilder("SELECT $KEY as COLKEY,COUNT(C.ID) AS NUM FROM SC_WORKFLOW_QUESTION C WHERE 1=1 "); } if(StringUtil.notEmpty(cusId) ) { buffer.append(" AND CUSTOMER_ID = :cusId "); paramMap.put("cusId", cusId); } if(StringUtil.notEmpty(frequency)) { buffer.append(" AND C.CREATE_TIME >= :beginTime AND C.CREATE_TIME <= :endTime "); if(frequency.equals("1")) { paramMap.put("beginTime", beginTime+"01000000"); paramMap.put("endTime", endTime+"31240000"); } else { paramMap.put("beginTime", beginTime+"000000"); paramMap.put("endTime", endTime+"240000"); } } if(ConvertUtil.obj2StrBlank(queryMap.get("focus")).equals("QUESTION_CLOSE")){ buffer.append(" and state = 7 "); } buffer.append(" and $KEY is not null "); buffer.append(" GROUP BY $KEY "); String sql = buffer.toString().replace("$KEY", ConvertUtil.obj2StrBlank(queryMap.get("col"))); List dataList = baseDao.queryForList(sql, paramMap); return dataList; } //获取线形图查询结果 private List getQueryList_Line(HttpServletRequest request,Map queryMap){ String cusId = request.getParameter("cusId"); String frequency = request.getParameter("frequency"); String beginTime = request.getParameter("beginTime"); String endTime = request.getParameter("endTime"); String queryType = request.getParameter("queryType"); Map paramMap = new HashMap(); StringBuilder builder = new StringBuilder(""); if(frequency.equals("2")) { builder = builder.append("SELECT $KEY COLKEY,COUNT(C.ID) AS NUM,DATE_FORMAT(C.CREATE_TIME,'%Y-%m-%d') AS DC_TIME FROM SC_WORKFLOW_QUESTION C WHERE 1=1"); } else { builder = builder.append("SELECT $KEY COLKEY,COUNT(C.ID) AS NUM,DATE_FORMAT(C.CREATE_TIME,'%Y-%m') AS DC_TIME FROM SC_WORKFLOW_QUESTION C WHERE 1=1 "); } if(StringUtil.isBlank(queryType)){ builder.append(" AND state!=7 "); } if(StringUtil.notEmpty(cusId)) { builder.append(" AND C.CUSTOMER_ID = :cusId AND C.CUSTOMER_ID = :cusId "); paramMap.put("cusId", cusId); } if(StringUtil.notEmpty(beginTime) && StringUtil.notEmpty(endTime)) { beginTime = beginTime.replaceAll("-", ""); endTime = endTime.replaceAll("-", ""); builder.append(" AND C.CREATE_TIME>=:beginTime AND C.CREATE_TIME <=:endTime "); if(frequency.equals("1")) { paramMap.put("beginTime", beginTime+"01000000"); paramMap.put("endTime", endTime+"31240000"); } else { paramMap.put("beginTime", beginTime+"000000"); paramMap.put("endTime", endTime+"240000"); } } builder.append(" and $KEY is not null "); builder.append(" GROUP BY $KEY,DC_TIME "); String sql = builder.toString().replace("$KEY", ConvertUtil.obj2StrBlank(queryMap.get("col"))); return baseDao.queryForList(sql,paramMap); } /** * 获取组装sql * @param sql * @param categoryKey 数据字典分类key * @param tempSql 临时sql * @param column 列名称 * @param tempTableName 临时表名称 * @param flag 标示 * @return 组装后sql */ private StringBuilder getPartSql(StringBuilder sql,String numName,String categoryKey,String tempSql, String column,String tempTableName,String flag,String cusId){ sql.append(" left join "); sql.append(" ( "); sql.append(" select mdate,GROUP_CONCAT(num order by ordernum asc) "+numName+" from "); sql.append(" ( "); sql.append(" select count(i.ID) num,mdate,datakey,ordernum from "); sql.append(" ( "); sql.append(" select DATAKEY,mdate,ordernum from "); sql.append(" (select DATE_FORMAT(HAPPEN_TIME,'%Y%m%d') mdate from SC_WORKFLOW_INCIDENT_question group by mdate ) d,"); sql.append(" ( "); if(StringUtil.isNotBlank(categoryKey)){ sql = getDicSql(sql,categoryKey); }else{ sql.append(tempSql); } sql.append(" ) c "); sql.append(" ) b "); sql.append(" left join "); if(flag.equals("1")){ sql.append("( select * from SC_WORKFLOW_INCIDENT_question "); if(StringUtil.isNotBlank(cusId)){ sql.append(" where CUSTOMER_ID = :cusId "); } sql.append(" ) "); }else{ sql = getStateSql(sql,cusId); } sql.append(" i on i."+column+" = b.DATAKEY and DATE_FORMAT(i.HAPPEN_TIME,'%Y%m%d')=b.mdate "); sql.append(" group by b.mdate,b.datakey "); sql.append(" ) t group by mdate "); sql.append(" ) "+tempTableName); sql.append(" on "+tempTableName+".mdate = mtotal.mdate "); return sql; } /** * 获取数据字典查询sql * @param sql * @param categoryKey * @return */ private StringBuilder getDicSql(StringBuilder sql,String categoryKey){ sql.append(" select d.DATAKEY,d.ordernum from CONFIG_DATA_DICTIONARY d "); sql.append(" inner join CONFIG_DATA_DICTIONARY_CATEGORY cate "); sql.append(" on d.CATEGORYID = cate.ID "); sql.append(" where cate.CATEGORYKEY='"+categoryKey+"'"); return sql; } /** * 获取事件状态sql * @param sql * @return */ private StringBuilder getStateSql(StringBuilder sql,String cusId){ sql.append(" ("); sql.append(" select c.CUSTOMER_ID,c.id,n.FLOWSTATE,c.HAPPEN_TIME from SC_WORKFLOW_INCIDENT_question c "); sql.append(" inner join workflow_base b on c.flow_id = b.id "); sql.append(" inner JOIN workflow_node n on b.CURRENT_NODE_ID = n.id "); if(StringUtil.isNotBlank(cusId)){ sql.append(" where c.CUSTOMER_ID = :cusId "); } sql.append(" )"); return sql; } private List getDicList(String categoryKey){ String sql = " select d.DATAVALUE labelName from CONFIG_DATA_DICTIONARY d " + " inner join CONFIG_DATA_DICTIONARY_CATEGORY c on " + " d.CATEGORYID = c.ID where c.CATEGORYKEY=:categoryKey "; Map param = new HashMap(); param.put("categoryKey",categoryKey); return baseDao.queryForList(sql,param); } public List getCiCategoryList(String lv1Id){ StringBuilder sql = new StringBuilder(); Map param = new HashMap(); param.put("lv1Id", lv1Id); sql.append(" select id,CATEGORY_NAME name from sc_servce_category "); sql.append(" where STATE=1 "); if(StringUtil.isBlank(lv1Id)){ sql.append(" and LEVEL =1 "); }else{ sql.append(" and LEVEL =2 and P_ID = :lv1Id "); } sql.append(" order by SERIAL "); return baseDao.queryForList(sql.toString(),param); } @Override public Map queryOrderClStatis(HttpServletRequest request, int type) { Map resultMap = new HashMap(); String cusId = request.getParameter("cusId"); String beginTime = request.getParameter("beginTime"); String endTime = request.getParameter("endTime"); String subCustomerId = request.getParameter("sub_customer_id"); StringBuilder builder1 = new StringBuilder("SELECT COUNT(A.ID) AS NUM,B.THIRD_CATEGORY_ID,B.THIRD_CATEGORY_NAME FROM WORKFLOW_BASE A,SC_WORKFLOW_QUESTION B WHERE A.BUSINESS_ID = B.ID AND A.WFSTATE != 5 AND A.BUSINESSTYPE = :businessType AND A.CUSTOMER_ID = :cusId AND A.CUSTOMER_ID = :cusId AND B.CREATE_TIME > :beginTime AND B.CREATE_TIME <= :endTime "); StringBuilder builder2 = new StringBuilder("SELECT COUNT(A.ID) AS NUM,B.THIRD_CATEGORY_ID,A.WFSTATE FROM WORKFLOW_BASE A,SC_WORKFLOW_QUESTION B WHERE A.BUSINESS_ID = B.ID AND A.WFSTATE != 5 AND A.BUSINESSTYPE = :businessType AND A.CUSTOMER_ID = :cusId AND A.CUSTOMER_ID = :cusId AND B.CREATE_TIME > :beginTime AND B.CREATE_TIME <= :endTime "); Map paramMap = new HashMap(); if(StringUtil.notEmpty(subCustomerId)) { builder1.append(" AND A.SUB_CUSTOMER_ID = :subCustomerId "); builder2.append(" AND A.SUB_CUSTOMER_ID = :subCustomerId "); paramMap.put("subCustomerId", subCustomerId); } builder1.append(" GROUP BY B.THIRD_CATEGORY_ID "); builder2.append(" GROUP BY B.THIRD_CATEGORY_ID,A.WFSTATE "); paramMap.put("cusId", cusId); paramMap.put("cusId", cusId); paramMap.put("beginTime", beginTime+"000000"); paramMap.put("endTime", endTime+"240000"); paramMap.put("businessType", type); List list1 = baseDao.queryForList(builder1.toString(),paramMap); List list2 = baseDao.queryForList(builder2.toString(),paramMap); int total = 0; int totaljxz = 0; int totalywc = 0; int totalygb = 0; int totalypj = 0; int totalygq = 0; if(null!=list1 && list1.size()>0) { Map map2 = new HashMap(); for(Map map : list2) { String third_category_id = ConvertUtil.obj2StrBlank(map.get("THIRD_CATEGORY_ID")); String wfstate = ConvertUtil.obj2StrBlank(map.get("WFSTATE")); String unitKey = third_category_id+"-"+wfstate; String num = ConvertUtil.obj2StrBlank(map.get("NUM")); map2.put(unitKey, num); } for(Map map : list1) { int num = ConvertUtil.obj2Int(map.get("NUM")); total += num; String third_category_id = ConvertUtil.obj2StrBlank(map.get("THIRD_CATEGORY_ID")); String unitKey1 = third_category_id+"-1"; int jxz = 0; if(map2.containsKey(unitKey1)) { jxz = ConvertUtil.obj2Int(map2.get(unitKey1)); } map.put("jxz", jxz); totaljxz+=jxz; int ywc = 0; String unitKey2 = third_category_id+"-2"; if(map2.containsKey(unitKey2)) { ywc = ConvertUtil.obj2Int(map2.get(unitKey2)); } map.put("ywc", ywc); totalywc += ywc; int ygb = 0; String unitKey3 = third_category_id+"-3"; if(map2.containsKey(unitKey3)) { ygb = ConvertUtil.obj2Int(map2.get(unitKey3)); } map.put("ygb", ygb); totalygb += ygb; int ypj = 0; String unitKey4 = third_category_id+"-4"; if(map2.containsKey(unitKey4)) { ypj = ConvertUtil.obj2Int(map2.get(unitKey4)); } map.put("ypj", ypj); totalypj += ypj; int ygq = 0; String unitKey6 = third_category_id+"-6"; if(map2.containsKey(unitKey6)) { ygq = ConvertUtil.obj2Int(map2.get(unitKey6)); } map.put("ygq", ygq); totalygq += ygq; } } resultMap.put("reports", list1); resultMap.put("totaljxz", totaljxz); resultMap.put("totalywc", totalywc); resultMap.put("totalygb", totalygb); resultMap.put("totalypj", totalypj); resultMap.put("totalygq", totalygq); resultMap.put("total", total); System.out.println(JsonUtil.map2Json(resultMap)); return resultMap; } @Override public List queryQuestiontDclStatis(String cusId,String subCustomerId,String beginTime,String endTime) { Map paramMap = new HashMap(); //通过项目编号,查询该项目的所有的服务目录 StringBuilder builder1 = new StringBuilder("SELECT COUNT(ID) AS NUM,THIRD_CATEGORY_ID,THIRD_CATEGORY_NAME,SECOND_CATEGORY_NAME,FIRST_CATEGORY_NAME FROM SC_WORKFLOW_QUESTION WHERE state!=7 and CUSTOMER_ID = :cusId AND CUSTOMER_ID = :cusId AND CREATE_TIME > :beginTime AND CREATE_TIME <= :endTime " ); StringBuilder builder2 = new StringBuilder("SELECT THIRD_CATEGORY_ID,RESOLVE_TIME,WANT_DEAL_TIME FROM SC_WORKFLOW_QUESTION WHERE state!=7 and CUSTOMER_ID = :cusId AND CUSTOMER_ID = :cusId AND CREATE_TIME > :beginTime AND CREATE_TIME <= :endTime "); if(StringUtil.notEmpty(subCustomerId)) { builder1.append(" AND SUB_CUSTOMER_ID = :subCustomerId "); builder2.append(" AND SUB_CUSTOMER_ID = :subCustomerId "); paramMap.put("subCustomerId", subCustomerId); } String endSql = " GROUP BY THIRD_CATEGORY_ID "; builder1.append(endSql); paramMap.put("cusId", cusId); paramMap.put("cusId", cusId); paramMap.put("beginTime", beginTime+"000000"); paramMap.put("endTime", endTime+"240000"); List list1 = baseDao.queryForList(builder1.toString(),paramMap); List list2 = baseDao.queryForList(builder2.toString(),paramMap); if(null!=list1 && list1.size()>0) { Map map2 = new HashMap(); for(Map map : list2) { String third_category_id = ConvertUtil.obj2StrBlank(map.get("THIRD_CATEGORY_ID")); String time = ConvertUtil.obj2StrBlank(map.get("RESOLVE_TIME")); if(!StringUtil.notEmpty(time)) { time = DateUtil.getToday("yyyyMMdd"); } else { time = DateUtil.format("yyyyMMdd", time); } String requestTime = ConvertUtil.obj2StrBlank(map.get("WANT_DEAL_TIME")); if(ConvertUtil.obj2Int(requestTime) < ConvertUtil.obj2Int(time)) { if(map2.containsKey(third_category_id)) { int num = ConvertUtil.obj2Int(map2.get(third_category_id)); map2.put(third_category_id, num+1); } else { map2.put(third_category_id, 1); } } } for(Map map : list1) { String thirdCategoryId = ConvertUtil.obj2StrBlank(map.get("THIRD_CATEGORY_ID")); int num = 0; if(map2.containsKey(thirdCategoryId)) { num = ConvertUtil.obj2Int(map2.get(thirdCategoryId)); } map.put("cs", num); int total = ConvertUtil.obj2Int(map.get("NUM")); double jjl = NumberUtil.div(ConvertUtil.obj2Double((total-num)), ConvertUtil.obj2Double(total), 3); jjl = NumberUtil.mul(jjl, ConvertUtil.obj2Double(100)); map.put("jjl", jjl); } } System.out.println(JsonUtil.list2Json(list1)); return list1; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @Override public Map queryDetailReport(String cusId,String beginDay,String endDay) { Map paramMap = new HashMap(); paramMap.put("cusId", cusId); paramMap.put("beginDay", beginDay+"000000"); paramMap.put("endDay", endDay+"666666"); //定义报表变量 List lebalList = new ArrayList(); List> dataList = new ArrayList>(); //查询数据 StringBuilder builder = new StringBuilder(); builder.append(" SELECT q.NAME,q.DESCRIP,q.CONTACT_NAME,q.CONTACT_PHONE,q.SOURCE_NAME,q.THIRD_CATEGORY_NAME,q.SECOND_CATEGORY_NAME,q.FIRST_CATEGORY_NAME,DATE_FORMAT(q.WANT_DEAL_TIME,'%Y-%m-%d') WANT_DEAL_TIME, "); builder.append(" q.PRIORITY_NAME,q.INFLUENCE_NAME,q.STATE,q.RESOLVE_TYPE_NAME,q.RESOLVE,t.CREATE_USER_NAME,DATE_FORMAT(t.CREATE_TIME,'%Y-%m-%d') CREATE_TIME,IFNULL(t.deal_time,0) deal_time "); builder.append(" from SC_WORKFLOW_QUESTION q "); builder.append(" LEFT JOIN ( "); builder.append(" select z.CREATE_USER_NAME,z.CREATE_TIME,b.ID,truncate(TIMESTAMPDIFF(SECOND, b.CREATETIME, b.ENDTIME)*1000,0) deal_time from QUESTION_ZD_HISTORY z,workflow_base b where b.ID = z.FLOWID "); builder.append(" and z.ISTHEEND =1 group by b.ID "); builder.append(" ) t on q.FLOW_ID = t.ID where q.CREATE_TIME >:beginDay and q.CREATE_TIME < :endDay "); if(StringUtil.notEmpty(cusId)){ builder.append(" and q.CUSTOMER_ID = :cusId "); } List baseList = baseDao.queryForList(builder.toString(),paramMap); //组织表头 lebalList.add("序号"); lebalList.add("问题名称"); lebalList.add("问题描述"); lebalList.add("联系人"); lebalList.add("联系方式"); lebalList.add("问题来源"); lebalList.add("服务目录"); lebalList.add("期望完成时间"); lebalList.add("优先级"); lebalList.add("影响程度"); lebalList.add("问题状态"); lebalList.add("解决结果"); lebalList.add("解决方案"); lebalList.add("诊断时长"); lebalList.add("诊断人"); lebalList.add("诊断时间"); //组织数据 if(baseList!=null&&baseList.size()>0){ for(Map base:baseList){ List tempList = new ArrayList(); tempList.add(ConvertUtil.obj2StrBlank(base.get("NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("DESCRIP"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("CONTACT_NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("CONTACT_PHONE"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("SOURCE_NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("FIRST_CATEGORY_NAME"))+"->"+ConvertUtil.obj2StrBlank(base.get("SECOND_CATEGORY_NAME"))+"->"+ConvertUtil.obj2StrBlank(base.get("THIRD_CATEGORY_NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("WANT_DEAL_TIME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("PRIORITY_NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("INFLUENCE_NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("STATE"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("RESOLVE_TYPE_NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("RESOLVE"))); //计算诊断时长 if(base.get("CREATE_USER_NAME")!=null){ tempList.add(DateUtil.secToTime(ConvertUtil.obj2Long(base.get("deal_time")))); }else{ tempList.add(""); } tempList.add(ConvertUtil.obj2StrBlank(base.get("CREATE_USER_NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("CREATE_TIME"))); dataList.add(tempList); } } Map res = new HashMap(); res.put("lebalList",lebalList); res.put("dataList",dataList); return res; } @Override public Map queryDealStatuReport(String cusId,String beginDay,String endDay) { Map paramMap = new HashMap(); paramMap.put("cusId", cusId); paramMap.put("beginDay", beginDay+"000000"); paramMap.put("endDay", endDay+"666666"); //定义报表变量 List lebalList = new ArrayList(); List> dataList = new ArrayList>(); //查询数据 StringBuilder builder = new StringBuilder(); builder.append(" select mtotal.THIRD_CATEGORY_NAME,mtotal.SECOND_CATEGORY_NAME,mtotal.FIRST_CATEGORY_NAME,total_num,IFNULL(answer_num,0) answer_num,IFNULL(activi_num,0) activi_num,IFNULL(finish_num,0) finish_num,IFNULL(sleep_num,0) sleep_num, "); builder.append(" IFNULL(avg_deal_time,0) avg_deal_time,truncate(IFNULL(major_num,0)*100/total_num,2) major_rate,truncate(IFNULL(finish_num, 0)*100/total_num,2) solve_rate,truncate(IFNULL(close_num, 0)*100/total_num,2) close_rate, "); builder.append(" truncate(IFNULL(repeat_num, 0)*100/total_num,2) repeat_rate,truncate(IFNULL(nosolve_num, 0)*100/total_num,2) nosolve_rate from "); builder.append(" (select THIRD_CATEGORY_NAME,SECOND_CATEGORY_NAME,FIRST_CATEGORY_NAME,count(i.id) total_num,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i,workflow_base b where b.BUSINESS_ID = i.ID and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) mtotal "); builder.append(" left join (select count(i.id) answer_num,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i,workflow_base b,(SELECT FLOWID FROM workflow_node WHERE FLOWSTATE = 1 GROUP BY FLOWID) n where b.BUSINESS_ID = i.ID AND b.id = n.FLOWID and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) manswer "); builder.append(" on mtotal.THIRD_CATEGORY_ID = manswer.THIRD_CATEGORY_ID "); builder.append(" left join (select count(i.id) activi_num,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i,workflow_base b where b.BUSINESS_ID = i.ID and b.WFSTATE=1 and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) mactivi "); builder.append(" on mtotal.THIRD_CATEGORY_ID = mactivi.THIRD_CATEGORY_ID "); builder.append(" left join (select count(i.id) finish_num,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i,workflow_base b where b.BUSINESS_ID = i.ID and b.WFSTATE=2 and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) mfinish "); builder.append(" on mtotal.THIRD_CATEGORY_ID = mfinish.THIRD_CATEGORY_ID "); builder.append(" left join (select count(i.id) sleep_num,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i,workflow_base b where b.BUSINESS_ID = i.ID and b.WFSTATE=6 and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) msleep "); builder.append(" on mtotal.THIRD_CATEGORY_ID = msleep.THIRD_CATEGORY_ID "); builder.append(" left join (select truncate(avg(TIMESTAMPDIFF(SECOND,b.CREATETIME,b.ENDTIME))*1000,0) avg_deal_time,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i,workflow_base b where i.FLOW_ID=b.ID and (b.WFSTATE=2 or b.WFSTATE=4) and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) mdeal "); builder.append(" on mtotal.THIRD_CATEGORY_ID = mdeal.THIRD_CATEGORY_ID "); builder.append(" left join (select count(id) major_num,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i where i.PRI_LEVEL='LEVEL1' and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) mmajor "); builder.append(" on mtotal.THIRD_CATEGORY_ID = mmajor.THIRD_CATEGORY_ID "); builder.append(" left join (select count(i.id) close_num,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i,workflow_base b where b.BUSINESS_ID = i.ID and b.WFSTATE=3 and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) mclose "); builder.append(" on mtotal.THIRD_CATEGORY_ID = mclose.THIRD_CATEGORY_ID "); builder.append(" left join (select count(id) repeat_num,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i where i. RESOLVE_TYPE_ID='WTCF' and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) mrepeat "); builder.append(" on mtotal.THIRD_CATEGORY_ID = mrepeat.THIRD_CATEGORY_ID "); builder.append(" left join (select count(id) nosolve_num,THIRD_CATEGORY_ID from SC_WORKFLOW_QUESTION i where i. RESOLVE_TYPE_ID='WFJJ' and i.CUSTOMER_ID=:cusId and i.CREATE_TIME>=:beginDay and i.CREATE_TIME<=:endDay group by i.THIRD_CATEGORY_ID) mnosolve "); builder.append(" on mtotal.THIRD_CATEGORY_ID = mnosolve.THIRD_CATEGORY_ID "); List baseList = baseDao.queryForList(builder.toString(),paramMap); //组织表头 lebalList.add("服务目录"); lebalList.add("问题数"); lebalList.add("待响应"); lebalList.add("进行中"); lebalList.add("已完成"); lebalList.add("挂起数"); lebalList.add("平均诊断时间"); lebalList.add("重大问题比率"); lebalList.add("成功解决率"); lebalList.add("问题取消率"); lebalList.add("问题重复率"); lebalList.add("无法解决率"); //组织数据 if(baseList!=null&&baseList.size()>0){ for(Map base:baseList){ List tempList = new ArrayList(); tempList.add(ConvertUtil.obj2StrBlank(base.get("FIRST_CATEGORY_NAME"))+"->"+ConvertUtil.obj2StrBlank(base.get("SECOND_CATEGORY_NAME"))+"->"+ConvertUtil.obj2StrBlank(base.get("THIRD_CATEGORY_NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("total_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("answer_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("activi_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("finish_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("sleep_num"))); tempList.add(DateUtil.secToTime(ConvertUtil.obj2Long(base.get("avg_deal_time")))); tempList.add(ConvertUtil.obj2StrBlank(base.get("major_rate"))+"%"); tempList.add(ConvertUtil.obj2StrBlank(base.get("solve_rate"))+"%"); tempList.add(ConvertUtil.obj2StrBlank(base.get("close_rate"))+"%"); tempList.add(ConvertUtil.obj2StrBlank(base.get("repeat_rate"))+"%"); tempList.add(ConvertUtil.obj2StrBlank(base.get("nosolve_rate"))+"%"); dataList.add(tempList); } } Map res = new HashMap(); res.put("lebalList",lebalList); res.put("dataList",dataList); return res; } @Override public Map queryEngineerDealReport(HttpServletRequest request) { String cusId = request.getParameter("cusId"); String beginDay = request.getParameter("beginDay"); String endDay = request.getParameter("endDay"); Map paramMap = new HashMap(); paramMap.put("cusId", cusId); paramMap.put("beginDay", beginDay+"000000"); paramMap.put("endDay", endDay+"666666"); List lebalList = new ArrayList(); List> dataList = new ArrayList>(); StringBuilder builder = new StringBuilder(); builder.append(" select mtotal.user_name,IFNULL(create_num,0) create_num,IFNULL(redis_num,0) redis_num,IFNULL(activi_num,0) activi_num, "); builder.append(" IFNULL(finish_num,0) finish_num,IFNULL(close_num,0) close_num,IFNULL(avg_deal_time,0) avg_deal_time,TRUNCATE(IFNULL(finish_num,0)*100/total_num,2) deal_rate, "); //查询总数 builder.append(" TRUNCATE(IFNULL(ontime_num,0)*100/total_num,2) ontime_rate,IFNULL(major_num,0) major_num from ( "); builder.append(" select count(b.ID) total_num,user_name,user_id from workflow_base b , "); builder.append(" ( "); builder.append(" SELECT FLOWID,current_dealer_id user_id,current_dealer_name user_name "); builder.append(" FROM workflow_node n,( "); builder.append(" SELECT u.USER_ID FROM SC_SERVICER_GROUP g,SC_SERVICER_GROUP_USER u "); builder.append(" WHERE g.ID = u.GROUP_ID AND CUSTOMER_ID = :cusId group by u.USER_ID "); builder.append(" ) u WHERE n.current_dealer_id = u.USER_ID GROUP BY USER_ID,FLOWID "); builder.append(" ) t where b.ID = t.FLOWID and b.BUSINESSTYPE=9 and b.CUSTOMER_ID=:cusId "); builder.append(" and b.CREATETIME>=:beginDay and b.CREATETIME<=:endDay GROUP BY t.user_id "); builder.append(" ) mtotal left join ( "); ///查询创建数 builder.append(" select count(b.ID) create_num,user_id from workflow_base b , "); builder.append(" ( "); builder.append(" SELECT u.USER_ID FROM SC_SERVICER_GROUP g,SC_SERVICER_GROUP_USER u "); builder.append(" WHERE g.ID = u.GROUP_ID AND CUSTOMER_ID = :cusId group by u.USER_ID "); builder.append(" ) t where b.CREATERID = t.user_id and b.BUSINESSTYPE=9 and b.CUSTOMER_ID=:cusId "); builder.append(" and b.CREATETIME>=:beginDay and b.CREATETIME<=:endDay GROUP BY t.user_id "); builder.append(" ) mcreate on mtotal.user_id = mcreate.user_id left join ( "); //查询分发数 builder.append(" select count(b.ID) redis_num,user_name,user_id from workflow_base b , "); builder.append(" ( "); builder.append(" SELECT FLOWID,current_dealer_id user_id,current_dealer_name user_name "); builder.append(" FROM workflow_node n,( "); builder.append(" SELECT u.USER_ID FROM SC_SERVICER_GROUP g,SC_SERVICER_GROUP_USER u "); builder.append(" WHERE g.ID = u.GROUP_ID AND CUSTOMER_ID = :cusId group by u.USER_ID "); builder.append(" ) u WHERE n.current_dealer_id = u.USER_ID GROUP BY USER_ID,FLOWID "); builder.append(" ) t where b.ID = t.FLOWID and b.CURRENT_DEALER_ID<>t.user_id and b.BUSINESSTYPE=9 and b.CUSTOMER_ID=:cusId "); builder.append(" and b.CREATETIME>=:beginDay and b.CREATETIME<=:endDay GROUP BY t.user_id "); builder.append(" ) mredis on mtotal.user_id = mredis.user_id left join ( "); //查询进行中工单 builder.append(" select count(b.ID) activi_num,user_name,user_id from workflow_base b , "); builder.append(" ( "); builder.append(" SELECT FLOWID,current_dealer_id user_id,current_dealer_name user_name "); builder.append(" FROM workflow_node n,("); builder.append(" SELECT u.USER_ID FROM SC_SERVICER_GROUP g,SC_SERVICER_GROUP_USER u "); builder.append(" WHERE g.ID = u.GROUP_ID AND CUSTOMER_ID = :cusId group by u.USER_ID "); builder.append(" ) u WHERE n.current_dealer_id = u.USER_ID and n.FLOWSTATE=2 GROUP BY FLOWID "); builder.append(" ) t where b.ID = t.FLOWID and b.BUSINESSTYPE=9 and b.CUSTOMER_ID=:cusId "); builder.append(" and b.CREATETIME>=:beginDay and b.CREATETIME<=:endDay GROUP BY t.user_id "); builder.append(" ) mactivi on mtotal.user_id = mactivi.user_id left join ( "); //查询结束工单 builder.append(" select count(b.ID) finish_num,user_id from workflow_base b , "); builder.append(" ( "); builder.append(" SELECT u.USER_ID FROM SC_SERVICER_GROUP g,SC_SERVICER_GROUP_USER u "); builder.append(" WHERE g.ID = u.GROUP_ID AND CUSTOMER_ID = :cusId group by u.USER_ID "); builder.append(" ) t where b.CURRENT_DEALER_ID = t.USER_ID and (b.WFSTATE=2 or b.WFSTATE=4) and b.BUSINESSTYPE=9 and b.CUSTOMER_ID=:cusId "); builder.append(" and b.CREATETIME>=:beginDay and b.CREATETIME<=:endDay GROUP BY t.user_id "); builder.append(" ) mfinish on mtotal.user_id = mfinish.user_id left join ( "); //查询关闭工单 builder.append(" select count(b.ID) close_num,user_id from workflow_base b , "); builder.append(" ( "); builder.append(" SELECT u.USER_ID FROM SC_SERVICER_GROUP g,SC_SERVICER_GROUP_USER u "); builder.append(" WHERE g.ID = u.GROUP_ID AND CUSTOMER_ID = :cusId group by u.USER_ID "); builder.append(" ) t where b.CURRENT_DEALER_ID = t.USER_ID and b.WFSTATE=3 and b.BUSINESSTYPE=9 and b.CUSTOMER_ID=:cusId "); builder.append(" and b.CREATETIME>=:beginDay and b.CREATETIME<=:endDay GROUP BY t.user_id "); builder.append(" ) mclose on mtotal.user_id = mclose.user_id left join ( "); //查询平均处理时间 builder.append(" select truncate(avg(TIMESTAMPDIFF(SECOND, b.CREATETIME, b.ENDTIME)*1000),0) avg_deal_time,user_id from workflow_base b , "); builder.append(" ( "); builder.append(" SELECT u.USER_ID FROM SC_SERVICER_GROUP g,SC_SERVICER_GROUP_USER u "); builder.append(" WHERE g.ID = u.GROUP_ID AND CUSTOMER_ID = :cusId group by u.USER_ID "); builder.append(" ) t where b.CURRENT_DEALER_ID = t.USER_ID and (b.WFSTATE=2 or b.WFSTATE=4) and b.BUSINESSTYPE=9 and b.CUSTOMER_ID=:cusId "); builder.append(" and b.CREATETIME>=:beginDay and b.CREATETIME<=:endDay GROUP BY t.user_id "); builder.append(" ) mavg on mtotal.user_id = mavg.user_id left join ( "); //查询解决个数 builder.append(" select count(b.id) ontime_num,user_id from workflow_base b , SC_WORKFLOW_QUESTION i , "); builder.append(" ( "); builder.append(" SELECT u.USER_ID FROM SC_SERVICER_GROUP g,SC_SERVICER_GROUP_USER u "); builder.append(" WHERE g.ID = u.GROUP_ID AND CUSTOMER_ID = :cusId group by u.USER_ID "); builder.append(" ) t where b.CURRENT_DEALER_ID = t.USER_ID and b.BUSINESS_ID = i.ID and i.DEAL_TIMEOUT=2 and (b.WFSTATE=2 or b.WFSTATE=4) "); builder.append(" and b.BUSINESSTYPE=9 and b.CUSTOMER_ID=:cusId and b.CREATETIME>=:beginDay and b.CREATETIME<=:endDay GROUP BY t.user_id "); builder.append(" ) montime on mtotal.user_id = montime.user_id left join ( "); //查询重大事件 builder.append(" select count(b.ID) major_num,user_name,user_id from workflow_base b ,SC_WORKFLOW_QUESTION i , "); builder.append(" ( "); builder.append(" SELECT FLOWID,current_dealer_id user_id,current_dealer_name user_name "); builder.append(" FROM workflow_node n,( "); builder.append(" SELECT u.USER_ID FROM SC_SERVICER_GROUP g,SC_SERVICER_GROUP_USER u "); builder.append(" WHERE g.ID = u.GROUP_ID AND CUSTOMER_ID = :cusId group by u.USER_ID "); builder.append(" ) u WHERE n.current_dealer_id = u.USER_ID GROUP BY USER_ID,FLOWID "); builder.append(" ) t where b.ID = t.FLOWID and b.ID=i.FLOW_ID and i.PRI_LEVEL='LEVEL1' and b.BUSINESSTYPE=9 and b.CUSTOMER_ID=:cusId "); builder.append(" and b.CREATETIME>=:beginDay and b.CREATETIME<=:endDay GROUP BY t.user_id "); builder.append(" ) mmajor on mtotal.user_id = mmajor.user_id "); List baseList = baseDao.queryForList(builder.toString(),paramMap); //组织表头 lebalList.add("人员"); lebalList.add("创建问题数"); lebalList.add("分配问题数"); lebalList.add("处理中"); lebalList.add("已解决问题"); lebalList.add("已关闭问题"); lebalList.add("平均问题解决时间"); lebalList.add("解决成功率"); lebalList.add("解决及时率"); lebalList.add("重大问题数"); //组织数据 if(baseList!=null&&baseList.size()>0){ for(Map base:baseList){ List tempList = new ArrayList(); tempList.add(ConvertUtil.obj2StrBlank(base.get("user_name"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("create_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("redis_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("activi_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("finish_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("close_num"))); tempList.add(DateUtil.secToTime(ConvertUtil.obj2Long(base.get("avg_deal_time")))); tempList.add(ConvertUtil.obj2StrBlank(base.get("deal_rate"))+"%"); tempList.add(ConvertUtil.obj2StrBlank(base.get("ontime_rate"))+"%"); tempList.add(ConvertUtil.obj2StrBlank(base.get("major_num"))); dataList.add(tempList); } } Map res = new HashMap(); res.put("lebalList",lebalList); res.put("dataList",dataList); return res; } @Override public Map queryStatusReport(String cusId,String beginDay,String endDay) { Map paramMap = new HashMap(); paramMap.put("cusId", cusId); paramMap.put("beginDay", beginDay+"000000"); paramMap.put("endDay", endDay+"666666"); //定义报表变量 List lebalList = new ArrayList(); List> dataList = new ArrayList>(); //查询数据 StringBuilder builder = new StringBuilder(); builder.append(" select THIRD_CATEGORY_NAME,SECOND_CATEGORY_NAME,FIRST_CATEGORY_NAME,total_num,IFNULL(answer_num,0) answer_num,IFNULL(activi_num,0) activi_num,IFNULL(sleep_num,0) sleep_num, "); builder.append(" IFNULL(finish_num,0) finish_num, IFNULL(close_num,0) close_num from ( "); builder.append(" select count(b.id) total_num,i.THIRD_CATEGORY_NAME,i.FIRST_CATEGORY_NAME,i.SECOND_CATEGORY_NAME,i.THIRD_CATEGORY_ID from workflow_base b ,SC_WORKFLOW_QUESTION i "); builder.append(" where b.BUSINESS_ID = i.ID and b.createtime >:beginDay and b.createtime <:endDay and b.BUSINESSTYPE = 9 and b.CUSTOMER_ID = :cusId "); builder.append(" GROUP BY I.THIRD_CATEGORY_ID "); builder.append(" ) mtotal left join ( "); builder.append(" select count(b.id) answer_num,i.THIRD_CATEGORY_ID from workflow_base b ,SC_WORKFLOW_QUESTION i,( "); builder.append(" select FLOWID from workflow_node where FLOWSTATE = 1 group by FLOWID "); builder.append(" ) n where b.BUSINESS_ID = i.ID and b.id = n.FLOWID and b.createtime >:beginDay and b.createtime <:endDay and b.BUSINESSTYPE = 9 and b.CUSTOMER_ID = :cusId "); builder.append(" GROUP BY I.THIRD_CATEGORY_ID "); builder.append(" ) manswer on mtotal.THIRD_CATEGORY_ID = manswer.THIRD_CATEGORY_ID left join ( "); builder.append(" select count(b.id) activi_num,i.THIRD_CATEGORY_ID from workflow_base b ,SC_WORKFLOW_QUESTION i "); builder.append(" where b.BUSINESS_ID = i.ID and b.createtime >:beginDay and b.createtime <:endDay and b.BUSINESSTYPE = 9 and b.CUSTOMER_ID = :cusId "); builder.append(" and b.WFSTATE=1 GROUP BY I.THIRD_CATEGORY_ID "); builder.append(" ) mactivi on mtotal.THIRD_CATEGORY_ID = mactivi.THIRD_CATEGORY_ID left join ( "); builder.append(" select count(b.id) sleep_num,i.THIRD_CATEGORY_ID from workflow_base b ,SC_WORKFLOW_QUESTION i "); builder.append(" where b.BUSINESS_ID = i.ID and b.createtime >:beginDay and b.createtime <:endDay and b.BUSINESSTYPE = 9 and b.CUSTOMER_ID = :cusId "); builder.append(" and b.WFSTATE=6 GROUP BY I.THIRD_CATEGORY_ID "); builder.append(" ) msleep on mtotal.THIRD_CATEGORY_ID = msleep.THIRD_CATEGORY_ID left join ( "); builder.append(" select count(b.id) finish_num,i.THIRD_CATEGORY_ID from workflow_base b ,SC_WORKFLOW_QUESTION i "); builder.append(" where b.BUSINESS_ID = i.ID and b.createtime >:beginDay and b.createtime <:endDay and b.BUSINESSTYPE = 9 and b.CUSTOMER_ID = :cusId "); builder.append(" and (b.WFSTATE=2 or b.WFSTATE=4) GROUP BY I.THIRD_CATEGORY_ID "); builder.append(" ) mfinish on mtotal.THIRD_CATEGORY_ID = mfinish.THIRD_CATEGORY_ID left join ( "); builder.append(" select count(b.id) close_num,i.THIRD_CATEGORY_ID from workflow_base b ,SC_WORKFLOW_QUESTION i "); builder.append(" where b.BUSINESS_ID = i.ID and b.createtime >:beginDay and b.createtime <:endDay and b.BUSINESSTYPE = 9 and b.CUSTOMER_ID = :cusId "); builder.append(" and b.WFSTATE=3 GROUP BY I.THIRD_CATEGORY_ID "); builder.append(" ) mclose on mtotal.THIRD_CATEGORY_ID = mclose.THIRD_CATEGORY_ID "); List baseList = baseDao.queryForList(builder.toString(),paramMap); //组织表头 lebalList.add("服务目录"); lebalList.add("问题总数"); lebalList.add("待响应"); lebalList.add("进行中"); lebalList.add("已挂起"); lebalList.add("已解决"); lebalList.add("已取消"); //组织数据 if(baseList!=null&&baseList.size()>0){ for(Map base:baseList){ List tempList = new ArrayList(); tempList.add(ConvertUtil.obj2StrBlank(base.get("FIRST_CATEGORY_NAME"))+"->"+ConvertUtil.obj2StrBlank(base.get("SECOND_CATEGORY_NAME"))+"->"+ConvertUtil.obj2StrBlank(base.get("THIRD_CATEGORY_NAME"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("total_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("answer_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("activi_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("sleep_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("finish_num"))); tempList.add(ConvertUtil.obj2StrBlank(base.get("close_num"))); dataList.add(tempList); } } Map res = new HashMap(); res.put("lebalList",lebalList); res.put("dataList",dataList); return res; } //////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * 将数据字典转化成DataKeyMap * @author chenlong * @param dicList * @return */ private Map dicListToDataKeyMap(List dicList){ Map dataKeyMap = new HashMap(); for(Map dic:dicList){ dataKeyMap.put(ConvertUtil.obj2StrBlank(dic.get("DATAKEY")),ConvertUtil.obj2StrBlank(dic.get("DATAVALUE"))); } return dataKeyMap; } /** * 格式化数据字典 * @author chenlong * @param dicList */ private void formatDicList(List dicList){ for(Map dic:dicList){ dic.put("key", ConvertUtil.obj2StrBlank(dic.get("DATAKEY"))); dic.put("val", ConvertUtil.obj2StrBlank(dic.get("DATAVALUE"))); } } /** * 组织时间查询条件 * @author chenlong * @param frequency * @param sql * @param colName */ private void getDateWhereSql(String frequency,StringBuilder sql,String colName){ if(frequency.equals("day")||frequency==null){ sql.append(" and date_format("+colName+",'%Y%m%d')>=:startDate and date_format("+colName+",'%Y%m%d')<=:endDate "); }else if(frequency.equals("month")){ sql.append(" and date_format("+colName+",'%Y%m')>=:startDate and date_format("+colName+",'%Y%m')<=:endDate "); } } @Override public Map questionSourcePie(String frequency, String cusId,String startDate, String endDate) { SqlParameter param = new SqlParameter(); param.addValue("cusId", cusId) .addValue("startDate", startDate) .addValue("endDate", endDate); List categoryList = dataDictionaryService.getDataDictionaryByCategoryKey(Constants.QUESTION_SOURCE); formatDicList(categoryList); StringBuilder sql = new StringBuilder(); sql.append(" select count(id) val,source_id category from sc_workflow_question where 1=1 "); if(StringUtil.isNotBlank(cusId)){ sql.append(" and customer_id = :cusId "); } getDateWhereSql(frequency,sql,"create_time"); sql.append(" group by source_id "); List datas = baseDao.queryForList(sql.toString(),param); return ChartUtil.createHchartPieMap(datas,categoryList,"数量"); } @Override public Map questionCloseCol(String frequency, String cusId,String startDate, String endDate) { SqlParameter param = new SqlParameter(); param.addValue("cusId", cusId) .addValue("startDate", startDate) .addValue("endDate", endDate); List dicList = dataDictionaryService.getDataDictionaryByCategoryKey(Constants.QUESTIONCLOSE_RESOLVE_TYPE); Map dataKeyMap = dicListToDataKeyMap(dicList); StringBuilder sql = new StringBuilder(); sql.append(" select count(id) val,resolve_type_id datakey,1 as category from sc_workflow_question where resolve_type_id is not null "); if(StringUtil.isNotBlank(cusId)){ sql.append(" and customer_id = :cusId "); } getDateWhereSql(frequency,sql,"create_time"); sql.append(" group by resolve_type_id "); List datas = baseDao.queryForList(sql.toString(),param); Map categoryMap = new HashMap(); categoryMap.put("key", "1"); categoryMap.put("val", "数量"); List categoryList = new ArrayList(); categoryList.add(categoryMap); return ChartUtil.createHchartLineMap(datas,categoryList,dataKeyMap,0.0); } @Override public Map questionPriPie(String frequency, String cusId, String startDate,String endDate) { SqlParameter param = new SqlParameter(); param.addValue("cusId", cusId) .addValue("startDate", startDate) .addValue("endDate", endDate); List categoryList = dataDictionaryService.getDataDictionaryByCategoryKey(Constants.INCIDENT_EVENT_PRI); formatDicList(categoryList); StringBuilder sql = new StringBuilder(); sql.append(" select count(id) val,priority_id category from sc_workflow_question where 1=1 "); if(StringUtil.isNotBlank(cusId)){ sql.append(" and customer_id = :cusId "); } getDateWhereSql(frequency,sql,"create_time"); sql.append(" group by priority_id "); List datas = baseDao.queryForList(sql.toString(),param); return ChartUtil.createHchartPieMap(datas,categoryList,"数量"); } @Override public Map questionInfluenceCol(String frequency, String cusId,String startDate, String endDate) { SqlParameter param = new SqlParameter(); param.addValue("cusId", cusId) .addValue("startDate", startDate) .addValue("endDate", endDate); List dicList = dataDictionaryService.getDataDictionaryByCategoryKey(Constants.EVENT_EFFECT_DG); Map dataKeyMap = dicListToDataKeyMap(dicList); StringBuilder sql = new StringBuilder(); sql.append(" select count(id) val,influence_id datakey,1 as category from sc_workflow_question where 1=1 "); if(StringUtil.isNotBlank(cusId)){ sql.append(" and customer_id = :cusId "); } getDateWhereSql(frequency,sql,"create_time"); sql.append(" group by influence_id "); List datas = baseDao.queryForList(sql.toString(),param); Map categoryMap = new HashMap(); categoryMap.put("key", "1"); categoryMap.put("val", "数量"); List categoryList = new ArrayList(); categoryList.add(categoryMap); return ChartUtil.createHchartLineMap(datas,categoryList,dataKeyMap,0.0); } }