From c8f7b6baffc1255f67abd667b6506451f22cb6fe Mon Sep 17 00:00:00 2001 From: ll <1079863556@qq.com> Date: Fri, 29 Aug 2025 17:24:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=B8=E5=A5=B6=E6=A3=80=E9=AA=8C=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=EF=BC=8C=E9=B2=9C=E5=A5=B6=E6=A3=80=E9=AA=8C=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E3=80=81=E7=94=9F=E4=B9=B3=E6=A3=80=E9=AA=8C=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E9=A1=B5=E9=9D=A2=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=A5=B6=E4=BA=A7=E9=87=8F=E5=88=86=E6=9E=90=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=8A=A5=E9=94=99=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NpSheepMilkAnalysisController.java | 11 +-- .../domain/NpSheepMilkAnalysis.java | 75 +++++++++++++++++-- .../mapper/NpSheepMilkAnalysisMapper.java | 9 ++- .../service/INpSheepMilkAnalysisService.java | 7 +- .../impl/NpSheepMilkAnalysisServiceImpl.java | 18 +++-- .../NpSheepMilkAnalysisMapper.xml | 30 ++++++-- 6 files changed, 124 insertions(+), 26 deletions(-) diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpSheepMilkAnalysisController.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpSheepMilkAnalysisController.java index 3e4f07a..bce4136 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpSheepMilkAnalysisController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpSheepMilkAnalysisController.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; /** + * 奶产量分析控制器 * 只保留:分页列表(只读) + 单条查询 + 导出 */ @RestController @@ -29,13 +30,13 @@ public class NpSheepMilkAnalysisController extends BaseController { */ @GetMapping("/list") public TableDataInfo list(NpSheepMilkAnalysis analysis) { - startPage(); // 使用 PageHelper 分页(注意 service 中第一个 DB 调用是 distinct sheep id) + startPage(); // 使用PageHelper分页(注意service中第一个DB调用是distinct sheep id) List list = npSheepMilkAnalysisService.selectNpSheepMilkAnalysisList(analysis); return getDataTable(list); } /** - * 获取单个分析记录详细信息(按 sheepId) + * 获取单个分析记录详细信息(按sheepId) */ @GetMapping(value = "/{sheepId}") public AjaxResult getInfo(@PathVariable("sheepId") String sheepId) { @@ -44,13 +45,13 @@ public class NpSheepMilkAnalysisController extends BaseController { /** * 导出奶产量分析记录(Excel) - * 支持 manageEarTag 与 screenDays 两个查询条件 + * 支持manageEarTag与screenDays两个查询条件 */ @Log(title = "奶产量分析 导出", businessType = BusinessType.EXPORT) @GetMapping("/export") public AjaxResult export(NpSheepMilkAnalysis analysis) { - List list = npSheepMilkAnalysisService.selectNpSheepMilkAnalysisList(analysis); + List list = npSheepMilkAnalysisService.selectNpSheepMilkAnalysisForExport(analysis); ExcelUtil util = new ExcelUtil<>(NpSheepMilkAnalysis.class); return util.exportExcel(list, "羊奶产量分析数据"); } -} +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpSheepMilkAnalysis.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpSheepMilkAnalysis.java index 0573a0d..84cedc0 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpSheepMilkAnalysis.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpSheepMilkAnalysis.java @@ -1,78 +1,141 @@ package com.zhyc.module.dairyProducts.domain; +import com.zhyc.common.annotation.Excel; import java.util.Date; public class NpSheepMilkAnalysis { // 唯一键(可用于前端 row-key) + @Excel(name = "羊只ID") private String sheepId; // 耳号(从 sheep_file.bs_manage_tags) + @Excel(name = "耳号") private String manageEarTag; + @Excel(name = "品种") private String variety; // 最高校正胎次的挤奶开始时间 & 干奶时间 + @Excel(name = "挤奶开始时间", dateFormat = "yyyy-MM-dd") private Date milkingStartTime; + + @Excel(name = "干奶时间", dateFormat = "yyyy-MM-dd") private Date dryEndTime; // 挤奶天数(该胎次) + @Excel(name = "挤奶天数") private Integer milkingDays; // 前端传入的筛选天数(screenDays) + @Excel(name = "筛选天数") private Integer screenDays; // 分析天数(若你有不同命名,可忽略) private Integer analysisDays; // 校正后最大胎次(即校正奶量之和最大的胎次) + @Excel(name = "校正后最大胎次") private Integer maxParity; // 最高校正胎次区间内的系统奶量与校正奶量(按筛选窗口) + @Excel(name = "系统奶量合计") private Double sumSystemMilk; + + @Excel(name = "校正奶量合计") private Double sumCorrectedMilk; - // 校正日平均奶量(按 min(挤奶天数, 筛选天数)) + // 校正日平均奶量(按min(挤奶天数,筛选天数)) + @Excel(name = "校正日平均奶量") private Double avgCorrectedDaily; // 各胎次总奶量(校正) + @Excel(name = "胎次1总奶量") private Double sumParity1Milk; + + @Excel(name = "胎次2总奶量") private Double sumParity2Milk; + + @Excel(name = "胎次3总奶量") private Double sumParity3Milk; + + @Excel(name = "胎次4总奶量") private Double sumParity4Milk; // 各胎次日平均(按规则) + @Excel(name = "胎次1日平均") private Double avgParity1Daily; + + @Excel(name = "胎次2日平均") private Double avgParity2Daily; + + @Excel(name = "胎次3日平均") private Double avgParity3Daily; + + @Excel(name = "胎次4日平均") private Double avgParity4Daily; // 泌乳天数(sheep_file.lactation_day) + @Excel(name = "泌乳天数") private Integer lactationDays; - // 过去 7 / 14 / 30 日平均(系统奶量) + // 过去7/14/30日平均(系统奶量) + @Excel(name = "过去7日均奶量") private Double avgLast7Milk; - private Double avgLast7Corrected; // = avgLast7Milk * weightCoefficient (默认 1.0) + + @Excel(name = "校正过去7日均") + private Double avgLast7Corrected; + + @Excel(name = "过去14日均奶量") private Double avgLast14Milk; + + @Excel(name = "过去30日均奶量") private Double avgLast30Milk; - // 羊只基础信息(来自 sheep_file) + // 羊只基础信息(来自sheep_file) + @Excel(name = "羊只类别") private String sheepCategory; + + @Excel(name = "生日", dateFormat = "yyyy-MM-dd") private Date birthday; - private Integer parity; // 当前胎次 + + @Excel(name = "当前胎次") + private Integer parity; + + @Excel(name = "月龄") private Integer monthAge; + + @Excel(name = "当前体重") private Double currentWeight; + + @Excel(name = "繁育状态") private String breedStatus; + + @Excel(name = "父号") private String fatherManageTags; + + @Excel(name = "母号") private String motherManageTags; + + @Excel(name = "牧场") private String ranchName; + + @Excel(name = "家系") private String family; // 母亲相关字段(由已计算的母亲分析结果中取值) + @Excel(name = "母亲挤奶天数") private Integer motherMilkingDays; + + @Excel(name = "母亲校正奶量合计") private Double motherSumCorrected; + + @Excel(name = "母亲校正后最大胎次") private Integer motherMaxParity; + + @Excel(name = "母亲校正日平均奶量") private Double motherAvgCorrectedDaily; + @Excel(name = "最后更新时间", dateFormat = "yyyy-MM-dd") private Date lastUpdate; // getters and setters @@ -195,4 +258,4 @@ public class NpSheepMilkAnalysis { public Date getLastUpdate() { return lastUpdate; } public void setLastUpdate(Date lastUpdate) { this.lastUpdate = lastUpdate; } -} +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpSheepMilkAnalysisMapper.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpSheepMilkAnalysisMapper.java index 002e009..1e35d56 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpSheepMilkAnalysisMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpSheepMilkAnalysisMapper.java @@ -9,7 +9,7 @@ import java.util.Map; public interface NpSheepMilkAnalysisMapper { /** - * 按筛选天数 screenDays 统计并返回所有羊只的奶产量分析 + * 按筛选天数screenDays统计并返回所有羊只的奶产量分析 */ List selectAnalysisForExport(@Param("screenDays") Integer screenDays); @@ -33,4 +33,9 @@ public interface NpSheepMilkAnalysisMapper { */ List> selectMilkRecordsBySheepId(@Param("sheepId") String sheepId); -} + /** + * 导出奶产量分析记录 + */ + List selectNpSheepMilkAnalysisForExport(NpSheepMilkAnalysis analysis); + +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpSheepMilkAnalysisService.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpSheepMilkAnalysisService.java index 8760789..5dded5c 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpSheepMilkAnalysisService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpSheepMilkAnalysisService.java @@ -9,4 +9,9 @@ public interface INpSheepMilkAnalysisService { List selectNpSheepMilkAnalysisList(NpSheepMilkAnalysis analysis); -} + /** + * 导出奶产量分析记录 + */ + List selectNpSheepMilkAnalysisForExport(NpSheepMilkAnalysis analysis); + +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpSheepMilkAnalysisServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpSheepMilkAnalysisServiceImpl.java index 161a381..7100ca4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpSheepMilkAnalysisServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpSheepMilkAnalysisServiceImpl.java @@ -19,7 +19,7 @@ public class NpSheepMilkAnalysisServiceImpl implements INpSheepMilkAnalysisServi @Autowired private NpSheepMilkAnalysisMapper npSheepMilkAnalysisMapper; - // 将 Rec 定义为静态内部类 + // 将Rec定义为静态内部类 private static class Rec { LocalDate date; double systemMilk; @@ -27,7 +27,7 @@ public class NpSheepMilkAnalysisServiceImpl implements INpSheepMilkAnalysisServi int parity; } - // 将 ParityStat 定义为静态内部类 + // 将ParityStat定义为静态内部类 private static class ParityStat { int parity; double sumCorrected; @@ -85,7 +85,7 @@ public class NpSheepMilkAnalysisServiceImpl implements INpSheepMilkAnalysisServi continue; } - // 使用静态内部类 Rec + // 使用静态内部类Rec List recs = new ArrayList<>(); for (Map r : records) { Rec rr = new Rec(); @@ -98,7 +98,7 @@ public class NpSheepMilkAnalysisServiceImpl implements INpSheepMilkAnalysisServi Map> byParity = recs.stream().collect(Collectors.groupingBy(r -> r.parity)); - // 使用静态内部类 ParityStat + // 使用静态内部类ParityStat List parityStats = new ArrayList<>(); for (Map.Entry> e : byParity.entrySet()) { List list = e.getValue(); @@ -142,7 +142,7 @@ public class NpSheepMilkAnalysisServiceImpl implements INpSheepMilkAnalysisServi double sumParity3 = parityStats.stream().filter(p -> p.parity == 3).mapToDouble(p -> p.sumCorrected).sum(); double sumParity4 = parityStats.stream().filter(p -> p.parity == 4).mapToDouble(p -> p.sumCorrected).sum(); - // 你之前的 computeParityAvg 方法里没实现,保留调用0 + // 你之前的computeParityAvg方法里没实现,保留调用0 double avgP1 = computeParityAvg(parityStats, 1, screenDays); double avgP2 = computeParityAvg(parityStats, 2, screenDays); double avgP3 = computeParityAvg(parityStats, 3, screenDays); @@ -219,6 +219,12 @@ public class NpSheepMilkAnalysisServiceImpl implements INpSheepMilkAnalysisServi return resultList; } + @Override + public List selectNpSheepMilkAnalysisForExport(NpSheepMilkAnalysis analysis) { + // 直接调用Mapper的导出方法,避免复杂的业务逻辑 + return npSheepMilkAnalysisMapper.selectNpSheepMilkAnalysisForExport(analysis); + } + private static Date convertToDate(Object obj) { if (obj == null) return null; if (obj instanceof Date) { @@ -283,4 +289,4 @@ public class NpSheepMilkAnalysisServiceImpl implements INpSheepMilkAnalysisServi } return (count > 0) ? (sum / count) : 0.0; } -} +} \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/dairyProducts/NpSheepMilkAnalysisMapper.xml b/zhyc-module/src/main/resources/mapper/dairyProducts/NpSheepMilkAnalysisMapper.xml index 8069e16..af77171 100644 --- a/zhyc-module/src/main/resources/mapper/dairyProducts/NpSheepMilkAnalysisMapper.xml +++ b/zhyc-module/src/main/resources/mapper/dairyProducts/NpSheepMilkAnalysisMapper.xml @@ -4,7 +4,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - - + - + - + + + + \ No newline at end of file