package cn.ksource.web.facade.rcxj; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Service; import cn.ksource.beans.CI_DAILY_PATROL; import cn.ksource.beans.FlowRecord; 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.DateUtil; import cn.ksource.core.util.JsonUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.web.Constants; import cn.ksource.web.service.flow.FlowRecordService; @Service @SuppressWarnings({"rawtypes"}) public class RcxjFacadeImpl implements RcxjFacade{ @Resource private BaseDao baseDao; @Resource private FlowRecordService flowRecordService; @Override public PageInfo getRcxjData(PageInfo pageInfo, Map params) { Map support = getRcxjSupport(params); String sql = support.get("sql").toString(); return baseDao.queryforSplitPageInfo(pageInfo, sql, params); } @Override public Integer getRcxjCount(Map params) { Map support = getRcxjSupport(params); String sql = "select count(*) from ( " + support.get("sql").toString() + " ) t "; return baseDao.queryForInteger(sql, params); } private Map getRcxjSupport(Map params){ Map support = new HashMap(); StringBuilder sql = new StringBuilder(); sql.append(" select a.* "); sql.append(" from ci_daily_patrol a "); sql.append(" where 1=1"); if(StringUtil.isNotBlank(params.get("userId"))){ sql.append(" and a.user_id = :userId "); } if(StringUtil.isNotBlank(params.get("subCusId"))){ sql.append(" and a.sub_cus_id = :subCusId "); } if(StringUtil.isNotBlank(params.get("cusId"))){ sql.append(" and a.cus_id = :cusId "); } if(StringUtil.isNotBlank(params.get("beginDay"))){ sql.append(" and a.patrol_date >= :beginDay "); } if(StringUtil.isNotBlank(params.get("endDay"))){ sql.append(" and a.patrol_date <= :endDay "); } if(StringUtil.isNotBlank(params.get("curId"))){ sql.append(" and a.cur_id = :curId "); } if(StringUtil.isNotBlank(params.get("templateKey"))){ sql.append(" and exists ( "); sql.append(" select r.bus_id from ( "); sql.append(" select bus_id from flow_record where deal_id=:dealId and template_key=:templateKey "); sql.append(" group by bus_id ) r where r.bus_id = a.id ) "); } if(StringUtil.isNotBlank(params.get("fstate"))){ sql.append(" and a.state = :fstate "); } if(StringUtil.isNotBlank(params.get("state"))){ if(params.get("state").equals("3")){ sql.append(" and a.state > :state "); params.put("state", Constants.CI_DAILY_PATROL_STATE_DSH.toString()); }else if(params.get("state").equals("cx")){ sql.append(" and a.state in (2,3,4) "); }else { sql.append(" and a.state = :state "); } } sql.append(" order by a.create_time desc "); support.put("sql", sql.toString()); support.put("param", params); return support; } @Override public List getCommonPatrolItem(String cusId, String orderId) { SqlParameter param = new SqlParameter(); param.addValue("cusId", cusId) .addValue("orderId", orderId); //查询分类 StringBuilder sql = new StringBuilder(); sql.append(" select ID,CATEGORY_NAME from CI_DAILY_PATROL_CUSTOMER_COMMONS_CATEGORY "); sql.append(" where customer_id = :cusId and USING_state=1 order by ordernum asc "); List categoryList = baseDao.queryForList(sql.toString(),param); //查询数据 sql.setLength(0); if(StringUtil.isNotBlank(orderId)){ sql.append(" select t.*,r.NOTE,IFNULL(r.RESULT_TYPE,1) RESULT from ( "); } sql.append(" select c.id CATEGORY_ID,i.id ITEM_ID,i.ITEM_NAME,i.NOTE ITEM_NOTE "); sql.append(" from CI_DAILY_PATROL_CUSTOMER_COMMONS_CATEGORY c "); sql.append(" inner join CI_DAILY_PATROL_CUSTOMER_COMMONS_ITEM i on c.id = i.category_id "); sql.append(" where c.using_state=1 and i.using_state=1 and c.customer_id=:cusId "); if(StringUtil.isNotBlank(orderId)){ sql.append(" ) t left join (select * from CI_DAILY_PATROL_COMMON_RECORD where PATROL_ID = :orderId ) r on t.item_id = r.item_id "); } List datalist = baseDao.queryForList(sql.toString(),param); //拼装数据 List resList = new ArrayList(); if(categoryList!=null&&categoryList.size()>0){ for(Map category : categoryList){ Map tempMap = new HashMap(); List tempList = new ArrayList(); String categoryId = category.get("ID").toString(); String categoryName = category.get("CATEGORY_NAME").toString(); tempMap.put("ID", categoryId); tempMap.put("NAME", categoryName); for(Map data:datalist){ if(categoryId.equals(data.get("CATEGORY_ID").toString())){ if(data.get("RESULT")==null){ data.put("RESULT", 1); } tempList.add(data); } } tempMap.put("dataList", tempList); resList.add(tempMap); } } return resList; } @Override public List getPatrolCiList(Map params) { //查询需巡检配置 StringBuilder sql = new StringBuilder(); sql.append(" select c.lv3_id,c.id,c.ciname,c.searchcode,c.position "); sql.append(" from ci_daily_patrol_ci p "); sql.append(" inner join cmdb_ci_base c on p.ci_id = c.id "); sql.append(" inner join ci_daily_ci_item_re r on r.ci_id = p.ci_id "); sql.append(" where c.state =1 and p.customer_id =:cusId "); if(StringUtil.isNotBlank(params.get("subCusId"))){ sql.append(" and p.sub_customer_id =:subCusId "); } if(StringUtil.isNotBlank(params.get("errflag"))){//只查巡检询异常配置 sql.append(" and exists ( "); sql.append(" select ci_id from (select ci_id from ci_daily_patrol_record where result<>1 and patrol_id=:orderId group by ci_id ) t where t.ci_id = c.id "); sql.append(" ) "); } sql.append(" group by c.id "); List ciList = baseDao.queryForList(sql.toString(),params); //查询指标 sql.setLength(0); sql.append(" select b.ci_id,b.id,d.item_name,e.result,e.note from "); sql.append(" ci_daily_patrol_ci a inner join ci_daily_ci_item_re b on a.ci_id = b.ci_id "); sql.append(" inner join ci_daily_patrol_customer_item c on b.cus_item_id = c.id "); sql.append(" inner join ci_daily_patrol_item d on c.item_id = d.id "); if(StringUtil.isNotBlank(params.get("errflag"))){//只查巡检询异常配置 sql.append(" inner join ci_daily_patrol_record e on e.item_id = b.id and e.patrol_id=:orderId and e.result<>1 "); }else{ sql.append(" left join ci_daily_patrol_record e on e.item_id = b.id and e.patrol_id=:orderId "); } sql.append(" where a.customer_id = :cusId "); List itemList = baseDao.queryForList(sql.toString(),params); //组装数据 if(ciList!=null&&ciList.size()>0){ Map ciSet = new HashMap(); for(Map ci:ciList){ ciSet.put(ConvertUtil.obj2Str(ci.get("id")), ci); } if(itemList!=null&&itemList.size()>0){ for(Map item:itemList){ String ci_id = ConvertUtil.obj2Str(item.get("ci_id")); if(ciSet.get(ci_id)!=null){ Map ci = ciSet.get(ci_id); if(ci.get("xjxlist")==null){ ci.put("xjxlist", new ArrayList()); } ((List)ci.get("xjxlist")).add(item); } } } } return ciList; } @Override public CI_DAILY_PATROL savePatrol(CI_DAILY_PATROL report, Map params) { String commonJsonListStr =params.get("commonJsonList"); String linkOrderId = params.get("linkOrderId"); List itemlist = JsonUtil.json2List(params.get("ciJsonList")); //配置数量 /*int nci_num = 0; int aci_num = 0;*/ //指标数量 int nitem_num = 0; int aitem_num = 0; Map ciMap = new HashMap(); Map aciMap = new HashMap(); if(itemlist!=null&&itemlist.size()>0){ for(Map item:itemlist){ String itemId = ConvertUtil.obj2StrBlank(item.get("itemId")); String c_ci_id = itemId.substring(0, itemId.indexOf("-")); //计算巡检指标数量 if(ConvertUtil.obj2StrBlank(item.get("result")).equals("1")){//正常 nitem_num ++ ; }else{//异常 aitem_num ++ ; aciMap.put(c_ci_id, "1"); } ciMap.put(c_ci_id, "1"); } } report.setNci_num(ciMap.size()-aciMap.size()) .setAci_num(aciMap.size()) .setNitem_num(nitem_num) .setAitem_num(aitem_num); if (StringUtil.isBlank(params.get("orderId"))) {//新增 report = report.setCreate_time(DateUtil.getCurrentDate14()) .setUser_id(params.get("user_id")).insert(); } else { report = report.setId(params.get("orderId")).update(); } //通用巡检记录 saveCommonPatrolRecord(report.getId(),commonJsonListStr); //设备巡检记录 saveCiPatrolRecord(report.getId(),params); //保存关联工单 saveLinkOrder(report.getId(),linkOrderId); return report; } /** * 保存关联工单信息 * @param orderId * @param linkOrderIds */ private void saveLinkOrder(String orderId,String linkOrderId){ if(!StringUtil.isEmpty(linkOrderId)){ String[] linkOrderIds = linkOrderId.split(","); baseDao.execute("delete from ORDER_REF_ORDER where BUSINESS_ID=:orderId", new SqlParameter("orderId",orderId)); if(linkOrderIds!=null&&linkOrderIds.length>0){ String sql = " insert into ORDER_REF_ORDER (ID,BUSINESS_ID,RELATE_FLOW_ID) " + " values (:id,:orderId,:linkOrderId)"; List paramList = new ArrayList(); for(int i=0;i list = JsonUtil.json2List(commonJsonListStr); baseDao.execute("delete from ci_daily_patrol_common_record where patrol_id = :orderId ", new SqlParameter("orderId",orderId)); if(list!=null&&list.size()>0){ String sql = " insert into CI_DAILY_PATROL_COMMON_RECORD " + "(ID,CATEGORY_ID,CATEGORY_NAME,ITEM_ID,ITEM_NAME,RESULT_TYPE,PATROL_ID,NOTE) " + "values (:id,:categoryId,:categoryName,:itemId,:itemName,:result,:orderId,:note) "; List paramList = new ArrayList(); for(Map map:list){ String id = StringUtil.getUUID(); String categoryId = ConvertUtil.obj2StrBlank(map.get("categoryId")); String categoryName = ConvertUtil.obj2StrBlank(map.get("categoryName")); String itemId = ConvertUtil.obj2StrBlank(map.get("itemId")); String itemName = ConvertUtil.obj2StrBlank(map.get("itemName")); String result = ConvertUtil.obj2StrBlank(map.get("result")); String note = ConvertUtil.obj2StrBlank(map.get("note")); SqlParameter param = new SqlParameter(); param.addValue("id", id) .addValue("categoryId", categoryId) .addValue("categoryName", categoryName) .addValue("itemId", itemId) .addValue("itemName", itemName) .addValue("result", result) .addValue("note", note) .addValue("orderId", orderId); paramList.add(param); } baseDao.executeBatch(sql, paramList); } } private void saveCiPatrolRecord(String orderId, Map params){ String ciJsonListStr = params.get("ciJsonList"); List list = JsonUtil.json2List(ciJsonListStr); String cisql = "SELECT * FROM CMDB_CI_BASE WHERE CUS_ID =:cus_id"; List ciList = baseDao.queryForList(cisql,params); Map cacheMap = new HashMap(); for(Map map:ciList){ cacheMap.put(map.get("ID"), map); } baseDao.execute("delete from ci_daily_patrol_record where PATROL_ID = :orderId ", new SqlParameter("orderId",orderId)); if(list!=null&&list.size() >0){ String sql = " insert into CI_DAILY_PATROL_RECORD " + "(ID,PATROL_ID,CI_ID,SEARCH_CODE,CI_NAME,MEMBER_CODE,POSITION,RESULT,NOTE,ITEM_ID) " + "values (:id,:orderId,:ciId,:searchCode,:ciName,:ciCode,:position,:result,:note,:item_id) "; List paramList = new ArrayList(); for(Map map:list){ String id = StringUtil.getUUID(); String[] ciitemIds = ConvertUtil.obj2StrBlank(map.get("itemId")).split("-"); Map ciMap = (Map)cacheMap.get(ciitemIds[0]); String ciId = ConvertUtil.obj2StrBlank(ciitemIds[0]); String searchCode = ConvertUtil.obj2StrBlank(ciMap.get("SEARCHCODE")); String ciName = ConvertUtil.obj2StrBlank(ciMap.get("CINAME")); String ciCode = ConvertUtil.obj2StrBlank(ciMap.get("CODE")); String position = ConvertUtil.obj2StrBlank(ciMap.get("POSITION")); String result = ConvertUtil.obj2StrBlank(map.get("result")); String note = ConvertUtil.obj2StrBlank(map.get("note")); String item_id = ConvertUtil.obj2StrBlank(ciitemIds[1]); SqlParameter param = new SqlParameter(); param.addValue("id", id) .addValue("ciId", ciId) .addValue("searchCode", searchCode) .addValue("ciName", ciName) .addValue("ciCode", ciCode) .addValue("position", position) .addValue("result", result) .addValue("note", note) .addValue("item_id", item_id) .addValue("orderId", orderId); paramList.add(param); } baseDao.executeBatch(sql, paramList); } } @Override public Map getRcxjById(String id) { return baseDao.queryForMap("select A.*,B.DEAL_NAME,B.DEAL_TIME from CI_DAILY_PATROL A LEFT JOIN FLOW_RECORD B ON A.ID = B.BUS_ID where A.ID=:id ORDER BY B.DEAL_TIME DESC",new SqlParameter("id",id)); } @Override public List getPatrolCiList(String id) { String sql = "select note,search_code,ci_id,ci_name,member_code,position,result from ci_daily_patrol_record where patrol_id = :id"; return baseDao.queryForList(sql,new SqlParameter("id",id)); } @Override public String getMonthWarnDate(Map params) { String patrolDate = params.get("patrolDate"); if(StringUtil.isBlank(patrolDate)){ patrolDate = DateUtil.getCurrentDate6().toString(); } StringBuilder sql = new StringBuilder(); sql.append(" select concat(',',GROUP_CONCAT(DISTINCT right(PATROL_DATE,2)),',') "); sql.append(" from CI_DAILY_PATROL p "); sql.append(" where ACI_NUM>0 and PATROL_DATE like :patrolDate "); if(StringUtil.isNotBlank(params.get("userId"))){ sql.append(" and user_id=:userId "); } if(StringUtil.isNotBlank(params.get("cusId"))){ sql.append(" and sub_cus_id=:cusId "); } params.put("patrolDate", patrolDate.substring(0,6)+"%"); String warnString= baseDao.queryForString(sql.toString(),params); return warnString; } @Override public String getHasReportDate(Map params) { String patrolDate = params.get("patrolDate"); if(StringUtil.isBlank(patrolDate)){ patrolDate = DateUtil.getCurrentDate6().toString(); } StringBuilder sql = new StringBuilder(); sql.append(" select CONVERT(concat(',',GROUP_CONCAT(DISTINCT right(PATROL_DATE,2)),',') USING utf8) "); sql.append(" from CI_DAILY_PATROL p "); sql.append(" where PATROL_DATE like :patrolDate "); if(StringUtil.isNotBlank(params.get("userId"))){ sql.append(" and user_id=:userId "); } if(StringUtil.isNotBlank(params.get("cusId"))){ sql.append(" and sub_cus_id=:cusId "); } params.put("patrolDate", patrolDate.substring(0,6)+"%"); String hasReportString= baseDao.queryForString(sql.toString(),params); return hasReportString; } @Override public List getCurDateOrders(Map params) { String sql = " select id orderId from ci_daily_patrol where patrol_date = :patrolDate "; if(StringUtil.isNotBlank(params.get("userId"))){ sql= sql + " and user_id= :userId "; } if(StringUtil.isNotBlank(params.get("cusId"))){ sql= sql + " and sub_cus_id= :cusId "; } return baseDao.queryForList(sql,params); } @Override public void doToNext(Map params, FlowRecord flowRecord) { StringBuilder sql = new StringBuilder(); sql.append(" update ci_daily_patrol set state=:state "); if (StringUtil.isNotBlank(params.get("cus_id"))) { sql.append(" ,cur_id=:cus_id,cur_name=:cus_id "); }else{ sql.append(" ,cur_id='',cur_name='' "); } sql.append(" where id=:id "); baseDao.execute(sql.toString(), params); //记录流程信息 flowRecordService.addRecord(flowRecord); } @Override public List getCiItemList(Map params) { List itemList = getPatrolCiList(params); return itemList; } @Override public Map getShInfoById(String orderId) { SqlParameter param = new SqlParameter(); param.addValue("orderId", orderId) .addValue("key", Constants.RCXJ_FLOW_DSH); String sql = " select * from flow_record where template_key = :key and bus_id = :orderId order by deal_time desc limit 1 "; return baseDao.queryForMap(sql,param); } @Override public List getLinkOrderList(String orderId) { String sql = " select r.RELATE_FLOW_ID FLOWID,b.* from ORDER_REF_ORDER r " + " inner join workflow_base b on r.RELATE_FLOW_ID = b.ID " + " where r.BUSINESS_ID = :orderId "; return baseDao.queryForList(sql, new SqlParameter("orderId",orderId)); } }