Administrator há 2 anos atrás
pai
commit
a39e11c3ad

+ 1 - 1
src/main/java/com/sysu/admin/api/crop/ApiCropController.java

@@ -130,7 +130,7 @@ public class ApiCropController extends BaseComponent {
     @LogAspect
     public BaseResult list(@RequestHeader("token") String token){
         CurrentToken currentToken = CurrentToken.getCurrentToken(token);
-        List<CropLand> cityLandList = cityLandService.findIdAndNameByExecutor(Long.valueOf(currentToken.getUserId()));
+        List<Object[]> cityLandList = cityLandService.findIdAndNameByExecutor(Long.valueOf(currentToken.getUserId()));
         return R.succ(cityLandList);
     }
 

+ 15 - 0
src/main/java/com/sysu/admin/controller/crop/CropLand.java

@@ -23,6 +23,21 @@ import java.util.Date;
 @DynamicInsert
 @DynamicUpdate
 public class CropLand {
+
+    public CropLand(){
+    }
+
+    public CropLand(Long id, Integer cropType, Integer growingPeriod, Integer confirm, Integer district, String name, String address, String desc) {
+        this.id = id;
+        this.cropType = cropType;
+        this.growingPeriod = growingPeriod;
+        this.confirm = confirm;
+        this.district = district;
+        this.name = name;
+        this.address = address;
+        this.desc = desc;
+    }
+
     /**
      * 主键
      */

+ 8 - 3
src/main/java/com/sysu/admin/controller/crop/CropLandController.java

@@ -1,12 +1,15 @@
 package com.sysu.admin.controller.crop;
 
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
 import com.querydsl.core.types.Predicate;
 import com.querydsl.jpa.impl.JPAUpdateClause;
 import com.sysu.admin.controller.city.*;
 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;
@@ -15,6 +18,7 @@ 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.catalina.util.URLEncoder;
 import org.apache.commons.lang3.StringUtils;
 import org.locationtech.jts.geom.MultiPolygon;
 import org.springframework.beans.BeanUtils;
@@ -26,7 +30,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import javax.servlet.http.HttpServletResponse;
 import javax.transaction.Transactional;
 import java.io.IOException;
-import java.net.URLEncoder;
+import java.nio.charset.Charset;
 import java.nio.file.Path;
 import java.util.*;
 
@@ -164,9 +168,10 @@ public class CropLandController extends ServiceContext {
         String inlineType = "attachment"; // 是否内联附件
         response.setContentType(mimetype);
         response.setHeader("Content-Disposition", inlineType
-                + ";filename=" + URLEncoder.encode(downFileName));
+                + ";filename=" + URLEncoder.DEFAULT.encode(downFileName, Charset.defaultCharset()));
         try {
-            EasyExcel.write(response.getOutputStream(), CropExcel.class).sheet("sheet1").doWrite(cropExcelList);
+            EasyExcel.write(response.getOutputStream(), CropExcel.class).registerWriteHandler(new CustomHandler())
+                    .sheet("sheet1").doWrite(cropExcelList);
         } catch (IOException e) {
             e.printStackTrace();
         }

+ 3 - 2
src/main/java/com/sysu/admin/controller/crop/CropLandService.java

@@ -85,7 +85,7 @@ public class CropLandService extends BaseService<CropLand, Long> {
     }
 
     @DynamicTableNames(executor = "executor")
-    public List<CropLand> findIdAndNameByExecutor(Long executor){
+    public List<Object[]> findIdAndNameByExecutor(Long executor){
         Query query =mEntityManager.createQuery("select c.id,c.name,c.updateDate,c.confirm from CropLand c where c.executor = " + executor);
         return query.getResultList();
     }
@@ -192,7 +192,8 @@ public class CropLandService extends BaseService<CropLand, Long> {
 
     @DynamicTableNames(value = "tableNames")
     public List<CropLand> findAllByStatusAndDistrict(String tableNames, Integer status){
-        Query query =mEntityManager.createQuery("select c.id,c.name,c.address,c.desc,c.growingPeriod,c.district,c.cropType from CropLand c where c.status = " + status);
+        Query query =mEntityManager.createQuery(
+                "select new CropLand(c.id,c.cropType,c.growingPeriod,c.confirm,c.district,c.name,c.address,c.desc) from CropLand c where c.status = " + status);
         return query.getResultList();
     }
 

+ 23 - 0
src/main/java/com/sysu/admin/controller/crop/xls/CropExcel.java

@@ -0,0 +1,23 @@
+package com.sysu.admin.controller.crop.xls;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class CropExcel {
+
+    @ExcelProperty(value = "ID",index = 0)
+    private Long id;
+    @ExcelProperty(value = "作物类型",index = 1)
+    private String cropType;
+    @ExcelProperty(value = "名称",index = 2)
+    private String name;
+    @ExcelProperty(value = "地址",index = 3)
+    private String address;
+    @ExcelProperty(value = "生长周期",index =4)
+    private String growingPeriod;
+    @ExcelProperty(value = "区县",index = 5)
+    private String district;
+    @ExcelProperty(value = "描述",index = 6)
+    private String desc;
+}

+ 4 - 1
src/main/java/com/sysu/admin/controller/crop/xls/CropExcelService.java

@@ -1,11 +1,14 @@
 package com.sysu.admin.controller.crop.xls;
 
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
 import com.sysu.admin.controller.city.DistrictRepository;
 import com.sysu.admin.controller.crop.CropLand;
 import com.sysu.admin.controller.crop.class_item.CropClassItem;
 import com.sysu.admin.controller.crop.class_item.CropItemService;
 import com.sysu.admin.controller.crop.period.CropPeriod;
 import com.sysu.admin.controller.crop.period.CropPeriodService;
+import org.apache.poi.ss.usermodel.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -33,7 +36,7 @@ public class CropExcelService {
             cropExcel.setAddress(cropLand.getAddress());
             if(cropLand.getCropType() != null) {
                 CropClassItem cropClassItem = cropItemService.findOne(cropLand.getCropType());
-                cropExcel.setCropType(cropClassItem != null ? null : cropClassItem.getName());
+                cropExcel.setCropType(cropClassItem == null ? null : cropClassItem.getName());
             }
 
             cropExcel.setDistrict(districtRepository.findByCode(cropLand.getDistrict().intValue()).getName());

+ 38 - 0
src/main/java/com/sysu/admin/controller/crop/xls/CustomHandler.java

@@ -0,0 +1,38 @@
+package com.sysu.admin.controller.crop.xls;
+
+import com.alibaba.excel.metadata.*;
+import com.alibaba.excel.util.CollectionUtils;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author shixiaohao
+ * @Date 2020/10/28 18:18
+ * @Description: CustemHandler
+ */
+public class CustomHandler extends AbstractColumnWidthStyleStrategy {
+
+    private static final int MAX_COLUMN_WIDTH = 3000;
+
+    public CustomHandler() {
+    }
+
+    @Override
+    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, org.apache.poi.ss.usermodel.Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
+        if (isHead) {
+            // 所有是head的cell设置固定的宽度 MAX_COLUMN_WIDTH
+            if(head.getFieldName().equals("address") || head.getFieldName().equals("name")){
+                writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), 10000);
+            }else {
+                writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), MAX_COLUMN_WIDTH);
+            }
+            // 设置默认行高
+            // writeSheetHolder.getCachedSheet().setDefaultRowHeightInPoints();
+        }
+    }
+
+}

+ 1 - 1
src/test/java/com/sysu/admin/controller/crop/CropLandServiceTest.java

@@ -37,7 +37,7 @@ public class CropLandServiceTest extends BaseTest {
 
     @Test
     public void testFindIdAndNameByExecutor() {
-        List<CropLand> cropLandList = cropLandService.findIdAndNameByExecutor(380402566221008896L);
+        List<Object[]> cropLandList = cropLandService.findIdAndNameByExecutor(380402566221008896L);
         System.out.println(JSON.toJSONString(cropLandList.toArray()));
     }
 }