zhoulisky 8 months ago
parent
commit
f17b1aa0d2

+ 2 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmGoodsVO.java

@@ -25,4 +25,6 @@ public class XmGoodsVO extends XmGoodsEntity {
 
 	@Schema(description = "研发项目编号")
  	private String xmbh;
+
+
 }

+ 3 - 16
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/XmGoodsController.java

@@ -2,7 +2,6 @@
 package org.sky.scientific.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
@@ -12,15 +11,10 @@ import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import lombok.AllArgsConstructor;
 import org.sky.core.boot.ctrl.KdController;
-import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Query;
-import org.sky.core.secure.KdUser;
-import org.sky.core.secure.annotation.IsAdmin;
 import org.sky.core.tool.api.R;
-import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.Func;
-import org.sky.scientific.excel.XmGoodsExcel;
 import org.sky.scientific.pojo.dto.XmGoodsDTO;
 import org.sky.scientific.pojo.entity.XmGoodsEntity;
 import org.sky.scientific.pojo.vo.XmGoodsVO;
@@ -29,7 +23,6 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 物料清单 控制器
@@ -74,17 +67,11 @@ public class XmGoodsController extends KdController {
 		return R.status(service.physicalDeleteByIds(Func.toLongList(ids)));
 	}
 
- 	@GetMapping("/export")
+ 	@PostMapping("/export")
 	@ApiOperationSupport(order = 9)
 	@Operation(summary = "研发领料燃料动力明细清单-导出数据", description = "传入xmGoods")
-	public void exportXmGoods(@Parameter(hidden = true) @RequestParam Map<String, Object> xmGoods, KdUser kdUser, HttpServletResponse response) {
-		QueryWrapper<XmGoodsDTO> queryWrapper = Condition.getQueryWrapper(xmGoods, XmGoodsDTO.class);
-		//if (!AuthUtil.isAdministrator()) {
-		//	queryWrapper.lambda().eq(XmGoods::getTenantId, kdUser.getTenantId());
-		//}
-		//queryWrapper.lambda().eq(XmGoodsEntity::getIsDeleted, KdConstant.DB_NOT_DELETED);
-		List<XmGoodsExcel> list = service.exportXmGoods(queryWrapper);
-		ExcelUtil.export(response, "研发项目物料清单数据" + DateUtil.time(), "研发项目物料清单数据表", list, XmGoodsExcel.class);
+	public void exportXmGoods(@RequestBody XmGoodsDTO dto, HttpServletResponse response) {
+		service.exportXmGoods(response, dto);
 	}
 
 	@GetMapping("yanfalingliaodan")

+ 3 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/XmGoodsExcel.java

@@ -32,6 +32,9 @@ public class XmGoodsExcel implements Serializable {
 	@Serial
 	private static final long serialVersionUID = 1L;
 
+	@ExcelProperty("序号")
+	private Integer xh;
+
 	@ExcelProperty("领用日期")
 	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
 	@JsonFormat(pattern = DateUtil.PATTERN_DATE)

+ 70 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/handle/AttendanceMergeStrategy.java

@@ -0,0 +1,70 @@
+package org.sky.scientific.excel.handle;
+
+import com.alibaba.excel.write.handler.SheetWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+import java.time.LocalDate;
+
+public class AttendanceMergeStrategy implements SheetWriteHandler {
+
+	private final Integer year;
+	private final Integer month;
+
+	public AttendanceMergeStrategy(Integer year, Integer month) {
+		this.year = year;
+		this.month = month;
+	}
+
+	@Override
+	public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
+		// 不需要实现
+	}
+
+	@Override
+	public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
+
+		Workbook workbook = writeWorkbookHolder.getWorkbook();
+ 		Sheet sheet = workbook.getSheetAt(0);
+
+		LocalDate startDate = LocalDate.of(year, month, 1);
+		int daysInMonth = startDate.lengthOfMonth();
+		int totalColumns = daysInMonth + 7; // 天数 + 7个固定列
+
+		// 1. 合并标题行(第一行合并所有列)
+		CellRangeAddress titleMerge = new CellRangeAddress(0, 0, 0, totalColumns - 1);
+		sheet.addMergedRegion(titleMerge);
+
+		CellRangeAddress xhMerge = new CellRangeAddress(1, 2, 0, 0);
+		sheet.addMergedRegion(xhMerge);
+
+		// 2. 合并纵向表头行(第2行)
+		// 姓名合并
+		CellRangeAddress nameMerge = new CellRangeAddress(1, 2, 1, 1);
+		sheet.addMergedRegion(nameMerge);
+
+		// 工号合并
+		CellRangeAddress numberMerge = new CellRangeAddress(1, 2, 2, 2);
+		sheet.addMergedRegion(numberMerge);
+
+		// 身份证号码合并
+		CellRangeAddress idCardMerge = new CellRangeAddress(1, 2, 3, 3);
+		sheet.addMergedRegion(idCardMerge);
+
+		// 科研人员类别合并
+		CellRangeAddress typeMerge = new CellRangeAddress(1, 2, 4, 4);
+		sheet.addMergedRegion(typeMerge);
+
+		// 本月出勤/小时合并
+		CellRangeAddress hoursMerge = new CellRangeAddress(1, 2, totalColumns - 2, totalColumns - 2);
+		sheet.addMergedRegion(hoursMerge);
+
+		// 本月出勤/天合并
+		CellRangeAddress daysMerge = new CellRangeAddress(1, 2, totalColumns - 1, totalColumns - 1);
+		sheet.addMergedRegion(daysMerge);
+
+	}
+
+}

