123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- 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;
- import com.sysu.admin.controller.city.TownService;
- import com.sysu.admin.support.base.BaseService;
- import com.sysu.admin.utils.MySimpleDateFormat;
- import com.sysu.admin.utils.TextUtil;
- import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- 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.*;
- @Service("LandService2")
- public class LandService extends BaseService<Land,Long> {
- @Autowired
- LandRepository landRepository;
- @Autowired
- TownService townService;
- @Autowired
- DistrictService districtService;
- @Autowired
- DistrictRepository districtRepository;
- @Autowired
- CityRepository cityRepository;
- public List<TownStat> getLandAreaStat(Date date, String districtCode, String city){
- Double percent = getPercent(date);
- List<Object[]> res = null;
- Map<Integer,String> namesMap = null;
- if(districtCode != null){
- namesMap = townService.getNames(districtCode);
- res = landRepository.statTownParcelTypeAll(districtCode);
- return getLandAreaStat(res,percent,namesMap);
- }
- if(city != null){
- namesMap = districtService.getNames(city);
- res = landRepository.statDistrictParcelTypeAll(city.substring(0,4) + "%");
- return getLandAreaStat(res,percent,namesMap);
- }
- 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();
- sumStat.setTownName("汇总信息");
- townStatList.add(sumStat);
- Integer currentTownId = null;
- TownStat 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.setList(new ArrayList<>());
- currentTownId = Integer.valueOf(o[0].toString());
- townStat.setTownId(currentTownId);
- townStat.setTownName(namesMap.get(currentTownId));
- townStatList.add(townStat);
- }
- LandAreaStat bean = new LandAreaStat();
- bean.setParcelType(Integer.valueOf(o[1].toString()));
- bean.setColor(LandAreaStat.castColor(bean.getParcelType()));
- bean.setName(LandAreaStat.castName(bean.getParcelType()));
- Double area = (Double)o[2];
- bean.setArea((area + area / 2) / 1000);
- bean.setArea(bean.getArea() * percent);
- bean.setCount(Integer.valueOf(o[3].toString()));
- townStat.getList().add(bean);
- //汇总信息
- LandAreaStat sum = sumMap.get(bean.getParcelType());
- if(sum == null){
- sum = new LandAreaStat(bean.getParcelType(), bean.getName(), bean.getColor());
- sumMap.put(bean.getParcelType().toString(), sum);
- }
- sum.setArea(sum.getArea() + bean.getArea());
- sum.setCount(sum.getCount() + bean.getCount());
- }
- //组装汇总List
- LandAreaStat[] sumArrays = new LandAreaStat[sumMap.size()];
- for(String key : sumMap.keySet()){
- sumArrays[Integer.valueOf(key)] = sumMap.get(key);
- }
- sumStat.setList(Arrays.asList(sumArrays));
- return townStatList;
- }
- public Double getPercent(Date date){
- if(date == null){
- return 1.0;
- }
- String mm = TextUtil.leftSubstring("-",TextUtil.rightSubstring("-", MySimpleDateFormat.formatDate(date)));
- Double percent = Double.parseDouble("1." + Integer.parseInt(mm) % 5);
- return percent;
- }
- public List<TownStatCrop> getCropAreaStat(Date date, String districtCode, String city){
- Double percent = getPercent(date);
- List<Object[]> res = null;
- Map<Integer,String> namesMap = null;
- if(districtCode != null){
- namesMap = townService.getNames(districtCode);
- res = landRepository.statTownCropTypeAll(districtCode);
- return getCropAreaStat(res,percent,namesMap);
- }
- if(city != null){
- namesMap = districtService.getNames(city);
- res = landRepository.statDistrictCropTypeAll(city.substring(0,4) + "%");
- return getCropAreaStat(res,percent,namesMap);
- }
- throw new RuntimeException("district 和 city 至少需要一个");
- }
- public List<TownStatCrop> getCropAreaStat(List<Object[]> res ,Double percent, Map<Integer,String> namesMap){
- List<TownStatCrop> townStatList = new ArrayList<>(30);
- TownStatCrop sumStat = new TownStatCrop();
- sumStat.setTownName("汇总信息");
- townStatList.add(sumStat);
- Integer currentTownId = null;
- TownStatCrop townStat = null;
- HashMap<String,CropAreaStat > sumMap = new HashMap<>();
- for(Object[] o : res){
- if(currentTownId == null || !o[0].toString().equals(currentTownId.toString())){
- townStat = new TownStatCrop();
- townStat.setList(new ArrayList<>());
- currentTownId = Integer.valueOf(o[0].toString());
- townStat.setTownId(currentTownId);
- townStat.setTownName(namesMap.get(currentTownId));
- townStatList.add(townStat);
- }
- CropAreaStat bean = new CropAreaStat();
- bean.setCropType(o[1].toString());
- bean.setColor(CropAreaStat.castColor(bean.getCropType()));
- bean.setName(CropAreaStat.castName(bean.getCropType()));
- Double area = (Double)o[2];
- bean.setArea((area + area / 2) / 1000);
- bean.setArea(bean.getArea() * percent);
- bean.setCount(Integer.valueOf(o[3].toString()));
- townStat.getList().add(bean);
- //汇总信息
- CropAreaStat sum = sumMap.get(bean.getCropType());
- if(sum == null){
- sum = new CropAreaStat(bean.getCropType(), bean.getName(), bean.getColor());
- sumMap.put(bean.getCropType(), sum);
- }
- sum.setArea(sum.getArea() + bean.getArea());
- sum.setCount(sum.getCount() + bean.getCount());
- }
- //组装汇总List
- CropAreaStat[] sumArrays = new CropAreaStat[sumMap.size()];
- for(String key : sumMap.keySet()){
- sumArrays[CropAreaStat.getCropTypeIndex(key)] = sumMap.get(key);
- }
- sumStat.setList(Arrays.asList(sumArrays));
- return townStatList;
- }
- public List<Land> list(String district, Integer townId, Integer limit, String cropType){
- limit = limit == null ? 50 : limit;
- String wkt = null;
- if(townId != null) {
- wkt = townService.findWktById(townId);
- }else if(StringUtils.isNotBlank(district)) {
- wkt = districtRepository.findWktByCode(district);
- }
- if(wkt == null) {
- Predicate predicate = null;
- Pageable pageable = PageRequest.of(1, limit, Sort.by(Land.FIELDS.id));
- QLand qLand = QLand.land;
- if(StringUtils.isNotBlank(cropType)){
- return landRepository.findAll(qLand.crop_type.eq(cropType), pageable).toList();
- }else{
- return landRepository.findAll(pageable).toList();
- }
- }else{
- return StringUtils.isNotBlank(cropType) ?
- landRepository.findListByWktAndCropType(wkt, cropType, limit) :
- landRepository.findListByWkt(wkt, limit);
- }
- }
- public Land findByPoint(Double[] point){
- return landRepository.findByPoint("Point("+point[0]+" "+point[1]+")");
- }
- @Override
- public JpaPlusRepository<Land, Long> r() {
- return landRepository;
- }
- }
|