|  | @@ -1,7 +1,5 @@
 | 
	
		
			
				|  |  |  package com.sysu.admin.controller.aland;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import com.querydsl.core.types.Predicate;
 | 
	
		
			
				|  |  | -import com.querydsl.core.types.dsl.BooleanExpression;
 | 
	
		
			
				|  |  |  import com.sysu.admin.controller.city.CityRepository;
 | 
	
		
			
				|  |  |  import com.sysu.admin.controller.city.DistrictRepository;
 | 
	
		
			
				|  |  |  import com.sysu.admin.controller.city.DistrictService;
 | 
	
	
		
			
				|  | @@ -16,10 +14,6 @@ import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.ArrayUtils;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | -import org.springframework.data.domain.Page;
 | 
	
		
			
				|  |  | -import org.springframework.data.domain.PageRequest;
 | 
	
		
			
				|  |  | -import org.springframework.data.domain.Pageable;
 | 
	
		
			
				|  |  | -import org.springframework.data.domain.Sort;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
	
		
			
				|  | @@ -37,7 +31,14 @@ public class LandService extends BaseService<Land,Long> {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      CityRepository cityRepository;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public List<TownStat> getLandAreaStat(Date date, String districtCode, String city){
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 农业地块统计
 | 
	
		
			
				|  |  | +     * @param date
 | 
	
		
			
				|  |  | +     * @param districtCode
 | 
	
		
			
				|  |  | +     * @param city
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public List<TownStatLand> getLandAreaStat(Date date, String districtCode, String city){
 | 
	
		
			
				|  |  |          Double percent = getPercent(date);
 | 
	
		
			
				|  |  |          List<Object[]> res = null;
 | 
	
		
			
				|  |  |          Map<Integer,String> namesMap = null;
 | 
	
	
		
			
				|  | @@ -53,20 +54,19 @@ public class LandService extends BaseService<Land,Long> {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          throw new RuntimeException("district 和 city 至少需要一个");
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public List<TownStat> getLandAreaStat(List<Object[]> res ,Double percent, Map<Integer,String> namesMap){
 | 
	
		
			
				|  |  | -        List<TownStat> townStatList = new ArrayList<>(30);
 | 
	
		
			
				|  |  | -        TownStat sumStat = new TownStat();
 | 
	
		
			
				|  |  | +    public List<TownStatLand> getLandAreaStat(List<Object[]> res , Double percent, Map<Integer,String> namesMap){
 | 
	
		
			
				|  |  | +        List<TownStatLand> townStatList = new ArrayList<>(30);
 | 
	
		
			
				|  |  | +        TownStatLand sumStat = new TownStatLand();
 | 
	
		
			
				|  |  |          sumStat.setTownName("汇总信息");
 | 
	
		
			
				|  |  |          townStatList.add(sumStat);
 | 
	
		
			
				|  |  |          Integer currentTownId = null;
 | 
	
		
			
				|  |  | -        TownStat townStat = null;
 | 
	
		
			
				|  |  | +        TownStatLand townStat = null;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          HashMap<String,LandAreaStat > sumMap = new HashMap<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          for(Object[] o : res){
 | 
	
		
			
				|  |  |              if(currentTownId == null || !o[0].toString().equals(currentTownId.toString())){
 | 
	
		
			
				|  |  | -                townStat = new TownStat();
 | 
	
		
			
				|  |  | +                townStat = new TownStatLand();
 | 
	
		
			
				|  |  |                  townStat.setList(new ArrayList<>());
 | 
	
		
			
				|  |  |                  currentTownId = Integer.valueOf(o[0].toString());
 | 
	
		
			
				|  |  |                  townStat.setTownId(currentTownId);
 | 
	
	
		
			
				|  | @@ -102,6 +102,11 @@ public class LandService extends BaseService<Land,Long> {
 | 
	
		
			
				|  |  |          return townStatList;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 根据月份得到一个1到 1.5的系数
 | 
	
		
			
				|  |  | +     * @param date
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  |      public Double getPercent(Date date){
 | 
	
		
			
				|  |  |          if(date == null){
 | 
	
		
			
				|  |  |              return 1.0;
 | 
	
	
		
			
				|  | @@ -111,6 +116,10 @@ public class LandService extends BaseService<Land,Long> {
 | 
	
		
			
				|  |  |          return percent;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 种植类型统计
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  |      public List<TownStatCrop> getCropAreaStat(Date date, String districtCode, String city){
 | 
	
		
			
				|  |  |          Double percent = getPercent(date);
 | 
	
		
			
				|  |  |          List<Object[]> res = null;
 | 
	
	
		
			
				|  | @@ -176,6 +185,77 @@ public class LandService extends BaseService<Land,Long> {
 | 
	
		
			
				|  |  |          return townStatList;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    public List<TownStatSoil> getStatSoil(String districtCode, String city, String type){
 | 
	
		
			
				|  |  | +        List<Object[]> res = null;
 | 
	
		
			
				|  |  | +        Map<Integer,String> namesMap = null;
 | 
	
		
			
				|  |  | +        String appendWhere = "";
 | 
	
		
			
				|  |  | +        String groupField = "";
 | 
	
		
			
				|  |  | +        if(districtCode != null){
 | 
	
		
			
				|  |  | +            namesMap = townService.getNames(districtCode);
 | 
	
		
			
				|  |  | +            appendWhere += " and district_code = '" +districtCode+"'";
 | 
	
		
			
				|  |  | +            groupField += "town_id";
 | 
	
		
			
				|  |  | +        }else if(city != null){
 | 
	
		
			
				|  |  | +            namesMap = districtService.getNames(city);
 | 
	
		
			
				|  |  | +            appendWhere += " and district_code like '" + city.substring(0,4) + "%'";
 | 
	
		
			
				|  |  | +            groupField += "district_code";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(namesMap == null){
 | 
	
		
			
				|  |  | +            throw new RuntimeException("district 和 city 至少需要一个");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        String[] fields = StatItemData.typeMap.get(type);
 | 
	
		
			
				|  |  | +        String sql = "select " + groupField + ", "+fields[1]+", sum(area), count(id) from leizhou_land where town_id is not null "+appendWhere+" group by "+groupField+","+fields[1];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //最大值最小值平均值
 | 
	
		
			
				|  |  | +        String sql2 = "select min("+fields[0]+"),avg("+fields[0]+"), max("+fields[0]+") from leizhou_land where town_id is not null" + appendWhere;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //城市数据的分组统计信息
 | 
	
		
			
				|  |  | +        res = mEntityManager.createNativeQuery(sql).getResultList();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //最小值最大值平均值的统计信息
 | 
	
		
			
				|  |  | +        Object[] objects = (Object[])mEntityManager.createNativeQuery(sql2).getSingleResult();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<TownStatSoil> list = getStatSoil(res, namesMap, type);
 | 
	
		
			
				|  |  | +        TownStatSoil townStatSoilSum = new TownStatSoil();
 | 
	
		
			
				|  |  | +        townStatSoilSum.setTownName("汇总信息");
 | 
	
		
			
				|  |  | +        List<StatSoil> sumItemList = new ArrayList<>(3);
 | 
	
		
			
				|  |  | +        townStatSoilSum.setList(sumItemList);
 | 
	
		
			
				|  |  | +        sumItemList.add(new StatSoil("最小值",Double.valueOf(objects[0].toString())));
 | 
	
		
			
				|  |  | +        sumItemList.add(new StatSoil("平均值",Double.valueOf(objects[1].toString())));
 | 
	
		
			
				|  |  | +        sumItemList.add(new StatSoil("最大值",Double.valueOf(objects[2].toString())));
 | 
	
		
			
				|  |  | +        list.set(0, townStatSoilSum);
 | 
	
		
			
				|  |  | +        return list;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public List<TownStatSoil> getStatSoil(List<Object[]> res, Map<Integer,String> namesMap, String type){
 | 
	
		
			
				|  |  | +        List<TownStatSoil> townStatSoilList = new ArrayList<>(30);
 | 
	
		
			
				|  |  | +        townStatSoilList.add(null);
 | 
	
		
			
				|  |  | +        Integer currentTownId = null;//当前城市id
 | 
	
		
			
				|  |  | +        TownStatSoil townStatSoil = null;//当前城市对象
 | 
	
		
			
				|  |  | +        for(Object[] o : res){
 | 
	
		
			
				|  |  | +            Double area = Double.valueOf(o[2].toString());
 | 
	
		
			
				|  |  | +            Integer level = Integer.valueOf(o[1].toString());
 | 
	
		
			
				|  |  | +            Integer townId = Integer.valueOf(o[0].toString());
 | 
	
		
			
				|  |  | +            if(currentTownId == null || !townId.equals(currentTownId)){
 | 
	
		
			
				|  |  | +                townStatSoil = new TownStatSoil();
 | 
	
		
			
				|  |  | +                townStatSoil.setList(new ArrayList<>());
 | 
	
		
			
				|  |  | +                currentTownId = townId;
 | 
	
		
			
				|  |  | +                townStatSoil.setTownId(currentTownId);
 | 
	
		
			
				|  |  | +                townStatSoil.setTownName(namesMap.get(currentTownId));
 | 
	
		
			
				|  |  | +                townStatSoilList.add(townStatSoil);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            StatSoil bean = new StatSoil();
 | 
	
		
			
				|  |  | +            bean.setValue(area);
 | 
	
		
			
				|  |  | +            bean.setColor(StatItemData.get(type, "Colors")[level]);
 | 
	
		
			
				|  |  | +            bean.setName(StatItemData.get(type, "Names")[level]);
 | 
	
		
			
				|  |  | +            bean.setValue((area + area / 2) / 1000);
 | 
	
		
			
				|  |  | +            townStatSoil.getList().add(bean);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return townStatSoilList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      public PaginationResult list(Double[] sure,String district, Integer townId, PaginationVo page, String cropType){
 | 
	
		
			
				|  |  |          String wkt = null;
 | 
	
		
			
				|  |  |          if(townId != null) {
 |