+ 53 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/handle/CustomCellStyleHandler.java

@@ -0,0 +1,53 @@
+package org.sky.scientific.excel.handle;
+
+import com.alibaba.excel.write.handler.CellWriteHandler;
+import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
+import org.apache.poi.ss.usermodel.*;
+
+public class CustomCellStyleHandler implements CellWriteHandler {
+
+//	private int maxHeadIndex;
+//
+//	public CustomCellStyleHandler(int maxHeadIndex) {
+//		super();
+//		this.maxHeadIndex = maxHeadIndex;
+//	}
+
+	@Override
+	public void afterCellDispose(CellWriteHandlerContext context) {
+
+		Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();
+
+		Sheet sheet = workbook.getSheetAt(0);
+		// 获取单元格
+		Cell cell = context.getCell();
+		//必须这么获取,否则设置的样式不生效
+		CellStyle cellStyle = workbook.createCellStyle();
+
+		// 设置水平和垂直居中
+		cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+		cellStyle.setAlignment(HorizontalAlignment.CENTER);
+		cellStyle.setFillBackgroundColor(IndexedColors.WHITE.getIndex());
+		cellStyle.setBorderTop(BorderStyle.THIN);
+		cellStyle.setBorderBottom(BorderStyle.THIN);
+		cellStyle.setBorderLeft(BorderStyle.THIN);
+		cellStyle.setBorderRight(BorderStyle.THIN);
+
+		if(cell.getRowIndex() == 0 ){
+			sheet.getRow(0).setHeightInPoints(30);
+		}
+
+		Font font = workbook.createFont();
+		font.setBold(cell.getRowIndex() <= 2);
+		font.setFontHeight((short) 240);//11*20   实际字高*20
+		font.setFontName("宋体");
+		cellStyle.setFont(font);
+		// 设置样式回到单元格
+		cell.setCellStyle(cellStyle);
+	}
+
+	@Override
+	public int order() {
+		return 1000000;
+	}
+}

+ 8 - 17
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmGoodsMapper.java

@@ -1,14 +1,13 @@
 
 package org.sky.scientific.mapper;
 
-import org.sky.scientific.pojo.dto.XmGoodsDTO;
-import org.sky.scientific.pojo.entity.XmGoodsEntity;
-import org.sky.scientific.pojo.vo.XmGoodsVO;
-import org.sky.scientific.excel.XmGoodsExcel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.sky.scientific.pojo.dto.XmGoodsDTO;
+import org.sky.scientific.pojo.entity.XmGoodsEntity;
+import org.sky.scientific.pojo.vo.XmGoodsVO;
+
 import java.util.List;
 
 /**
@@ -26,21 +25,13 @@ public interface XmGoodsMapper extends BaseMapper<XmGoodsEntity> {
 	 * @param xmGoods 查询参数
 	 * @return List<XmGoodsVO>
 	 */
-	List<XmGoodsVO> selectXmGoodsPage(IPage page, @Param("ew") XmGoodsDTO xmGoods);
-
+	List<XmGoodsVO> selectXmGoodsPage(IPage<XmGoodsVO> page, @Param("ew") XmGoodsDTO xmGoods);
 
 	/**
-	 * 获取导出数据
+	 * 删除
 	 *
-	 * @param queryWrapper 查询条件
-	 * @return List<XmGoodsExcel>
-	 */
-	List<XmGoodsExcel> exportXmGoods(@Param("ew") Wrapper<XmGoodsDTO> queryWrapper);
-
-	/**
-	 * 批量删除
-	 * @param ids
-	 * @return
+	 * @param ids 主键集合
+	 * @return boolean
 	 */
 	int physicalDeleteByIds(List<Long> ids);
 

