孕检界面逻辑修复完成

This commit is contained in:
zyk
2026-02-03 14:44:02 +08:00
parent 5436cb1071
commit 163cf5e578
2 changed files with 155 additions and 54 deletions

View File

@@ -123,6 +123,21 @@ public class ScPregnancyRecord extends BaseEntity
private Integer daysAfterMating;
/** 全部羊耳号列表(用于多耳号查询) */
private List<String> 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<String> getAllEarNumbers() {
return allEarNumbers;

View File

@@ -31,63 +31,135 @@
<result property="lastEventDate" column="last_event_date" />
<result property="ranchName" column="sysRanch" />
<result property="daysAfterMating" column="days_after_mating" />
<result property="reason" column="reason" />
<result property="donorEwe" column="donor_ewe" />
<result property="donorRam" column="donor_ram" />
<result property="embryoCount" column="embryo_count" />
<result property="donorEweVariety" column="donor_ewe_variety" />
<result property="donorRamVariety" column="donor_ram_variety" />
</resultMap>
<!-- <sql id="selectScPregnancyRecordVo">-->
<!-- 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,-->
<!-- &#45;&#45; 1. 上次孕检日期逻辑-->
<!-- (SELECT MAX(datetime) FROM sc_pregnancy_record-->
<!-- WHERE sheep_id = pr.sheep_id AND datetime &lt; pr.datetime AND is_delete = 0) as last_event_date,-->
<!-- &#45;&#45; 2. 配种基础信息-->
<!-- br.create_time as mating_date,-->
<!-- br.embryo_count,-->
<!-- br.donor_ewe,-->
<!-- br.donor_ram,-->
<!-- &#45;&#45; 3. 配种类型映射逻辑-->
<!-- CASE br.breed_type-->
<!-- WHEN 1 THEN '供体母羊配种'-->
<!-- WHEN 2 THEN '同期发情人工授精'-->
<!-- WHEN 3 THEN '本交'-->
<!-- WHEN 4 THEN '自然发情人工授精'-->
<!-- WHEN 5 THEN '胚胎移植'-->
<!-- ELSE '' END as mating_type_name,-->
<!-- &#45;&#45; 4. 配种公羊品种-->
<!-- ram_sf.bs_manage_tags as father_manage_tags,-->
<!-- ram_sf.variety as father_variety,-->
<!-- &#45;&#45; 5. 供体品种逻辑 (再次关联羊档案)-->
<!-- donor_e_sf.variety as donor_ewe_variety,-->
<!-- donor_r_sf.variety as donor_ram_variety-->
<!-- FROM sc_pregnancy_record pr-->
<!-- LEFT JOIN sheep_file sf ON pr.sheep_id = sf.id-->
<!-- &#45;&#45; 关联最新的配种记录-->
<!-- 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-->
<!-- &#45;&#45; 关联配种公羊品种-->
<!-- LEFT JOIN sheep_file ram_sf ON br.ram_id = ram_sf.id-->
<!-- &#45;&#45; 关联供体母羊品种 (基于耳号)-->
<!-- LEFT JOIN sheep_file donor_e_sf ON br.donor_ewe = donor_e_sf.bs_manage_tags-->
<!-- &#45;&#45; 关联供体公羊品种 (基于耳号)-->
<!-- LEFT JOIN sheep_file donor_r_sf ON br.donor_ram = donor_r_sf.bs_manage_tags-->
<!-- &#45;&#45; 关联配种信息-->
<!-- 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,-->
<!-- &#45;&#45; 计算配后天数:孕检日期 - 配种日期-->
<!-- 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-->
<!-- from sc_pregnancy_record pr-->
<!-- INNER JOIN sheep_file sf on pr.sheep_id = sf.id-->
<!-- &#45;&#45; 关联配种记录表,获取最新的配种记录-->
<!-- 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-->
<!-- &#45;&#45; 关联公羊信息-->
<!-- left join sheep_file ram_sf on br.ram_id = ram_sf.id-->
<!-- &#45;&#45; 关联配种类型字典-->
<!-- left join sys_dict_data mating_type on sf.mating_type_id = mating_type.dict_value-->
<!-- and mating_type.dict_type = 'breed_type' and mating_type.status = '0'-->
<!-- </sql>-->
<sql id="selectScPregnancyRecordVo">
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 &lt; 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
</sql>
<!-- 重写的查询列表方法 -->
<select id="selectScPregnancyRecordList" parameterType="ScPregnancyRecord" resultMap="ScPregnancyRecordResult">
<include refid="selectScPregnancyRecordVo"/>
<where>
pr.is_delete = 0
@@ -142,22 +214,33 @@
<select id="selectBreedInfoByManageTags" parameterType="String" resultType="map">
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
</select>
<insert id="insertScPregnancyRecord" parameterType="ScPregnancyRecord" useGeneratedKeys="true" keyProperty="id">
@@ -172,6 +255,7 @@
<if test="remark != null">remark,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="reason != null">reason,</if>
is_delete
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -184,6 +268,7 @@
<if test="remark != null">#{remark},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="reason != null">#{reason},</if>
0
</trim>
</insert>
@@ -197,6 +282,7 @@
<if test="technician != null">technician = #{technician},</if>
<if test="way != null">way = #{way},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="reason != null">reason = #{reason},</if>
</trim>
where id = #{id}
</update>