lyhzzz 2 years ago
parent
commit
8b12259de7

+ 26 - 0
src/main/java/com/fdkankan/sale/service/impl/RepairInfoService.java

@@ -59,6 +59,8 @@ public class RepairInfoService {
     IRepairRegisterLogService repairRegisterLogService;
     @Autowired
     ISysRoleService roleService;
+    @Autowired
+    ISysUserService sysUserService;
 
 
     public RepairDetailVo getDetailsByRepairId(String repairId) {
@@ -179,6 +181,30 @@ public class RepairInfoService {
         if(log.getRepairStatus() >=RepairStatusEnum.OVER_SHIPPED.status()){
             return null;
         }
+        List<Integer> noUserNameList = Arrays.asList(10, 30,40, 80, 110);
+
+        if(!noUserNameList.contains(log.getRepairStatus())){
+            OrderReceiving orderReceiving = orderReceivingService.getByRepairId(repairLogVo.getRepairId());
+            Long sysUserId = null;
+            switch (log.getRepairStatus()){
+                case 20 :
+                case 100 :
+                    sysUserId = orderReceiving.getSysUserId();break;
+                case 50 :
+                case 90 :
+                case 91 :
+                    sysUserId = orderReceiving.getSupplyAdminId();break;
+                case 60 :
+                    sysUserId = orderReceiving.getRepairManId();break;
+                case 70 :
+                    sysUserId = orderReceiving.getTesterId();break;
+            }
+            SysUser sysUser = sysUserService.getById(sysUserId);
+            if(sysUser != null){
+                log.setSysUserName(sysUser.getUserName());
+            }
+        }
+
         log.setRemark(RepairStatusEnum.getByStatus(log.getRepairStatus()).getMessage());
         return log;
     }

+ 0 - 90
src/main/java/com/fdkankan/sale/util/ExcelFillCellMergeStrategy.java

@@ -1,90 +0,0 @@
-package com.fdkankan.sale.util;
-
-import com.alibaba.excel.metadata.Head;
-import com.alibaba.excel.metadata.data.WriteCellData;
-import com.alibaba.excel.write.handler.CellWriteHandler;
-import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
-import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellType;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.util.CellRangeAddress;
-
-import java.util.List;
-
-public class ExcelFillCellMergeStrategy implements CellWriteHandler {
-    /** 需要进行单元格合并的列数组 **/
-    private int[] mergeColumnIndex;
-    /** 单元格合并从第几行开始 **/
-    private int[] mergeRowIndex;
-    public ExcelFillCellMergeStrategy() {}
-    public ExcelFillCellMergeStrategy(int[] mergeRowIndex, int[] mergeColumnIndex) {
-        this.mergeRowIndex = mergeRowIndex;
-        this.mergeColumnIndex = mergeColumnIndex;
-    }
-    @Override
-    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
-                                 List<WriteCellData<?>> list, Cell cell, Head head, Integer integer, Boolean isHead) {
-        int curRowIndex = cell.getRowIndex();
-        int curColIndex = cell.getColumnIndex();
-        int length = mergeRowIndex.length;
-        //判断是否合并行,
-        for (int k = 0; k < length; k++) {
-            //2个数为一组,一组做一次合并。
-            if(k!=0 && k%2!=0){
-                continue;
-            }
-            //每组数开始合并
-            if (curRowIndex >= mergeRowIndex[k] && curRowIndex <mergeRowIndex[k+1]) {
-                for (int i = 0; i < mergeColumnIndex.length; i++) {
-                    if (curColIndex == mergeColumnIndex[i]) {
-                        mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex);
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * 当前单元格向上合并
-     *
-     * @param writeSheetHolder
-     * @param cell
-     *            当前单元格
-     * @param curRowIndex
-     *            当前行
-     * @param curColIndex
-     *            当前列
-     */
-    private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) {
-        Object curData =
-                cell.getCellTypeEnum() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue();
-        Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
-        Object preData =
-                preCell.getCellTypeEnum() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
-        // 将当前单元格数据与上一个单元格数据比较
-        Boolean dataBool = preData.equals(curData);
-        if (true) {
-            Sheet sheet = writeSheetHolder.getSheet();
-            List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
-            boolean isMerged = false;
-            for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
-                CellRangeAddress cellRangeAddr = mergeRegions.get(i);
-                // 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
-                if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
-                    sheet.removeMergedRegion(i);
-                    cellRangeAddr.setLastRow(curRowIndex);
-                    sheet.addMergedRegion(cellRangeAddr);
-                    isMerged = true;
-                }
-            }
-            // 若上一个单元格未被合并,则新增合并单元
-            if (!isMerged) {
-                CellRangeAddress cellRangeAddress =
-                        new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex);
-                sheet.addMergedRegion(cellRangeAddress);
-            }
-        }
-    }
-}

+ 20 - 5
src/main/java/com/fdkankan/sale/util/MyExcelUtil.java

@@ -12,12 +12,14 @@ import com.fdkankan.sale.entity.Customer;
 import com.fdkankan.sale.entity.PriceList;
 import com.fdkankan.sale.service.IPriceListService;
 import com.fdkankan.sale.util.pdf.ExportImg;
+import com.fdkankan.sale.util.pdf.MyHandler;
 import com.fdkankan.sale.util.pdf.TestForExcel2PDF;
 import javassist.expr.FieldAccess;
 import org.apache.poi.ss.usermodel.ClientAnchor;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
 import org.apache.poi.xssf.usermodel.XSSFDrawing;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
@@ -75,11 +77,24 @@ public class MyExcelUtil {
         String localFilePath = FilePath.file_path + FilePath.common + "/" + fileName;
         File localFile = new File(localFilePath);
         ExcelWriter excelWriter = null;
-        excelWriter = EasyExcel.write(localFile)
-                .withTemplate(templateFileName)
-                //调用合并策略
-                //.registerWriteHandler(new ExcelFillCellMergeStrategy(mergeRowIndex, mergeColumeIndex))
-                .build();
+        if(type == 0 ){
+            List<CellRangeAddress> list = new ArrayList<>();
+            //new CellRangeAddress(开始行,结束行,开始列,结束列)
+            list.add(new CellRangeAddress(10, 12, 2, 3));
+            list.add(new CellRangeAddress(10, 12, 4, 5));
+            list.add(new CellRangeAddress(10, 12, 6, 7));
+            excelWriter = EasyExcel.write(localFile)
+                    .withTemplate(templateFileName)
+                    //调用合并策略
+                    .registerWriteHandler(new MyHandler(0, list))
+                    .build();
+        }
+        if(type == 1){
+            excelWriter = EasyExcel.write(localFile)
+                    .withTemplate(templateFileName)
+                    //调用合并策略
+                    .build();
+        }
         WriteSheet writeSheet = EasyExcel.writerSheet().build();
         // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
         // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用

+ 87 - 0
src/main/java/com/fdkankan/sale/util/pdf/MyHandler.java

@@ -0,0 +1,87 @@
+package com.fdkankan.sale.util.pdf;
+
+
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.write.merge.AbstractMergeStrategy;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.RegionUtil;
+import java.util.List;
+
+/**
+ * 合并单元格处理类
+ */
+public class MyHandler extends AbstractMergeStrategy {
+
+    /**
+     * 合并开始行
+     */
+    private Integer startRow = 0;
+    /**
+     * list表格所有的合并列集合
+     */
+    private List<CellRangeAddress> cellRangeAddressList = null;
+
+    public MyHandler() {
+    }
+
+    public MyHandler(int startRow, List<CellRangeAddress> cellRangeAddressList) {
+        this.startRow = startRow;
+        this.cellRangeAddressList = cellRangeAddressList;
+    }
+
+    @Override
+    protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
+        // 设置样式
+        CellStyle cellStyle = cell.getCellStyle();
+        //水平居中
+        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+        //自动换行
+        cellStyle.setWrapText(true);
+        //在这里判断从哪一行开始调用合并的方法
+        if (cell.getRowIndex() > this.startRow) {
+            if (relativeRowIndex == null || relativeRowIndex == 0) {
+                return;
+            }
+            mergeColumn(sheet, cell, head, relativeRowIndex);
+        }
+    }
+
+    /**
+     * 合并单元格
+     *
+     * @param sheet
+     * @param cell
+     * @param head
+     * @param relativeRowIndex
+     */
+    protected void mergeColumn(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
+        int rowIndex = cell.getRowIndex();
+        int colIndex = cell.getColumnIndex();
+        sheet = cell.getSheet();
+        // 获取前一行
+        Row preRow = sheet.getRow(rowIndex - 1);
+        //获取前一列
+        Cell preCell = preRow.getCell(colIndex);
+        List<CellRangeAddress> list = this.cellRangeAddressList;
+        for (int i = 0; i < list.size(); i++) {
+            CellRangeAddress cellRangeAddress = list.get(i);
+            if (cellRangeAddress.containsColumn(preCell.getColumnIndex())) {
+                int lastColIndex = cellRangeAddress.getLastColumn();
+                int firstColIndex = cellRangeAddress.getFirstColumn();
+                CellRangeAddress cra = new CellRangeAddress(cell.getRowIndex(), cell.getRowIndex(), firstColIndex, lastColIndex);
+                sheet.addMergedRegion(cra);
+                // 加边框
+                RegionUtil.setBorderBottom(BorderStyle.THIN, cra, sheet);
+                RegionUtil.setBorderLeft(BorderStyle.THIN, cra, sheet);
+                RegionUtil.setBorderRight(BorderStyle.THIN, cra, sheet);
+                RegionUtil.setBorderTop(BorderStyle.THIN, cra, sheet);
+                return;
+            }
+        }
+
+    }
+
+
+
+}