From 7b3f879198b19ef9c8f7f70e1b1ac77f9d5afb0c Mon Sep 17 00:00:00 2001 From: zyk Date: Mon, 2 Feb 2026 16:51:15 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E9=85=8D=E7=A7=8D=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=92=8C=E5=86=B2=E8=83=9A=E8=AE=B0=E5=BD=95=E6=89=80=E6=9C=89?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ScBreedRecordController.java | 4 +- .../produce/breed/domain/ScBreedRecord.java | 5 +- .../impl/ScBreedRecordServiceImpl.java | 44 +-- .../impl/ScEmbryoFlushServiceImpl.java | 43 +-- .../produce/breed/ScBreedRecordMapper.xml | 355 +++++++++--------- .../produce/breed/ScEmbryoFlushMapper.xml | 10 +- 6 files changed, 219 insertions(+), 242 deletions(-) diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedRecordController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedRecordController.java index b32aa76..ee0243b 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedRecordController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedRecordController.java @@ -143,8 +143,8 @@ public class ScBreedRecordController extends BaseController if (scBreedRecord.getBreedType() == null) { return error("配种方式不能为空"); } - if (scBreedRecord.getBreedType() < 1 || scBreedRecord.getBreedType() > 4) { - return error("配种方式只能是:1-同期发情、2-本交、3-冲胚、4-自然发情人工授精"); + if (scBreedRecord.getBreedType() < 1 || scBreedRecord.getBreedType() > 5) { + return error("配种方式只能是:1-供体母羊配种、2-同期发情人工授精、3-本交、4-自然发情人工授精、5-胚胎移植"); } // 验证技术员 diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedRecord.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedRecord.java index 0636f59..ad8b0c9 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedRecord.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedRecord.java @@ -1,5 +1,6 @@ package com.zhyc.module.produce.breed.domain; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -37,6 +38,8 @@ public class ScBreedRecord extends BaseEntity @Excel(name = "事件类型") private String eventType = "配种"; + // 核心注解:指定JSON解析/序列化的日期格式,时区指定为东八区(Asia/Shanghai) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai") @Excel(name = "配种日期", dateFormat = "yyyy-MM-dd") private Date createTime; @@ -62,7 +65,7 @@ public class ScBreedRecord extends BaseEntity private Integer embryoCount; /** 1-同期发情, 2-本交, 3-自然发情, 4-胚胎移植 */ - @Excel(name = "配种方式", readConverterExp = "1=同期发情,2=本交,3=自然发情,4=胚胎移植") + @Excel(name = "配种方式", readConverterExp = "1=供体母羊配种,2=同期发情人工授精,3=本交,4=胚胎移植,5=自然发情人工授精") private Integer breedType; @Excel(name = "配种子类型") diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedRecordServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedRecordServiceImpl.java index 3f53c1d..24af17c 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedRecordServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedRecordServiceImpl.java @@ -217,58 +217,28 @@ public class ScBreedRecordServiceImpl implements IScBreedRecordService // } // } /** - * 根据母羊耳号获取最新的配种计划信息 - * 修改逻辑:优先查配种计划 -> 其次查冲胚记录(作为受体) + * 简化后的获取配种计划方法:移除冲胚记录自动关联 */ @Override - public Map getLatestBreedPlanByEweTags(String manageTags) - { + public Map getLatestBreedPlanByEweTags(String manageTags) { try { - // 1. 优先从配种计划生成表获取最新计划 (同期发情/本交等) + // 1. 仅从配种计划生成表获取(本交、人工授精等普通计划) Map latestPlan = scBreedRecordMapper.getLatestBreedPlanByEweTags(manageTags); if (latestPlan != null && !latestPlan.isEmpty()) { - log.info("从配种计划生成表获取到配种计划: {}", latestPlan); return latestPlan; } - // 2. 如果生成表中没有,从普通配种计划表获取 + // 2. 从普通配种计划表获取 Map normalPlan = scBreedRecordMapper.getBreedPlanByEweTags(manageTags); if (normalPlan != null && !normalPlan.isEmpty()) { - log.info("从配种计划表获取到配种计划: {}", normalPlan); return normalPlan; } - // 3. 【新增逻辑】如果都没有,尝试从冲胚记录中查找(该羊是否作为受体) - // 这里的业务逻辑是:如果这只羊在冲胚记录的"受体列表"中,且是最近的操作,则认为它是去做胚胎移植 - Map flushRecord = scBreedRecordMapper.getFlushRecordByEweNo(manageTags); - if (flushRecord != null && !flushRecord.isEmpty()) { - log.info("从冲胚记录获取到移植信息: {}", flushRecord); - - // 构造一个符合前端预期的Map结构 - Map etPlan = new HashMap<>(); - etPlan.put("breed_type", 5); // 设定 5 为胚胎移植 - etPlan.put("breedType", 5); // 驼峰兼容 - etPlan.put("breed_type_name", "胚胎移植"); - - // 填充冲胚记录带来的数据 - etPlan.put("donorEweNo", flushRecord.get("donor_female_no")); // 供体母羊 - etPlan.put("donorRamNo", flushRecord.get("donor_male_no")); // 供体公羊 - etPlan.put("embryoCount", flushRecord.get("transferred")); // 移胚数 - - // 拼接配种子类型 (例如: 体内供体 鲜胚) - String subType = ""; - if (flushRecord.get("embryo_type") != null) subType += flushRecord.get("embryo_type"); - if (flushRecord.get("storage_method") != null) subType += " " + flushRecord.get("storage_method"); - etPlan.put("embryoSubType", subType.trim()); - - return etPlan; - } - - log.warn("未找到母羊耳号 {} 的配种或移植计划信息", manageTags); + // 胚胎移植逻辑已移至前端手动输入,此处不再查询 sc_embryo_flush + log.info("未找到母羊 {} 的普通配种计划", manageTags); return null; - } catch (Exception e) { - log.error("获取配种/移植计划信息时发生异常,母羊耳号: {}", manageTags, e); + log.error("获取配种计划异常", e); return null; } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScEmbryoFlushServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScEmbryoFlushServiceImpl.java index 3af35d8..03afbcc 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScEmbryoFlushServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScEmbryoFlushServiceImpl.java @@ -45,10 +45,10 @@ public class ScEmbryoFlushServiceImpl implements IScEmbryoFlushService VARIETY_NAME_MAP.put(4, "级杂一代"); VARIETY_NAME_MAP.put(5, "级杂二代"); VARIETY_NAME_MAP.put(6, "级杂三代"); - VARIETY_NAME_MAP.put(7, "1世代"); - VARIETY_NAME_MAP.put(8, "2世代"); - VARIETY_NAME_MAP.put(9, "3世代"); - VARIETY_NAME_MAP.put(10, "4世代"); + VARIETY_NAME_MAP.put(7, "一世代"); + VARIETY_NAME_MAP.put(8, "二世代"); + VARIETY_NAME_MAP.put(9, "三世代"); + VARIETY_NAME_MAP.put(10, "四世代"); } @Override @@ -142,23 +142,24 @@ public class ScEmbryoFlushServiceImpl implements IScEmbryoFlushService // 2. 查询配种记录获取公羊信息 Map breedRecord = scEmbryoFlushMapper.selectBreedRecordByEwe(donorFemaleNo); if (breedRecord != null && !breedRecord.isEmpty()) { - String ramId = (String) breedRecord.get("ramId"); - result.put("donorMaleNo", ramId); + String maleNo = (String) breedRecord.get("donorMaleNo"); // 这里的 Key 必须对应 SQL 里的别名 + result.put("donorMaleNo", maleNo); result.put("matingDate", breedRecord.get("matingDate")); // 3. 查询公羊品种 - if (ramId != null && !ramId.trim().isEmpty()) { - Map maleInfo = scEmbryoFlushMapper.selectSheepInfoByManageTag(ramId); + if (maleNo != null && !maleNo.trim().isEmpty()) { + Map maleInfo = scEmbryoFlushMapper.selectSheepInfoByManageTag(maleNo); if (maleInfo != null && !maleInfo.isEmpty()) { String maleVariety = (String) maleInfo.get("variety"); - Integer maleVarietyId = getIntValue(maleInfo.get("varietyId")); - result.put("donorMaleVariety", maleVariety); - result.put("donorMaleVarietyId", maleVarietyId); - // 4. 根据品种ID计算胚胎品种 - if (maleVarietyId != null && femaleVarietyId != null) { - String embryoVariety = calculateEmbryoVarietyById(maleVarietyId, femaleVarietyId); + // 4. 【关键修复】使用品种名称计算胚胎品种 + // 这样可以确保无论数据库ID是多少,只要名字是对的就能算出结果 + Integer mId = getVarietyIdByName(maleVariety); + Integer fId = getVarietyIdByName(femaleVariety); + + if (mId != null && fId != null) { + String embryoVariety = calculateEmbryoVarietyById(mId, fId); result.put("embryoVariety", embryoVariety); } } @@ -168,6 +169,7 @@ public class ScEmbryoFlushServiceImpl implements IScEmbryoFlushService return result; } + /** * 安全获取Integer值 */ @@ -292,23 +294,22 @@ public class ScEmbryoFlushServiceImpl implements IScEmbryoFlushService // 级杂二代(BM)或n世代(SM) × 级杂一代/级杂二代/级杂三代/回交(公) → 世代 // 判断公羊是否为可产生世代的品种(级杂一代/二代/三代/回交) - boolean isMaleForShidai = (male == VARIETY_JIZA_1 || male == VARIETY_JIZA_2 || - male == VARIETY_JIZA_3 || male == VARIETY_HUIJIAO); + boolean isMaleCapableOfGeneration = (male >= 3 && male <= 10); - if (isMaleForShidai) { - // 级杂二代(母) × 以上公羊 → 1世代 + if (isMaleCapableOfGeneration) { + // 级杂二代(母) x 任意合格公羊 -> 一世代 if (female == VARIETY_JIZA_2) { return VARIETY_NAME_MAP.get(VARIETY_SHIDAI_1); } - // 1世代(母) × 以上公羊 → 2世代 + // 一世代(母) x 任意合格公羊 -> 二世代 if (female == VARIETY_SHIDAI_1) { return VARIETY_NAME_MAP.get(VARIETY_SHIDAI_2); } - // 2世代(母) × 以上公羊 → 3世代 + // 二世代(母) x 任意合格公羊 -> 三世代 if (female == VARIETY_SHIDAI_2) { return VARIETY_NAME_MAP.get(VARIETY_SHIDAI_3); } - // 3世代(母) × 以上公羊 → 4世代 + // 三世代(母) x 任意合格公羊 -> 四世代 if (female == VARIETY_SHIDAI_3) { return VARIETY_NAME_MAP.get(VARIETY_SHIDAI_4); } diff --git a/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedRecordMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedRecordMapper.xml index 1971e02..fad17c6 100644 --- a/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedRecordMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedRecordMapper.xml @@ -4,43 +4,43 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -49,11 +49,12 @@ - + + @@ -86,75 +87,75 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select DISTINCT br.id, @@ -165,6 +166,7 @@ br.breed_drugs, br.breed_type, br.frozen_sperm_no, -- 冻精号 + br.embryoSubType, br.comment, br.create_by, br.create_time, @@ -192,7 +194,8 @@ -- 公羊信息 ram_view.bs_manage_tags as ram_manage_tags, ram_view.variety as ram_variety, - + (SELECT variety FROM sheep_file WHERE bs_manage_tags = br.donor_ewe LIMIT 1) as donorEweVariety, + (SELECT variety FROM sheep_file WHERE bs_manage_tags = br.donor_ram LIMIT 1) as donorRamVariety, -- 发情后配种时间(小时数) TIMESTAMPDIFF(HOUR, br.create_time, NOW()) as time_since_planning, @@ -265,32 +268,32 @@ limit 1 ) - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + insert into sc_breed_record @@ -477,13 +482,14 @@ technician, breed_drugs, breed_type, - frozen_semen_no, + frozen_sperm_no, create_by, create_time, comment, embryo_count, donor_ewe, donor_ram, + embryoSubType, #{sheepId}, @@ -503,20 +509,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + update sc_breed_record @@ -526,13 +532,14 @@ technician = #{technician}, breed_drugs = #{breedDrugs}, breed_type = #{breedType}, - frozen_semen_no = #{frozenSemenNo}, + frozen_sperm_no = #{frozenSemenNo}, create_by = #{createBy}, create_time = #{createTime}, comment = #{comment}, embryo_count = #{embryoCount}, donor_ewe = #{donorEweNo}, donor_ram = #{donorRamNo}, + embryoSubType = #{embryoSubType}, where id = #{id} @@ -548,8 +555,8 @@ -- Assuming linking via recipient tags is complicated, -- usually this is done by matching a recent flush record -- For now, this mimics the logic in your ServiceImpl - SELECT id FROM sc_embryo_flush WHERE recipient_list LIKE concat('%', #{manageTags}, '%') - ORDER BY created_at DESC LIMIT 1 + SELECT id FROM sc_embryo_flush WHERE donor_female_no LIKE concat('%', #{manageTags}, '%') + ORDER BY flush_time DESC LIMIT 1 ) -- Note: If your sc_embryo_flush structure is different (one row per recipient), adjust accordingly. -- Based on provided file, it has `recipient_cnt`. diff --git a/zhyc-module/src/main/resources/mapper/produce/breed/ScEmbryoFlushMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/ScEmbryoFlushMapper.xml index fbad983..8382209 100644 --- a/zhyc-module/src/main/resources/mapper/produce/breed/ScEmbryoFlushMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScEmbryoFlushMapper.xml @@ -203,13 +203,9 @@ From 2f6a1a9600f4f54b16115daabfde1401931d925a Mon Sep 17 00:00:00 2001 From: zyh <2066096076@qq.com> Date: Tue, 3 Feb 2026 14:41:28 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=BD=AC=E5=9C=BA=EF=BC=8C=E8=BD=AC?= =?UTF-8?q?=E7=BE=A4=EF=BC=8C=E6=94=B9=E8=80=B3=E5=8F=B7=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E5=A4=87=E6=B3=A8=EF=BC=8C=E6=94=B9=E5=93=81=E7=A7=8D=E9=83=A8?= =?UTF-8?q?=E5=88=86bug=E4=BF=AE=E5=A4=8D=EF=BC=8C=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/controller/BasSheepController.java | 3 - .../base/controller/DaRanchController.java | 2 +- .../controller/ScBodyMeasureController.java | 105 +++++++++++++++--- .../bodyManage/domain/ScBodyMeasure.java | 40 +++++-- .../bodyManage/domain/ScBodyScore.java | 9 +- .../bodyManage/domain/ScBreastRating.java | 10 +- .../mapper/ScBodyMeasureMapper.java | 7 ++ .../service/IScBodyMeasureService.java | 7 ++ .../impl/ScBodyMeasureServiceImpl.java | 7 ++ .../ScTransitionInfoController.java | 5 +- .../manage_sheep/domain/ScChangeComment.java | 31 ++++-- .../manage_sheep/domain/ScChangeEar.java | 43 ++++--- .../manage_sheep/domain/ScChangeVariety.java | 58 +++++----- .../manage_sheep/domain/ScTransGroup.java | 100 ++++++++--------- .../manage_sheep/domain/ScTransitionInfo.java | 73 +++++++----- .../service/IScTransGroupService.java | 6 - .../service/impl/ScTransGroupServiceImpl.java | 57 +++------- .../impl/ScTransitionInfoServiceImpl.java | 32 +++--- .../produce/other/domain/ScCastrate.java | 17 ++- .../produce/other/domain/ScFixHoof.java | 44 ++++++-- .../bodyManage/ScBodyMeasureMapper.xml | 25 ++++- .../produce/bodyManage/ScBodyScoreMapper.xml | 3 + .../bodyManage/ScBreastRatingMapper.xml | 6 +- .../manage_sheep/ScChangeCommentMapper.xml | 10 +- .../manage_sheep/ScChangeEarMapper.xml | 10 +- .../manage_sheep/ScChangeVarietyMapper.xml | 19 +++- .../manage_sheep/ScTransGroupMapper.xml | 26 +++-- .../manage_sheep/ScTransitionInfoMapper.xml | 19 +++- .../mapper/produce/other/ScCastrateMapper.xml | 3 + .../mapper/produce/other/ScFixHoofMapper.xml | 10 +- 30 files changed, 516 insertions(+), 271 deletions(-) diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepController.java index a6e0252..3466b17 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepController.java @@ -137,7 +137,6 @@ public class BasSheepController extends BaseController { } BasSheep query = new BasSheep(); query.setTypeId(typeId.longValue()); - startPage(); List list = basSheepService.selectBasSheepList(query); return getDataTable(list); } @@ -154,7 +153,6 @@ public class BasSheepController extends BaseController { BasSheep query = new BasSheep(); query.setSheepfoldId(sheepfoldId.longValue()); query.setTypeId(typeId.longValue()); - startPage(); List list = basSheepService.selectBasSheepList(query); return getDataTable(list); } @@ -191,7 +189,6 @@ public class BasSheepController extends BaseController { return success(result); } - /** * 判断耳号是否存在(用于新增羊只时校验) */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaRanchController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaRanchController.java index 14a3ac5..203737a 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaRanchController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaRanchController.java @@ -77,7 +77,7 @@ public class DaRanchController extends BaseController /** * 获取指定牧场下的所有羊只耳号 */ -// @GetMapping("/getSheepByRanchId/{ranchId}") + @GetMapping("/getSheepByRanchId/{ranchId}") public AjaxResult getSheepByRanchId(@PathVariable Long ranchId) { List sheepList = basSheepService.getSheepByRanchId(ranchId); return AjaxResult.success(sheepList); diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/controller/ScBodyMeasureController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/controller/ScBodyMeasureController.java index 80a3e6a..f1bbb81 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/controller/ScBodyMeasureController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/controller/ScBodyMeasureController.java @@ -3,6 +3,11 @@ package com.zhyc.module.produce.bodyManage.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.zhyc.common.utils.DateUtils; +import com.zhyc.common.utils.SecurityUtils; +import com.zhyc.common.utils.StringUtils; +import com.zhyc.module.base.domain.BasSheep; +import com.zhyc.module.base.service.IBasSheepService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -14,28 +19,28 @@ import com.zhyc.module.produce.bodyManage.domain.ScBodyMeasure; import com.zhyc.module.produce.bodyManage.service.IScBodyMeasureService; import com.zhyc.common.utils.poi.ExcelUtil; import com.zhyc.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 体尺测量Controller - * + * * @author ruoyi * @date 2025-07-27 */ @RestController @RequestMapping("/body_measure/body_measure") -public class ScBodyMeasureController extends BaseController -{ +public class ScBodyMeasureController extends BaseController { @Autowired private IScBodyMeasureService scBodyMeasureService; - + @Autowired + private IBasSheepService basSheepService; /** * 查询体尺测量列表 */ @PreAuthorize("@ss.hasPermi('body_measure:body_measure:list')") @GetMapping("/list") - public TableDataInfo list(ScBodyMeasure scBodyMeasure) - { + public TableDataInfo list(ScBodyMeasure scBodyMeasure) { startPage(); List list = scBodyMeasureService.selectScBodyMeasureList(scBodyMeasure); return getDataTable(list); @@ -47,8 +52,7 @@ public class ScBodyMeasureController extends BaseController @PreAuthorize("@ss.hasPermi('body_measure:body_measure:export')") @Log(title = "体尺测量", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, ScBodyMeasure scBodyMeasure) - { + public void export(HttpServletResponse response, ScBodyMeasure scBodyMeasure) { List list = scBodyMeasureService.selectScBodyMeasureList(scBodyMeasure); ExcelUtil util = new ExcelUtil(ScBodyMeasure.class); util.exportExcel(response, list, "体尺测量数据"); @@ -59,8 +63,7 @@ public class ScBodyMeasureController extends BaseController */ @PreAuthorize("@ss.hasPermi('body_measure:body_measure:query')") @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { + public AjaxResult getInfo(@PathVariable("id") Long id) { return success(scBodyMeasureService.selectScBodyMeasureById(id)); } @@ -70,8 +73,7 @@ public class ScBodyMeasureController extends BaseController @PreAuthorize("@ss.hasPermi('body_measure:body_measure:add')") @Log(title = "体尺测量", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody ScBodyMeasure scBodyMeasure) - { + public AjaxResult add(@RequestBody ScBodyMeasure scBodyMeasure) { return toAjax(scBodyMeasureService.insertScBodyMeasure(scBodyMeasure)); } @@ -81,8 +83,7 @@ public class ScBodyMeasureController extends BaseController @PreAuthorize("@ss.hasPermi('body_measure:body_measure:edit')") @Log(title = "体尺测量", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody ScBodyMeasure scBodyMeasure) - { + public AjaxResult edit(@RequestBody ScBodyMeasure scBodyMeasure) { return toAjax(scBodyMeasureService.updateScBodyMeasure(scBodyMeasure)); } @@ -91,14 +92,82 @@ public class ScBodyMeasureController extends BaseController */ @PreAuthorize("@ss.hasPermi('body_measure:body_measure:remove')") @Log(title = "体尺测量", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(scBodyMeasureService.deleteScBodyMeasureByIds(ids)); } @GetMapping("/search_ear_numbers") - public AjaxResult searchEarNumbers(@RequestParam("query") String query){ + public AjaxResult searchEarNumbers(@RequestParam("query") String query) { return success(scBodyMeasureService.searchEarNumbers(query.trim())); } + + /** + * 导入体尺测量数据 + */ + @PreAuthorize("@ss.hasPermi('body_measure:body_measure:import')") + @Log(title = "体尺测量", businessType = BusinessType.IMPORT) + @PostMapping("/import") + public AjaxResult importData(@RequestParam("file") MultipartFile file) throws Exception { + ExcelUtil util = new ExcelUtil<>(ScBodyMeasure.class); + List list = util.importExcel(file.getInputStream()); + + // 数据校验和处理 + StringBuilder errorMsg = new StringBuilder(); + int successCount = 0; + int failCount = 0; + + for (int i = 0; i < list.size(); i++) { + ScBodyMeasure measure = list.get(i); + try { + // 根据耳号查询羊只ID + if (StringUtils.isNotBlank(measure.getManageTags())) { + BasSheep sheep = basSheepService.selectBasSheepByManageTags(measure.getManageTags().trim()); + if (sheep == null) { + failCount++; + errorMsg.append("第").append(i + 2).append("行:耳号【") + .append(measure.getManageTags()).append("】不存在;"); + continue; + } + measure.setSheepId(sheep.getId()); + } else { + failCount++; + errorMsg.append("第").append(i + 2).append("行:耳号不能为空;"); + continue; + } + + // 设置默认值 + measure.setCreateTime(DateUtils.getNowDate()); + measure.setCreateBy(SecurityUtils.getUsername()); + + scBodyMeasureService.insertScBodyMeasure(measure); + successCount++; + + // 更新羊只当前体重 + if (measure.getCurrentWeight() != null) { + BasSheep updateSheep = new BasSheep(); + updateSheep.setId(measure.getSheepId()); + updateSheep.setCurrentWeight(measure.getCurrentWeight()); + basSheepService.updateBasSheep(updateSheep); + } + } catch (Exception e) { + failCount++; + errorMsg.append("第").append(i + 2).append("行:").append(e.getMessage()).append(";"); + } + } + + String msg = String.format("导入完成:成功%d条,失败%d条", successCount, failCount); + if (failCount > 0) { + msg += ";失败原因:" + errorMsg.toString(); + } + return success(msg); + } + + /** + * 获取繁殖状态列表(用于下拉选择) + */ + @GetMapping("/breedStatus") + public AjaxResult listBreedStatus() { + return success(scBodyMeasureService.selectBreedStatusList()); + } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBodyMeasure.java b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBodyMeasure.java index a569280..2b1bf5b 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBodyMeasure.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBodyMeasure.java @@ -1,13 +1,16 @@ package com.zhyc.module.produce.bodyManage.domain; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDate; +import java.util.Date; import java.util.List; /** @@ -62,8 +65,10 @@ public class ScBodyMeasure extends BaseEntity { /** * 测量日期 */ - @Excel(name = "测量日期") - private LocalDate measureDate; + @Excel(name = "测量日期", dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date measureDate; /** * 羊只类别 */ @@ -82,10 +87,12 @@ public class ScBodyMeasure extends BaseEntity { /** * 出生体重 */ + @Excel(name = "出生体重") private BigDecimal birthWeight; /** * 断奶体重 */ + @Excel(name = "断奶体重") private BigDecimal weaningWeight; /** * 当前体重 @@ -173,6 +180,13 @@ public class ScBodyMeasure extends BaseEntity { */ @Excel(name = "配后天数") private Integer postMatingDay; + + + /** + * 技术员 + */ + @Excel(name = "技术员") + private String technician; /** * 备注 */ @@ -180,12 +194,22 @@ public class ScBodyMeasure extends BaseEntity { private String comment; /** - * 技术员 + * 前端多耳号查询条件,非表字段 */ - @Excel(name = "技术员") - private String technician; - - - /** 前端多耳号查询条件,非表字段 */ private List manageTagsList; + + /** + * 是否在群查询条件(0-在群,1-离群),非数据库字段 + */ + private Integer isDelete; + + /** + * 月龄查询条件(开始),非数据库字段 + */ + private Integer monthAgeStart; + + /** + * 月龄查询条件(结束),非数据库字段 + */ + private Integer monthAgeEnd; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBodyScore.java b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBodyScore.java index 1c455cc..c37ee77 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBodyScore.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBodyScore.java @@ -78,6 +78,13 @@ public class ScBodyScore extends BaseEntity { @Excel(name = "技术员") private String technician; - /** 前端多耳号查询条件,非表字段 */ + /** + * 前端多耳号查询条件,非表字段 + */ private List manageTagsList; + + /** + * 是否在群查询条件(0-在群,1-离群),非数据库字段 + */ + private Integer isDelete; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBreastRating.java b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBreastRating.java index e7b0852..fc0859e 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBreastRating.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/domain/ScBreastRating.java @@ -111,7 +111,13 @@ public class ScBreastRating extends BaseEntity { @Excel(name = "技术员") private String technician; - - /** 前端多耳号查询条件,非表字段 */ + /** + * 前端多耳号查询条件,非表字段 + */ private List manageTagsList; + + /** + * 是否在群查询条件(0-在群,1-离群),非数据库字段 + */ + private Integer isDelete; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/mapper/ScBodyMeasureMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/mapper/ScBodyMeasureMapper.java index f0fd460..7859be9 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/mapper/ScBodyMeasureMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/mapper/ScBodyMeasureMapper.java @@ -1,6 +1,8 @@ package com.zhyc.module.produce.bodyManage.mapper; import java.util.List; +import java.util.Map; + import com.zhyc.module.produce.bodyManage.domain.ScBodyMeasure; import org.apache.ibatis.annotations.Param; @@ -69,4 +71,9 @@ public interface ScBodyMeasureMapper List selectScBodyMeasureList( @Param("sc") ScBodyMeasure sc, @Param("manageTagsList") List manageTagsList); + + /** + * 查询繁殖状态列表 + */ + List> selectBreedStatusList(); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/service/IScBodyMeasureService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/service/IScBodyMeasureService.java index 2ae7c75..8222746 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/service/IScBodyMeasureService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/service/IScBodyMeasureService.java @@ -1,6 +1,8 @@ package com.zhyc.module.produce.bodyManage.service; import java.util.List; +import java.util.Map; + import com.zhyc.module.produce.bodyManage.domain.ScBodyMeasure; /** @@ -60,4 +62,9 @@ public interface IScBodyMeasureService public int deleteScBodyMeasureById(Long id); List searchEarNumbers(String query); + + /** + * 查询繁殖状态列表 + */ + List> selectBreedStatusList(); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/service/impl/ScBodyMeasureServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/service/impl/ScBodyMeasureServiceImpl.java index e528b17..77a334b 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/service/impl/ScBodyMeasureServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/bodyManage/service/impl/ScBodyMeasureServiceImpl.java @@ -1,6 +1,8 @@ package com.zhyc.module.produce.bodyManage.service.impl; import java.util.List; +import java.util.Map; + import com.zhyc.common.utils.DateUtils; import com.zhyc.common.utils.SecurityUtils; import com.zhyc.common.utils.StringUtils; @@ -127,4 +129,9 @@ public class ScBodyMeasureServiceImpl implements IScBodyMeasureService { return scBodyMeasureMapper.deleteScBodyMeasureById(id); } + + @Override + public List> selectBreedStatusList() { + return scBodyMeasureMapper.selectBreedStatusList(); + } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScTransitionInfoController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScTransitionInfoController.java index 49e4578..5863be8 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScTransitionInfoController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScTransitionInfoController.java @@ -103,9 +103,6 @@ public class ScTransitionInfoController extends BaseController { @PutMapping("/approve") public AjaxResult approveScTransitionInfo(@RequestBody ScTransitionInfo scTransitionInfo) { - if ("转场转入".equals(scTransitionInfo.getEventType()) && scTransitionInfo.getSheepfoldId() == null) { - return AjaxResult.error("转场转入时,接收羊舍ID不能为空"); - } int rows = scTransitionInfoService.approveScTransitionInfo(scTransitionInfo); return toAjax(rows); } @@ -114,4 +111,6 @@ public class ScTransitionInfoController extends BaseController { public AjaxResult searchEarNumbers(@RequestParam("query") String query){ return success(scTransitionInfoService.searchEarNumbers(query.trim())); } + + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeComment.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeComment.java index 8979aef..3260a90 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeComment.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeComment.java @@ -31,20 +31,23 @@ public class ScChangeComment extends BaseEntity { * 羊只id */ private String sheepId; + @Excel(name = "管理耳号") private String manageTags; - /** 羊舍 */ - private Long sheepfoldId; - @Excel(name = "羊舍") - private String sheepfoldName; - /** * 事件类型 */ @Excel(name = "事件类型") private String eventType; + /** + * 事件日期 + */ + @Excel(name = "事件日期", width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date eventDate; + /** * 新备注 */ @@ -58,17 +61,25 @@ public class ScChangeComment extends BaseEntity { private String oldComment; /** - * 事件日期 + * 羊舍 */ - @Excel(name = "事件日期", width = 30, dateFormat = "yyyy-MM-dd") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date eventDate; + private Long sheepfoldId; + @Excel(name = "羊舍") + private String sheepfoldName; + /** * 技术员 */ @Excel(name = "技术员") private String technician; - /** 前端多耳号条件,非数据库字段 */ + /** + * 前端多耳号条件,非数据库字段 + */ private List manageTagsList; + + /** + * 是否在群查询条件(0-在群,1-离群),非数据库字段 + */ + private Integer isDelete; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeEar.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeEar.java index bd5b584..911a156 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeEar.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeEar.java @@ -36,11 +36,10 @@ public class ScChangeEar extends BaseEntity { private String manageTags; /** - * 羊舍 + * 品种 */ - private Long sheepfoldId; - @Excel(name = "羊舍") - private String sheepfoldName; + @Excel(name = "品种") + private String varietyName; /** * 事件类型(改管理耳号/改电子耳号) @@ -48,6 +47,13 @@ public class ScChangeEar extends BaseEntity { @Excel(name = "事件类型") private String eventType; + /** + * 事件日期 + */ + @Excel(name = "事件日期", width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date eventDate; + /** * 选择更改耳号类型(0电子耳号1管理耳号) */ @@ -67,17 +73,11 @@ public class ScChangeEar extends BaseEntity { private String oldTag; /** - * 备注 + * 羊舍 */ - @Excel(name = "备注") - private String comment; - - /** - * 事件日期 - */ - @Excel(name = "事件日期", width = 30, dateFormat = "yyyy-MM-dd") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date eventDate; + private Long sheepfoldId; + @Excel(name = "羊舍") + private String sheepfoldName; /** * 技术员 @@ -85,7 +85,20 @@ public class ScChangeEar extends BaseEntity { @Excel(name = "技术员") private String technician; + /** + * 备注 + */ + @Excel(name = "备注") + private String comment; - /** 前端多耳号查询条件,非表字段 */ + /** + * 前端多耳号查询条件,非表字段 + */ private List manageTagsList; + + + /** + * 在群状态 0-全部 1-在群 2-不在群(列表查询用) + */ + private Integer inGroup; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeVariety.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeVariety.java index 319de6f..d984268 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeVariety.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScChangeVariety.java @@ -31,9 +31,35 @@ public class ScChangeVariety extends BaseEntity { * 羊只id */ private Integer sheepId; + @Excel(name = "耳号") private String manageTags; + /** + * 事件类型 + */ + @Excel(name = "事件类型") + private String eventType; + + /** + * 事件日期 + */ + @Excel(name = "事件日期", width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date eventDate; + + /** + * 新品种 + */ + @Excel(name = "新品种") + private String varietyNew; + + /** + * 旧品种 + */ + @Excel(name = "旧品种") + private String varietyOld; + /** * 羊舍 */ @@ -42,22 +68,10 @@ public class ScChangeVariety extends BaseEntity { private String sheepfoldName; /** - * 事件类型 + * 技术员 */ - @Excel(name = "事件类型") - private String eventType; - - /** - * 原品种 - */ - @Excel(name = "原品种") - private String varietyOld; - - /** - * 新品种 - */ - @Excel(name = "新品种") - private String varietyNew; + @Excel(name = "技术员") + private String technician; /** * 备注 @@ -66,18 +80,12 @@ public class ScChangeVariety extends BaseEntity { private String comment; /** - * 技术员 + * 前端多耳号查询条件,非表字段 */ - @Excel(name = "技术员") - private String technician; + private List manageTagsList; /** - * 事件日期 + * 是否在群查询条件(0-在群,1-离群),非数据库字段 */ - @Excel(name = "事件日期",width = 30, dateFormat = "yyyy-MM-dd") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date eventDate; - - /** 前端多耳号查询条件,非表字段 */ - private List manageTagsList; + private Integer isDelete; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScTransGroup.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScTransGroup.java index 32edd57..40b7d0b 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScTransGroup.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScTransGroup.java @@ -33,42 +33,6 @@ public class ScTransGroup extends BaseEntity { @Excel(name = "耳号") private String manageTags; - /** - * 事件类型(1-围产转群,2-普通转群,3-育肥转群,4-预售转群) - */ - private Integer eventType; - @Excel(name = "事件类型") - private String eventTypeText; - - /** - * 转入羊舍 - */ - private String foldTo; - - /** - * 转出羊舍 - */ - private String foldFrom; - - /** - * 羊只类型 - */ - private Integer sheepTypeId; - @Excel(name = "羊只类型") - private String sheepTypeName; - - /** - * 转出羊舍名称 - */ - @Excel(name = "转出羊舍") - private String foldFromName; - - /** - * 转入羊舍名称 - */ - @Excel(name = "转入羊舍") - private String foldToName; - /** * 品种id */ @@ -80,40 +44,72 @@ public class ScTransGroup extends BaseEntity { @Excel(name = "品种") private String varietyName; + /** + * 事件类型(1-围产转群,2-普通转群,3-育肥转群,4-预售转群) + */ + private String eventType; + @Excel(name = "事件类型") + private String eventTypeText; - private Integer reason; + /** + * 转群日期 + */ + @Excel(name = "转群日期") + private String transDate; + + /** + * 转入羊舍 + */ + private String foldTo; + /** + * 转入羊舍名称 + */ + @Excel(name = "转入羊舍") + private String foldToName; + + /** + * 转出羊舍 + */ + private String foldFrom; + /** + * 转出羊舍名称 + */ + @Excel(name = "转出羊舍") + private String foldFromName; + + private String reason; /** * 转群原因描述 用于导出 */ @Excel(name = "转群原因") private String reasonText; - /** 转群日期 */ - @Excel(name = "转群日期") - private String transDate; /** * 技术员 */ @Excel(name = "技术员") private String technician; - /** - * 状态 - */ - - private Integer status; - /** - * 状态描述 用于导出 - */ - @Excel(name = "状态") - private String statusText; - /** * 备注 */ @Excel(name = "备注") private String comment; - /** 前端多耳号查询条件,非表字段 */ + /** + * 羊只类型 + */ + private Integer sheepTypeId; + + private String sheepTypeName; + + /** + * 前端多耳号查询条件,非表字段 + */ private List manageTagsList; + + /** + * 是否在群查询条件(0-在群,1-离群) + */ + private Integer isDelete; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScTransitionInfo.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScTransitionInfo.java index 7aceb3e..e47bf49 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScTransitionInfo.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScTransitionInfo.java @@ -33,24 +33,6 @@ public class ScTransitionInfo extends BaseEntity { @Excel(name = "耳号") private String manageTags; - /** - * 事件类型 - */ - @Excel(name = "事件类型") - private String eventType; - - - /** - * 转场类型 - */ - private Integer transType; - @Excel(name = "转场类型") - private String transTypeText; - - /** 转场日期 */ - @Excel(name = "转场日期") - private LocalDate transitionDate; - /** * 品种id */ @@ -62,6 +44,23 @@ public class ScTransitionInfo extends BaseEntity { @Excel(name = "品种") private String varietyName; + /** + * 事件类型 + */ + @Excel(name = "事件类型") + private String eventType; + + /** 转场日期 */ + @Excel(name = "转场日期") + private LocalDate transitionDate; + + /** + * 转场类型 + */ + private Integer transType; + @Excel(name = "转场类型") + private String transTypeText; + /** * 转入牧场 */ @@ -69,21 +68,34 @@ public class ScTransitionInfo extends BaseEntity { private String transTo; /** - * 当前牧场 + * 转出牧场 */ - @Excel(name = "当前牧场") + @Excel(name = "转出牧场") private String transFrom; + /** + * 羊舍 + */ + @Excel(name = "羊舍") + private String sheepfoldName; + /** * 接收羊舍 */ private Long sheepfoldId; + /** * 技术员 */ @Excel(name = "技术员") private String technician; + /** + * 备注 + */ + @Excel(name = "备注") + private String comment; + /** * 状态 */ @@ -91,12 +103,21 @@ public class ScTransitionInfo extends BaseEntity { @Excel(name = "状态") private String statusText; - /** - * 备注 - */ - @Excel(name = "备注") - private String comment; - /** 前端多耳号查询条件,非表字段 */ private List manageTagsList; + + private Integer isDelete; + + /** 羊只类型ID(查询条件,非数据库字段) */ + private Long sheepTypeId; + + /** + * 当前场区ID(查询条件,关联bas_sheep.ranch_id),非数据库字段 + */ + private Long currentRanchId; + + /** + * 当前场区名称(展示用),非数据库字段 + */ + private String currentRanchName; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/IScTransGroupService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/IScTransGroupService.java index 305438b..3ec3a74 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/IScTransGroupService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/IScTransGroupService.java @@ -59,11 +59,5 @@ public interface IScTransGroupService { */ public int deleteScTransGroupById(Integer id); - - /** - * 审批转群记录 - */ - int approveScTransGroup(ScTransGroup scTransGroup); - List searchEarNumbers(String query); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScTransGroupServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScTransGroupServiceImpl.java index 59f8d59..f78e247 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScTransGroupServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScTransGroupServiceImpl.java @@ -42,7 +42,6 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { public ScTransGroup selectScTransGroupById(Integer id) { ScTransGroup group = scTransGroupMapper.selectScTransGroupById(id); group.setReasonText(convertReason(group.getReason())); - group.setStatusText(convertStatus(group.getStatus())); group.setEventTypeText(convertEventType(group.getEventType())); return group; } @@ -60,7 +59,6 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { scTransGroup.getManageTagsList()); list.forEach(group -> { group.setReasonText(convertReason(group.getReason())); - group.setStatusText(convertStatus(group.getStatus())); group.setEventTypeText(convertEventType(group.getEventType())); }); return list; @@ -76,7 +74,6 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { @Override @Transactional(rollbackFor = Exception.class) public int insertScTransGroup(ScTransGroup scTransGroup) { - scTransGroup.setStatus(0); scTransGroup.setCreateTime(DateUtils.getNowDate()); scTransGroup.setCreateBy(SecurityUtils.getUsername()); int rows = scTransGroupMapper.insertScTransGroup(scTransGroup); @@ -123,22 +120,6 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { return scTransGroupMapper.deleteScTransGroupById(id); } - - /** - * 审批转群记录 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int approveScTransGroup(ScTransGroup scTransGroup) { - int rows = scTransGroupMapper.updateScTransGroup(scTransGroup); - - if (rows > 0 && scTransGroup.getStatus() == 1) { - updateSheepFold(scTransGroup); - } - - return rows; - } - /** * 更新羊只所在羊舍 */ @@ -177,38 +158,28 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { /** * 转换转群原因 */ - private String convertReason(Integer reasonCode) { - Map reasonMap = new HashMap<>(); - reasonMap.put(0, "新产羊过抗转群"); - reasonMap.put(1, "治愈转群"); - reasonMap.put(2, "病羊过抗转群"); - return reasonMap.getOrDefault(reasonCode, "未知原因"); - } - - /** - * 转换状态 - */ - private String convertStatus(Integer statusCode) { - Map statusMap = new HashMap<>(); - statusMap.put(0, "待批准"); - statusMap.put(1, "通过"); - statusMap.put(2, "驳回"); - return statusMap.getOrDefault(statusCode, "未知状态"); + private String convertReason(String reasonCode) { + if (reasonCode == null) return "未知原因"; + Map map = new HashMap<>(); + map.put("0","新产羊过抗转群"); + map.put("1","治愈转群"); + map.put("2","病羊过抗转群"); + return map.getOrDefault(reasonCode, reasonCode); } /** * 转换事件类型(1-围产转群,2-普通转群,3-育肥转群,4-预售转群) */ - private String convertEventType(Integer eventType) { + private String convertEventType(String eventType) { if (eventType == null) { return "未知"; } - Map eventTypeMap = new HashMap<>(); - eventTypeMap.put(1, "围产转群"); - eventTypeMap.put(2, "普通转群"); - eventTypeMap.put(3, "育肥转群"); - eventTypeMap.put(4, "预售转群"); - return eventTypeMap.getOrDefault(eventType, "未知"); + Map eventTypeMap = new HashMap<>(); + eventTypeMap.put("1", "围产转群"); + eventTypeMap.put("2", "普通转群"); + eventTypeMap.put("3", "育肥转群"); + eventTypeMap.put("4", "预售转群"); + return eventTypeMap.getOrDefault(eventType, eventType); } @Override diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScTransitionInfoServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScTransitionInfoServiceImpl.java index 1831c5d..ceafa11 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScTransitionInfoServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScTransitionInfoServiceImpl.java @@ -135,6 +135,11 @@ public class ScTransitionInfoServiceImpl implements IScTransitionInfoService if (existing.getStatus() != 0) { throw new RuntimeException("该记录已完成审批,无法重复操作"); } + if (scTransitionInfo.getStatus() == 1) { // 同意 + if ("转场转入".equals(scTransitionInfo.getEventType()) && scTransitionInfo.getSheepfoldId() == null) { + throw new RuntimeException("转场转入时,接收羊舍ID不能为空"); + } + } int rows = scTransitionInfoMapper.updateScTransitionInfo(scTransitionInfo); if (rows > 0 && scTransitionInfo.getStatus() == 1) { updateSheepRanch(scTransitionInfo); @@ -143,52 +148,47 @@ public class ScTransitionInfoServiceImpl implements IScTransitionInfoService } /** - * 更新羊只的所在牧场(基于现有牧场列表接口) + * 更新羊只的所在牧场及羊舍 */ private void updateSheepRanch(ScTransitionInfo transitionInfo) { + /* 1. 目标牧场 */ String transTo = transitionInfo.getTransTo(); if (StringUtils.isBlank(transTo)) { throw new RuntimeException("转入牧场不能为空"); } - DaRanch query = new DaRanch(); query.setRanch(transTo); List ranchList = daRanchService.selectDaRanchList(query); - Optional matchedRanch = ranchList.stream() .filter(ranch -> transTo.equals(ranch.getRanch())) .findFirst(); - if (!matchedRanch.isPresent()) { throw new RuntimeException("转入牧场 [" + transTo + "] 不存在"); } Long targetRanchId = matchedRanch.get().getId(); - //获取接收羊舍 + /* 2. 接收羊舍(审批通过时必传) */ Long targetSheepfoldId = transitionInfo.getSheepfoldId(); - if ("转场转入".equals(transitionInfo.getEventType()) && targetSheepfoldId == null) { - throw new RuntimeException("转场转入时,接收羊舍不能为空"); + if (targetSheepfoldId == null) { + throw new RuntimeException("接收羊舍不能为空"); } + /* 3. 逐只迁移 */ String manageTags = transitionInfo.getManageTags(); if (StringUtils.isBlank(manageTags)) { throw new RuntimeException("耳号不能为空"); } List tagList = Arrays.asList(manageTags.split(",")); - for (String tag : tagList) { BasSheep sheep = basSheepService.selectBasSheepByManageTags(tag.trim()); if (sheep == null) { throw new RuntimeException("耳号 [" + tag + "] 不存在"); } - - BasSheep updateSheep = new BasSheep(); - updateSheep.setId(sheep.getId()); - updateSheep.setRanchId(targetRanchId); - if ("转场转入".equals(transitionInfo.getEventType())) { - updateSheep.setSheepfoldId(targetSheepfoldId); - } - basSheepMapper.updateBasSheep(updateSheep); + BasSheep upd = new BasSheep(); + upd.setId(sheep.getId()); + upd.setRanchId(targetRanchId); + upd.setSheepfoldId(targetSheepfoldId); // 真正换舍 + basSheepMapper.updateBasSheep(upd); } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/other/domain/ScCastrate.java b/zhyc-module/src/main/java/com/zhyc/module/produce/other/domain/ScCastrate.java index fcbe256..f2bfc4d 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/other/domain/ScCastrate.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/other/domain/ScCastrate.java @@ -48,10 +48,14 @@ public class ScCastrate extends BaseEntity { @Excel(name = "羊舍名称") private String sheepfoldName; - /** 品种id */ + /** + * 品种id + */ private Long varietyId; - /** 品种名称(联表查询返回,非数据库字段) */ + /** + * 品种名称(联表查询返回,非数据库字段) + */ @Excel(name = "品种") private String varietyName; @@ -74,6 +78,13 @@ public class ScCastrate extends BaseEntity { @JsonFormat(pattern = "yyyy-MM-dd") private String eventDate; - /** 前端多耳号查询条件,非表字段 */ + /** + * 前端多耳号查询条件,非表字段 + */ private List manageTagsList; + + /** + * 是否在群查询条件(0-在群,1-离群),非数据库字段 + */ + private Integer isDelete; } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/other/domain/ScFixHoof.java b/zhyc-module/src/main/java/com/zhyc/module/produce/other/domain/ScFixHoof.java index 5d2fb0d..70867f0 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/other/domain/ScFixHoof.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/other/domain/ScFixHoof.java @@ -18,14 +18,17 @@ import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor -public class ScFixHoof extends BaseEntity -{ +public class ScFixHoof extends BaseEntity { private static final long serialVersionUID = 1L; - /** $column.columnComment */ + /** + * $column.columnComment + */ private Integer id; - /** 羊只id */ + /** + * 羊只id + */ private Integer sheepId; @Excel(name = "管理耳号") private String manageTags; @@ -36,25 +39,37 @@ public class ScFixHoof extends BaseEntity @Excel(name = "事件类型") private String eventType; - /** 羊舍id */ + /** + * 羊舍id + */ private Integer sheepfold; - /** 羊舍名称 */ + /** + * 羊舍名称 + */ @Excel(name = "羊舍名称") private String sheepfoldName; - /** 品种id */ + /** + * 品种id + */ private Long varietyId; - /** 品种名称(联表查询返回,非数据库字段) */ + /** + * 品种名称(联表查询返回,非数据库字段) + */ @Excel(name = "品种") private String varietyName; - /** 备注 */ + /** + * 备注 + */ @Excel(name = "备注") private String comment; - /** 技术员 */ + /** + * 技术员 + */ @Excel(name = "技术员") private String technician; @@ -65,6 +80,13 @@ public class ScFixHoof extends BaseEntity @JsonFormat(pattern = "yyyy-MM-dd") private String eventDate; - /** 前端多耳号查询条件,非表字段 */ + /** + * 前端多耳号查询条件,非表字段 + */ private List manageTagsList; + + /** + * 是否在群查询条件(0-在群,1-离群),非数据库字段 + */ + private Integer isDelete; } diff --git a/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyMeasureMapper.xml b/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyMeasureMapper.xml index c459c40..7f0c262 100644 --- a/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyMeasureMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyMeasureMapper.xml @@ -103,6 +103,24 @@ and sm.create_time between #{sc.params.beginCreateTime} and #{sc.params.endCreateTime} + + and bs.gender = #{sc.gender} + + + and sm.technician like concat('%', #{sc.technician}, '%') + + + and bs.is_delete = #{sc.isDelete} + + + and = #{sc.monthAgeStart} ]]> + + + and + + + and bbs.breed = #{sc.breedStatusName} + ORDER BY sm.create_time DESC @@ -196,6 +214,11 @@ WHERE bs.manage_tags LIKE CONCAT('%', #{query}, '%') AND bs.is_delete = 0 ORDER BY bs.manage_tags - LIMIT 50 + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyScoreMapper.xml b/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyScoreMapper.xml index c95d978..6dc816f 100644 --- a/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyScoreMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyScoreMapper.xml @@ -59,6 +59,9 @@ and sbs.create_time between #{sc.params.beginCreateTime} and #{sc.params.endCreateTime} + + and bs.is_delete = #{sc.isDelete} + ORDER BY sbs.create_time DESC diff --git a/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBreastRatingMapper.xml b/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBreastRatingMapper.xml index a8564f2..b674066 100644 --- a/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBreastRatingMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBreastRatingMapper.xml @@ -57,6 +57,9 @@ and sbr.create_time between #{sc.params.beginCreateTime} and #{sc.params.endCreateTime} + + and bs.is_delete = #{sc.isDelete} + ORDER BY sbr.create_time DESC @@ -134,7 +137,6 @@ FROM bas_sheep bs WHERE bs.manage_tags LIKE CONCAT('%', #{query}, '%') AND bs.is_delete = 0 - ORDER BY bs.manage_tags - LIMIT 50 + ORDER BY bs.manage_tags LIMIT 50 \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeCommentMapper.xml b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeCommentMapper.xml index cb80d10..e2695b3 100644 --- a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeCommentMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeCommentMapper.xml @@ -43,8 +43,11 @@ bs.manage_tags like concat('%', #{tag}, '%') - - and bs.sheepfold_id = #{sc.sheepfoldId} + + + + + and scc.technician like concat('%', #{sc.technician}, '%') and scc.new_comment like concat('%', #{sc.newComment}, '%') @@ -60,6 +63,9 @@ and sc.params.endEventDate != null and sc.params.endEventDate != ''"> and scc.event_date between #{sc.params.beginEventDate} and #{sc.params.endEventDate} + + and bs.is_delete = #{sc.isDelete} + ORDER BY scc.create_time DESC diff --git a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeEarMapper.xml b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeEarMapper.xml index c2c2204..39b26ef 100644 --- a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeEarMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeEarMapper.xml @@ -25,6 +25,7 @@ sce.sheep_id, bs.manage_tags as manage_tags, sf.sheepfold_name as sheepfold_name, + bv.variety as varietyName, case when sce.ear_type = 0 then '改电子耳号' when sce.ear_type = 1 then '改管理耳号' @@ -41,6 +42,7 @@ from sc_change_ear sce LEFT JOIN bas_sheep bs ON sce.sheep_id = bs.id LEFT JOIN da_sheepfold sf ON bs.sheepfold_id = sf.id + LEFT JOIN bas_sheep_variety bv on bs.variety_id = bv.id diff --git a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeVarietyMapper.xml b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeVarietyMapper.xml index 323b692..9119ca8 100644 --- a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeVarietyMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeVarietyMapper.xml @@ -46,15 +46,25 @@ and scv.sheep_id = #{sc.sheepId} - and bs.sheepfold_id = #{sc.sheepfoldId} - and scv.variety_old like concat('%', #{sc.varietyOld}, '%') - and scv.variety_new like concat('%', #{sc.varietyNew}, '%') + + and scv.technician like concat('%', + #{sc.technician}, '%') + + and scv.variety_old like concat('%', + #{sc.varietyOld}, '%') + + and scv.variety_new like concat('%', + #{sc.varietyNew}, '%') + and scv.create_time between #{sc.params.beginCreateTime} and #{sc.params.endCreateTime} and scv.event_date between #{sc.params.beginEventDate} and #{sc.params.endEventDate} + + and bs.is_delete = #{sc.isDelete} + ORDER BY scv.create_time DESC @@ -119,7 +129,6 @@ FROM bas_sheep bs WHERE bs.manage_tags LIKE CONCAT('%', #{query}, '%') AND bs.is_delete = 0 - ORDER BY bs.manage_tags - LIMIT 50 + ORDER BY bs.manage_tags LIMIT 50 \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScTransGroupMapper.xml b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScTransGroupMapper.xml index 60b55ec..b74eb91 100644 --- a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScTransGroupMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScTransGroupMapper.xml @@ -15,7 +15,6 @@ - @@ -25,8 +24,8 @@ SELECT tg.id, tg.sheep_id, s.manage_tags AS manageTags, - tg.event_type AS eventType, - tg.trans_date AS transDate, + tg.event_type AS eventType, + tg.trans_date AS transDate, tg.fold_to, tg.fold_from, tg.reason, @@ -34,7 +33,6 @@ bv.variety AS varietyName, st.id AS sheepTypeId, st.name AS sheepTypeName, - tg.status, tg.comment, tg.create_by, tg.create_time, @@ -54,20 +52,28 @@ @@ -90,7 +96,6 @@ variety_id, reason, technician, - status, comment, create_by, create_time, @@ -104,7 +109,6 @@ #{varietyId}, #{reason}, #{technician}, - #{status}, #{comment}, #{createBy}, #{createTime}, @@ -122,7 +126,6 @@ variety_id = #{varietyId}, reason = #{reason}, technician = #{technician}, - status = #{status}, comment = #{comment}, create_by = #{createBy}, create_time = #{createTime}, @@ -149,6 +152,5 @@ WHERE s.manage_tags LIKE CONCAT('%', #{query}, '%') AND s.is_delete = 0 ORDER BY s.manage_tags - LIMIT 50 \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScTransitionInfoMapper.xml b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScTransitionInfoMapper.xml index 7c7ece3..79073ae 100644 --- a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScTransitionInfoMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScTransitionInfoMapper.xml @@ -25,8 +25,10 @@ SELECT t.*, bv.variety AS varietyName, bs.manage_tags AS manageTags, + sf.sheepfold_name AS sheepfoldName, t.event_type AS eventType, t.transition_date AS transitionDate, + dr.ranch AS currentRanchName, CASE t.trans_type WHEN 0 THEN '内部调拨' WHEN 1 THEN '内部销售' @@ -42,6 +44,8 @@ FROM sc_transition_info t LEFT JOIN bas_sheep bs ON t.sheep_id = bs.id LEFT JOIN bas_sheep_variety bv ON bs.variety_id = bv.id + LEFT JOIN da_sheepfold sf ON t.sheepfold_id = sf.id + LEFT JOIN da_ranch dr ON bs.ranch_id = dr.id @@ -155,7 +171,6 @@ FROM bas_sheep bs WHERE bs.manage_tags LIKE CONCAT('%', #{query}, '%') AND bs.is_delete = 0 - ORDER BY bs.manage_tags - LIMIT 50 + ORDER BY bs.manage_tags LIMIT 50 \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/produce/other/ScCastrateMapper.xml b/zhyc-module/src/main/resources/mapper/produce/other/ScCastrateMapper.xml index e56cb4b..92dfb96 100644 --- a/zhyc-module/src/main/resources/mapper/produce/other/ScCastrateMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/other/ScCastrateMapper.xml @@ -57,6 +57,9 @@ and sc.event_date between #{sc.params.beginEventDate} and #{sc.params.endEventDate} + + and bs.is_delete = #{sc.isDelete} + ORDER BY sc.create_time DESC diff --git a/zhyc-module/src/main/resources/mapper/produce/other/ScFixHoofMapper.xml b/zhyc-module/src/main/resources/mapper/produce/other/ScFixHoofMapper.xml index 706675b..cb31739 100644 --- a/zhyc-module/src/main/resources/mapper/produce/other/ScFixHoofMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/other/ScFixHoofMapper.xml @@ -21,7 +21,7 @@ select fh.id, bs.manage_tags as manageTags, - '修蹄' as event_type, + '修蹄' as event_type, bs.sheepfold_id as sheepfold, sf.sheepfold_name as sheepfoldName, bs.variety_id as varietyId, @@ -47,13 +47,18 @@ and bs.sheepfold_id = #{sc.sheepfold} and bs.variety_id = #{sc.varietyId} - and fh.technician like concat('%', #{sc.technician}, '%') + and fh.technician like concat('%', + #{sc.technician}, '%') + and fh.create_time between #{sc.params.beginCreateTime} and #{sc.params.endCreateTime} and fh.event_date between #{sc.params.beginEventDate} and #{sc.params.endEventDate} + + and bs.is_delete = #{sc.isDelete} + ORDER BY fh.create_time DESC @@ -118,6 +123,5 @@ WHERE bs.manage_tags LIKE CONCAT('%', #{query}, '%') AND bs.is_delete = 0 ORDER BY bs.manage_tags - LIMIT 50 \ No newline at end of file From 163cf5e5787d5a8bfc2007b4330994647e930d83 Mon Sep 17 00:00:00 2001 From: zyk Date: Tue, 3 Feb 2026 14:44:02 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=AD=95=E6=A3=80=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E5=A4=8D=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../breed/domain/ScPregnancyRecord.java | 15 ++ .../produce/breed/ScPregnancyRecordMapper.xml | 194 +++++++++++++----- 2 files changed, 155 insertions(+), 54 deletions(-) diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScPregnancyRecord.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScPregnancyRecord.java index 575db23..0c0893d 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScPregnancyRecord.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScPregnancyRecord.java @@ -123,6 +123,21 @@ public class ScPregnancyRecord extends BaseEntity private Integer daysAfterMating; /** 全部羊耳号列表(用于多耳号查询) */ private List allEarNumbers; + // 1. 新增字段 + @Excel(name = "孕检原因") + private String reason; // 初检/复检 + + // 2. 胚胎移植相关字段 (用于前端显示) + @Excel(name = "供体母羊") + private String donorEwe; + @Excel(name = "供体母羊品种") + private String donorEweVariety; + @Excel(name = "供体公羊") + private String donorRam; + @Excel(name = "供体公羊品种") + private String donorRamVariety; + @Excel(name = "移胚数") + private Integer embryoCount; public List getAllEarNumbers() { return allEarNumbers; 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 39f32c3..b4bca00 100644 --- a/zhyc-module/src/main/resources/mapper/produce/breed/ScPregnancyRecordMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScPregnancyRecordMapper.xml @@ -31,63 +31,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select - pr.id, - pr.sheep_id, - pr.datetime, - pr.result, - pr.fetus_count, - pr.technician, - pr.way, - pr.remark, - pr.create_by, - pr.create_time, - sf.bs_manage_tags as manage_tags, - sf.variety, - sf.month_age, - sf.parity, - sf.mating_counts, - sf.sheepfold_name, - sf.breed, - sf.expected_date, - sf.lambing_date as last_event_date, - sf.dr_ranch as sysRanch, - -- 关联配种信息 + pr.id, pr.sheep_id, pr.datetime, pr.result, pr.fetus_count, pr.technician, pr.way, pr.remark, pr.create_by, pr.create_time,pr.reason, + sf.bs_manage_tags as manage_tags, sf.variety, sf.month_age, sf.parity, sf.mating_counts, sf.sheepfold_name, sf.breed, sf.expected_date, sf.dr_ranch as sysRanch, + (SELECT MAX(datetime) FROM sc_pregnancy_record WHERE sheep_id = pr.sheep_id AND datetime < pr.datetime AND is_delete = 0) as last_event_date, + br.create_time as mating_date, + br.embryo_count, br.donor_ewe, br.donor_ram, + mating_type.dict_label as mating_type_name, ram_sf.bs_manage_tags as father_manage_tags, ram_sf.variety as father_variety, - mating_type.dict_label as mating_type_name, - COALESCE(br.create_time, sf.mating_date) as mating_date, - -- 计算配后天数:孕检日期 - 配种日期 - CASE - WHEN COALESCE(br.create_time, sf.mating_date) IS NOT NULL - THEN DATEDIFF(pr.datetime, COALESCE(br.create_time, sf.mating_date)) - ELSE NULL - END as days_after_mating + donor_e_sf.variety as donor_ewe_variety, + donor_r_sf.variety as donor_ram_variety, + DATEDIFF(pr.datetime, br.create_time) as days_after_mating from sc_pregnancy_record pr - INNER JOIN sheep_file sf on pr.sheep_id = sf.id - -- 关联配种记录表,获取最新的配种记录 - left join ( - select br1.* - from sc_breed_record br1 - inner join ( - select ewe_id, max(create_time) as max_time - from sc_breed_record - group by ewe_id - ) br2 on br1.ewe_id = br2.ewe_id and br1.create_time = br2.max_time - ) br on sf.id = br.ewe_id - -- 关联公羊信息 - left join sheep_file ram_sf on br.ram_id = ram_sf.id - -- 关联配种类型字典 - left join sys_dict_data mating_type on sf.mating_type_id = mating_type.dict_value + LEFT JOIN sheep_file sf on pr.sheep_id = sf.id + LEFT JOIN ( + select t1.* from sc_breed_record t1 + inner join (select ewe_id, max(create_time) as mt from sc_breed_record group by ewe_id) t2 + on t1.ewe_id = t2.ewe_id and t1.create_time = t2.mt + ) br on pr.sheep_id = br.ewe_id + LEFT JOIN sheep_file ram_sf on br.ram_id = ram_sf.id + LEFT JOIN sys_dict_data mating_type on CAST(br.breed_type AS CHAR) = mating_type.dict_value and mating_type.dict_type = 'breed_type' and mating_type.status = '0' + LEFT JOIN sheep_file donor_e_sf on br.donor_ewe = donor_e_sf.bs_manage_tags + LEFT JOIN sheep_file donor_r_sf on br.donor_ram = donor_r_sf.bs_manage_tags SELECT sf.bs_manage_tags as manageTags, - -- 从配种记录表获取公羊耳号 - ram_sf.bs_manage_tags as fatherManageTags, - ram_sf.variety as fatherVariety, + br.donor_ewe as donorEwe, + br.donor_ram as donorRam, + donor_e_sf.variety as donorEweVariety, + donor_r_sf.variety as donorRamVariety, + -- 核心修改:如果是胚胎移植(5),显示供体公羊;否则显示普通配种公羊 + CASE + WHEN br.breed_type = 5 THEN br.donor_ram + ELSE ram_sf.bs_manage_tags + END as fatherManageTags, + -- 品种也需要同步切换 + CASE + WHEN br.breed_type = 5 THEN donor_r_sf.variety + ELSE ram_sf.variety + END as fatherVariety, br.create_time as matingDate, mating_type.dict_label as matingTypeName, - br.technician as breedTechnician, - br.create_time as breedCreateTime + br.technician as breedTechnician FROM sheep_file sf LEFT JOIN sc_breed_record br ON sf.id = br.ewe_id LEFT JOIN sheep_file ram_sf ON br.ram_id = ram_sf.id - LEFT JOIN sys_dict_data mating_type ON sf.mating_type_id = mating_type.dict_value + -- 新增关联:通过耳号获取供体公羊的品种信息 + LEFT JOIN sheep_file donor_r_sf ON br.donor_ram = donor_r_sf.bs_manage_tags + LEFT JOIN sheep_file donor_e_sf ON br.donor_ewe = donor_e_sf.bs_manage_tags + LEFT JOIN sys_dict_data mating_type ON CAST(br.breed_type AS CHAR) = mating_type.dict_value AND mating_type.dict_type = 'breed_type' AND mating_type.status = '0' - WHERE sf.bs_manage_tags = #{manageTags} - AND sf.is_delete = 0 - ORDER BY br.create_time DESC - LIMIT 1 + WHERE sf.bs_manage_tags = #{manageTags} AND sf.is_delete = 0 + ORDER BY br.create_time DESC LIMIT 1 @@ -172,6 +255,7 @@ remark, create_by, create_time, + reason, is_delete @@ -184,6 +268,7 @@ #{remark}, #{createBy}, #{createTime}, + #{reason}, 0 @@ -197,6 +282,7 @@ technician = #{technician}, way = #{way}, remark = #{remark}, + reason = #{reason}, where id = #{id}