package cn.com.goldenwater.dcproj.service.impl; import cn.com.goldenwater.dcproj.dao.IndexTotalQhJcDao; import cn.com.goldenwater.dcproj.dto.DcIndexTotalQhDto; import cn.com.goldenwater.dcproj.model.AttAdBase; import cn.com.goldenwater.dcproj.service.AttAdBaseService; import cn.com.goldenwater.dcproj.service.IndexTotalQhJcService; import cn.com.goldenwater.dcproj.service.OlBisInspOrgService; import cn.com.goldenwater.dcproj.utils.AdLevelUtil; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service public class IndexTotalQhJcServiceImpl implements IndexTotalQhJcService { @Autowired private IndexTotalQhJcDao indexTotalQhDao; @Autowired private OlBisInspOrgService olBisInspOrgService; @Autowired private AttAdBaseService attAdBaseService; private static Map listTypeMap = new HashMap<>(6); { listTypeMap.put("1", "前期与设计"); listTypeMap.put("2", "建设管理"); listTypeMap.put("3", "计划下达与执行"); listTypeMap.put("4", "资金使用与管理"); listTypeMap.put("5", "工程质量"); listTypeMap.put("6", "工程安全"); } private List> getObjPblmData(DcIndexTotalQhDto dcIndexTotalQhDto) { List> objPblmData = indexTotalQhDao.getObjPblmData(dcIndexTotalQhDto); for (Map map : objPblmData) { map.put("inspName", listTypeMap.get(MapUtils.getString(map, "LIST_TYPE", ""))); } return objPblmData; } /** * PERSIZE PBLMSIZE GROUPSIZE MENDSIZE OBJSIZE PDSIZE * * @param dcIndexTotalQhDto * @return */ @Override public List> totalByType(DcIndexTotalQhDto dcIndexTotalQhDto) { getAdCode(dcIndexTotalQhDto); List> objPblmData = getObjPblmData(dcIndexTotalQhDto); List> ret = new ArrayList<>(); Map all = new HashMap<>(5); all.put("inspName", "全部"); all.put("PBLMSIZE", objPblmData.stream() .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); all.put("INFOSIZE", objPblmData.stream() .filter(o -> "0".equals(MapUtils.getString(o, "PBLM_PASI"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); all.put("WARMSIZE", objPblmData.stream() .filter(o -> "1".equals(MapUtils.getString(o, "PBLM_PASI"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); all.put("ERRORSIZE", objPblmData.stream() .filter(o -> "2".equals(MapUtils.getString(o, "PBLM_PASI"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); ret.add(all); for (int i = 1; i < 7; i++) { String iStr = String.valueOf(i); List> listTypeList = objPblmData.stream() .filter(o -> iStr.equals(MapUtils.getString(o, "LIST_TYPE"))).collect(Collectors.toList()); Map map = new HashMap<>(8); map.put("CODE", String.valueOf(i)); map.put("inspName", listTypeMap.get(String.valueOf(i))); map.put("PBLMSIZE", listTypeList.stream() .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); map.put("INFOSIZE", listTypeList.stream() .filter(o -> "0".equals(MapUtils.getString(o, "PBLM_PASI"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); map.put("WARMSIZE", listTypeList.stream() .filter(o -> "1".equals(MapUtils.getString(o, "PBLM_PASI"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); map.put("ERRORSIZE", listTypeList.stream() .filter(o -> "2".equals(MapUtils.getString(o, "PBLM_PASI"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); ret.add(map); } return ret; } /** * PERSIZE PBLMSIZE GROUPSIZE MENDSIZE OBJSIZE PDSIZE * * @param dcIndexTotalQhDto * @return */ @Override public List> totalPblmByPtype(DcIndexTotalQhDto dcIndexTotalQhDto) { getAdCode(dcIndexTotalQhDto); List> objPblmData = getObjPblmData(dcIndexTotalQhDto); List> ret = new ArrayList<>(); for (int i = 1; i < 7; i++) { Map map = new HashMap<>(3); map.put("CODE", i); map.put("inspName", listTypeMap.get(String.valueOf(i))); String iStr = String.valueOf(i); map.put("PBLMSIZE", objPblmData.stream() .filter(o -> iStr.equals(MapUtils.getString(o, "LIST_TYPE"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); ret.add(map); } return ret; } /** * PERSIZE PBLMSIZE GROUPSIZE MENDSIZE OBJSIZE PDSIZE * * @param dcIndexTotalQhDto * @return */ @Override public List> totalByAdCode(DcIndexTotalQhDto dcIndexTotalQhDto) { getAdCode(dcIndexTotalQhDto); List> objPblmData = getObjPblmData(dcIndexTotalQhDto); String upAdCode = dcIndexTotalQhDto.getAdCode(); switch (upAdCode.length()) { case 2: upAdCode += "0000000000"; break; case 4: upAdCode += "00000000"; break; default: } List adBaseList = attAdBaseService.getAdData(upAdCode); List> ret = new ArrayList<>(); for (AttAdBase attAdBase : adBaseList) { String adCode = AdLevelUtil.getAddvcd(attAdBase.getAdCode()); Map map = new HashMap<>(10); map.put("CODE", attAdBase.getAdCode()); map.put("inspName", attAdBase.getAdName()); map.put("LAT", attAdBase.getLttd()); map.put("LONG", attAdBase.getLgtd()); map.put("PBLMSIZE", objPblmData.stream() .filter(o -> MapUtils.getString(o, "AD_CODE", "AAA").contains(adCode)) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); ret.add(map); } return ret; } /** * PERSIZE PBLMSIZE GROUPSIZE MENDSIZE OBJSIZE PDSIZE * * @param dcIndexTotalQhDto * @return */ @Override public List> pblmByAdCode(DcIndexTotalQhDto dcIndexTotalQhDto) { getAdCode(dcIndexTotalQhDto); List> objPblmData = indexTotalQhDao.getObjPblmData(dcIndexTotalQhDto); List rgstrIdList = objPblmData.stream() .map(o -> MapUtils.getString(o, "RGSTR_ID")) .filter(StringUtils::isNotBlank) .distinct() .collect(Collectors.toList()); List> ret = new ArrayList<>(); for (String rgstrId : rgstrIdList) { List> rgstrData = objPblmData.stream() .filter(o -> rgstrId.equals(MapUtils.getString(o, "RGSTR_ID"))) .distinct() .collect(Collectors.toList()); Map map = new HashMap<>(3); map.put("CODE", rgstrId); map.put("inspName", rgstrData.stream().map(o -> MapUtils.getString(o, "NAME")).findFirst()); List> value = new ArrayList<>(); for (int i = 1; i < 7; i++) { String iStr = String.valueOf(i); List> listTypeList = rgstrData.stream() .filter(o -> iStr.equals(MapUtils.getString(o, "LIST_TYPE"))).collect(Collectors.toList()); Map valueMap = new HashMap<>(8); valueMap.put("CODE", String.valueOf(i)); valueMap.put("inspName", listTypeMap.get(String.valueOf(i))); valueMap.put("PBLMSIZE", listTypeList.stream() .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); valueMap.put("INFOSIZE", listTypeList.stream() .filter(o -> "0".equals(MapUtils.getString(o, "PBLM_PASI"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); valueMap.put("WARMSIZE", listTypeList.stream() .filter(o -> "1".equals(MapUtils.getString(o, "PBLM_PASI"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); valueMap.put("ERRORSIZE", listTypeList.stream() .filter(o -> "2".equals(MapUtils.getString(o, "PBLM_PASI"))) .map(o -> MapUtils.getString(o, "ID")) .filter(StringUtils::isNotBlank) .distinct() .count() ); value.add(valueMap); } map.put("PBLMSIZE", value); ret.add(map); } return ret; } private void getAdCode(DcIndexTotalQhDto dcIndexTotalQhDto) { dcIndexTotalQhDto.setProvince(AdLevelUtil.getAddvcd(olBisInspOrgService.getProvince(dcIndexTotalQhDto.getOrgId()))); if (StringUtils.isBlank(dcIndexTotalQhDto.getAdCode())) { dcIndexTotalQhDto.setAdCode(AdLevelUtil.getAddvcd(olBisInspOrgService.getProvince(dcIndexTotalQhDto.getOrgId()))); } else { dcIndexTotalQhDto.setAdCode(AdLevelUtil.getAddvcd(dcIndexTotalQhDto.getAdCode())); } } }