配种计划最终完善,产羔页面bug修复

This commit is contained in:
zyk
2026-02-01 09:58:49 +08:00
parent 219ac30e28
commit 1736b51fea
9 changed files with 130 additions and 36 deletions

View File

@@ -9,14 +9,7 @@ import com.zhyc.module.produce.breed.domain.ScBreedPlanGenerate;
import com.zhyc.module.produce.breed.service.IScBreedPlanGenerateService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.zhyc.common.annotation.Log;
import com.zhyc.common.core.controller.BaseController;
import com.zhyc.common.core.domain.AjaxResult;
@@ -54,9 +47,9 @@ public class ScBreedPlanGenerateController extends BaseController
*/
@PreAuthorize("@ss.hasPermi('mating_plan:generate:selectEwe')")
@GetMapping("/selectEwe")
public AjaxResult selectEligibleEwe()
public AjaxResult selectEligibleEwe(@RequestParam(value = "manageTags", required = false) String manageTags)
{
List<Map<String, Object>> eligibleEwe = scBreedPlanGenerateService.selectEligibleEwe();
List<Map<String, Object>> eligibleEwe = scBreedPlanGenerateService.selectEligibleEwe(manageTags);
return success(eligibleEwe);
}
@@ -65,9 +58,9 @@ public class ScBreedPlanGenerateController extends BaseController
*/
@PreAuthorize("@ss.hasPermi('mating_plan:generate:selectRam')")
@GetMapping("/selectRam")
public AjaxResult selectEligibleRam()
public AjaxResult selectEligibleRam(@RequestParam(value = "manageTags", required = false) String manageTags)
{
List<Map<String, Object>> eligibleRam = scBreedPlanGenerateService.selectEligibleRam();
List<Map<String, Object>> eligibleRam = scBreedPlanGenerateService.selectEligibleRam(manageTags);
return success(eligibleRam);
}
@@ -249,4 +242,19 @@ public class ScBreedPlanGenerateController extends BaseController
{
return toAjax(scBreedPlanGenerateService.deleteScBreedPlanGenerateByIds(ids));
}
/**
* 模糊查询母羊耳号列表
*/
@PreAuthorize("@ss.hasPermi('mating_plan:generate:query')") // 根据实际权限修改
@GetMapping("/search_ear_numbers")
public AjaxResult searchEarNumbers(@RequestParam("query") String query) {
try {
List<String> earNumbers = scBreedPlanGenerateService.searchEarNumbers(query);
return success(earNumbers);
} catch (Exception e) {
logger.error("搜索耳号异常", e);
return error("搜索耳号失败:" + e.getMessage());
}
}
}

View File

@@ -1,6 +1,8 @@
package com.zhyc.module.produce.breed.domain;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -65,4 +67,15 @@ public class ScBreedPlanGenerate extends BaseEntity
/** 审批意见 */
private String approveRemark;
/** 全部羊耳号列表(用于多耳号查询) */
private List<String> allEarNumbers;
public List<String> getAllEarNumbers() {
return allEarNumbers;
}
public void setAllEarNumbers(List<String> allEarNumbers) {
this.allEarNumbers = allEarNumbers;
}
}

View File

@@ -141,7 +141,7 @@ public class ScLambDetail extends BaseEntity
/** 是否留养0-否1-是 */
@Excel(name = "是否留养")
private Integer isRetained;
private Boolean isRetained;
/** 家系 */
@Excel(name = "家系")

View File

@@ -128,4 +128,12 @@ public interface ScBreedPlanGenerateMapper
* @return 结果
*/
public int deleteTempBreedPlanByPlanId(Long planGenerateId);
/**
* 模糊查询母羊耳号列表
*
* @param query 查询关键字
* @return 耳号列表
*/
List<String> searchEarNumbers(@Param("query") String query);
}

View File

