diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/RawSpermRecordController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/RawSpermRecordController.java index 17e4ee4..232db81 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/RawSpermRecordController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/RawSpermRecordController.java @@ -1,6 +1,8 @@ package com.zhyc.module.produce.breed.controller; import java.util.List; +import java.util.Map; +import java.util.HashMap; import javax.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -78,16 +80,35 @@ public class RawSpermRecordController extends BaseController @PostMapping public AjaxResult add(@RequestBody RawSpermRecord rawSpermRecord) { - // 如果传入的是耳号,需要先根据耳号查询羊只ID - if (StringUtils.isNotEmpty(rawSpermRecord.getManageTags()) && rawSpermRecord.getSheepId() == null) { - Long sheepId = rawSpermRecordService.getSheepIdByManageTags(rawSpermRecord.getManageTags()); - if (sheepId == null) { - return error("未找到对应耳号的羊只信息"); + try { + // 验证必填字段 + if (StringUtils.isEmpty(rawSpermRecord.getManageTags())) { + return error("耳号不能为空"); + } + if (rawSpermRecord.getPickDate() == null) { + return error("采精日期不能为空"); + } + if (rawSpermRecord.getAmount() == null) { + return error("采精量不能为空"); } - rawSpermRecord.setSheepId(sheepId); - } - return toAjax(rawSpermRecordService.insertRawSpermRecord(rawSpermRecord)); + // 验证耳号对应的羊只是否为公羊 + Map sheepInfo = rawSpermRecordService.getSheepInfoByManageTags(rawSpermRecord.getManageTags()); + if (sheepInfo == null) { + return error("未找到耳号为[" + rawSpermRecord.getManageTags() + "]的羊只信息,请检查耳号是否正确"); + } + + // 安全的类型转换 + Integer gender = convertToInteger(sheepInfo.get("gender")); + if (gender == null || gender != 2) { + return error("采精记录只能针对公羊,耳号[" + rawSpermRecord.getManageTags() + "]对应的羊只不是公羊"); + } + + return toAjax(rawSpermRecordService.insertRawSpermRecord(rawSpermRecord)); + } catch (Exception e) { + logger.error("新增采精记录失败", e); + return error("新增失败:" + e.getMessage()); + } } /** @@ -98,16 +119,26 @@ public class RawSpermRecordController extends BaseController @PutMapping public AjaxResult edit(@RequestBody RawSpermRecord rawSpermRecord) { - // 如果传入的是耳号,需要先根据耳号查询羊只ID - if (StringUtils.isNotEmpty(rawSpermRecord.getManageTags()) && rawSpermRecord.getSheepId() == null) { - Long sheepId = rawSpermRecordService.getSheepIdByManageTags(rawSpermRecord.getManageTags()); - if (sheepId == null) { - return error("未找到对应耳号的羊只信息"); - } - rawSpermRecord.setSheepId(sheepId); - } + try { + // 如果修改了耳号,需要重新验证 + if (StringUtils.isNotEmpty(rawSpermRecord.getManageTags())) { + Map sheepInfo = rawSpermRecordService.getSheepInfoByManageTags(rawSpermRecord.getManageTags()); + if (sheepInfo == null) { + return error("未找到耳号为[" + rawSpermRecord.getManageTags() + "]的羊只信息,请检查耳号是否正确"); + } - return toAjax(rawSpermRecordService.updateRawSpermRecord(rawSpermRecord)); + // 安全的类型转换 + Integer gender = convertToInteger(sheepInfo.get("gender")); + if (gender == null || gender != 2) { + return error("采精记录只能针对公羊,耳号[" + rawSpermRecord.getManageTags() + "]对应的羊只不是公羊"); + } + } + + return toAjax(rawSpermRecordService.updateRawSpermRecord(rawSpermRecord)); + } catch (Exception e) { + logger.error("修改采精记录失败", e); + return error("修改失败:" + e.getMessage()); + } } /** @@ -122,16 +153,105 @@ public class RawSpermRecordController extends BaseController } /** - * 根据耳号查询羊只信息 + * 根据耳号查询羊只信息(带性别验证) */ @GetMapping("/getSheepByManageTags/{manageTags}") public AjaxResult getSheepByManageTags(@PathVariable("manageTags") String manageTags) { - Long sheepId = rawSpermRecordService.getSheepIdByManageTags(manageTags); - if (sheepId != null) { - return success(sheepId); + try { + Map sheepInfo = rawSpermRecordService.getSheepInfoByManageTags(manageTags); + if (sheepInfo != null) { + // 安全的类型转换 + Integer gender = convertToInteger(sheepInfo.get("gender")); + // 验证是否为公羊 + if (gender == null || gender != 2) { + return error("该耳号[" + manageTags + "]对应的羊只不是公羊,无法进行采精记录"); + } + + // 构造包含消息和数据的返回结果 + Map resultData = new HashMap<>(); + resultData.put("sheepInfo", sheepInfo); + resultData.put("message", "验证通过,该羊只为公羊"); + return success(resultData); + } else { + return error("未找到耳号为[" + manageTags + "]的羊只信息"); + } + } catch (Exception e) { + logger.error("查询羊只信息失败", e); + return error("查询失败:" + e.getMessage()); + } + } + + /** + * 验证羊只是否为公羊 + */ + @GetMapping("/validateRam/{manageTags}") + public AjaxResult validateRam(@PathVariable("manageTags") String manageTags) + { + try { + boolean isRam = rawSpermRecordService.validateRamGender(manageTags); + if (isRam) { + return success("该羊只为公羊,可以进行采精记录"); + } else { + return error("该羊只不是公羊,无法进行采精记录"); + } + } catch (Exception e) { + logger.error("验证羊只性别失败", e); + return error("验证失败:" + e.getMessage()); + } + } + + /** + * 根据耳号查询羊只ID(兼容原有接口) + */ + @GetMapping("/getSheepIdByManageTags/{manageTags}") + public AjaxResult getSheepIdByManageTags(@PathVariable("manageTags") String manageTags) + { + try { + Long sheepId = rawSpermRecordService.getSheepIdByManageTags(manageTags); + if (sheepId != null) { + return success(sheepId); + } else { + return error("未找到对应耳号的羊只信息"); + } + } catch (Exception e) { + logger.error("查询羊只ID失败", e); + return error("查询失败:" + e.getMessage()); + } + } + + /** + * 安全的类型转换:将Object转换为Integer + * + * @param obj 要转换的对象 + * @return Integer值,如果转换失败返回null + */ + private Integer convertToInteger(Object obj) { + if (obj == null) { + return null; + } + + if (obj instanceof Integer) { + return (Integer) obj; + } else if (obj instanceof Long) { + Long longValue = (Long) obj; + // 检查Long值是否在Integer范围内 + if (longValue >= Integer.MIN_VALUE && longValue <= Integer.MAX_VALUE) { + return longValue.intValue(); + } else { + logger.warn("数值超出Integer范围:" + longValue); + return null; + } + } else if (obj instanceof String) { + try { + return Integer.parseInt((String) obj); + } catch (NumberFormatException e) { + logger.warn("无法将字符串转换为Integer:" + obj); + return null; + } } else { - return error("未找到对应耳号的羊只信息"); + logger.warn("无法将 " + obj.getClass().getSimpleName() + " 类型转换为Integer"); + return null; } } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScDryMilkController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScDryMilkController.java index 4013c1d..b449d88 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScDryMilkController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScDryMilkController.java @@ -1,6 +1,7 @@ package com.zhyc.module.produce.breed.controller; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -11,6 +12,7 @@ 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.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.zhyc.common.annotation.Log; import com.zhyc.common.core.controller.BaseController; @@ -18,6 +20,8 @@ import com.zhyc.common.core.domain.AjaxResult; import com.zhyc.common.enums.BusinessType; import com.zhyc.module.produce.breed.domain.ScDryMilk; import com.zhyc.module.produce.breed.service.IScDryMilkService; +import com.zhyc.module.base.domain.DaSheepfold; +import com.zhyc.module.base.service.IDaSheepfoldService; import com.zhyc.common.utils.poi.ExcelUtil; import com.zhyc.common.core.page.TableDataInfo; @@ -34,6 +38,9 @@ public class ScDryMilkController extends BaseController @Autowired private IScDryMilkService scDryMilkService; + @Autowired + private IDaSheepfoldService daSheepfoldService; + /** * 查询干奶记录列表 */ @@ -41,9 +48,23 @@ public class ScDryMilkController extends BaseController @GetMapping("/list") public TableDataInfo list(ScDryMilk scDryMilk) { - startPage(); - List list = scDryMilkService.selectScDryMilkList(scDryMilk); - return getDataTable(list); + try { + // 添加调试日志 + if (scDryMilk.getManageTags() != null && !scDryMilk.getManageTags().trim().isEmpty()) { + logger.info("搜索耳号参数: [{}]", scDryMilk.getManageTags()); + scDryMilk.setManageTags(scDryMilk.getManageTags().trim()); + } + + startPage(); + List list = scDryMilkService.selectScDryMilkList(scDryMilk); + + logger.info("查询到干奶记录数量: {}", list.size()); + + return getDataTable(list); + } catch (Exception e) { + logger.error("查询干奶记录列表失败", e); + return getDataTable(new java.util.ArrayList<>()); + } } /** @@ -54,9 +75,17 @@ public class ScDryMilkController extends BaseController @PostMapping("/export") public void export(HttpServletResponse response, ScDryMilk scDryMilk) { - List list = scDryMilkService.selectScDryMilkList(scDryMilk); - ExcelUtil util = new ExcelUtil(ScDryMilk.class); - util.exportExcel(response, list, "干奶记录数据"); + try { + if (scDryMilk.getManageTags() != null) { + scDryMilk.setManageTags(scDryMilk.getManageTags().trim()); + } + + List list = scDryMilkService.selectScDryMilkList(scDryMilk); + ExcelUtil util = new ExcelUtil(ScDryMilk.class); + util.exportExcel(response, list, "干奶记录数据"); + } catch (Exception e) { + logger.error("导出干奶记录失败", e); + } } /** @@ -66,7 +95,49 @@ public class ScDryMilkController extends BaseController @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { - return success(scDryMilkService.selectScDryMilkById(id)); + try { + if (id == null) { + return error("记录ID不能为空"); + } + + ScDryMilk result = scDryMilkService.selectScDryMilkById(id); + if (result == null) { + return error("记录不存在"); + } + + return success(result); + } catch (Exception e) { + logger.error("获取干奶记录详细信息失败,ID: " + id, e); + return error("获取记录详细信息失败: " + e.getMessage()); + } + } + + /** + * 根据耳号查询羊只ID - 新增耳号验证功能 + */ + @GetMapping("/validateEarTag") + public AjaxResult validateEarTag(@RequestParam("manageTags") String manageTags) + { + try { + if (manageTags == null || manageTags.trim().isEmpty()) { + return error("耳号不能为空"); + } + + String cleanTag = manageTags.trim(); + logger.info("验证耳号: [{}]", cleanTag); + + Long sheepId = scDryMilkService.selectSheepIdByManageTags(cleanTag); + if (sheepId == null) { + logger.warn("耳号 [{}] 不存在", cleanTag); + return error("该耳号不存在,请检查输入"); + } + + logger.info("验证耳号成功,羊只ID: {}", sheepId); + return AjaxResult.success("耳号验证通过", sheepId); + } catch (Exception e) { + logger.error("验证耳号失败,耳号: " + manageTags, e); + return error("验证耳号时出错: " + e.getMessage()); + } } /** @@ -80,6 +151,32 @@ public class ScDryMilkController extends BaseController return success(sheepId); } + /** + * 获取羊舍列表 - 用于嵌套选择 + */ + @GetMapping("/sheepfoldList") + public AjaxResult getSheepfoldList(@RequestParam(value = "ranchId", required = false) Long ranchId, + @RequestParam(value = "sheepfoldTypeId", required = false) Long sheepfoldTypeId) + { + try { + DaSheepfold query = new DaSheepfold(); + if (ranchId != null) { + query.setRanchId(ranchId); + } + if (sheepfoldTypeId != null) { + query.setSheepfoldTypeId(sheepfoldTypeId); + } + + List sheepfoldList = daSheepfoldService.selectDaSheepfoldList(query); + logger.info("查询羊舍列表,牧场ID: {}, 类型ID: {}, 结果数量: {}", ranchId, sheepfoldTypeId, sheepfoldList.size()); + + return success(sheepfoldList); + } catch (Exception e) { + logger.error("获取羊舍列表失败", e); + return error("获取羊舍列表失败: " + e.getMessage()); + } + } + /** * 新增干奶记录 */ @@ -88,7 +185,48 @@ public class ScDryMilkController extends BaseController @PostMapping public AjaxResult add(@RequestBody ScDryMilk scDryMilk) { - return toAjax(scDryMilkService.insertScDryMilk(scDryMilk)); + try { + // 基础参数校验 + if (scDryMilk == null) { + return error("请求参数不能为空"); + } + + if (scDryMilk.getManageTags() == null || scDryMilk.getManageTags().trim().isEmpty()) { + return error("耳号不能为空"); + } + + if (scDryMilk.getDatetime() == null) { + return error("干奶日期不能为空"); + } + + if (scDryMilk.getStatus() == null) { + return error("请选择是否使用乳头封闭剂"); + } + + // 清理输入参数 + scDryMilk.setManageTags(scDryMilk.getManageTags().trim()); + if (scDryMilk.getTecahnician() != null) { + scDryMilk.setTecahnician(scDryMilk.getTecahnician().trim()); + } + if (scDryMilk.getComment() != null) { + scDryMilk.setComment(scDryMilk.getComment().trim()); + } + + logger.info("新增干奶记录,耳号: {}", scDryMilk.getManageTags()); + + int result = scDryMilkService.insertScDryMilk(scDryMilk); + if (result > 0) { + // 重新查询插入的记录,包含自动生成的创建时间 + ScDryMilk insertedRecord = scDryMilkService.selectScDryMilkById(scDryMilk.getId()); + logger.info("新增干奶记录成功,记录ID: {}", scDryMilk.getId()); + return success(insertedRecord); + } else { + return error("新增失败"); + } + } catch (Exception e) { + logger.error("新增干奶记录失败", e); + return error("新增失败: " + e.getMessage()); + } } /** @@ -99,7 +237,39 @@ public class ScDryMilkController extends BaseController @PutMapping public AjaxResult edit(@RequestBody ScDryMilk scDryMilk) { - return toAjax(scDryMilkService.updateScDryMilk(scDryMilk)); + try { + if (scDryMilk == null) { + return error("请求参数不能为空"); + } + + if (scDryMilk.getId() == null) { + return error("记录ID不能为空"); + } + + // 清理输入参数 + if (scDryMilk.getManageTags() != null) { + scDryMilk.setManageTags(scDryMilk.getManageTags().trim()); + } + if (scDryMilk.getTecahnician() != null) { + scDryMilk.setTecahnician(scDryMilk.getTecahnician().trim()); + } + if (scDryMilk.getComment() != null) { + scDryMilk.setComment(scDryMilk.getComment().trim()); + } + + logger.info("修改干奶记录,ID: {}", scDryMilk.getId()); + + int result = scDryMilkService.updateScDryMilk(scDryMilk); + if (result > 0) { + logger.info("修改干奶记录成功"); + return success("修改成功"); + } else { + return error("修改失败,记录可能不存在"); + } + } catch (Exception e) { + logger.error("修改干奶记录失败", e); + return error("修改失败: " + e.getMessage()); + } } /** @@ -110,6 +280,23 @@ public class ScDryMilkController extends BaseController @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(scDryMilkService.deleteScDryMilkByIds(ids)); + try { + if (ids == null || ids.length == 0) { + return error("删除的记录ID不能为空"); + } + + logger.info("删除干奶记录,IDs: {}", java.util.Arrays.toString(ids)); + + int result = scDryMilkService.deleteScDryMilkByIds(ids); + if (result > 0) { + logger.info("删除干奶记录成功,删除数量: {}", result); + return success("删除成功"); + } else { + return error("删除失败,记录可能不存在"); + } + } 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/controller/ScLambingRecordController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScLambingRecordController.java index e2b6dee..04aa972 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScLambingRecordController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScLambingRecordController.java @@ -76,12 +76,13 @@ public class ScLambingRecordController extends BaseController { } /** - * 获取产羔记录详细信息 + * 获取产羔记录详细信息(修改:改为获取包含关联信息的详细数据) */ @PreAuthorize("@ss.hasPermi('breed:lambing_records:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { - return success(scLambingRecordService.selectScLambingRecordById(id)); + // 修改:改为调用详细查询方法,获取包含母羊耳号、公羊耳号等关联信息 + return success(scLambingRecordService.selectScLambingRecordDetailById(id)); } /** diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScPregnancyRecordController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScPregnancyRecordController.java index 8c4a1fd..3603440 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScPregnancyRecordController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScPregnancyRecordController.java @@ -45,8 +45,22 @@ public class ScPregnancyRecordController extends BaseController public TableDataInfo list(ScPregnancyRecord scPregnancyRecord) { try { + // 添加调试日志 + if (scPregnancyRecord.getManageTags() != null && !scPregnancyRecord.getManageTags().trim().isEmpty()) { + logger.info("搜索耳号参数: [{}]", scPregnancyRecord.getManageTags()); + // 清理输入参数 + scPregnancyRecord.setManageTags(scPregnancyRecord.getManageTags().trim()); + } + if (scPregnancyRecord.getTechnician() != null && !scPregnancyRecord.getTechnician().trim().isEmpty()) { + logger.info("搜索技术员参数: [{}]", scPregnancyRecord.getTechnician()); + scPregnancyRecord.setTechnician(scPregnancyRecord.getTechnician().trim()); + } + startPage(); List list = scPregnancyRecordService.selectScPregnancyRecordList(scPregnancyRecord); + + logger.info("查询到孕检记录数量: {}", list.size()); + return getDataTable(list); } catch (Exception e) { logger.error("查询孕检记录列表失败", e); @@ -63,6 +77,14 @@ public class ScPregnancyRecordController extends BaseController public void export(HttpServletResponse response, ScPregnancyRecord scPregnancyRecord) { try { + // 清理导出参数 + if (scPregnancyRecord.getManageTags() != null) { + scPregnancyRecord.setManageTags(scPregnancyRecord.getManageTags().trim()); + } + if (scPregnancyRecord.getTechnician() != null) { + scPregnancyRecord.setTechnician(scPregnancyRecord.getTechnician().trim()); + } + List list = scPregnancyRecordService.selectScPregnancyRecordList(scPregnancyRecord); ExcelUtil util = new ExcelUtil(ScPregnancyRecord.class); util.exportExcel(response, list, "孕检记录数据"); @@ -125,13 +147,25 @@ public class ScPregnancyRecordController extends BaseController return error("技术员不能为空"); } + // 清理输入参数 + scPregnancyRecord.setManageTags(scPregnancyRecord.getManageTags().trim()); + scPregnancyRecord.setResult(scPregnancyRecord.getResult().trim()); + scPregnancyRecord.setTechnician(scPregnancyRecord.getTechnician().trim()); + + if (scPregnancyRecord.getRemark() != null) { + scPregnancyRecord.setRemark(scPregnancyRecord.getRemark().trim()); + } + // 如果孕检方式为空,默认设置为B超 if (scPregnancyRecord.getWay() == null || scPregnancyRecord.getWay().trim().isEmpty()) { scPregnancyRecord.setWay("B超"); } + logger.info("新增孕检记录,耳号: {}, 结果: {}", scPregnancyRecord.getManageTags(), scPregnancyRecord.getResult()); + int result = scPregnancyRecordService.insertScPregnancyRecord(scPregnancyRecord); if (result > 0) { + logger.info("新增孕检记录成功,记录ID: {}", scPregnancyRecord.getId()); return success("新增成功"); } else { return error("新增失败"); @@ -179,8 +213,20 @@ public class ScPregnancyRecordController extends BaseController return error("技术员不能为空"); } + // 清理输入参数 + scPregnancyRecord.setManageTags(scPregnancyRecord.getManageTags().trim()); + scPregnancyRecord.setResult(scPregnancyRecord.getResult().trim()); + scPregnancyRecord.setTechnician(scPregnancyRecord.getTechnician().trim()); + + if (scPregnancyRecord.getRemark() != null) { + scPregnancyRecord.setRemark(scPregnancyRecord.getRemark().trim()); + } + + logger.info("修改孕检记录,ID: {}, 耳号: {}", scPregnancyRecord.getId(), scPregnancyRecord.getManageTags()); + int result = scPregnancyRecordService.updateScPregnancyRecord(scPregnancyRecord); if (result > 0) { + logger.info("修改孕检记录成功"); return success("修改成功"); } else { return error("修改失败,记录可能不存在"); @@ -207,8 +253,11 @@ public class ScPregnancyRecordController extends BaseController return error("删除的记录ID不能为空"); } + logger.info("删除孕检记录,IDs: {}", java.util.Arrays.toString(ids)); + int result = scPregnancyRecordService.deleteScPregnancyRecordByIds(ids); if (result > 0) { + logger.info("删除孕检记录成功,删除数量: {}", result); return success("删除成功"); } else { return error("删除失败,记录可能不存在"); @@ -233,11 +282,16 @@ public class ScPregnancyRecordController extends BaseController return error("管理耳号不能为空"); } - Map sheepInfo = scPregnancyRecordService.getSheepByManageTags(manageTags.trim()); + String cleanTag = manageTags.trim(); + logger.info("查询羊只信息,耳号: [{}]", cleanTag); + + Map sheepInfo = scPregnancyRecordService.getSheepByManageTags(cleanTag); if (sheepInfo == null) { + logger.warn("未找到耳号 [{}] 对应的羊只信息", cleanTag); return error("未找到该耳号的羊只信息"); } + logger.info("查询羊只信息成功,羊只ID: {}", sheepInfo.get("id")); return success(sheepInfo); } catch (ServiceException e) { return error(e.getMessage()); @@ -258,11 +312,16 @@ public class ScPregnancyRecordController extends BaseController return error("管理耳号不能为空"); } - Map breedInfo = scPregnancyRecordService.getBreedInfoByManageTags(manageTags.trim()); + String cleanTag = manageTags.trim(); + logger.info("查询配种信息,耳号: [{}]", cleanTag); + + Map breedInfo = scPregnancyRecordService.getBreedInfoByManageTags(cleanTag); if (breedInfo == null) { + logger.info("未找到耳号 [{}] 对应的配种信息", cleanTag); return error("未找到该耳号的配种信息"); } + logger.info("查询配种信息成功"); return success(breedInfo); } catch (ServiceException e) { return error(e.getMessage()); @@ -271,4 +330,30 @@ public class ScPregnancyRecordController extends BaseController return error("查询配种信息失败: " + e.getMessage()); } } + + /** + * 调试接口:测试数据库连接和基础查询 + */ + @GetMapping("/debug/test") + public AjaxResult debugTest() + { + try { + // 测试基础查询 + ScPregnancyRecord testQuery = new ScPregnancyRecord(); + List list = scPregnancyRecordService.selectScPregnancyRecordList(testQuery); + + logger.info("调试测试 - 总记录数: {}", list.size()); + + // 打印前几条记录的耳号信息 + for (int i = 0; i < Math.min(5, list.size()); i++) { + ScPregnancyRecord record = list.get(i); + logger.info("调试测试 - 记录{}:ID={}, 耳号={}", i+1, record.getId(), record.getManageTags()); + } + + return success("调试测试完成,总记录数: " + list.size()); + } 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/controller/ScSheepDeathController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScSheepDeathController.java index 1f6997b..229cd5a 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScSheepDeathController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScSheepDeathController.java @@ -20,6 +20,8 @@ import com.zhyc.common.enums.BusinessType; import com.zhyc.common.exception.ServiceException; import com.zhyc.module.produce.breed.domain.ScSheepDeath; import com.zhyc.module.produce.breed.service.IScSheepDeathService; +import com.zhyc.module.biosafety.service.ISwDiseaseService; +import com.zhyc.module.biosafety.domain.SwDisease; import com.zhyc.common.utils.poi.ExcelUtil; import com.zhyc.common.core.page.TableDataInfo; @@ -36,6 +38,9 @@ public class ScSheepDeathController extends BaseController @Autowired private IScSheepDeathService scSheepDeathService; + @Autowired + private ISwDiseaseService swDiseaseService; + /** * 查询羊只死淘记录列表 */ @@ -77,6 +82,22 @@ public class ScSheepDeathController extends BaseController } } + /** + * 获取疾病树形列表 + */ + @PreAuthorize("@ss.hasPermi('sheep_death:death:query')") + @GetMapping("/disease/tree") + public AjaxResult getDiseaseTree() + { + try { + List diseaseList = swDiseaseService.selectSwDiseaseList(new SwDisease()); + return success(diseaseList); + } catch (Exception e) { + logger.error("获取疾病树形列表失败", e); + return error("获取疾病列表失败: " + e.getMessage()); + } + } + /** * 导出羊只死淘记录列表 */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/RawSpermRecord.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/RawSpermRecord.java index 187d22e..fad118c 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/RawSpermRecord.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/RawSpermRecord.java @@ -1,5 +1,6 @@ package com.zhyc.module.produce.breed.domain; +import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; @@ -26,7 +27,7 @@ public class RawSpermRecord extends BaseEntity /** 羊只ID */ @Excel(name = "羊只ID") - private Long sheepId; + private Integer sheepId; /** 耳号 */ @Excel(name = "耳号") @@ -38,7 +39,7 @@ public class RawSpermRecord extends BaseEntity /** 月龄 */ @Excel(name = "月龄") - private Long monthAge; + private Integer monthAge; /** 采精日期 */ @JsonFormat(pattern = "yyyy-MM-dd") @@ -46,8 +47,8 @@ public class RawSpermRecord extends BaseEntity private Date pickDate; /** 采精量 */ - @Excel(name = "采精量") - private Long amount; + @Excel(name = "采精量(ml)") + private BigDecimal amount; /** 精液密度 */ @Excel(name = "精液密度") @@ -59,7 +60,7 @@ public class RawSpermRecord extends BaseEntity /** 是否性控(0否1是) */ @Excel(name = "是否性控", readConverterExp = "0=否,1=是") - private Long controlled; + private Integer controlled; /** 性欲情况 */ @Excel(name = "性欲情况") @@ -77,5 +78,11 @@ public class RawSpermRecord extends BaseEntity @Excel(name = "采集备注") private String comment; + /** 阴囊周长(cm) */ + @Excel(name = "阴囊周长(cm)") + private BigDecimal scrotumCircumference; + /** 精液品质(A/B/C/D级) */ + @Excel(name = "精液品质", readConverterExp = "A=A级,B=B级,C=C级,D=D级") + private String semenQuality; } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/RawSpermRecordMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/RawSpermRecordMapper.java index a3b9ef8..2d42034 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/RawSpermRecordMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/RawSpermRecordMapper.java @@ -1,6 +1,7 @@ package com.zhyc.module.produce.breed.mapper; import java.util.List; +import java.util.Map; import com.zhyc.module.produce.breed.domain.RawSpermRecord; /** @@ -65,5 +66,13 @@ public interface RawSpermRecordMapper * @param manageTags 耳号 * @return 羊只ID */ - public Long selectSheepIdByManageTags(String manageTags); + public Integer selectSheepIdByManageTags(String manageTags); + + /** + * 根据耳号查询羊只信息(包含ID、性别、月龄、电子耳号等) + * + * @param manageTags 耳号 + * @return 羊只信息 Map包含id、gender、monthAge、electronicTags等字段 + */ + public Map selectSheepInfoByManageTags(String manageTags); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IRawSpermRecordService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IRawSpermRecordService.java index a9b29f2..92f05d5 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IRawSpermRecordService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IRawSpermRecordService.java @@ -1,6 +1,7 @@ package com.zhyc.module.produce.breed.service; import java.util.List; +import java.util.Map; import com.zhyc.module.produce.breed.domain.RawSpermRecord; /** @@ -66,4 +67,20 @@ public interface IRawSpermRecordService * @return 羊只ID */ public Long getSheepIdByManageTags(String manageTags); + + /** + * 根据耳号查询羊只信息并验证是否为公羊 + * + * @param manageTags 耳号 + * @return 羊只信息 Map包含id和gender字段 + */ + public Map getSheepInfoByManageTags(String manageTags); + + /** + * 验证羊只是否为公羊 + * + * @param manageTags 耳号 + * @return true-是公羊,false-不是公羊 + */ + public boolean validateRamGender(String manageTags); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScLambingRecordService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScLambingRecordService.java index a230bb4..e71cd10 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScLambingRecordService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScLambingRecordService.java @@ -44,10 +44,16 @@ public interface IScLambingRecordService { public int deleteScLambingRecordById(Long id); /** - * 查询产羔记录 + * 查询产羔记录基础信息 */ public ScLambingRecord selectScLambingRecordById(Long id); + /** + * 查询产羔记录详细信息(包含关联信息)- 新增方法 + * 用于修改时获取完整的产羔记录信息,包括母羊耳号、公羊耳号、配种日期等关联字段 + */ + public ScLambingRecord selectScLambingRecordDetailById(Long id); + /** * 查询羔羊详情 */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/RawSpermRecordServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/RawSpermRecordServiceImpl.java index f925b77..fbb552f 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/RawSpermRecordServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/RawSpermRecordServiceImpl.java @@ -1,6 +1,7 @@ package com.zhyc.module.produce.breed.service.impl; import java.util.List; +import java.util.Map; import com.zhyc.common.utils.DateUtils; import com.zhyc.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -54,10 +55,37 @@ public class RawSpermRecordServiceImpl implements IRawSpermRecordService @Override public int insertRawSpermRecord(RawSpermRecord rawSpermRecord) { - // 如果传入的是耳号,需要先根据耳号查询羊只ID - if (StringUtils.isNotEmpty(rawSpermRecord.getManageTags()) && rawSpermRecord.getSheepId() == null) { - Long sheepId = getSheepIdByManageTags(rawSpermRecord.getManageTags()); + // 如果传入的是耳号,需要先根据耳号查询羊只信息并验证性别 + if (StringUtils.isNotEmpty(rawSpermRecord.getManageTags())) { + Map sheepInfo = getSheepInfoByManageTags(rawSpermRecord.getManageTags()); + if (sheepInfo == null) { + throw new RuntimeException("未找到耳号为[" + rawSpermRecord.getManageTags() + "]的羊只信息"); + } + + // 安全的类型转换 + Integer sheepId = convertToInteger(sheepInfo.get("id")); + Integer gender = convertToInteger(sheepInfo.get("gender")); + Integer monthAge = convertToInteger(sheepInfo.get("monthAge")); + String electronicTags = (String) sheepInfo.get("electronicTags"); + + // 关键验证:必须是公羊(gender=2) + if (gender == null || gender != 2) { + throw new RuntimeException("采精记录只能针对公羊,耳号[" + rawSpermRecord.getManageTags() + "]对应的羊只不是公羊"); + } + + // 设置关联信息 rawSpermRecord.setSheepId(sheepId); + if (rawSpermRecord.getMonthAge() == null && monthAge != null) { + rawSpermRecord.setMonthAge(monthAge); + } + if (StringUtils.isEmpty(rawSpermRecord.getElectronicTags()) && StringUtils.isNotEmpty(electronicTags)) { + rawSpermRecord.setElectronicTags(electronicTags); + } + } + + // 设置默认值 + if (rawSpermRecord.getControlled() == null) { + rawSpermRecord.setControlled(0); // 默认不性控 } rawSpermRecord.setCreateTime(DateUtils.getNowDate()); @@ -73,12 +101,25 @@ public class RawSpermRecordServiceImpl implements IRawSpermRecordService @Override public int updateRawSpermRecord(RawSpermRecord rawSpermRecord) { - // 如果传入的是耳号,需要先根据耳号查询羊只ID - if (StringUtils.isNotEmpty(rawSpermRecord.getManageTags()) && rawSpermRecord.getSheepId() == null) { - Long sheepId = getSheepIdByManageTags(rawSpermRecord.getManageTags()); + // 如果修改了耳号,需要重新验证 + if (StringUtils.isNotEmpty(rawSpermRecord.getManageTags())) { + Map sheepInfo = getSheepInfoByManageTags(rawSpermRecord.getManageTags()); + if (sheepInfo == null) { + throw new RuntimeException("未找到耳号为[" + rawSpermRecord.getManageTags() + "]的羊只信息"); + } + + Integer sheepId = convertToInteger(sheepInfo.get("id")); + Integer gender = convertToInteger(sheepInfo.get("gender")); + + // 验证性别 + if (gender == null || gender != 2) { + throw new RuntimeException("采精记录只能针对公羊,耳号[" + rawSpermRecord.getManageTags() + "]对应的羊只不是公羊"); + } + rawSpermRecord.setSheepId(sheepId); } + rawSpermRecord.setUpdateTime(DateUtils.getNowDate()); return rawSpermRecordMapper.updateRawSpermRecord(rawSpermRecord); } @@ -115,6 +156,68 @@ public class RawSpermRecordServiceImpl implements IRawSpermRecordService @Override public Long getSheepIdByManageTags(String manageTags) { - return rawSpermRecordMapper.selectSheepIdByManageTags(manageTags); + Integer sheepId = rawSpermRecordMapper.selectSheepIdByManageTags(manageTags); + return sheepId != null ? sheepId.longValue() : null; + } + + /** + * 根据耳号查询羊只信息 + * + * @param manageTags 耳号 + * @return 羊只信息 Map包含id、gender、monthAge、electronicTags等字段 + */ + @Override + public Map getSheepInfoByManageTags(String manageTags) + { + return rawSpermRecordMapper.selectSheepInfoByManageTags(manageTags); + } + + /** + * 验证羊只是否为公羊 + * + * @param manageTags 耳号 + * @return true-是公羊,false-不是公羊 + */ + @Override + public boolean validateRamGender(String manageTags) + { + Map sheepInfo = getSheepInfoByManageTags(manageTags); + if (sheepInfo != null) { + Integer gender = convertToInteger(sheepInfo.get("gender")); + return gender != null && gender == 2; // 公羊gender=2 + } + return false; + } + + /** + * 安全的类型转换:将Object转换为Integer + * + * @param obj 要转换的对象 + * @return Integer值,如果转换失败返回null + */ + private Integer convertToInteger(Object obj) { + if (obj == null) { + return null; + } + + if (obj instanceof Integer) { + return (Integer) obj; + } else if (obj instanceof Long) { + Long longValue = (Long) obj; + // 检查Long值是否在Integer范围内 + if (longValue >= Integer.MIN_VALUE && longValue <= Integer.MAX_VALUE) { + return longValue.intValue(); + } else { + throw new RuntimeException("数值超出Integer范围:" + longValue); + } + } else if (obj instanceof String) { + try { + return Integer.parseInt((String) obj); + } catch (NumberFormatException e) { + throw new RuntimeException("无法将字符串转换为Integer:" + obj); + } + } else { + throw new RuntimeException("无法将 " + obj.getClass().getSimpleName() + " 类型转换为Integer"); + } } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScDryMilkServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScDryMilkServiceImpl.java index dd87f80..3ba8322 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScDryMilkServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScDryMilkServiceImpl.java @@ -1,12 +1,14 @@ package com.zhyc.module.produce.breed.service.impl; import java.util.List; +import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zhyc.module.produce.breed.mapper.ScDryMilkMapper; import com.zhyc.module.produce.breed.domain.ScDryMilk; import com.zhyc.module.produce.breed.service.IScDryMilkService; import com.zhyc.common.utils.StringUtils; +import com.zhyc.common.utils.DateUtils; import com.zhyc.common.exception.ServiceException; /** @@ -76,6 +78,12 @@ public class ScDryMilkServiceImpl implements IScDryMilkService } scDryMilk.setSheepId(String.valueOf(sheepId)); } + + // 自动设置创建时间(精确到分钟) + scDryMilk.setCreateTime(DateUtils.getNowDate()); + // 如果有获取当前用户的方法,可以设置创建人 + // scDryMilk.setCreateBy(SecurityUtils.getUsername()); + return scDryMilkMapper.insertScDryMilk(scDryMilk); } @@ -98,6 +106,12 @@ public class ScDryMilkServiceImpl implements IScDryMilkService } scDryMilk.setSheepId(String.valueOf(sheepId)); } + + // 设置更新时间 + scDryMilk.setUpdateTime(DateUtils.getNowDate()); + // 如果有获取当前用户的方法,可以设置更新人 + // scDryMilk.setUpdateBy(SecurityUtils.getUsername()); + return scDryMilkMapper.updateScDryMilk(scDryMilk); } 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 2360839..659cd78 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 @@ -179,13 +179,22 @@ public class ScLambingRecordServiceImpl implements IScLambingRecordService { } /** - * 查询产羔记录 + * 查询产羔记录基础信息 */ @Override public ScLambingRecord selectScLambingRecordById(Long id) { return scLambingRecordMapper.selectScLambingRecordById(id); } + /** + * 查询产羔记录详细信息(包含关联信息)- 新增方法 + * 用于修改时获取完整的产羔记录信息,包括母羊耳号、公羊耳号、配种日期等关联字段 + */ + @Override + public ScLambingRecord selectScLambingRecordDetailById(Long id) { + return scLambingRecordMapper.selectScLambingRecordDetailById(id); + } + /** * 查询羔羊详情 */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScMiscarriageRecordServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScMiscarriageRecordServiceImpl.java index 04e4733..f789984 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScMiscarriageRecordServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScMiscarriageRecordServiceImpl.java @@ -3,6 +3,7 @@ package com.zhyc.module.produce.breed.service.impl; import java.util.List; import java.util.Map; import com.zhyc.common.utils.DateUtils; +import com.zhyc.common.exception.ServiceException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zhyc.module.produce.breed.mapper.ScMiscarriageRecordMapper; @@ -47,6 +48,7 @@ public class ScMiscarriageRecordServiceImpl implements IScMiscarriageRecordServi /** * 新增流产记录 + * 增加性别验证:只允许母羊录入流产记录 * * @param scMiscarriageRecord 流产记录 * @return 结果 @@ -54,12 +56,16 @@ public class ScMiscarriageRecordServiceImpl implements IScMiscarriageRecordServi @Override public int insertScMiscarriageRecord(ScMiscarriageRecord scMiscarriageRecord) { + // 验证羊只是否存在及性别 + validateSheepGender(scMiscarriageRecord.getSheepId()); + scMiscarriageRecord.setCreateTime(DateUtils.getNowDate()); return scMiscarriageRecordMapper.insertScMiscarriageRecord(scMiscarriageRecord); } /** * 修改流产记录 + * 增加性别验证:只允许母羊录入流产记录 * * @param scMiscarriageRecord 流产记录 * @return 结果 @@ -67,6 +73,9 @@ public class ScMiscarriageRecordServiceImpl implements IScMiscarriageRecordServi @Override public int updateScMiscarriageRecord(ScMiscarriageRecord scMiscarriageRecord) { + // 修改时也需要验证性别(防止前端绕过验证) + validateSheepGender(scMiscarriageRecord.getSheepId()); + return scMiscarriageRecordMapper.updateScMiscarriageRecord(scMiscarriageRecord); } @@ -105,4 +114,57 @@ public class ScMiscarriageRecordServiceImpl implements IScMiscarriageRecordServi { return scMiscarriageRecordMapper.selectSheepByManageTags(manageTags); } + + /** + * 验证羊只性别 - 私有方法 + * 只允许母羊录入流产记录 + * gender字段:1=母羊,2=公羊 + * + * @param manageTags 管理耳号 + * @throws ServiceException 如果不是母羊或羊只不存在 + */ + private void validateSheepGender(String manageTags) { + if (manageTags == null || manageTags.trim().isEmpty()) { + throw new ServiceException("羊只耳号不能为空"); + } + + // 查询羊只信息 + Map sheepInfo = scMiscarriageRecordMapper.selectSheepByManageTags(manageTags); + + if (sheepInfo == null || sheepInfo.isEmpty()) { + throw new ServiceException("未找到耳号为【" + manageTags + "】的羊只信息,请检查耳号是否正确"); + } + + // 检查性别 - 注意:这里使用gender字段,不是sexType + Object genderObj = sheepInfo.get("gender"); + if (genderObj == null) { + throw new ServiceException("该羊只性别信息缺失,无法录入流产记录"); + } + + // 转换性别类型 + Integer gender = null; + try { + if (genderObj instanceof Integer) { + gender = (Integer) genderObj; + } else if (genderObj instanceof String) { + gender = Integer.valueOf((String) genderObj); + } else if (genderObj instanceof Long) { + gender = ((Long) genderObj).intValue(); + } + } catch (NumberFormatException e) { + throw new ServiceException("该羊只性别信息格式错误,无法录入流产记录"); + } + + // 验证是否为母羊 - 1=母羊,2=公羊 + if (gender == null) { + throw new ServiceException("该羊只性别信息为空,无法录入流产记录"); + } else if (gender == 2) { + String variety = sheepInfo.get("variety") != null ? sheepInfo.get("variety").toString() : "未知品种"; + throw new ServiceException("流产记录只能录入母羊,耳号【" + manageTags + "】对应的是公羊(" + variety + ")"); + } else if (gender != 1) { + throw new ServiceException("该羊只性别信息异常(值:" + gender + "),只允许母羊录入流产记录"); + } + + // 验证通过 + } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScSheepDeathServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScSheepDeathServiceImpl.java index 6db1659..72f8b2d 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScSheepDeathServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScSheepDeathServiceImpl.java @@ -114,7 +114,7 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService Long sheepId = sheepInfo.get("sheepId") != null ? Long.valueOf(sheepInfo.get("sheepId").toString()) : null; scSheepDeath.setSheepId(sheepId); - // 插入死淘记录后,同时更新羊只在群状态为"不在群"(字典值为2) + // 插入死淘记录后,同时更新羊只在群状态为"不在群"(状态ID为2) if (sheepId != null) { scSheepDeathMapper.updateSheepStatus(sheepId, "2"); } @@ -141,7 +141,7 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService Long sheepId = sheepInfo.get("sheepId") != null ? Long.valueOf(sheepInfo.get("sheepId").toString()) : null; scSheepDeath.setSheepId(sheepId); - // 修改死淘记录时,同时更新羊只在群状态为"不在群"(字典值为2) + // 修改死淘记录时,同时更新羊只在群状态为"不在群"(状态ID为2) if (sheepId != null) { scSheepDeathMapper.updateSheepStatus(sheepId, "2"); } @@ -161,11 +161,11 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService @Override public int deleteScSheepDeathByIds(Long[] ids) { - // 可选:删除死淘记录前,将对应羊只在群状态改回"在群" + // 删除死淘记录前,将对应羊只在群状态改回"在群" for (Long id : ids) { ScSheepDeath scSheepDeath = scSheepDeathMapper.selectScSheepDeathById(id); if (scSheepDeath != null && scSheepDeath.getSheepId() != null) { - // 恢复羊只在群状态为"在群"(字典值为1) + // 恢复羊只在群状态为"在群"(状态ID为1) scSheepDeathMapper.updateSheepStatus(scSheepDeath.getSheepId(), "1"); } } @@ -182,10 +182,10 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService @Override public int deleteScSheepDeathById(Long id) { - // 可选:删除死淘记录前,将对应羊只在群状态改回"在群" + // 删除死淘记录前,将对应羊只在群状态改回"在群" ScSheepDeath scSheepDeath = scSheepDeathMapper.selectScSheepDeathById(id); if (scSheepDeath != null && scSheepDeath.getSheepId() != null) { - // 恢复羊只在群状态为"在群"(字典值为1) + // 恢复羊只在群状态为"在群"(状态ID为1) scSheepDeathMapper.updateSheepStatus(scSheepDeath.getSheepId(), "1"); } diff --git a/zhyc-module/src/main/resources/mapper/miscarriage/ScMiscarriageRecordMapper.xml b/zhyc-module/src/main/resources/mapper/miscarriage/ScMiscarriageRecordMapper.xml index 810f299..dfde94e 100644 --- a/zhyc-module/src/main/resources/mapper/miscarriage/ScMiscarriageRecordMapper.xml +++ b/zhyc-module/src/main/resources/mapper/miscarriage/ScMiscarriageRecordMapper.xml @@ -54,7 +54,7 @@ END as mating_type_name, sf.mating_date, sf.parity, - sf.variety as ram_variety, -- 这里需要根据实际配种公羊信息调整 + sf.variety as ram_variety, sf.month_age, CASE WHEN sf.mating_date IS NOT NULL AND smr.datetime IS NOT NULL @@ -145,9 +145,15 @@ - diff --git a/zhyc-module/src/main/resources/mapper/produce/breed/RawSpermRecordMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/RawSpermRecordMapper.xml index 727f32c..1531dcc 100644 --- a/zhyc-module/src/main/resources/mapper/produce/breed/RawSpermRecordMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/RawSpermRecordMapper.xml @@ -4,10 +4,10 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - + @@ -19,95 +19,95 @@ + + - select - rsr.id, - rsr.sheep_id, - sf.bs_manage_tags, - sf.electronic_tags, - sf.month_age, - rsr.pick_date, - rsr.amount, - rsr.density, - rsr.vitallity, - rsr.controlled, - rsr.sexual_status, - rsr.info, - rsr.technician, - rsr.comment, - rsr.create_by, - rsr.create_time - from raw_sperm_record rsr - left join sheep_file sf on rsr.sheep_id = sf.id + select id, sheep_id, manage_tags, electronic_tags, month_age, pick_date, amount, + density, vitallity, controlled, sexual_status, info, technician, comment, + scrotum_circumference, semen_quality, create_by, create_time + from raw_sperm_record - - and sf.bs_manage_tags like concat('%', #{manageTags}, '%') - and rsr.pick_date = #{pickDate} - and rsr.amount = #{amount} - and rsr.density = #{density} - and rsr.vitallity = #{vitallity} - and rsr.controlled = #{controlled} - and rsr.sexual_status = #{sexualStatus} - and rsr.info = #{info} - and rsr.technician = #{technician} - and rsr.comment = #{comment} + and sheep_id = #{sheepId} + and manage_tags like concat('%', #{manageTags}, '%') + and electronic_tags like concat('%', #{electronicTags}, '%') + and month_age = #{monthAge} + and DATE(pick_date) = DATE(#{pickDate}) + and amount = #{amount} + and density like concat('%', #{density}, '%') + and vitallity like concat('%', #{vitallity}, '%') + and controlled = #{controlled} + and sexual_status like concat('%', #{sexualStatus}, '%') + and info like concat('%', #{info}, '%') + and technician like concat('%', #{technician}, '%') + and comment like concat('%', #{comment}, '%') + and scrotum_circumference = #{scrotumCircumference} + and semen_quality = #{semenQuality} - order by rsr.pick_date desc + order by pick_date desc, id desc - - - - + insert into raw_sperm_record sheep_id, + manage_tags, + electronic_tags, + month_age, pick_date, amount, - density, - vitallity, + density, + vitallity, controlled, - sexual_status, - info, - technician, - comment, - create_by, + sexual_status, + info, + technician, + comment, + scrotum_circumference, + semen_quality, + create_by, create_time, #{sheepId}, + #{manageTags}, + #{electronicTags}, + #{monthAge}, #{pickDate}, #{amount}, - #{density}, - #{vitallity}, + #{density}, + #{vitallity}, #{controlled}, - #{sexualStatus}, - #{info}, - #{technician}, - #{comment}, - #{createBy}, + #{sexualStatus}, + #{info}, + #{technician}, + #{comment}, + #{scrotumCircumference}, + #{semenQuality}, + #{createBy}, #{createTime}, - + update raw_sperm_record sheep_id = #{sheepId}, + manage_tags = #{manageTags}, + electronic_tags = #{electronicTags}, + month_age = #{monthAge}, pick_date = #{pickDate}, amount = #{amount}, density = #{density}, @@ -117,8 +117,8 @@ info = #{info}, technician = #{technician}, comment = #{comment}, - create_by = #{createBy}, - create_time = #{createTime}, + scrotum_circumference = #{scrotumCircumference}, + semen_quality = #{semenQuality}, where id = #{id} @@ -133,4 +133,19 @@ #{id} + + + + + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/produce/breed/ScPregnancyRecordMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/ScPregnancyRecordMapper.xml index c6a34a3..567457f 100644 --- a/zhyc-module/src/main/resources/mapper/produce/breed/ScPregnancyRecordMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScPregnancyRecordMapper.xml @@ -67,7 +67,7 @@ ELSE NULL END as days_after_mating from sc_pregnancy_record pr - left join sheep_file sf on pr.sheep_id = sf.id + INNER JOIN sheep_file sf on pr.sheep_id = sf.id -- 关联配种记录表,获取最新的配种记录 left join ( select br1.* @@ -85,27 +85,39 @@ and mating_type.dict_type = 'breed_type' and mating_type.status = '0' + diff --git a/zhyc-module/src/main/resources/mapper/produce/breed/ScSheepDeathMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/ScSheepDeathMapper.xml index 1444e04..8585ad1 100644 --- a/zhyc-module/src/main/resources/mapper/produce/breed/ScSheepDeathMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScSheepDeathMapper.xml @@ -145,19 +145,19 @@ - + - UPDATE sheep_file - SET breed = #{status}, + UPDATE bas_sheep + SET breed_status_id = #{status}, update_time = NOW() WHERE id = #{sheepId} AND is_delete = 0 - + - UPDATE sheep_file - SET status = #{status}, + UPDATE bas_sheep + SET status_id = #{status}, update_time = NOW() WHERE id = #{sheepId} AND is_delete = 0