From 137b495af7f58e692a51294d09b550d8bb3b1a10 Mon Sep 17 00:00:00 2001 From: ll <1079863556@qq.com> Date: Tue, 29 Jul 2025 22:25:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8F=AD=E6=AC=A1=E5=A5=B6=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NpMilkProdClassesController.java | 69 ++++++++++++++ .../controller/RanchController.java | 23 +++++ .../XzParityCorrectionController.java | 18 +++- .../domain/NpMilkProdClasses.java | 80 ++++++++++++++++ .../module/dairyProducts/domain/Ranch.java | 12 +++ .../mapper/NpMilkProdClassesMapper.java | 25 +++++ .../dairyProducts/mapper/RanchMapper.java | 10 ++ .../service/INpMilkProdClassesService.java | 16 ++++ .../dairyProducts/service/IRanchService.java | 8 ++ .../impl/NpMilkProdClassesServiceImpl.java | 62 +++++++++++++ .../service/impl/RanchServiceImpl.java | 19 ++++ .../dairyProducts/NpMilkProdClassesMapper.xml | 93 +++++++++++++++++++ 12 files changed, 430 insertions(+), 5 deletions(-) create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpMilkProdClassesController.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/RanchController.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpMilkProdClasses.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/Ranch.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpMilkProdClassesMapper.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/RanchMapper.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpMilkProdClassesService.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/IRanchService.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpMilkProdClassesServiceImpl.java create mode 100644 zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/RanchServiceImpl.java create mode 100644 zhyc-module/src/main/resources/mapper/dairyProducts/NpMilkProdClassesMapper.xml diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpMilkProdClassesController.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpMilkProdClassesController.java new file mode 100644 index 0000000..32e7db8 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpMilkProdClassesController.java @@ -0,0 +1,69 @@ +package com.zhyc.module.dairyProducts.controller; + +import java.util.Date; +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import com.zhyc.common.annotation.Log; +import com.zhyc.common.core.controller.BaseController; +import com.zhyc.common.core.domain.AjaxResult; +import com.zhyc.common.enums.BusinessType; +import com.zhyc.common.core.page.TableDataInfo; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.module.dairyProducts.domain.NpMilkProdClasses; +import com.zhyc.module.dairyProducts.service.INpMilkProdClassesService; + +@RestController +@RequestMapping("/milkProdclasses/milkProdclasses") +public class NpMilkProdClassesController extends BaseController { + + @Autowired + private INpMilkProdClassesService npMilkProdClassesService; + + @PreAuthorize("@ss.hasPermi('milkProdclasses:milkProdclasses:list')") + @GetMapping("/list") + public TableDataInfo list( + @RequestParam(required = false) Date datetimeStart, + @RequestParam(required = false) Date datetimeEnd, + @RequestParam(required = false) String manageEarNo, // 改为单个字符串,模糊 + @RequestParam(required = false) String factory, + @RequestParam(required = false) Integer classes) { + startPage(); + List list = npMilkProdClassesService + .selectNpMilkProdClassesList(datetimeStart, datetimeEnd, + manageEarNo, factory, classes); + return getDataTable(list); + } + + @PreAuthorize("@ss.hasPermi('milkProdclasses:milkProdclasses:import')") + @Log(title = "班次产奶", businessType = BusinessType.IMPORT) + @PostMapping("/import") + public AjaxResult importData(MultipartFile file) { + try { + ExcelUtil util = new ExcelUtil<>(NpMilkProdClasses.class); + List list = util.importExcel(file.getInputStream()); + int rows = npMilkProdClassesService.importMilkProdClasses(list); + return success("成功导入 " + rows + " 行数据"); + } catch (Exception e) { + return error("导入失败:" + e.getMessage()); + } + } + + @PreAuthorize("@ss.hasPermi('milkProdclasses:milkProdclasses:export')") + @Log(title = "班次产奶", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, + @RequestParam(required = false) Date datetimeStart, + @RequestParam(required = false) Date datetimeEnd, + @RequestParam(required = false) String manageEarNos, + @RequestParam(required = false) String factory, + @RequestParam(required = false) Integer classes) { + List list = npMilkProdClassesService.selectNpMilkProdClassesList(datetimeStart, datetimeEnd, manageEarNos, factory, classes); + ExcelUtil util = new ExcelUtil<>(NpMilkProdClasses.class); + util.exportExcel(response, list, "班次产奶数据"); + } +} + diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/RanchController.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/RanchController.java new file mode 100644 index 0000000..9447a07 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/RanchController.java @@ -0,0 +1,23 @@ +package com.zhyc.module.dairyProducts.controller; + +import com.zhyc.common.core.controller.BaseController; +import com.zhyc.common.core.domain.AjaxResult; +import com.zhyc.module.dairyProducts.domain.Ranch; +import com.zhyc.module.dairyProducts.service.IRanchService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/dairyProducts/ranch") +public class RanchController extends BaseController { + + @Autowired + private IRanchService ranchService; + + @GetMapping("/list") + public AjaxResult list() { + return success(ranchService.selectAllRanch()); + } +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/XzParityCorrectionController.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/XzParityCorrectionController.java index e103d79..ee52381 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/XzParityCorrectionController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/XzParityCorrectionController.java @@ -38,12 +38,20 @@ public class XzParityCorrectionController extends BaseController * 查询胎次校正列表 */ @PreAuthorize("@ss.hasPermi('parityCorrection:parityCorrection:list')") - @GetMapping("/list") - public TableDataInfo list(XzParityCorrection xzParityCorrection) - { - startPage(); +// @GetMapping("/list") +// public TableDataInfo list(XzParityCorrection xzParityCorrection) +// { +// startPage(); +// List list = xzParityCorrectionService.selectXzParityCorrectionList(xzParityCorrection); +// return getDataTable(list); +// } + /** + * 获取全部胎次校正(无需分页,供下拉/列表直接显示) + */ + @GetMapping("/listAll") + public AjaxResult listAll(XzParityCorrection xzParityCorrection){ List list = xzParityCorrectionService.selectXzParityCorrectionList(xzParityCorrection); - return getDataTable(list); + return success(list); // 直接返回数组 } /** diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpMilkProdClasses.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpMilkProdClasses.java new file mode 100644 index 0000000..19e2ce9 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpMilkProdClasses.java @@ -0,0 +1,80 @@ +package com.zhyc.module.dairyProducts.domain; + +import java.io.Serializable; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.zhyc.common.annotation.Excel; + + + +public class NpMilkProdClasses implements Serializable { + private static final long serialVersionUID = 1L; + + private Long id; // 主键ID + private Date createTime; // 创建时间 + private Date updateTime; // 更新时间 + + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "日期") + private Date datetime; + + @Excel(name = "管理耳号") + private String manageEarNo; + + @Excel(name = "电子耳号") + private String electronicEarNo; + + @Excel(name = "胎次") + private Integer parity; + + @Excel(name = "厂区") + private String factory; + + @Excel(name = "班次") + private Integer classes; + + @Excel(name = "班次产奶量") + private Double milk; + + @Excel(name = "班次校正奶量") + private Double correctedMilk; + + private String sheepId; + + // Getters and Setters + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + + public Date getCreateTime() { return createTime; } + public void setCreateTime(Date createTime) { this.createTime = createTime; } + + public Date getUpdateTime() { return updateTime; } + public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } + + public Date getDatetime() { return datetime; } + public void setDatetime(Date datetime) { this.datetime = datetime; } + + public String getManageEarNo() { return manageEarNo; } + public void setManageEarNo(String manageEarNo) { this.manageEarNo = manageEarNo; } + + public String getElectronicEarNo() { return electronicEarNo; } + public void setElectronicEarNo(String electronicEarNo) { this.electronicEarNo = electronicEarNo; } + + public Integer getParity() { return parity; } + public void setParity(Integer parity) { this.parity = parity; } + + public String getFactory() { return factory; } + public void setFactory(String factory) { this.factory = factory; } + + public Integer getClasses() { return classes; } + public void setClasses(Integer classes) { this.classes = classes; } + + public Double getMilk() { return milk; } + public void setMilk(Double milk) { this.milk = milk; } + + public Double getCorrectedMilk() { return correctedMilk; } + public void setCorrectedMilk(Double correctedMilk) { this.correctedMilk = correctedMilk; } + + public String getSheepId() { return sheepId; } + public void setSheepId(String sheepId) { this.sheepId = sheepId; } +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/Ranch.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/Ranch.java new file mode 100644 index 0000000..7486310 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/Ranch.java @@ -0,0 +1,12 @@ +package com.zhyc.module.dairyProducts.domain; + +public class Ranch { + private String ranchCode; + private String ranchName; + + public String getRanchCode() { return ranchCode; } + public void setRanchCode(String ranchCode) { this.ranchCode = ranchCode; } + + public String getRanchName() { return ranchName; } + public void setRanchName(String ranchName) { this.ranchName = ranchName; } +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpMilkProdClassesMapper.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpMilkProdClassesMapper.java new file mode 100644 index 0000000..82a3238 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpMilkProdClassesMapper.java @@ -0,0 +1,25 @@ +package com.zhyc.module.dairyProducts.mapper; + +import org.apache.ibatis.annotations.Param; +import com.zhyc.module.dairyProducts.domain.NpMilkProdClasses; +import java.util.Date; +import java.util.List; + +public interface NpMilkProdClassesMapper { + List selectNpMilkProdClassesList( + @Param("datetimeStart") Date datetimeStart, + @Param("datetimeEnd") Date datetimeEnd, + @Param("manageEarNo") String manageEarNo, + @Param("factory") String factory, + @Param("classes") Integer classes); + + int insertNpMilkProdClasses(NpMilkProdClasses row); + + String selectSheepIdByManageEarNo(@Param("manageEarNo") String manageEarNo); + + Double getWeightCorrection(@Param("date") Date date, @Param("factory") String factory); + + Double getParityCorrection(@Param("parity") Integer parity); + + Double getDryMatterCorrection(@Param("date") Date date, @Param("factory") String factory); +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/RanchMapper.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/RanchMapper.java new file mode 100644 index 0000000..a234521 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/RanchMapper.java @@ -0,0 +1,10 @@ +package com.zhyc.module.dairyProducts.mapper; + +import com.zhyc.module.dairyProducts.domain.Ranch; +import org.apache.ibatis.annotations.Select; +import java.util.List; + +public interface RanchMapper { + @Select("SELECT ranch AS ranchName, ranch AS ranchCode FROM da_ranch") + List selectAllRanch(); +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpMilkProdClassesService.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpMilkProdClassesService.java new file mode 100644 index 0000000..b582994 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpMilkProdClassesService.java @@ -0,0 +1,16 @@ +package com.zhyc.module.dairyProducts.service; + +import java.util.Date; +import java.util.List; +import com.zhyc.module.dairyProducts.domain.NpMilkProdClasses; + +public interface INpMilkProdClassesService { + List selectNpMilkProdClassesList( + Date datetimeStart, + Date datetimeEnd, + String manageEarNo, // 改为单个 String + String factory, + Integer classes); + + int importMilkProdClasses(List list); +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/IRanchService.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/IRanchService.java new file mode 100644 index 0000000..15d3e1d --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/IRanchService.java @@ -0,0 +1,8 @@ +package com.zhyc.module.dairyProducts.service; + +import com.zhyc.module.dairyProducts.domain.Ranch; +import java.util.List; + +public interface IRanchService { + List selectAllRanch(); +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpMilkProdClassesServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpMilkProdClassesServiceImpl.java new file mode 100644 index 0000000..1c26057 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpMilkProdClassesServiceImpl.java @@ -0,0 +1,62 @@ +package com.zhyc.module.dairyProducts.service.impl; + +import com.zhyc.module.dairyProducts.domain.NpMilkProdClasses; +import com.zhyc.module.dairyProducts.mapper.NpMilkProdClassesMapper; +import com.zhyc.module.dairyProducts.service.INpMilkProdClassesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +@Service +public class NpMilkProdClassesServiceImpl implements INpMilkProdClassesService { + + @Autowired + private NpMilkProdClassesMapper mapper; + + @Override + public List selectNpMilkProdClassesList(Date datetimeStart, Date datetimeEnd, + String manageEarNo, String factory, Integer classes) { + return mapper.selectNpMilkProdClassesList(datetimeStart, datetimeEnd, manageEarNo, factory, classes); + } + + @Override + public int importMilkProdClasses(List list) { + int count = 0; + for (NpMilkProdClasses item : list) { + // 根据管理耳号查 sheep_id + String sheepId = mapper.selectSheepIdByManageEarNo(item.getManageEarNo()); + if (sheepId == null) continue; + + item.setSheepId(sheepId); + + // 计算校正奶量 + Double correctedMilk = calculateCorrectedMilk(item); + item.setCorrectedMilk(correctedMilk); + + // 插入数据 + count += mapper.insertNpMilkProdClasses(item); + } + return count; + } + + private Double calculateCorrectedMilk(NpMilkProdClasses item) { + Double milk = item.getMilk(); + if (milk == null) return null; + + // 1. 称重矫正系数 + Double weightCorrection = mapper.getWeightCorrection(item.getDatetime(), item.getFactory()); + if (weightCorrection == null) weightCorrection = 1.0; + + // 2. 胎次矫正系数 + Double parityCorrection = mapper.getParityCorrection(item.getParity()); + if (parityCorrection == null) parityCorrection = 1.0; + + // 3. 干物质矫正系数 + Double dryMatterCorrection = mapper.getDryMatterCorrection(item.getDatetime(), item.getFactory()); + if (dryMatterCorrection == null) dryMatterCorrection = 1.0; + + return milk * weightCorrection * parityCorrection * dryMatterCorrection; + } +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/RanchServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/RanchServiceImpl.java new file mode 100644 index 0000000..281d32e --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/RanchServiceImpl.java @@ -0,0 +1,19 @@ +package com.zhyc.module.dairyProducts.service.impl; + +import com.zhyc.module.dairyProducts.domain.Ranch; +import com.zhyc.module.dairyProducts.mapper.RanchMapper; +import com.zhyc.module.dairyProducts.service.IRanchService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + +@Service +public class RanchServiceImpl implements IRanchService { + @Autowired + private RanchMapper ranchMapper; + + @Override + public List selectAllRanch() { + return ranchMapper.selectAllRanch(); + } +} \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/dairyProducts/NpMilkProdClassesMapper.xml b/zhyc-module/src/main/resources/mapper/dairyProducts/NpMilkProdClassesMapper.xml new file mode 100644 index 0000000..cc20df3 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/dairyProducts/NpMilkProdClassesMapper.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO np_milk_prod_classes (datetime, sheep_id, classes, milk, corrected_milk) + VALUES (#{datetime}, #{sheepId}, #{classes}, #{milk}, #{correctedMilk}) + + + +