@@ -4,6 +4,7 @@ import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.zhyc.module.produce.breed.domain.ScBreedPlanGenerate;
import org.springframework.web.bind.annotation.RequestParam;
/**
* 配种计划生成Service接口
@@ -34,14 +35,14 @@ public interface IScBreedPlanGenerateService
*
* @return 符合条件的母羊列表
*/
public List<Map<String, Object>> selectEligibleEwe();
public List<Map<String, Object>> selectEligibleEwe(@RequestParam(value = "manageTags", required = false) String manageTags);
/**
* 筛选符合条件的公羊
*
* @return 符合条件的公羊列表
*/
public List<Map<String, Object>> selectEligibleRam();
public List<Map<String, Object>> selectEligibleRam(@RequestParam(value = "manageTags", required = false) String manageTags);
/**
* 自动生成配种计划
@@ -120,4 +121,12 @@ public interface IScBreedPlanGenerateService
* @return 结果
*/
public int deleteScBreedPlanGenerateById(Long id);
/**
* 模糊查询母羊耳号列表
*
* @param query 查询关键字
* @return 耳号列表
*/
public List<String> searchEarNumbers(String query);
}

View File

@@ -119,4 +119,6 @@ public interface IScBreedRecordService
* @return 配种记录集合
*/
public List<ScBreedRecord> getBreedRecordsByTimeRange(Long sheepId, String startDate, String endDate);
ScBreedRecord getAutomaticBreedMatch(String manageTags);
}

View File

