package com.sys.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.cku.core.BaseDAOMapper;
import com.cku.core.BaseService;
import com.cku.core.PageBeanResult;
import com.sys.dao.AreaMapper;
import com.sys.dao.CityMapper;
import com.sys.dao.ProvinceMapper;
import com.sys.model.Area;
import com.sys.model.AreaTreeResponse;
import com.sys.model.City;
import com.sys.model.Province;
@Service("areaService")
public class AreaServiceImpl extends BaseService {
@Autowired
public AreaMapper areaMapper;
@Autowired
public CityMapper cityMapper;
@Autowired
public ProvinceMapper provinceMapper;
@Override
protected BaseDAOMapper getDAO() {
return this.areaMapper;
}
public PageBeanResult getList(String cityCode) {
List list = areaMapper.selectByCityId(cityCode);
PageBeanResult prResult = new PageBeanResult();
prResult.list = list;
prResult.totalCount = (long) list.size();
return prResult;
}
public PageBeanResult findAreaTree() {
List provinceList = provinceMapper.selectAll();
List cityList = cityMapper.selectAll();
List areaList = areaMapper.selectAll();
Map> areaMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(areaList)) {
areaMap.putAll(areaList.stream().map(a -> {
return new AreaTreeResponse(a.getAreaId(), a.getArea(), a.getCityId(), 3, null);
}).collect(Collectors.groupingBy(AreaTreeResponse::getParentValue)));
}
Map> cityMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(cityList)) {
List cityResp = cityList.stream().map(a -> {
return new AreaTreeResponse(a.getCityId(), a.getCity(), a.getProvinceId(), 2, new ArrayList<>());
}).collect(Collectors.toList());
cityResp.forEach(c -> {
c.setChildren(areaMap.get(c.getValue()));
});
cityMap.putAll(cityResp.stream().collect(Collectors.groupingBy(AreaTreeResponse::getParentValue)));
}
List provinceResp = new ArrayList<>();
if (CollectionUtils.isNotEmpty(provinceList)) {
provinceResp = provinceList.stream().map(a -> {
return new AreaTreeResponse(a.getProvinceId(), a.getProvince(), null, 1, new ArrayList<>());
}).collect(Collectors.toList());
provinceResp.stream().forEach(p -> {
p.setChildren(cityMap.get(p.getValue()));
});
}
PageBeanResult prResult = new PageBeanResult<>();
prResult.list = provinceResp;
prResult.totalCount = (long) provinceResp.size();
return prResult;
}
}