配种计划导出更新
This commit is contained in:
@@ -94,6 +94,12 @@ public class ScBreedPlanGenerateController extends BaseController
|
|||||||
: obj instanceof Long ? (Long) obj : Long.valueOf(obj.toString()))
|
: obj instanceof Long ? (Long) obj : Long.valueOf(obj.toString()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// eweIds 和 ramIds 均为空时,直接导出只含表头的空白模板,不查数据库(避免 IN () 语法错误)
|
||||||
|
if (eweIds.isEmpty() && ramIds.isEmpty()) {
|
||||||
|
scBreedPlanGenerateService.exportEmptyPairTemplate(response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
scBreedPlanGenerateService.exportSelectedPairs(response, eweIds, ramIds);
|
scBreedPlanGenerateService.exportSelectedPairs(response, eweIds, ramIds);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("导出配对表失败", e);
|
logger.error("导出配对表失败", e);
|
||||||
|
|||||||
@@ -140,4 +140,6 @@ public interface IScBreedPlanGenerateService
|
|||||||
* @return 耳号列表
|
* @return 耳号列表
|
||||||
*/
|
*/
|
||||||
public List<String> searchEarNumbers(String query);
|
public List<String> searchEarNumbers(String query);
|
||||||
|
|
||||||
|
void exportEmptyPairTemplate(HttpServletResponse response);
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,6 @@
|
|||||||
package com.zhyc.module.produce.breed.service.impl;
|
package com.zhyc.module.produce.breed.service.impl;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -83,6 +79,11 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
|
|||||||
return scBreedPlanGenerateMapper.selectEligibleRam(sheepFile);
|
return scBreedPlanGenerateMapper.selectEligibleRam(sheepFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void exportEmptyPairTemplate(HttpServletResponse response) {
|
||||||
|
// 和 exportSelectedPairs 传空 List 一样的逻辑,
|
||||||
|
// 只写表头行,不写数据行
|
||||||
|
exportSelectedPairs(response, Collections.emptyList(), Collections.emptyList());
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 导出已选母羊公羊配对表
|
* 导出已选母羊公羊配对表
|
||||||
* 按轮询方式将母羊分配给公羊,导出Excel,两列:母羊耳号、公羊耳号
|
* 按轮询方式将母羊分配给公羊,导出Excel,两列:母羊耳号、公羊耳号
|
||||||
@@ -95,20 +96,24 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
|
|||||||
public void exportSelectedPairs(HttpServletResponse response, List<Long> eweIds, List<Long> ramIds)
|
public void exportSelectedPairs(HttpServletResponse response, List<Long> eweIds, List<Long> ramIds)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
// 查询母羊耳号(gender=1)
|
|
||||||
List<Map<String, Object>> eweList = scBreedPlanGenerateMapper.selectEarNumbersByIds(eweIds, 1);
|
|
||||||
// 查询公羊耳号(gender=2)
|
|
||||||
List<Map<String, Object>> ramList = scBreedPlanGenerateMapper.selectEarNumbersByIds(ramIds, 2);
|
|
||||||
|
|
||||||
// 建立ID->耳号 的快速查找
|
// 建立ID->耳号 的快速查找
|
||||||
|
// ✅ 修复代码:检查后再查询
|
||||||
Map<Long, String> eweEarMap = new HashMap<>();
|
Map<Long, String> eweEarMap = new HashMap<>();
|
||||||
|
Map<Long, String> ramEarMap = new HashMap<>();
|
||||||
|
|
||||||
|
if (!eweIds.isEmpty()) {
|
||||||
|
List<Map<String, Object>> eweList = scBreedPlanGenerateMapper.selectEarNumbersByIds(eweIds, 1);
|
||||||
for (Map<String, Object> e : eweList) {
|
for (Map<String, Object> e : eweList) {
|
||||||
eweEarMap.put(Long.valueOf(e.get("id").toString()), e.get("manage_tags").toString());
|
eweEarMap.put(Long.valueOf(e.get("id").toString()), e.get("manage_tags").toString());
|
||||||
}
|
}
|
||||||
Map<Long, String> ramEarMap = new HashMap<>();
|
}
|
||||||
|
|
||||||
|
if (!ramIds.isEmpty()) {
|
||||||
|
List<Map<String, Object>> ramList = scBreedPlanGenerateMapper.selectEarNumbersByIds(ramIds, 2);
|
||||||
for (Map<String, Object> r : ramList) {
|
for (Map<String, Object> r : ramList) {
|
||||||
ramEarMap.put(Long.valueOf(r.get("id").toString()), r.get("manage_tags").toString());
|
ramEarMap.put(Long.valueOf(r.get("id").toString()), r.get("manage_tags").toString());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 母羊列、公羊列各自独立写入,行数取两者最大值,不做轮询配对
|
// 母羊列、公羊列各自独立写入,行数取两者最大值,不做轮询配对
|
||||||
Workbook workbook = new XSSFWorkbook();
|
Workbook workbook = new XSSFWorkbook();
|
||||||
@@ -169,10 +174,10 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
|
|||||||
sheet.setColumnWidth(1, 5000);
|
sheet.setColumnWidth(1, 5000);
|
||||||
|
|
||||||
// 响应头
|
// 响应头
|
||||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
|
||||||
response.setCharacterEncoding("utf-8");
|
response.setCharacterEncoding("UTF-8");
|
||||||
String fileName = java.net.URLEncoder.encode("配种配对表", "UTF-8").replaceAll("\\+", "%20");
|
String fileName = "配种配对表.xlsx";
|
||||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
|
||||||
|
|
||||||
workbook.write(response.getOutputStream());
|
workbook.write(response.getOutputStream());
|
||||||
workbook.close();
|
workbook.close();
|
||||||
@@ -681,10 +686,10 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
|
|||||||
if (sheet.getColumnWidth(i) < 2000) sheet.setColumnWidth(i, 2000);
|
if (sheet.getColumnWidth(i) < 2000) sheet.setColumnWidth(i, 2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
|
||||||
response.setCharacterEncoding("utf-8");
|
response.setCharacterEncoding("UTF-8");
|
||||||
String fileName = java.net.URLEncoder.encode(planGenerate.getPlanName() + "_配种计划详情", "UTF-8").replaceAll("\\+", "%20");
|
String fileName = planGenerate.getPlanName() + "_配种计划详情.xlsx";
|
||||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
|
||||||
|
|
||||||
workbook.write(response.getOutputStream());
|
workbook.write(response.getOutputStream());
|
||||||
workbook.close();
|
workbook.close();
|
||||||
|
|||||||
@@ -354,10 +354,12 @@
|
|||||||
FROM bas_sheep
|
FROM bas_sheep
|
||||||
WHERE gender = #{gender}
|
WHERE gender = #{gender}
|
||||||
AND is_delete = 0
|
AND is_delete = 0
|
||||||
|
<if test="ids != null and ids.size() > 0">
|
||||||
AND id IN
|
AND id IN
|
||||||
<foreach item="id" collection="ids" open="(" separator="," close=")">
|
<foreach item="id" collection="ids" open="(" separator="," close=")">
|
||||||
#{id}
|
#{id}
|
||||||
</foreach>
|
</foreach>
|
||||||
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|||||||
Reference in New Issue
Block a user