| 
					
				 | 
			
			
				@@ -1,40 +1,34 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.sysu.admin.controller.crop; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.querydsl.core.BooleanBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.excel.EasyExcel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.querydsl.core.types.Predicate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.querydsl.core.types.dsl.BooleanExpression; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.querydsl.core.types.dsl.PathBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.querydsl.jpa.impl.JPAUpdateClause; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.sysu.admin.api.crop.CropVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.sysu.admin.api.interceptor.LogAspect; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.sysu.admin.controller.city.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-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.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.PublishCropExcelListener; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.sysu.admin.controller.geo.land.LandTaskStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.sysu.admin.support.base.BaseVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.sysu.admin.support.base.ServiceContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.sysu.admin.support.shiro.ShiroService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.sysu.admin.utils.GenericsUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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.utils.CopyUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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.data.domain.Sort; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Controller; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.web.bind.annotation.RequestMapping; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.web.bind.annotation.ResponseBody; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.web.bind.annotation.RestController; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.servlet.http.HttpServletResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.transaction.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.net.URLEncoder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.nio.file.Path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.Executor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.Executors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 读取地图数据信息 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,6 +47,8 @@ public class CropLandController extends ServiceContext { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     DistrictRepository districtRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     CityRepository cityRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CropExcelService cropExcelService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @RequestMapping("/getInfo") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @ResponseBody 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -128,27 +124,52 @@ public class CropLandController extends ServiceContext { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @RequestMapping("/batchPublish") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Transactional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public BaseResult batchPublish(CropLandVo vo){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QCropLand qCropLand = QCropLand.cropLand; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        JPAUpdateClause jpaUpdateClause = mJPAQueryFactory.update(qCropLand); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        jpaUpdateClause.set(qCropLand.status, LandTaskStatus.published.ordinal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        jpaUpdateClause.set(qCropLand.updateDate, new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Predicate predicate = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(vo.getProvinceId() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            predicate = qCropLand.province.eq(vo.getProvinceId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(vo.getCityId() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            predicate = qCropLand.city.eq(vo.getCityId()).and(predicate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(vo.getDistrictId() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            predicate = qCropLand.district.eq(vo.getDistrictId()).and(predicate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(predicate != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            predicate = qCropLand.status.eq(LandTaskStatus.unpublished.ordinal()).and(predicate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            jpaUpdateClause.where(predicate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            jpaUpdateClause.execute(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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.encode(downFileName)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            EasyExcel.write(response.getOutputStream(), CropExcel.class).sheet("sheet1").doWrite(cropExcelList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return R.succ(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @RequestMapping("/addTest") 
			 |