package cn.ksource.web.service.cmdb.impl;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.Iterator;
|
import java.util.LinkedList;
|
import java.util.List;
|
import java.util.Map;
|
|
|
import org.apache.commons.lang.StringUtils;
|
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.util.ConvertUtil;
|
import cn.ksource.core.util.JsonUtil;
|
import cn.ksource.web.Constants;
|
import cn.ksource.web.service.cmdb.CICategory;
|
import cn.ksource.web.service.cmdb.CIPropertity;
|
import cn.ksource.web.service.cmdb.CIPropertityMetadata;
|
import cn.ksource.web.service.cmdb.CIPropertityService;
|
import cn.ksource.web.service.cmdb.DSLCategory;
|
import cn.ksource.web.service.cmdb.SUBCIPropertity;
|
import cn.ksource.web.service.cmdb.SUBCIPropertityMetadata;
|
import cn.ksource.web.service.cmdb.SequenceService;
|
|
@Service
|
public class CIPropertityServiceImpl implements CIPropertityService {
|
|
@Autowired
|
private BaseDao baseDao;
|
|
@Autowired
|
private SequenceService sequenceService;
|
|
@Override
|
public List<Map> getMetadataByTableName(String tableName) {
|
//TODO 需要加入缓存处理
|
String sql = "select * from CMDB_CI_EXTEND_COLUMN where TABLENAME=:TABLENAME and STATE=1 order by ORDERNUM";
|
List<Map> list = baseDao.queryForList(sql,new SqlParameter("TABLENAME",tableName));
|
for (Map map : list) {
|
if (Constants.CMDB_CI_EXTEND_COLUMN_DATATYPE_SINGLE_SELECT == ConvertUtil.obj2Integer(map.get("DATATYPE"))) {
|
map.put("_SELECTVALUE", map.get("SELECTVALUE") == null ? new HashMap() : JsonUtil.json2Map(map.get("SELECTVALUE").toString()));
|
} else if (Constants.CMDB_CI_EXTEND_COLUMN_DATATYPE_MULTI_SELECT == ConvertUtil.obj2Integer(map.get("DATATYPE"))) {
|
if (map.get("SELECTVALUE") != null) {
|
Map resultMap = JsonUtil.json2Map(map.get("SELECTVALUE").toString());
|
List<Map> resultList = new LinkedList<Map>();
|
for (Iterator iterator = resultMap.keySet().iterator(); iterator.hasNext();) {
|
String key = (String) iterator.next();
|
Map temMap = new HashMap();
|
temMap.put("KEY", key);
|
temMap.put("VALUE", resultMap.get(key));
|
resultList.add(temMap);
|
}
|
map.put("_SELECTVALUE",resultList);
|
map.put("_SELECTVALUE_JSON", JsonUtil.list2Json(resultList));
|
} else {
|
map.put("_SELECTVALUE", new ArrayList());
|
map.put("_SELECTVALUE_JSON", "[]");
|
}
|
}
|
}
|
return list;
|
}
|
|
@Override
|
public CIPropertity getCIPropertity(String ci_id) {
|
String sql = "select * from CMDB_CI_BASE where id=:id";
|
Map basePropertity = baseDao.queryForMap(sql,new SqlParameter("id",ci_id));
|
|
//所属层级
|
int level = ConvertUtil.obj2Int(basePropertity.get("LEVELNUMBER"));
|
|
CIPropertity propertity = new CIPropertity();
|
//基本属性
|
propertity.setBasePropertity(basePropertity);
|
//通用属性
|
propertity.setCommonPropertity(baseDao.queryForMap("select * from CMDB_CI_BASE_EXTEND where id=:id",new SqlParameter("id",ci_id)));
|
|
//分类信息
|
propertity.setCategory(getCICategory(basePropertity.get("THELEVELID").toString()));
|
//元数据信息
|
propertity.setMeta(getCIPropertityMetadata(propertity.getCategory().getCategory().get("TABLE_NAME").toString()));
|
|
//一级属性
|
propertity.setFirstLevelPropertity(baseDao.queryForMap("select * from "+ propertity.getCategory().getFirstCategory().get("TABLE_NAME") +" where id=:id",new SqlParameter("id",ci_id)));
|
//二级属性
|
propertity.setSecondLevelPropertity(baseDao.queryForMap("select * from "+ propertity.getCategory().getSecondCategory().get("TABLE_NAME") +" where id=:id",new SqlParameter("id",ci_id)));
|
|
if (level == 3) {
|
//三级属性
|
propertity.setThirdLevelPropertity(baseDao.queryForMap("select * from "+ propertity.getCategory().getThirdCategory().get("TABLE_NAME") +" where id=:id",new SqlParameter("id",ci_id)));
|
}
|
return propertity;
|
}
|
|
public SUBCIPropertity getSubCIPropertity(String ci_id) {
|
String sql = "select * from CMDB_CI_BASE where id=:id";
|
Map basePropertity = baseDao.queryForMap(sql,new SqlParameter("id",ci_id));
|
|
SUBCIPropertity propertity = new SUBCIPropertity();
|
//基本属性
|
propertity.setBasePropertity(basePropertity);
|
//通用属性
|
propertity.setCommonPropertity(baseDao.queryForMap("select * from CMDB_CI_SUB_BASE_EXTEND where id=:id",new SqlParameter("id",ci_id)));
|
|
//分类信息
|
propertity.setCategory(getCICategory(basePropertity.get("THELEVELID").toString()));
|
//元数据信息
|
propertity.setMeta(getSubCIPropertityMetadata(propertity.getCategory().getCategory().get("TABLE_NAME").toString()));
|
|
//一级属性
|
propertity.setCustomPropertity(baseDao.queryForMap("select * from "+ propertity.getCategory().getFirstCategory().get("TABLE_NAME") +" where id=:id",new SqlParameter("id",ci_id)));
|
|
return propertity;
|
}
|
|
|
@Override
|
public Map getCategoryById(String categoryid) {
|
//TODO 需要加入缓存处理
|
String sql = "select * from CMDB_CI_CATEGORY where id=:id";
|
return baseDao.queryForMap(sql,new SqlParameter("id",categoryid));
|
}
|
|
@Override
|
public Map getDslCategoryById(String categoryid) {
|
//TODO 需要加入缓存处理
|
String sql = "select * from DSL_CATEGORY where id=:id";
|
return baseDao.queryForMap(sql,new SqlParameter("id",categoryid));
|
}
|
|
@Override
|
public CIPropertityMetadata getCIPropertityMetadata(String tablename) {
|
|
if (StringUtils.isBlank(tablename) || StringUtils.equalsIgnoreCase(tablename, Constants.CMDB_CI_BASE_EXTEND_TABLE)) {
|
CIPropertityMetadata meta = new CIPropertityMetadata();
|
meta.setLevel(0);
|
meta.setCommonPropertityMetadata(getMetadataByTableName(Constants.CMDB_CI_BASE_EXTEND_TABLE));
|
return meta;
|
}
|
|
Map category = baseDao.queryForMap("select * from CMDB_CI_CATEGORY where TABLE_NAME=:TABLE_NAME",new SqlParameter("TABLE_NAME",tablename));
|
CIPropertityMetadata meta = new CIPropertityMetadata();
|
//级别
|
meta.setLevel(ConvertUtil.obj2Int(category.get("JB")));
|
meta.setCatetory(category);
|
meta.setCommonPropertityMetadata(getMetadataByTableName(Constants.CMDB_CI_BASE_EXTEND_TABLE));
|
|
if (meta.getLevel() == 1) {
|
meta.setFirstLevelPropertityMetadata(getMetadataByTableName(category.get("TABLE_NAME").toString()));
|
} else if (meta.getLevel() == 2) {
|
meta.setSecondLevelPropertityMetadata(getMetadataByTableName(category.get("TABLE_NAME").toString()));
|
Map firstCategory = getCategoryById(category.get("PID").toString());
|
meta.setFirstLevelPropertityMetadata(getMetadataByTableName(firstCategory.get("TABLE_NAME").toString()));
|
} else {
|
meta.setThirdLevelPropertityMetadata(getMetadataByTableName(category.get("TABLE_NAME").toString()));
|
Map secondCategory = getCategoryById(category.get("PID").toString());
|
meta.setSecondLevelPropertityMetadata(getMetadataByTableName(secondCategory.get("TABLE_NAME").toString()));
|
Map firstCategory = getCategoryById(secondCategory.get("PID").toString());
|
meta.setFirstLevelPropertityMetadata(getMetadataByTableName(firstCategory.get("TABLE_NAME").toString()));
|
}
|
|
return meta;
|
}
|
|
public SUBCIPropertityMetadata getSubCIPropertityMetadata(String tablename){
|
|
if (StringUtils.isBlank(tablename) || StringUtils.equalsIgnoreCase(tablename, Constants.CMDB_SUB_CI_BASE_EXTEND_TABLE)) {
|
SUBCIPropertityMetadata meta = new SUBCIPropertityMetadata();
|
meta.setCommonPropertityMetadata(getMetadataByTableName(Constants.CMDB_SUB_CI_BASE_EXTEND_TABLE));
|
return meta;
|
}
|
|
Map category = baseDao.queryForMap("select * from CMDB_CI_CATEGORY where TABLE_NAME=:TABLE_NAME",new SqlParameter("TABLE_NAME",tablename));
|
SUBCIPropertityMetadata meta = new SUBCIPropertityMetadata();
|
//级别
|
meta.setCatetory(category);
|
meta.setCommonPropertityMetadata(getMetadataByTableName(Constants.CMDB_SUB_CI_BASE_EXTEND_TABLE));
|
|
meta.setCustomPropertityMetadata(getMetadataByTableName(category.get("TABLE_NAME").toString()));
|
|
return meta;
|
}
|
|
@Override
|
public CICategory getCICategory(String categoryid) {
|
Map base = getCategoryById(categoryid);
|
CICategory category = new CICategory();
|
category.setCategory(base);
|
category.setLevel(ConvertUtil.obj2Integer(base.get("JB")));
|
//一级
|
if (category.getLevel() == 1) {
|
category.setFirstCategory(base);
|
} else if(category.getLevel() == 2) {
|
category.setSecondCategory(base);
|
category.setFirstCategory(getCategoryById(base.get("PID").toString()));
|
} else {
|
category.setThirdCategory(base);
|
category.setSecondCategory(getCategoryById(base.get("PID").toString()));
|
category.setFirstCategory(getCategoryById(category.getSecondCategory().get("PID").toString()));
|
}
|
return category;
|
}
|
|
|
@Override
|
public DSLCategory getDSLCategory(String categoryid) {
|
Map base = getDslCategoryById(categoryid);
|
DSLCategory category = new DSLCategory();
|
category.setCategory(base);
|
category.setLevel(ConvertUtil.obj2Integer(base.get("LEVEL")));
|
//一级
|
if (category.getLevel() == 1) {
|
category.setFirstCategory(base);
|
} else if(category.getLevel() == 2) {
|
category.setSecondCategory(base);
|
category.setFirstCategory(getDslCategoryById(base.get("P_ID").toString()));
|
} else {
|
category.setThirdCategory(base);
|
category.setSecondCategory(getDslCategoryById(base.get("P_ID").toString()));
|
category.setFirstCategory(getDslCategoryById(category.getSecondCategory().get("P_ID").toString()));
|
}
|
return category;
|
}
|
|
public void copyData(String tableName,String source_id,List<String> target_ids){
|
Map map = baseDao.queryForMap("select * from " + tableName +" where id=:id",new SqlParameter("id",source_id));
|
if (map.isEmpty()) {
|
return;
|
}
|
String sql = "insert into " + tableName + "(";
|
String values = " values(";
|
for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) {
|
String key = (String) iterator.next();
|
sql += key + ",";
|
values += ":"+key+",";
|
}
|
sql = StringUtils.removeEnd(sql, ",")+")" + StringUtils.removeEnd(values, ",") + ")";
|
List<SqlParameter> list = new LinkedList<SqlParameter>();
|
|
for (String targetid : target_ids) {
|
SqlParameter param = new SqlParameter();
|
param.putAll(map);
|
param.put("ID", targetid);
|
list.add(param);
|
}
|
baseDao.executeBatch(sql, list);
|
}
|
|
|
|
/*public void execCopyCI(String ci_id,int count,HttpServletRequest request){
|
CMDB_CI_BASE base = new CMDB_CI_BASE(ci_id).getInstanceById();
|
CICategory category = getCICategory(base.getThelevelid());
|
String extendTableName = Constants.CMDB_CI_BASE_EXTEND_TABLE;
|
String secondTableName = category.getSecondCategory().get("TABLE_NAME").toString();
|
String thirdTableName = category.getLevel() == 3 ? category.getThirdCategory().get("TABLE_NAME").toString() :"";
|
List<String> list = new LinkedList<String>();
|
for (int i = 1; i < count; i++) {
|
base.setId(StringUtil.getUUID());
|
base.setSeachcode(sequenceService.getCICategorySequence(base.getThelevelid()));
|
sequenceService.nextCICategorySequence(base.getThelevelid());
|
base.setMembercode(String.valueOf(sequenceService.getMemberSequence(base.getMemberid())));
|
sequenceService.nextMemberSequence(base.getMemberid());
|
base.insert();
|
|
//生成二维码
|
TwoDimensionCode handler = new TwoDimensionCode();
|
String searchCode = base.getSeachcode();
|
String url = Constants.QRCODE_URL + searchCode;
|
|
String logoUrl = WebUtil.getRealPath(request, "/static/logo.jpg");
|
handler.encoderQRCode(url, WebUtil.getRealPath(request, "/upload/qrCode/"+searchCode+".png"), "png",logoUrl);
|
|
list.add(base.getId());
|
}
|
copyData(extendTableName,ci_id,list);
|
copyData(secondTableName,ci_id,list);
|
copyData(thirdTableName,ci_id,list);
|
|
}*/
|
|
/**
|
* 不需要比对的列
|
* @return
|
*/
|
public Map noCompairedColumns() {
|
Map map = new HashMap();
|
map.put("ID", "编号");
|
map.put("FLOW_ID", "流程编号");
|
map.put("SEACHCODE", "搜索码");
|
map.put("MEMBERCODE", "内部编号");
|
map.put("MEMBERID", "客户编号");
|
map.put("MEMBERNAME", "客户名称");
|
map.put("LEVELNUMBER", "层级序号");
|
map.put("THELEVELID", "层级编号");
|
map.put("FIRSTLEVELID", "一级编号");
|
map.put("SECONDLEVELID", "二级编号");
|
map.put("THIRDLEVELID", "三级编号");
|
map.put("USINGSTATE", "使用状态");
|
map.put("CREATETIME", "创建时间");
|
map.put("VERSION", "版本");
|
map.put("DISK_ID", "磁盘序列号");
|
map.put("LEIX", "类型");
|
map.put("PCI_ID", "父CI编号");
|
|
return map;
|
}
|
|
/**
|
* 不需要显示的列
|
* @return
|
*/
|
public Map noShowColumns() {
|
Map map = new HashMap();
|
map.put("LASTUPDATETIME", "最后更新时间");
|
map.put("SERVICE_PROVIDERS_ID", "服务商编号");
|
map.put("SYSTEMINTEGRATIONID", "集成商编号");
|
map.put("MAINUFACTURERID", "厂商编号");
|
map.put("DEPT_ID", "负责部门编号");
|
map.put("SERVICE_PROVIDERS_NAME", "服务商名称");
|
|
return map;
|
}
|
}
|