+ 0 - 5
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmGoodsMapper.xml

@@ -54,11 +54,6 @@
         <if test="ew.model!=null and ew.model!=''">and kxg.model like concat('%',#{ew.model},'%')</if>
     </select>
 
-
-    <select id="exportXmGoods" resultType="org.sky.scientific.excel.XmGoodsExcel">
-        SELECT * FROM kd_xm_goods ${ew.customSqlSegment}
-    </select>
-
     <select id="yanfalingliaodan" resultMap="ResultVoMap" resultType="org.sky.scientific.pojo.dto.XmGoodsDTO">
         SELECT
             xm.xmbh,xm.xmmc,xg.*

+ 6 - 9
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/IXmGoodsService.java

@@ -2,13 +2,12 @@
 package org.sky.scientific.service;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import jakarta.servlet.http.HttpServletResponse;
+import org.sky.core.mp.base.BaseService;
 import org.sky.scientific.pojo.dto.XmGoodsDTO;
 import org.sky.scientific.pojo.entity.XmGoodsEntity;
 import org.sky.scientific.pojo.vo.XmGoodsVO;
-import org.sky.scientific.excel.XmGoodsExcel;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.sky.core.mp.base.BaseService;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -29,14 +28,12 @@ public interface IXmGoodsService extends BaseService<XmGoodsEntity> {
 	 */
 	IPage<XmGoodsVO> selectXmGoodsPage(IPage<XmGoodsVO> page, XmGoodsDTO dto);
 
-
 	/**
 	 * 导出数据
-	 *
-	 * @param queryWrapper 查询条件
-	 * @return List<XmGoodsExcel>
+	 * @param response
+	 * @param dto
 	 */
-	List<XmGoodsExcel> exportXmGoods(Wrapper<XmGoodsDTO> queryWrapper);
+	void exportXmGoods(HttpServletResponse response, XmGoodsDTO dto);
 
 	/**
 	 * 导入数据

+ 60 - 75
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AttendanceServiceImpl.java

@@ -2,16 +2,13 @@
 package org.sky.scientific.service.impl;
 
 import com.alibaba.excel.EasyExcel;
-import com.alibaba.excel.write.metadata.style.WriteCellStyle;
-import com.alibaba.excel.write.metadata.style.WriteFont;
-import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
-import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.sky.core.log.exception.ServiceException;
 import org.sky.core.mp.base.BaseServiceImpl;
 import org.sky.core.mp.support.Condition;
@@ -23,6 +20,8 @@ import org.sky.core.tool.utils.Func;
 import org.sky.core.tool.utils.StringUtil;
 import org.sky.scientific.excel.AttendanceMonthlyDataListener;
 import org.sky.scientific.excel.AttendanceMonthlyExcel;
+import org.sky.scientific.excel.handle.AttendanceMergeStrategy;
+import org.sky.scientific.excel.handle.CustomCellStyleHandler;
 import org.sky.scientific.mapper.AttendanceMapper;
 import org.sky.scientific.mapper.SettingMapper;
 import org.sky.scientific.mapper.TechnicianMapper;
@@ -41,6 +40,7 @@ import java.net.URLEncoder;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * 考勤管理 服务实现类
@@ -181,109 +181,94 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 			Query query = new Query().setCurrent(1).setSize(Integer.MAX_VALUE);
 
 			List<AttendanceVO> list = this.selectAttendancePage(dto, Condition.getPage(query)).getRecords();
-
+			AtomicInteger index = new AtomicInteger(1);
+			for (AttendanceVO vo : list) {
+				vo.setXh(index.getAndIncrement());
+			}
 			Integer year = Integer.valueOf(dto.getYearAndMonth().substring(0, 4));
 			Integer month = Integer.valueOf(dto.getYearAndMonth().substring(5));
-			// 1. 构建完整数据(包含标题、表头、数据)
-			List<List<Object>> allData = buildCompleteData(list, year, month);
-
-			// 2. 构建表头
-			List<List<String>> head = Collections.emptyList();//buildDynamicHead(year, month);
-
-			// 3. 设置样式
-			WriteCellStyle headStyle = new WriteCellStyle();
-			headStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
-			WriteFont headFont = new WriteFont();
-			headFont.setBold(true);
-			headFont.setFontHeightInPoints((short) 12);
-			headStyle.setWriteFont(headFont);
-
-			WriteCellStyle contentStyle = new WriteCellStyle();
-			contentStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
 
-			HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(headStyle, contentStyle);
+			// 构建数据
+			List<List<Object>> data = buildData(list, year, month);
 
-			// 4. 导出Excel
+			// 导出Excel(包含合并单元格策略)
 			EasyExcel.write(response.getOutputStream())
-				.head(head)
-				.registerWriteHandler(styleStrategy)
+				.registerWriteHandler(new AttendanceMergeStrategy(year, month))
+				.registerWriteHandler(new CustomCellStyleHandler())
+				.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
 				.autoCloseStream(true)
 				.sheet("考勤信息")
-				.doWrite(allData);
+				.doWrite(data);
+
 		} catch (Exception e) {
 			throw new ServiceException("导出失败:" + e.getLocalizedMessage());
 		}
 	}
 
 	/**
-	 * 构建完整数据(包含标题行、表头行、数据行
+	 * 构建数据行
 	 */
-	private List<List<Object>> buildCompleteData(List<AttendanceVO> attendanceList, Integer year, Integer month) {
-		List<List<Object>> allData = new ArrayList<>();
+	private List<List<Object>> buildData(List<AttendanceVO> attendanceList, Integer year, Integer month) {
+		List<List<Object>> data = new ArrayList<>();
 
 		LocalDate startDate = LocalDate.of(year, month, 1);
 		int daysInMonth = startDate.lengthOfMonth();
-		int totalColumns = 5 + daysInMonth + 2; // 5个固定列 + 天数列 + 2个统计列
+		DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+		DateTimeFormatter weekFormatter = DateTimeFormatter.ofPattern("E", Locale.CHINA);
+		DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("d");
 
-		// 1. 标题行(第一行)
+		// 第一行:标题行
 		List<Object> titleRow = new ArrayList<>();
 		titleRow.add("每月考勤信息" + year + "年" + month + "月");
-		// 填充剩余单元格为空,用于合并
-		for (int i = 1; i < totalColumns; i++) {
+		for (int i = 1; i < daysInMonth + 7; i++) { // 7 = 5个固定列 + 2个统计列
 			titleRow.add("");
 		}
-		allData.add(titleRow);
-
-		// 2. 空行(第二行)
-		allData.add(Collections.nCopies(totalColumns, ""));
-
-		// 3. 表头行(第三行)
-		List<Object> headerRow = new ArrayList<>();
-		headerRow.add("序号");
-		headerRow.add("姓名");
-		headerRow.add("工号");
-		headerRow.add("身份证号码");
-		headerRow.add("科研人员类别");
-
-		// 日期表头
-		DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("dd");
-		for (int day = 1; day <= daysInMonth; day++) {
-			headerRow.add(String.valueOf(day));
+		data.add(titleRow);
+
+		// 第二行:纵向表头标题
+		List<Object> verticalHeaderRow = new ArrayList<>();
+		verticalHeaderRow.add("序号");
+		verticalHeaderRow.add("姓名");
+		verticalHeaderRow.add("工号");
+		verticalHeaderRow.add("身份证号码");
+		verticalHeaderRow.add("科研人员类别");
+		//第二行:周几行
+ 		for (int i = 1; i <= daysInMonth; i++) {
+			LocalDate date = LocalDate.of(year, month, i);
+ 			verticalHeaderRow.add(date.format(weekFormatter).substring(1));
 		}
-
-		headerRow.add("本月出勤/小时");
-		headerRow.add("本月出勤/天");
-		allData.add(headerRow);
-
-		// 4. 周几行(第四行)
-		List<Object> weekRow = new ArrayList<>();
-		weekRow.add(""); // 序号列
-		weekRow.add(""); // 姓名列
-		weekRow.add(""); // 工号列
-		weekRow.add(""); // 身份证列
-		weekRow.add(""); // 人员类型列
-
-		// 周几数据
-		DateTimeFormatter weekFormatter = DateTimeFormatter.ofPattern("E", Locale.CHINA);
+ 		verticalHeaderRow.add("本月出勤/小时");
+		verticalHeaderRow.add("本月出勤/天");
+		data.add(verticalHeaderRow);
+
+		// 第三行:日期数字行
+		List<Object> dayRow = new ArrayList<>();
+		dayRow.add("");
+		dayRow.add("");
+		dayRow.add("");
+		dayRow.add("");
+		dayRow.add("");
 		for (int day = 1; day <= daysInMonth; day++) {
 			LocalDate date = LocalDate.of(year, month, day);
-			weekRow.add(date.format(weekFormatter));
+			dayRow.add(date.format(dayFormatter));
 		}
+		dayRow.add("");
+		dayRow.add("");
+		data.add(dayRow);
 
-		weekRow.add(""); // 小时统计列
-		weekRow.add(""); // 天数统计列
-		allData.add(weekRow);
-
-		// 5. 数据行(从第五行开始)
-		DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+		// 第4行开始:数据行
 		for (AttendanceVO attendance : attendanceList) {
 			List<Object> dataRow = new ArrayList<>();
 
-			// 基础信息
+			// 序号
 			dataRow.add(attendance.getXh());
+			// 姓名
 			dataRow.add(attendance.getName());
+			// 工号
 			dataRow.add(attendance.getNumber());
+			// 身份证号码
 			dataRow.add(attendance.getIdCard());
+			// 科研人员类别
 			dataRow.add(attendance.getPersonnelType());
 
 			// 每日考勤数据
@@ -304,10 +289,10 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 			dataRow.add(attendance.getMonthlyHours());
 			dataRow.add(attendance.getMonthlyDays());
 
-			allData.add(dataRow);
+			data.add(dataRow);
 		}
 
-		return allData;
+		return data;
 	}
 
 	@Override

+ 46 - 7
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmGoodsServiceImpl.java

@@ -1,14 +1,21 @@
 
 package org.sky.scientific.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.log.exception.ServiceException;
 import org.sky.core.mp.base.BaseServiceImpl;
+import org.sky.core.mp.support.Condition;
+import org.sky.core.mp.support.Query;
 import org.sky.core.tool.utils.*;
 import org.sky.scientific.excel.XmGoodsExcel;
 import org.sky.scientific.mapper.XmGoodsMapper;
@@ -20,7 +27,10 @@ import org.sky.scientific.service.IXmGoodsService;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.InputStream;
+import java.net.URLEncoder;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -45,13 +55,42 @@ public class XmGoodsServiceImpl extends BaseServiceImpl<XmGoodsMapper, XmGoodsEn
 	}
 
 
+	@SneakyThrows
 	@Override
-	public List<XmGoodsExcel> exportXmGoods(Wrapper<XmGoodsDTO> queryWrapper) {
-		List<XmGoodsExcel> xmGoodsList = baseMapper.exportXmGoods(queryWrapper);
-		//xmGoodsList.forEach(xmGoods -> {
-		//	xmGoods.setTypeName(DictCache.getValue(DictEnum.YES_NO, XmGoods.getType()));
-		//});
-		return xmGoodsList;
+	public void exportXmGoods(HttpServletResponse response, XmGoodsDTO dto) {
+
+		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/研发领料燃料动力明细清单.xls");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding("utf-8");
+		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("研发领料燃料动力明细清单.xls", Charsets.UTF_8));
+
+		List<XmGoodsVO> list = this.selectXmGoodsPage(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), dto).getRecords();
+ 		AtomicInteger index = new AtomicInteger(1);
+
+		 List<XmGoodsExcel> resultList = new ArrayList<>();
+		for (XmGoodsVO vo : list) {
+			XmGoodsExcel excel = BeanUtil.copyProperties(vo, XmGoodsExcel.class);
+			assert excel != null;
+			excel.setXh(index.getAndIncrement());
+			resultList.add(excel);
+		}
+
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
+			.withTemplate((templateFileName))
+			.excelType(ExcelTypeEnum.XLS)
+			.build();
+
+		WriteSheet writeSheet = EasyExcel.writerSheet().build();
+		//设置list集合数据
+		excelWriter.fill(resultList, writeSheet);
+		Map<String, Object> map = new HashMap<>();
+		map.put("year", dto.getYearAndMonth().substring(0, 4));
+		map.put("month", dto.getYearAndMonth().substring(4));
+		excelWriter.fill(map, writeSheet);
+		excelWriter.finish();
+		if (templateFileName != null) {
+			templateFileName.close();
+		}
 	}
 
 	@Override

BIN
kd-service/kd-scientific/src/main/resources/export-template/每月考勤信息.xls


BIN
kd-service/kd-scientific/src/main/resources/export-template/研发领料燃料动力明细清单.xls