package cn.ksource.web.facade.uc.order; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.page.PageInfo; import cn.ksource.core.util.StringUtil; import cn.ksource.core.util.TreeUtil; import cn.ksource.core.web.WebUtil; import cn.ksource.web.Constants; import cn.ksource.web.facade.incident.IncidentFacade; import cn.ksource.web.service.file.FileService; @Service("ucHealthFacade") public class UcHealthFacadeImpl implements UcHealthFacade { @Autowired private BaseDao baseDao; @Autowired private IncidentFacade incidentFacade; @Resource private FileService fileService; @Override public int queryHealthOrderCount(Map params) { StringBuilder builder = new StringBuilder(); builder = getAllHealthSql(params); String sql = "select count(*) from ( " + builder.toString() + " ) t" ; return baseDao.queryForInteger(sql.toString(),params); } @Override public PageInfo queryHealthOrderList(PageInfo pageInfo, Map params) { StringBuilder builder = new StringBuilder(); builder = getAllHealthSql(params); return baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params); } /** * 服务台工单列表 * @param request * @return */ private StringBuilder getAllHealthSql(Map params){ String flowState = params.get("flowState"); String subCustomerId = params.get("subCustomerId"); StringBuilder builder = new StringBuilder(); builder.append(" select b.ID FLOWID,b.WFNAME,b.CREATERNAME,b.CREATETIME,b.CURRENT_NODE_NAME,b.BUSINESSTYPE, "); builder.append(" r.ORDER_CODE,r.ID ORDERID,r.CI_RUN_NOTE,b.CUSTOMER_NAME,b.SUB_CUSTOMER_NAME,B.WFSTATE "); builder.append(" from SC_WORKFLOW_CI_HEALTH r "); builder.append(" inner join WORKFLOW_BASE B on r.FLOW_ID = b.ID "); builder.append(" where b.BUSINESSTYPE = :businessType "); //工单状态 if(StringUtil.notEmpty(flowState)) { builder.append(" AND b.WFSTATE =:flowState "); } builder.append(" AND r.CUSTOMER_ID = :customer_Id "); //客户 //下属单位 if(StringUtil.isNotBlank(subCustomerId)) { builder.append(" AND b.SUB_CUSTOMER_ID = :subCustomerId "); } //工单编号 String orderCode = params.get("orderCode"); if(StringUtil.notEmpty(orderCode)) { builder.append(" AND r.ORDER_CODE LIKE :orderCode"); params.put("orderCode", "%"+params.get("orderCode")+"%"); } return builder; } @Override public List getCiPatrolItem(String orderId) { StringBuilder sql = new StringBuilder(); SqlParameter param = new SqlParameter("orderId",orderId); sql.append(" select b.LV3_ID CATEID,b.id CIID,d.id,b.CINAME text,'' as parentId from SC_WORKFLOW_CI_HEALTH_CIDETAIL d ") ; sql.append(" inner join cmdb_ci_base b on d.CI_ID = b.ID "); sql.append(" where d.CI_ID = b.ID and d.ORDER_ID = :orderId "); List categoryList = baseDao.queryForList(sql.toString(),param); sql.setLength(0); sql.append(" select d.ORDER_CI_ID cateId,d.id,d.DEAL_STATE,d.USER_NAME,d.ITEM_RESULT,i.ITEM_NAME from SC_WORKFLOW_ITEM_HEALTH_CIDETAIL d "); sql.append(" inner join CI_HEALTH_ITEM i "); sql.append(" on d.ITEM_ID = i.ID "); sql.append(" where ORDER_ID = :orderId "); List dataList = baseDao.queryForList(sql.toString(),param); TreeUtil treeUtil = new TreeUtil(); List list = treeUtil.createTreeByCate(categoryList, dataList); return list; } @Override public Map getPatrolItemInfo(String patrolItemId) { String sql = " select * from SC_WORKFLOW_ITEM_HEALTH_CIDETAIL where id = :patrolItemId "; return baseDao.queryForMap(sql,new SqlParameter("patrolItemId",patrolItemId)); } @Override public Map getHealthReportInfo(String orderId, String flowId) { Map healthInfo = new HashMap(); SqlParameter param = new SqlParameter(); param.addValue("orderId", orderId) .addValue("flowId", flowId) .addValue("managerNodeId", Constants.HEALTH_APPROVE) .addValue("engineerNodeId", Constants.HEALTH_PATROL); StringBuilder sql = new StringBuilder(); //查询基本信息 sql.append(" select * from SC_WORKFLOW_CI_HEALTH where id=:orderId "); Map baseInfo = baseDao.queryForMap(sql.toString(),param); //查询设备信息 sql.setLength(0); sql.append(" select c.id,c.name from ( "); sql.append(" select c.PID from SC_WORKFLOW_CI_HEALTH_CATEGORY h inner join cmdb_ci_category c "); sql.append(" on h.LV3_CATE_ID = c.ID "); sql.append(" where h.BUS_ID =:orderId "); sql.append(" group by c.PID "); sql.append(" ) t inner join cmdb_ci_category c on t.pid = c.id "); List categoryList = baseDao.queryForList(sql.toString(),param); if(categoryList!=null&&categoryList.size()>0){ sql.setLength(0); sql.append(" select c.PID cateId,c.name,h.TOTAL_NUM totalnum,h.TRUE_NUM realnum,(h.ALERT_NUM+h.ERROR_NUM) warnnum,truncate(((h.ALERT_NUM+h.ERROR_NUM)*100/h.TRUE_NUM),2) warnrate "); sql.append(" from SC_WORKFLOW_CI_HEALTH_CATEGORY h inner join cmdb_ci_category c "); sql.append(" on h.LV3_CATE_ID = c.ID where h.BUS_ID =:orderId "); List dataList =baseDao.queryForList(sql.toString(),param); TreeUtil treeUtil = new TreeUtil(); List cateList = treeUtil.createTreeByCate(categoryList, dataList); healthInfo.put("cateList", cateList); } List commonList = this.getCommonPatrolItem(orderId); //查询告警异常设备 sql.setLength(0); sql.append(" select b.SEARCHCODE,b.CINAME,b.POSITION,h.ORDER_NOTE from SC_WORKFLOW_CI_HEALTH_CIDETAIL h "); sql.append(" inner join cmdb_ci_base b on h.CI_ID = b.ID "); sql.append(" where (h.CI_STATE=2 or h.CI_STATE=3) and h.ORDER_ID=:orderId "); List ciList =baseDao.queryForList(sql.toString(),param); //项目经理环节信息 sql.setLength(0); sql.append(" select DEAL_NOTE,DEALTIME,CURRENT_DEALER_NAME from workflow_node "); sql.append(" where NODE_TEMPLATE_ID=:managerNodeId and FLOWID =:flowId order by CREATETIME desc LIMIT 1 "); Map approveNodeInfo = baseDao.queryForMap(sql.toString(),param); //工程师执行环节信息 sql.setLength(0); sql.append(" select b.ENDTIME,n.CREATETIME,g.SJHM,n.DEALTIME,n.CURRENT_DEALER_NAME from workflow_node n "); sql.append(" inner join gg_user g on n.CURRENT_DEALER_ID = g.ID "); sql.append(" inner join workflow_base b on b.id = n.FLOWID "); sql.append(" where n.IS_ADMIN=1 and n.NODE_TEMPLATE_ID=:engineerNodeId and n.FLOWID =:flowId order by CREATETIME desc LIMIT 1 "); Map engineerNodeInfo = baseDao.queryForMap(sql.toString(),param); //查询关联工单信息 List linkOrders = incidentFacade.queryOrders(flowId); //查询附件信息 List fileList = fileService.getFileList(flowId,1); healthInfo.put("baseInfo", baseInfo); healthInfo.put("commonList", commonList); healthInfo.put("ciList", ciList); healthInfo.put("linkOrders", linkOrders); healthInfo.put("fileList", fileList); healthInfo.put("approveNodeInfo", approveNodeInfo); healthInfo.put("engineerNodeInfo", engineerNodeInfo); return healthInfo; } @Override public List getCommonPatrolItem(String orderId) { StringBuilder sql = new StringBuilder(); SqlParameter param = new SqlParameter(); param.addValue("orderId", orderId); //获取通用指标分类 sql.append(" select CATEGORY_ID,CATEGORY_NAME "); sql.append(" from CI_HEALTH_PATROL_COMMON_RECORD "); sql.append(" where ORDER_ID = :orderId "); sql.append(" group by CATEGORY_ID "); List categoryList = baseDao.queryForList(sql.toString(),param); //获取通用指标 sql.setLength(0); sql.append(" select ID,CATEGORY_ID,ITEM_ID,ITEM_NAME,RESULT_TYPE,NOTE "); sql.append(" from CI_HEALTH_PATROL_COMMON_RECORD "); sql.append(" where ORDER_ID = :orderId "); List dataList = baseDao.queryForList(sql.toString(),param); Map categoryMap = new HashMap(); if(categoryList!=null&&categoryList.size()>0){ for(Map category:categoryList){ ArrayList children = new ArrayList(); category.put("children", children); categoryMap.put(category.get("CATEGORY_ID").toString(), category); } } //组装树 if(dataList!=null&&dataList.size()>0){ for(Map data:dataList){ if(categoryMap.get(data.get("CATEGORY_ID").toString())!=null){ ((List)((Map)categoryMap.get(data.get("CATEGORY_ID").toString())).get("children")).add(data); } } } return categoryList; } @Override public Map getHealthCiDetail(String flowId) { Map infoMap = new HashMap(); StringBuilder sql = new StringBuilder(); sql.append("SELECT B.ID AS orderCiID,C.ID AS ciID,C.SEARCHCODE,C.CINAME,C.POSITION,B.ORDER_NOTE "); sql.append("FROM SC_WORKFLOW_CI_HEALTH A,SC_WORKFLOW_CI_HEALTH_CIDETAIL B,CMDB_CI_BASE C "); sql.append("WHERE A.ID=B.ORDER_ID AND B.CI_ID=C.ID AND A.FLOW_ID=:flowId"); List ciList=baseDao.queryForList(sql.toString(),new SqlParameter().addValue("flowId", flowId)); if(null!=ciList && ciList.size()>0){ for(Map ciMap:ciList){ sql.setLength(0); sql.append("SELECT B.ITEM_NAME,A.ITEM_RESULT,A.ORDER_NOTE,A.USER_NAME FROM SC_WORKFLOW_ITEM_HEALTH_CIDETAIL A,CI_HEALTH_ITEM B"); sql.append(" WHERE A.ITEM_ID=B.ID AND A.CI_ID=:ciId AND A.ORDER_CI_ID=:orderCiId "); List itemList=baseDao.queryForList(sql.toString(),new SqlParameter().addValue("ciId", ciMap.get("ciID")).addValue("orderCiId", ciMap.get("orderCiID"))); if(null!=itemList && itemList.size()>0){ for(Map map :itemList){ if(map.get("ITEM_RESULT")!=null && StringUtil.notEmpty(map.get("ITEM_RESULT").toString())){ map.put("ITEM_RESULT", Constants.getmapCI_HEALTH_PLAN_CI_STATE_Label(Integer.parseInt(map.get("ITEM_RESULT").toString()))); } } } ciMap.put("itemList", itemList); } } //服务工程师 StringBuilder selSql=new StringBuilder(); selSql.append("SELECT A.CURRENT_DEALER_NAME FROM workflow_node A,GG_USER B WHERE A.CURRENT_DEALER_ID=B.ID AND A.FLOWID=:flowId AND A.IS_ADMIN=1 AND A.NODE_TEMPLATE_ID=:nodeId"); Map dealerMap=baseDao.queryForMap(selSql.toString(),new SqlParameter().addValue("flowId", flowId).addValue("nodeId", Constants.HEALTH_PATROL)); infoMap.put("dealerMap", dealerMap); infoMap.put("ciList", ciList); return infoMap; } }