TbAreaManageServiceImpl.java 9.17 KB
package com.zteits.sys.biz;

import com.clouds.common.log.LogSelf;
import com.clouds.common.utils.ListCopyUtil;
import com.clouds.common.utils.LogSelfFactory;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.constants.AreaTypeEnum;
import com.zteits.clouds.api.dto.bill.closecarpark.dto.InitSpecialCarDTO;
import com.zteits.clouds.api.dto.park.dto.AreaBlockListDTO;
import com.zteits.clouds.api.dto.park.param.InitAreaRequest;
import com.zteits.clouds.api.dto.park.param.InitSpecialCarAreaRequest;
import com.zteits.clouds.api.dto.park.param.closecarpark.QueryAreaBlockRequest;
import com.zteits.clouds.api.dto.sys.AreaTreeBindDTO;
import com.zteits.clouds.api.dto.sys.AreaTreeDTO;
import com.zteits.clouds.api.dto.sys.param.AreaListTreeDTO;
import com.zteits.clouds.api.service.sys.TbAreaManageService;
import com.zteits.sys.dao.TbAreaDao;
import com.zteits.sys.dao.TbAreaManageDao;
import com.zteits.sys.domain.TbArea;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Service("com.zteits.sys.biz.TbAreaManageServiceImpl")
public class TbAreaManageServiceImpl implements TbAreaManageService {

    private static final LogSelf log = LogSelfFactory.getLogSelf(TbAreaManageServiceImpl.class);
    @Autowired
    private TbAreaManageDao tbAreaManageDao;


    @Autowired
    private TbAreaDao tbAreaDao;
    @Override
    public BizResult<List<AreaListTreeDTO>> initAreaList(InitAreaRequest request) {

        List<AreaListTreeDTO> list = tbAreaManageDao.InitAreaList(request);
        List<AreaListTreeDTO> listTree = new ArrayList<AreaListTreeDTO>();
        if(request.getId() == 0){
            AreaListTreeDTO areaListTreeDTO = new AreaListTreeDTO();
            areaListTreeDTO.setValue(100000L);
            areaListTreeDTO.setLabel("全国");
            areaListTreeDTO.setId(0L);
            areaListTreeDTO.setParentId(-1L);
            areaListTreeDTO.setAreaType(30);
//            List<AreaListTreeDTO> childList = new ArrayList<AreaListTreeDTO>();
//            AreaListTreeDTO dto = new AreaListTreeDTO();
//            childList.add(areaListTreeDTO);
            diguiDto(areaListTreeDTO,list);
            listTree.add(areaListTreeDTO);
        }else if(request.getId() != 0 && request.getAreaType() == 30){
            AreaListTreeDTO areaListTreeDTO = new AreaListTreeDTO();
            List<AreaListTreeDTO> listProTree = new ArrayList<AreaListTreeDTO>();
            areaListTreeDTO.setValue(100000L);
            areaListTreeDTO.setLabel("全国");
            areaListTreeDTO.setId(0L);
            areaListTreeDTO.setParentId(-1L);
            areaListTreeDTO.setAreaType(30);
            for (int i = 0;i<list.size();i++){
                if(list.get(i).getId().equals(request.getId())){
                    AreaListTreeDTO areaDto = list.get(i);
                    diguiDto(areaDto,list);
                    listProTree.add(areaDto);
                    areaListTreeDTO.setChildren(listProTree);
                    listTree.add(areaListTreeDTO);
                }
            }
        }

        return  new BizResult<List<AreaListTreeDTO>>(listTree);
    }

