performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java
@@ -1,14 +1,24 @@ package com.yuanchu.mom.controller; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yuanchu.mom.dto.PerformanceShiftAddDto; import com.yuanchu.mom.pojo.PerformanceShift; import com.yuanchu.mom.service.PerformanceShiftService; import com.yuanchu.mom.utils.StyleUtils; import com.yuanchu.mom.vo.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import java.util.Collection; import java.util.List; import java.util.Map; /** @@ -55,8 +65,19 @@ @ApiOperation(value = "绩æç®¡ç-çæ¬¡-导åº") @GetMapping("update") public Result<?> exportToExcel(String time, String userName, String laboratory) { performanceShiftService.exportToExcel(time, userName, laboratory); return Result.success(); public void exportToExcel(@NotNull(message = "æ¶é´ä¸è½ä¸ºç©ºï¼") String time, String userName, String laboratory, HttpServletResponse response) throws Exception { Map<Object, Object> data = performanceShiftService.exportToExcel(time, userName, laboratory); // 设置åå æ ¼æ ·å¼ HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(StyleUtils.getHeadStyle(), StyleUtils.getContentStyle()); // ä¿åå°ç¬¬ä¸ä¸ªsheetä¸ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("requestType","excel"); response.setHeader("Access-Control-Expose-Headers", "requestType"); EasyExcel.write(response.getOutputStream()) .head((List<List<String>>) data.get("header")) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // èªéåºå宽 .registerWriteHandler(horizontalCellStyleStrategy) .sheet("模æ¿") .doWrite((Collection<?>) data.get("data")); } } performance-server/src/main/java/com/yuanchu/mom/service/PerformanceShiftService.java
@@ -26,5 +26,5 @@ IPage<Map<String, Object>> performanceShiftPageYear(Page<Object> page, String time, String userName, String laboratory); Map<Object, Object> exportToExcel(String time, String userName, String laboratory); Map<Object, Object> exportToExcel(String time, String userName, String laboratory) throws Exception; } performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java
@@ -14,6 +14,7 @@ import com.yuanchu.mom.pojo.PerformanceShift; import com.yuanchu.mom.service.EnumService; import com.yuanchu.mom.service.PerformanceShiftService; import com.yuanchu.mom.utils.JackSonUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -24,7 +25,6 @@ import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.stream.Collectors; /** * <p> @@ -184,7 +184,7 @@ // å¹´å页ä¸å¯¼åºå ±åä½¿ç¨ public List<Map<String, Object>> annualAttendanceProcessing(List<Map<String, Object>> mapYearList, List<Enums> shiftType){ for (Map<String, Object> map : mapYearList) { Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new LinkedHashMap<>(); Map<String, Object> hashMapYear = new LinkedHashMap<>(); int totalYearAttendance = 0; // ä¸å¹´12个æ @@ -234,17 +234,33 @@ return count; } public void dataRequiredForProcessingIntoExcel(List<Map<String, Object>> list){ Map<Object, List<Map<String, Object>>> userId = list.stream().collect(Collectors.groupingBy(i -> i.get("user_id"))); userId.forEach((k, v) -> { System.out.println(k); System.out.println("============="); System.out.println(v); }); public List<List<Object>> dataRequiredForProcessingIntoExcel(List<Map<String, Object>> list, List<Enums> enums) throws Exception { List<List<Object>> data = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { List<Object> excelRowList = new ArrayList<>(); excelRowList.add(i + 1); excelRowList.add(list.get(i).get("account")); excelRowList.add(list.get(i).get("name")); Map<String, Object> year = JackSonUtil.unmarshal(JackSonUtil.marshal(list.get(i).get("year")), Map.class); excelRowList.add(year.get("totalYearAttendance")); enums.forEach(j -> { excelRowList.add(year.get(j.getLabel())); }); Map<String, Map<String, Object>> month = JackSonUtil.unmarshal(JackSonUtil.marshal(list.get(i).get("month")), Map.class); for (int j = 1; j < 13; j++) { Object totalMonthAttendance = month.get(j + "").get("totalMonthAttendance"); excelRowList.add(totalMonthAttendance); for (Enums anEnum : enums) { excelRowList.add(month.get(j + "").get(anEnum.getLabel())); } } data.add(excelRowList); } return data; } @Override public Map<Object, Object> exportToExcel(String time, String userName, String laboratory) { public Map<Object, Object> exportToExcel(String time, String userName, String laboratory) throws Exception { Map<Object, Object> map = new HashMap<>(); List<Enums> shiftType = enumService.selectEnumByCategory("çæ¬¡ç±»å"); DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @@ -253,8 +269,8 @@ map.put("header", getHeader(localDateTime.getYear() + " å¹´", shiftType)); List<Map<String, Object>> mapYearList = baseMapper.performanceShiftYearList(time, userName, laboratory); annualAttendanceProcessing(mapYearList, shiftType); dataRequiredForProcessingIntoExcel(mapYearList); map.put("data", mapYearList); List<List<Object>> lists = dataRequiredForProcessingIntoExcel(mapYearList, shiftType); map.put("data", lists); return map; } @@ -319,12 +335,14 @@ line.add(Arrays.asList("è夿±æ»", "åºå·", "åºå·")); line.add(Arrays.asList("è夿±æ»", "å·¥å·", "å·¥å·")); line.add(Arrays.asList("è夿±æ»", "å§å", "å§å")); line.add(Arrays.asList("åºå¤è¯¦æ ", month, "åºå¤")); // å¹´ header for (Enums anEnum : enums) { line.add(Arrays.asList("è夿±æ»", month, anEnum.getLabel())); } // æheader for (int i = 1; i < 13; i++) { line.add(Arrays.asList("åºå¤è¯¦æ ", i + " æ", "åºå¤")); for (Enums anEnum : enums) { line.add(Arrays.asList("åºå¤è¯¦æ ", i + " æ", anEnum.getLabel())); } performance-server/src/main/java/com/yuanchu/mom/utils/StyleUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,83 @@ package com.yuanchu.mom.utils; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.metadata.style.WriteFont; import org.apache.poi.ss.usermodel.*; public class StyleUtils { /** * æ 颿 ·å¼ * @return */ public static WriteCellStyle getHeadStyle(){ // 头ççç¥ WriteCellStyle headWriteCellStyle = new WriteCellStyle(); // èæ¯é¢è² headWriteCellStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); // åä½ WriteFont headWriteFont = new WriteFont(); headWriteFont.setFontName("仿å®");//设置åä½åå headWriteFont.setFontHeightInPoints((short)9);//设置åä½å¤§å° headWriteFont.setBold(true);//åä½å ç² headWriteFont.setColor((short) 1); headWriteCellStyle.setWriteFont(headWriteFont); //卿 ·å¼ç¨åºç¨è®¾ç½®çåä½; // æ ·å¼ headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置åºè¾¹æ¡; headWriteCellStyle.setBottomBorderColor((short) 1);//设置åºè¾¹æ¡é¢è²; headWriteCellStyle.setBorderLeft(BorderStyle.THIN); //设置左边æ¡; headWriteCellStyle.setLeftBorderColor((short) 1);//设置左边æ¡é¢è²; headWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置å³è¾¹æ¡; headWriteCellStyle.setRightBorderColor((short) 1);//设置å³è¾¹æ¡é¢è²; headWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边æ¡; headWriteCellStyle.setTopBorderColor((short) 1); //设置顶边æ¡é¢è²; headWriteCellStyle.setWrapped(false); //设置èªå¨æ¢è¡; headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//设置水平对é½çæ ·å¼ä¸ºå± ä¸å¯¹é½; headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //设置åç´å¯¹é½çæ ·å¼ä¸ºå± ä¸å¯¹é½; headWriteCellStyle.setShrinkToFit(true);//è®¾ç½®ææ¬æ¶ç¼©è³åé return headWriteCellStyle; } /** * å å®¹æ ·å¼ * @return */ public static WriteCellStyle getContentStyle(){ // å 容ççç¥ WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); // è¿ééè¦æå® FillPatternType 为FillPatternType.SOLID_FOREGROUND ä¸ç¶æ æ³æ¾ç¤ºèæ¯é¢è².头é»è®¤äº FillPatternTypeæä»¥å¯ä»¥ä¸æå® contentWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex()); contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); // 设置åä½ WriteFont contentWriteFont = new WriteFont(); contentWriteFont.setFontHeightInPoints((short) 9);//设置åä½å¤§å° contentWriteFont.setFontName("仿å®"); //设置åä½åå contentWriteCellStyle.setWriteFont(contentWriteFont);//卿 ·å¼ç¨åºç¨è®¾ç½®çåä½; //è®¾ç½®æ ·å¼; // contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置åºè¾¹æ¡; // contentWriteCellStyle.setBottomBorderColor((short) 1);//设置åºè¾¹æ¡é¢è²; contentWriteCellStyle.setBorderLeft(BorderStyle.THIN); //设置左边æ¡; contentWriteCellStyle.setLeftBorderColor((short) 1);//设置左边æ¡é¢è²; contentWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置å³è¾¹æ¡; contentWriteCellStyle.setRightBorderColor((short) 1);//设置å³è¾¹æ¡é¢è²; contentWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边æ¡; contentWriteCellStyle.setTopBorderColor((short) 1); ///设置顶边æ¡é¢è²; contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// æ°´å¹³å± ä¸ contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// åç´å± ä¸ contentWriteCellStyle.setWrapped(false); //设置èªå¨æ¢è¡; // contentWriteCellStyle.setShrinkToFit(true);//è®¾ç½®ææ¬æ¶ç¼©è³åé return contentWriteCellStyle; } } system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
@@ -1,33 +1,14 @@ package com.yuanchu.mom; import com.yuanchu.mom.service.PerformanceShiftService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.Map; @SpringBootTest class SystemRunApplicationTest { private static String fileName = "D:\\" + System.currentTimeMillis() + ".xlsx"; @Autowired private PerformanceShiftService performanceShiftService; @Test void contextLoads() { Map<Object, Object> header = performanceShiftService.exportToExcel("2024-05-04 00:00:00", null, null); void contextLoads() throws Exception { // EasyExcel.write(fileName) // .head(header) // // åå¹¶çç¥ï¼åå¹¶ç¸åæ°æ®çè¡ã第ä¸ä¸ªåæ°è¡¨ç¤ºä»åªä¸è¡å¼å§è¿è¡åå¹¶ï¼ç±äºè¡¨å¤´å äºä¸¤è¡ï¼å æ¤ä»ç¬¬2è¡å¼å§ï¼ç´¢å¼ä»0å¼å§ï¼ // // 第äºä¸ªåæ°æ¯æå®åªäºåè¦è¿è¡åå¹¶ //// .registerWriteHandler(new MergeSameRowsStrategy(2, new int[]{0, 1, 2, 3, 8, 9})) // // 注æï¼éè¦å è°ç¨registerWriteHandler()åè°ç¨sheet()æ¹æ³æè½ä½¿åå¹¶çç¥çæï¼ï¼ï¼ // .sheet("模æ¿") // .doWrite(data()); } }