@@ -1,10 +1,6 @@
package com.zhyc.module.produce.breed.service.impl ;
import java.util.List ;
import java.util.Map ;
import java.util.HashMap ;
import java.util.ArrayList ;
import java.util.Date ;
import java.util.* ;
import java.text.SimpleDateFormat ;
import java.io.IOException ;
import java.io.InputStream ;
@@ -83,6 +79,11 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
return scBreedPlanGenerateMapper . selectEligibleRam ( sheepFile ) ;
}
public void exportEmptyPairTemplate ( HttpServletResponse response ) {
// 和 exportSelectedPairs 传空 List 一样的逻辑,
// 只写表头行,不写数据行
exportSelectedPairs ( response , Collections . emptyList ( ) , Collections . emptyList ( ) ) ;
}
/**
* 导出已选母羊公羊配对表
* 按轮询方式将母羊分配给公羊, 导出Excel, 两列: 母羊耳号、公羊耳号
@@ -95,19 +96,23 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
public void exportSelectedPairs ( HttpServletResponse response , List < Long > eweIds , List < Long > ramIds )
{
try {
// 查询母羊耳号( gender=1)
List < Map < String , Object > > eweList = scBreedPlanGenerateMapper . selectEarNumbersByIds ( eweIds , 1 ) ;
// 查询公羊耳号( gender=2)
List < Map < String , Object > > ramList = scBreedPlanGenerateMapper . selectEarNumbersByIds ( ramIds , 2 ) ;
// 建立ID->耳号 的快速查找
// ✅ 修复代码:检查后再查询
Map < Long , String > eweEarMap = new HashMap < > ( ) ;
for ( Map < String , Object > e : eweList ) {
eweEarMap . put ( Long . valueOf ( e . get ( " id " ) . toString ( ) ) , e . get ( " manage_tags " ) . toString ( ) ) ;
}
Map < Long , String > ramEarMap = new HashMap < > ( ) ;
for ( Map < String , Object > r : ramList ) {
ramEarMap . put ( Long . valueOf ( r . get ( " id " ) . toString ( ) ) , r . get ( " manage_tags " ) . toString ( ) ) ;
if ( ! eweIds . isEmpty ( ) ) {
List < Map < String , Object > > eweList = scBreedPlanGenerateMapper . selectEarNumbersByIds ( eweIds , 1 ) ;
for ( Map < String , Object > e : eweList ) {
eweEarMap . put ( Long . valueOf ( e . get ( " id " ) . toString ( ) ) , e . get ( " manage_tags " ) . toString ( ) ) ;
}
}
if ( ! ramIds . isEmpty ( ) ) {
List < Map < String , Object > > ramList = scBreedPlanGenerateMapper . selectEarNumbersByIds ( ramIds , 2 ) ;
for ( Map < String , Object > r : ramList ) {
ramEarMap . put ( Long . valueOf ( r . get ( " id " ) . toString ( ) ) , r . get ( " manage_tags " ) . toString ( ) ) ;
}
}
// 母羊列、公羊列各自独立写入,行数取两者最大值,不做轮询配对
@@ -169,10 +174,10 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
sheet . setColumnWidth ( 1 , 5000 ) ;
// 响应头
response . setContentType ( " application/vnd.openxmlformats-officedocument.spreadsheetml.sheet " ) ;
response . setCharacterEncoding ( " utf -8" ) ;
String fileName = java . net . URLEncoder . encode ( " 配种配对表 " , " UTF-8 " ) . replaceAll ( " \\ + " , " %20 " ) ;
response . setHeader ( " Content-d isposition " , " attachment;filename*=utf-8'' " + fileName + " .xlsx " ) ;
response . setContentType ( " application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8 " ) ;
response . setCharacterEncoding ( " UTF -8" ) ;
String fileName = " 配种配对表.xlsx " ;
response . setHeader ( " Content-D isposition " , " attachment;filename= \" " + fileName + " \" " ) ;
workbook . write ( response . getOutputStream ( ) ) ;
workbook . close ( ) ;
@@ -681,10 +686,10 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
if ( sheet . getColumnWidth ( i ) < 2000 ) sheet . setColumnWidth ( i , 2000 ) ;
}
response . setContentType ( " application/vnd.openxmlformats-officedocument.spreadsheetml.sheet " ) ;
response . setCharacterEncoding ( " utf -8" ) ;
String fileName = java . net . URLEncoder . encode ( planGenerate. getPlanName ( ) + " _配种计划详情 ", " UTF-8 " ) . replaceAll ( " \\ + " , " %20 " ) ;
response . setHeader ( " Content-d isposition " , " attachment;filename*=utf-8'' " + fileName + " .xlsx " ) ;
response . setContentType ( " application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8 " ) ;
response . setCharacterEncoding ( " UTF -8" ) ;
String fileName = planGenerate . getPlanName ( ) + " _配种计划详情.xlsx " ;
response . setHeader ( " Content-D isposition " , " attachment;filename= \" " + fileName + " \" " ) ;
workbook . write ( response . getOutputStream ( ) ) ;
workbook . close ( ) ;