| 
					
				 | 
			
			
				@@ -0,0 +1,218 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.sysu.admin.site; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.excel.EasyExcel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.city.CityRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.city.District; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.city.DistrictRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.CropLand; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.CropLandService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.CropLandVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.CropPoint; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.range.LandRangeIndexService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.xls.CropExcel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.xls.CropExcelService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.xls.CustomHandler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.crop.xls.PublishCropExcelListener; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.controller.geo.land.LandTaskStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.support.base.ServiceContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.support.shiro.ShiroService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.sysu.admin.utils.shape.GeoCastUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.xiesx.fastboot.base.result.BaseResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.xiesx.fastboot.base.result.R; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.xiesx.fastboot.core.token.annotation.GoToken; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.xiesx.fastboot.core.token.handle.CurrentToken; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.xiesx.fastboot.utils.CopyUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.catalina.util.URLEncoder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.locationtech.jts.geom.MultiPolygon; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.BeanUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Controller; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.web.bind.annotation.RequestBody; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.web.bind.annotation.RequestMapping; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.web.bind.annotation.ResponseBody; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.servlet.http.HttpServletResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.transaction.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.nio.charset.Charset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.nio.file.Path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 读取地图数据信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@RequestMapping("/site/crop") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Controller 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class SiteCropLandController extends ServiceContext { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CropLandService cityLandService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ShiroService shiroService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    LandRangeIndexService mLandRangeIndexService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    DistrictRepository districtRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CityRepository cityRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CropExcelService cropExcelService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/getInfo") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseResult getInfo(Double x, Double y){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CropLand cityLand = cityLandService.findByPoint(new Double[]{x,y}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(cityLand == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return R.fail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cityLand.setWkt(GeoCastUtil.geomToWkt(cityLand.getGeom())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return R.succ(cityLand); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/getGeoJson") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseResult getGeojson(@RequestBody CommonVo commonVo, @GoToken() CurrentToken currentToken){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CropPoint> cropLandList = cityLandService.findCropLandNoGeomByTableNamesAndBBox(commonVo.getTableNames(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                commonVo.getX1(),commonVo.getY1(),commonVo.getX2(),commonVo.getY2(), commonVo.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return R.succ(cropLandList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/getBuffer") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseResult getBuffer(Double x, Double y, Integer m){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return R.succ(cityLandService.getBuffer(new Double[]{x, y}, m)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/save") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseResult save(CropLandVo vo){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CropLand bean = cityLandService.findOne(vo.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(bean.getStatus().intValue() == LandTaskStatus.unpublished.ordinal()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            bean.setCreator(shiroService.getPrincipalId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            bean.setCreateDate(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BeanUtils.copyProperties(vo, bean, CopyUtils.nullNames(vo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        bean.setWkt(GeoCastUtil.geomToWkt(bean.getGeom())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        bean.setCenterPoint(cityLandService.getCenterPoint(bean.getGeom())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        District district = districtRepository.findByPoint(bean.getCenterPoint()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(district != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cityLandService.setCity(bean, district); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cityLandService.save(bean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return R.succ(bean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/publish") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseResult publish(@RequestBody CropLandVo vo, @GoToken() CurrentToken currentToken){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CropLand bean = cityLandService.findOne(vo.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(bean.getStatus().intValue() != LandTaskStatus.unpublished.ordinal()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return R.fail("不是未发布的地块!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(bean.getDistrict() == null || bean.getCenterPoint() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            bean.setCenterPoint(cityLandService.getCenterPoint(bean.getGeom())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            bean.getCenterPoint().setSRID(4326); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            District district = districtRepository.findByPoint(bean.getCenterPoint()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(district != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cityLandService.setCity(bean, district); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        bean.setStatus(LandTaskStatus.published.ordinal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cityLandService.save(bean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return R.succ(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/publish_index") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public String publishIndex(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return "page/publish_task"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/batchPublish") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseResult batchPublish(CropLandVo vo, String fileBase64){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(StringUtils.isNotBlank(fileBase64)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Path path = cityLandService.fileByBase64(fileBase64,"xls",mShiroService.getPrincipalId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PublishCropExcelListener publishCropExcelListener = new PublishCropExcelListener(mLandRangeIndexService); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            EasyExcel.read(path.toFile(), CropExcel.class,publishCropExcelListener).doReadAllSync(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String,List<Long>> stringListMap = publishCropExcelListener.getTableIdsMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for(String tableName : stringListMap.keySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cityLandService.batchPublishByIds(tableName, stringListMap.get(tableName)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(vo.getDistrictId() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String tableName = mLandRangeIndexService.getTableNameByCode(vo.getDistrictId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cityLandService.batchPublishByTableName(tableName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return R.succ(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/export_index") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public String exportIndex(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return "page/export"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/export") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void export(CropLandVo vo, HttpServletResponse response){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String tableNames; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(vo.getDistrictId() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tableNames = mLandRangeIndexService.getAllTableNames(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tableNames = mLandRangeIndexService.getTableNameByCode(vo.getDistrictId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CropLand> cropLandList = cityLandService.findAllByStatusAndDistrict(tableNames, vo.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CropExcel> cropExcelList = cropExcelService.cropLandToCropExcel(cropLandList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String mimetype = "application/x-msdownload"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String downFileName = "重庆耕地信息.xlsx"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String inlineType = "attachment"; // 是否内联附件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        response.setContentType(mimetype); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        response.setHeader("Content-Disposition", inlineType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                + ";filename=" + URLEncoder.DEFAULT.encode(downFileName, Charset.defaultCharset())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            EasyExcel.write(response.getOutputStream(), CropExcel.class).registerWriteHandler(new CustomHandler()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .sheet("sheet1").doWrite(cropExcelList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping("/addTest") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseResult addTest(@RequestBody String data){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String wkt = JSON.parseObject(data).get("wkt").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CropLand bean = new CropLand().setGeom((MultiPolygon)GeoCastUtil.wktToGeom(wkt)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setGridcode(2L).setStatus(LandTaskStatus.unpublished.ordinal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        bean.setCenterPoint(cityLandService.getCenterPoint(bean.getGeom())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        bean.getCenterPoint().setSRID(4326); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        District district = districtRepository.findByPoint(bean.getCenterPoint()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(district != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cityLandService.setCity(bean, district); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cityLandService.save(bean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return R.succ(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |