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<String, String> 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<String, String> params) {
|
StringBuilder builder = new StringBuilder();
|
builder = getAllHealthSql(params);
|
return baseDao.queryforSplitPageInfo(pageInfo, builder.toString(), params);
|
}
|
|
|
/**
|
* 服务台工单列表
|
* @param request
|
* @return
|
*/
|
private StringBuilder getAllHealthSql(Map<String, String> 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<Map> 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<Map> 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<Map> 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<Map> 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<Map> dataList =baseDao.queryForList(sql.toString(),param);
|
TreeUtil treeUtil = new TreeUtil();
|
List<Map> cateList = treeUtil.createTreeByCate(categoryList, dataList);
|
healthInfo.put("cateList", cateList);
|
}
|
List<Map> 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<Map> 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<Map> 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<Map> 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<Map> 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<Map> dataList = baseDao.queryForList(sql.toString(),param);
|
|
Map categoryMap = new HashMap();
|
if(categoryList!=null&&categoryList.size()>0){
|
for(Map category:categoryList){
|
ArrayList<Map> children = new ArrayList<Map>();
|
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>)((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<Map> 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<Map> 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;
|
}
|
}
|