package cn.ksource.web.facade.cfgcate; 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.StringUtil; import cn.ksource.core.util.TreeUtil; import cn.ksource.web.Constants; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; @Service @SuppressWarnings({"rawtypes","unchecked"}) public class CfgcateFacadeImpl implements CfgcateFacade{ @Resource private BaseDao baseDao; @Override public List getCfgcateTree(Map params) { StringBuilder sql = new StringBuilder(); sql.append(" select id,type,lv,name,code,pid from cmdb_ci_category where state = 1 and cate_type=:cateType " + " order by lv asc,serial asc,name "); List list = baseDao.queryForList(sql.toString(),params); List tlist = TreeUtil.createTreeByList(list); return tlist; } @Override public PageInfo getCfgcateData(PageInfo pageInfo,Map params) { Map support = getCfgcateSupport(params); String sql = support.get("sql").toString(); return baseDao.queryforSplitPageInfo(pageInfo, sql, params); } @Override public Integer getCfgcateCount(Map params) { Map support = getCfgcateSupport(params); String sql = "select count(*) from ( " + support.get("sql").toString() + " ) t "; return baseDao.queryForInteger(sql, params); } private Map getCfgcateSupport(Map params){ Map support = new HashMap(); StringBuilder sql = new StringBuilder(); sql.append(" select a.* "); sql.append(" from cmdb_ci_category a "); sql.append(" where 1=1 "); if(StringUtil.isNotBlank(params.get("pid"))){ sql.append(" and a.pid=:pid "); } if(StringUtil.isNotBlank(params.get("cateType"))){ sql.append(" and a.CATE_TYPE=:cateType "); } sql.append(" order by a.lv asc,a.serial asc "); support.put("sql", sql.toString()); support.put("param", params); return support; } @Override public Map getCfgcateById(String id) { return baseDao.queryForMap("select * from cmdb_ci_category where id=:id ",new SqlParameter("id",id)); } @Override public Map saveCfgcate(Map params) { StringBuilder sql = new StringBuilder(); if(StringUtil.isBlank(params.get("id"))){//新增 params.put("id", StringUtil.getUUID()); String lv1_id = ""; String lv1_name = ""; String lv2_id = ""; String lv2_name = ""; String lv3_id = ""; String lv3_name = ""; String full_id = ""; String full_name = ""; if(params.get("lv").equals("1")){//一级 lv1_id = params.get("id"); lv1_name = params.get("name"); full_id = lv1_id; full_name = lv1_name; }else{ Map pcate = getCfgcateById(params.get("pid")); lv1_id = pcate.get("lv1_id").toString(); lv1_name = pcate.get("lv1_name").toString(); if(params.get("lv").equals("2")){//二级 lv2_id = params.get("id"); lv2_name = params.get("name"); full_id = lv1_id + "-" + lv2_id; full_name = lv1_name + "-" + lv2_name; }else if(params.get("lv").equals("3")){//三级 lv2_id = pcate.get("lv2_id").toString(); lv2_name = pcate.get("lv2_name").toString(); lv3_id = params.get("id"); lv3_name = params.get("name"); full_id = lv1_id + "-" + lv2_id + "-" + lv3_id ; full_name = lv1_name + "-" + lv2_name + "-" + lv3_name; } } params.put("lv1_id", lv1_id); params.put("lv1_name", lv1_name); params.put("lv2_id", lv2_id); params.put("lv2_name", lv2_name); params.put("lv3_id", lv3_id); params.put("lv3_name", lv3_name); params.put("full_id", full_id); params.put("full_name", full_name); sql.append("insert into cmdb_ci_category " + " (id,pid,type,name,code,lv,serial,note,state,lv1_id,lv1_name,lv2_id,lv2_name,lv3_id,lv3_name,full_id,full_name,cate_type) values " + " (:id,:pid,1,:name,:code,:lv,:serial,:note,1,:lv1_id,:lv1_name,:lv2_id,:lv2_name,:lv3_id,:lv3_name,:full_id,:full_name,:cateType) "); baseDao.execute(sql.toString(), params); }else{//修改 String colId = ""; String colName = ""; if(params.get("lv").equals("1")){ colId = "lv1_id"; colName = "lv1_name"; }else if(params.get("lv").equals("2")){ colId = "lv2_id"; colName = "lv2_name"; }else if(params.get("lv").equals("3")){ colId = "lv3_id"; colName = "lv3_name"; } //更新本记录 sql.append(" update cmdb_ci_category set name=:name,serial=:serial,note=:note,cate_type=:cateType " + " where id=:id "); baseDao.execute(sql.toString(), params); //更新子记录 sql.setLength(0); sql.append(" update cmdb_ci_category set "+colName+"=:name " + " where "+colId+"=:id "); baseDao.execute(sql.toString(), params); //更新一级全名称 if(params.get("lv").equals("1")){ sql.setLength(0); sql.append(" update cmdb_ci_category set full_name = lv1_name " + " where "+colId+"=:id and lv=1 "); baseDao.execute(sql.toString(), params); } sql.setLength(0); sql.append(" update cmdb_ci_category set full_name = concat(lv1_name,'-',lv2_name) " + " where "+colId+"=:id and lv=2 "); baseDao.execute(sql.toString(), params); //更新三级全名称 sql.setLength(0); sql.append(" update cmdb_ci_category set full_name = concat(lv1_name,'-',lv2_name,'-',lv3_name) " + " where "+colId+"=:id and lv=3 "); baseDao.execute(sql.toString(), params); } //树回显 Map echo = new HashMap(); String lv1Id = ""; String lv2Id = ""; if(!params.get("lv").equals("1")){ Map pMap = baseDao.queryForMap("select * from cmdb_ci_category where id=:pid ",params); if(ConvertUtil.obj2StrBlank(pMap.get("pid")).equals("0")){//父节点为一级 lv1Id = pMap.get("id").toString(); lv2Id = params.get("id"); }else{//父节点为二级 lv1Id = pMap.get("pid").toString(); lv2Id = pMap.get("id").toString(); } } echo.put("lv1Id", lv1Id); echo.put("lv2Id", lv2Id); return echo; } @Override public int checkCateName(String name, String id) { StringBuffer sql=new StringBuffer(" select count(*) from cmdb_ci_category where name= :name "); if (StringUtils.isNotBlank(id)) { sql.append(" and id <> :id"); } SqlParameter param = new SqlParameter(); param.addValue("name", name); param.addValue("id", id); int count=baseDao.queryForInteger(sql.toString(),param); return count; } @Override public int checkCateCode(String code, String id, String lv) { StringBuffer sql=new StringBuffer(" select count(*) from cmdb_ci_category where code= :code and lv=:lv "); if (StringUtils.isNotBlank(id)) { sql.append(" and id <> :id"); } SqlParameter param = new SqlParameter(); param.addValue("code", code); param.addValue("id", id); param.addValue("lv", lv); int count=baseDao.queryForInteger(sql.toString(),param); return count; } @Override public PageInfo getCateGroupData(PageInfo pageInfo, Map params) { Map support = getCateGroupSupport(params); String sql = support.get("sql").toString(); return baseDao.queryforSplitPageInfo(pageInfo, sql, params); } @Override public Integer getCateGroupCount(Map params) { Map support = getCateGroupSupport(params); String sql = "select count(*) from ( " + support.get("sql").toString() + " ) t "; return baseDao.queryForInteger(sql, params); } private Map getCateGroupSupport(Map params){ Map support = new HashMap(); StringBuilder sql = new StringBuilder(); sql.append(" select a.* "); sql.append(" from prop_group a "); sql.append(" where link_id=:linkId "); sql.append(" order by a.serial asc "); support.put("sql", sql.toString()); support.put("param", params); return support; } @Override public Map getGroupById(String id) { return baseDao.queryForMap("select * from prop_group where id=:id ",new SqlParameter("id",id)); } @Override public void saveGroup(Map params) { StringBuilder sql = new StringBuilder(); if(StringUtil.isBlank(params.get("id"))){//新增 params.put("id", StringUtil.getUUID()); sql.append("insert into prop_group (id,group_name,serial,note,state,link_id) values " + " (:id,:group_name,:serial,:note,1,:linkId) "); }else{//修改 sql.append(" update prop_group set group_name=:group_name,serial=:serial,note=:note " + " where id=:id "); } baseDao.execute(sql.toString(), params); } @Override public int checkGroupName(String id, String group_name, String linkId) { String sql = " select count(*) from prop_group " + " where group_name=:group_name and link_id=:linkId and id<>:id "; SqlParameter param = new SqlParameter(); param.addValue("group_name", group_name); param.addValue("linkId", linkId); param.addValue("id", id); return baseDao.queryForInteger(sql, param); } @Override public void delGroup(Map params) { baseDao.execute("update prop_group set state=:flag where id=:id ", params); } @Override public List getGroupListByLinkId(Map params) { StringBuilder sql = new StringBuilder(); sql.append(" select * from prop_group where link_id = :linkId and state=1 "); return baseDao.queryForList(sql.toString(),params); } @Override public PageInfo getPropData(PageInfo pageInfo, Map params) { Map support = getPropSupport(params); String sql = support.get("sql").toString(); return baseDao.queryforSplitPageInfo(pageInfo, sql, params); } @Override public Integer getPropCount(Map params) { Map support = getPropSupport(params); String sql = "select count(*) from ( " + support.get("sql").toString() + " ) t "; return baseDao.queryForInteger(sql, params); } private Map getPropSupport(Map params){ Map support = new HashMap(); StringBuilder sql = new StringBuilder(); sql.append(" select a.* "); sql.append(" from prop_column a "); sql.append(" where 1=1 "); if(StringUtil.isNotBlank(params.get("linkId"))){ sql.append(" and a.group_id in ( select id from prop_group where link_id=:linkId ) "); } if(StringUtil.isNotBlank(params.get("groupId"))){ sql.append(" and a.group_id =:groupId "); } sql.append(" order by a.serial asc "); support.put("sql", sql.toString()); support.put("param", params); return support; } @Override public Map getPropById(String id) { return baseDao.queryForMap("select * from prop_column where id=:id ",new SqlParameter("id",id)); } @Override public int checkPropCode(String id, String groupId, String columncode) { StringBuffer sql=new StringBuffer(" select count(*) from prop_column where columncode= :columncode and group_id=:groupId "); if (StringUtils.isNotBlank(id)) { sql.append(" and id <> :id"); } SqlParameter param = new SqlParameter(); param.addValue("columncode", columncode); param.addValue("id", id); param.addValue("groupId", groupId); int count=baseDao.queryForInteger(sql.toString(),param); return count; } @Override public void saveProp(Map params) { if(StringUtil.isBlank(params.get("id"))){//新增 params.put("id", StringUtil.getUUID()); baseDao.execute(getPropInsertSql(params), params); }else{//更新 baseDao.execute(getPropUpdateSql(params), params); } } private String getPropInsertSql(Map params){ StringBuilder sql = new StringBuilder(); StringBuilder frontsql = new StringBuilder(); StringBuilder endsql = new StringBuilder(); if(params.get("id")!=null){ frontsql.append("id,"); endsql.append(":id,"); } if(params.get("group_id")!=null){ frontsql.append("group_id,"); endsql.append(":group_id,"); } if(params.get("columnname")!=null){ frontsql.append("columnname,"); endsql.append(":columnname,"); } if(params.get("columncode")!=null){ frontsql.append("columncode,"); endsql.append(":columncode,"); } if(params.get("datatype")!=null){ frontsql.append("datatype,"); endsql.append(":datatype,"); } if(params.get("allownull")!=null){ frontsql.append("allownull,"); endsql.append(":allownull,"); } if(params.get("minvalues")!=null){ frontsql.append("minvalues,"); endsql.append(":minvalues,"); } if(params.get("maxvalues")!=null){ frontsql.append("maxvalues,"); endsql.append(":maxvalues,"); } if(params.get("default_ext")!=null){ frontsql.append("default_ext,"); endsql.append(":default_ext,"); } if(params.get("default_val")!=null){ frontsql.append("default_val,"); endsql.append(":default_val,"); } if(params.get("showinlist")!=null){ frontsql.append("showinlist,"); endsql.append(":showinlist,"); } if(params.get("allowquery")!=null){ frontsql.append("allowquery,"); endsql.append(":allowquery,"); } if(params.get("inputtype")!=null){ frontsql.append("inputtype,"); endsql.append(":inputtype,"); } if(params.get("state")!=null){ frontsql.append("state,"); endsql.append(":state,"); } if(params.get("createtime")!=null){ frontsql.append("createtime,"); endsql.append(":createtime,"); } if(params.get("note")!=null){ frontsql.append("note,"); endsql.append(":note,"); } if(params.get("serial")!=null){ frontsql.append("serial,"); endsql.append(":serial,"); } if(params.get("alert")!=null){ frontsql.append("alert,"); endsql.append(":alert,"); } sql.append(" insert into prop_column ( "); sql.append(StringUtils.removeEnd(frontsql.toString(),",")); sql.append(" ) values ( "); sql.append(StringUtils.removeEnd(endsql.toString(),",")); sql.append(" ) "); return sql.toString(); } private String getPropUpdateSql(Map params){ StringBuilder sql = new StringBuilder(); StringBuilder frontsql = new StringBuilder(); if(params.get("id")!=null){ frontsql.append("id=:id,"); } if(params.get("columnname")!=null){ frontsql.append("columnname=:columnname,"); } if(params.get("columncode")!=null){ frontsql.append("columncode=:columncode,"); } if(params.get("datatype")!=null){ frontsql.append("datatype=:datatype,"); } if(params.get("allownull")!=null){ frontsql.append("allownull=:allownull,"); } if(params.get("minvalues")!=null){ frontsql.append("minvalues=:minvalues,"); } if(params.get("maxvalues")!=null){ frontsql.append("maxvalues=:maxvalues,"); } if(params.get("default_ext")!=null){ frontsql.append("default_ext=:default_ext,"); } if(params.get("default_val")!=null){ frontsql.append("default_val=:default_val,"); } if(params.get("showinlist")!=null){ frontsql.append("showinlist=:showinlist,"); } if(params.get("allowquery")!=null){ frontsql.append("allowquery=:allowquery,"); } if(params.get("inputtype")!=null){ frontsql.append("inputtype=:inputtype,"); } if(params.get("state")!=null){ frontsql.append("state=:state,"); } if(params.get("note")!=null){ frontsql.append("note=:note,"); } if(params.get("serial")!=null){ frontsql.append("serial=:serial,"); } if(params.get("alert")!=null){ frontsql.append("alert=:alert,"); } sql.append(" update prop_column set "); sql.append(StringUtils.removeEnd(frontsql.toString(),",")); sql.append(" where id= :id "); return sql.toString(); } @Override public void delProp(Map params) { baseDao.execute("update prop_column set state=:flag where id=:id ", params); } @Override public PageInfo getPropSelData(PageInfo pageInfo, Map params) { Map support = getPropSelSupport(params); String sql = support.get("sql").toString(); return baseDao.queryforSplitPageInfo(pageInfo, sql, params); } @Override public Integer getPropSelCount(Map params) { Map support = getPropSelSupport(params); String sql = "select count(*) from ( " + support.get("sql").toString() + " ) t "; return baseDao.queryForInteger(sql, params); } private Map getPropSelSupport(Map params){ Map support = new HashMap(); StringBuilder sql = new StringBuilder(); sql.append(" select a.* "); sql.append(" from prop_sel a "); sql.append(" where a.column_id=:colId "); sql.append(" order by a.serial asc "); support.put("sql", sql.toString()); support.put("param", params); return support; } @Override public Map getPropSelById(String id) { return baseDao.queryForMap(" select * from prop_sel where id=:id ",new SqlParameter("id",id)); } @Override public void savePropSel(Map params) { StringBuilder sql = new StringBuilder(); if(StringUtil.isBlank(params.get("id"))){//新增 params.put("id", StringUtil.getUUID()); sql.append("insert into prop_sel (id,column_id,itemvalue,serial,state) values " + " (:id,:column_id,:itemvalue,:serial,1) "); }else{//修改 sql.append(" update prop_sel set itemvalue=:itemvalue,serial=:serial " + " where id=:id "); } baseDao.execute(sql.toString(), params); } @Override public void delPropSel(Map params) { baseDao.execute("update prop_sel set state=:flag where id=:id ", params); } @Override public void setSelDef(String sid, String sval, String pid) { StringBuilder sql = new StringBuilder(); sql.append(" update prop_column set default_ext=:sval,default_val=:sid where id=:pid "); SqlParameter param = new SqlParameter().addValue("sid", sid) .addValue("sval", sval) .addValue("pid", pid); baseDao.execute(sql.toString(), param); sql.setLength(0); sql.append("update prop_sel set is_default = 0 where column_id = :pid"); baseDao.execute(sql.toString(), param); List params = new ArrayList(); String[] arr = sid.split(","); for(int i=0;i getPropTemplate(String linkId ,String busId) { StringBuilder sql = new StringBuilder(); Map propSet = new HashMap(); if(StringUtil.isNotBlank(busId)){ sql.append(" select * from prop_data where bus_id=:busId "); List propList = baseDao.queryForList(sql.toString(),new SqlParameter("busId",busId)); if(propList!=null&&propList.size()>0){ for(Map p:propList){ propSet.put(p.get("column_id"), p); } } sql.setLength(0); } SqlParameter param = new SqlParameter(); param.addValue("linkId", linkId); Map cate = baseDao.queryForMap("select lv,pid from cmdb_ci_category where id = :linkId ",param); String lv = ConvertUtil.obj2StrBlank(cate.get("lv")); String pid = ConvertUtil.obj2StrBlank(cate.get("pid")); param.addValue("pid", pid); List list = new ArrayList(); sql.append(" select g.serial gserial,g.id gid,g.group_name,p.id pid,p.* from ( "); sql.append(" select g.id,g.group_name,g.serial from prop_group g,cmdb_ci_category c where g.link_id=c.id and c.state=1 "); if(lv.equals("3")){ sql.append(" and (c.id = :linkId or c.id = :pid||'') "); }else{ sql.append(" and c.id = :linkId "); } sql.append(" union select '-1' as id,'通用属性' as group_name,0 as serial from prop_group g "); sql.append(" ) g ,prop_column p "); sql.append(" where g.id = p.group_id and p.state=1 order by gid,p.serial desc "); //查出所有的通用属性和分组属性 List glist = baseDao.queryForList(sql.toString(),param); sql.setLength(0); sql.append(" select * from prop_sel where state=1 and column_id = :pid "); if (glist != null && glist.size() > 0) { Stack stack = new Stack(); for (int i = 0; i <= glist.size(); i++) { if (i != glist.size()) { int datatype = ConvertUtil.obj2Int(glist.get(i).get("DATATYPE")); if (datatype == Constants.PROP_TYPE_SEL || datatype == Constants.YSY_TYPE_MULTI_SEL) { List sList = baseDao.queryForList(sql.toString(), new SqlParameter("pid", glist.get(i).get("pid"))); //如果该通用属性 选项为空 然后又不允许为空 if (sList.size() == 0 && ConvertUtil.obj2Int(glist.get(i).get("ALLOWNULL")) == 2) { //type等1的时候,该属性不显示 glist.get(i).put("notShow", 1); } else { glist.get(i).put("items", sList); } } } //如果stack为空 if(stack.isEmpty()){ //放入stack中 stack.push(glist.get(i)); //不为空 }else{ //最后一个或最上面的map的gid不等于当前属性的gid if(i==glist.size()||!stack.peek().get("gid").toString().equals(glist.get(i).get("gid").toString())){ Map temp = stack.peek(); List plist = new ArrayList(); while(!stack.isEmpty()){ Map p = stack.pop(); if(!propSet.isEmpty()){ if(propSet.containsKey(p.get("pid").toString())){ Map prop = (Map)propSet.get(p.get("pid").toString()); String def_val = ConvertUtil.obj2StrBlank(prop.get("column_value")); String def_text = ConvertUtil.obj2StrBlank(prop.get("column_text")); p.put("default_val", def_val); p.put("default_ext", def_text); } } if (p.get("notShow")==null) { plist.add(p); } } temp.put("props", plist); list.add(temp); } if(i!=glist.size()){ stack.push(glist.get(i)); } } } } // Collections.sort(list, new Comparator(){ // @Override // public int compare(Map o1, Map o2) { // return ConvertUtil.obj2Integer(o1.get("gserial")).compareTo(ConvertUtil.obj2Integer(o2.get("gserial"))); // } // }); return list; } @Override public void delCfgcate(Map params) { baseDao.execute("update cmdb_ci_category set state=:flag where id=:id ", params); } @Override public Integer checkDelGroup(Map params) { String flag = params.get("flag"); Integer res = 0; //如果要禁用操作 if(!flag.equals("1")){ //判断该分组下的自定义属性是否都被禁用 Integer temp = baseDao.queryForInteger("select count(*) from prop_column where group_id=:id and state=1 ",params); if(temp==0){ res = 1; } }else{//启用操作 //随时可以启动 res=1; } return res; } @Override public Integer checkCateFlag(Map params) { String flag = params.get("flag"); String pid = params.get("pid"); Integer res = 0; if(flag.equals("0")){//禁用 Integer temp = baseDao.queryForInteger("select count(*) from cmdb_ci_category where pid=:id and state=1 ",params); if(temp==0){ res = 1; } }else{//启用 if(pid.equals("0")){ return 1; }else{ Integer temp = baseDao.queryForInteger("select count(*) from cmdb_ci_category where id=:pid and state=1 ",params); if(temp>0){ res = 1; } } } return res; } @Override public List getCfgcateList(Map params){ StringBuilder sql = new StringBuilder(); sql.append(" select id,name from cmdb_ci_category where state=1 and cate_type=1 "); if(StringUtil.isNotBlank(params.get("lv"))){ sql.append(" and lv = :lv "); } if(StringUtil.isNotBlank(params.get("pid"))){ sql.append(" and pid = :pid "); } return baseDao.queryForList(sql.toString(), params); } }