From 1736b51fea18e2eb26d3c789c99121694940738c Mon Sep 17 00:00:00 2001 From: zyk Date: Sun, 1 Feb 2026 09:58:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=A7=8D=E8=AE=A1=E5=88=92=E6=9C=80?= =?UTF-8?q?=E7=BB=88=E5=AE=8C=E5=96=84=EF=BC=8C=E4=BA=A7=E7=BE=94=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ScBreedPlanGenerateController.java | 32 +++++--- .../breed/domain/ScBreedPlanGenerate.java | 13 ++++ .../produce/breed/domain/ScLambDetail.java | 2 +- .../mapper/ScBreedPlanGenerateMapper.java | 8 ++ .../service/IScBreedPlanGenerateService.java | 13 +++- .../breed/service/IScBreedRecordService.java | 2 + .../impl/ScBreedPlanGenerateServiceImpl.java | 77 ++++++++++++++----- .../impl/ScLambingRecordServiceImpl.java | 4 +- .../breed/ScBreedPlanGenerateMapper.xml | 15 ++++ 9 files changed, 130 insertions(+), 36 deletions(-) diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedPlanGenerateController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedPlanGenerateController.java index 80861f8..513d72f 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedPlanGenerateController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedPlanGenerateController.java @@ -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> eligibleEwe = scBreedPlanGenerateService.selectEligibleEwe(); + List> 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> eligibleRam = scBreedPlanGenerateService.selectEligibleRam(); + List> 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 earNumbers = scBreedPlanGenerateService.searchEarNumbers(query); + return success(earNumbers); + } catch (Exception e) { + logger.error("搜索耳号异常", e); + return error("搜索耳号失败:" + e.getMessage()); + } + } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanGenerate.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanGenerate.java index 2658186..ed8043d 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanGenerate.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanGenerate.java @@ -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 allEarNumbers; + + public List getAllEarNumbers() { + return allEarNumbers; + } + + public void setAllEarNumbers(List allEarNumbers) { + this.allEarNumbers = allEarNumbers; + } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScLambDetail.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScLambDetail.java index 33cd66d..b0dfd7c 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScLambDetail.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScLambDetail.java @@ -141,7 +141,7 @@ public class ScLambDetail extends BaseEntity /** 是否留养:0-否,1-是 */ @Excel(name = "是否留养") - private Integer isRetained; + private Boolean isRetained; /** 家系 */ @Excel(name = "家系") diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedPlanGenerateMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedPlanGenerateMapper.java index 0f744e6..a9d1e66 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedPlanGenerateMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedPlanGenerateMapper.java @@ -128,4 +128,12 @@ public interface ScBreedPlanGenerateMapper * @return 结果 */ public int deleteTempBreedPlanByPlanId(Long planGenerateId); + + /** + * 模糊查询母羊耳号列表 + * + * @param query 查询关键字 + * @return 耳号列表 + */ + List searchEarNumbers(@Param("query") String query); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedPlanGenerateService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedPlanGenerateService.java index 499438d..cabf073 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedPlanGenerateService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedPlanGenerateService.java @@ -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> selectEligibleEwe(); + public List> selectEligibleEwe(@RequestParam(value = "manageTags", required = false) String manageTags); /** * 筛选符合条件的公羊 * * @return 符合条件的公羊列表 */ - public List> selectEligibleRam(); + public List> 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 searchEarNumbers(String query); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedRecordService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedRecordService.java index 293d63e..b4a7300 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedRecordService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedRecordService.java @@ -119,4 +119,6 @@ public interface IScBreedRecordService * @return 配种记录集合 */ public List getBreedRecordsByTimeRange(Long sheepId, String startDate, String endDate); + + ScBreedRecord getAutomaticBreedMatch(String manageTags); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedPlanGenerateServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedPlanGenerateServiceImpl.java index f2073ce..c76eb04 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedPlanGenerateServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedPlanGenerateServiceImpl.java @@ -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> selectEligibleEwe() + public List> selectEligibleEwe(@RequestParam(value = "manageTags", required = false) String manageTags) { return scBreedPlanGenerateMapper.selectEligibleEwe(); } @@ -78,7 +79,7 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi * @return 符合条件的公羊列表 */ @Override - public List> selectEligibleRam() + public List> 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 searchEarNumbers(String query) { + return scBreedPlanGenerateMapper.searchEarNumbers(query); + } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScLambingRecordServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScLambingRecordServiceImpl.java index 657ec1d..5325733 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScLambingRecordServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScLambingRecordServiceImpl.java @@ -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(是)"); } diff --git a/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedPlanGenerateMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedPlanGenerateMapper.xml index 44d083f..f8cb78b 100644 --- a/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedPlanGenerateMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedPlanGenerateMapper.xml @@ -77,6 +77,9 @@ left join da_sheepfold dsf on bs.sheepfold_id = dsf.id where bs.gender = 1 and bs.is_delete = 0 + + and bs.manage_tags like concat('%', #{manageTags}, '%') + 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 + + and bs.manage_tags like concat('%', #{manageTags}, '%') + and bs.status_id = 1 and ( (bst.name in ('青年羊', '超龄羊') and ( @@ -310,4 +316,13 @@ delete from sc_breed_plan_temp where plan_generate_id = #{planGenerateId} + + \ No newline at end of file