| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563 |
- package cn.com.goldenwater.dcproj.service.impl;
- import cn.com.goldenwater.dcproj.dao.AttInspTypeDao;
- import cn.com.goldenwater.dcproj.dao.IndexTotalQhDao;
- import cn.com.goldenwater.dcproj.dto.DcIndexTotalQhDto;
- import cn.com.goldenwater.dcproj.model.AttAdBase;
- import cn.com.goldenwater.dcproj.model.AttInspType;
- import cn.com.goldenwater.dcproj.model.RelOrgInspType;
- import cn.com.goldenwater.dcproj.param.RelOrgInspTypeParam;
- import cn.com.goldenwater.dcproj.service.AttAdBaseService;
- import cn.com.goldenwater.dcproj.service.IndexTotalQhService;
- import cn.com.goldenwater.dcproj.service.OlBisInspOrgService;
- import cn.com.goldenwater.dcproj.service.RelOrgInspTypeService;
- import cn.com.goldenwater.dcproj.utils.AdLevelUtil;
- import cn.com.goldenwater.dcproj.utils.Builder;
- import cn.com.goldenwater.dcproj.utils.RedisOperator;
- import cn.com.goldenwater.target.CheckException;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.TypeReference;
- import oracle.sql.TIMESTAMP;
- import org.apache.commons.collections.CollectionUtils;
- 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.sql.SQLException;
- import java.util.*;
- import java.util.stream.Collectors;
- @Service
- public class IndexTotalQhServiceImpl implements IndexTotalQhService {
- @Autowired
- private IndexTotalQhDao indexTotalQhDao;
- @Autowired
- private OlBisInspOrgService olBisInspOrgService;
- @Autowired
- private AttAdBaseService attAdBaseService;
- @Autowired
- private RedisOperator redisOperator;
- @Autowired
- private RelOrgInspTypeService relOrgInspTypeService;
- @Autowired
- private AttInspTypeDao attInspTypeDao;
- private static final String DC_INDEX_TOTAL_OBJ_PBLM_REDIS_KEY_PREFIX = "DITOP_";
- /**
- * PERSIZE PBLMSIZE GROUPSIZE MENDSIZE OBJSIZE PDSIZE
- *
- * @param dcIndexTotalQhDto
- * @return
- */
- @Override
- public List<Map<String, Object>> totalByType(DcIndexTotalQhDto dcIndexTotalQhDto) {
- getAdCode(dcIndexTotalQhDto);
- List<Map<String, Object>> objPblmData = getObjPblmData(dcIndexTotalQhDto);
- List<Map<String, Object>> persData = indexTotalQhDao.getPersData(dcIndexTotalQhDto);
- List<Map<String, Object>> zgData = indexTotalQhDao.getZgData(dcIndexTotalQhDto);
- List<RelOrgInspType> relOrgInspTypeList = relOrgInspTypeService.findList(Builder
- .of(RelOrgInspTypeParam::new)
- .with(RelOrgInspTypeParam::setOrgId, dcIndexTotalQhDto.getOrgId())
- .build());
- if (CollectionUtils.isEmpty(relOrgInspTypeList)) {
- throw new CheckException("未找到机构下的的督查类别!");
- }
- List<String> objTypeList = relOrgInspTypeList.stream()
- .map(RelOrgInspType::getInspType)
- .filter(StringUtils::isNotBlank)
- .distinct()
- .collect(Collectors.toList());
- List<Map<String, Object>> ret = new ArrayList<>();
- Map<String, Object> all = new HashMap<>(8);
- all.put("inspName", "全部");
- all.put("PERSIZE", persData.stream()
- .map(o -> MapUtils.getString(o, "PERSID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- all.put("GROUPSIZE", objPblmData.stream()
- .filter(o -> checkInTime(dcIndexTotalQhDto, "STTM", o))
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .filter(o -> o.length() == 12)
- .distinct()
- .count()
- );
- all.put("OBJSIZE", objPblmData.stream()
- .filter(o -> checkInTime(dcIndexTotalQhDto, "OBJ_INTM", o))
- .map(o -> MapUtils.getString(o, "OBJ_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- all.put("PBLMSIZE", objPblmData.stream()
- .filter(o -> checkInTime(dcIndexTotalQhDto, "COLL_TIME", o))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- all.put("MENDSIZE", zgData.stream()
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- all.put("PDSIZE", zgData.stream()
- .filter(o -> "1".equals(MapUtils.getString(o, "PBLM_OUT")))
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- ret.add(all);
- for (String objType : objTypeList) {
- Map<String, Object> map = new HashMap<>(8);
- map.put("CODE", objType);
- map.put("inspName", objPblmData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .map(o -> MapUtils.getString(o, "INSP_NAME"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .findFirst().orElseGet(() -> {
- AttInspType attInspType = attInspTypeDao.get(objType);
- return Optional.ofNullable(attInspType).map(AttInspType::getName).orElse("");
- }));
- map.put("PERSIZE", persData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .map(o -> MapUtils.getString(o, "PERSID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- map.put("GROUPSIZE", objPblmData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .filter(o -> checkInTime(dcIndexTotalQhDto, "STTM", o))
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .filter(o -> o.length() == 12)
- .distinct()
- .count()
- );
- map.put("OBJSIZE", objPblmData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .filter(o -> checkInTime(dcIndexTotalQhDto, "OBJ_INTM", o))
- .map(o -> MapUtils.getString(o, "OBJ_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- map.put("PBLMSIZE", objPblmData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .filter(o -> checkInTime(dcIndexTotalQhDto, "COLL_TIME", o))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- map.put("MENDSIZE", zgData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- map.put("PDSIZE", zgData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .filter(o -> "1".equals(MapUtils.getString(o, "PBLM_OUT")))
- .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<Map<String, Object>> totalPblmByPtype(DcIndexTotalQhDto dcIndexTotalQhDto) {
- getAdCode(dcIndexTotalQhDto);
- List<Map<String, Object>> objPblmData = getObjPblmData(dcIndexTotalQhDto);
- List<String> objTypeList = objPblmData.stream()
- .map(o -> MapUtils.getString(o, "CODE"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .collect(Collectors.toList());
- List<Map<String, Object>> ret = new ArrayList<>();
- for (String objType : objTypeList) {
- Map<String, Object> map = new HashMap<>(3);
- map.put("CODE", objType);
- map.put("inspName", objPblmData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .map(o -> MapUtils.getString(o, "INSP_NAME"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .findFirst());
- map.put("PBLMSIZE", objPblmData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .filter(o -> checkInTime(dcIndexTotalQhDto, "COLL_TIME", o))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- ret.add(map);
- }
- ret = ret.stream()
- .sorted(Comparator.comparingInt(o -> MapUtils.getIntValue((Map) o, "PBLMSIZE")).reversed())
- .limit(10)
- .collect(Collectors.toList());
- return ret;
- }
- /**
- * PERSIZE PBLMSIZE GROUPSIZE MENDSIZE OBJSIZE PDSIZE
- *
- * @param dcIndexTotalQhDto
- * @return
- */
- @Override
- public List<Map<String, Object>> totalByAdCode(DcIndexTotalQhDto dcIndexTotalQhDto) {
- getAdCode(dcIndexTotalQhDto);
- List<Map<String, Object>> objPblmData = getObjPblmData(dcIndexTotalQhDto);
- List<Map<String, Object>> persData = indexTotalQhDao.getPersData(dcIndexTotalQhDto);
- List<Map<String, Object>> zgData = indexTotalQhDao.getZgData(dcIndexTotalQhDto);
- String upAdCode = dcIndexTotalQhDto.getAdCode();
- switch (upAdCode.length()) {
- case 2:
- upAdCode += "0000000000";
- break;
- case 4:
- upAdCode += "00000000";
- break;
- default:
- }
- List<AttAdBase> adBaseList = attAdBaseService.getAdData(upAdCode);
- AttAdBase adBase = attAdBaseService.get(upAdCode);
- List<Map<String, Object>> ret = new ArrayList<>();
- Map<String, Object> all = new HashMap<>(8);
- all.put("CODE", adBase.getAdCode());
- all.put("inspName", adBase.getAdName());
- all.put("LAT", adBase.getLttd());
- all.put("LONG", adBase.getLgtd());
- all.put("PERSIZE", persData.stream()
- .map(o -> MapUtils.getString(o, "PERSID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- all.put("GROUPSIZE", objPblmData.stream()
- .filter(o -> checkInTime(dcIndexTotalQhDto, "STTM", o))
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .filter(o -> o.length() == 12)
- .distinct()
- .count()
- );
- all.put("OBJSIZE", objPblmData.stream()
- .filter(o -> checkInTime(dcIndexTotalQhDto, "OBJ_INTM", o))
- .map(o -> MapUtils.getString(o, "OBJ_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- all.put("PBLMSIZE", objPblmData.stream()
- .filter(o -> checkInTime(dcIndexTotalQhDto, "COLL_TIME", o))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- all.put("MENDSIZE", zgData.stream()
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- all.put("PDSIZE", zgData.stream()
- .filter(o -> "1".equals(MapUtils.getString(o, "PBLM_OUT")))
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- ret.add(all);
- for (AttAdBase attAdBase : adBaseList) {
- String adCode = AdLevelUtil.getAddvcd(attAdBase.getAdCode());
- Map<String, Object> 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("PERSIZE", persData.stream()
- .filter(o -> MapUtils.getString(o, "OBJ_AD_CODE", "AAA").contains(adCode))
- .map(o -> MapUtils.getString(o, "PERSID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- map.put("GROUPSIZE", objPblmData.stream()
- .filter(o -> MapUtils.getString(o, "OBJ_AD_CODE", "AAA").contains(adCode))
- .filter(o -> checkInTime(dcIndexTotalQhDto, "STTM", o))
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .filter(o -> o.length() == 12)
- .distinct()
- .count()
- );
- map.put("OBJSIZE", objPblmData.stream()
- .filter(o -> MapUtils.getString(o, "OBJ_AD_CODE", "AAA").contains(adCode))
- .filter(o -> checkInTime(dcIndexTotalQhDto, "OBJ_INTM", o))
- .map(o -> MapUtils.getString(o, "OBJ_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- map.put("PBLMSIZE", objPblmData.stream()
- .filter(o -> MapUtils.getString(o, "OBJ_AD_CODE", "AAA").contains(adCode))
- .filter(o -> checkInTime(dcIndexTotalQhDto, "COLL_TIME", o))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- map.put("MENDSIZE", zgData.stream()
- .filter(o -> MapUtils.getString(o, "OBJ_AD_CODE", "AAA").contains(adCode))
- .map(o -> MapUtils.getString(o, "ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- map.put("PDSIZE", zgData.stream()
- .filter(o -> MapUtils.getString(o, "OBJ_AD_CODE", "AAA").contains(adCode))
- .filter(o -> "1".equals(MapUtils.getString(o, "PBLM_OUT")))
- .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<Map<String, Object>> pblmByAdCode(DcIndexTotalQhDto dcIndexTotalQhDto) {
- getAdCode(dcIndexTotalQhDto);
- String upAdCode = dcIndexTotalQhDto.getAdCode();
- switch (upAdCode.length()) {
- case 2:
- upAdCode += "0000000000";
- break;
- case 4:
- upAdCode += "00000000";
- break;
- default:
- }
- List<Map<String, Object>> objPblmData = getObjPblmData(dcIndexTotalQhDto);
- List<AttAdBase> adBaseList = attAdBaseService.getAdData(upAdCode);
- List<String> objTypeList = objPblmData.stream()
- .map(o -> MapUtils.getString(o, "CODE"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .sorted(
- Comparator.comparing(o -> objPblmData.stream()
- .filter(a -> o.equals(MapUtils.getString(a, "CODE")))
- .map(a -> MapUtils.getString(a, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()).reversed()
- )
- .limit(10)
- .collect(Collectors.toList());
- List<Map<String, Object>> ret = new ArrayList<>();
- for (AttAdBase attAdBase : adBaseList) {
- String adCode = AdLevelUtil.getAddvcd(attAdBase.getAdCode());
- Map<String, Object> map = new HashMap<>(3);
- map.put("CODE", attAdBase.getAdCode());
- map.put("inspName", attAdBase.getAdName());
- List<Map<String, Object>> value = new ArrayList<>();
- for (String objType : objTypeList) {
- Map<String, Object> valueMap = new HashMap<>(3);
- valueMap.put("CODE", objType);
- valueMap.put("inspName", objPblmData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .map(o -> MapUtils.getString(o, "INSP_NAME"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .findFirst());
- valueMap.put("PBLMSIZE", objPblmData.stream()
- .filter(o -> objType.equals(MapUtils.getString(o, "CODE")))
- .filter(o -> MapUtils.getString(o, "OBJ_AD_CODE", "AAA").contains(adCode))
- .filter(o -> checkInTime(dcIndexTotalQhDto, "COLL_TIME", o))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- value.add(valueMap);
- }
- map.put("PBLMSIZE", value);
- ret.add(map);
- }
- return ret;
- }
- /**
- * PERSIZE PBLMSIZE GROUPSIZE MENDSIZE OBJSIZE PDSIZE
- *
- * @param dcIndexTotalQhDto
- * @return
- */
- @Override
- public Map<String, Object> pblmByCate(DcIndexTotalQhDto dcIndexTotalQhDto) {
- getAdCode(dcIndexTotalQhDto);
- List<Map<String, Object>> objPblmData = getObjPblmData(dcIndexTotalQhDto);
- objPblmData = objPblmData.stream()
- .filter(o -> checkInTime(dcIndexTotalQhDto, "COLL_TIME", o))
- .collect(Collectors.toList());
- Map<String, Object> ret = new HashMap<>(4);
- ret.put("INFOPBLMSIZE", objPblmData.stream()
- .filter(o -> "0".equals(MapUtils.getString(o, "INSP_PBLM_CATE")))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- ret.put("WARMPBLMSIZE", objPblmData.stream()
- .filter(o -> "1".equals(MapUtils.getString(o, "INSP_PBLM_CATE")))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- ret.put("ERRORPBLMSIZE", objPblmData.stream()
- .filter(o -> "2".equals(MapUtils.getString(o, "INSP_PBLM_CATE")))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- ret.put("ERRORSPBLMSIZE", objPblmData.stream()
- .filter(o -> "3".equals(MapUtils.getString(o, "INSP_PBLM_CATE")))
- .map(o -> MapUtils.getString(o, "PBLM_ID"))
- .filter(StringUtils::isNotBlank)
- .distinct()
- .count()
- );
- return ret;
- }
- private void getAdCode(DcIndexTotalQhDto dcIndexTotalQhDto) {
- if (StringUtils.isBlank(dcIndexTotalQhDto.getAdCode())) {
- dcIndexTotalQhDto.setAdCode(AdLevelUtil.getAddvcd(olBisInspOrgService.getProvince(dcIndexTotalQhDto.getOrgId())));
- } else {
- dcIndexTotalQhDto.setAdCode(AdLevelUtil.getAddvcd(dcIndexTotalQhDto.getAdCode()));
- }
- }
- private List<Map<String, Object>> getObjPblmData(DcIndexTotalQhDto dcIndexTotalQhDto) {
- String redisKey = DC_INDEX_TOTAL_OBJ_PBLM_REDIS_KEY_PREFIX + dcIndexTotalQhDto.toString();
- String ret = redisOperator.get(redisKey);
- if (ret == null) {
- List<Map<String, Object>> objPblmData = indexTotalQhDao.getObjPblmData(dcIndexTotalQhDto);
- redisOperator.set(redisKey, JSON.toJSONString(objPblmData), 300);
- return objPblmData;
- }
- return JSON.parseObject(ret, new TypeReference<List<Map<String, Object>>>() {
- });
- }
- private boolean checkInTime(DcIndexTotalQhDto dcIndexTotalQhDto, String param, Map<String, Object> map) {
- boolean ret = false;
- if (dcIndexTotalQhDto.getSttm() == null && dcIndexTotalQhDto.getEntm() == null) {
- return true;
- }
- Object timeObj = map.get(param);
- Date time = null;
- if (timeObj instanceof oracle.sql.TIMESTAMP) {
- oracle.sql.TIMESTAMP t = (TIMESTAMP) timeObj;
- try {
- time = new Date(t.dateValue().getTime());
- } catch (SQLException e) {
- e.printStackTrace();
- }
- } else if (timeObj instanceof Long) {
- time = new Date((Long) timeObj);
- } else {
- time = (Date) timeObj;
- }
- if (time == null) {
- return ret;
- }
- if (dcIndexTotalQhDto.getSttm() != null) {
- if (dcIndexTotalQhDto.getSttm().before(time)) {
- ret = true;
- } else {
- return false;
- }
- }
- if (dcIndexTotalQhDto.getEntm() != null) {
- if (dcIndexTotalQhDto.getEntm().after(time)) {
- ret = true;
- }
- }
- return ret;
- }
- }
|