    @Override
    public BizResult<List<AreaTreeBindDTO>> initSpecialCarAreaTree(InitSpecialCarAreaRequest request) {
        List<AreaTreeBindDTO> areaTree = new ArrayList<>();
        List<AreaTreeDTO> areaTreeDTOList = new ArrayList<>();
        if(request.getList().size() != 0){


        //2.1 根据节点查询区域数据
       // List<TbArea> areaIds = tbAreaDao.queryTbAreaByIdList(this.getAreaCodeFromBlockList(list));
        ListCopyUtil.listCopyProperties(request.getList(),areaTreeDTOList,AreaTreeDTO.class);
        List<TbArea> areaList = tbAreaDao.queryAreaByIdsAndAreaType(this.getAreaCodeFromAreaDTOList(areaTreeDTOList), AreaTypeEnum.DISTRICT.code());
        log.info("获取区县list.size()={}",!CollectionUtils.isEmpty(areaList) ?areaList.size():0);
        /**3.查询地市list.*/
        List<TbArea> cityList = tbAreaDao.queryAreaByIdsAndAreaType(this.getAreaCodeFromAreaList(areaList), AreaTypeEnum.CITY.code());
        log.info("获取地市list.size()={}",!CollectionUtils.isEmpty(cityList) ?cityList.size():0);
        /**4.查询省份list.*/
        List<TbArea> provList = tbAreaDao.queryAreaByIdsAndAreaType(this.getAreaCodeFromAreaList(cityList), AreaTypeEnum.PROVINCE.code());
        log.info("获取省份list.size()={}",!CollectionUtils.isEmpty(provList) ?provList.size():0);


        //添加省份
        if(!CollectionUtils.isEmpty(provList)){
            AreaTreeBindDTO areaDTO = new AreaTreeBindDTO();
            areaDTO.setId(-1L);
            areaDTO.setAreaName("全国");
            areaDTO.setLabel("全国");
            areaDTO.setParentId(-1L);
            areaTree.add(areaDTO);
            for(TbArea area:provList){
                AreaTreeBindDTO areaTreeDTO = new AreaTreeBindDTO();
                if(area == null){
                    continue;
                }
                areaTreeDTO.setId(area.getId());
                areaTreeDTO.setAreaName(area.getAreaName());
                areaTreeDTO.setLabel(area.getAreaName());
                areaTreeDTO.setParentId(-1L);
                areaTreeDTO.setAreaType(area.getAreaType());
                areaTree.add(areaTreeDTO);
            }
        }

        //添加地市、区县
        if(!CollectionUtils.isEmpty(cityList)){
            cityList.addAll(areaList);
            for(TbArea area:cityList){
                AreaTreeBindDTO areaTreeDTO = new AreaTreeBindDTO();
                if(area == null){
                    continue;
                }
                areaTreeDTO.setId(area.getId());
                areaTreeDTO.setAreaName(area.getAreaName());
                areaTreeDTO.setLabel(area.getAreaName());
                areaTreeDTO.setParentId(area.getParentId());
                areaTreeDTO.setAreaType(area.getAreaType());
                areaTree.add(areaTreeDTO);
              }
             }
        }
        return new BizResult<List<AreaTreeBindDTO>>(areaTree);
    }

    @Override
    public BizResult<List<AreaBlockListDTO>> areaBlockByAreaId(QueryAreaBlockRequest request) {

        request.setAreaType(AreaTypeEnum.BLOCK.code());
        List<AreaBlockListDTO> list = tbAreaManageDao.areaBlockByAreaId(request);
        return new BizResult<List<AreaBlockListDTO>>(list);
    }

    public void digui(List<AreaListTreeDTO> pros,List<AreaListTreeDTO> list) {
        List<AreaListTreeDTO> retList = new ArrayList<AreaListTreeDTO>();
        for (AreaListTreeDTO p : pros) {
            for (AreaListTreeDTO l:list){
                if(p.getId().equals(l.getParentId())){
                    retList.add(l);
                }
            }
            if (retList.size() > 0) {
                p.setChildren(retList);
                digui(retList,list); //循环调用自己
            }
        }
    }


    public AreaListTreeDTO diguiDto(AreaListTreeDTO pros,List<AreaListTreeDTO> list) {
        List<AreaListTreeDTO> retList = new ArrayList<AreaListTreeDTO>();

        if(pros != null){
            for (AreaListTreeDTO l:list){
                if(pros.getId().equals(l.getParentId())){
                    AreaListTreeDTO dto = new AreaListTreeDTO();
                    BeanUtils.copyProperties(l, dto);
                    diguiDto(dto,list);
                    retList.add(dto);
                }
            }
        }
        pros.setChildren(retList);
       return pros;
    }

    /**
     * 获取块中的区县list.<br/>
     * @param areaBlockList
     * @return
     * 2017年12月27日  wangfs.<br/>
     */
    private List<Long> getAreaCodeFromBlockList(List<InitSpecialCarDTO> areaBlockList){
        Set<Long> set = new HashSet<>();
        if(!CollectionUtils.isEmpty(areaBlockList)){
            for(InitSpecialCarDTO areaBlock:areaBlockList){
                if(areaBlock == null){
                    continue;
                }
                set.add(areaBlock.getParentId());
            }
        }
        return  new ArrayList<Long>(set);
    }


    /**
     * 查询区域父类ids.<br/>
     * @param
     * @return
     * 2017年12月27日  wangfs.<br/>
     */
    private List<Long> getAreaCodeFromAreaDTOList(List<AreaTreeDTO> areaList){
        Set<Long> set = new HashSet<>();
        if(!CollectionUtils.isEmpty(areaList)){
            for(AreaTreeDTO area:areaList){
                if(area == null){
                    continue;
                }
                set.add(area.getParentId());
            }
        }
        return  new ArrayList<Long>(set);
    }

    /**
     * 查询区域父类ids.<br/>
     * @param
     * @return
     * 2017年12月27日  wangfs.<br/>
     */
    private List<Long> getAreaCodeFromAreaList(List<TbArea> areaList){
        Set<Long> set = new HashSet<>();
        if(!CollectionUtils.isEmpty(areaList)){
            for(TbArea area:areaList){
                if(area == null){
                    continue;
                }
                set.add(area.getParentId());
            }
        }
        return  new ArrayList<Long>(set);
    }
}