@@ -21,6 +21,7 @@ import org.springframework.util.StringUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.web.bind.annotation.RequestParam;
/**
* 配种计划生成Service业务层处理
@@ -67,7 +68,7 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
* @return 符合条件的母羊列表
*/
@Override
public List<Map<String, Object>> selectEligibleEwe()
public List<Map<String, Object>> selectEligibleEwe(@RequestParam(value = "manageTags", required = false) String manageTags)
{
return scBreedPlanGenerateMapper.selectEligibleEwe();
}
@@ -78,7 +79,7 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
* @return 符合条件的公羊列表
*/
@Override
public List<Map<String, Object>> selectEligibleRam()
public List<Map<String, Object>> selectEligibleRam(@RequestParam(value = "manageTags", required = false) String manageTags)
{
return scBreedPlanGenerateMapper.selectEligibleRam();
}
@@ -102,7 +103,16 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
// 自动生成计划名称:日期+计划类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sdf.format(new Date());
String planTypeName = (planType == 1) ? "同期发情配种计划" : "本交配种计划";
String planTypeName = "";
switch (planType) {
case 1: planTypeName = "供体母羊配种计划"; break;
case 2: planTypeName = "同期发情人工授精计划"; break;
case 3: planTypeName = "本交配种计划"; break;
case 4: planTypeName = "自然发情人工授精计划"; break;
default: planTypeName = "未知配种计划"; break;
}
planName = dateStr + planTypeName;
planGenerate.setPlanName(planName);
@@ -137,21 +147,15 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
for (int i = 0; i < eweIds.size(); i++) {
ScBreedPlan breedPlan = new ScBreedPlan();
// 存储公羊ID而不是字符串
breedPlan.setRamId(ramIds.get(ramIndex).toString());
breedPlan.setEweId(eweIds.get(i).toString());
// 根据计划类型设置配种类型:同期发情配种计划->同期发情,本交配种计划->本交
if (planType == 1) {
breedPlan.setBreedType(1L); // 同期发情
} else {
breedPlan.setBreedType(2L); // 本交
}
// 2. 修改:直接使用 planType 作为 breedType (假设一一对应)
// 1=供体母羊配种, 2=同期发情人工授精, 3=本交, 4=自然发情人工授精
breedPlan.setBreedType(Long.valueOf(planType));
// 插入临时配种计划,关联到生成记录
scBreedPlanGenerateMapper.insertTempBreedPlan(planGenerateId, breedPlan);
// 每个公羊配种指定数量的母羊后,切换到下一个公羊
if ((i + 1) % ewesPerRam == 0 && ramIndex < ramIds.size() - 1) {
ramIndex++;
}
@@ -356,10 +360,32 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
// 空行
rowNum++;
String typeName = "";
switch (planGenerate.getPlanType()) {
case 1: typeName = "供体母羊配种计划"; break;
case 2: typeName = "同期发情人工授精计划"; break;
case 3: typeName = "本交配种计划"; break;
case 4: typeName = "自然发情人工授精计划"; break;
default: typeName = "未知"; break;
}
// 基本信息
Row infoRow1 = sheet.createRow(rowNum++);
infoRow1.createCell(0).setCellValue("计划类型:");
infoRow1.createCell(1).setCellValue(planGenerate.getPlanType() == 1 ? "同期发情配种计划" : "本交配种计划");
String planTypeNameStr;
Integer type = planGenerate.getPlanType();
if (type != null) {
switch (type) {
case 1: planTypeNameStr = "供体母羊配种计划"; break;
case 2: planTypeNameStr = "同期发情人工授精计划"; break;
case 3: planTypeNameStr = "本交配种计划"; break;
case 4: planTypeNameStr = "自然发情人工授精计划"; break;
default: planTypeNameStr = "未知类型";
}
} else {
planTypeNameStr = "";
}
infoRow1.createCell(1).setCellValue(planTypeNameStr);
infoRow1.createCell(3).setCellValue("计划日期:");
infoRow1.createCell(4).setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(planGenerate.getPlanDate()));
@@ -447,14 +473,23 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ram_current_weight"));
// 配种类型
Object breedType = detail.get("breed_type");
Object breedTypeObj = detail.get("breed_type");
String breedTypeName = "未知类型";
if (breedType != null) {
int typeValue = Integer.parseInt(breedType.toString());
breedTypeName = typeValue == 1 ? "同期发情" : (typeValue == 2 ? "本交" : "未知类型");
if (breedTypeObj != null) {
try {
int typeValue = Integer.parseInt(breedTypeObj.toString());
switch (typeValue) {
case 1: breedTypeName = "供体母羊配种"; break;
case 2: breedTypeName = "同期发情人工授精"; break;
case 3: breedTypeName = "本交"; break;
case 4: breedTypeName = "自然发情人工授精"; break;
default: breedTypeName = "未知类型";
}
} catch (NumberFormatException e) {
// ignore
}
}
dataRow.createCell(colNum++).setCellValue(breedTypeName);
dataRow.createCell(colNum++).setCellValue(breedTypeName);
// 应用数据样式
for (int j = 0; j < headers.length; j++) {
if (dataRow.getCell(j) != null) {
@@ -537,4 +572,8 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi
scBreedPlanGenerateMapper.deleteTempBreedPlanByPlanId(id);
return scBreedPlanGenerateMapper.deleteScBreedPlanGenerateById(id);
}
@Override
public List<String> searchEarNumbers(String query) {
return scBreedPlanGenerateMapper.searchEarNumbers(query);
}
}

View File

@@ -109,11 +109,11 @@ public class ScLambingRecordServiceImpl implements IScLambingRecordService {
// 设置默认值
if (lambDetail.getIsRetained() == null) {
lambDetail.setIsRetained(0); // 默认为0
lambDetail.setIsRetained(false); // 默认为0
}
// 验证是否留养值的有效性0-否1-是
if (lambDetail.getIsRetained() != 0 && lambDetail.getIsRetained() != 1) {
if (lambDetail.getIsRetained() != false && lambDetail.getIsRetained() != true) {
throw new RuntimeException("是否留养值无效请使用0或1");
}

View File

@@ -77,6 +77,9 @@
left join da_sheepfold dsf on bs.sheepfold_id = dsf.id
where bs.gender = 1
and bs.is_delete = 0
<if test="manageTags != null and manageTags != ''">
and bs.manage_tags like concat('%', #{manageTags}, '%')
</if>
and (bs.status_id = 1 or bs.status_id is null)
and (
(bst.name in ('青年羊', '超龄羊') and (
@@ -109,6 +112,9 @@
left join bas_breed_status bbs on bs.breed_status_id = bbs.id
where bs.gender = 2
and bs.is_delete = 0
<if test="manageTags != null and manageTags != ''">
and bs.manage_tags like concat('%', #{manageTags}, '%')
</if>
and bs.status_id = 1
and (
(bst.name in ('青年羊', '超龄羊') and (
@@ -310,4 +316,13 @@
<delete id="deleteTempBreedPlanByPlanId" parameterType="Long">
delete from sc_breed_plan_temp where plan_generate_id = #{planGenerateId}
</delete>
<!-- 模糊查询耳号列表 -->
<select id="searchEarNumbers" resultType="java.lang.String">
SELECT DISTINCT sf.bs_manage_tags
FROM sheep_file sf
WHERE sf.bs_manage_tags LIKE CONCAT(#{query}, '%')
AND sf.is_delete = 0
ORDER BY sf.bs_manage_tags
LIMIT 50
</select>
</mapper>