package com.fzzy.igds.export; import com.fzzy.igds.*; import com.fzzy.igds.data.*; import com.fzzy.igds.domain.Company; import com.fzzy.igds.domain.Depot; import com.fzzy.igds.domain.Dept; import com.fzzy.igds.domain.InoutRecord; import com.fzzy.igds.service.*; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; /** * 数据导出EXCEL入口 * * @author sgj * @date 2025/12/24 */ @Controller @RequestMapping("export") public class ReportController { @Resource private InoutRecordService inoutReportService; @Resource private SysDeptService sysDeptService; @Resource private CoreDeptService coreDeptService; @Resource private DepotService depotService; @Resource private CoreCompanyService coreCompanyService; @Autowired private ReportInDetailPR reportInDetailPR; @Autowired private ReportOutDetailPR reportOutDetailPR; @Autowired private SuperInventoryReportPR superInventoryReportPR; @Autowired private CompanyPR companyPR; @Autowired private DeptPR deptPR; @Autowired private DepotPR depotPR; @Autowired private DicPR dicPR; /** * 出入库报表导出 * * @return */ @RequestMapping("/inOutReport-excel") @ResponseBody public AjaxResult inOutReport(InoutParam param) { //设置标题 String sheetName = "报表数据"; //查询数据 List list = new ArrayList<>(); //获取分库编码对应的分库名称 String deptName = ""; SysDept subDept = sysDeptService.getCacheDept(null, ContextUtil.subDeptId(null)); if (null != subDept) { deptName = subDept.getDeptName(); } //创建收储公司ID到名称的映射 Map companyMap = Optional.ofNullable(companyPR.getData()) .orElse(new ArrayList<>()) .stream() .collect(Collectors.toMap(Company::getId, Company::getDwmc, (key1, key2) -> key2)); //创建所在库区ID到名称的映射 Map deptMap = Optional.ofNullable(deptPR.getAllData()) .orElse(new ArrayList<>()) .stream() .collect(Collectors.toMap(Dept::getId, Dept::getKqmc, (key1, key2) -> key2)); // 创建仓库ID到名称的映射 Map depotMap = Optional.ofNullable(depotPR.getData(null)) .orElse(new ArrayList<>()) .stream() .collect(Collectors.toMap(Depot::getId, Depot::getName, (key1, key2) -> key2)); //创建粮食品种ID到名称的映射 Map foodVarietyMap = Optional.ofNullable(dicPR.sysDictData("FOOD_VARIETY_")) .orElse(new ArrayList<>()) .stream() .collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel, (key1, key2) -> key2)); //组装实际导出数据 if (StringUtils.isNotEmpty(param.getType()) && "IN".equals(param.getType())) { sheetName = "入库报表数据"; list = reportInDetailPR.listRecord(param); List exportList = new ArrayList<>(); for (InoutRecord record : list) { InoutRecordInExport export = new InoutRecordInExport(); export.setId(record.getId()); export.setPlateNum(record.getPlateNum()); // 将仓库ID映射为仓库名称 String depotNameValue = depotMap.get(record.getDepotId()); export.setDepotId(depotNameValue != null ? depotNameValue : ""); //粮食品种映射 String foodVarietyNameValue = foodVarietyMap.get(record.getFoodVariety()); export.setFoodVariety(foodVarietyNameValue != null ? foodVarietyNameValue : ""); export.setFullWeight(record.getFullWeight()); export.setEmptyWeight(record.getEmptyWeight()); export.setNetWeight(record.getNetWeight()); export.setSettleWeight(record.getSettleWeight()); export.setRecordWeight(record.getRecordWeight()); export.setCompleteTime(record.getCompleteTime()); export.setDeOther(record.getDeOther()); exportList.add(export); } ExcelUtil util = new ExcelUtil(InoutRecordInExport.class); return util.exportExcel(exportList, sheetName, deptName); } if (StringUtils.isNotEmpty(param.getType()) && "OUT".equals(param.getType())) { sheetName = "出库报表数据"; list = reportOutDetailPR.listRecord(param); List exportList = new ArrayList<>(); for (InoutRecord record : list) { InoutRecordOutExport export = new InoutRecordOutExport(); export.setId(record.getId()); export.setPlateNum(record.getPlateNum()); // 将仓库ID映射为仓库名称 String depotNameValue = depotMap.get(record.getDepotId()); export.setDepotId(depotNameValue != null ? depotNameValue : ""); //粮食品种映射 String foodVarietyNameValue = foodVarietyMap.get(record.getFoodVariety()); export.setFoodVariety(foodVarietyNameValue != null ? foodVarietyNameValue : ""); export.setFullWeight(record.getFullWeight()); export.setEmptyWeight(record.getEmptyWeight()); export.setNetWeight(record.getNetWeight()); export.setSettleWeight(record.getSettleWeight()); export.setRecordWeight(record.getRecordWeight()); export.setCompleteTime(record.getCompleteTime()); export.setDeOther(record.getDeOther()); exportList.add(export); } ExcelUtil util = new ExcelUtil(InoutRecordOutExport.class); return util.exportExcel(exportList, sheetName, deptName); } if (StringUtils.isNotEmpty(param.getType()) && "IN_DETAIL".equals(param.getType())) { sheetName = "入库明细报表数据"; list = reportInDetailPR.listRecord(param); List exportList = new ArrayList<>(); for (InoutRecord record : list) { InoutRecordDetailInExport export = new InoutRecordDetailInExport(); //收储公司映射 String companyNameValue = companyMap.get(record.getCompanyId()); export.setCompanyId(companyNameValue != null ? companyNameValue : ""); //库区映射 String deptNameValue = deptMap.get(record.getDeptId()); export.setDeptId(deptNameValue != null ? deptNameValue : ""); export.setId(record.getId()); export.setPlateNum(record.getPlateNum()); // 将仓库ID映射为仓库名称 String depotNameValue = depotMap.get(record.getDepotId()); export.setDepotId(depotNameValue != null ? depotNameValue : ""); //粮食品种映射 String foodVarietyNameValue = foodVarietyMap.get(record.getFoodVariety()); export.setFoodVariety(foodVarietyNameValue != null ? foodVarietyNameValue : ""); export.setSettleWeight(record.getSettleWeight()); export.setRecordWeight(record.getRecordWeight()); export.setCompleteTime(record.getCompleteTime()); exportList.add(export); } ExcelUtil util = new ExcelUtil(InoutRecordDetailInExport.class); return util.exportExcel(exportList, sheetName, deptName); } if (StringUtils.isNotEmpty(param.getType()) && "OUT_DETAIL".equals(param.getType())) { sheetName = "出库明细报表数据"; list = reportOutDetailPR.listRecord(param); List exportList = new ArrayList<>(); for (InoutRecord record : list) { InoutRecordDetailOutExport export = new InoutRecordDetailOutExport(); //收储公司映射 String companyNameValue = companyMap.get(record.getCompanyId()); export.setCompanyId(companyNameValue != null ? companyNameValue : ""); //库区映射 String deptNameValue = deptMap.get(record.getDeptId()); export.setDeptId(deptNameValue != null ? deptNameValue : ""); export.setId(record.getId()); export.setPlateNum(record.getPlateNum()); // 将仓库ID映射为仓库名称 String depotNameValue = depotMap.get(record.getDepotId()); export.setDepotId(depotNameValue != null ? depotNameValue : ""); //粮食品种映射 String foodVarietyNameValue = foodVarietyMap.get(record.getFoodVariety()); export.setFoodVariety(foodVarietyNameValue != null ? foodVarietyNameValue : ""); export.setSettleWeight(record.getSettleWeight()); export.setRecordWeight(record.getRecordWeight()); export.setCompleteTime(record.getCompleteTime()); exportList.add(export); } ExcelUtil util = new ExcelUtil(InoutRecordDetailOutExport.class); return util.exportExcel(exportList, sheetName, deptName); } return AjaxResult.error("参数错误"); } /** * 库存报表导出 * * @return */ @RequestMapping("/superInventoryReport-excel") @ResponseBody public AjaxResult superInventoryReport(SuperInventoryReportParam param) { //设置标题 String sheetName = "库存报表数据"; //查询数据 List list = superInventoryReportPR.getReportData(param); //获取分库编码对应的分库名称 String deptName = ""; SysDept subDept = sysDeptService.getCacheDept(null, ContextUtil.subDeptId(null)); if (null != subDept) { deptName = subDept.getDeptName(); } //导出 ExcelUtil util = new ExcelUtil(SuperInventoryReportData.class); return util.exportExcel(list, sheetName, deptName); } }