diff --git a/zhyc-admin/src/main/java/com/zhyc/SheepApplication.java b/zhyc-admin/src/main/java/com/zhyc/SheepApplication.java index 1867b29..ec34567 100644 --- a/zhyc-admin/src/main/java/com/zhyc/SheepApplication.java +++ b/zhyc-admin/src/main/java/com/zhyc/SheepApplication.java @@ -3,7 +3,6 @@ package com.zhyc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.context.annotation.ComponentScan; /** * 启动程序 diff --git a/zhyc-common/src/main/java/com/zhyc/common/utils/DateUtils.java b/zhyc-common/src/main/java/com/zhyc/common/utils/DateUtils.java index c95401e..0570896 100644 --- a/zhyc-common/src/main/java/com/zhyc/common/utils/DateUtils.java +++ b/zhyc-common/src/main/java/com/zhyc/common/utils/DateUtils.java @@ -8,6 +8,7 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; import java.util.Date; import org.apache.commons.lang3.time.DateFormatUtils; diff --git a/zhyc-common/src/main/java/com/zhyc/common/utils/SecurityUtils.java b/zhyc-common/src/main/java/com/zhyc/common/utils/SecurityUtils.java index 92b34e4..43e330c 100644 --- a/zhyc-common/src/main/java/com/zhyc/common/utils/SecurityUtils.java +++ b/zhyc-common/src/main/java/com/zhyc/common/utils/SecurityUtils.java @@ -66,6 +66,21 @@ public class SecurityUtils } } + /** + * 用户昵称 + **/ + public static String getNickName() + { + try + { + return getLoginUser().getUser().getNickName(); + } + catch (Exception e) + { + throw new ServiceException("获取用户昵称异常", HttpStatus.UNAUTHORIZED); + } + } + /** * 获取用户 **/ diff --git a/zhyc-framework/src/main/java/com/zhyc/framework/aspectj/RateLimiterAspect.java b/zhyc-framework/src/main/java/com/zhyc/framework/aspectj/RateLimiterAspect.java index 0cc658e..a0b6d0d 100644 --- a/zhyc-framework/src/main/java/com/zhyc/framework/aspectj/RateLimiterAspect.java +++ b/zhyc-framework/src/main/java/com/zhyc/framework/aspectj/RateLimiterAspect.java @@ -4,7 +4,6 @@ import java.lang.reflect.Method; import java.util.Collections; import java.util.List; import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; @@ -12,7 +11,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.RedisScript; -import org.springframework.stereotype.Component; import com.zhyc.common.annotation.RateLimiter; import com.zhyc.common.enums.LimitType; import com.zhyc.common.exception.ServiceException; diff --git a/zhyc-framework/src/main/java/com/zhyc/framework/config/RedisConfig.java b/zhyc-framework/src/main/java/com/zhyc/framework/config/RedisConfig.java index 00a1ff4..9c43b1b 100644 --- a/zhyc-framework/src/main/java/com/zhyc/framework/config/RedisConfig.java +++ b/zhyc-framework/src/main/java/com/zhyc/framework/config/RedisConfig.java @@ -1,9 +1,6 @@ package com.zhyc.framework.config; import org.springframework.cache.annotation.CachingConfigurerSupport; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/1 b/zhyc-module/src/main/java/com/zhyc/module/base/1 new file mode 100644 index 0000000..e69de29 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 fede094..007a1dc 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 @@ -8,7 +8,6 @@ import javax.servlet.http.HttpServletResponse; import com.zhyc.module.base.domain.BasSheep; import com.zhyc.module.base.domain.BasSheepVariety; -import com.zhyc.module.base.mapper.BasSheepMapper; import com.zhyc.module.base.service.IBasSheepService; import com.zhyc.module.base.service.IBasSheepVarietyService; import org.springframework.security.access.prepost.PreAuthorize; diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepGroupMappingController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepGroupMappingController.java index 31196e4..72e37b0 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepGroupMappingController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepGroupMappingController.java @@ -1,12 +1,15 @@ package com.zhyc.module.base.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; +import com.zhyc.common.core.domain.entity.SysDictData; import com.zhyc.common.utils.StringUtils; +import com.zhyc.module.base.domain.BasGroupTreeVo; import com.zhyc.module.base.domain.BasSheepGroupMapping; +import com.zhyc.module.base.domain.BasSheepGroupExportVo; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -22,6 +25,13 @@ import com.zhyc.common.core.page.TableDataInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +// 1. 引入若依字典工具 +import com.zhyc.common.utils.DictUtils; + + /** * 羊只分组关联Controller @@ -33,6 +43,20 @@ import org.slf4j.LoggerFactory; @RequestMapping("/sheep_grouping/sheep_grouping") public class BasSheepGroupMappingController extends BaseController { + + // 工具方法:LocalDateTime -> Date + private Date toDate(Object obj) { + if (obj == null) { + return null; + } + if (obj instanceof Date) { + return (Date) obj; + } + if (obj instanceof LocalDateTime) { + return Date.from(((LocalDateTime) obj).atZone(ZoneId.systemDefault()).toInstant()); + } + throw new IllegalArgumentException("不支持的日期类型:" + obj.getClass()); + } @Autowired private IBasSheepGroupMappingService basSheepGroupMappingService; @@ -73,16 +97,73 @@ public class BasSheepGroupMappingController extends BaseController /** * 导出羊只分组关联列表 */ +// @PreAuthorize("@ss.hasPermi('sheep_grouping:sheep_grouping:export')") +// @Log(title = "羊只分组关联", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(HttpServletResponse response, BasSheepGroupMapping basSheepGroupMapping) +// { +// List list = basSheepGroupMappingService.selectBasSheepGroupMappingList(basSheepGroupMapping); +// ExcelUtil util = new ExcelUtil(BasSheepGroupMapping.class); +// util.exportExcel(response, list, "羊只分组关联数据"); +// } @PreAuthorize("@ss.hasPermi('sheep_grouping:sheep_grouping:export')") @Log(title = "羊只分组关联", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, BasSheepGroupMapping basSheepGroupMapping) - { - List list = basSheepGroupMappingService.selectBasSheepGroupMappingList(basSheepGroupMapping); - ExcelUtil util = new ExcelUtil(BasSheepGroupMapping.class); - util.exportExcel(response, list, "羊只分组关联数据"); + public void exportJoin(HttpServletResponse response, + @RequestParam(required = false) Long sheepId, + @RequestParam(required = false) Long groupId, + @RequestParam(required = false) String bsManageTags) throws IOException { + + // 1. 把前端传来的耳号字符串转 List + List earList = null; + if (StringUtils.hasText(bsManageTags)) { + earList = Arrays.asList(bsManageTags.split("[,,\\s]+")); + } + + // 2. 先查出来(这里返回 List>) + List> list = basSheepGroupMappingService + .selectBasSheepGroupMappingList(sheepId, groupId, earList); + // 放在 stream 外面,避免每次都查缓存 + Map genderMap = new HashMap<>(); + List genderDict = DictUtils.getDictCache("sheep_gender"); + if (genderDict != null) { + genderDict.forEach(d -> genderMap.put(d.getDictValue(), d.getDictLabel())); + } + // 3. Map → VO + List voList = list.stream() + .map(m -> { + BasSheepGroupExportVo vo = new BasSheepGroupExportVo(); + vo.setGroupId(m.get("group_id") == null ? null : ((Number) m.get("group_id")).longValue()); + vo.setGroupName((String) m.get("group_name")); + vo.setBsManageTags((String) m.get("bs_manage_tags")); + vo.setVariety((String) m.get("variety")); + vo.setFamily((String) m.get("family")); + vo.setName((String) m.get("name")); + vo.setGender(m.get("gender") == null ? null : ((Number) m.get("gender")).longValue()); + Long genderCode = m.get("gender") == null ? null : ((Number) m.get("gender")).longValue(); + vo.setGender(genderCode); + vo.setGenderText(genderMap.get(String.valueOf(genderCode))); + vo.setBirthday(toDate(m.get("birthday"))); + vo.setMonthAge(m.get("month_age") == null ? null : ((Number) m.get("month_age")).longValue()); + vo.setParity(m.get("parity") == null ? null : ((Number) m.get("parity")).longValue()); + vo.setBirthWeight(m.get("birth_weight") == null ? null : ((Number) m.get("birth_weight")).longValue()); + + vo.setWeaningWeight(m.get("weaning_weight") == null ? null : ((Number) m.get("weaning_weight")).longValue()); + vo.setCurrentWeight(m.get("current_weight") == null ? null : ((Number) m.get("current_weight")).longValue()); + vo.setBreed((String) m.get("breed")); + vo.setFatherManageTags((String) m.get("father_manage_tags")); + vo.setMotherManageTags((String) m.get("mother_manage_tags")); + return vo; + }) + .collect(Collectors.toList()); + + // 4. 导出 + ExcelUtil util = new ExcelUtil<>(BasSheepGroupExportVo.class); + util.exportExcel(response, voList, "羊只分组关联数据"); } + + /** * 获取羊只分组关联详细信息 */ @@ -144,5 +225,13 @@ public class BasSheepGroupMappingController extends BaseController } + /** + * 树形分组下拉框 + */ + @GetMapping("/group/tree") + public AjaxResult groupTree() { + return success(basSheepGroupMappingService.selectGroupTree()); + } + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepTypeController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepTypeController.java index f847204..1667a96 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepTypeController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepTypeController.java @@ -1,12 +1,8 @@ package com.zhyc.module.base.controller; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; -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; diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaSheepfoldController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaSheepfoldController.java index 7b72788..0e3275c 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaSheepfoldController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaSheepfoldController.java @@ -14,7 +14,11 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import com.zhyc.common.utils.DictUtils; /** * 羊舍管理Controller @@ -119,4 +123,73 @@ public class DaSheepfoldController extends BaseController boolean exist = daSheepfoldService.checkSheepfoldNoExist(ranchId, sheepfoldTypeId, sheepfoldNo); return AjaxResult.success(exist); } + + @PreAuthorize("@ss.hasPermi('sheepfold_management:sheepfold_management:list')") + @GetMapping("/seatMap") + public AjaxResult seatMap() { + List flat = daSheepfoldService.selectDaSheepfoldList(new DaSheepfold()); + Map> tree = new LinkedHashMap<>(); + + for (DaSheepfold s : flat) { + Long ranchId = s.getRanchId(); + Long typeId = s.getSheepfoldTypeId(); + String foldNo = s.getSheepfoldNo(); + String rowNo = s.getRowNo(); + String columns = s.getColumns(); + + // 翻译字典 + String ranchName = DictUtils.getDictLabel("da_ranch", String.valueOf(ranchId)); + String typeName = DictUtils.getDictLabel("bas_sheepfold_type", String.valueOf(typeId)); + + // 牧场 + Map ranch = tree.computeIfAbsent(ranchId, k -> { + Map r = new LinkedHashMap<>(); + r.put("ranchId", k); + r.put("ranchName", ranchName); + r.put("types", new ArrayList<>()); + return r; + }); + + // 类型 + Map type = ((List>) ranch.get("types")).stream() + .filter(t -> typeId.equals(t.get("typeId"))) + .findFirst() + .orElseGet(() -> { + Map t = new LinkedHashMap<>(); + t.put("typeId", typeId); + t.put("typeName", typeName); + t.put("folds", new ArrayList<>()); + ((List>) ranch.get("types")).add(t); + return t; + }); + + // 羊舍 + Map fold = ((List>) type.get("folds")).stream() + .filter(f -> foldNo.equals(f.get("foldNo"))) + .findFirst() + .orElseGet(() -> { + Map f = new LinkedHashMap<>(); + f.put("foldNo", foldNo); + f.put("rows", new ArrayList<>()); + ((List>) type.get("folds")).add(f); + return f; + }); + + // 排 + Map row = ((List>) fold.get("rows")).stream() + .filter(r -> rowNo.equals(r.get("rowNo"))) + .findFirst() + .orElseGet(() -> { + Map newRow = new LinkedHashMap<>(); + newRow.put("rowNo", rowNo); + newRow.put("columns", new ArrayList<>()); + ((List>) fold.get("rows")).add(newRow); + return newRow; + }); + + // 将列号添加到对应的行 + ((List) row.get("columns")).add(columns); + } + return success(new ArrayList<>(tree.values())); + } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/controller/SheepFileController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/SheepFileController.java index 5046e7c..6302bb3 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/controller/SheepFileController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/SheepFileController.java @@ -6,7 +6,6 @@ import com.zhyc.common.core.domain.AjaxResult; import com.zhyc.common.core.page.TableDataInfo; import com.zhyc.common.enums.BusinessType; import com.zhyc.common.utils.poi.ExcelUtil; -import com.zhyc.module.base.domain.BasSheep; import com.zhyc.module.base.domain.SheepFile; import com.zhyc.module.base.service.ISheepFileService; import org.springframework.beans.factory.annotation.Autowired; diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasGroupTreeVo.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasGroupTreeVo.java new file mode 100644 index 0000000..82a55b2 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasGroupTreeVo.java @@ -0,0 +1,11 @@ +package com.zhyc.module.base.domain; +import lombok.Data; +import java.util.List; + +@Data +public class BasGroupTreeVo { + private Long groupId; + private String groupName; + private Long parentId; + private List children; +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheep.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheep.java index 047d376..db9c9bc 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheep.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheep.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroup.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroup.java index e0d1adb..51a1b67 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroup.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroup.java @@ -5,8 +5,6 @@ import com.zhyc.common.core.domain.TreeEntity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; /** * 分组管理对象 bas_sheep_group diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroupExportVo.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroupExportVo.java new file mode 100644 index 0000000..4c12a97 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroupExportVo.java @@ -0,0 +1,235 @@ +package com.zhyc.module.base.domain; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.zhyc.common.annotation.Excel; +import com.zhyc.common.core.domain.BaseEntity; + +import java.util.Date; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class BasSheepGroupExportVo extends BaseEntity { + private static final long serialVersionUID = 1L; + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + private Long groupId; + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + /** 分组名称 */ + @Excel(name = "分组名称") + private String groupName; + + /** 管理耳号 */ + @Excel(name = "耳号") + private String bsManageTags; + + /** 品种 */ + @Excel(name = "品种") + private String variety; + + /** 性别 */ + + private Long gender; + + public String getGenderText() { + return genderText; + } + + public void setGenderText(String genderText) { + this.genderText = genderText; + } + + /* 性别文本,真正导出的列 */ + @Excel(name = "性别") + private String genderText; + + + /** 羊只类型 */ + @Excel(name = "羊只类型") + private String name; + + + + /** 出生日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "出生日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date birthday; + + /** 胎次 */ + @Excel(name = "胎次") + private Long parity; + + + /** 月龄 */ + @Excel(name = "月龄") + private Long monthAge; + + /** 繁殖状态 */ + @Excel(name = "繁殖状态") + private String breed; + + /** 出生体重 */ + @Excel(name = "出生体重") + private Long birthWeight; + + + /** 断奶体重 */ + @Excel(name = "断奶体重") + private Long weaningWeight; + + /** 当前体重 */ + @Excel(name = "当前体重") + private Long currentWeight; + + + + + /** 父亲管理耳号 */ + @Excel(name = "父号") + private String fatherManageTags; + + + /** 母亲管理耳号 */ + @Excel(name = "母号") + private String motherManageTags; + + /** 家系 */ + @Excel(name = "家系") + private String family; + + + public String getBsManageTags() { + return bsManageTags; + } + + public void setBsManageTags(String bsManageTags) { + this.bsManageTags = bsManageTags; + } + + public String getVariety() { + return variety; + } + + public void setVariety(String variety) { + this.variety = variety; + } + + public String getFamily() { + return family; + } + + public void setFamily(String family) { + this.family = family; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getGender() { + return gender; + } + + public void setGender(Long gender) { + this.gender = gender; + } + + public Date getBirthday() { + return birthday; + } + + public void setBirthday(Date birthday) { + this.birthday = birthday; + } + + public Long getMonthAge() { + return monthAge; + } + + public void setMonthAge(Long monthAge) { + this.monthAge = monthAge; + } + + public Long getParity() { + return parity; + } + + public void setParity(Long parity) { + this.parity = parity; + } + + public Long getBirthWeight() { + return birthWeight; + } + + public void setBirthWeight(Long birthWeight) { + this.birthWeight = birthWeight; + } + + + + public Long getWeaningWeight() { + return weaningWeight; + } + + public void setWeaningWeight(Long weaningWeight) { + this.weaningWeight = weaningWeight; + } + + public Long getCurrentWeight() { + return currentWeight; + } + + public void setCurrentWeight(Long currentWeight) { + this.currentWeight = currentWeight; + } + + public String getBreed() { + return breed; + } + + public void setBreed(String breed) { + this.breed = breed; + } + + public String getFatherManageTags() { + return fatherManageTags; + } + + public void setFatherManageTags(String fatherManageTags) { + this.fatherManageTags = fatherManageTags; + } + + public String getMotherManageTags() { + return motherManageTags; + } + + public void setMotherManageTags(String motherManageTags) { + this.motherManageTags = motherManageTags; + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroupMapping.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroupMapping.java index eed7c36..9f1a9b2 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroupMapping.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroupMapping.java @@ -3,8 +3,6 @@ package com.zhyc.module.base.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -33,4 +31,13 @@ public class BasSheepGroupMapping extends BaseEntity @Excel(name = "分组ID") private Long groupId; + @Excel(name = "耳号") + private String bsManageTags; // 或者 List、其他类型 + public String getBsManageTags() { + return bsManageTags; + } + public void setBsManageTags(String bsManageTags) { + this.bsManageTags = bsManageTags; + } + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepType.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepType.java index edf709e..ca7cbe4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepType.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepType.java @@ -3,9 +3,6 @@ package com.zhyc.module.base.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; /** diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepVariety.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepVariety.java index 56e8a36..ed3ef4e 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepVariety.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepVariety.java @@ -3,8 +3,6 @@ package com.zhyc.module.base.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaRanch.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaRanch.java index ef3c938..22388e2 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaRanch.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaRanch.java @@ -3,9 +3,6 @@ package com.zhyc.module.base.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; /** diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaSheepfold.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaSheepfold.java index 0216feb..ab30928 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaSheepfold.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaSheepfold.java @@ -5,8 +5,6 @@ import com.zhyc.common.core.domain.BaseEntity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; /** * 羊舍管理对象 da_sheepfold @@ -21,6 +19,70 @@ public class DaSheepfold extends BaseEntity { private static final long serialVersionUID = 1L; + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getRanchId() { + return ranchId; + } + + public void setRanchId(Long ranchId) { + this.ranchId = ranchId; + } + + public String getSheepfoldName() { + return sheepfoldName; + } + + public void setSheepfoldName(String sheepfoldName) { + this.sheepfoldName = sheepfoldName; + } + + public Long getSheepfoldTypeId() { + return sheepfoldTypeId; + } + + public void setSheepfoldTypeId(Long sheepfoldTypeId) { + this.sheepfoldTypeId = sheepfoldTypeId; + } + + public String getSheepfoldNo() { + return sheepfoldNo; + } + + public void setSheepfoldNo(String sheepfoldNo) { + this.sheepfoldNo = sheepfoldNo; + } + + public String getRowNo() { + return rowNo; + } + + public void setRowNo(String rowNo) { + this.rowNo = rowNo; + } + + public String getColumns() { + return columns; + } + + public void setColumns(String columns) { + this.columns = columns; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + /** 羊舍id */ @Excel(name = "羊舍id") private Long id; diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/SheepFile.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/SheepFile.java index acefce9..460ab2d 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/domain/SheepFile.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/SheepFile.java @@ -6,8 +6,6 @@ import com.zhyc.common.core.domain.BaseEntity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import java.util.Date; diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepGroupMappingMapper.java b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepGroupMappingMapper.java index 2e4f1cc..60b5f39 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepGroupMappingMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepGroupMappingMapper.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import com.zhyc.module.base.domain.BasSheepGroupMapping; +import com.zhyc.module.base.domain.BasGroupTreeVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** @@ -85,4 +86,6 @@ public interface BasSheepGroupMappingMapper List selectListByGroupId(@Param("groupId") Long groupId); + List selectGroupTree(); + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepMapper.java b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepMapper.java index 4baaf89..a953f9a 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepMapper.java @@ -3,6 +3,7 @@ package com.zhyc.module.base.mapper; import java.util.List; import com.zhyc.module.base.domain.BasSheep; +import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** @@ -11,6 +12,7 @@ import org.apache.ibatis.annotations.Param; * @author ruoyi * @date 2025-07-15 */ +@Mapper public interface BasSheepMapper { /** diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepGroupMappingService.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepGroupMappingService.java index d6b5c7a..8b6964c 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepGroupMappingService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepGroupMappingService.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import com.zhyc.common.core.domain.AjaxResult; +import com.zhyc.module.base.domain.BasGroupTreeVo; import com.zhyc.module.base.domain.BasSheepGroupMapping; /** @@ -70,4 +71,9 @@ public interface IBasSheepGroupMappingService public int deleteBasSheepGroupMappingById(Long id); public AjaxResult addByEarTags(List earTags, Long groupId); + + /** + * 树形分组下拉框 + */ + List selectGroupTree(); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepTypeService.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepTypeService.java index 5f9721d..efba4f1 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepTypeService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepTypeService.java @@ -2,7 +2,6 @@ package com.zhyc.module.base.service; import java.util.List; -import com.zhyc.module.base.domain.BasSheep; import com.zhyc.module.base.domain.BasSheepType; /** diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepGroupMappingServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepGroupMappingServiceImpl.java index 74418da..79a61b6 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepGroupMappingServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepGroupMappingServiceImpl.java @@ -4,12 +4,14 @@ import java.util.*; import java.util.stream.Collectors; import com.zhyc.common.core.domain.AjaxResult; +import com.zhyc.module.base.domain.BasGroupTreeVo; import com.zhyc.module.base.domain.BasSheepGroupMapping; import com.zhyc.module.base.mapper.BasSheepGroupMappingMapper; import com.zhyc.module.base.service.IBasSheepGroupMappingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + /** * 羊只分组关联Service业务层处理 * @@ -185,5 +187,29 @@ public class BasSheepGroupMappingServiceImpl implements IBasSheepGroupMappingSer } + private List buildTree(List all) { + Map map = all.stream() + .collect(Collectors.toMap(BasGroupTreeVo::getGroupId, v -> v)); + List tree = new ArrayList<>(); + for (BasGroupTreeVo n : all) { + if (n.getParentId() == null || n.getParentId() == 0L) { + tree.add(n); + } else { + BasGroupTreeVo parent = map.get(n.getParentId()); + if (parent != null) { + if (parent.getChildren() == null) { + parent.setChildren(new ArrayList<>()); + } + parent.getChildren().add(n); + } + } + } + return tree; + } + @Override + public List selectGroupTree() { + List list = basSheepGroupMappingMapper.selectGroupTree(); + return buildTree(list); + } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepTypeServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepTypeServiceImpl.java index 4c1a362..1f1c3ba 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepTypeServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepTypeServiceImpl.java @@ -2,7 +2,6 @@ package com.zhyc.module.base.service.impl; import java.util.List; -import com.zhyc.module.base.domain.BasSheep; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zhyc.module.base.mapper.BasSheepTypeMapper; diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/SheepFileServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/SheepFileServiceImpl.java index 351a4ad..929321c 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/SheepFileServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/SheepFileServiceImpl.java @@ -1,6 +1,5 @@ package com.zhyc.module.base.service.impl; -import com.zhyc.common.utils.DateUtils; import com.zhyc.module.base.domain.SheepFile; import com.zhyc.module.base.mapper.SheepFileMapper; import com.zhyc.module.base.service.ISheepFileService; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/controller/DiagnosisController.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/controller/DiagnosisController.java index 39149cc..3b7aff6 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/controller/DiagnosisController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/controller/DiagnosisController.java @@ -80,6 +80,17 @@ public class DiagnosisController extends BaseController return toAjax(diagnosisService.insertDiagnosis(diagnosis)); } + /** + * 新增批量诊疗结果 + */ + @PreAuthorize("@ss.hasPermi('diagnosis:diagnosis:add')") + @Log(title = "诊疗结果", businessType = BusinessType.INSERT) + @PostMapping("/adds") + public AjaxResult adds(@RequestBody Diagnosis diagnosis) + { + return toAjax(diagnosisService.insertDiagnosisList(diagnosis)); + } + /** * 修改诊疗结果 */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/controller/HealthController.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/controller/HealthController.java index 5795ca8..c1798ca 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/controller/HealthController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/controller/HealthController.java @@ -3,6 +3,7 @@ package com.zhyc.module.biosafety.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.zhyc.common.utils.SecurityUtils; import com.zhyc.module.biosafety.service.IHealthService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -97,7 +98,7 @@ public class HealthController extends BaseController */ @PreAuthorize("@ss.hasPermi('biosafety:health:remove')") @Log(title = "保健", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") + @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(healthService.deleteHealthByIds(ids)); diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Deworm.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Deworm.java index c3b60c5..55d20a5 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Deworm.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Deworm.java @@ -7,13 +7,11 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; /** - * 驱虫对象 sw_deworm + * 驱虫对象 sw_dih * * @author ruoyi * @date 2025-07-15 diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Diagnosis.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Diagnosis.java index 05fe6ad..4280ff2 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Diagnosis.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Diagnosis.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -29,6 +27,7 @@ public class Diagnosis extends BaseEntity /** 治疗记录id */ @Excel(name = "治疗记录") private Long treatId; + private Integer[] treatIds; /** 羊只id */ @Excel(name = "羊只耳号") diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Disinfect.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Disinfect.java index 773ec33..4c6847d 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Disinfect.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Disinfect.java @@ -7,8 +7,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -60,6 +58,8 @@ public class Disinfect extends BaseEntity /** 备注 */ @Excel(name = "备注") private String comment; +/** 药品名称用于查询*/ + private String mediName; // 药品使用 private List usageDetails; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Immunity.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Immunity.java index 1a77298..be3a25c 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Immunity.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Immunity.java @@ -7,8 +7,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineItems.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineItems.java index 807962a..3b9fc71 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineItems.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineItems.java @@ -3,8 +3,6 @@ package com.zhyc.module.biosafety.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineReport.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineReport.java index 0fa8f88..d20a3d4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineReport.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineReport.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; import org.apache.ibatis.type.Alias; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineSample.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineSample.java index e128a0e..53e5129 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineSample.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/QuarantineSample.java @@ -3,8 +3,6 @@ package com.zhyc.module.biosafety.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwDisease.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwDisease.java index 65ab2c1..0f716be 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwDisease.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwDisease.java @@ -3,8 +3,6 @@ package com.zhyc.module.biosafety.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.TreeEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicine.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicine.java index 247ef20..0325467 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicine.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicine.java @@ -3,8 +3,6 @@ package com.zhyc.module.biosafety.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsage.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsage.java index 95a6aea..13843e2 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsage.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsage.java @@ -1,12 +1,12 @@ package com.zhyc.module.biosafety.domain; + +import java.util.Date; import java.util.List; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -30,6 +30,18 @@ public class SwMedicineUsage extends BaseEntity @Excel(name = "使用名称") private String name; + /** 羊舍名称 */ + @Excel(name = "使用名称") + private String sheepfoldName; + private Integer sheepfoldId; + /** 耳号 */ + @Excel(name = "耳号") + private String sheepNo; + private Integer sheepId; + /** 使用时间 */ + @Excel(name = "使用时间") + private Date datetime; + /** 使用类型 */ @Excel(name = "使用类型") private String useType; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsageDetails.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsageDetails.java index 86eb829..1b67654 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsageDetails.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsageDetails.java @@ -1,13 +1,14 @@ package com.zhyc.module.biosafety.domain; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; +import java.util.Date; + /** * 药品使用记录详情对象 sw_medicine_usage_details * @@ -48,6 +49,11 @@ public class SwMedicineUsageDetails extends BaseEntity @Excel(name = "使用方法") private String usageId; + /** 使用时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "使用时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date usetime; + /** 生产厂家 */ @Excel(name = "生产厂家") private String manufacturer; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwPrescription.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwPrescription.java index ae22e43..4832ff4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwPrescription.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwPrescription.java @@ -49,90 +49,4 @@ public class SwPrescription extends BaseEntity /** 处方详情信息 */ private List swPresDetailList; - public void setId(Long id) - { - this.id = id; - } - - public Long getId() - { - return id; - } - - public void setNo(String no) - { - this.no = no; - } - - public String getNo() - { - return no; - } - - public void setName(String name) - { - this.name = name; - } - - public String getName() - { - return name; - } - - public void setPersType(Integer persType) - { - this.persType = persType; - } - - public Integer getPersType() - { - return persType; - } - - public void setComment(String comment) - { - this.comment = comment; - } - - public String getComment() - { - return comment; - } - - public void setStatus(Integer status) - { - this.status = status; - } - - public Integer getStatus() - { - return status; - } - - public List getSwPresDetailList() - { - return swPresDetailList; - } - - public void setSwPresDetailList(List swPresDetailList) - { - this.swPresDetailList = swPresDetailList; - } - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("no", getNo()) - .append("name", getName()) - .append("persType", getPersType()) - .append("comment", getComment()) - .append("status", getStatus()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("swPresDetailList", getSwPresDetailList()) - .toString(); - } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwUnit.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwUnit.java index 9820928..aeecc86 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwUnit.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwUnit.java @@ -3,8 +3,6 @@ package com.zhyc.module.biosafety.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwUsage.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwUsage.java index 450c220..5a3ebbc 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwUsage.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwUsage.java @@ -3,8 +3,6 @@ package com.zhyc.module.biosafety.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Treatment.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Treatment.java index e4217fc..653dc53 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Treatment.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/Treatment.java @@ -1,6 +1,5 @@ package com.zhyc.module.biosafety.domain; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -8,8 +7,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -92,6 +89,10 @@ public class Treatment extends BaseEntity /** 兽医 */ @Excel(name = "兽医") private String veterinary; + /** 治疗状态 */ + @Excel(name = "治疗状态") + private String status; + /** 药品使用记录id */ @Excel(name = "药品使用记录id") diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/mapper/TreatmentMapper.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/mapper/TreatmentMapper.java index 643d9a0..1d48767 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/mapper/TreatmentMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/mapper/TreatmentMapper.java @@ -63,4 +63,7 @@ public interface TreatmentMapper public int deleteTreatmentByIds(Long[] ids); int insertTreatmentList(List treatments); + + + List selectTreatmentStatus(Long sheepId); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/IDiagnosisService.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/IDiagnosisService.java index d88f954..8f47fed 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/IDiagnosisService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/IDiagnosisService.java @@ -59,4 +59,6 @@ public interface IDiagnosisService * @return 结果 */ public int deleteDiagnosisById(Long id); + + int insertDiagnosisList(Diagnosis diagnosis); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/ITreatmentService.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/ITreatmentService.java index ed72447..558ccc4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/ITreatmentService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/ITreatmentService.java @@ -3,7 +3,6 @@ package com.zhyc.module.biosafety.service; import java.util.List; import com.zhyc.module.biosafety.domain.Treatment; -import org.springframework.transaction.annotation.Transactional; /** * 治疗记录Service接口 diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DewormServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DewormServiceImpl.java index c6f850c..9e1d867 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DewormServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DewormServiceImpl.java @@ -10,7 +10,6 @@ import com.zhyc.module.base.mapper.SheepFileMapper; import com.zhyc.module.biosafety.domain.Deworm; import com.zhyc.module.biosafety.domain.SwMedicineUsage; import com.zhyc.module.biosafety.domain.SwMedicineUsageDetails; -import com.zhyc.module.biosafety.domain.Treatment; import com.zhyc.module.biosafety.mapper.SwMedicineUsageMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -73,12 +72,13 @@ public class DewormServiceImpl implements IDewormService @Transactional public int insertDeworm(Deworm deworm) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); // 使用记录的文件 SwMedicineUsage medicineUsage = new SwMedicineUsage(); medicineUsage.setSwMedicineUsageDetailsList(deworm.getUsageDetails()); medicineUsage.setName("羊只驱虫"); medicineUsage.setUseType("1"); + medicineUsage.setDatetime(deworm.getDatetime()); List deworms = new ArrayList<>(); @@ -96,6 +96,8 @@ public class DewormServiceImpl implements IDewormService dew.setGender(String.valueOf(sheepFile.getGender())); dew.setBreed(sheepFile.getBreed()); dew.setParity(sheepFile.getParity()); + + medicineUsage.setSheepId(sheepId); // 获取药品使用记录的id Integer usageId = medicineUsageService.insertSwMedicineUsage(medicineUsage); dew.setUsageId(usageId); @@ -116,7 +118,7 @@ public class DewormServiceImpl implements IDewormService @Transactional public int updateDeworm(Deworm deworm) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); for (SwMedicineUsageDetails usageDetail : deworm.getUsageDetails()) { usageDetail.setMediUsage(deworm.getUsageId()); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DiagnosisServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DiagnosisServiceImpl.java index c17e8ec..8447684 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DiagnosisServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DiagnosisServiceImpl.java @@ -1,5 +1,6 @@ package com.zhyc.module.biosafety.service.impl; +import java.util.Date; import java.util.List; import java.util.Objects; @@ -9,13 +10,18 @@ import com.zhyc.module.base.domain.BasSheep; import com.zhyc.module.base.domain.SheepFile; import com.zhyc.module.base.mapper.BasSheepMapper; import com.zhyc.module.base.mapper.SheepFileMapper; +import com.zhyc.module.biosafety.domain.Treatment; import com.zhyc.module.biosafety.mapper.DiagnosisMapper; +import com.zhyc.module.biosafety.mapper.TreatmentMapper; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zhyc.module.biosafety.domain.Diagnosis; import com.zhyc.module.biosafety.service.IDiagnosisService; import org.springframework.transaction.annotation.Transactional; + + /** * 诊疗结果Service业务层处理 * @@ -31,6 +37,8 @@ public class DiagnosisServiceImpl implements IDiagnosisService private SheepFileMapper sheepFileMapper; @Autowired private BasSheepMapper sheepMapper; + @Autowired + private TreatmentMapper treatmentMapper; /** * 查询诊疗结果 @@ -72,19 +80,90 @@ public class DiagnosisServiceImpl implements IDiagnosisService diagnosis.setGender(String.valueOf(sheepFile.getGender())); diagnosis.setMonthAge(sheepFile.getMonthAge()); - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); diagnosis.setCreateBy(username); diagnosis.setCreateTime(DateUtils.getNowDate()); - if (!Objects.equals(sheepFile.getSheepfoldId(), diagnosis.getSheepfoldId())){ - BasSheep basSheep = new BasSheep(); - basSheep.setId(diagnosis.getSheepId()); - basSheep.setSheepfoldId(diagnosis.getSheepfoldId()); - sheepMapper.updateBasSheep(basSheep); + + if (diagnosis.getSheepfoldId() != null) + if (!Objects.equals(sheepFile.getSheepfoldId(), diagnosis.getSheepfoldId())) { + BasSheep basSheep = new BasSheep(); + basSheep.setId(diagnosis.getSheepId()); + basSheep.setSheepfoldId(diagnosis.getSheepfoldId()); + sheepMapper.updateBasSheep(basSheep); + } + +// 更改治疗记录的状态 + Treatment treatment = new Treatment(); + treatment.setId(diagnosis.getTreatId()); + if (diagnosis.getResult().equals("0")){ + treatment.setStatus("-1"); + treatmentMapper.updateTreatment(treatment); + }else if (diagnosis.getResult().equals("1")){ + treatment.setStatus("2"); + treatmentMapper.updateTreatment(treatment); } // 转入其他羊舍 return diagnosisMapper.insertDiagnosis(diagnosis); } + + @Override + @Transactional + public int insertDiagnosisList(Diagnosis diagnosis) { + if (diagnosis.getTreatIds() != null && diagnosis.getTreatIds().length > 0){ + for (Integer treatId : diagnosis.getTreatIds()) { + System.out.println(treatId); + Treatment treatment = treatmentMapper.selectTreatmentById(Long.valueOf(treatId)); + System.out.println(treatment); +// BasSheep basSheep = sheepMapper.selectBasSheepById(treatment.getSheepId()); + + Diagnosis diag = new Diagnosis(); + BeanUtils.copyProperties(treatment,diag); + diag.setResult(diagnosis.getResult()); + diag.setParity(String.valueOf(treatment.getParity())); + + + // treatment 和 diagnosis 是你的两个实体对象 + Date start = treatment.getDatetime(); // 已经是 Date + Date end = diagnosis.getDatetime(); // 已经是 Date + diag.setBegindate(start); + diag.setEnddate(end); + long oneDayMillis = 24 * 60 * 60 * 1000L; + long days = (end.getTime() / oneDayMillis) - (start.getTime() / oneDayMillis); + if (days<0){ + days=0; + } + + diag.setTreatDay(days); + diag.setTreatId(treatment.getId()); + + + String username = SecurityUtils.getLoginUser().getUser().getNickName(); + diag.setCreateBy(username); + diag.setCreateTime(DateUtils.getNowDate()); + diagnosisMapper.insertDiagnosis(diag); + treatment.setDiagId(diag.getId()); + + // 更改治疗记录的状态 + if (diagnosis.getResult().equals("0")){ + treatment.setStatus("-1"); + treatmentMapper.updateTreatment(treatment); + }else if (diagnosis.getResult().equals("1")){ + treatment.setStatus("2"); + treatmentMapper.updateTreatment(treatment); + } + if (diagnosis.getSheepfoldId() != null){ + BasSheep basSheep = new BasSheep(); + basSheep.setId(diagnosis.getSheepId()); + basSheep.setSheepfoldId(diagnosis.getSheepfoldId()); + sheepMapper.updateBasSheep(basSheep); + } + } + } + + return 1; + } + /** * 修改诊疗结果 * @@ -98,7 +177,7 @@ public class DiagnosisServiceImpl implements IDiagnosisService BasSheep basSheep = new BasSheep(); basSheep.setId(diagnosis.getSheepId()); basSheep.setSheepfoldId(diagnosis.getSheepfoldId()); - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); basSheep.setUpdateBy(username); basSheep.setUpdateTime(DateUtils.getNowDate()); diagnosis.setUpdateBy(username); @@ -130,4 +209,5 @@ public class DiagnosisServiceImpl implements IDiagnosisService { return diagnosisMapper.deleteDiagnosisById(id); } + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DisinfectServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DisinfectServiceImpl.java index 24918ef..8e98bf4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DisinfectServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/DisinfectServiceImpl.java @@ -5,9 +5,7 @@ import java.util.List; import com.zhyc.common.utils.DateUtils; import com.zhyc.common.utils.SecurityUtils; import com.zhyc.common.utils.bean.BeanUtils; -import com.zhyc.module.base.domain.SheepFile; import com.zhyc.module.base.mapper.SheepFileMapper; -import com.zhyc.module.biosafety.domain.Deworm; import com.zhyc.module.biosafety.domain.SwMedicineUsage; import com.zhyc.module.biosafety.domain.SwMedicineUsageDetails; import com.zhyc.module.biosafety.mapper.SwMedicineUsageMapper; @@ -75,12 +73,13 @@ public class DisinfectServiceImpl implements IDisinfectService @Override public int insertDisinfect(Disinfect disinfect) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); // 使用记录的文件 SwMedicineUsage medicineUsage = new SwMedicineUsage(); medicineUsage.setSwMedicineUsageDetailsList(disinfect.getUsageDetails()); medicineUsage.setName("羊舍消毒"); medicineUsage.setUseType("3"); + medicineUsage.setDatetime(disinfect.getDatetime()); List disinfects = new ArrayList<>(); @@ -92,6 +91,8 @@ public class DisinfectServiceImpl implements IDisinfectService Disinfect dis = new Disinfect(); BeanUtils.copyProperties(disinfect,dis); dis.setSheepfoldId(sheepfold); + + medicineUsage.setSheepfoldId(sheepfold); // 获取药品使用记录的id Integer usageId = medicineUsageService.insertSwMedicineUsage(medicineUsage); dis.setUsageId(usageId); @@ -116,7 +117,7 @@ public class DisinfectServiceImpl implements IDisinfectService } medicineUsageMapper.deleteSwMedicineUsageDetailsByMediUsage(disinfect.getUsageId()); medicineUsageMapper.batchSwMedicineUsageDetails(disinfect.getUsageDetails()); - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); disinfect.setUpdateBy(username); disinfect.setUpdateTime(DateUtils.getNowDate()); return disinfectMapper.updateDisinfect(disinfect); diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/HealthServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/HealthServiceImpl.java index bef0199..1d5a4e0 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/HealthServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/HealthServiceImpl.java @@ -1,5 +1,6 @@ package com.zhyc.module.biosafety.service.impl; +import java.beans.Transient; import java.util.ArrayList; import java.util.List; import com.zhyc.common.utils.DateUtils; @@ -7,7 +8,6 @@ import com.zhyc.common.utils.SecurityUtils; import com.zhyc.common.utils.bean.BeanUtils; import com.zhyc.module.base.domain.SheepFile; import com.zhyc.module.base.mapper.SheepFileMapper; -import com.zhyc.module.biosafety.domain.Health; import com.zhyc.module.biosafety.domain.SwMedicineUsage; import com.zhyc.module.biosafety.domain.SwMedicineUsageDetails; import com.zhyc.module.biosafety.mapper.SwMedicineUsageMapper; @@ -71,16 +71,18 @@ public class HealthServiceImpl implements IHealthService * @param health 保健 * @return 结果 */ + @Transient @Override public int insertHealth(Health health) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); // 使用记录的文件 SwMedicineUsage medicineUsage = new SwMedicineUsage(); medicineUsage.setSwMedicineUsageDetailsList(health.getUsageDetails()); medicineUsage.setName("羊只保健"); medicineUsage.setUseType("2"); + medicineUsage.setDatetime(health.getDatetime()); List healths = new ArrayList<>(); health.setCreateBy(username); @@ -97,6 +99,7 @@ public class HealthServiceImpl implements IHealthService heal.setBreed(sheepFile.getBreed()); heal.setParity(sheepFile.getParity()); + medicineUsage.setSheepId(sheepId); // 获取药品使用记录的id Integer usageId = medicineUsageService.insertSwMedicineUsage(medicineUsage); @@ -120,7 +123,7 @@ public class HealthServiceImpl implements IHealthService } medicineUsageMapper.deleteSwMedicineUsageDetailsByMediUsage(health.getUsageId()); medicineUsageMapper.batchSwMedicineUsageDetails(health.getUsageDetails()); - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); health.setUpdateBy(username); health.setUpdateTime(DateUtils.getNowDate()); return healthMapper.updateHealth(health); diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/ImmunityServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/ImmunityServiceImpl.java index 6556faf..7649217 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/ImmunityServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/ImmunityServiceImpl.java @@ -7,7 +7,6 @@ import com.zhyc.common.utils.SecurityUtils; import com.zhyc.common.utils.bean.BeanUtils; import com.zhyc.module.base.domain.SheepFile; import com.zhyc.module.base.mapper.SheepFileMapper; -import com.zhyc.module.biosafety.domain.Deworm; import com.zhyc.module.biosafety.domain.SwMedicineUsage; import com.zhyc.module.biosafety.domain.SwMedicineUsageDetails; import com.zhyc.module.biosafety.mapper.SwMedicineUsageMapper; @@ -76,15 +75,17 @@ public class ImmunityServiceImpl implements IImmunityService @Override public int insertImmunity(Immunity immunity) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); // 使用记录的文件 SwMedicineUsage medicineUsage = new SwMedicineUsage(); medicineUsage.setSwMedicineUsageDetailsList(immunity.getUsageDetails()); medicineUsage.setName("羊只免疫"); medicineUsage.setUseType("0"); + medicineUsage.setDatetime(immunity.getDatetime()); medicineUsage.setCreateBy(username); + List immunities = new ArrayList<>(); immunity.setUpdateBy(username); @@ -102,6 +103,8 @@ public class ImmunityServiceImpl implements IImmunityService imm.setGender(String.valueOf(sheepFile.getGender())); imm.setBreed(sheepFile.getBreed()); imm.setParity(sheepFile.getParity()); + + medicineUsage.setSheepId(sheepId); // 获取药品使用记录的id Integer usageId = medicineUsageService.insertSwMedicineUsage(medicineUsage); @@ -129,6 +132,8 @@ public class ImmunityServiceImpl implements IImmunityService } medicineUsageMapper.deleteSwMedicineUsageDetailsByMediUsage(immunity.getUsageId()); medicineUsageMapper.batchSwMedicineUsageDetails(immunity.getUsageDetails()); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); + immunity.setUpdateBy(username); immunity.setUpdateTime(DateUtils.getNowDate()); return immunityMapper.updateImmunity(immunity); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/QuarantineReportServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/QuarantineReportServiceImpl.java index 4c55e78..ce4fa2f 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/QuarantineReportServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/QuarantineReportServiceImpl.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import com.zhyc.common.utils.DateUtils; import com.zhyc.common.utils.SecurityUtils; -import com.zhyc.common.utils.StringUtils; import com.zhyc.common.utils.bean.BeanUtils; import com.zhyc.module.base.domain.SheepFile; import com.zhyc.module.base.service.impl.SheepFileServiceImpl; @@ -61,10 +60,10 @@ public class QuarantineReportServiceImpl implements IQuarantineReportService @Override public int insertQuarantineReport(QuarantineReport quarantineReport) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); quarantineReport.setCreateBy(username); quarantineReport.setCreateTime(DateUtils.getNowDate()); - if (quarantineReport.getResult()==null){ + if (quarantineReport.getResult()==null || quarantineReport.getResult().length()==0){ quarantineReport.setStatus(0); }else { quarantineReport.setStatus(1); @@ -97,7 +96,7 @@ public class QuarantineReportServiceImpl implements IQuarantineReportService @Override public int updateQuarantineReport(QuarantineReport quarantineReport) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); quarantineReport.setUpdateBy(username); quarantineReport.setUpdateTime(DateUtils.getNowDate()); return quarantineReportMapper.updateQuarantineReport(quarantineReport); diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwMedicineUsageServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwMedicineUsageServiceImpl.java index d5d06f9..31d13a6 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwMedicineUsageServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwMedicineUsageServiceImpl.java @@ -59,7 +59,7 @@ public class SwMedicineUsageServiceImpl implements ISwMedicineUsageService @Override public int insertSwMedicineUsage(SwMedicineUsage swMedicineUsage) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); swMedicineUsage.setCreateBy(username); swMedicineUsage.setCreateTime(DateUtils.getNowDate()); int rows = swMedicineUsageMapper.insertSwMedicineUsage(swMedicineUsage); @@ -77,7 +77,7 @@ public class SwMedicineUsageServiceImpl implements ISwMedicineUsageService @Override public int updateSwMedicineUsage(SwMedicineUsage swMedicineUsage) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); swMedicineUsage.setUpdateBy(username); swMedicineUsage.setUpdateTime(DateUtils.getNowDate()); swMedicineUsageMapper.deleteSwMedicineUsageDetailsByMediUsage(swMedicineUsage.getId()); diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwPrescriptionServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwPrescriptionServiceImpl.java index 59841b8..1a3c909 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwPrescriptionServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwPrescriptionServiceImpl.java @@ -59,7 +59,8 @@ public class SwPrescriptionServiceImpl implements ISwPrescriptionService @Override public int insertSwPrescription(SwPrescription swPrescription) { - String username = SecurityUtils.getUsername(); +// 获取创建人的用户名称 + String username = SecurityUtils.getLoginUser().getUser().getNickName(); swPrescription.setCreateBy(username); swPrescription.setCreateTime(DateUtils.getNowDate()); int rows = swPrescriptionMapper.insertSwPrescription(swPrescription); @@ -77,7 +78,7 @@ public class SwPrescriptionServiceImpl implements ISwPrescriptionService @Override public int updateSwPrescription(SwPrescription swPrescription) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); swPrescription.setUpdateBy(username); swPrescription.setUpdateTime(DateUtils.getNowDate()); swPrescriptionMapper.deleteSwPresDetailByPersId(swPrescription.getId()); diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/TreatmentServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/TreatmentServiceImpl.java index 7ecd944..abb7d57 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/TreatmentServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/TreatmentServiceImpl.java @@ -7,9 +7,10 @@ import com.zhyc.common.utils.SecurityUtils; import com.zhyc.common.utils.bean.BeanUtils; import com.zhyc.module.base.domain.SheepFile; import com.zhyc.module.base.mapper.SheepFileMapper; -import com.zhyc.module.base.service.impl.SheepFileServiceImpl; +import com.zhyc.module.biosafety.domain.Diagnosis; import com.zhyc.module.biosafety.domain.SwMedicineUsage; import com.zhyc.module.biosafety.domain.SwMedicineUsageDetails; +import com.zhyc.module.biosafety.mapper.DiagnosisMapper; import com.zhyc.module.biosafety.mapper.SwMedicineUsageMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -35,6 +36,8 @@ public class TreatmentServiceImpl implements ITreatmentService private SwMedicineUsageMapper medicineUsageMapper; @Autowired private SheepFileMapper sheepFileMapper; + @Autowired + private DiagnosisMapper diagnosisMapper; /** * 查询治疗记录 @@ -48,7 +51,9 @@ public class TreatmentServiceImpl implements ITreatmentService Treatment treatment = treatmentMapper.selectTreatmentById(id); // 获取药品使用记录 SwMedicineUsage swMedicineUsage = medicineUsageService.selectSwMedicineUsageById(treatment.getUsageId()); - treatment.setUsageDetails(swMedicineUsage.getSwMedicineUsageDetailsList()); + if (swMedicineUsage!=null){ + treatment.setUsageDetails(swMedicineUsage.getSwMedicineUsageDetailsList()); + } return treatment; } @@ -74,16 +79,18 @@ public class TreatmentServiceImpl implements ITreatmentService @Transactional public int insertTreatment(Treatment treatment) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); // 使用记录的文件 SwMedicineUsage medicineUsage = new SwMedicineUsage(); medicineUsage.setSwMedicineUsageDetailsList(treatment.getUsageDetails()); medicineUsage.setName("羊只治疗"); medicineUsage.setUseType("4"); + medicineUsage.setDatetime(treatment.getDatetime()); medicineUsage.setCreateBy(username); medicineUsage.setCreateTime(DateUtils.getNowDate()); // 新增单挑数据 if (treatment.getSheepId()!=null){ + medicineUsage.setSheepId(Math.toIntExact(treatment.getSheepId())); // 药品使用记录 Integer id=medicineUsageService.insertSwMedicineUsage(medicineUsage); // 药品使用记录id @@ -109,6 +116,8 @@ public class TreatmentServiceImpl implements ITreatmentService treat.setParity(sheepFile.getParity()); treat.setLactDay(sheepFile.getLactationDay()); treat.setGestDay(sheepFile.getGestationDay()); + + medicineUsage.setSheepId(Integer.valueOf(sheepId)); // 获取药品使用记录的id Integer usageId = medicineUsageService.insertSwMedicineUsage(medicineUsage); System.out.println(medicineUsage); @@ -135,7 +144,7 @@ public class TreatmentServiceImpl implements ITreatmentService @Transactional public int updateTreatment(Treatment treatment) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); for (SwMedicineUsageDetails usageDetail : treatment.getUsageDetails()) { usageDetail.setMediUsage(treatment.getUsageId()); } @@ -173,4 +182,21 @@ public class TreatmentServiceImpl implements ITreatmentService { return treatmentMapper.deleteTreatmentById(id); } + + public void updateTreatmentStatus(Long sheepId) { + List treatments=treatmentMapper.selectTreatmentStatus(sheepId); + Diagnosis diagnosis = new Diagnosis(); + for (Treatment treatment : treatments) { + if (treatment.getDiagId()!=null){ + diagnosis.setId(treatment.getDiagId()); + diagnosis.setResult("-1"); + diagnosisMapper.updateDiagnosis(diagnosis); + if (treatment.getDiagId()!=null){ + Treatment treat = new Treatment(); + treat.setId(treatment.getId()); + treatmentMapper.updateTreatment(treat); + } + } + } + } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/common/controller/UserController.java b/zhyc-module/src/main/java/com/zhyc/module/common/controller/UserController.java new file mode 100644 index 0000000..988f4a5 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/common/controller/UserController.java @@ -0,0 +1,27 @@ +package com.zhyc.module.common.controller; + +import com.zhyc.common.core.domain.AjaxResult; +import com.zhyc.module.common.domain.UserPost; + +import com.zhyc.module.common.service.UserPostService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +//人员用户 +@RestController +@RequestMapping("/user") +public class UserController { + @Autowired + UserPostService userPostService; + + @GetMapping() + public AjaxResult getUserPost(String postCode){ + List list = userPostService.getUserPostListByCode(postCode); + return AjaxResult.success(list); + } + +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/common/domain/UserPost.java b/zhyc-module/src/main/java/com/zhyc/module/common/domain/UserPost.java new file mode 100644 index 0000000..9160779 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/common/domain/UserPost.java @@ -0,0 +1,14 @@ +package com.zhyc.module.common.domain; + +import lombok.Data; + +@Data +public class UserPost { +// 用户名 + private String nickName; +// 用户 + private String postName; +// 岗位编码 + private String postCode; + +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/common/mapper/UserPostMapper.java b/zhyc-module/src/main/java/com/zhyc/module/common/mapper/UserPostMapper.java new file mode 100644 index 0000000..69c9b9d --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/common/mapper/UserPostMapper.java @@ -0,0 +1,12 @@ +package com.zhyc.module.common.mapper; + +import com.zhyc.module.common.domain.UserPost; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface UserPostMapper { + + List getUserPostListByCode(String postCode); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/common/service/UserPostService.java b/zhyc-module/src/main/java/com/zhyc/module/common/service/UserPostService.java new file mode 100644 index 0000000..0f0204c --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/common/service/UserPostService.java @@ -0,0 +1,9 @@ +package com.zhyc.module.common.service; + +import com.zhyc.module.common.domain.UserPost; + +import java.util.List; + +public interface UserPostService { + List getUserPostListByCode(String postCode); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/common/service/impl/UserPostServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/common/service/impl/UserPostServiceImpl.java new file mode 100644 index 0000000..31dc447 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/common/service/impl/UserPostServiceImpl.java @@ -0,0 +1,19 @@ +package com.zhyc.module.common.service.impl; + +import com.zhyc.module.common.domain.UserPost; +import com.zhyc.module.common.mapper.UserPostMapper; +import com.zhyc.module.common.service.UserPostService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class UserPostServiceImpl implements UserPostService { + @Autowired + UserPostMapper userPostMapper; + @Override + public List getUserPostListByCode(String postCode) { + return userPostMapper.getUserPostListByCode(postCode); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpMilkInOutStoreController.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpMilkInOutStoreController.java index 44cbccb..1d7f8e5 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpMilkInOutStoreController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpMilkInOutStoreController.java @@ -4,7 +4,6 @@ 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.module.dairyProducts.domain.NpMilkInOutStore; import com.zhyc.module.dairyProducts.service.INpMilkInOutStoreService; import com.zhyc.common.utils.poi.ExcelUtil; import com.zhyc.common.core.page.TableDataInfo; 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 index 9447a07..f0cc313 100644 --- 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 @@ -2,13 +2,10 @@ 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 { 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 8b1869f..6b6ea52 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 @@ -19,7 +19,6 @@ import com.zhyc.common.enums.BusinessType; import com.zhyc.module.dairyProducts.domain.XzParityCorrection; import com.zhyc.module.dairyProducts.service.IXzParityCorrectionService; import com.zhyc.common.utils.poi.ExcelUtil; -import com.zhyc.common.core.page.TableDataInfo; /** * 胎次校正Controller diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpFreshMilkInsp.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpFreshMilkInsp.java index 64e71f6..d8631f1 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpFreshMilkInsp.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpFreshMilkInsp.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpRawMilkInspe.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpRawMilkInspe.java index 0c71d35..23131dc 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpRawMilkInspe.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpRawMilkInspe.java @@ -347,8 +347,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpYogurtInsp.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpYogurtInsp.java index e284508..c7ddfc8 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpYogurtInsp.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpYogurtInsp.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzDryMatterCorrection.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzDryMatterCorrection.java index a211abb..ca33e13 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzDryMatterCorrection.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzDryMatterCorrection.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzParityCorrection.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzParityCorrection.java index 9d803a6..9b6b3d1 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzParityCorrection.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzParityCorrection.java @@ -26,42 +26,4 @@ public class XzParityCorrection extends BaseEntity @Excel(name = "系数") private Double coef; - public void setId(Long id) - { - this.id = id; - } - - public Long getId() - { - return id; - } - - public void setParity(Integer parity) - { - this.parity = parity; - } - - public Integer getParity() - { - return parity; - } - - public void setCoef(Double coef) - { - this.coef = coef; - } - - public Double getCoef() - { - return coef; - } - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("parity", getParity()) - .append("coef", getCoef()) - .toString(); - } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzWegihCorrection.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzWegihCorrection.java index 6bba703..3453e3f 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzWegihCorrection.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/XzWegihCorrection.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpMilkInOutStoreService.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpMilkInOutStoreService.java index 992573a..5bd59d5 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpMilkInOutStoreService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpMilkInOutStoreService.java @@ -1,6 +1,5 @@ package com.zhyc.module.dairyProducts.service; -import com.zhyc.module.dairyProducts.domain.NpMilkInOutStore; import org.springframework.web.multipart.MultipartFile; import java.util.Date; diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedDetailsController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedDetailsController.java deleted file mode 100644 index 9ef4f87..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedDetailsController.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.zhyc.module.feed.controller; - -import java.util.List; -import javax.servlet.http.HttpServletResponse; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -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.module.feed.domain.SgFeedDetails; -import com.zhyc.module.feed.service.ISgFeedDetailsService; -import com.zhyc.common.utils.poi.ExcelUtil; -import com.zhyc.common.core.page.TableDataInfo; - -/** - * 饲喂记录详情Controller - * - * @author ruoyi - * @date 2025-08-01 - */ -@RestController -@RequestMapping("/feed/details") -public class SgFeedDetailsController extends BaseController -{ - @Autowired - private ISgFeedDetailsService sgFeedDetailsService; - - /** - * 查询饲喂记录详情列表 - */ - @PreAuthorize("@ss.hasPermi('feed:details:list')") - @GetMapping("/list") - public TableDataInfo list(SgFeedDetails sgFeedDetails) - { - startPage(); - List list = sgFeedDetailsService.selectSgFeedDetailsList(sgFeedDetails); - return getDataTable(list); - } - - /** - * 导出饲喂记录详情列表 - */ - @PreAuthorize("@ss.hasPermi('feed:details:export')") - @Log(title = "饲喂记录详情", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(HttpServletResponse response, SgFeedDetails sgFeedDetails) - { - List list = sgFeedDetailsService.selectSgFeedDetailsList(sgFeedDetails); - ExcelUtil util = new ExcelUtil(SgFeedDetails.class); - util.exportExcel(response, list, "饲喂记录详情数据"); - } - - /** - * 获取饲喂记录详情详细信息 - */ - @PreAuthorize("@ss.hasPermi('feed:details:query')") - @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { - return success(sgFeedDetailsService.selectSgFeedDetailsById(id)); - } - - /** - * 新增饲喂记录详情 - */ - @PreAuthorize("@ss.hasPermi('feed:details:add')") - @Log(title = "饲喂记录详情", businessType = BusinessType.INSERT) - @PostMapping - public AjaxResult add(@RequestBody SgFeedDetails sgFeedDetails) - { - return toAjax(sgFeedDetailsService.insertSgFeedDetails(sgFeedDetails)); - } - - /** - * 修改饲喂记录详情 - */ - @PreAuthorize("@ss.hasPermi('feed:details:edit')") - @Log(title = "饲喂记录详情", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult edit(@RequestBody SgFeedDetails sgFeedDetails) - { - return toAjax(sgFeedDetailsService.updateSgFeedDetails(sgFeedDetails)); - } - - /** - * 删除饲喂记录详情 - */ - @PreAuthorize("@ss.hasPermi('feed:details:remove')") - @Log(title = "饲喂记录详情", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { - return toAjax(sgFeedDetailsService.deleteSgFeedDetailsByIds(ids)); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedInfoController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedInfoController.java deleted file mode 100644 index 8673f0c..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedInfoController.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.zhyc.module.feed.controller; - -import java.util.List; -import javax.servlet.http.HttpServletResponse; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -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.module.feed.domain.SgFeedInfo; -import com.zhyc.module.feed.service.ISgFeedInfoService; -import com.zhyc.common.utils.poi.ExcelUtil; -import com.zhyc.common.core.page.TableDataInfo; - -/** - * 饲喂记录Controller - * - * @author ruoyi - * @date 2025-08-01 - */ -@RestController -@RequestMapping("/feed/info") -public class SgFeedInfoController extends BaseController -{ - @Autowired - private ISgFeedInfoService sgFeedInfoService; - - /** - * 查询饲喂记录列表 - */ - @PreAuthorize("@ss.hasPermi('feed:info:list')") - @GetMapping("/list") - public TableDataInfo list(SgFeedInfo sgFeedInfo) - { - startPage(); - List list = sgFeedInfoService.selectSgFeedInfoList(sgFeedInfo); - return getDataTable(list); - } - - /** - * 导出饲喂记录列表 - */ - @PreAuthorize("@ss.hasPermi('feed:info:export')") - @Log(title = "饲喂记录", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(HttpServletResponse response, SgFeedInfo sgFeedInfo) - { - List list = sgFeedInfoService.selectSgFeedInfoList(sgFeedInfo); - ExcelUtil util = new ExcelUtil(SgFeedInfo.class); - util.exportExcel(response, list, "饲喂记录数据"); - } - - /** - * 获取饲喂记录详细信息 - */ - @PreAuthorize("@ss.hasPermi('feed:info:query')") - @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { - return success(sgFeedInfoService.selectSgFeedInfoById(id)); - } - - /** - * 新增饲喂记录 - */ - @PreAuthorize("@ss.hasPermi('feed:info:add')") - @Log(title = "饲喂记录", businessType = BusinessType.INSERT) - @PostMapping - public AjaxResult add(@RequestBody SgFeedInfo sgFeedInfo) - { - return toAjax(sgFeedInfoService.insertSgFeedInfo(sgFeedInfo)); - } - - /** - * 修改饲喂记录 - */ - @PreAuthorize("@ss.hasPermi('feed:info:edit')") - @Log(title = "饲喂记录", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult edit(@RequestBody SgFeedInfo sgFeedInfo) - { - return toAjax(sgFeedInfoService.updateSgFeedInfo(sgFeedInfo)); - } - - /** - * 删除饲喂记录 - */ - @PreAuthorize("@ss.hasPermi('feed:info:remove')") - @Log(title = "饲喂记录", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { - return toAjax(sgFeedInfoService.deleteSgFeedInfoByIds(ids)); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedListController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedListController.java new file mode 100644 index 0000000..895f061 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedListController.java @@ -0,0 +1,134 @@ +package com.zhyc.module.feed.controller; + +import java.util.ArrayList; +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.zhyc.module.feed.service.impl.SgFeedListServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +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.module.feed.domain.SgFeedList; +import com.zhyc.module.feed.service.ISgFeedListService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 配料清单Controller + * + * @author HashMap + * @date 2025-08-19 + */ +@RestController +@RequestMapping("/feed/FeedList") +public class SgFeedListController extends BaseController { + private final ISgFeedListService sgFeedListService; + + + public static boolean refresh = true; + + @Autowired + public SgFeedListController(ISgFeedListService sgFeedListService) { + this.sgFeedListService = sgFeedListService; + } + + /** + * 查询配料清单列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedList:list')") + @GetMapping("/list") + @Transactional(rollbackFor = Exception.class) + public TableDataInfo list(SgFeedList sgFeedList) { + /* + 刷新缓存 + 当配方管理表出现更新 或 饲喂计划表出现增删改时会将refresh置为true 通知此处进行刷新 + */ + if (refresh) { + sgFeedListService.SyncFeedList(); + refresh = false; + } + startPage(); + List list = sgFeedListService.selectSgFeedListList(sgFeedList); + // 用 map 中已有的数据替换 list 中的元素 + List replacedList = new ArrayList<>(); + for (SgFeedList item : list) { + String key = item.getFormulaId() + "_" + item.getFormulaBatchId(); + // 从缓存中取出完整对象 + SgFeedList itemInCache = SgFeedListServiceImpl.getSgFeedListMap().getOrDefault(key, item); + // 将数据库查询的基本信息替换掉缓存中去除的内容 - 前端展示与修改需要 + itemInCache.setId(item.getId()); + itemInCache.setFormulaBatchId(item.getFormulaBatchId()); + itemInCache.setFormulaId(item.getFormulaId()); + itemInCache.setZookeeper(item.getZookeeper()); + itemInCache.setDeployDate(item.getDeployDate()); + // 替换为 map 中的对象 + replacedList.add(itemInCache); + } + return getDataTable(replacedList); + } + + /** + * 导出配料清单列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedList:export')") + @Log(title = "配料清单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SgFeedList sgFeedList) { + List list = sgFeedListService.selectSgFeedListList(sgFeedList); + ExcelUtil util = new ExcelUtil<>(SgFeedList.class); + util.exportExcel(response, list, "配料清单数据"); + } + + /** + * 获取配料清单详细信息 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedList:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(sgFeedListService.selectSgFeedListById(id)); + } + + /** + * 新增配料清单 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedList:add')") + @Log(title = "配料清单", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SgFeedList sgFeedList) { + return toAjax(sgFeedListService.insertSgFeedList(sgFeedList)); + } + + /** + * 修改配料清单 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedList:edit')") + @Log(title = "配料清单", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SgFeedList sgFeedList) { + return toAjax(sgFeedListService.updateSgFeedList(sgFeedList)); + } + + /** + * 删除配料清单 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedList:remove')") + @Log(title = "配料清单", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @Transactional(rollbackFor = Exception.class) + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(sgFeedListService.deleteSgFeedListByIds(ids)); + } + +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedPlanController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedPlanController.java index ad2a6a2..39bde43 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedPlanController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedPlanController.java @@ -3,6 +3,8 @@ package com.zhyc.module.feed.controller; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletResponse; + +import com.zhyc.module.feed.domain.SgFeedPlan; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -16,21 +18,19 @@ 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.module.feed.domain.SgFeedPlan; import com.zhyc.module.feed.service.ISgFeedPlanService; import com.zhyc.common.utils.poi.ExcelUtil; import com.zhyc.common.core.page.TableDataInfo; /** * 饲喂计划Controller - * + * * @author HashMap - * @date 2025-08-08 + * @date 2025-08-14 */ @RestController @RequestMapping("/feed/FeedPlan") -public class SgFeedPlanController extends BaseController -{ +public class SgFeedPlanController extends BaseController { private final ISgFeedPlanService sgFeedPlanService; public SgFeedPlanController(ISgFeedPlanService sgFeedPlanService) { @@ -42,8 +42,7 @@ public class SgFeedPlanController extends BaseController */ @PreAuthorize("@ss.hasPermi('feed:FeedPlan:list')") @GetMapping("/list") - public TableDataInfo list(SgFeedPlan sgFeedPlan) - { + public TableDataInfo list(SgFeedPlan sgFeedPlan) { startPage(); List list = sgFeedPlanService.selectSgFeedPlanList(sgFeedPlan); return getDataTable(list); @@ -55,8 +54,7 @@ public class SgFeedPlanController extends BaseController @PreAuthorize("@ss.hasPermi('feed:FeedPlan:export')") @Log(title = "饲喂计划", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, SgFeedPlan sgFeedPlan) - { + public void export(HttpServletResponse response, SgFeedPlan sgFeedPlan) { List list = sgFeedPlanService.selectSgFeedPlanList(sgFeedPlan); ExcelUtil util = new ExcelUtil<>(SgFeedPlan.class); util.exportExcel(response, list, "饲喂计划数据"); @@ -67,8 +65,7 @@ public class SgFeedPlanController extends BaseController */ @PreAuthorize("@ss.hasPermi('feed:FeedPlan:query')") @GetMapping(value = "/{createDate}") - public AjaxResult getInfo(@PathVariable("createDate") Date createDate) - { + public AjaxResult getInfo(@PathVariable("createDate") Date createDate) { return success(sgFeedPlanService.selectSgFeedPlanByCreateDate(createDate)); } @@ -78,8 +75,15 @@ public class SgFeedPlanController extends BaseController @PreAuthorize("@ss.hasPermi('feed:FeedPlan:add')") @Log(title = "饲喂计划", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody SgFeedPlan sgFeedPlan) - { + public AjaxResult add(@RequestBody SgFeedPlan sgFeedPlan) { + if (null == sgFeedPlan) { + throw new RuntimeException("数据为空"); + } + sgFeedPlan.setCreateDate(new Date()); + // 计算其他字段值 + setPlan(sgFeedPlan); + // 通知配料清单刷新数据 + SgFeedListController.refresh = true; return toAjax(sgFeedPlanService.insertSgFeedPlan(sgFeedPlan)); } @@ -89,8 +93,11 @@ public class SgFeedPlanController extends BaseController @PreAuthorize("@ss.hasPermi('feed:FeedPlan:edit')") @Log(title = "饲喂计划", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody SgFeedPlan sgFeedPlan) - { + public AjaxResult edit(@RequestBody SgFeedPlan sgFeedPlan) { + // 根据修改后的值重新计算 + setPlan(sgFeedPlan); + // 通知配料清单刷新数据 + SgFeedListController.refresh = true; return toAjax(sgFeedPlanService.updateSgFeedPlan(sgFeedPlan)); } @@ -99,9 +106,26 @@ public class SgFeedPlanController extends BaseController */ @PreAuthorize("@ss.hasPermi('feed:FeedPlan:remove')") @Log(title = "饲喂计划", businessType = BusinessType.DELETE) - @DeleteMapping("/{createDates}") - public AjaxResult remove(@PathVariable Date[] createDates) - { + @DeleteMapping("/{createDates}") + public AjaxResult remove(@PathVariable Date[] createDates) { + // 通知配料清单刷新数据 + SgFeedListController.refresh = true; return toAjax(sgFeedPlanService.deleteSgFeedPlanByCreateDates(createDates)); } + + /** + * 设定计划值 + * 用于添加和修改 + */ + private void setPlan(SgFeedPlan sgFeedPlan) { + // 根据羊舍ID获取羊只数量 + int countByFoldId = sgFeedPlanService.getSheepCountByFoldId(sgFeedPlan.getSheepHouseId()); + sgFeedPlan.setSheepCount(countByFoldId); + // 计算总计划量 + sgFeedPlan.setPlanFeedTotal(countByFoldId * sgFeedPlan.getPlanDailySize()); + // 计算早中晚计划量 + sgFeedPlan.setPlanMorningSize(sgFeedPlan.getPlanFeedTotal() * (sgFeedPlan.getRatioMorning() / 100)); + sgFeedPlan.setPlanNoonSize(sgFeedPlan.getPlanFeedTotal() * (sgFeedPlan.getRatioNoon() / 100)); + sgFeedPlan.setPlanAfternoonSize(sgFeedPlan.getPlanFeedTotal() * (sgFeedPlan.getRatioAfternoon() / 100)); + } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedRatioController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedRatioController.java deleted file mode 100644 index 81ddd36..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedRatioController.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.zhyc.module.feed.controller; - -import java.util.List; -import javax.servlet.http.HttpServletResponse; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -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.module.feed.domain.SgFeedRatio; -import com.zhyc.module.feed.service.ISgFeedRatioService; -import com.zhyc.common.utils.poi.ExcelUtil; -import com.zhyc.common.core.page.TableDataInfo; - -/** - * 饲喂比例Controller - * - * @author ruoyi - * @date 2025-08-01 - */ -@RestController -@RequestMapping("/feed/ratio") -public class SgFeedRatioController extends BaseController -{ - @Autowired - private ISgFeedRatioService sgFeedRatioService; - - /** - * 查询饲喂比例列表 - */ - @PreAuthorize("@ss.hasPermi('feed:ratio:list')") - @GetMapping("/list") - public TableDataInfo list(SgFeedRatio sgFeedRatio) - { - startPage(); - List list = sgFeedRatioService.selectSgFeedRatioList(sgFeedRatio); - return getDataTable(list); - } - - /** - * 导出饲喂比例列表 - */ - @PreAuthorize("@ss.hasPermi('feed:ratio:export')") - @Log(title = "饲喂比例", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(HttpServletResponse response, SgFeedRatio sgFeedRatio) - { - List list = sgFeedRatioService.selectSgFeedRatioList(sgFeedRatio); - ExcelUtil util = new ExcelUtil(SgFeedRatio.class); - util.exportExcel(response, list, "饲喂比例数据"); - } - - /** - * 获取饲喂比例详细信息 - */ - @PreAuthorize("@ss.hasPermi('feed:ratio:query')") - @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { - return success(sgFeedRatioService.selectSgFeedRatioById(id)); - } - - /** - * 新增饲喂比例 - */ - @PreAuthorize("@ss.hasPermi('feed:ratio:add')") - @Log(title = "饲喂比例", businessType = BusinessType.INSERT) - @PostMapping - public AjaxResult add(@RequestBody SgFeedRatio sgFeedRatio) - { - return toAjax(sgFeedRatioService.insertSgFeedRatio(sgFeedRatio)); - } - - /** - * 修改饲喂比例 - */ - @PreAuthorize("@ss.hasPermi('feed:ratio:edit')") - @Log(title = "饲喂比例", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult edit(@RequestBody SgFeedRatio sgFeedRatio) - { - return toAjax(sgFeedRatioService.updateSgFeedRatio(sgFeedRatio)); - } - - /** - * 删除饲喂比例 - */ - @PreAuthorize("@ss.hasPermi('feed:ratio:remove')") - @Log(title = "饲喂比例", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { - return toAjax(sgFeedRatioService.deleteSgFeedRatioByIds(ids)); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedStatisticController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedStatisticController.java new file mode 100644 index 0000000..de0334f --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedStatisticController.java @@ -0,0 +1,129 @@ +package com.zhyc.module.feed.controller; + +import java.util.ArrayList; +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.zhyc.common.utils.uuid.UUID; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +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.module.feed.domain.SgFeedStatistic; +import com.zhyc.module.feed.service.ISgFeedStatisticService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 饲喂量统计Controller + * + * @author HashMap + * @date 2025-08-23 + */ +@RestController +@RequestMapping("/feed/FeedStatistic") +@Transactional(rollbackFor = Exception.class) +public class SgFeedStatisticController extends BaseController { + private final ISgFeedStatisticService sgFeedStatisticService; + + + + public SgFeedStatisticController(ISgFeedStatisticService sgFeedStatisticService) { + this.sgFeedStatisticService = sgFeedStatisticService; + } + + /** + * 查询饲喂量统计列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedStatistic:list')") + @GetMapping("/list") + public TableDataInfo list(SgFeedStatistic sgFeedStatistic) { + startPage(); + List list = sgFeedStatisticService.selectSgFeedStatisticList(sgFeedStatistic); + return getDataTable(list); + } + + /** + * 导出饲喂量统计列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedStatistic:export')") + @Log(title = "饲喂量统计", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SgFeedStatistic sgFeedStatistic) { + List list = sgFeedStatisticService.selectSgFeedStatisticList(sgFeedStatistic); + ExcelUtil util = new ExcelUtil<>(SgFeedStatistic.class); + util.exportExcel(response, list, "饲喂量统计数据"); + } + + /** + * 获取饲喂量统计详细信息 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedStatistic:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") String id) { + return success(sgFeedStatisticService.selectSgFeedStatisticById(id)); + } + + /** + * 新增饲喂量统计 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedStatistic:add')") + @Log(title = "饲喂量统计", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SgFeedStatistic sgFeedStatistic) { + if (null == sgFeedStatistic.getFormulaId() && null == sgFeedStatistic.getFormulaBatchId()) { + throw new RuntimeException("ERROR: 数据为空"); + } + List isExist = sgFeedStatisticService.selectSgFeedStatisticList(sgFeedStatistic); + if (null != isExist && !isExist.isEmpty()) { + throw new RuntimeException("WARNING: 数据重复"); + } + // 设定唯一标识符主键 + sgFeedStatistic.setId(UUID.randomUUID().toString()); + /* + * 初始化数据 + * 弃用: 此处不再需要初始化,前端选定批号后会触发预载, 此处再初始化会覆盖前端后续的自定义数据 + */ + // sgFeedStatisticService.getInitSgFeedStatistic(sgFeedStatistic); + return toAjax(sgFeedStatisticService.insertSgFeedStatistic(sgFeedStatistic)); + } + + /** + * 修改饲喂量统计 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedStatistic:edit')") + @Log(title = "饲喂量统计", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SgFeedStatistic sgFeedStatistic) { + return toAjax(sgFeedStatisticService.updateSgFeedStatistic(sgFeedStatistic)); + } + + /** + * 删除饲喂量统计 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedStatistic:remove')") + @Log(title = "饲喂量统计", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable String[] ids) { + return toAjax(sgFeedStatisticService.deleteSgFeedStatisticByIds(ids)); + } + + @GetMapping("/init") + public TableDataInfo getInitData(SgFeedStatistic sgFeedStatistic){ + sgFeedStatisticService.getInitSgFeedStatistic(sgFeedStatistic); + // 兼容写法 - 实际只是为了返回一个 sgFeedStatistic + List list = new ArrayList<>(); + list.add(sgFeedStatistic); + return getDataTable(list); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFodderController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFodderController.java deleted file mode 100644 index 94b2161..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFodderController.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.zhyc.module.feed.controller; - -import java.util.List; -import javax.servlet.http.HttpServletResponse; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -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.module.feed.domain.SgFodder; -import com.zhyc.module.feed.service.ISgFodderService; -import com.zhyc.common.utils.poi.ExcelUtil; -import com.zhyc.common.core.page.TableDataInfo; - -/** - * 原料Controller - * - * @author ruoyi - * @date 2025-08-01 - */ -@RestController -@RequestMapping("/feed/fodder") -public class SgFodderController extends BaseController -{ - @Autowired - private ISgFodderService sgFodderService; - - /** - * 查询原料列表 - */ - @PreAuthorize("@ss.hasPermi('feed:fodder:list')") - @GetMapping("/list") - public TableDataInfo list(SgFodder sgFodder) - { - startPage(); - List list = sgFodderService.selectSgFodderList(sgFodder); - return getDataTable(list); - } - - /** - * 导出原料列表 - */ - @PreAuthorize("@ss.hasPermi('feed:fodder:export')") - @Log(title = "原料", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(HttpServletResponse response, SgFodder sgFodder) - { - List list = sgFodderService.selectSgFodderList(sgFodder); - ExcelUtil util = new ExcelUtil(SgFodder.class); - util.exportExcel(response, list, "原料数据"); - } - - /** - * 获取原料详细信息 - */ - @PreAuthorize("@ss.hasPermi('feed:fodder:query')") - @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { - return success(sgFodderService.selectSgFodderById(id)); - } - - /** - * 新增原料 - */ - @PreAuthorize("@ss.hasPermi('feed:fodder:add')") - @Log(title = "原料", businessType = BusinessType.INSERT) - @PostMapping - public AjaxResult add(@RequestBody SgFodder sgFodder) - { - return toAjax(sgFodderService.insertSgFodder(sgFodder)); - } - - /** - * 修改原料 - */ - @PreAuthorize("@ss.hasPermi('feed:fodder:edit')") - @Log(title = "原料", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult edit(@RequestBody SgFodder sgFodder) - { - return toAjax(sgFodderService.updateSgFodder(sgFodder)); - } - - /** - * 删除原料 - */ - @PreAuthorize("@ss.hasPermi('feed:fodder:remove')") - @Log(title = "原料", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { - return toAjax(sgFodderService.deleteSgFodderByIds(ids)); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFormulaManagementController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFormulaManagementController.java index 3f33ae2..9284c7a 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFormulaManagementController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFormulaManagementController.java @@ -143,6 +143,9 @@ public class SgFormulaManagementController extends BaseController { sgFormulaListItem.setFormulaId(sgFormulaManagement.getFormulaId()); sgFormulaListService.insertSgFormulaList(sgFormulaListItem); } + + // 通知配料清单刷新数据 + SgFeedListController.refresh = true; return toAjax(sgFormulaManagementService.updateSgFormulaManagement(sgFormulaManagement)); } @@ -167,6 +170,9 @@ public class SgFormulaManagementController extends BaseController { } // 前置检查完毕 执行删除 sgFormulaManagement.setBatchId(batchId); + + // 通知配料清单刷新数据 + SgFeedListController.refresh = true; return toAjax(sgFormulaManagementService.deleteSgFormulaManagement(sgFormulaManagement)); } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgMaterialController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgMaterialController.java index 8f4c789..b3e5ab0 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgMaterialController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgMaterialController.java @@ -3,7 +3,6 @@ package com.zhyc.module.feed.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedDetails.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedDetails.java deleted file mode 100644 index a1404e2..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedDetails.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.zhyc.module.feed.domain; - -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import com.zhyc.common.annotation.Excel; -import com.zhyc.common.core.domain.BaseEntity; - -/** - * 饲喂记录详情对象 sg_feed_details - * - * @author ruoyi - * @date 2025-08-01 - */ -public class SgFeedDetails extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** id */ - private Long id; - - /** 原料id */ - @Excel(name = "原料id") - private String fodder; - - /** 数量 */ - @Excel(name = "数量") - private Long number; - - /** 单位 */ - @Excel(name = "单位") - private String nuit; - - public void setId(Long id) - { - this.id = id; - } - - public Long getId() - { - return id; - } - - public void setFodder(String fodder) - { - this.fodder = fodder; - } - - public String getFodder() - { - return fodder; - } - - public void setNumber(Long number) - { - this.number = number; - } - - public Long getNumber() - { - return number; - } - - public void setNuit(String nuit) - { - this.nuit = nuit; - } - - public String getNuit() - { - return nuit; - } - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("fodder", getFodder()) - .append("number", getNumber()) - .append("nuit", getNuit()) - .toString(); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedInfo.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedInfo.java deleted file mode 100644 index 37ed315..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedInfo.java +++ /dev/null @@ -1,252 +0,0 @@ -package com.zhyc.module.feed.domain; - -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import com.zhyc.common.annotation.Excel; -import com.zhyc.common.core.domain.BaseEntity; - -/** - * 饲喂记录对象 sg_feed_info - * - * @author ruoyi - * @date 2025-08-01 - */ -public class SgFeedInfo extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** id */ - private Long id; - - /** 配方编码 */ - @Excel(name = "配方编码") - private Long formulaId; - - /** 羊舍 */ - @Excel(name = "羊舍") - private String sheepfoldId; - - /** 日均计划量 */ - @Excel(name = "日均计划量") - private Long average; - - /** 早上计划量(通过饲喂比例算出来) */ - @Excel(name = "早上计划量(通过饲喂比例算出来)") - private Long planMonring; - - /** 实际添加(早) */ - @Excel(name = "实际添加", readConverterExp = "早=") - private Long actualMonring; - - /** 中午计划量 */ - @Excel(name = "中午计划量") - private Long planNoon; - - /** 实际添加(中) */ - @Excel(name = "实际添加", readConverterExp = "中=") - private Long actualNoon; - - /** 下午计划量 */ - @Excel(name = "下午计划量") - private Long planEvenig; - - /** 实际添加(下) */ - @Excel(name = "实际添加", readConverterExp = "下=") - private Long actualEvening; - - /** 颗粒原料 */ - @Excel(name = "颗粒原料") - private Long particle; - - /** 其他原料 */ - @Excel(name = "其他原料") - private Long other; - - /** 补饲饲料 */ - @Excel(name = "补饲饲料") - private Long replenish; - - /** 饲喂日期 */ - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "饲喂日期", width = 30, dateFormat = "yyyy-MM-dd") - private Date planDate; - - /** 备注 */ - @Excel(name = "备注") - private String comment; - - public void setId(Long id) - { - this.id = id; - } - - public Long getId() - { - return id; - } - - public void setFormulaId(Long formulaId) - { - this.formulaId = formulaId; - } - - public Long getFormulaId() - { - return formulaId; - } - - public void setSheepfoldId(String sheepfoldId) - { - this.sheepfoldId = sheepfoldId; - } - - public String getSheepfoldId() - { - return sheepfoldId; - } - - public void setAverage(Long average) - { - this.average = average; - } - - public Long getAverage() - { - return average; - } - - public void setPlanMonring(Long planMonring) - { - this.planMonring = planMonring; - } - - public Long getPlanMonring() - { - return planMonring; - } - - public void setActualMonring(Long actualMonring) - { - this.actualMonring = actualMonring; - } - - public Long getActualMonring() - { - return actualMonring; - } - - public void setPlanNoon(Long planNoon) - { - this.planNoon = planNoon; - } - - public Long getPlanNoon() - { - return planNoon; - } - - public void setActualNoon(Long actualNoon) - { - this.actualNoon = actualNoon; - } - - public Long getActualNoon() - { - return actualNoon; - } - - public void setPlanEvenig(Long planEvenig) - { - this.planEvenig = planEvenig; - } - - public Long getPlanEvenig() - { - return planEvenig; - } - - public void setActualEvening(Long actualEvening) - { - this.actualEvening = actualEvening; - } - - public Long getActualEvening() - { - return actualEvening; - } - - public void setParticle(Long particle) - { - this.particle = particle; - } - - public Long getParticle() - { - return particle; - } - - public void setOther(Long other) - { - this.other = other; - } - - public Long getOther() - { - return other; - } - - public void setReplenish(Long replenish) - { - this.replenish = replenish; - } - - public Long getReplenish() - { - return replenish; - } - - public void setPlanDate(Date planDate) - { - this.planDate = planDate; - } - - public Date getPlanDate() - { - return planDate; - } - - public void setComment(String comment) - { - this.comment = comment; - } - - public String getComment() - { - return comment; - } - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("formulaId", getFormulaId()) - .append("sheepfoldId", getSheepfoldId()) - .append("average", getAverage()) - .append("planMonring", getPlanMonring()) - .append("actualMonring", getActualMonring()) - .append("planNoon", getPlanNoon()) - .append("actualNoon", getActualNoon()) - .append("planEvenig", getPlanEvenig()) - .append("actualEvening", getActualEvening()) - .append("particle", getParticle()) - .append("other", getOther()) - .append("replenish", getReplenish()) - .append("planDate", getPlanDate()) - .append("comment", getComment()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .toString(); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedList.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedList.java new file mode 100644 index 0000000..0b3c61b --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedList.java @@ -0,0 +1,67 @@ +package com.zhyc.module.feed.domain; + +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.zhyc.common.annotation.Excel; +import com.zhyc.common.core.domain.BaseEntity; + +/** + * 配料清单对象 sg_feed_list + * + * @author HashMap + * @date 2025-08-19 + */ +@Setter +@Getter +public class SgFeedList extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 序号 */ + private Long id; + + /** 配方编号 */ + @Excel(name = "配方编号") + private String formulaId; + + /** 配方批号 */ + @Excel(name = "配方批号") + private String formulaBatchId; + + /** 饲草班人员 */ + @Excel(name = "饲草班人员") + private String zookeeper; + + /** 配料日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "配料日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date deployDate; + + private SgFormulaManagement rootFormula; + + private SgFeedPlan rootPlan; + + private Double morningTotal; + private Double noonTotal; + private Double afternoonTotal; + + private List formulaList; + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("formulaId", getFormulaId()) + .append("formulaBatchId", getFormulaBatchId()) + .append("zookeeper", getZookeeper()) + .append("deployDate", getDeployDate()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedPlan.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedPlan.java index 596eac2..7d537c0 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedPlan.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedPlan.java @@ -13,86 +13,88 @@ import com.zhyc.common.core.domain.BaseEntity; * 饲喂计划对象 sg_feed_plan * * @author HashMap - * @date 2025-08-08 + * @date 2025-08-14 */ -@Setter @Getter +@Setter public class SgFeedPlan extends BaseEntity { private static final long serialVersionUID = 1L; /** 创建日期 */ - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "创建日期", width = 30, dateFormat = "yyyy-MM-dd") private Date createDate; /** 配方编码 */ @Excel(name = "配方编码") private String formulaId; + /** 批号 */ + @Excel(name = "批号") + private String batchId; + /** 羊舍 */ @Excel(name = "羊舍") - private Long sheepHouseId; + private Integer sheepHouseId; /** 羊只数量 */ @Excel(name = "羊只数量") - private Long sheepCount; + private Integer sheepCount; /** 日均计划量 */ @Excel(name = "日均计划量") - private Long planDailySize; - - /** 计划量(早) */ - @Excel(name = "计划量(早)") - private Long planMorningSize; - - /** 计划总量(早) */ - @Excel(name = "计划总量(早)") - private Long planMorningTotal; + private Double planDailySize; /** 饲喂比例(早) */ @Excel(name = "饲喂比例(早)") - private Long ratioMorning; - - /** 实际量(早) */ - @Excel(name = "实际量(早)") - private Long actualMorningSize; - - /** 计划量(中) */ - @Excel(name = "计划量(中)") - private Long planNoonSize; - - /** 计划总量(中) */ - @Excel(name = "计划总量(中)") - private Long planNoonTotal; - - /** 实际量(中) */ - @Excel(name = "实际量(中)") - private Long actualNoonSize; + private Double ratioMorning; /** 饲喂比例(中) */ @Excel(name = "饲喂比例(中)") - private Long ratioNoon; - - /** 计划量(下) */ - @Excel(name = "计划量(下)") - private Long planAfternoonSize; - - /** 计划总量(下) */ - @Excel(name = "计划总量(下)") - private Long planAfternoonTotal; - - /** 实际量(下) */ - @Excel(name = "实际量(下)") - private Long actualAfternoonSize; + private Double ratioNoon; /** 饲喂比例(下) */ @Excel(name = "饲喂比例(下)") - private Long ratioAfternoon; + private Double ratioAfternoon; + + /** 计划量(早) */ + @Excel(name = "计划量(早)") + private Double planMorningSize; + + /** 计划总量(早) */ + @Excel(name = "计划总量(早)") + private Double planMorningTotal; + + /** 实际量(早) */ + @Excel(name = "实际量(早)") + private Double actualMorningSize; + + /** 计划量(中) */ + @Excel(name = "计划量(中)") + private Double planNoonSize; + + /** 计划总量(中) */ + @Excel(name = "计划总量(中)") + private Double planNoonTotal; + + /** 实际量(中) */ + @Excel(name = "实际量(中)") + private Double actualNoonSize; + + /** 计划量(下) */ + @Excel(name = "计划量(下)") + private Double planAfternoonSize; + + /** 计划总量(下) */ + @Excel(name = "计划总量(下)") + private Double planAfternoonTotal; + + /** 实际量(下) */ + @Excel(name = "实际量(下)") + private Double actualAfternoonSize; /** 计划饲喂总量 */ @Excel(name = "计划饲喂总量") - private Long planFeedTotal; + private Double planFeedTotal; /** 饲草班人员 */ @Excel(name = "饲草班人员") @@ -108,21 +110,22 @@ public class SgFeedPlan extends BaseEntity return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("createDate", getCreateDate()) .append("formulaId", getFormulaId()) + .append("batchId", getBatchId()) .append("sheepHouseId", getSheepHouseId()) .append("sheepCount", getSheepCount()) .append("planDailySize", getPlanDailySize()) + .append("ratioMorning", getRatioMorning()) + .append("ratioNoon", getRatioNoon()) + .append("ratioAfternoon", getRatioAfternoon()) .append("planMorningSize", getPlanMorningSize()) .append("planMorningTotal", getPlanMorningTotal()) - .append("ratioMorning", getRatioMorning()) .append("actualMorningSize", getActualMorningSize()) .append("planNoonSize", getPlanNoonSize()) .append("planNoonTotal", getPlanNoonTotal()) .append("actualNoonSize", getActualNoonSize()) - .append("ratioNoon", getRatioNoon()) .append("planAfternoonSize", getPlanAfternoonSize()) .append("planAfternoonTotal", getPlanAfternoonTotal()) .append("actualAfternoonSize", getActualAfternoonSize()) - .append("ratioAfternoon", getRatioAfternoon()) .append("planFeedTotal", getPlanFeedTotal()) .append("zookeeper", getZookeeper()) .append("planDate", getPlanDate()) diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedRatio.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedRatio.java deleted file mode 100644 index 5e3834e..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedRatio.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.zhyc.module.feed.domain; - -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import com.zhyc.common.annotation.Excel; -import com.zhyc.common.core.domain.BaseEntity; - -/** - * 饲喂比例对象 sg_feed_ratio - * - * @author ruoyi - * @date 2025-08-01 - */ -public class SgFeedRatio extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** id */ - private Long id; - - /** 早晨计划比列 */ - @Excel(name = "早晨计划比列") - private String morning; - - /** 中午计划比例 */ - @Excel(name = "中午计划比例") - private String noon; - - /** 下午计划比例 */ - @Excel(name = "下午计划比例") - private String evening; - - public void setId(Long id) - { - this.id = id; - } - - public Long getId() - { - return id; - } - - public void setMorning(String morning) - { - this.morning = morning; - } - - public String getMorning() - { - return morning; - } - - public void setNoon(String noon) - { - this.noon = noon; - } - - public String getNoon() - { - return noon; - } - - public void setEvening(String evening) - { - this.evening = evening; - } - - public String getEvening() - { - return evening; - } - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("morning", getMorning()) - .append("noon", getNoon()) - .append("evening", getEvening()) - .toString(); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedStatistic.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedStatistic.java new file mode 100644 index 0000000..2cdc21e --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedStatistic.java @@ -0,0 +1,98 @@ +package com.zhyc.module.feed.domain; + +import com.alibaba.fastjson2.JSON; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.zhyc.module.base.domain.DaSheepfold; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.zhyc.common.annotation.Excel; +import com.zhyc.common.core.domain.BaseEntity; + +import java.util.Date; +import java.util.List; + +/** + * 饲喂量统计对象 sg_feed_statistic + * + * @author HashMap + * @date 2025-08-23 + */ +@Setter +@Getter +public class SgFeedStatistic extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * UUID + */ + private String id; + + /** + * 配方编号 + */ + @Excel(name = "配方编号") + private String formulaId; + + /** + * 配方批号 + */ + @Excel(name = "配方批号") + private String formulaBatchId; + + /** + * 羊只数量 + */ + @Excel(name = "羊只数量") + private Long sheepFoldCount; + + /** + * 青贮损耗比例 + */ + @Excel(name = "青贮损耗比例") + private String silageLossRate; + + /** + * 总饲喂量 + */ + @Excel(name = "总饲喂量") + private Double feedTotalSize; + + /** + * 日均饲喂量 + */ + @Excel(name = "日均饲喂量") + private Double feedDailySize; + + /** + * 配方列表 + */ + @Excel(name = "配方列表") + private List materialList; + + /** + * 羊舍列表 + */ + @Excel(name = "羊舍列表") + private List sheepFoldList; + + @Excel(name = "日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date feedDate; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("formulaId", getFormulaId()) + .append("formulaBatchId", getFormulaBatchId()) + .append("sheepFoldCount", getSheepFoldCount()) + .append("silageLossRate", getSilageLossRate()) + .append("feedTotalSize", getFeedTotalSize()) + .append("feedDailySize", getFeedDailySize()) + .append("materialList", getMaterialList()) + .append("sheepFoldList", getSheepFoldList()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFodder.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFodder.java deleted file mode 100644 index 3b00b2d..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFodder.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.zhyc.module.feed.domain; - -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import com.zhyc.common.annotation.Excel; -import com.zhyc.common.core.domain.BaseEntity; - -/** - * 原料对象 sg_fodder - * - * @author ruoyi - * @date 2025-08-01 - */ -public class SgFodder extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** id */ - private Long id; - - /** 名称 */ - @Excel(name = "名称") - private String name; - - /** 0补饲饲料1配方原料2颗粒原料 */ - @Excel(name = "0补饲饲料1配方原料2颗粒原料") - private Long fodderType; - - public void setId(Long id) - { - this.id = id; - } - - public Long getId() - { - return id; - } - - public void setName(String name) - { - this.name = name; - } - - public String getName() - { - return name; - } - - public void setFodderType(Long fodderType) - { - this.fodderType = fodderType; - } - - public Long getFodderType() - { - return fodderType; - } - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("name", getName()) - .append("fodderType", getFodderType()) - .toString(); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFormulaList.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFormulaList.java index 03ab542..aac1fc9 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFormulaList.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFormulaList.java @@ -39,14 +39,25 @@ public class SgFormulaList extends BaseEntity @Excel(name = "比例") private Long ratio; - /** 颗粒原料 */ + /** + * 颗粒原料 + * 当前不局限于 "是否颗粒原料" 而且多种类型的标识符 + */ @Excel(name = "颗粒原料") private String isGranular; - /** 补饲 */ + /** + * 补饲 + * 当前用作饲喂类型标识 + */ @Excel(name = "补饲") private String isSupplement; + /** + * 添加量 - 供其他一些统计模块使用 + */ + private Double feedSize; + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedDetailsMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedDetailsMapper.java deleted file mode 100644 index 2817118..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedDetailsMapper.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zhyc.module.feed.mapper; - -import java.util.List; -import com.zhyc.module.feed.domain.SgFeedDetails; - -/** - * 饲喂记录详情Mapper接口 - * - * @author ruoyi - * @date 2025-08-01 - */ -public interface SgFeedDetailsMapper -{ - /** - * 查询饲喂记录详情 - * - * @param id 饲喂记录详情主键 - * @return 饲喂记录详情 - */ - public SgFeedDetails selectSgFeedDetailsById(Long id); - - /** - * 查询饲喂记录详情列表 - * - * @param sgFeedDetails 饲喂记录详情 - * @return 饲喂记录详情集合 - */ - public List selectSgFeedDetailsList(SgFeedDetails sgFeedDetails); - - /** - * 新增饲喂记录详情 - * - * @param sgFeedDetails 饲喂记录详情 - * @return 结果 - */ - public int insertSgFeedDetails(SgFeedDetails sgFeedDetails); - - /** - * 修改饲喂记录详情 - * - * @param sgFeedDetails 饲喂记录详情 - * @return 结果 - */ - public int updateSgFeedDetails(SgFeedDetails sgFeedDetails); - - /** - * 删除饲喂记录详情 - * - * @param id 饲喂记录详情主键 - * @return 结果 - */ - public int deleteSgFeedDetailsById(Long id); - - /** - * 批量删除饲喂记录详情 - * - * @param ids 需要删除的数据主键集合 - * @return 结果 - */ - public int deleteSgFeedDetailsByIds(Long[] ids); -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedInfoMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedInfoMapper.java deleted file mode 100644 index 11ea688..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedInfoMapper.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zhyc.module.feed.mapper; - -import java.util.List; -import com.zhyc.module.feed.domain.SgFeedInfo; - -/** - * 饲喂记录Mapper接口 - * - * @author ruoyi - * @date 2025-08-01 - */ -public interface SgFeedInfoMapper -{ - /** - * 查询饲喂记录 - * - * @param id 饲喂记录主键 - * @return 饲喂记录 - */ - public SgFeedInfo selectSgFeedInfoById(Long id); - - /** - * 查询饲喂记录列表 - * - * @param sgFeedInfo 饲喂记录 - * @return 饲喂记录集合 - */ - public List selectSgFeedInfoList(SgFeedInfo sgFeedInfo); - - /** - * 新增饲喂记录 - * - * @param sgFeedInfo 饲喂记录 - * @return 结果 - */ - public int insertSgFeedInfo(SgFeedInfo sgFeedInfo); - - /** - * 修改饲喂记录 - * - * @param sgFeedInfo 饲喂记录 - * @return 结果 - */ - public int updateSgFeedInfo(SgFeedInfo sgFeedInfo); - - /** - * 删除饲喂记录 - * - * @param id 饲喂记录主键 - * @return 结果 - */ - public int deleteSgFeedInfoById(Long id); - - /** - * 批量删除饲喂记录 - * - * @param ids 需要删除的数据主键集合 - * @return 结果 - */ - public int deleteSgFeedInfoByIds(Long[] ids); -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedListMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedListMapper.java new file mode 100644 index 0000000..47e837c --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedListMapper.java @@ -0,0 +1,63 @@ +package com.zhyc.module.feed.mapper; + +import java.util.List; +import com.zhyc.module.feed.domain.SgFeedList; +import org.apache.ibatis.annotations.Mapper; + +/** + * 配料清单Mapper接口 + * + * @author HashMap + * @date 2025-08-19 + */ +@Mapper +public interface SgFeedListMapper +{ + /** + * 查询配料清单 + * + * @param id 配料清单主键 + * @return 配料清单 + */ + SgFeedList selectSgFeedListById(Long id); + + /** + * 查询配料清单列表 + * + * @param sgFeedList 配料清单 + * @return 配料清单集合 + */ + List selectSgFeedListList(SgFeedList sgFeedList); + + /** + * 新增配料清单 + * + * @param sgFeedList 配料清单 + * @return 结果 + */ + int insertSgFeedList(SgFeedList sgFeedList); + + /** + * 修改配料清单 + * + * @param sgFeedList 配料清单 + * @return 结果 + */ + int updateSgFeedList(SgFeedList sgFeedList); + + /** + * 删除配料清单 + * + * @param id 配料清单主键 + * @return 结果 + */ + int deleteSgFeedListById(Long id); + + /** + * 批量删除配料清单 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + int deleteSgFeedListByIds(Long[] ids); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedPlanMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedPlanMapper.java index 7ea4493..f475ae5 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedPlanMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedPlanMapper.java @@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Mapper; * 饲喂计划Mapper接口 * * @author HashMap - * @date 2025-08-08 + * @date 2025-08-14 */ @Mapper public interface SgFeedPlanMapper @@ -20,7 +20,7 @@ public interface SgFeedPlanMapper * @param createDate 饲喂计划主键 * @return 饲喂计划 */ - SgFeedPlan selectSgFeedPlanByCreateDate(Date createDate); + public SgFeedPlan selectSgFeedPlanByCreateDate(Date createDate); /** * 查询饲喂计划列表 @@ -28,7 +28,7 @@ public interface SgFeedPlanMapper * @param sgFeedPlan 饲喂计划 * @return 饲喂计划集合 */ - List selectSgFeedPlanList(SgFeedPlan sgFeedPlan); + public List selectSgFeedPlanList(SgFeedPlan sgFeedPlan); /** * 新增饲喂计划 @@ -36,7 +36,7 @@ public interface SgFeedPlanMapper * @param sgFeedPlan 饲喂计划 * @return 结果 */ - int insertSgFeedPlan(SgFeedPlan sgFeedPlan); + public int insertSgFeedPlan(SgFeedPlan sgFeedPlan); /** * 修改饲喂计划 @@ -44,7 +44,7 @@ public interface SgFeedPlanMapper * @param sgFeedPlan 饲喂计划 * @return 结果 */ - int updateSgFeedPlan(SgFeedPlan sgFeedPlan); + public int updateSgFeedPlan(SgFeedPlan sgFeedPlan); /** * 删除饲喂计划 @@ -52,7 +52,7 @@ public interface SgFeedPlanMapper * @param createDate 饲喂计划主键 * @return 结果 */ - int deleteSgFeedPlanByCreateDate(Date createDate); + public int deleteSgFeedPlanByCreateDate(Date createDate); /** * 批量删除饲喂计划 @@ -60,5 +60,7 @@ public interface SgFeedPlanMapper * @param createDates 需要删除的数据主键集合 * @return 结果 */ - int deleteSgFeedPlanByCreateDates(Date[] createDates); + public int deleteSgFeedPlanByCreateDates(Date[] createDates); + + int selectSheepCountByFoldId(Integer foldId); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedRatioMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedRatioMapper.java deleted file mode 100644 index 5dbd1ce..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedRatioMapper.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zhyc.module.feed.mapper; - -import java.util.List; -import com.zhyc.module.feed.domain.SgFeedRatio; - -/** - * 饲喂比例Mapper接口 - * - * @author ruoyi - * @date 2025-08-01 - */ -public interface SgFeedRatioMapper -{ - /** - * 查询饲喂比例 - * - * @param id 饲喂比例主键 - * @return 饲喂比例 - */ - public SgFeedRatio selectSgFeedRatioById(Long id); - - /** - * 查询饲喂比例列表 - * - * @param sgFeedRatio 饲喂比例 - * @return 饲喂比例集合 - */ - public List selectSgFeedRatioList(SgFeedRatio sgFeedRatio); - - /** - * 新增饲喂比例 - * - * @param sgFeedRatio 饲喂比例 - * @return 结果 - */ - public int insertSgFeedRatio(SgFeedRatio sgFeedRatio); - - /** - * 修改饲喂比例 - * - * @param sgFeedRatio 饲喂比例 - * @return 结果 - */ - public int updateSgFeedRatio(SgFeedRatio sgFeedRatio); - - /** - * 删除饲喂比例 - * - * @param id 饲喂比例主键 - * @return 结果 - */ - public int deleteSgFeedRatioById(Long id); - - /** - * 批量删除饲喂比例 - * - * @param ids 需要删除的数据主键集合 - * @return 结果 - */ - public int deleteSgFeedRatioByIds(Long[] ids); -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedStatisticMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedStatisticMapper.java new file mode 100644 index 0000000..abee631 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedStatisticMapper.java @@ -0,0 +1,63 @@ +package com.zhyc.module.feed.mapper; + +import java.util.List; +import com.zhyc.module.feed.domain.SgFeedStatistic; +import org.apache.ibatis.annotations.Mapper; + +/** + * 饲喂量统计Mapper接口 + * + * @author HashMap + * @date 2025-08-23 + */ +@Mapper +public interface SgFeedStatisticMapper +{ + /** + * 查询饲喂量统计 + * + * @param id 饲喂量统计主键 + * @return 饲喂量统计 + */ + SgFeedStatistic selectSgFeedStatisticById(String id); + + /** + * 查询饲喂量统计列表 + * + * @param sgFeedStatistic 饲喂量统计 + * @return 饲喂量统计集合 + */ + List selectSgFeedStatisticList(SgFeedStatistic sgFeedStatistic); + + /** + * 新增饲喂量统计 + * + * @param sgFeedStatistic 饲喂量统计 + * @return 结果 + */ + int insertSgFeedStatistic(SgFeedStatistic sgFeedStatistic); + + /** + * 修改饲喂量统计 + * + * @param sgFeedStatistic 饲喂量统计 + * @return 结果 + */ + int updateSgFeedStatistic(SgFeedStatistic sgFeedStatistic); + + /** + * 删除饲喂量统计 + * + * @param id 饲喂量统计主键 + * @return 结果 + */ + int deleteSgFeedStatisticById(String id); + + /** + * 批量删除饲喂量统计 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + int deleteSgFeedStatisticByIds(String[] ids); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFodderMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFodderMapper.java deleted file mode 100644 index c916e24..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFodderMapper.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zhyc.module.feed.mapper; - -import java.util.List; -import com.zhyc.module.feed.domain.SgFodder; - -/** - * 原料Mapper接口 - * - * @author ruoyi - * @date 2025-08-01 - */ -public interface SgFodderMapper -{ - /** - * 查询原料 - * - * @param id 原料主键 - * @return 原料 - */ - public SgFodder selectSgFodderById(Long id); - - /** - * 查询原料列表 - * - * @param sgFodder 原料 - * @return 原料集合 - */ - public List selectSgFodderList(SgFodder sgFodder); - - /** - * 新增原料 - * - * @param sgFodder 原料 - * @return 结果 - */ - public int insertSgFodder(SgFodder sgFodder); - - /** - * 修改原料 - * - * @param sgFodder 原料 - * @return 结果 - */ - public int updateSgFodder(SgFodder sgFodder); - - /** - * 删除原料 - * - * @param id 原料主键 - * @return 结果 - */ - public int deleteSgFodderById(Long id); - - /** - * 批量删除原料 - * - * @param ids 需要删除的数据主键集合 - * @return 结果 - */ - public int deleteSgFodderByIds(Long[] ids); -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/TypeHandler/DaSheepfoldHandler.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/TypeHandler/DaSheepfoldHandler.java new file mode 100644 index 0000000..af89abc --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/TypeHandler/DaSheepfoldHandler.java @@ -0,0 +1,38 @@ +package com.zhyc.module.feed.mapper.TypeHandler; + +import com.alibaba.fastjson2.JSON; +import com.zhyc.module.base.domain.DaSheepfold; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedTypes; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +@MappedTypes(List.class) +public class DaSheepfoldHandler extends BaseTypeHandler> { + @Override + public void setNonNullParameter(PreparedStatement ps, int i, + List parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSON.toJSONString(parameter)); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return JSON.parseArray(rs.getString(columnName), DaSheepfold.class); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return JSON.parseArray(rs.getString(columnIndex), DaSheepfold.class); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return JSON.parseArray(cs.getString(columnIndex), DaSheepfold.class); + } +} + diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/TypeHandler/JsonTypeHandler.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/TypeHandler/JsonTypeHandler.java new file mode 100644 index 0000000..dd0d22f --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/TypeHandler/JsonTypeHandler.java @@ -0,0 +1,42 @@ +package com.zhyc.module.feed.mapper.TypeHandler; + +import com.alibaba.fastjson2.JSON; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class JsonTypeHandler extends BaseTypeHandler { + private final Class type; + + public JsonTypeHandler(Class type) { + this.type = type; + } + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSON.toJSONString(parameter)); + } + + @Override + public T getNullableResult(ResultSet rs, String columnName) throws SQLException { + String json = rs.getString(columnName); + return JSON.parseObject(json, type); + } + + @Override + public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String json = rs.getString(columnIndex); + return JSON.parseObject(json, type); + } + + @Override + public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + String json = cs.getString(columnIndex); + return JSON.parseObject(json, type); + } +} + diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/TypeHandler/SgFormulaListHandler.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/TypeHandler/SgFormulaListHandler.java new file mode 100644 index 0000000..10d857b --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/TypeHandler/SgFormulaListHandler.java @@ -0,0 +1,37 @@ +package com.zhyc.module.feed.mapper.TypeHandler; + +import com.alibaba.fastjson2.JSON; +import com.zhyc.module.feed.domain.SgFormulaList; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedTypes; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +@MappedTypes(List.class) +public class SgFormulaListHandler extends BaseTypeHandler> { + @Override + public void setNonNullParameter(PreparedStatement ps, int i, + List parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSON.toJSONString(parameter)); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return JSON.parseArray(rs.getString(columnName), SgFormulaList.class); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return JSON.parseArray(rs.getString(columnIndex), SgFormulaList.class); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return JSON.parseArray(cs.getString(columnIndex), SgFormulaList.class); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedDetailsService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedDetailsService.java deleted file mode 100644 index ac695f8..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedDetailsService.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zhyc.module.feed.service; - -import java.util.List; -import com.zhyc.module.feed.domain.SgFeedDetails; - -/** - * 饲喂记录详情Service接口 - * - * @author ruoyi - * @date 2025-08-01 - */ -public interface ISgFeedDetailsService -{ - /** - * 查询饲喂记录详情 - * - * @param id 饲喂记录详情主键 - * @return 饲喂记录详情 - */ - public SgFeedDetails selectSgFeedDetailsById(Long id); - - /** - * 查询饲喂记录详情列表 - * - * @param sgFeedDetails 饲喂记录详情 - * @return 饲喂记录详情集合 - */ - public List selectSgFeedDetailsList(SgFeedDetails sgFeedDetails); - - /** - * 新增饲喂记录详情 - * - * @param sgFeedDetails 饲喂记录详情 - * @return 结果 - */ - public int insertSgFeedDetails(SgFeedDetails sgFeedDetails); - - /** - * 修改饲喂记录详情 - * - * @param sgFeedDetails 饲喂记录详情 - * @return 结果 - */ - public int updateSgFeedDetails(SgFeedDetails sgFeedDetails); - - /** - * 批量删除饲喂记录详情 - * - * @param ids 需要删除的饲喂记录详情主键集合 - * @return 结果 - */ - public int deleteSgFeedDetailsByIds(Long[] ids); - - /** - * 删除饲喂记录详情信息 - * - * @param id 饲喂记录详情主键 - * @return 结果 - */ - public int deleteSgFeedDetailsById(Long id); -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedInfoService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedInfoService.java deleted file mode 100644 index 8d412b8..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedInfoService.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zhyc.module.feed.service; - -import java.util.List; -import com.zhyc.module.feed.domain.SgFeedInfo; - -/** - * 饲喂记录Service接口 - * - * @author ruoyi - * @date 2025-08-01 - */ -public interface ISgFeedInfoService -{ - /** - * 查询饲喂记录 - * - * @param id 饲喂记录主键 - * @return 饲喂记录 - */ - public SgFeedInfo selectSgFeedInfoById(Long id); - - /** - * 查询饲喂记录列表 - * - * @param sgFeedInfo 饲喂记录 - * @return 饲喂记录集合 - */ - public List selectSgFeedInfoList(SgFeedInfo sgFeedInfo); - - /** - * 新增饲喂记录 - * - * @param sgFeedInfo 饲喂记录 - * @return 结果 - */ - public int insertSgFeedInfo(SgFeedInfo sgFeedInfo); - - /** - * 修改饲喂记录 - * - * @param sgFeedInfo 饲喂记录 - * @return 结果 - */ - public int updateSgFeedInfo(SgFeedInfo sgFeedInfo); - - /** - * 批量删除饲喂记录 - * - * @param ids 需要删除的饲喂记录主键集合 - * @return 结果 - */ - public int deleteSgFeedInfoByIds(Long[] ids); - - /** - * 删除饲喂记录信息 - * - * @param id 饲喂记录主键 - * @return 结果 - */ - public int deleteSgFeedInfoById(Long id); -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedListService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedListService.java new file mode 100644 index 0000000..b3c5a5f --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedListService.java @@ -0,0 +1,63 @@ +package com.zhyc.module.feed.service; + +import java.util.List; + +import com.zhyc.module.feed.domain.SgFeedList; + +/** + * 配料清单Service接口 + * + * @author HashMap + * @date 2025-08-19 + */ +public interface ISgFeedListService { + /** + * 查询配料清单 + * + * @param id 配料清单主键 + * @return 配料清单 + */ + SgFeedList selectSgFeedListById(Long id); + + /** + * 查询配料清单列表 + * + * @param sgFeedList 配料清单 + * @return 配料清单集合 + */ + List selectSgFeedListList(SgFeedList sgFeedList); + + /** + * 新增配料清单 + * + * @param sgFeedList 配料清单 + * @return 结果 + */ + int insertSgFeedList(SgFeedList sgFeedList); + + /** + * 修改配料清单 + * + * @param sgFeedList 配料清单 + * @return 结果 + */ + int updateSgFeedList(SgFeedList sgFeedList); + + /** + * 批量删除配料清单 + * + * @param ids 需要删除的配料清单主键集合 + * @return 结果 + */ + int deleteSgFeedListByIds(Long[] ids); + + /** + * 删除配料清单信息 + * + * @param id 配料清单主键 + * @return 结果 + */ + int deleteSgFeedListById(Long id); + + void SyncFeedList(); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedPlanService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedPlanService.java index 3b172e0..6ab5cf3 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedPlanService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedPlanService.java @@ -8,7 +8,7 @@ import com.zhyc.module.feed.domain.SgFeedPlan; * 饲喂计划Service接口 * * @author HashMap - * @date 2025-08-08 + * @date 2025-08-14 */ public interface ISgFeedPlanService { @@ -18,7 +18,7 @@ public interface ISgFeedPlanService * @param createDate 饲喂计划主键 * @return 饲喂计划 */ - SgFeedPlan selectSgFeedPlanByCreateDate(Date createDate); + public SgFeedPlan selectSgFeedPlanByCreateDate(Date createDate); /** * 查询饲喂计划列表 @@ -26,7 +26,7 @@ public interface ISgFeedPlanService * @param sgFeedPlan 饲喂计划 * @return 饲喂计划集合 */ - List selectSgFeedPlanList(SgFeedPlan sgFeedPlan); + public List selectSgFeedPlanList(SgFeedPlan sgFeedPlan); /** * 新增饲喂计划 @@ -34,7 +34,7 @@ public interface ISgFeedPlanService * @param sgFeedPlan 饲喂计划 * @return 结果 */ - int insertSgFeedPlan(SgFeedPlan sgFeedPlan); + public int insertSgFeedPlan(SgFeedPlan sgFeedPlan); /** * 修改饲喂计划 @@ -42,7 +42,7 @@ public interface ISgFeedPlanService * @param sgFeedPlan 饲喂计划 * @return 结果 */ - int updateSgFeedPlan(SgFeedPlan sgFeedPlan); + public int updateSgFeedPlan(SgFeedPlan sgFeedPlan); /** * 批量删除饲喂计划 @@ -50,7 +50,7 @@ public interface ISgFeedPlanService * @param createDates 需要删除的饲喂计划主键集合 * @return 结果 */ - int deleteSgFeedPlanByCreateDates(Date[] createDates); + public int deleteSgFeedPlanByCreateDates(Date[] createDates); /** * 删除饲喂计划信息 @@ -58,5 +58,7 @@ public interface ISgFeedPlanService * @param createDate 饲喂计划主键 * @return 结果 */ - int deleteSgFeedPlanByCreateDate(Date createDate); + public int deleteSgFeedPlanByCreateDate(Date createDate); + + int getSheepCountByFoldId(Integer foldId); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedRatioService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedRatioService.java deleted file mode 100644 index 804130f..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedRatioService.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zhyc.module.feed.service; - -import java.util.List; -import com.zhyc.module.feed.domain.SgFeedRatio; - -/** - * 饲喂比例Service接口 - * - * @author ruoyi - * @date 2025-08-01 - */ -public interface ISgFeedRatioService -{ - /** - * 查询饲喂比例 - * - * @param id 饲喂比例主键 - * @return 饲喂比例 - */ - public SgFeedRatio selectSgFeedRatioById(Long id); - - /** - * 查询饲喂比例列表 - * - * @param sgFeedRatio 饲喂比例 - * @return 饲喂比例集合 - */ - public List selectSgFeedRatioList(SgFeedRatio sgFeedRatio); - - /** - * 新增饲喂比例 - * - * @param sgFeedRatio 饲喂比例 - * @return 结果 - */ - public int insertSgFeedRatio(SgFeedRatio sgFeedRatio); - - /** - * 修改饲喂比例 - * - * @param sgFeedRatio 饲喂比例 - * @return 结果 - */ - public int updateSgFeedRatio(SgFeedRatio sgFeedRatio); - - /** - * 批量删除饲喂比例 - * - * @param ids 需要删除的饲喂比例主键集合 - * @return 结果 - */ - public int deleteSgFeedRatioByIds(Long[] ids); - - /** - * 删除饲喂比例信息 - * - * @param id 饲喂比例主键 - * @return 结果 - */ - public int deleteSgFeedRatioById(Long id); -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedStatisticService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedStatisticService.java new file mode 100644 index 0000000..9bdad7a --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedStatisticService.java @@ -0,0 +1,65 @@ +package com.zhyc.module.feed.service; + +import java.util.List; +import com.zhyc.module.feed.domain.SgFeedStatistic; + +/** + * 饲喂量统计Service接口 + * + * @author HashMap + * @date 2025-08-23 + */ +public interface ISgFeedStatisticService +{ + /** + * 查询饲喂量统计 + * + * @param id 饲喂量统计主键 + * @return 饲喂量统计 + */ + SgFeedStatistic selectSgFeedStatisticById(String id); + + /** + * 查询饲喂量统计列表 + * + * @param sgFeedStatistic 饲喂量统计 + * @return 饲喂量统计集合 + */ + List selectSgFeedStatisticList(SgFeedStatistic sgFeedStatistic); + + /** + * 新增饲喂量统计 + * + * @param sgFeedStatistic 饲喂量统计 + * @return 结果 + */ + int insertSgFeedStatistic(SgFeedStatistic sgFeedStatistic); + + /** + * 修改饲喂量统计 + * + * @param sgFeedStatistic 饲喂量统计 + * @return 结果 + */ + int updateSgFeedStatistic(SgFeedStatistic sgFeedStatistic); + + /** + * 批量删除饲喂量统计 + * + * @param ids 需要删除的饲喂量统计主键集合 + * @return 结果 + */ + int deleteSgFeedStatisticByIds(String[] ids); + + /** + * 删除饲喂量统计信息 + * + * @param id 饲喂量统计主键 + * @return 结果 + */ + int deleteSgFeedStatisticById(String id); + + void getInitSgFeedStatistic(SgFeedStatistic sgFeedStatistic); + + +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFodderService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFodderService.java deleted file mode 100644 index 3ddac8f..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFodderService.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zhyc.module.feed.service; - -import java.util.List; -import com.zhyc.module.feed.domain.SgFodder; - -/** - * 原料Service接口 - * - * @author ruoyi - * @date 2025-08-01 - */ -public interface ISgFodderService -{ - /** - * 查询原料 - * - * @param id 原料主键 - * @return 原料 - */ - public SgFodder selectSgFodderById(Long id); - - /** - * 查询原料列表 - * - * @param sgFodder 原料 - * @return 原料集合 - */ - public List selectSgFodderList(SgFodder sgFodder); - - /** - * 新增原料 - * - * @param sgFodder 原料 - * @return 结果 - */ - public int insertSgFodder(SgFodder sgFodder); - - /** - * 修改原料 - * - * @param sgFodder 原料 - * @return 结果 - */ - public int updateSgFodder(SgFodder sgFodder); - - /** - * 批量删除原料 - * - * @param ids 需要删除的原料主键集合 - * @return 结果 - */ - public int deleteSgFodderByIds(Long[] ids); - - /** - * 删除原料信息 - * - * @param id 原料主键 - * @return 结果 - */ - public int deleteSgFodderById(Long id); -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedDetailsServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedDetailsServiceImpl.java deleted file mode 100644 index 2f58d33..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedDetailsServiceImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.zhyc.module.feed.service.impl; - -import java.util.List; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.zhyc.module.feed.mapper.SgFeedDetailsMapper; -import com.zhyc.module.feed.domain.SgFeedDetails; -import com.zhyc.module.feed.service.ISgFeedDetailsService; - -/** - * 饲喂记录详情Service业务层处理 - * - * @author ruoyi - * @date 2025-08-01 - */ -@Service -public class SgFeedDetailsServiceImpl implements ISgFeedDetailsService -{ - @Autowired - private SgFeedDetailsMapper sgFeedDetailsMapper; - - /** - * 查询饲喂记录详情 - * - * @param id 饲喂记录详情主键 - * @return 饲喂记录详情 - */ - @Override - public SgFeedDetails selectSgFeedDetailsById(Long id) - { - return sgFeedDetailsMapper.selectSgFeedDetailsById(id); - } - - /** - * 查询饲喂记录详情列表 - * - * @param sgFeedDetails 饲喂记录详情 - * @return 饲喂记录详情 - */ - @Override - public List selectSgFeedDetailsList(SgFeedDetails sgFeedDetails) - { - return sgFeedDetailsMapper.selectSgFeedDetailsList(sgFeedDetails); - } - - /** - * 新增饲喂记录详情 - * - * @param sgFeedDetails 饲喂记录详情 - * @return 结果 - */ - @Override - public int insertSgFeedDetails(SgFeedDetails sgFeedDetails) - { - return sgFeedDetailsMapper.insertSgFeedDetails(sgFeedDetails); - } - - /** - * 修改饲喂记录详情 - * - * @param sgFeedDetails 饲喂记录详情 - * @return 结果 - */ - @Override - public int updateSgFeedDetails(SgFeedDetails sgFeedDetails) - { - return sgFeedDetailsMapper.updateSgFeedDetails(sgFeedDetails); - } - - /** - * 批量删除饲喂记录详情 - * - * @param ids 需要删除的饲喂记录详情主键 - * @return 结果 - */ - @Override - public int deleteSgFeedDetailsByIds(Long[] ids) - { - return sgFeedDetailsMapper.deleteSgFeedDetailsByIds(ids); - } - - /** - * 删除饲喂记录详情信息 - * - * @param id 饲喂记录详情主键 - * @return 结果 - */ - @Override - public int deleteSgFeedDetailsById(Long id) - { - return sgFeedDetailsMapper.deleteSgFeedDetailsById(id); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedInfoServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedInfoServiceImpl.java deleted file mode 100644 index ea2f711..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedInfoServiceImpl.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.zhyc.module.feed.service.impl; - -import java.util.List; -import com.zhyc.common.utils.DateUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.zhyc.module.feed.mapper.SgFeedInfoMapper; -import com.zhyc.module.feed.domain.SgFeedInfo; -import com.zhyc.module.feed.service.ISgFeedInfoService; - -/** - * 饲喂记录Service业务层处理 - * - * @author ruoyi - * @date 2025-08-01 - */ -@Service -public class SgFeedInfoServiceImpl implements ISgFeedInfoService -{ - @Autowired - private SgFeedInfoMapper sgFeedInfoMapper; - - /** - * 查询饲喂记录 - * - * @param id 饲喂记录主键 - * @return 饲喂记录 - */ - @Override - public SgFeedInfo selectSgFeedInfoById(Long id) - { - return sgFeedInfoMapper.selectSgFeedInfoById(id); - } - - /** - * 查询饲喂记录列表 - * - * @param sgFeedInfo 饲喂记录 - * @return 饲喂记录 - */ - @Override - public List selectSgFeedInfoList(SgFeedInfo sgFeedInfo) - { - return sgFeedInfoMapper.selectSgFeedInfoList(sgFeedInfo); - } - - /** - * 新增饲喂记录 - * - * @param sgFeedInfo 饲喂记录 - * @return 结果 - */ - @Override - public int insertSgFeedInfo(SgFeedInfo sgFeedInfo) - { - sgFeedInfo.setCreateTime(DateUtils.getNowDate()); - return sgFeedInfoMapper.insertSgFeedInfo(sgFeedInfo); - } - - /** - * 修改饲喂记录 - * - * @param sgFeedInfo 饲喂记录 - * @return 结果 - */ - @Override - public int updateSgFeedInfo(SgFeedInfo sgFeedInfo) - { - return sgFeedInfoMapper.updateSgFeedInfo(sgFeedInfo); - } - - /** - * 批量删除饲喂记录 - * - * @param ids 需要删除的饲喂记录主键 - * @return 结果 - */ - @Override - public int deleteSgFeedInfoByIds(Long[] ids) - { - return sgFeedInfoMapper.deleteSgFeedInfoByIds(ids); - } - - /** - * 删除饲喂记录信息 - * - * @param id 饲喂记录主键 - * @return 结果 - */ - @Override - public int deleteSgFeedInfoById(Long id) - { - return sgFeedInfoMapper.deleteSgFeedInfoById(id); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedListServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedListServiceImpl.java new file mode 100644 index 0000000..225d851 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedListServiceImpl.java @@ -0,0 +1,192 @@ +package com.zhyc.module.feed.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.zhyc.module.feed.domain.SgFeedPlan; +import com.zhyc.module.feed.domain.SgFormulaManagement; +import com.zhyc.module.feed.service.ISgFeedPlanService; +import com.zhyc.module.feed.service.ISgFormulaManagementService; +import lombok.Getter; +import org.springframework.stereotype.Service; +import com.zhyc.module.feed.mapper.SgFeedListMapper; +import com.zhyc.module.feed.domain.SgFeedList; +import com.zhyc.module.feed.service.ISgFeedListService; + +/** + * 配料清单Service业务层处理 + * + * @author HashMap + * @date 2025-08-19 + */ +@Service +public class SgFeedListServiceImpl implements ISgFeedListService { + private final SgFeedListMapper sgFeedListMapper; + private final ISgFormulaManagementService sgFormulaManagementService; + private final ISgFeedPlanService sgFeedPlanService; + @Getter + private final static Map sgFeedListMap = new HashMap<>(); + + public SgFeedListServiceImpl(SgFeedListMapper sgFeedListMapper, ISgFormulaManagementService sgFormulaManagementService, ISgFeedPlanService sgFeedPlanService) { + this.sgFeedListMapper = sgFeedListMapper; + this.sgFormulaManagementService = sgFormulaManagementService; + this.sgFeedPlanService = sgFeedPlanService; + } + + /** + * 查询配料清单 + * + * @param id 配料清单主键 + * @return 配料清单 + */ + @Override + public SgFeedList selectSgFeedListById(Long id) { + return sgFeedListMapper.selectSgFeedListById(id); + } + + /** + * 查询配料清单列表 + * + * @param sgFeedList 配料清单 + * @return 配料清单 + */ + @Override + public List selectSgFeedListList(SgFeedList sgFeedList) { + return sgFeedListMapper.selectSgFeedListList(sgFeedList); + } + + /** + * 新增配料清单 + * + * @param sgFeedList 配料清单 + * @return 结果 + */ + @Override + public int insertSgFeedList(SgFeedList sgFeedList) { + return sgFeedListMapper.insertSgFeedList(sgFeedList); + } + + /** + * 修改配料清单 + * + * @param sgFeedList 配料清单 + * @return 结果 + */ + @Override + public int updateSgFeedList(SgFeedList sgFeedList) { + return sgFeedListMapper.updateSgFeedList(sgFeedList); + } + + /** + * 批量删除配料清单 + * + * @param ids 需要删除的配料清单主键 + * @return 结果 + */ + @Override + public int deleteSgFeedListByIds(Long[] ids) { + return sgFeedListMapper.deleteSgFeedListByIds(ids); + } + + /** + * 删除配料清单信息 + * + * @param id 配料清单主键 + * @return 结果 + */ + @Override + public int deleteSgFeedListById(Long id) { + return sgFeedListMapper.deleteSgFeedListById(id); + } + + public void SyncFeedList() { + // 清空旧缓存 + sgFeedListMap.clear(); + // 获取配方管理和现有配料清单内容 + List formulaManagementList = sgFormulaManagementService.selectSgFormulaManagementList(new SgFormulaManagement()); + List feedLists = this.selectSgFeedListList(new SgFeedList()); + // 将最新查询的配料清单加入缓存 + for (SgFeedList sgFeedList : feedLists) { + sgFeedListMap.put(sgFeedList.getFormulaId() + "_" + sgFeedList.getFormulaBatchId(), sgFeedList); + } + // 与新的配方管理列表同步 - 如果配料清单没有对应数据则加入 + for (SgFormulaManagement sgFormulaManagement : formulaManagementList) { + // 匹配 但忽略模板配方 + if (sgFormulaManagement.getFormulaId() != null && sgFormulaManagement.getBatchId() != null && !sgFormulaManagement.getBatchId().equals("0")) { + // 查询当前配方管理项是否存在现有配料计划中 (不论是否存在都要设置,因为缓存被清空,存在则更新,不存在则插入) + boolean isExist = sgFeedListMap.containsKey(sgFormulaManagement.getFormulaId() + "_" + sgFormulaManagement.getBatchId()); + // 标志位 : 如果当前配方不在饲喂计划中则不生成配量清单 + boolean isPlan = true; + // 设置缓存对象具体值 + SgFeedList sgFeedList = new SgFeedList(); + sgFeedList.setFormulaId(sgFormulaManagement.getFormulaId()); + sgFeedList.setFormulaBatchId(sgFormulaManagement.getBatchId()); + sgFeedList.setFormulaList(sgFormulaManagement.getSgFormulaList()); + sgFeedList.setRootFormula(sgFormulaManagement); + + + // 从饲喂计划列表中查出对应值(饲喂量需要计划中的比例计算) + SgFeedPlan rootPlanQuery = new SgFeedPlan(); + rootPlanQuery.setFormulaId(sgFormulaManagement.getFormulaId()); + rootPlanQuery.setBatchId(sgFormulaManagement.getBatchId()); + List sgFeedPlans = sgFeedPlanService.selectSgFeedPlanList(rootPlanQuery); + // 为空则标识当前配方不在饲喂计划中 && 不在缓存中设置 + if (sgFeedPlans.isEmpty()) { + isPlan = false; + } else { + // rootPlan中存储的是该配方批号的总量 + SgFeedPlan rootPlan = computePlanTotal(sgFeedPlans); + + // 将计划实体对象设置到配料清单中 + sgFeedList.setRootPlan(rootPlan); + + // 完整的配料清单对象加入缓存 + sgFeedListMap.put(sgFormulaManagement.getFormulaId() + "_" + sgFormulaManagement.getBatchId(), sgFeedList); + } + + // 不存在则插入 + if (!isExist && isPlan) { + this.insertSgFeedList(sgFeedList); + } + } + } + } + + /** + * 计算某个配方某个批次的总和值 + * + * @param sgFeedPlans 配方计划列表 + * @return 各个值总和 + */ + private static SgFeedPlan computePlanTotal(List sgFeedPlans) { + SgFeedPlan rootPlan = new SgFeedPlan(); + if (!sgFeedPlans.isEmpty()) { + int sheepCountTotal = 0; + double sheepDailySize = 0.0; + double planFeedMorningSize = 0.0; + double planFeedNoonSize = 0.0; + double planFeedAfternoonSize = 0.0; + double planFeedTotalSize = 0.0; + for (SgFeedPlan sgFeedPlan : sgFeedPlans) { + sheepCountTotal += sgFeedPlan.getSheepCount(); + sheepDailySize += sgFeedPlan.getPlanDailySize(); + planFeedMorningSize += sgFeedPlan.getPlanMorningSize(); + planFeedNoonSize += sgFeedPlan.getPlanNoonSize(); + planFeedAfternoonSize += sgFeedPlan.getPlanAfternoonSize(); + planFeedTotalSize += sgFeedPlan.getPlanFeedTotal(); + } + + rootPlan.setSheepCount(sheepCountTotal); + rootPlan.setPlanDailySize(sheepDailySize); + rootPlan.setPlanMorningSize(planFeedMorningSize); + rootPlan.setPlanNoonSize(planFeedNoonSize); + rootPlan.setPlanAfternoonSize(planFeedAfternoonSize); + rootPlan.setPlanFeedTotal(planFeedTotalSize); + + // 设置计划日期 + rootPlan.setPlanDate(sgFeedPlans.get(0).getPlanDate()); + } + return rootPlan; + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedPlanServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedPlanServiceImpl.java index 937cd32..79bcfcc 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedPlanServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedPlanServiceImpl.java @@ -13,7 +13,7 @@ import org.springframework.transaction.annotation.Transactional; * 饲喂计划Service业务层处理 * * @author HashMap - * @date 2025-08-08 + * @date 2025-08-14 */ @Service @Transactional(rollbackFor=Exception.class) @@ -96,4 +96,9 @@ public class SgFeedPlanServiceImpl implements ISgFeedPlanService { return sgFeedPlanMapper.deleteSgFeedPlanByCreateDate(createDate); } + + @Override + public int getSheepCountByFoldId(Integer foldId) { + return sgFeedPlanMapper.selectSheepCountByFoldId(foldId); + } } diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedRatioServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedRatioServiceImpl.java deleted file mode 100644 index ee15ab0..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedRatioServiceImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.zhyc.module.feed.service.impl; - -import java.util.List; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.zhyc.module.feed.mapper.SgFeedRatioMapper; -import com.zhyc.module.feed.domain.SgFeedRatio; -import com.zhyc.module.feed.service.ISgFeedRatioService; - -/** - * 饲喂比例Service业务层处理 - * - * @author ruoyi - * @date 2025-08-01 - */ -@Service -public class SgFeedRatioServiceImpl implements ISgFeedRatioService -{ - @Autowired - private SgFeedRatioMapper sgFeedRatioMapper; - - /** - * 查询饲喂比例 - * - * @param id 饲喂比例主键 - * @return 饲喂比例 - */ - @Override - public SgFeedRatio selectSgFeedRatioById(Long id) - { - return sgFeedRatioMapper.selectSgFeedRatioById(id); - } - - /** - * 查询饲喂比例列表 - * - * @param sgFeedRatio 饲喂比例 - * @return 饲喂比例 - */ - @Override - public List selectSgFeedRatioList(SgFeedRatio sgFeedRatio) - { - return sgFeedRatioMapper.selectSgFeedRatioList(sgFeedRatio); - } - - /** - * 新增饲喂比例 - * - * @param sgFeedRatio 饲喂比例 - * @return 结果 - */ - @Override - public int insertSgFeedRatio(SgFeedRatio sgFeedRatio) - { - return sgFeedRatioMapper.insertSgFeedRatio(sgFeedRatio); - } - - /** - * 修改饲喂比例 - * - * @param sgFeedRatio 饲喂比例 - * @return 结果 - */ - @Override - public int updateSgFeedRatio(SgFeedRatio sgFeedRatio) - { - return sgFeedRatioMapper.updateSgFeedRatio(sgFeedRatio); - } - - /** - * 批量删除饲喂比例 - * - * @param ids 需要删除的饲喂比例主键 - * @return 结果 - */ - @Override - public int deleteSgFeedRatioByIds(Long[] ids) - { - return sgFeedRatioMapper.deleteSgFeedRatioByIds(ids); - } - - /** - * 删除饲喂比例信息 - * - * @param id 饲喂比例主键 - * @return 结果 - */ - @Override - public int deleteSgFeedRatioById(Long id) - { - return sgFeedRatioMapper.deleteSgFeedRatioById(id); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedStatisticServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedStatisticServiceImpl.java new file mode 100644 index 0000000..b1766bd --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedStatisticServiceImpl.java @@ -0,0 +1,176 @@ +package com.zhyc.module.feed.service.impl; + +import java.util.List; +import java.util.stream.Collectors; + +import com.zhyc.module.base.domain.DaSheepfold; +import com.zhyc.module.feed.domain.SgFeedList; +import com.zhyc.module.feed.domain.SgFeedPlan; +import com.zhyc.module.feed.domain.SgFormulaList; +import com.zhyc.module.feed.service.ISgFeedListService; +import com.zhyc.module.feed.service.ISgFeedPlanService; +import org.springframework.stereotype.Service; +import com.zhyc.module.feed.mapper.SgFeedStatisticMapper; +import com.zhyc.module.feed.domain.SgFeedStatistic; +import com.zhyc.module.feed.service.ISgFeedStatisticService; + +/** + * 饲喂量统计Service业务层处理 + * + * @author HashMap + * @date 2025-08-23 + */ +@Service +public class SgFeedStatisticServiceImpl implements ISgFeedStatisticService { + private final SgFeedStatisticMapper sgFeedStatisticMapper; + + private final ISgFeedListService sgFeedListService; + private final ISgFeedPlanService sgFeedPlanService; + + public SgFeedStatisticServiceImpl(SgFeedStatisticMapper sgFeedStatisticMapper, ISgFeedListService sgFeedListService, ISgFeedPlanService sgFeedPlanService) { + this.sgFeedStatisticMapper = sgFeedStatisticMapper; + this.sgFeedListService = sgFeedListService; + this.sgFeedPlanService = sgFeedPlanService; + } + + /** + * 查询饲喂量统计 + * + * @param id 饲喂量统计主键 + * @return 饲喂量统计 + */ + @Override + public SgFeedStatistic selectSgFeedStatisticById(String id) { + return sgFeedStatisticMapper.selectSgFeedStatisticById(id); + } + + /** + * 查询饲喂量统计列表 + * + * @param sgFeedStatistic 饲喂量统计 + * @return 饲喂量统计 + */ + @Override + public List selectSgFeedStatisticList(SgFeedStatistic sgFeedStatistic) { + return sgFeedStatisticMapper.selectSgFeedStatisticList(sgFeedStatistic); + } + + /** + * 新增饲喂量统计 + * + * @param sgFeedStatistic 饲喂量统计 + * @return 结果 + */ + @Override + public int insertSgFeedStatistic(SgFeedStatistic sgFeedStatistic) { + return sgFeedStatisticMapper.insertSgFeedStatistic(sgFeedStatistic); + } + + /** + * 修改饲喂量统计 + * + * @param sgFeedStatistic 饲喂量统计 + * @return 结果 + */ + @Override + public int updateSgFeedStatistic(SgFeedStatistic sgFeedStatistic) { + return sgFeedStatisticMapper.updateSgFeedStatistic(sgFeedStatistic); + } + + /** + * 批量删除饲喂量统计 + * + * @param ids 需要删除的饲喂量统计主键 + * @return 结果 + */ + @Override + public int deleteSgFeedStatisticByIds(String[] ids) { + return sgFeedStatisticMapper.deleteSgFeedStatisticByIds(ids); + } + + /** + * 删除饲喂量统计信息 + * + * @param id 饲喂量统计主键 + * @return 结果 + */ + @Override + public int deleteSgFeedStatisticById(String id) { + return sgFeedStatisticMapper.deleteSgFeedStatisticById(id); + } + + /** + * 向待插入数据表单提供数据预载服务 + * + * @param sgFeedStatistic 待填充的初始化数据 + * @author ShiHan Wang + */ + @Override + public void getInitSgFeedStatistic(SgFeedStatistic sgFeedStatistic) { + // 1. 查找饲料清单 + SgFeedList sgFeedListQuery = new SgFeedList(); + sgFeedListQuery.setFormulaId(sgFeedStatistic.getFormulaId()); + sgFeedListQuery.setFormulaBatchId(sgFeedStatistic.getFormulaBatchId()); + + List feedLists = sgFeedListService.selectSgFeedListList(sgFeedListQuery); + + if (!feedLists.isEmpty()) { + // 刷新缓存 + sgFeedListService.SyncFeedList(); + + // 从缓存获取完整配方清单 + String cacheKey = sgFeedStatistic.getFormulaId() + "_" + sgFeedStatistic.getFormulaBatchId(); + SgFeedList sgFeedList = SgFeedListServiceImpl.getSgFeedListMap().get(cacheKey); + + if (sgFeedList != null && sgFeedList.getFormulaList() != null) { + // 并行流式计算 提高性能 + sgFeedList.getFormulaList().parallelStream().forEach(item -> { + double ratio = item.getRatio() / 100.0; + double feedSize = sgFeedList.getRootPlan().getPlanMorningSize() * ratio + + sgFeedList.getRootPlan().getPlanNoonSize() * ratio + + sgFeedList.getRootPlan().getPlanAfternoonSize() * ratio; + item.setFeedSize(feedSize); + }); + + // 统计总和 + double totalFeedSize = sgFeedList.getFormulaList() + .parallelStream() + .mapToDouble(SgFormulaList::getFeedSize) + .sum(); + sgFeedStatistic.setMaterialList(sgFeedList.getFormulaList()); + sgFeedStatistic.setFeedTotalSize(totalFeedSize); + } else { + throw new RuntimeException("WARNING: 原料数据为空"); + } + } + + // 2. 查找饲喂计划并填充羊舍信息 + SgFeedPlan sgFeedPlanQuery = new SgFeedPlan(); + sgFeedPlanQuery.setFormulaId(sgFeedStatistic.getFormulaId()); + sgFeedPlanQuery.setBatchId(sgFeedStatistic.getFormulaBatchId()); + + List sgFeedPlans = sgFeedPlanService.selectSgFeedPlanList(sgFeedPlanQuery); + + if (!sgFeedPlans.isEmpty()) { + // 并行计算提高查询性能 + List sheepfolds = sgFeedPlans.parallelStream() + .map(plan -> { + DaSheepfold sheepfold = new DaSheepfold(); + sheepfold.setId((long) plan.getSheepHouseId()); + return sheepfold; + }) + .collect(Collectors.toList()); + + long sheepCount = sgFeedPlans.parallelStream() + .mapToLong(SgFeedPlan::getSheepCount) + .sum(); + sgFeedStatistic.setSheepFoldList(sheepfolds); + sgFeedStatistic.setSheepFoldCount(sheepCount); + // 计算日均饲喂量 + sgFeedStatistic.setFeedDailySize(sgFeedStatistic.getFeedTotalSize() / sgFeedStatistic.getSheepFoldCount()); + } else { + throw new RuntimeException("WARNING: 不存在该计划"); + } + } + +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFodderServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFodderServiceImpl.java deleted file mode 100644 index 523fc3d..0000000 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFodderServiceImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.zhyc.module.feed.service.impl; - -import java.util.List; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.zhyc.module.feed.mapper.SgFodderMapper; -import com.zhyc.module.feed.domain.SgFodder; -import com.zhyc.module.feed.service.ISgFodderService; - -/** - * 原料Service业务层处理 - * - * @author ruoyi - * @date 2025-08-01 - */ -@Service -public class SgFodderServiceImpl implements ISgFodderService -{ - @Autowired - private SgFodderMapper sgFodderMapper; - - /** - * 查询原料 - * - * @param id 原料主键 - * @return 原料 - */ - @Override - public SgFodder selectSgFodderById(Long id) - { - return sgFodderMapper.selectSgFodderById(id); - } - - /** - * 查询原料列表 - * - * @param sgFodder 原料 - * @return 原料 - */ - @Override - public List selectSgFodderList(SgFodder sgFodder) - { - return sgFodderMapper.selectSgFodderList(sgFodder); - } - - /** - * 新增原料 - * - * @param sgFodder 原料 - * @return 结果 - */ - @Override - public int insertSgFodder(SgFodder sgFodder) - { - return sgFodderMapper.insertSgFodder(sgFodder); - } - - /** - * 修改原料 - * - * @param sgFodder 原料 - * @return 结果 - */ - @Override - public int updateSgFodder(SgFodder sgFodder) - { - return sgFodderMapper.updateSgFodder(sgFodder); - } - - /** - * 批量删除原料 - * - * @param ids 需要删除的原料主键 - * @return 结果 - */ - @Override - public int deleteSgFodderByIds(Long[] ids) - { - return sgFodderMapper.deleteSgFodderByIds(ids); - } - - /** - * 删除原料信息 - * - * @param id 原料主键 - * @return 结果 - */ - @Override - public int deleteSgFodderById(Long id) - { - return sgFodderMapper.deleteSgFodderById(id); - } -} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFormulaListServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFormulaListServiceImpl.java index f26eb3a..320a9d3 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFormulaListServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFormulaListServiceImpl.java @@ -1,7 +1,6 @@ package com.zhyc.module.feed.service.impl; import java.util.List; -import java.util.Objects; import org.springframework.stereotype.Service; import com.zhyc.module.feed.mapper.SgFormulaListMapper; 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 23ac1e1..b94a01b 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,7 +3,6 @@ package com.zhyc.module.produce.bodyManage.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; -import com.zhyc.common.utils.SecurityUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; 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 a8efd25..3e73035 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 @@ -3,78 +3,183 @@ package com.zhyc.module.produce.bodyManage.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; -import org.springframework.data.annotation.AccessType; + +import java.math.BigDecimal; +import java.time.LocalDate; /** * 体尺测量对象 sc_body_measure - * + * * @author ruoyi * @date 2025-07-27 */ @Data @AllArgsConstructor @NoArgsConstructor -public class ScBodyMeasure extends BaseEntity -{ +public class ScBodyMeasure extends BaseEntity { private static final long serialVersionUID = 1L; - /** $column.columnComment */ + /** + * $column.columnComment + */ private Long id; - /** 耳号 */ + /** + * 耳号 + */ private Long sheepId; @Excel(name = "耳号") private String manageTags; - /** 体高 */ + /** + * 羊舍ID + */ + private Long sheepfoldId; + @Excel(name = "羊舍") + /** 羊舍名称(用于展示) */ + private String sheepfoldName; + + /** + * 品种ID(关联羊只表) + */ + private Long varietyId; + + /** + * 品种名称(用于展示) + */ + @Excel(name = "羊只品种") + private String varietyName; + + /** + * 事件类型 + */ + @Excel(name = "事件类型") + private String eventType; + + /** + * 测量日期 + */ + @Excel(name = "测量日期") + private LocalDate measureDate; + /** + * 羊只类别 + */ + private Long sheepTypeId; + @Excel(name = "羊只类别") + private String sheepTypeName; + /** + * 性别 + */ + @Excel(name = "性别", readConverterExp = "1=母,2=公,3=阉羊") + private String gender; + /** + * 胎次 + */ + private Integer parity; + /** + * 出生体重 + */ + private BigDecimal birthWeight; + /** + * 断奶体重 + */ + private BigDecimal weaningWeight; + /** + * 当前体重 + */ + private BigDecimal currentWeight; + + /** + * 体高 + */ @Excel(name = "体高") private Long height; - /** 胸围 */ + /** + * 胸围 + */ @Excel(name = "胸围") private Long bust; - /** 体斜长 */ + /** + * 体斜长 + */ @Excel(name = "体斜长") private Long bodyLength; - /** 管围 */ + /** + * 管围 + */ @Excel(name = "管围") private Long pipeLength; - /** 胸深 */ + /** + * 胸深 + */ @Excel(name = "胸深") private Long chestDepth; - /** 臀高 */ + /** + * 臀高 + */ @Excel(name = "臀高") private Long hipHeight; - /** 尻宽 */ + /** + * 尻宽 + */ @Excel(name = "尻宽") private Long rumpWidth; - /** 尻高 */ + /** + * 尻高 + */ @Excel(name = "尻高") private Long rumpHeignt; - /** 腰角宽 */ + /** + * 腰角宽 + */ @Excel(name = "腰角宽") private Long hipWidth; - /** 十字部高 */ + /** + * 十字部高 + */ @Excel(name = "十字部高") private Long hipCrossHeight; - /** 备注 */ + /** + * 繁育状态 + */ + @Excel(name = "繁育状态") + private String breedStatusName; + /** + * 泌乳天数 + */ + @Excel(name = "泌乳天数") + private Integer lactationDay; + /** + * 怀孕天数 + */ + @Excel(name = "怀孕天数") + private Integer gestationDay; + /** + * 配后天数 + */ + @Excel(name = "配后天数") + private Integer postMatingDay; + /** + * 备注 + */ @Excel(name = "备注") private String comment; - /** 技术员 */ + /** + * 技术员 + */ @Excel(name = "技术员") private String technician; 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 5e5c1bf..83ded3e 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 @@ -6,8 +6,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -34,6 +32,20 @@ public class ScBodyScore extends BaseEntity { private String sheepId; @Excel(name = "管理耳号") private String manageTags; + + /** + * 品种 + */ + private Long varietyId; + @Excel(name = "品种") + private String varietyName; + + /** + * 事件类型 + */ + @Excel(name = "事件类型") + private String eventType; + /** * 事件日期 */ @@ -51,7 +63,7 @@ public class ScBodyScore extends BaseEntity { * 羊舍id */ private Long sheepfold; - @Excel(name = "羊舍名称") + @Excel(name = "羊舍") private String sheepfoldName; /** * 备注 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 325a020..872bf26 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 @@ -1,13 +1,14 @@ package com.zhyc.module.produce.bodyManage.domain; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; +import java.time.LocalDate; + /** * 乳房评分对象 sc_breast_rating * @@ -32,6 +33,35 @@ public class ScBreastRating extends BaseEntity { private String sheepId; @Excel(name = "羊只id") private String manageTags; + + /** + * 品种 + */ + private Long varietyId; + @Excel(name = "品种") + private String varietyName; + + /** + * 事件类型 + */ + @Excel(name = "事件类型") + private String eventType; + + /** + * 事件日期 + */ + @Excel(name = "事件日期") + private LocalDate eventDate; + + /** + * 羊舍ID + */ + private Long sheepfoldId; + @Excel(name = "羊舍") + /** 羊舍名称(用于展示) */ + private String sheepfoldName; + + /** * 乳房深度 */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedPlanGenerateController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedPlanGenerateController.java index c872868..80861f8 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedPlanGenerateController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScBreedPlanGenerateController.java @@ -3,6 +3,7 @@ package com.zhyc.module.produce.breed.controller; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import javax.servlet.http.HttpServletResponse; import com.zhyc.module.produce.breed.domain.ScBreedPlanGenerate; import com.zhyc.module.produce.breed.service.IScBreedPlanGenerateService; @@ -21,6 +22,7 @@ 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; /** * 配种计划生成Controller @@ -78,6 +80,12 @@ public class ScBreedPlanGenerateController extends BaseController public AjaxResult autoGenerateBreedPlan(@RequestBody Map params) { try { + // 获取计划类型 + Integer planType = params.get("planType") != null ? (Integer) params.get("planType") : 1; + + // 计划名称由系统自动生成,不再从前端传入 + String planName = null; + // 安全的类型转换 List eweIdsRaw = (List) params.get("eweIds"); List ramIdsRaw = (List) params.get("ramIds"); @@ -110,7 +118,7 @@ public class ScBreedPlanGenerateController extends BaseController }) .collect(Collectors.toList()); - ScBreedPlanGenerate planGenerate = scBreedPlanGenerateService.autoGenerateBreedPlan(eweIds, ramIds); + ScBreedPlanGenerate planGenerate = scBreedPlanGenerateService.autoGenerateBreedPlan(planType, planName, eweIds, ramIds); return success(planGenerate); } catch (Exception e) { logger.error("自动生成配种计划失败", e); @@ -151,14 +159,38 @@ public class ScBreedPlanGenerateController extends BaseController } /** - * 审批配种计划 + * 获取审批配种计划详情 */ @PreAuthorize("@ss.hasPermi('mating_plan:generate:approve')") - @Log(title = "审批配种计划", businessType = BusinessType.UPDATE) - @PutMapping("/approve/{id}") - public AjaxResult approve(@PathVariable Long id) + @GetMapping("/approve/{id}") + public AjaxResult getApproveInfo(@PathVariable Long id) { - return toAjax(scBreedPlanGenerateService.approveBreedPlan(id)); + Map approveDetails = scBreedPlanGenerateService.getApproveBreedPlanDetails(id); + return success(approveDetails); + } + + /** + * 确认审批配种计划 + */ + @PreAuthorize("@ss.hasPermi('mating_plan:generate:approve')") + @Log(title = "确认审批配种计划", businessType = BusinessType.UPDATE) + @PutMapping("/approve/confirm") + public AjaxResult confirmApprove(@RequestBody Map params) + { + try { + Long planId = Long.valueOf(params.get("planId").toString()); + Integer status = Integer.valueOf(params.get("status").toString()); + String approveRemark = params.get("approveRemark") != null ? params.get("approveRemark").toString() : ""; + + @SuppressWarnings("unchecked") + List> planDetails = (List>) params.get("planDetails"); + + int result = scBreedPlanGenerateService.confirmApproveBreedPlan(planId, planDetails, status, approveRemark); + return toAjax(result); + } catch (Exception e) { + logger.error("确认审批配种计划失败", e); + return error("确认审批配种计划失败:" + e.getMessage()); + } } /** @@ -172,6 +204,41 @@ public class ScBreedPlanGenerateController extends BaseController return success(planDetails); } + /** + * 导出配种计划列表 + */ + @PreAuthorize("@ss.hasPermi('mating_plan:generate:export')") + @Log(title = "导出配种计划列表", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ScBreedPlanGenerate scBreedPlanGenerate) + { + List list = scBreedPlanGenerateService.selectScBreedPlanGenerateList(scBreedPlanGenerate); + ExcelUtil util = new ExcelUtil(ScBreedPlanGenerate.class); + util.exportExcel(response, list, "配种计划生成数据"); + } + + /** + * 导出配种计划详情 + */ + @PreAuthorize("@ss.hasPermi('mating_plan:generate:export')") + @Log(title = "导出配种计划详情", businessType = BusinessType.EXPORT) + @PostMapping("/export/{id}") + public void exportBreedPlanDetails(HttpServletResponse response, @PathVariable Long id) + { + try { + scBreedPlanGenerateService.exportBreedPlanDetails(response, id); + } catch (Exception e) { + logger.error("导出配种计划详情失败", e); + // 在出错时返回错误信息给前端 + try { + response.setContentType("application/json;charset=utf-8"); + response.getWriter().write("{\"code\":500,\"msg\":\"导出失败:" + e.getMessage() + "\"}"); + } catch (Exception ex) { + logger.error("返回错误信息失败", ex); + } + } + } + /** * 删除配种计划生成 */ 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 c80c7ae..50c37c2 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 @@ -1,6 +1,7 @@ package com.zhyc.module.produce.breed.controller; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -76,7 +77,11 @@ public class ScBreedRecordController extends BaseController @GetMapping(value = "/getSheepByTags/{manageTags}") public AjaxResult getSheepInfoByTags(@PathVariable("manageTags") String manageTags) { - return success(scBreedRecordService.getSheepInfoByTags(manageTags)); + Map sheepInfo = scBreedRecordService.getSheepInfoByTags(manageTags); + if (sheepInfo == null || sheepInfo.isEmpty()) { + return error("未找到耳号为 " + manageTags + " 的羊只信息"); + } + return success(sheepInfo); } /** @@ -86,7 +91,25 @@ public class ScBreedRecordController extends BaseController @GetMapping(value = "/getBreedPlan/{manageTags}") public AjaxResult getBreedPlanByEweTags(@PathVariable("manageTags") String manageTags) { - return success(scBreedRecordService.getBreedPlanByEweTags(manageTags)); + Map breedPlan = scBreedRecordService.getBreedPlanByEweTags(manageTags); + if (breedPlan == null || breedPlan.isEmpty()) { + return error("未找到耳号为 " + manageTags + " 的母羊配种计划"); + } + return success(breedPlan); + } + + /** + * 根据母羊耳号获取最新配种计划信息(优先从配种计划生成表获取) + */ + @PreAuthorize("@ss.hasPermi('Breeding_records:Breeding_records:query')") + @GetMapping(value = "/getLatestBreedPlan/{manageTags}") + public AjaxResult getLatestBreedPlanByEweTags(@PathVariable("manageTags") String manageTags) + { + Map breedPlan = scBreedRecordService.getLatestBreedPlanByEweTags(manageTags); + if (breedPlan == null || breedPlan.isEmpty()) { + return error("未找到耳号为 " + manageTags + " 的母羊配种计划"); + } + return success(breedPlan); } /** @@ -97,24 +120,43 @@ public class ScBreedRecordController extends BaseController @PostMapping public AjaxResult add(@RequestBody ScBreedRecord scBreedRecord) { - // 如果传入的是耳号,需要转换为羊只ID + // 处理母羊耳号转换 if (scBreedRecord.getEweManageTags() != null && !scBreedRecord.getEweManageTags().isEmpty()) { Long eweId = scBreedRecordService.getSheepIdByTags(scBreedRecord.getEweManageTags()); if (eweId == null) { - return error("未找到母羊耳号对应的羊只信息"); + return error("未找到母羊耳号 " + scBreedRecord.getEweManageTags() + " 对应的羊只信息"); } scBreedRecord.setEweId(eweId.toString()); + scBreedRecord.setSheepId(eweId); // 设置羊只ID为母羊ID } + // 处理公羊耳号转换 if (scBreedRecord.getRamManageTags() != null && !scBreedRecord.getRamManageTags().isEmpty()) { Long ramId = scBreedRecordService.getRamIdByTags(scBreedRecord.getRamManageTags()); if (ramId == null) { - return error("未找到公羊耳号对应的羊只信息"); + return error("未找到公羊耳号 " + scBreedRecord.getRamManageTags() + " 对应的羊只信息"); } scBreedRecord.setRamId(ramId.toString()); } - return toAjax(scBreedRecordService.insertScBreedRecord(scBreedRecord)); + // 验证配种方式 + if (scBreedRecord.getBreedType() == null) { + return error("配种方式不能为空"); + } + if (scBreedRecord.getBreedType() != 1 && scBreedRecord.getBreedType() != 2) { + return error("配种方式只能是:1-同期发情 或 2-本交"); + } + + // 验证技术员 + if (scBreedRecord.getTechnician() == null || scBreedRecord.getTechnician().trim().isEmpty()) { + return error("技术员不能为空"); + } + + int result = scBreedRecordService.insertScBreedRecord(scBreedRecord); + if (result > 0) { + return success("配种记录新增成功"); + } + return error("配种记录新增失败"); } /** @@ -125,23 +167,32 @@ public class ScBreedRecordController extends BaseController @PutMapping public AjaxResult edit(@RequestBody ScBreedRecord scBreedRecord) { - // 如果传入的是耳号,需要转换为羊只ID + // 处理母羊耳号转换 if (scBreedRecord.getEweManageTags() != null && !scBreedRecord.getEweManageTags().isEmpty()) { Long eweId = scBreedRecordService.getSheepIdByTags(scBreedRecord.getEweManageTags()); if (eweId == null) { - return error("未找到母羊耳号对应的羊只信息"); + return error("未找到母羊耳号 " + scBreedRecord.getEweManageTags() + " 对应的羊只信息"); } scBreedRecord.setEweId(eweId.toString()); + scBreedRecord.setSheepId(eweId); // 设置羊只ID为母羊ID } + // 处理公羊耳号转换 if (scBreedRecord.getRamManageTags() != null && !scBreedRecord.getRamManageTags().isEmpty()) { Long ramId = scBreedRecordService.getRamIdByTags(scBreedRecord.getRamManageTags()); if (ramId == null) { - return error("未找到公羊耳号对应的羊只信息"); + return error("未找到公羊耳号 " + scBreedRecord.getRamManageTags() + " 对应的羊只信息"); } scBreedRecord.setRamId(ramId.toString()); } + // 验证配种方式 + if (scBreedRecord.getBreedType() != null) { + if (scBreedRecord.getBreedType() != 1 && scBreedRecord.getBreedType() != 2) { + return error("配种方式只能是:1-同期发情 或 2-本交"); + } + } + return toAjax(scBreedRecordService.updateScBreedRecord(scBreedRecord)); } @@ -155,4 +206,37 @@ public class ScBreedRecordController extends BaseController { return toAjax(scBreedRecordService.deleteScBreedRecordByIds(ids)); } + + /** + * 同步孕检结果到配种记录 + */ + @PreAuthorize("@ss.hasPermi('Breeding_records:Breeding_records:edit')") + @Log(title = "同步孕检结果", businessType = BusinessType.UPDATE) + @PostMapping("/syncPregnancyResult") + public AjaxResult syncPregnancyResult(@RequestBody Map params) + { + Long pregnancyRecordId = Long.valueOf(params.get("pregnancyRecordId").toString()); + Long sheepId = Long.valueOf(params.get("sheepId").toString()); + String pregnancyCheckDate = params.get("pregnancyCheckDate").toString(); + + int result = scBreedRecordService.syncPregnancyResult(pregnancyRecordId, sheepId, pregnancyCheckDate); + if (result > 0) { + return success("孕检结果同步成功"); + } else { + return error("孕检结果同步失败,可能未找到对应的配种记录"); + } + } + + /** + * 根据羊只ID和时间范围查询配种记录 + */ + @PreAuthorize("@ss.hasPermi('Breeding_records:Breeding_records:query')") + @GetMapping("/getByTimeRange/{sheepId}/{startDate}/{endDate}") + public AjaxResult getBreedRecordsByTimeRange(@PathVariable("sheepId") Long sheepId, + @PathVariable("startDate") String startDate, + @PathVariable("endDate") String endDate) + { + List records = scBreedRecordService.getBreedRecordsByTimeRange(sheepId, startDate, endDate); + return success(records); + } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScLambingRecordController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScLambingRecordController.java index 04bce38..e2b6dee 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScLambingRecordController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScLambingRecordController.java @@ -1,6 +1,7 @@ package com.zhyc.module.produce.breed.controller; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -43,6 +44,25 @@ public class ScLambingRecordController extends BaseController { return getDataTable(list); } + /** + * 根据母羊耳号查询最新配种记录 + */ + @PreAuthorize("@ss.hasPermi('breed:lambing_records:query')") + @GetMapping("/breeding_info/{earNumber}") + public AjaxResult getBreedingInfo(@PathVariable("earNumber") String earNumber) { + try { + Map breedingInfo = scLambingRecordService.getLatestBreedingByEarNumber(earNumber); + if (breedingInfo != null && !breedingInfo.isEmpty()) { + return success(breedingInfo); + } else { + return error("未找到该母羊的配种记录,请检查耳号是否正确"); + } + } catch (Exception e) { + logger.error("查询配种信息异常", e); + return error("查询配种信息失败:" + e.getMessage()); + } + } + /** * 导出产羔记录列表 */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScMiscarriageRecordController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScMiscarriageRecordController.java new file mode 100644 index 0000000..c09c67c --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScMiscarriageRecordController.java @@ -0,0 +1,134 @@ +package com.zhyc.module.produce.breed.controller; + +import java.util.List; +import java.util.Map; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +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.module.produce.breed.domain.ScMiscarriageRecord; +import com.zhyc.module.produce.breed.service.IScMiscarriageRecordService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 流产记录Controller + * + * @author ruoyi + * @date 2025-08-23 + */ +@RestController +@RequestMapping("/miscarriage/miscarriage") +public class ScMiscarriageRecordController extends BaseController +{ + @Autowired + private IScMiscarriageRecordService scMiscarriageRecordService; + + /** + * 查询流产记录列表 + */ + @PreAuthorize("@ss.hasPermi('miscarriage:miscarriage:list')") + @GetMapping("/list") + public TableDataInfo list(ScMiscarriageRecord scMiscarriageRecord) + { + startPage(); + List list = scMiscarriageRecordService.selectScMiscarriageRecordList(scMiscarriageRecord); + return getDataTable(list); + } + + /** + * 导出流产记录列表 + */ + @PreAuthorize("@ss.hasPermi('miscarriage:miscarriage:export')") + @Log(title = "流产记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ScMiscarriageRecord scMiscarriageRecord) + { + List list = scMiscarriageRecordService.selectScMiscarriageRecordList(scMiscarriageRecord); + ExcelUtil util = new ExcelUtil(ScMiscarriageRecord.class); + util.exportExcel(response, list, "流产记录数据"); + } + + /** + * 获取流产记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('miscarriage:miscarriage:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(scMiscarriageRecordService.selectScMiscarriageRecordById(id)); + } + + /** + * 根据耳号查询羊只信息 + */ + @GetMapping(value = "/sheep/{manageTags}") + public AjaxResult getSheepInfo(@PathVariable("manageTags") String manageTags) + { + Map sheepInfo = scMiscarriageRecordService.selectSheepByManageTags(manageTags); + return success(sheepInfo); + } + + /** + * 获取流产原因字典 + */ + @GetMapping("/reasonOptions") + public AjaxResult getReasonOptions() + { + // 返回流产原因选项 + return success(new String[]{ + "利斯特氏菌病", + "子宫积脓", + "布鲁氏菌", + "弧菌性流产传染性流产", + "未知", + "滴虫病", + "细螺旋体病", + "霉菌性流产" + }); + } + + /** + * 新增流产记录 + */ + @PreAuthorize("@ss.hasPermi('miscarriage:miscarriage:add')") + @Log(title = "流产记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ScMiscarriageRecord scMiscarriageRecord) + { + return toAjax(scMiscarriageRecordService.insertScMiscarriageRecord(scMiscarriageRecord)); + } + + /** + * 修改流产记录 + */ + @PreAuthorize("@ss.hasPermi('miscarriage:miscarriage:edit')") + @Log(title = "流产记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ScMiscarriageRecord scMiscarriageRecord) + { + return toAjax(scMiscarriageRecordService.updateScMiscarriageRecord(scMiscarriageRecord)); + } + + /** + * 删除流产记录 + */ + @PreAuthorize("@ss.hasPermi('miscarriage:miscarriage:remove')") + @Log(title = "流产记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(scMiscarriageRecordService.deleteScMiscarriageRecordByIds(ids)); + } +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScPregnancyRecordController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScPregnancyRecordController.java index 08d5cc1..8c4a1fd 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScPregnancyRecordController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScPregnancyRecordController.java @@ -18,6 +18,7 @@ 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.exception.ServiceException; import com.zhyc.module.produce.breed.domain.ScPregnancyRecord; import com.zhyc.module.produce.breed.service.IScPregnancyRecordService; import com.zhyc.common.utils.poi.ExcelUtil; @@ -43,9 +44,14 @@ public class ScPregnancyRecordController extends BaseController @GetMapping("/list") public TableDataInfo list(ScPregnancyRecord scPregnancyRecord) { - startPage(); - List list = scPregnancyRecordService.selectScPregnancyRecordList(scPregnancyRecord); - return getDataTable(list); + try { + startPage(); + List list = scPregnancyRecordService.selectScPregnancyRecordList(scPregnancyRecord); + return getDataTable(list); + } catch (Exception e) { + logger.error("查询孕检记录列表失败", e); + return getDataTable(new java.util.ArrayList<>()); + } } /** @@ -56,9 +62,13 @@ public class ScPregnancyRecordController extends BaseController @PostMapping("/export") public void export(HttpServletResponse response, ScPregnancyRecord scPregnancyRecord) { - List list = scPregnancyRecordService.selectScPregnancyRecordList(scPregnancyRecord); - ExcelUtil util = new ExcelUtil(ScPregnancyRecord.class); - util.exportExcel(response, list, "孕检记录数据"); + try { + List list = scPregnancyRecordService.selectScPregnancyRecordList(scPregnancyRecord); + ExcelUtil util = new ExcelUtil(ScPregnancyRecord.class); + util.exportExcel(response, list, "孕检记录数据"); + } catch (Exception e) { + logger.error("导出孕检记录失败", e); + } } /** @@ -68,7 +78,21 @@ public class ScPregnancyRecordController extends BaseController @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { - return success(scPregnancyRecordService.selectScPregnancyRecordById(id)); + try { + if (id == null) { + return error("记录ID不能为空"); + } + + ScPregnancyRecord result = scPregnancyRecordService.selectScPregnancyRecordById(id); + if (result == null) { + return error("记录不存在"); + } + + return success(result); + } catch (Exception e) { + logger.error("获取孕检记录详细信息失败,ID: " + id, e); + return error("获取记录详细信息失败: " + e.getMessage()); + } } /** @@ -79,7 +103,46 @@ public class ScPregnancyRecordController extends BaseController @PostMapping public AjaxResult add(@RequestBody ScPregnancyRecord scPregnancyRecord) { - return toAjax(scPregnancyRecordService.insertScPregnancyRecord(scPregnancyRecord)); + try { + // 基础参数校验 + if (scPregnancyRecord == null) { + return error("请求参数不能为空"); + } + + if (scPregnancyRecord.getManageTags() == null || scPregnancyRecord.getManageTags().trim().isEmpty()) { + return error("管理耳号不能为空"); + } + + if (scPregnancyRecord.getDatetime() == null) { + return error("孕检日期不能为空"); + } + + if (scPregnancyRecord.getResult() == null || scPregnancyRecord.getResult().trim().isEmpty()) { + return error("孕检结果不能为空"); + } + + if (scPregnancyRecord.getTechnician() == null || scPregnancyRecord.getTechnician().trim().isEmpty()) { + return error("技术员不能为空"); + } + + // 如果孕检方式为空,默认设置为B超 + if (scPregnancyRecord.getWay() == null || scPregnancyRecord.getWay().trim().isEmpty()) { + scPregnancyRecord.setWay("B超"); + } + + int result = scPregnancyRecordService.insertScPregnancyRecord(scPregnancyRecord); + if (result > 0) { + return success("新增成功"); + } else { + return error("新增失败"); + } + } catch (ServiceException e) { + logger.warn("新增孕检记录业务异常: " + e.getMessage()); + return error(e.getMessage()); + } catch (Exception e) { + logger.error("新增孕检记录失败", e); + return error("新增失败: " + e.getMessage()); + } } /** @@ -90,7 +153,45 @@ public class ScPregnancyRecordController extends BaseController @PutMapping public AjaxResult edit(@RequestBody ScPregnancyRecord scPregnancyRecord) { - return toAjax(scPregnancyRecordService.updateScPregnancyRecord(scPregnancyRecord)); + try { + // 基础参数校验 + if (scPregnancyRecord == null) { + return error("请求参数不能为空"); + } + + if (scPregnancyRecord.getId() == null) { + return error("记录ID不能为空"); + } + + if (scPregnancyRecord.getManageTags() == null || scPregnancyRecord.getManageTags().trim().isEmpty()) { + return error("管理耳号不能为空"); + } + + if (scPregnancyRecord.getDatetime() == null) { + return error("孕检日期不能为空"); + } + + if (scPregnancyRecord.getResult() == null || scPregnancyRecord.getResult().trim().isEmpty()) { + return error("孕检结果不能为空"); + } + + if (scPregnancyRecord.getTechnician() == null || scPregnancyRecord.getTechnician().trim().isEmpty()) { + return error("技术员不能为空"); + } + + int result = scPregnancyRecordService.updateScPregnancyRecord(scPregnancyRecord); + if (result > 0) { + return success("修改成功"); + } else { + return error("修改失败,记录可能不存在"); + } + } catch (ServiceException e) { + logger.warn("修改孕检记录业务异常: " + e.getMessage()); + return error(e.getMessage()); + } catch (Exception e) { + logger.error("修改孕检记录失败", e); + return error("修改失败: " + e.getMessage()); + } } /** @@ -101,7 +202,24 @@ public class ScPregnancyRecordController extends BaseController @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(scPregnancyRecordService.deleteScPregnancyRecordByIds(ids)); + try { + if (ids == null || ids.length == 0) { + return error("删除的记录ID不能为空"); + } + + int result = scPregnancyRecordService.deleteScPregnancyRecordByIds(ids); + if (result > 0) { + return success("删除成功"); + } else { + return error("删除失败,记录可能不存在"); + } + } catch (ServiceException e) { + logger.warn("删除孕检记录业务异常: " + e.getMessage()); + return error(e.getMessage()); + } catch (Exception e) { + logger.error("删除孕检记录失败", e); + return error("删除失败: " + e.getMessage()); + } } /** @@ -110,7 +228,47 @@ public class ScPregnancyRecordController extends BaseController @GetMapping("/getSheepByManageTags") public AjaxResult getSheepByManageTags(@RequestParam("manageTags") String manageTags) { - Map sheepInfo = scPregnancyRecordService.getSheepByManageTags(manageTags); - return success(sheepInfo); + try { + if (manageTags == null || manageTags.trim().isEmpty()) { + return error("管理耳号不能为空"); + } + + Map sheepInfo = scPregnancyRecordService.getSheepByManageTags(manageTags.trim()); + if (sheepInfo == null) { + return error("未找到该耳号的羊只信息"); + } + + return success(sheepInfo); + } catch (ServiceException e) { + return error(e.getMessage()); + } catch (Exception e) { + logger.error("查询羊只信息失败,管理耳号: " + manageTags, e); + return error("查询羊只信息失败: " + e.getMessage()); + } + } + + /** + * 根据耳号获取配种信息 + */ + @GetMapping("/getBreedInfoByManageTags") + public AjaxResult getBreedInfoByManageTags(@RequestParam("manageTags") String manageTags) + { + try { + if (manageTags == null || manageTags.trim().isEmpty()) { + return error("管理耳号不能为空"); + } + + Map breedInfo = scPregnancyRecordService.getBreedInfoByManageTags(manageTags.trim()); + if (breedInfo == null) { + return error("未找到该耳号的配种信息"); + } + + return success(breedInfo); + } catch (ServiceException e) { + return error(e.getMessage()); + } catch (Exception e) { + logger.error("查询配种信息失败,管理耳号: " + manageTags, e); + return error("查询配种信息失败: " + e.getMessage()); + } } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScSheepDeathController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScSheepDeathController.java index cbd1964..1f6997b 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScSheepDeathController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScSheepDeathController.java @@ -17,6 +17,7 @@ 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.exception.ServiceException; import com.zhyc.module.produce.breed.domain.ScSheepDeath; import com.zhyc.module.produce.breed.service.IScSheepDeathService; import com.zhyc.common.utils.poi.ExcelUtil; @@ -42,9 +43,14 @@ public class ScSheepDeathController extends BaseController @GetMapping("/list") public TableDataInfo list(ScSheepDeath scSheepDeath) { - startPage(); - List list = scSheepDeathService.selectScSheepDeathList(scSheepDeath); - return getDataTable(list); + try { + startPage(); + List list = scSheepDeathService.selectScSheepDeathList(scSheepDeath); + return getDataTable(list); + } catch (Exception e) { + logger.error("查询羊只死淘记录列表失败", e); + return getDataTable(new java.util.ArrayList<>()); + } } /** @@ -54,11 +60,20 @@ public class ScSheepDeathController extends BaseController @GetMapping("/sheepInfo/{manageTags}") public AjaxResult getSheepInfo(@PathVariable("manageTags") String manageTags) { - Map sheepInfo = scSheepDeathService.selectSheepFileByManageTags(manageTags); - if (sheepInfo != null) { - return success(sheepInfo); - } else { - return error("未找到该耳号对应的羊只信息"); + try { + if (manageTags == null || manageTags.trim().isEmpty()) { + return error("管理耳号不能为空"); + } + + Map sheepInfo = scSheepDeathService.selectSheepFileByManageTags(manageTags.trim()); + if (sheepInfo != null) { + return success(sheepInfo); + } else { + return error("未找到该耳号对应的羊只信息"); + } + } catch (Exception e) { + logger.error("查询羊只信息失败,管理耳号: " + manageTags, e); + return error("查询羊只信息失败: " + e.getMessage()); } } @@ -70,9 +85,14 @@ public class ScSheepDeathController extends BaseController @PostMapping("/export") public void export(HttpServletResponse response, ScSheepDeath scSheepDeath) { - List list = scSheepDeathService.selectScSheepDeathList(scSheepDeath); - ExcelUtil util = new ExcelUtil(ScSheepDeath.class); - util.exportExcel(response, list, "羊只死淘记录数据"); + try { + List list = scSheepDeathService.selectScSheepDeathList(scSheepDeath); + ExcelUtil util = new ExcelUtil(ScSheepDeath.class); + util.exportExcel(response, list, "羊只死淘记录数据"); + } catch (Exception e) { + logger.error("导出羊只死淘记录失败", e); + // 可以在这里返回错误响应 + } } /** @@ -82,7 +102,21 @@ public class ScSheepDeathController extends BaseController @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { - return success(scSheepDeathService.selectScSheepDeathById(id)); + try { + if (id == null) { + return error("记录ID不能为空"); + } + + ScSheepDeath result = scSheepDeathService.selectScSheepDeathById(id); + if (result == null) { + return error("记录不存在"); + } + + return success(result); + } catch (Exception e) { + logger.error("获取羊只死淘记录详细信息失败,ID: " + id, e); + return error("获取记录详细信息失败: " + e.getMessage()); + } } /** @@ -93,7 +127,33 @@ public class ScSheepDeathController extends BaseController @PostMapping public AjaxResult add(@RequestBody ScSheepDeath scSheepDeath) { - return toAjax(scSheepDeathService.insertScSheepDeath(scSheepDeath)); + try { + // 基础参数校验 + if (scSheepDeath == null) { + return error("请求参数不能为空"); + } + + if (scSheepDeath.getManageTags() == null || scSheepDeath.getManageTags().trim().isEmpty()) { + return error("管理耳号不能为空"); + } + + if (scSheepDeath.getDeathDate() == null) { + return error("死淘日期不能为空"); + } + + int result = scSheepDeathService.insertScSheepDeath(scSheepDeath); + if (result > 0) { + return success("新增成功"); + } else { + return error("新增失败"); + } + } catch (ServiceException e) { + logger.warn("新增羊只死淘记录业务异常: " + e.getMessage()); + return error(e.getMessage()); + } catch (Exception e) { + logger.error("新增羊只死淘记录失败", e); + return error("新增失败: " + e.getMessage()); + } } /** @@ -104,7 +164,37 @@ public class ScSheepDeathController extends BaseController @PutMapping public AjaxResult edit(@RequestBody ScSheepDeath scSheepDeath) { - return toAjax(scSheepDeathService.updateScSheepDeath(scSheepDeath)); + try { + // 基础参数校验 + if (scSheepDeath == null) { + return error("请求参数不能为空"); + } + + if (scSheepDeath.getId() == null) { + return error("记录ID不能为空"); + } + + if (scSheepDeath.getManageTags() == null || scSheepDeath.getManageTags().trim().isEmpty()) { + return error("管理耳号不能为空"); + } + + if (scSheepDeath.getDeathDate() == null) { + return error("死淘日期不能为空"); + } + + int result = scSheepDeathService.updateScSheepDeath(scSheepDeath); + if (result > 0) { + return success("修改成功"); + } else { + return error("修改失败,记录可能不存在"); + } + } catch (ServiceException e) { + logger.warn("修改羊只死淘记录业务异常: " + e.getMessage()); + return error(e.getMessage()); + } catch (Exception e) { + logger.error("修改羊只死淘记录失败", e); + return error("修改失败: " + e.getMessage()); + } } /** @@ -115,6 +205,23 @@ public class ScSheepDeathController extends BaseController @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(scSheepDeathService.deleteScSheepDeathByIds(ids)); + try { + if (ids == null || ids.length == 0) { + return error("删除的记录ID不能为空"); + } + + int result = scSheepDeathService.deleteScSheepDeathByIds(ids); + if (result > 0) { + return success("删除成功"); + } else { + return error("删除失败,记录可能不存在"); + } + } catch (ServiceException e) { + logger.warn("删除羊只死淘记录业务异常: " + e.getMessage()); + return error(e.getMessage()); + } catch (Exception e) { + logger.error("删除羊只死淘记录失败", e); + return error("删除失败: " + e.getMessage()); + } } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/RawSpermRecord.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/RawSpermRecord.java index 2f1c625..187d22e 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/RawSpermRecord.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/RawSpermRecord.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlan.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlan.java index 1989341..b0991c9 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlan.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlan.java @@ -3,8 +3,6 @@ package com.zhyc.module.produce.breed.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanGenerate.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanGenerate.java index db6f059..2658186 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanGenerate.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanGenerate.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanTemp.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanTemp.java index 4380caf..f96ecee 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanTemp.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScBreedPlanTemp.java @@ -3,8 +3,6 @@ package com.zhyc.module.produce.breed.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; 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 c5f548d..72565f2 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,15 +1,11 @@ package com.zhyc.module.produce.breed.domain; -import java.math.BigDecimal; -import java.util.Date; - import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; +import java.util.Date; /** * 配种记录对象 sc_breed_record @@ -47,6 +43,10 @@ public class ScBreedRecord extends BaseEntity @Excel(name = "耗精量") private String breedDrugs; + /** 配种方式 1-同期发情 2-本交 */ + @Excel(name = "配种方式", readConverterExp = "1=同期发情,2=本交") + private Integer breedType; + // ============ 显示字段 ============ /** 母羊耳号 */ @@ -93,7 +93,7 @@ public class ScBreedRecord extends BaseEntity @Excel(name = "所在牧场") private String ranchName; - /** 配种方式 */ + /** 配种方式显示 */ @Excel(name = "配种方式") private String matingType; @@ -112,5 +112,43 @@ public class ScBreedRecord extends BaseEntity /** 牧场ID */ private Long ranchId; + /** 配种计划ID */ + private Long planId; + // ============ 新增孕检相关字段 ============ + + /** 孕检日期 */ + @Excel(name = "孕检日期") + private Date pregnancyCheckDate; + + /** 孕检结果 */ + @Excel(name = "孕检结果") + private String pregnancyResult; + + /** 孕检方式 */ + @Excel(name = "孕检方式") + private String pregnancyWay; + + /** 胎数 */ + @Excel(name = "胎数") + private Integer fetusCount; + + /** 孕检技术员 */ + @Excel(name = "孕检技术员") + private String pregnancyTechnician; + + /** 孕检备注 */ + @Excel(name = "孕检备注") + private String pregnancyRemark; + + /** 孕检记录ID */ + private Long pregnancyRecordId; + + /** 配种到孕检间隔天数 */ + @Excel(name = "配种到孕检间隔(天)") + private Integer daysToPregnancyCheck; + + /** 是否已孕检 */ + @Excel(name = "是否已孕检", readConverterExp = "0=否,1=是") + private Integer isPregnancyChecked; } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScDryMilk.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScDryMilk.java index 07f0fb8..07ffe30 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScDryMilk.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScDryMilk.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScLambDetail.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScLambDetail.java index 69044e4..4c71d76 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScLambDetail.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScLambDetail.java @@ -8,8 +8,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScMiscarriageRecord.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScMiscarriageRecord.java new file mode 100644 index 0000000..5cf4b1a --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScMiscarriageRecord.java @@ -0,0 +1,308 @@ +package com.zhyc.module.produce.breed.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.zhyc.common.annotation.Excel; +import com.zhyc.common.core.domain.BaseEntity; + +/** + * 流产记录对象 sc_miscarriage_record + * + * @author ruoyi + * @date 2025-08-23 + */ +public class ScMiscarriageRecord extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** 羊只id */ + private String sheepId; + + /** 事件日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "事件日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date datetime; + + /** 备注 */ + @Excel(name = "备注") + private String comment; + + /** 技术员 */ + @Excel(name = "技术员") + private String technician; + + /** 流产原因 */ + @Excel(name = "流产原因") + private String reason; + + /** 是否见胎 (1-是, 2-复检无胎, 3-返情) */ + @Excel(name = "是否见胎", readConverterExp = "1=是,2=复检无胎,3=返情") + private Long exposeType; + + /** 是否列胎次 (1-是, 0-否) */ + @Excel(name = "是否列胎次", readConverterExp = "1=是,0=否") + private Long status; + + /** 流产羔羊数 */ + @Excel(name = "流产羔羊数") + private Long miscaLamb; + + // 以下是关联查询字段,不存储到数据库 + /** 管理耳号 */ + @Excel(name = "耳号") + private String bsManageTags; + + /** 品种 */ + @Excel(name = "品种") + private String variety; + + /** 事件类型 */ + @Excel(name = "事件类型") + private String eventType = "流产"; + + /** 配种类型ID */ + private Integer matingTypeId; + + /** 配种类型 */ + @Excel(name = "配种类型") + private String matingTypeName; + + /** 配种日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "配种日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date matingDate; + + /** 胎次 */ + @Excel(name = "胎次") + private Integer parity; + + /** 配种公羊品种 */ + @Excel(name = "配种公羊品种") + private String ramVariety; + + /** 月龄 */ + @Excel(name = "月龄") + private Long monthAge; + + /** 流产时怀孕天数 */ + @Excel(name = "流产时怀孕天数") + private Integer pregnantDays; + + /** 当前羊舍 */ + @Excel(name = "当前羊舍") + private String sheepfoldName; + + /** 所在牧场 */ + @Excel(name = "所在牧场") + private String drRanch; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public void setSheepId(String sheepId) + { + this.sheepId = sheepId; + } + + public String getSheepId() + { + return sheepId; + } + + public void setDatetime(Date datetime) + { + this.datetime = datetime; + } + + public Date getDatetime() + { + return datetime; + } + + public void setComment(String comment) + { + this.comment = comment; + } + + public String getComment() + { + return comment; + } + + public void setTechnician(String technician) + { + this.technician = technician; + } + + public String getTechnician() + { + return technician; + } + + public void setReason(String reason) + { + this.reason = reason; + } + + public String getReason() + { + return reason; + } + + public void setExposeType(Long exposeType) + { + this.exposeType = exposeType; + } + + public Long getExposeType() + { + return exposeType; + } + + public void setStatus(Long status) + { + this.status = status; + } + + public Long getStatus() + { + return status; + } + + public void setMiscaLamb(Long miscaLamb) + { + this.miscaLamb = miscaLamb; + } + + public Long getMiscaLamb() + { + return miscaLamb; + } + + public String getBsManageTags() { + return bsManageTags; + } + + public void setBsManageTags(String bsManageTags) { + this.bsManageTags = bsManageTags; + } + + public String getVariety() { + return variety; + } + + public void setVariety(String variety) { + this.variety = variety; + } + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public Integer getMatingTypeId() { + return matingTypeId; + } + + public void setMatingTypeId(Integer matingTypeId) { + this.matingTypeId = matingTypeId; + } + + public String getMatingTypeName() { + return matingTypeName; + } + + public void setMatingTypeName(String matingTypeName) { + this.matingTypeName = matingTypeName; + } + + public Date getMatingDate() { + return matingDate; + } + + public void setMatingDate(Date matingDate) { + this.matingDate = matingDate; + } + + public Integer getParity() { + return parity; + } + + public void setParity(Integer parity) { + this.parity = parity; + } + + public String getRamVariety() { + return ramVariety; + } + + public void setRamVariety(String ramVariety) { + this.ramVariety = ramVariety; + } + + public Long getMonthAge() { + return monthAge; + } + + public void setMonthAge(Long monthAge) { + this.monthAge = monthAge; + } + + public Integer getPregnantDays() { + return pregnantDays; + } + + public void setPregnantDays(Integer pregnantDays) { + this.pregnantDays = pregnantDays; + } + + public String getSheepfoldName() { + return sheepfoldName; + } + + public void setSheepfoldName(String sheepfoldName) { + this.sheepfoldName = sheepfoldName; + } + + public String getDrRanch() { + return drRanch; + } + + public void setDrRanch(String drRanch) { + this.drRanch = drRanch; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("sheepId", getSheepId()) + .append("datetime", getDatetime()) + .append("comment", getComment()) + .append("technician", getTechnician()) + .append("reason", getReason()) + .append("exposeType", getExposeType()) + .append("status", getStatus()) + .append("miscaLamb", getMiscaLamb()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("bsManageTags", getBsManageTags()) + .append("variety", getVariety()) + .toString(); + } +} \ No newline at end of file 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 f02d38f..0dc61cd 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 @@ -1,13 +1,10 @@ package com.zhyc.module.produce.breed.domain; -import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -119,4 +116,7 @@ public class ScPregnancyRecord extends BaseEntity @Excel(name = "所在牧场") private String ranchName; + /** 配后天数 */ + @Excel(name = "配后天数") + private Integer daysAfterMating; } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScWeanRecord.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScWeanRecord.java index 79c70ce..b0e4dcb 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScWeanRecord.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScWeanRecord.java @@ -8,8 +8,6 @@ import com.zhyc.common.core.domain.BaseEntity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; /** * 断奶记录对象 sc_wean_record diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedPlanGenerateMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedPlanGenerateMapper.java index 00eaf16..0f744e6 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedPlanGenerateMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedPlanGenerateMapper.java @@ -89,6 +89,22 @@ public interface ScBreedPlanGenerateMapper */ public List> selectBreedPlanDetails(Long planGenerateId); + /** + * 获取审批配种计划详情 + * + * @param planGenerateId 配种计划生成ID + * @return 审批配种计划详情列表 + */ + public List> selectApproveBreedPlanDetails(Long planGenerateId); + + /** + * 更新临时配种计划 + * + * @param params 更新参数 + * @return 结果 + */ + public int updateTempBreedPlan(Map params); + /** * 删除配种计划生成 * @@ -104,4 +120,12 @@ public interface ScBreedPlanGenerateMapper * @return 结果 */ public int deleteScBreedPlanGenerateByIds(Long[] ids); + + /** + * 删除临时配种计划 + * + * @param planGenerateId 配种计划生成ID + * @return 结果 + */ + public int deleteTempBreedPlanByPlanId(Long planGenerateId); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedRecordMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedRecordMapper.java index ee67b34..8d8eb58 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedRecordMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScBreedRecordMapper.java @@ -3,6 +3,8 @@ package com.zhyc.module.produce.breed.mapper; import java.util.List; import java.util.Map; import com.zhyc.module.produce.breed.domain.ScBreedRecord; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 配种记录Mapper接口 @@ -10,6 +12,7 @@ import com.zhyc.module.produce.breed.domain.ScBreedRecord; * @author ruoyi * @date 2025-07-23 */ +@Mapper public interface ScBreedRecordMapper { /** @@ -61,7 +64,7 @@ public interface ScBreedRecordMapper public int deleteScBreedRecordByIds(Long[] ids); /** - * 根据耳号查询羊只ID + * 根据管理耳号查询羊只ID * * @param manageTags 管理耳号 * @return 羊只ID @@ -69,7 +72,7 @@ public interface ScBreedRecordMapper public Long getSheepIdByManageTags(String manageTags); /** - * 根据公羊耳号查询羊只ID + * 根据公羊管理耳号查询羊只ID * * @param manageTags 管理耳号 * @return 羊只ID @@ -91,4 +94,34 @@ public interface ScBreedRecordMapper * @return 配种计划信息 */ public Map getBreedPlanByEweTags(String manageTags); + + /** + * 根据母羊耳号获取最新的配种计划信息(从配种计划生成表) + * + * @param manageTags 母羊管理耳号 + * @return 配种计划信息 + */ + public Map getLatestBreedPlanByEweTags(String manageTags); + + /** + * 根据配种记录ID更新孕检信息 + * + * @param breedRecordId 配种记录ID + * @param pregnancyRecordId 孕检记录ID + * @return 结果 + */ + public int updatePregnancyInfo(@Param("breedRecordId") Long breedRecordId, + @Param("pregnancyRecordId") Long pregnancyRecordId); + + /** + * 根据羊只ID和配种时间查询配种记录 + * + * @param sheepId 羊只ID + * @param matingDateStart 配种开始时间 + * @param matingDateEnd 配种结束时间 + * @return 配种记录集合 + */ + public List selectBreedRecordByMatingTime(@Param("sheepId") Long sheepId, + @Param("matingDateStart") String matingDateStart, + @Param("matingDateEnd") String matingDateEnd); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScLambingRecordMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScLambingRecordMapper.java index 85edef3..244a3f9 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScLambingRecordMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScLambingRecordMapper.java @@ -1,9 +1,10 @@ package com.zhyc.module.produce.breed.mapper; import java.util.List; +import java.util.Map; import com.zhyc.module.produce.breed.domain.ScLambingRecord; -import com.zhyc.module.produce.breed.domain.ScLambDetail; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 产羔记录Mapper接口 @@ -38,6 +39,14 @@ public interface ScLambingRecordMapper */ public ScLambingRecord selectScLambingRecordDetailById(Long id); + /** + * 根据母羊耳号查询最新配种记录 + * + * @param earNumber 母羊耳号 + * @return 配种记录信息 + */ + public Map getLatestBreedingByEarNumber(@Param("earNumber") String earNumber); + /** * 新增产羔记录 * diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScMiscarriageRecordMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScMiscarriageRecordMapper.java new file mode 100644 index 0000000..700e5b5 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScMiscarriageRecordMapper.java @@ -0,0 +1,70 @@ +package com.zhyc.module.produce.breed.mapper; + +import java.util.List; +import java.util.Map; +import com.zhyc.module.produce.breed.domain.ScMiscarriageRecord; + +/** + * 流产记录Mapper接口 + * + * @author ruoyi + * @date 2025-08-23 + */ +public interface ScMiscarriageRecordMapper +{ + /** + * 查询流产记录 + * + * @param id 流产记录主键 + * @return 流产记录 + */ + public ScMiscarriageRecord selectScMiscarriageRecordById(Long id); + + /** + * 查询流产记录列表 + * + * @param scMiscarriageRecord 流产记录 + * @return 流产记录集合 + */ + public List selectScMiscarriageRecordList(ScMiscarriageRecord scMiscarriageRecord); + + /** + * 新增流产记录 + * + * @param scMiscarriageRecord 流产记录 + * @return 结果 + */ + public int insertScMiscarriageRecord(ScMiscarriageRecord scMiscarriageRecord); + + /** + * 修改流产记录 + * + * @param scMiscarriageRecord 流产记录 + * @return 结果 + */ + public int updateScMiscarriageRecord(ScMiscarriageRecord scMiscarriageRecord); + + /** + * 删除流产记录 + * + * @param id 流产记录主键 + * @return 结果 + */ + public int deleteScMiscarriageRecordById(Long id); + + /** + * 批量删除流产记录 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteScMiscarriageRecordByIds(Long[] ids); + + /** + * 根据耳号查询羊只信息 + * + * @param manageTags 管理耳号 + * @return 羊只信息 + */ + public Map selectSheepByManageTags(String manageTags); +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScPregnancyRecordMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScPregnancyRecordMapper.java index 4962992..7a16640 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScPregnancyRecordMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScPregnancyRecordMapper.java @@ -2,6 +2,7 @@ package com.zhyc.module.produce.breed.mapper; import java.util.List; import java.util.Map; +import org.apache.ibatis.annotations.Param; import com.zhyc.module.produce.breed.domain.ScPregnancyRecord; /** @@ -68,6 +69,14 @@ public interface ScPregnancyRecordMapper */ public Map selectSheepByManageTags(String manageTags); + /** + * 根据耳号获取配种信息 + * + * @param manageTags 耳号 + * @return 配种信息 + */ + public Map selectBreedInfoByManageTags(String manageTags); + /** * 更新羊只基础表中的孕检相关字段 * diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScSheepDeathMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScSheepDeathMapper.java index 980d20d..853ab39 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScSheepDeathMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScSheepDeathMapper.java @@ -2,6 +2,7 @@ package com.zhyc.module.produce.breed.mapper; import java.util.List; import java.util.Map; +import org.apache.ibatis.annotations.Param; import com.zhyc.module.produce.breed.domain.ScSheepDeath; /** @@ -67,4 +68,22 @@ public interface ScSheepDeathMapper * @return 结果 */ public int deleteScSheepDeathByIds(Long[] ids); + + /** + * 更新羊只繁育状态 + * + * @param sheepId 羊只ID + * @param status 繁育状态 + * @return 更新结果 + */ + public int updateSheepFileStatus(@Param("sheepId") Long sheepId, @Param("status") String status); + + /** + * 新增:更新羊只在群状态 + * + * @param sheepId 羊只ID + * @param status 在群状态(1-在群,2-不在群) + * @return 更新结果 + */ + public int updateSheepStatus(@Param("sheepId") Long sheepId, @Param("status") String status); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedPlanGenerateService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedPlanGenerateService.java index 4580492..499438d 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedPlanGenerateService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedPlanGenerateService.java @@ -2,6 +2,7 @@ package com.zhyc.module.produce.breed.service; import java.util.List; import java.util.Map; +import javax.servlet.http.HttpServletResponse; import com.zhyc.module.produce.breed.domain.ScBreedPlanGenerate; /** @@ -45,11 +46,13 @@ public interface IScBreedPlanGenerateService /** * 自动生成配种计划 * + * @param planType 计划类型 + * @param planName 计划名称 * @param eweIds 母羊ID列表 * @param ramIds 公羊ID列表 * @return 生成的配种计划 */ - public ScBreedPlanGenerate autoGenerateBreedPlan(List eweIds, List ramIds); + public ScBreedPlanGenerate autoGenerateBreedPlan(Integer planType, String planName, List eweIds, List ramIds); /** * 新增配种计划生成 @@ -68,12 +71,23 @@ public interface IScBreedPlanGenerateService public int updateScBreedPlanGenerate(ScBreedPlanGenerate scBreedPlanGenerate); /** - * 审批配种计划 + * 获取审批配种计划详情 * * @param id 配种计划ID + * @return 审批配种计划详情 + */ + public Map getApproveBreedPlanDetails(Long id); + + /** + * 确认审批配种计划 + * + * @param planId 配种计划ID + * @param planDetails 配种计划详情 + * @param status 审批状态 + * @param approveRemark 审批意见 * @return 结果 */ - public int approveBreedPlan(Long id); + public int confirmApproveBreedPlan(Long planId, List> planDetails, Integer status, String approveRemark); /** * 获取配种计划详情 @@ -91,6 +105,14 @@ public interface IScBreedPlanGenerateService */ public int deleteScBreedPlanGenerateByIds(Long[] ids); + /** + * 导出配种计划详情 + * + * @param response HTTP响应 + * @param id 配种计划ID + */ + public void exportBreedPlanDetails(HttpServletResponse response, Long id); + /** * 删除配种计划生成信息 * diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedRecordService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedRecordService.java index 7f71704..293d63e 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedRecordService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScBreedRecordService.java @@ -91,4 +91,32 @@ public interface IScBreedRecordService * @return 配种计划信息 */ public Map getBreedPlanByEweTags(String manageTags); + + /** + * 根据母羊耳号获取最新的配种计划信息(优先从配种计划生成表获取) + * + * @param manageTags 母羊管理耳号 + * @return 配种计划信息 + */ + public Map getLatestBreedPlanByEweTags(String manageTags); + + /** + * 同步孕检结果到配种记录 + * + * @param pregnancyRecordId 孕检记录ID + * @param sheepId 羊只ID + * @param pregnancyCheckDate 孕检日期 + * @return 结果 + */ + public int syncPregnancyResult(Long pregnancyRecordId, Long sheepId, String pregnancyCheckDate); + + /** + * 根据羊只ID和时间范围查询配种记录 + * + * @param sheepId 羊只ID + * @param startDate 开始时间 + * @param endDate 结束时间 + * @return 配种记录集合 + */ + public List getBreedRecordsByTimeRange(Long sheepId, String startDate, String endDate); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScLambingRecordService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScLambingRecordService.java index 83a6497..a230bb4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScLambingRecordService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScLambingRecordService.java @@ -1,6 +1,7 @@ package com.zhyc.module.produce.breed.service; import java.util.List; +import java.util.Map; import com.zhyc.module.produce.breed.domain.ScLambingRecord; import com.zhyc.module.produce.breed.domain.ScLambDetail; @@ -14,6 +15,14 @@ public interface IScLambingRecordService { */ public List selectScLambingRecordList(ScLambingRecord scLambingRecord); + /** + * 根据母羊耳号查询最新配种记录 + * + * @param earNumber 母羊耳号 + * @return 配种记录信息 + */ + public Map getLatestBreedingByEarNumber(String earNumber); + /** * 新增产羔记录(包含羔羊详情) */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScMiscarriageRecordService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScMiscarriageRecordService.java new file mode 100644 index 0000000..e260f54 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScMiscarriageRecordService.java @@ -0,0 +1,70 @@ +package com.zhyc.module.produce.breed.service; + +import java.util.List; +import java.util.Map; +import com.zhyc.module.produce.breed.domain.ScMiscarriageRecord; + +/** + * 流产记录Service接口 + * + * @author ruoyi + * @date 2025-08-23 + */ +public interface IScMiscarriageRecordService +{ + /** + * 查询流产记录 + * + * @param id 流产记录主键 + * @return 流产记录 + */ + public ScMiscarriageRecord selectScMiscarriageRecordById(Long id); + + /** + * 查询流产记录列表 + * + * @param scMiscarriageRecord 流产记录 + * @return 流产记录集合 + */ + public List selectScMiscarriageRecordList(ScMiscarriageRecord scMiscarriageRecord); + + /** + * 新增流产记录 + * + * @param scMiscarriageRecord 流产记录 + * @return 结果 + */ + public int insertScMiscarriageRecord(ScMiscarriageRecord scMiscarriageRecord); + + /** + * 修改流产记录 + * + * @param scMiscarriageRecord 流产记录 + * @return 结果 + */ + public int updateScMiscarriageRecord(ScMiscarriageRecord scMiscarriageRecord); + + /** + * 批量删除流产记录 + * + * @param ids 需要删除的流产记录主键集合 + * @return 结果 + */ + public int deleteScMiscarriageRecordByIds(Long[] ids); + + /** + * 删除流产记录信息 + * + * @param id 流产记录主键 + * @return 结果 + */ + public int deleteScMiscarriageRecordById(Long id); + + /** + * 根据耳号查询羊只信息 + * + * @param manageTags 管理耳号 + * @return 羊只信息 + */ + public Map selectSheepByManageTags(String manageTags); +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScPregnancyRecordService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScPregnancyRecordService.java index bc0d2e4..8f89031 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScPregnancyRecordService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScPregnancyRecordService.java @@ -67,4 +67,12 @@ public interface IScPregnancyRecordService * @return 羊只信息 */ public Map getSheepByManageTags(String manageTags); + + /** + * 根据耳号获取配种信息 + * + * @param manageTags 耳号 + * @return 配种信息 + */ + public Map getBreedInfoByManageTags(String manageTags); } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedPlanGenerateServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedPlanGenerateServiceImpl.java index 3e88f7c..f2073ce 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedPlanGenerateServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScBreedPlanGenerateServiceImpl.java @@ -5,6 +5,8 @@ import java.util.Map; import java.util.HashMap; import java.util.Date; import java.text.SimpleDateFormat; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; import com.zhyc.module.produce.breed.domain.ScBreedPlan; import com.zhyc.module.produce.breed.domain.ScBreedPlanGenerate; @@ -15,6 +17,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.zhyc.common.utils.SecurityUtils; +import org.springframework.util.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; /** * 配种计划生成Service业务层处理 @@ -80,20 +86,27 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi /** * 自动生成配种计划 * + * @param planType 计划类型 + * @param planName 计划名称 * @param eweIds 母羊ID列表 * @param ramIds 公羊ID列表 * @return 生成的配种计划 */ @Override @Transactional - public ScBreedPlanGenerate autoGenerateBreedPlan(List eweIds, List ramIds) + public ScBreedPlanGenerate autoGenerateBreedPlan(Integer planType, String planName, List eweIds, List ramIds) { // 创建配种计划生成记录 ScBreedPlanGenerate planGenerate = new ScBreedPlanGenerate(); + + // 自动生成计划名称:日期+计划类型 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String dateStr = sdf.format(new Date()); - planGenerate.setPlanName(dateStr + "同期发情配种计划"); - planGenerate.setPlanType(1); + String planTypeName = (planType == 1) ? "同期发情配种计划" : "本交配种计划"; + planName = dateStr + planTypeName; + + planGenerate.setPlanName(planName); + planGenerate.setPlanType(planType); planGenerate.setPlanDate(new Date()); planGenerate.setTotalEweCount(eweIds.size()); planGenerate.setTotalRamCount(ramIds.size()); @@ -109,7 +122,7 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi scBreedPlanGenerateMapper.insertScBreedPlanGenerate(planGenerate); // 生成具体的配种计划 - generateBreedPlanDetails(planGenerate.getId(), eweIds, ramIds); + generateBreedPlanDetails(planGenerate.getId(), eweIds, ramIds, planType); return planGenerate; } @@ -117,16 +130,23 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi /** * 生成具体的配种计划详情 */ - private void generateBreedPlanDetails(Long planGenerateId, List eweIds, List ramIds) + private void generateBreedPlanDetails(Long planGenerateId, List eweIds, List ramIds, Integer planType) { int ramIndex = 0; int ewesPerRam = (int) Math.ceil((double) eweIds.size() / ramIds.size()); for (int i = 0; i < eweIds.size(); i++) { ScBreedPlan breedPlan = new ScBreedPlan(); + // 存储公羊ID而不是字符串 breedPlan.setRamId(ramIds.get(ramIndex).toString()); breedPlan.setEweId(eweIds.get(i).toString()); - breedPlan.setBreedType(1L); // 默认配种类型 + + // 根据计划类型设置配种类型:同期发情配种计划->同期发情,本交配种计划->本交 + if (planType == 1) { + breedPlan.setBreedType(1L); // 同期发情 + } else { + breedPlan.setBreedType(2L); // 本交 + } // 插入临时配种计划,关联到生成记录 scBreedPlanGenerateMapper.insertTempBreedPlan(planGenerateId, breedPlan); @@ -165,28 +185,75 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi } /** - * 审批配种计划 + * 获取审批配种计划详情 * * @param id 配种计划ID + * @return 审批配种计划详情 + */ + @Override + public Map getApproveBreedPlanDetails(Long id) + { + Map result = new HashMap<>(); + + // 获取配种计划基本信息 + ScBreedPlanGenerate planGenerate = scBreedPlanGenerateMapper.selectScBreedPlanGenerateById(id); + result.put("planInfo", planGenerate); + + // 获取详细的配种计划信息 + List> planDetails = scBreedPlanGenerateMapper.selectApproveBreedPlanDetails(id); + result.put("planDetails", planDetails); + + // 获取可选择的公羊列表 + List> availableRams = scBreedPlanGenerateMapper.selectEligibleRam(); + result.put("availableRams", availableRams); + + return result; + } + + /** + * 确认审批配种计划 + * + * @param planId 配种计划ID + * @param planDetails 配种计划详情 + * @param status 审批状态 + * @param approveRemark 审批意见 * @return 结果 */ @Override @Transactional - public int approveBreedPlan(Long id) + public int confirmApproveBreedPlan(Long planId, List> planDetails, Integer status, String approveRemark) { // 更新审批状态 ScBreedPlanGenerate planGenerate = new ScBreedPlanGenerate(); - planGenerate.setId(id); - planGenerate.setStatus(1); // 已审批 + planGenerate.setId(planId); + planGenerate.setStatus(status); planGenerate.setApprover(SecurityUtils.getUsername()); planGenerate.setApproveTime(new Date()); + planGenerate.setApproveRemark(approveRemark); planGenerate.setUpdateTime(new Date()); int result = scBreedPlanGenerateMapper.updateScBreedPlanGenerate(planGenerate); - // 将临时配种计划转为正式配种计划 - if (result > 0) { - scBreedPlanGenerateMapper.transferTempToFormal(id); + // 如果审批通过,更新临时配种计划并转为正式计划 + if (result > 0 && status == 1) { + // 更新临时配种计划中的公羊分配 + if (planDetails != null && !planDetails.isEmpty()) { + for (Map detail : planDetails) { + Long tempId = Long.valueOf(detail.get("id").toString()); + Long ramId = Long.valueOf(detail.get("ram_id").toString()); + Long breedType = Long.valueOf(detail.get("breed_type").toString()); + + // 更新临时配种计划 + Map updateParams = new HashMap<>(); + updateParams.put("id", tempId); + updateParams.put("ramId", ramId); + updateParams.put("breedType", breedType); + scBreedPlanGenerateMapper.updateTempBreedPlan(updateParams); + } + } + + // 将临时配种计划转为正式配种计划 + scBreedPlanGenerateMapper.transferTempToFormal(planId); } return result; @@ -214,6 +281,231 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi return result; } + /** + * 导出配种计划详情 + * + * @param response HTTP响应 + * @param id 配种计划ID + */ + @Override + public void exportBreedPlanDetails(HttpServletResponse response, Long id) + { + try { + // 获取配种计划基本信息 + ScBreedPlanGenerate planGenerate = scBreedPlanGenerateMapper.selectScBreedPlanGenerateById(id); + if (planGenerate == null) { + throw new RuntimeException("配种计划不存在"); + } + + // 检查是否已审批 + if (planGenerate.getStatus() != 1) { + throw new RuntimeException("只有已审批的配种计划才能导出"); + } + + // 获取配种计划详情 + List> planDetails = scBreedPlanGenerateMapper.selectBreedPlanDetails(id); + + // 创建工作簿 + Workbook workbook = new XSSFWorkbook(); + Sheet sheet = workbook.createSheet("配种计划详情"); + + // 创建样式 + CellStyle titleStyle = workbook.createCellStyle(); + Font titleFont = workbook.createFont(); + titleFont.setBold(true); + titleFont.setFontHeightInPoints((short) 16); + titleStyle.setFont(titleFont); + titleStyle.setAlignment(HorizontalAlignment.CENTER); + + CellStyle headerStyle = workbook.createCellStyle(); + Font headerFont = workbook.createFont(); + headerFont.setBold(true); + headerStyle.setFont(headerFont); + headerStyle.setAlignment(HorizontalAlignment.CENTER); + headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + CellStyle dataStyle = workbook.createCellStyle(); + dataStyle.setAlignment(HorizontalAlignment.CENTER); + + CellStyle eweHeaderStyle = workbook.createCellStyle(); + Font eweHeaderFont = workbook.createFont(); + eweHeaderFont.setBold(true); + eweHeaderStyle.setFont(eweHeaderFont); + eweHeaderStyle.setAlignment(HorizontalAlignment.CENTER); + eweHeaderStyle.setFillForegroundColor(IndexedColors.ROSE.getIndex()); + eweHeaderStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + CellStyle ramHeaderStyle = workbook.createCellStyle(); + Font ramHeaderFont = workbook.createFont(); + ramHeaderFont.setBold(true); + ramHeaderStyle.setFont(ramHeaderFont); + ramHeaderStyle.setAlignment(HorizontalAlignment.CENTER); + ramHeaderStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex()); + ramHeaderStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + int rowNum = 0; + + // 标题 + Row titleRow = sheet.createRow(rowNum++); + Cell titleCell = titleRow.createCell(0); + titleCell.setCellValue(planGenerate.getPlanName() + " - 配种计划详情"); + titleCell.setCellStyle(titleStyle); + sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 19)); + + // 空行 + rowNum++; + + // 基本信息 + Row infoRow1 = sheet.createRow(rowNum++); + infoRow1.createCell(0).setCellValue("计划类型:"); + infoRow1.createCell(1).setCellValue(planGenerate.getPlanType() == 1 ? "同期发情配种计划" : "本交配种计划"); + infoRow1.createCell(3).setCellValue("计划日期:"); + infoRow1.createCell(4).setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(planGenerate.getPlanDate())); + + Row infoRow2 = sheet.createRow(rowNum++); + infoRow2.createCell(0).setCellValue("母羊数量:"); + infoRow2.createCell(1).setCellValue(planGenerate.getTotalEweCount()); + infoRow2.createCell(3).setCellValue("公羊数量:"); + infoRow2.createCell(4).setCellValue(planGenerate.getTotalRamCount()); + + Row infoRow3 = sheet.createRow(rowNum++); + infoRow3.createCell(0).setCellValue("配种比例:"); + infoRow3.createCell(1).setCellValue(planGenerate.getBreedRatio()); + infoRow3.createCell(3).setCellValue("创建人:"); + infoRow3.createCell(4).setCellValue(planGenerate.getCreateBy()); + + // 空行 + rowNum++; + + // 分组表头 + Row groupHeaderRow = sheet.createRow(rowNum++); + Cell groupHeaderCell1 = groupHeaderRow.createCell(1); + groupHeaderCell1.setCellValue("母羊信息"); + groupHeaderCell1.setCellStyle(eweHeaderStyle); + sheet.addMergedRegion(new CellRangeAddress(rowNum-1, rowNum-1, 1, 12)); + + Cell groupHeaderCell2 = groupHeaderRow.createCell(13); + groupHeaderCell2.setCellValue("公羊信息"); + groupHeaderCell2.setCellStyle(ramHeaderStyle); + sheet.addMergedRegion(new CellRangeAddress(rowNum-1, rowNum-1, 13, 19)); + + // 详细表头 + Row headerRow = sheet.createRow(rowNum++); + String[] headers = { + "序号", + // 母羊信息 + "母羊耳号", "母羊品种", "母羊家系", "母羊类别", "繁育状态", "胎次", "月龄", "体重", "核心羊群", "是否种用", "羊舍", "备注", + // 公羊信息 + "公羊耳号", "公羊品种", "公羊家系", "公羊类别", "生日", "月龄", "体重", + // 配种信息 + "配种类型" + }; + + for (int i = 0; i < headers.length; i++) { + Cell cell = headerRow.createCell(i); + cell.setCellValue(headers[i]); + if (i == 0 || i == headers.length - 1) { + cell.setCellStyle(headerStyle); + } else if (i <= 12) { + cell.setCellStyle(eweHeaderStyle); + } else { + cell.setCellStyle(ramHeaderStyle); + } + } + + // 数据行 + for (int i = 0; i < planDetails.size(); i++) { + Map detail = planDetails.get(i); + Row dataRow = sheet.createRow(rowNum++); + int colNum = 0; + + // 序号 + dataRow.createCell(colNum++).setCellValue(i + 1); + + // 母羊信息 + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_manage_tags")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_variety")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_family")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_sheep_type")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_breed_status")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_parity")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_month_age")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_current_weight")); + dataRow.createCell(colNum++).setCellValue(getBooleanValue(detail, "ewe_is_core") ? "是" : "否"); + dataRow.createCell(colNum++).setCellValue(getBooleanValue(detail, "ewe_is_breeding") ? "是" : "否"); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_sheepfold_name")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ewe_comment")); + + // 公羊信息 + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ram_manage_tags")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ram_variety")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ram_family")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ram_sheep_type")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ram_birthday")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ram_month_age")); + dataRow.createCell(colNum++).setCellValue(getStringValue(detail, "ram_current_weight")); + + // 配种类型 + Object breedType = detail.get("breed_type"); + String breedTypeName = "未知类型"; + if (breedType != null) { + int typeValue = Integer.parseInt(breedType.toString()); + breedTypeName = typeValue == 1 ? "同期发情" : (typeValue == 2 ? "本交" : "未知类型"); + } + dataRow.createCell(colNum++).setCellValue(breedTypeName); + + // 应用数据样式 + for (int j = 0; j < headers.length; j++) { + if (dataRow.getCell(j) != null) { + dataRow.getCell(j).setCellStyle(dataStyle); + } + } + } + + // 自动调整列宽 + for (int i = 0; i < headers.length; i++) { + sheet.autoSizeColumn(i); + // 设置最小宽度 + if (sheet.getColumnWidth(i) < 2000) { + sheet.setColumnWidth(i, 2000); + } + } + + // 设置响应头 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = java.net.URLEncoder.encode(planGenerate.getPlanName() + "_配种计划详情", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + + // 输出到响应流 + workbook.write(response.getOutputStream()); + workbook.close(); + + } catch (IOException e) { + throw new RuntimeException("导出Excel失败", e); + } + } + + /** + * 安全获取字符串值 + */ + private String getStringValue(Map map, String key) { + Object value = map.get(key); + return value != null ? value.toString() : ""; + } + + /** + * 安全获取布尔值 + */ + private boolean getBooleanValue(Map map, String key) { + Object value = map.get(key); + if (value == null) return false; + if (value instanceof Boolean) return (Boolean) value; + if (value instanceof Number) return ((Number) value).intValue() == 1; + return "1".equals(value.toString()) || "true".equalsIgnoreCase(value.toString()); + } + /** * 批量删除配种计划生成 * @@ -221,8 +513,13 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi * @return 结果 */ @Override + @Transactional public int deleteScBreedPlanGenerateByIds(Long[] ids) { + // 删除相关的临时配种计划 + for (Long id : ids) { + scBreedPlanGenerateMapper.deleteTempBreedPlanByPlanId(id); + } return scBreedPlanGenerateMapper.deleteScBreedPlanGenerateByIds(ids); } @@ -233,8 +530,11 @@ public class ScBreedPlanGenerateServiceImpl implements IScBreedPlanGenerateServi * @return 结果 */ @Override + @Transactional public int deleteScBreedPlanGenerateById(Long id) { + // 先删除相关的临时配种计划 + scBreedPlanGenerateMapper.deleteTempBreedPlanByPlanId(id); return scBreedPlanGenerateMapper.deleteScBreedPlanGenerateById(id); } } \ No newline at end of file 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 61ab012..aaad5b1 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 @@ -4,6 +4,8 @@ import java.util.List; import java.util.Map; import com.zhyc.common.utils.DateUtils; import com.zhyc.common.utils.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zhyc.module.produce.breed.mapper.ScBreedRecordMapper; @@ -19,6 +21,8 @@ import com.zhyc.module.produce.breed.service.IScBreedRecordService; @Service public class ScBreedRecordServiceImpl implements IScBreedRecordService { + private static final Logger log = LoggerFactory.getLogger(ScBreedRecordServiceImpl.class); + @Autowired private ScBreedRecordMapper scBreedRecordMapper; @@ -161,4 +165,84 @@ public class ScBreedRecordServiceImpl implements IScBreedRecordService { return scBreedRecordMapper.getBreedPlanByEweTags(manageTags); } + + /** + * 根据母羊耳号获取最新的配种计划信息(优先从配种计划生成表获取) + * + * @param manageTags 母羊管理耳号 + * @return 配种计划信息 + */ + @Override + public Map getLatestBreedPlanByEweTags(String manageTags) + { + try { + // 优先从配种计划生成表获取最新计划 + Map latestPlan = scBreedRecordMapper.getLatestBreedPlanByEweTags(manageTags); + + if (latestPlan != null && !latestPlan.isEmpty()) { + log.info("从配种计划生成表获取到配种计划: {}", latestPlan); + return latestPlan; + } + + // 如果生成表中没有,则从普通配种计划表获取 + Map normalPlan = scBreedRecordMapper.getBreedPlanByEweTags(manageTags); + if (normalPlan != null && !normalPlan.isEmpty()) { + log.info("从配种计划表获取到配种计划: {}", normalPlan); + return normalPlan; + } + + log.warn("未找到母羊耳号 {} 的配种计划信息", manageTags); + return null; + + } catch (Exception e) { + log.error("获取配种计划信息时发生异常,母羊耳号: {}", manageTags, e); + return null; + } + } + + /** + * 同步孕检结果到配种记录 + * + * @param pregnancyRecordId 孕检记录ID + * @param sheepId 羊只ID + * @param pregnancyCheckDate 孕检日期 + * @return 结果 + */ + @Override + public int syncPregnancyResult(Long pregnancyRecordId, Long sheepId, String pregnancyCheckDate) + { + try { + // 查找孕检日期前最近的配种记录 + List breedRecords = scBreedRecordMapper.selectBreedRecordByMatingTime( + sheepId, null, pregnancyCheckDate); + + if (breedRecords != null && !breedRecords.isEmpty()) { + // 取最近的一次配种记录 + ScBreedRecord latestBreedRecord = breedRecords.get(0); + + // 更新配种记录中的孕检信息 + return scBreedRecordMapper.updatePregnancyInfo(latestBreedRecord.getId(), pregnancyRecordId); + } else { + log.warn("未找到羊只ID {} 在孕检日期 {} 前的配种记录", sheepId, pregnancyCheckDate); + return 0; + } + } catch (Exception e) { + log.error("同步孕检结果到配种记录时发生异常", e); + return 0; + } + } + + /** + * 根据羊只ID和时间范围查询配种记录 + * + * @param sheepId 羊只ID + * @param startDate 开始时间 + * @param endDate 结束时间 + * @return 配种记录集合 + */ + @Override + public List getBreedRecordsByTimeRange(Long sheepId, String startDate, String endDate) + { + return scBreedRecordMapper.selectBreedRecordByMatingTime(sheepId, startDate, endDate); + } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScLambingRecordServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScLambingRecordServiceImpl.java index 74b6715..2360839 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScLambingRecordServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScLambingRecordServiceImpl.java @@ -2,6 +2,7 @@ package com.zhyc.module.produce.breed.service.impl; import java.math.BigDecimal; import java.util.List; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -31,6 +32,14 @@ public class ScLambingRecordServiceImpl implements IScLambingRecordService { return scLambingRecordMapper.selectScLambingRecordList(scLambingRecord); } + /** + * 根据母羊耳号查询最新配种记录 + */ + @Override + public Map getLatestBreedingByEarNumber(String earNumber) { + return scLambingRecordMapper.getLatestBreedingByEarNumber(earNumber); + } + /** * 新增产羔记录(包含羔羊详情) */ @@ -70,11 +79,6 @@ public class ScLambingRecordServiceImpl implements IScLambingRecordService { } } - - - /** - * 验证和转换羔羊详情 - */ /** * 验证和转换羔羊详情 */ @@ -84,7 +88,7 @@ public class ScLambingRecordServiceImpl implements IScLambingRecordService { throw new RuntimeException("羔羊耳号不能为空"); } - if (lambDetail.getGender() == null) { // 改为检查Integer类型 + if (lambDetail.getGender() == null) { throw new RuntimeException("羔羊性别不能为空"); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScMiscarriageRecordServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScMiscarriageRecordServiceImpl.java new file mode 100644 index 0000000..04e4733 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScMiscarriageRecordServiceImpl.java @@ -0,0 +1,108 @@ +package com.zhyc.module.produce.breed.service.impl; + +import java.util.List; +import java.util.Map; +import com.zhyc.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.zhyc.module.produce.breed.mapper.ScMiscarriageRecordMapper; +import com.zhyc.module.produce.breed.domain.ScMiscarriageRecord; +import com.zhyc.module.produce.breed.service.IScMiscarriageRecordService; + +/** + * 流产记录Service业务层处理 + * + * @author ruoyi + * @date 2025-08-23 + */ +@Service +public class ScMiscarriageRecordServiceImpl implements IScMiscarriageRecordService +{ + @Autowired + private ScMiscarriageRecordMapper scMiscarriageRecordMapper; + + /** + * 查询流产记录 + * + * @param id 流产记录主键 + * @return 流产记录 + */ + @Override + public ScMiscarriageRecord selectScMiscarriageRecordById(Long id) + { + return scMiscarriageRecordMapper.selectScMiscarriageRecordById(id); + } + + /** + * 查询流产记录列表 + * + * @param scMiscarriageRecord 流产记录 + * @return 流产记录 + */ + @Override + public List selectScMiscarriageRecordList(ScMiscarriageRecord scMiscarriageRecord) + { + return scMiscarriageRecordMapper.selectScMiscarriageRecordList(scMiscarriageRecord); + } + + /** + * 新增流产记录 + * + * @param scMiscarriageRecord 流产记录 + * @return 结果 + */ + @Override + public int insertScMiscarriageRecord(ScMiscarriageRecord scMiscarriageRecord) + { + scMiscarriageRecord.setCreateTime(DateUtils.getNowDate()); + return scMiscarriageRecordMapper.insertScMiscarriageRecord(scMiscarriageRecord); + } + + /** + * 修改流产记录 + * + * @param scMiscarriageRecord 流产记录 + * @return 结果 + */ + @Override + public int updateScMiscarriageRecord(ScMiscarriageRecord scMiscarriageRecord) + { + return scMiscarriageRecordMapper.updateScMiscarriageRecord(scMiscarriageRecord); + } + + /** + * 批量删除流产记录 + * + * @param ids 需要删除的流产记录主键 + * @return 结果 + */ + @Override + public int deleteScMiscarriageRecordByIds(Long[] ids) + { + return scMiscarriageRecordMapper.deleteScMiscarriageRecordByIds(ids); + } + + /** + * 删除流产记录信息 + * + * @param id 流产记录主键 + * @return 结果 + */ + @Override + public int deleteScMiscarriageRecordById(Long id) + { + return scMiscarriageRecordMapper.deleteScMiscarriageRecordById(id); + } + + /** + * 根据耳号查询羊只信息 + * + * @param manageTags 管理耳号 + * @return 羊只信息 + */ + @Override + public Map selectSheepByManageTags(String manageTags) + { + return scMiscarriageRecordMapper.selectSheepByManageTags(manageTags); + } +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScPregnancyRecordServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScPregnancyRecordServiceImpl.java index dde2c3d..e04df0a 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScPregnancyRecordServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScPregnancyRecordServiceImpl.java @@ -3,10 +3,10 @@ package com.zhyc.module.produce.breed.service.impl; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Date; import java.util.Calendar; import com.zhyc.common.utils.DateUtils; +import com.zhyc.common.exception.ServiceException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -57,24 +57,50 @@ public class ScPregnancyRecordServiceImpl implements IScPregnancyRecordService * @return 结果 */ @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public int insertScPregnancyRecord(ScPregnancyRecord scPregnancyRecord) { + // 参数校验 + if (scPregnancyRecord.getManageTags() == null || scPregnancyRecord.getManageTags().trim().isEmpty()) { + throw new ServiceException("管理耳号不能为空"); + } + + if (scPregnancyRecord.getDatetime() == null) { + throw new ServiceException("孕检日期不能为空"); + } + + if (scPregnancyRecord.getResult() == null || scPregnancyRecord.getResult().trim().isEmpty()) { + throw new ServiceException("孕检结果不能为空"); + } + + // 根据耳号获取羊只信息并验证 + Map sheepInfo = scPregnancyRecordMapper.selectSheepByManageTags(scPregnancyRecord.getManageTags().trim()); + if (sheepInfo == null) { + throw new ServiceException("管理耳号[" + scPregnancyRecord.getManageTags() + "]对应的羊只不存在"); + } + + Long sheepId = sheepInfo.get("id") != null ? Long.valueOf(sheepInfo.get("id").toString()) : null; + if (sheepId == null) { + throw new ServiceException("无法获取羊只ID,请检查数据完整性"); + } + scPregnancyRecord.setSheepId(sheepId); + + // 验证孕检结果和胎儿数量的一致性 + validatePregnancyResult(scPregnancyRecord); + + // 设置默认值 scPregnancyRecord.setCreateTime(DateUtils.getNowDate()); scPregnancyRecord.setIsDelete(0); - // 根据耳号获取羊只ID - if (scPregnancyRecord.getManageTags() != null) { - Map sheepInfo = scPregnancyRecordMapper.selectSheepByManageTags(scPregnancyRecord.getManageTags()); - if (sheepInfo != null && sheepInfo.get("id") != null) { - scPregnancyRecord.setSheepId(Long.valueOf(sheepInfo.get("id").toString())); - } + // 如果孕检方式为空,默认设置为B超 + if (scPregnancyRecord.getWay() == null || scPregnancyRecord.getWay().trim().isEmpty()) { + scPregnancyRecord.setWay("B超"); } int result = scPregnancyRecordMapper.insertScPregnancyRecord(scPregnancyRecord); // 如果孕检结果为怀孕,更新羊只基础表相关字段 - if ("怀孕".equals(scPregnancyRecord.getResult()) && scPregnancyRecord.getSheepId() != null) { + if ("怀孕".equals(scPregnancyRecord.getResult()) && result > 0) { updateSheepPregnancyStatus(scPregnancyRecord); } @@ -88,29 +114,67 @@ public class ScPregnancyRecordServiceImpl implements IScPregnancyRecordService * @return 结果 */ @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public int updateScPregnancyRecord(ScPregnancyRecord scPregnancyRecord) { - scPregnancyRecord.setUpdateTime(DateUtils.getNowDate()); - - // 根据耳号获取羊只ID - if (scPregnancyRecord.getManageTags() != null) { - Map sheepInfo = scPregnancyRecordMapper.selectSheepByManageTags(scPregnancyRecord.getManageTags()); - if (sheepInfo != null && sheepInfo.get("id") != null) { - scPregnancyRecord.setSheepId(Long.valueOf(sheepInfo.get("id").toString())); - } + // 参数校验 + if (scPregnancyRecord.getId() == null) { + throw new ServiceException("记录ID不能为空"); } + if (scPregnancyRecord.getManageTags() == null || scPregnancyRecord.getManageTags().trim().isEmpty()) { + throw new ServiceException("管理耳号不能为空"); + } + + // 根据耳号获取羊只信息并验证 + Map sheepInfo = scPregnancyRecordMapper.selectSheepByManageTags(scPregnancyRecord.getManageTags().trim()); + if (sheepInfo == null) { + throw new ServiceException("管理耳号[" + scPregnancyRecord.getManageTags() + "]对应的羊只不存在"); + } + + Long sheepId = sheepInfo.get("id") != null ? Long.valueOf(sheepInfo.get("id").toString()) : null; + if (sheepId == null) { + throw new ServiceException("无法获取羊只ID,请检查数据完整性"); + } + scPregnancyRecord.setSheepId(sheepId); + + // 验证孕检结果和胎儿数量的一致性 + validatePregnancyResult(scPregnancyRecord); + + scPregnancyRecord.setUpdateTime(DateUtils.getNowDate()); + int result = scPregnancyRecordMapper.updateScPregnancyRecord(scPregnancyRecord); // 如果孕检结果为怀孕,更新羊只基础表相关字段 - if ("怀孕".equals(scPregnancyRecord.getResult()) && scPregnancyRecord.getSheepId() != null) { + if ("怀孕".equals(scPregnancyRecord.getResult()) && result > 0) { updateSheepPregnancyStatus(scPregnancyRecord); } return result; } + /** + * 验证孕检结果和胎儿数量的一致性 + * + * @param scPregnancyRecord 孕检记录 + */ + private void validatePregnancyResult(ScPregnancyRecord scPregnancyRecord) { + String result = scPregnancyRecord.getResult(); + Integer fetusCount = scPregnancyRecord.getFetusCount(); + + if ("怀孕".equals(result)) { + if (fetusCount == null || fetusCount <= 0) { + throw new ServiceException("孕检结果为怀孕时,胎儿数量必须填写且大于0"); + } + if (fetusCount > 10) { + throw new ServiceException("胎儿数量不能超过10个"); + } + } else if ("未孕".equals(result) || "流产".equals(result)) { + // 未孕或流产时,胎儿数量应为0或null + scPregnancyRecord.setFetusCount(0); + } + } + /** * 批量删除孕检记录 * @@ -118,8 +182,12 @@ public class ScPregnancyRecordServiceImpl implements IScPregnancyRecordService * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteScPregnancyRecordByIds(Long[] ids) { + if (ids == null || ids.length == 0) { + throw new ServiceException("删除的记录ID不能为空"); + } return scPregnancyRecordMapper.deleteScPregnancyRecordByIds(ids); } @@ -130,8 +198,12 @@ public class ScPregnancyRecordServiceImpl implements IScPregnancyRecordService * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteScPregnancyRecordById(Long id) { + if (id == null) { + throw new ServiceException("删除的记录ID不能为空"); + } return scPregnancyRecordMapper.deleteScPregnancyRecordById(id); } @@ -144,7 +216,25 @@ public class ScPregnancyRecordServiceImpl implements IScPregnancyRecordService @Override public Map getSheepByManageTags(String manageTags) { - return scPregnancyRecordMapper.selectSheepByManageTags(manageTags); + if (manageTags == null || manageTags.trim().isEmpty()) { + throw new ServiceException("管理耳号不能为空"); + } + return scPregnancyRecordMapper.selectSheepByManageTags(manageTags.trim()); + } + + /** + * 根据耳号获取配种信息 + * + * @param manageTags 耳号 + * @return 配种信息 + */ + @Override + public Map getBreedInfoByManageTags(String manageTags) + { + if (manageTags == null || manageTags.trim().isEmpty()) { + throw new ServiceException("管理耳号不能为空"); + } + return scPregnancyRecordMapper.selectBreedInfoByManageTags(manageTags.trim()); } /** @@ -153,27 +243,32 @@ public class ScPregnancyRecordServiceImpl implements IScPregnancyRecordService * @param scPregnancyRecord 孕检记录 */ private void updateSheepPregnancyStatus(ScPregnancyRecord scPregnancyRecord) { - Map params = new HashMap<>(); - params.put("sheepId", scPregnancyRecord.getSheepId()); - params.put("pregDate", scPregnancyRecord.getDatetime()); + try { + Map params = new HashMap<>(); + params.put("sheepId", scPregnancyRecord.getSheepId()); + params.put("pregDate", scPregnancyRecord.getDatetime()); - // 设置繁育状态为怀孕状态(假设怀孕状态ID为2) - params.put("breedStatusId", 2); + // 设置繁育状态为怀孕状态(假设怀孕状态ID为2) + params.put("breedStatusId", 2); - // 计算预产日期(羊的妊娠期大约150天) - if (scPregnancyRecord.getDatetime() != null) { - Calendar cal = Calendar.getInstance(); - cal.setTime(scPregnancyRecord.getDatetime()); - cal.add(Calendar.DAY_OF_YEAR, 150); - params.put("expectedDate", cal.getTime()); + // 计算预产日期(羊的妊娠期大约150天) + if (scPregnancyRecord.getDatetime() != null) { + Calendar cal = Calendar.getInstance(); + cal.setTime(scPregnancyRecord.getDatetime()); + cal.add(Calendar.DAY_OF_YEAR, 150); + params.put("expectedDate", cal.getTime()); + } + + // 计算怀孕天数 + if (scPregnancyRecord.getDatetime() != null) { + long days = (System.currentTimeMillis() - scPregnancyRecord.getDatetime().getTime()) / (1000 * 60 * 60 * 24); + params.put("gestationDay", (int) days); + } + + scPregnancyRecordMapper.updateSheepPregnancyInfo(params); + } catch (Exception e) { + // 记录日志但不影响主流程 + System.err.println("更新羊只怀孕状态失败: " + e.getMessage()); } - - // 计算怀孕天数 - if (scPregnancyRecord.getDatetime() != null) { - long days = (System.currentTimeMillis() - scPregnancyRecord.getDatetime().getTime()) / (1000 * 60 * 60 * 24); - params.put("gestationDay", (int) days); - } - - scPregnancyRecordMapper.updateSheepPregnancyInfo(params); } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScSheepDeathServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScSheepDeathServiceImpl.java index 12e7afd..df8d0e2 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScSheepDeathServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScSheepDeathServiceImpl.java @@ -3,11 +3,17 @@ package com.zhyc.module.produce.breed.service.impl; import java.util.List; import java.util.Map; import com.zhyc.common.utils.DateUtils; +import com.zhyc.module.biosafety.domain.Diagnosis; +import com.zhyc.module.biosafety.domain.Treatment; +import com.zhyc.module.biosafety.mapper.DiagnosisMapper; +import com.zhyc.module.biosafety.mapper.TreatmentMapper; +import com.zhyc.module.biosafety.service.impl.TreatmentServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zhyc.module.produce.breed.mapper.ScSheepDeathMapper; import com.zhyc.module.produce.breed.domain.ScSheepDeath; import com.zhyc.module.produce.breed.service.IScSheepDeathService; +import org.springframework.transaction.annotation.Transactional; /** * 羊只死淘记录Service业务层处理 @@ -20,6 +26,13 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService { @Autowired private ScSheepDeathMapper scSheepDeathMapper; + @Autowired + private DiagnosisMapper diagnosisMapper; + @Autowired + private TreatmentServiceImpl treatmentService; + + + /** * 查询羊只死淘记录 @@ -100,6 +113,7 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService * @return 结果 */ @Override + @Transactional public int insertScSheepDeath(ScSheepDeath scSheepDeath) { // 设置事件类型默认为"死亡" @@ -111,11 +125,20 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService if (scSheepDeath.getManageTags() != null && !scSheepDeath.getManageTags().isEmpty()) { Map sheepInfo = selectSheepFileByManageTags(scSheepDeath.getManageTags()); if (sheepInfo != null) { - scSheepDeath.setSheepId(sheepInfo.get("sheepId") != null ? Long.valueOf(sheepInfo.get("sheepId").toString()) : null); + Long sheepId = sheepInfo.get("sheepId") != null ? Long.valueOf(sheepInfo.get("sheepId").toString()) : null; + scSheepDeath.setSheepId(sheepId); + + // 插入死淘记录后,同时更新羊只在群状态为"不在群"(字典值为2) + if (sheepId != null) { + scSheepDeathMapper.updateSheepStatus(sheepId, "2"); + } } } + treatmentService.updateTreatmentStatus(scSheepDeath.getSheepId()); + scSheepDeath.setCreateTime(DateUtils.getNowDate()); + return scSheepDeathMapper.insertScSheepDeath(scSheepDeath); } @@ -132,10 +155,15 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService if (scSheepDeath.getManageTags() != null && !scSheepDeath.getManageTags().isEmpty()) { Map sheepInfo = selectSheepFileByManageTags(scSheepDeath.getManageTags()); if (sheepInfo != null) { - scSheepDeath.setSheepId(sheepInfo.get("sheepId") != null ? Long.valueOf(sheepInfo.get("sheepId").toString()) : null); + Long sheepId = sheepInfo.get("sheepId") != null ? Long.valueOf(sheepInfo.get("sheepId").toString()) : null; + scSheepDeath.setSheepId(sheepId); + + // 修改死淘记录时,同时更新羊只在群状态为"不在群"(字典值为2) + if (sheepId != null) { + scSheepDeathMapper.updateSheepStatus(sheepId, "2"); + } } } - scSheepDeath.setUpdateTime(DateUtils.getNowDate()); return scSheepDeathMapper.updateScSheepDeath(scSheepDeath); } @@ -149,6 +177,15 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService @Override public int deleteScSheepDeathByIds(Long[] ids) { + // 可选:删除死淘记录前,将对应羊只在群状态改回"在群" + for (Long id : ids) { + ScSheepDeath scSheepDeath = scSheepDeathMapper.selectScSheepDeathById(id); + if (scSheepDeath != null && scSheepDeath.getSheepId() != null) { + // 恢复羊只在群状态为"在群"(字典值为1) + scSheepDeathMapper.updateSheepStatus(scSheepDeath.getSheepId(), "1"); + } + } + return scSheepDeathMapper.deleteScSheepDeathByIds(ids); } @@ -161,6 +198,13 @@ public class ScSheepDeathServiceImpl implements IScSheepDeathService @Override public int deleteScSheepDeathById(Long id) { + // 可选:删除死淘记录前,将对应羊只在群状态改回"在群" + ScSheepDeath scSheepDeath = scSheepDeathMapper.selectScSheepDeathById(id); + if (scSheepDeath != null && scSheepDeath.getSheepId() != null) { + // 恢复羊只在群状态为"在群"(字典值为1) + scSheepDeathMapper.updateSheepStatus(scSheepDeath.getSheepId(), "1"); + } + return scSheepDeathMapper.deleteScSheepDeathById(id); } } \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScAddSheepController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScAddSheepController.java index 6d2f7f9..4f56d3b 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScAddSheepController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScAddSheepController.java @@ -5,8 +5,12 @@ import com.zhyc.common.core.domain.AjaxResult; import com.zhyc.common.enums.BusinessType; import com.zhyc.common.exception.ServiceException; import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.module.base.domain.BasSheepType; import com.zhyc.module.base.domain.BasSheepVariety; +import com.zhyc.module.base.domain.DaRanch; +import com.zhyc.module.base.service.IBasSheepTypeService; import com.zhyc.module.base.service.IBasSheepVarietyService; +import com.zhyc.module.base.service.IDaRanchService; import com.zhyc.module.produce.manage_sheep.domain.ScAddSheep; import com.zhyc.module.produce.manage_sheep.service.IScAddSheepService; import com.zhyc.module.base.domain.DaSheepfold; @@ -36,6 +40,11 @@ public class ScAddSheepController { private IDaSheepfoldService daSheepfoldMapper; @Autowired private IBasSheepVarietyService basSheepVarietyMapper; + @Autowired + private IBasSheepTypeService basSheepTypeService; + @Autowired + private IDaRanchService daRanchService; + //新增羊只验证 @PreAuthorize("@ss.hasPermi('produce:add_sheep:add')") @Log(title = "新增", businessType = BusinessType.INSERT) @@ -44,6 +53,9 @@ public class ScAddSheepController { if (scAddSheep.getEarNumber() == null || scAddSheep.getEarNumber().isEmpty()) { return AjaxResult.error("耳号不能为空"); } + if (scAddSheep.getRanchId() == null || scAddSheep.getRanchId() == 0) { + return AjaxResult.error("牧场不能为空"); + } if (scAddSheep.getSheepfold() == null || scAddSheep.getSheepfold() == 0) { return AjaxResult.error("羊舍不能为空"); } @@ -79,8 +91,15 @@ public class ScAddSheepController { public void exportForm(HttpServletResponse response, @RequestBody ScAddSheep scAddSheep) throws IOException { ExcelUtil util = new ExcelUtil<>(ScAddSheep.class); List list = new ArrayList<>(); - - // 处理羊舍名称(原有逻辑) + //处理牧场名称 + if (scAddSheep.getRanchId() != null) { + // 根据牧场ID查询牧场信息 + DaRanch ranch = daRanchService.selectDaRanchById(scAddSheep.getRanchId().longValue()); + if (ranch != null) { + scAddSheep.setRanchName(ranch.getRanch()); // 将牧场名称设置到实体中 + } + } + // 处理羊舍名称 if (scAddSheep.getSheepfold() != null) { DaSheepfold fold = daSheepfoldMapper.selectDaSheepfoldById(scAddSheep.getSheepfold().longValue()); if (fold != null) { @@ -88,6 +107,7 @@ public class ScAddSheepController { } } + //处理羊只品种名称 if (scAddSheep.getVarietyId() != null) { BasSheepVariety variety = basSheepVarietyMapper.selectBasSheepVarietyById(scAddSheep.getVarietyId().longValue()); if (variety != null) { @@ -95,9 +115,17 @@ public class ScAddSheepController { } } + //处理羊只类型名称 + if (scAddSheep.getTypeId() != null) { + BasSheepType sheepType = basSheepTypeService.selectBasSheepTypeById(scAddSheep.getTypeId().intValue()); + if (sheepType != null) { + scAddSheep.setTypeName(sheepType.getName()); + } + } list.add(scAddSheep); util.exportExcel(response, list, "羊只信息"); } + //导入 @PostMapping("/importData") @PreAuthorize("@ss.hasPermi('produce:add_sheep:import')") diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScTransGroupController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScTransGroupController.java index 9fe5a2f..24518d4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScTransGroupController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/controller/ScTransGroupController.java @@ -101,8 +101,8 @@ public class ScTransGroupController extends BaseController { /** * 审批转群记录 */ - @PutMapping("/approve") - public AjaxResult approve(@RequestBody ScTransGroup scTransGroup) { - return toAjax(scTransGroupService.approveScTransGroup(scTransGroup)); - } +// @PutMapping("/approve") +// public AjaxResult approve(@RequestBody ScTransGroup scTransGroup) { +// return toAjax(scTransGroupService.approveScTransGroup(scTransGroup)); +// } } 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 f41c044..6307706 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 @@ -110,6 +110,9 @@ 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); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScAddSheep.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScAddSheep.java index 7bdf7ad..bae1352 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScAddSheep.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/domain/ScAddSheep.java @@ -27,6 +27,11 @@ public class ScAddSheep extends BaseEntity { @Excel(name = "耳号") private String earNumber; + /** 牧场 */ + private Integer ranchId; + @Excel(name = "牧场名称") + private String ranchName; + /** 羊舍编号 */ private Integer sheepfold; @@ -68,6 +73,11 @@ public class ScAddSheep extends BaseEntity { @Excel(name = "品种") private String varietyName; + /** 羊只类别 */ + private Long typeId; + @Excel(name = "羊只类型") + private String typeName; + /** 入群日期 */ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @Excel(name = "入群日期", dateFormat = "yyyy-MM-dd") 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 2243411..8e1b0cb 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 @@ -3,8 +3,6 @@ package com.zhyc.module.produce.manage_sheep.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -29,8 +27,20 @@ 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; + /** * 新备注 */ 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 f2ef13f..e7e9411 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 @@ -3,8 +3,6 @@ package com.zhyc.module.produce.manage_sheep.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -30,6 +28,15 @@ public class ScChangeEar extends BaseEntity @Excel(name = "管理耳号") private String manageTags; + /** 羊舍 */ + private Long sheepfoldId; + @Excel(name = "羊舍") + private String sheepfoldName; + + /** 事件类型(改管理耳号/改电子耳号) */ + @Excel(name = "事件类型") + private String eventType; + /** 选择更改耳号类型(0电子耳号1管理耳号) */ @Excel(name = "耳号类型", readConverterExp = "0=电子耳号,1=管理耳号") private Integer earType; 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 5f5e8ee..3c8953c 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 @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -31,6 +29,17 @@ public class ScChangeVariety extends BaseEntity @Excel(name = "耳号") private String manageTags; + /** 羊舍 */ + private Long sheepfoldId; + @Excel(name = "羊舍") + private String sheepfoldName; + + /** + * 事件类型 + */ + @Excel(name = "事件类型") + private String eventType; + /** 原品种 */ @Excel(name = "原品种") private String varietyOld; @@ -43,10 +52,5 @@ public class ScChangeVariety extends BaseEntity @Excel(name = "备注") private String comment; - /** 创建日期 */ - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "创建日期", width = 30, dateFormat = "yyyy-MM-dd") - private Date createTime; - } 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 ba62557..f45435e 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 @@ -3,11 +3,8 @@ package com.zhyc.module.produce.manage_sheep.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; -import org.springframework.beans.factory.annotation.Autowired; /** * 转群记录对象 sc_trans_group @@ -33,6 +30,14 @@ public class ScTransGroup extends BaseEntity { @Excel(name = "耳号") private String manageTags; + + /** + * 事件类型(1-围产转群,2-普通转群,3-育肥转群,4-预售转群) + */ + private Integer eventType; + @Excel(name = "事件类型") + private String eventTypeText; + /** * 转入羊舍 */ @@ -43,18 +48,19 @@ public class ScTransGroup extends BaseEntity { */ private String foldFrom; + /** + * 羊只类型 + */ + private Integer sheepTypeId; + @Excel(name = "羊只类型") + private String sheepTypeName; + /** * 转出羊舍名称 */ @Excel(name = "转出羊舍") private String foldFromName; - /** - * 羊只类型ID - */ - private Integer sheepTypeId; - // 羊只类型名称 - private String sheepTypeName; /** * 转入羊舍名称 */ @@ -80,6 +86,9 @@ public class ScTransGroup extends BaseEntity { @Excel(name = "转群原因") private String reasonText; + /** 转群日期 */ + @Excel(name = "转群日期") + private String transDate; /** * 技术员 */ 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 554bf4d..8176046 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 @@ -3,11 +3,11 @@ package com.zhyc.module.produce.manage_sheep.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; +import java.time.LocalDate; + /** * 转场对象 sc_transition_info * @@ -29,9 +29,27 @@ public class ScTransitionInfo extends BaseEntity { * 羊只id */ private Integer sheepId; - @Excel(name = "耳号") private String manageTags; + + /** + * 事件类型 + */ + @Excel(name = "事件类型") + private String eventType; + + + /** + * 转场类型 + */ + private Integer transType; + @Excel(name = "转场类型") + private String transTypeText; + + /** 转场日期 */ + @Excel(name = "转场日期") + private LocalDate transitionDate; + /** * 品种id */ @@ -56,16 +74,9 @@ public class ScTransitionInfo extends BaseEntity { private String transFrom; /** - * 转场类型 + * 接收羊舍 */ - private Integer transType; - - /** - * 转场类型名称 只用于导出 - */ - @Excel(name = "转场类型") - private String transTypeText; - + private Long sheepfoldId; /** * 技术员 */ @@ -78,6 +89,7 @@ public class ScTransitionInfo extends BaseEntity { private Integer status; @Excel(name = "状态") private String statusText; + /** * 备注 */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/mapper/ScTransitionInfoMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/mapper/ScTransitionInfoMapper.java index a095246..ce67176 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/mapper/ScTransitionInfoMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/mapper/ScTransitionInfoMapper.java @@ -7,15 +7,15 @@ import org.apache.ibatis.annotations.Param; /** * 转场Mapper接口 - * + * * @author ruoyi * @date 2025-07-10 */ -public interface ScTransitionInfoMapper +public interface ScTransitionInfoMapper { /** * 查询转场 - * + * * @param id 转场主键 * @return 转场 */ @@ -23,7 +23,7 @@ public interface ScTransitionInfoMapper /** * 查询转场列表 - * + * * @param scTransitionInfo 转场 * @return 转场集合 */ @@ -31,7 +31,7 @@ public interface ScTransitionInfoMapper /** * 新增转场 - * + * * @param scTransitionInfo 转场 * @return 结果 */ @@ -39,7 +39,7 @@ public interface ScTransitionInfoMapper /** * 修改转场 - * + * * @param scTransitionInfo 转场 * @return 结果 */ @@ -47,7 +47,7 @@ public interface ScTransitionInfoMapper /** * 删除转场 - * + * * @param id 转场主键 * @return 结果 */ @@ -55,7 +55,7 @@ public interface ScTransitionInfoMapper /** * 批量删除转场 - * + * * @param ids 需要删除的数据主键集合 * @return 结果 */ @@ -63,4 +63,5 @@ public interface ScTransitionInfoMapper //批量转场 int insertScTransitionInfoBatch(@Param("list") List transitionInfoList); + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/IScTransitionInfoService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/IScTransitionInfoService.java index b578491..c9cb5c5 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/IScTransitionInfoService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/IScTransitionInfoService.java @@ -70,4 +70,5 @@ public interface IScTransitionInfoService { //审批转场 public int approveScTransitionInfo(ScTransitionInfo scTransitionInfo); + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScAddSheepServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScAddSheepServiceImpl.java index b6ed6b4..4f3b0f2 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScAddSheepServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScAddSheepServiceImpl.java @@ -2,7 +2,11 @@ package com.zhyc.module.produce.manage_sheep.service.impl; import com.zhyc.common.exception.ServiceException; import com.zhyc.common.utils.StringUtils; +import com.zhyc.module.base.domain.BasSheepType; +import com.zhyc.module.base.domain.DaRanch; import com.zhyc.module.base.mapper.BasSheepVarietyMapper; +import com.zhyc.module.base.service.IBasSheepTypeService; +import com.zhyc.module.base.service.IDaRanchService; import com.zhyc.module.produce.manage_sheep.domain.ScAddSheep; import com.zhyc.module.produce.manage_sheep.mapper.ScAddSheepMapper; import com.zhyc.module.produce.manage_sheep.service.IScAddSheepService; @@ -32,6 +36,11 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { @Autowired private BasSheepVarietyMapper basSheepVarietyMapper; + @Autowired + private IBasSheepTypeService basSheepTypeService; + + @Autowired + private IDaRanchService daRanchService; //新增 @Override @Transactional(rollbackFor = Exception.class) @@ -47,6 +56,7 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { BasSheep bs = new BasSheep(); bs.setManageTags(scAddSheep.getEarNumber()); // bs.setElectronicTags(scAddSheep.getEarNumber()); + bs.setRanchId(scAddSheep.getRanchId().longValue()); bs.setSheepfoldId(scAddSheep.getSheepfold().longValue()); bs.setFatherId(null); bs.setMotherId(null); @@ -64,7 +74,10 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { bs.setComment(scAddSheep.getComment()); bs.setCreateBy(scAddSheep.getCreateBy()); bs.setCreateTime(new Date()); - + if (scAddSheep.getTypeId() != null) { + bs.setTypeId(scAddSheep.getTypeId().longValue()); + } + bs.setStatusId(1L); basSheepService.insertBasSheep(bs); return true; } @@ -101,7 +114,23 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { for (int i = 0; i < list.size(); i++) { ScAddSheep sheep = list.get(i); try { - // 处理品种名称转换为品种ID + if (StringUtils.isBlank(sheep.getRanchName())) { + failure++; + failureMsg.append("
第").append(i + 1).append("行:牧场名称不能为空"); + continue; + } + DaRanch ranchParam = new DaRanch(); + ranchParam.setRanch(sheep.getRanchName().trim()); + List ranchList = daRanchService.selectDaRanchList(ranchParam); + + if (ranchList == null || ranchList.isEmpty()) { + failure++; + failureMsg.append("
第").append(i + 1) + .append("行:牧场名称不存在【").append(sheep.getRanchName()).append("】"); + continue; + } + sheep.setRanchId(ranchList.get(0).getId().intValue()); + if (StringUtils.isNotBlank(sheep.getVarietyName())) { Long varietyId = basSheepVarietyMapper.selectIdByName(sheep.getVarietyName()); if (varietyId == null) { @@ -122,10 +151,10 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { continue; } - // 处理羊舍名称转换为羊舍ID if (StringUtils.isNotBlank(sheep.getSheepfoldNameExcel())) { DaSheepfold param = new DaSheepfold(); param.setSheepfoldName(sheep.getSheepfoldNameExcel()); + param.setRanchId(sheep.getRanchId().longValue()); List foldList = daSheepfoldMapper.selectDaSheepfoldList(param); if (foldList == null || foldList.isEmpty()) { failure++; @@ -139,7 +168,23 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { sheep.setSheepfold(foldList.get(0).getId().intValue()); } - // 校验耳号是否为空 + if (StringUtils.isNotBlank(sheep.getTypeName())) { + BasSheepType typeQuery = new BasSheepType(); + typeQuery.setName(sheep.getTypeName().trim()); + List typeList = basSheepTypeService.selectBasSheepTypeList(typeQuery); + + if (typeList == null || typeList.isEmpty()) { + failure++; + failureMsg.append("
第") + .append(i + 1) + .append("行:羊只类型名称不存在【") + .append(sheep.getTypeName()) + .append("】"); + continue; + } + sheep.setTypeId(typeList.get(0).getId().longValue()); + } + if (StringUtils.isBlank(sheep.getEarNumber())) { failure++; failureMsg.append("
第") @@ -148,7 +193,6 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { continue; } - // 核心校验:判断羊只基本信息表中是否存在未删除的同名耳号 BasSheep existSheep = basSheepService.selectBasSheepByManageTags(sheep.getEarNumber().trim()); if (existSheep != null) { failure++; @@ -160,7 +204,6 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { continue; } - // 执行导入(新增或更新) if (updateSupport && sheep.getId() != null) { sheep.setUpdateBy(operName); updateScAddSheep(sheep); diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScChangeCommentServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScChangeCommentServiceImpl.java index f45aa59..3f0f4dd 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScChangeCommentServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/manage_sheep/service/impl/ScChangeCommentServiceImpl.java @@ -2,7 +2,7 @@ package com.zhyc.module.produce.manage_sheep.service.impl; import java.util.Date; import java.util.List; -import com.zhyc.common.utils.DateUtils; + import com.zhyc.common.utils.SecurityUtils; import com.zhyc.module.base.domain.BasSheep; import com.zhyc.module.base.service.IBasSheepService; 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 3604f92..d68d112 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 @@ -31,6 +31,7 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { private BasSheepMapper basSheepMapper; @Autowired private IBasSheepService basSheepService; + /** * 查询转群记录 * @@ -42,6 +43,7 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { ScTransGroup group = scTransGroupMapper.selectScTransGroupById(id); group.setReasonText(convertReason(group.getReason())); group.setStatusText(convertStatus(group.getStatus())); + group.setEventTypeText(convertEventType(group.getEventType())); return group; } @@ -58,6 +60,7 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { list.forEach(group -> { group.setReasonText(convertReason(group.getReason())); group.setStatusText(convertStatus(group.getStatus())); + group.setEventTypeText(convertEventType(group.getEventType())); }); return list; } @@ -70,11 +73,21 @@ 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()); - return scTransGroupMapper.insertScTransGroup(scTransGroup); + int rows = scTransGroupMapper.insertScTransGroup(scTransGroup); + if (rows > 0) { + try { + updateSheepFold(scTransGroup); + } catch (Exception e) { + throw new RuntimeException("新增转群记录后更新羊舍失败:" + e.getMessage(), e); + } + } + return rows; +// return scTransGroupMapper.insertScTransGroup(scTransGroup); } /** @@ -130,9 +143,15 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { * 更新羊只所在羊舍 */ private void updateSheepFold(ScTransGroup transGroup) { - Long foldTo = Long.valueOf(transGroup.getFoldTo()); - if (foldTo == null) { - throw new RuntimeException("转入羊舍不能为空"); + Object foldToObj = transGroup.getFoldTo(); + if (foldToObj == null) { + throw new RuntimeException("转入羊舍ID为空,请检查前端提交的foldTo参数"); + } + Long foldTo; + try { + foldTo = Long.valueOf(foldToObj.toString()); + } catch (NumberFormatException e) { + throw new RuntimeException("转入羊舍ID格式错误,应为数字,实际值:" + foldToObj); } String manageTags = transGroup.getManageTags(); @@ -177,4 +196,18 @@ public class ScTransGroupServiceImpl implements IScTransGroupService { return statusMap.getOrDefault(statusCode, "未知状态"); } + /** + * 转换事件类型(1-围产转群,2-普通转群,3-育肥转群,4-预售转群) + */ + private String convertEventType(Integer 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, "未知"); + } } 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 cd8a96b..8e619e5 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 @@ -8,7 +8,6 @@ import com.zhyc.common.utils.StringUtils; import com.zhyc.module.base.domain.BasSheep; import com.zhyc.module.base.domain.DaRanch; import com.zhyc.module.base.mapper.BasSheepMapper; -import com.zhyc.module.base.mapper.DaRanchMapper; import com.zhyc.module.base.service.IBasSheepService; import com.zhyc.module.base.service.IDaRanchService; import com.zhyc.module.produce.manage_sheep.mapper.ScTransitionInfoMapper; @@ -128,8 +127,16 @@ public class ScTransitionInfoServiceImpl implements IScTransitionInfoService @Override @Transactional(rollbackFor = Exception.class) public int approveScTransitionInfo(ScTransitionInfo scTransitionInfo) { + // 1. 查询当前记录的原始状态 + ScTransitionInfo existing = scTransitionInfoMapper.selectScTransitionInfoById(scTransitionInfo.getId()); + if (existing == null) { + throw new RuntimeException("转场记录不存在"); + } + // 2. 校验状态:仅允许审批“待审批”的记录 + if (existing.getStatus() != 0) { + throw new RuntimeException("该记录已完成审批,无法重复操作"); + } int rows = scTransitionInfoMapper.updateScTransitionInfo(scTransitionInfo); - if (rows > 0 && scTransitionInfo.getStatus() == 1) { updateSheepRanch(scTransitionInfo); } @@ -158,6 +165,12 @@ public class ScTransitionInfoServiceImpl implements IScTransitionInfoService } Long targetRanchId = matchedRanch.get().getId(); + //获取接收羊舍 + Long targetSheepfoldId = transitionInfo.getSheepfoldId(); + if ("转场转入".equals(transitionInfo.getEventType()) && targetSheepfoldId == null) { + throw new RuntimeException("转场转入时,接收羊舍不能为空"); + } + String manageTags = transitionInfo.getManageTags(); if (StringUtils.isBlank(manageTags)) { throw new RuntimeException("耳号不能为空"); @@ -173,6 +186,9 @@ public class ScTransitionInfoServiceImpl implements IScTransitionInfoService BasSheep updateSheep = new BasSheep(); updateSheep.setId(sheep.getId()); updateSheep.setRanchId(targetRanchId); + if ("转场转入".equals(transitionInfo.getEventType())) { + updateSheep.setSheepfoldId(targetSheepfoldId); + } basSheepMapper.updateBasSheep(updateSheep); } } 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 1ebab6d..aae148e 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 @@ -3,8 +3,6 @@ package com.zhyc.module.produce.other.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -33,6 +31,12 @@ public class ScCastrate extends BaseEntity { @Excel(name = "耳号") private String manageTags; + /** + * 事件类型 + */ + @Excel(name = "事件类型") + private String eventType; + /** * 羊舍id */ 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 60a92a8..88833e5 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 @@ -3,8 +3,6 @@ package com.zhyc.module.produce.other.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.zhyc.common.annotation.Excel; import com.zhyc.common.core.domain.BaseEntity; @@ -26,10 +24,15 @@ public class ScFixHoof extends BaseEntity /** 羊只id */ private Integer sheepId; - /** 管理耳号(仅用于接收参数/返回视图) */ @Excel(name = "管理耳号") private String manageTags; + /** + * 事件类型 + */ + @Excel(name = "事件类型") + private String eventType; + /** 羊舍id */ private Integer sheepfold; diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/other/service/impl/ScFixHoofServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/other/service/impl/ScFixHoofServiceImpl.java index fde7034..298d6c5 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/produce/other/service/impl/ScFixHoofServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/other/service/impl/ScFixHoofServiceImpl.java @@ -14,7 +14,6 @@ import com.zhyc.module.produce.other.mapper.ScFixHoofMapper; import com.zhyc.module.produce.other.service.IScFixHoofService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; /** * 修蹄Service业务层处理 diff --git a/zhyc-module/src/main/resources/mapper/base/BasSheepGroupMappingMapper.xml b/zhyc-module/src/main/resources/mapper/base/BasSheepGroupMappingMapper.xml index 6fe31d8..36bb106 100644 --- a/zhyc-module/src/main/resources/mapper/base/BasSheepGroupMappingMapper.xml +++ b/zhyc-module/src/main/resources/mapper/base/BasSheepGroupMappingMapper.xml @@ -30,6 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" m.id, m.sheep_id, m.group_id, + bsg.group_name, s.id AS bs_sheep_id, s.bs_manage_tags, s.variety, @@ -47,6 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" s.family FROM bas_sheep_group_mapping m JOIN sheep_file s ON s.id = m.sheep_id + JOIN bas_sheep_group bsg ON m.group_id = bsg.group_id AND m.sheep_id = #{sheepId} AND m.group_id = #{groupId} @@ -125,4 +127,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" FROM bas_sheep_group_mapping WHERE group_id = #{groupId} + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/base/BasSheepMapper.xml b/zhyc-module/src/main/resources/mapper/base/BasSheepMapper.xml index f42546a..a035e60 100644 --- a/zhyc-module/src/main/resources/mapper/base/BasSheepMapper.xml +++ b/zhyc-module/src/main/resources/mapper/base/BasSheepMapper.xml @@ -328,7 +328,7 @@ SELECT COUNT(*) FROM bas_sheep WHERE manage_tags = #{tag} - AND s.is_delete = 0 + AND is_delete = 0 @@ -33,6 +34,10 @@ and ranch_id = #{ranchId} and sheepfold_type_id = #{sheepfoldTypeId} + + order by + SUBSTRING_INDEX(row_no, '-', 1), + CAST(columns AS UNSIGNED) - - - and sheepfold_id = #{sheepfoldId} - and datetime = #{datetime} - and technician = #{technician} - and way = #{way} - and usage_id = #{usageId} - and ratio = #{ratio} - and comment = #{comment} - + SELECT sd.id, + sd.sheepfold_id, + sd.datetime, + sd.technician, + sd.way, + sd.usage_id, + sd.ratio, + sd.comment, + sd.update_by, + sd.update_time, + sd.create_by, + sd.create_time, + ds.sheepfold_name + FROM sw_disinfect sd + LEFT JOIN da_sheepfold ds ON ds.id = sd.sheepfold_id + WHERE 1 = 1 + AND sd.sheepfold_id = #{sheepfoldId} + AND sd.datetime = #{datetime} + AND sd.technician = #{technician} + AND sd.way = #{way} + AND sd.usage_id = #{usageId} + AND sd.ratio = #{ratio} + AND sd.comment = #{comment} + + + AND EXISTS ( + SELECT 1 + FROM sw_medicine_usage_details mud + JOIN sw_medicine sm ON sm.id = mud.medi_id + WHERE mud.medi_usage = sd.usage_id + AND sm.name like concat('%',#{mediName},'%') + ) + + ORDER BY datetime DESC + @@ -67,6 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join sw_quarantine_sample sqs on sqr.sample_type = sqs.id left join sheep_file sf on sqr.sheep_id = sf.id where sqr.id = #{id} + ORDER BY datetime DESC diff --git a/zhyc-module/src/main/resources/mapper/biosafety/SwMedicineUsageMapper.xml b/zhyc-module/src/main/resources/mapper/biosafety/SwMedicineUsageMapper.xml index f86bdef..f478719 100644 --- a/zhyc-module/src/main/resources/mapper/biosafety/SwMedicineUsageMapper.xml +++ b/zhyc-module/src/main/resources/mapper/biosafety/SwMedicineUsageMapper.xml @@ -7,6 +7,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + @@ -26,12 +31,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select id, name, use_type, update_by, update_time, create_by, create_time from sw_medicine_usage + select smu.id, sheepfold as sheepfold_id,sheep sheep_id,name, datetime,use_type, smu.update_by, smu.update_time, smu.create_by, smu.create_time, + ds.sheepfold_name, + bs.manage_tags sheep_no + from sw_medicine_usage smu + left join da_sheepfold ds on ds.id = smu.sheepfold + left join bas_sheep bs on bs.id = smu.sheep @@ -62,6 +77,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" name, use_type, + sheepfold, + sheep, + datetime, update_by, update_time, create_by, @@ -70,6 +88,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{name}, #{useType}, + #{sheepfoldId}, + #{sheepId}, + #{datetime}, #{updateBy}, #{updateTime}, #{createBy}, @@ -113,9 +134,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - insert into sw_medicine_usage_details( id, medi_usage, medi_id, dosage, unit, usageId, manufacturer, batch_number) values + insert into sw_medicine_usage_details( id, medi_usage, medi_id, dosage, unit, usageId,usetime, manufacturer, batch_number) values - ( #{item.id}, #{item.mediUsage}, #{item.mediId}, #{item.dosage}, #{item.unit}, #{item.usageId}, #{item.manufacturer}, #{item.batchNumber}) + ( #{item.id}, #{item.mediUsage}, #{item.mediId}, #{item.dosage}, #{item.unit}, #{item.usageId}, #{item.usetime},#{item.manufacturer}, #{item.batchNumber}) \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/biosafety/TreatmentMapper.xml b/zhyc-module/src/main/resources/mapper/biosafety/TreatmentMapper.xml index ee496ad..5e07a30 100644 --- a/zhyc-module/src/main/resources/mapper/biosafety/TreatmentMapper.xml +++ b/zhyc-module/src/main/resources/mapper/biosafety/TreatmentMapper.xml @@ -24,6 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -32,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select t.id, diag_id, sheep_id, variety, sheep_type, month_age, t.gender, t.parity, breed, lact_day, gest_day, datetime, disease_id, disease_pid, veterinary, usage_id, t.comment, t.update_by, t.update_time, t.create_by, t.create_time, + select t.id, diag_id, sheep_id, variety, sheep_type, month_age, t.gender, t.parity, breed, lact_day, gest_day, datetime, disease_id, disease_pid, veterinary, usage_id,status, t.comment, t.update_by, t.update_time, t.create_by, t.create_time, bs.manage_tags, sd.name disease_name, sd2.name disease_pname @@ -48,14 +49,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and sheep_id = #{sheepId} and datetime between #{params.beginDatetime} and #{params.endDatetime} and disease_id = #{diseaseId} + and status = #{status} and veterinary = #{veterinary} + ORDER BY datetime DESC + insert into sw_treatment @@ -75,6 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" disease_pid, veterinary, usage_id, + status, comment, update_by, update_time, @@ -97,6 +104,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{diseasePid}, #{veterinary}, #{usageId}, + #{status}, #{comment}, #{updateBy}, #{updateTime}, @@ -109,14 +117,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into sw_treatment (diag_id, sheep_id, variety, sheep_type, month_age, gender, parity, breed, lact_day, gest_day, datetime, - disease_id, disease_pid, veterinary, usage_id, + disease_id, disease_pid, veterinary, usage_id,status , comment, update_by, update_time, create_by, create_time) values (#{t.diagId}, #{t.sheepId}, #{t.variety}, #{t.sheepType}, #{t.monthAge}, #{t.gender}, #{t.parity}, #{t.breed}, #{t.lactDay}, #{t.gestDay}, #{t.datetime}, #{t.diseaseId}, - #{t.diseasePid}, #{t.veterinary},#{t.usageId}, #{t.comment}, + #{t.diseasePid}, #{t.veterinary},#{t.usageId}, #{t.status}, #{t.comment}, #{t.updateBy}, #{t.updateTime},#{t.createBy}, #{t.createTime}) @@ -139,6 +147,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" disease_pid = #{diseasePid}, veterinary = #{veterinary}, usage_id = #{usageId}, + status = #{status}, comment = #{comment}, update_by = #{updateBy}, update_time = #{updateTime}, diff --git a/zhyc-module/src/main/resources/mapper/common/UserPostMapper.xml b/zhyc-module/src/main/resources/mapper/common/UserPostMapper.xml new file mode 100644 index 0000000..cec16d8 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/common/UserPostMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFeedDetailsMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFeedDetailsMapper.xml deleted file mode 100644 index 0966729..0000000 --- a/zhyc-module/src/main/resources/mapper/feed/SgFeedDetailsMapper.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - select id, fodder, number, nuit from sg_feed_details - - - - - - - - insert into sg_feed_details - - fodder, - number, - nuit, - - - #{fodder}, - #{number}, - #{nuit}, - - - - - update sg_feed_details - - fodder = #{fodder}, - number = #{number}, - nuit = #{nuit}, - - where id = #{id} - - - - delete from sg_feed_details where id = #{id} - - - - delete from sg_feed_details where id in - - #{id} - - - \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFeedInfoMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFeedInfoMapper.xml deleted file mode 100644 index 536e136..0000000 --- a/zhyc-module/src/main/resources/mapper/feed/SgFeedInfoMapper.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - select id, formula_id, sheepfold_id, average, plan_monring, actual_monring, plan_noon, actual_noon, plan_evenig, actual_evening, particle, other, replenish, plan_date, comment, create_by, create_time from sg_feed_info - - - - - - - - insert into sg_feed_info - - formula_id, - sheepfold_id, - average, - plan_monring, - actual_monring, - plan_noon, - actual_noon, - plan_evenig, - actual_evening, - particle, - other, - replenish, - plan_date, - comment, - create_by, - create_time, - - - #{formulaId}, - #{sheepfoldId}, - #{average}, - #{planMonring}, - #{actualMonring}, - #{planNoon}, - #{actualNoon}, - #{planEvenig}, - #{actualEvening}, - #{particle}, - #{other}, - #{replenish}, - #{planDate}, - #{comment}, - #{createBy}, - #{createTime}, - - - - - update sg_feed_info - - formula_id = #{formulaId}, - sheepfold_id = #{sheepfoldId}, - average = #{average}, - plan_monring = #{planMonring}, - actual_monring = #{actualMonring}, - plan_noon = #{planNoon}, - actual_noon = #{actualNoon}, - plan_evenig = #{planEvenig}, - actual_evening = #{actualEvening}, - particle = #{particle}, - other = #{other}, - replenish = #{replenish}, - plan_date = #{planDate}, - comment = #{comment}, - create_by = #{createBy}, - create_time = #{createTime}, - - where id = #{id} - - - - delete from sg_feed_info where id = #{id} - - - - delete from sg_feed_info where id in - - #{id} - - - \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFeedListMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFeedListMapper.xml new file mode 100644 index 0000000..0c10e17 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/feed/SgFeedListMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + select id, formula_id, formula_batch_id, zookeeper, deploy_date from sg_feed_list + + + + + + + + insert into sg_feed_list + + formula_id, + formula_batch_id, + zookeeper, + deploy_date, + + + #{formulaId}, + #{formulaBatchId}, + #{zookeeper}, + #{deployDate}, + + + + + update sg_feed_list + + formula_id = #{formulaId}, + formula_batch_id = #{formulaBatchId}, + zookeeper = #{zookeeper}, + deploy_date = #{deployDate}, + + where id = #{id} + + + + delete from sg_feed_list where id = #{id} + + + + delete from sg_feed_list where id in + + #{id} + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFeedPlanMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFeedPlanMapper.xml index fe2b6e3..b67f3df 100644 --- a/zhyc-module/src/main/resources/mapper/feed/SgFeedPlanMapper.xml +++ b/zhyc-module/src/main/resources/mapper/feed/SgFeedPlanMapper.xml @@ -7,21 +7,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + - - - @@ -29,7 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select create_date, formula_id, sheep_house_id, sheep_count, plan_daily_size, plan_morning_size, plan_morning_total, ratio_morning, actual_morning_size, plan_noon_size, plan_noon_total, actual_noon_size, ratio_noon, plan_afternoon_size, plan_afternoon_total, actual_afternoon_size, ratio_afternoon, plan_feed_total, zookeeper, plan_date, remark from sg_feed_plan + select create_date, formula_id, batch_id, sheep_house_id, sheep_count, plan_daily_size, ratio_morning, ratio_noon, ratio_afternoon, plan_morning_size, plan_morning_total, actual_morning_size, plan_noon_size, plan_noon_total, actual_noon_size, plan_afternoon_size, plan_afternoon_total, actual_afternoon_size, plan_feed_total, zookeeper, plan_date, remark from sg_feed_plan + SELECT COUNT(*) + FROM bas_sheep + WHERE sheepfold_id = #{foldId} + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFeedRatioMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFeedRatioMapper.xml deleted file mode 100644 index 2ebb1fd..0000000 --- a/zhyc-module/src/main/resources/mapper/feed/SgFeedRatioMapper.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - select id, morning, noon, evening from sg_feed_ratio - - - - - - - - insert into sg_feed_ratio - - morning, - noon, - evening, - - - #{morning}, - #{noon}, - #{evening}, - - - - - update sg_feed_ratio - - morning = #{morning}, - noon = #{noon}, - evening = #{evening}, - - where id = #{id} - - - - delete from sg_feed_ratio where id = #{id} - - - - delete from sg_feed_ratio where id in - - #{id} - - - \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFeedStatisticMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFeedStatisticMapper.xml new file mode 100644 index 0000000..0bd9657 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/feed/SgFeedStatisticMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, formula_id, formula_batch_id, sheep_fold_count, silage_loss_rate, feed_total_size, feed_daily_size, material_list, sheep_fold_list,feed_date from sg_feed_statistic + + + + + + + + insert into sg_feed_statistic + + id, + formula_id, + formula_batch_id, + sheep_fold_count, + silage_loss_rate, + feed_total_size, + feed_daily_size, + material_list, + sheep_fold_list, + feed_date, + + + #{id}, + #{formulaId}, + #{formulaBatchId}, + #{sheepFoldCount}, + #{silageLossRate}, + #{feedTotalSize}, + #{feedDailySize}, +# 写入操作需要手动指定 TypeHandler 参数 + #{materialList, typeHandler=com.zhyc.module.feed.mapper.TypeHandler.SgFormulaListHandler}, + #{sheepFoldList, typeHandler=com.zhyc.module.feed.mapper.TypeHandler.DaSheepfoldHandler}, + #{feedDate}, + + + + + update sg_feed_statistic + + formula_id = #{formulaId}, + formula_batch_id = #{formulaBatchId}, + sheep_fold_count = #{sheepFoldCount}, + silage_loss_rate = #{silageLossRate}, + feed_total_size = #{feedTotalSize}, + feed_daily_size = #{feedDailySize}, + material_list = #{materialList, typeHandler=com.zhyc.module.feed.mapper.TypeHandler.SgFormulaListHandler}, + sheep_fold_list = #{sheepFoldList, typeHandler=com.zhyc.module.feed.mapper.TypeHandler.DaSheepfoldHandler}, + feed_date = #{feedDate}, + + where id = #{id} + + + + delete from sg_feed_statistic where id = #{id} + + + + delete from sg_feed_statistic where id in + + #{id} + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFodderMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFodderMapper.xml deleted file mode 100644 index 8f4638b..0000000 --- a/zhyc-module/src/main/resources/mapper/feed/SgFodderMapper.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - select id, name, fodder_type from sg_fodder - - - - - - - - insert into sg_fodder - - name, - fodder_type, - - - #{name}, - #{fodderType}, - - - - - update sg_fodder - - name = #{name}, - fodder_type = #{fodderType}, - - where id = #{id} - - - - delete from sg_fodder where id = #{id} - - - - delete from sg_fodder where id in - - #{id} - - - \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/miscarriage/ScMiscarriageRecordMapper.xml b/zhyc-module/src/main/resources/mapper/miscarriage/ScMiscarriageRecordMapper.xml new file mode 100644 index 0000000..810f299 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/miscarriage/ScMiscarriageRecordMapper.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select + smr.id, + smr.sheep_id, + smr.datetime, + smr.comment, + smr.technician, + smr.reason, + smr.expose_type, + smr.status, + smr.misca_lamb, + smr.create_by, + smr.create_time, + sf.bs_manage_tags, + sf.variety, + sf.mating_type_id, + CASE sf.mating_type_id + WHEN 1 THEN '人工授精' + WHEN 2 THEN '自然配种' + WHEN 3 THEN '胚胎移植' + ELSE '未知' + END as mating_type_name, + sf.mating_date, + sf.parity, + sf.variety as ram_variety, -- 这里需要根据实际配种公羊信息调整 + sf.month_age, + CASE + WHEN sf.mating_date IS NOT NULL AND smr.datetime IS NOT NULL + THEN DATEDIFF(smr.datetime, sf.mating_date) + ELSE NULL + END as pregnant_days, + sf.sheepfold_name, + sf.dr_ranch + from sc_miscarriage_record smr + left join sheep_file sf on smr.sheep_id = sf.bs_manage_tags + + + + + + + + insert into sc_miscarriage_record + + sheep_id, + datetime, + comment, + technician, + reason, + expose_type, + status, + misca_lamb, + create_by, + create_time, + + + #{sheepId}, + #{datetime}, + #{comment}, + #{technician}, + #{reason}, + #{exposeType}, + #{status}, + #{miscaLamb}, + #{createBy}, + #{createTime}, + + + + + update sc_miscarriage_record + + sheep_id = #{sheepId}, + datetime = #{datetime}, + comment = #{comment}, + technician = #{technician}, + reason = #{reason}, + expose_type = #{exposeType}, + status = #{status}, + misca_lamb = #{miscaLamb}, + create_by = #{createBy}, + create_time = #{createTime}, + + where id = #{id} + + + + delete from sc_miscarriage_record where id = #{id} + + + + delete from sc_miscarriage_record where id in + + #{id} + + + + + + + \ No newline at end of file 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 e5a2d5e..7e75d9c 100644 --- a/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyMeasureMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBodyMeasureMapper.xml @@ -8,6 +8,18 @@ + + + + + + + + + + + + @@ -18,6 +30,10 @@ + + + + @@ -28,6 +44,18 @@ select sm.id, sm.sheep_id, bs.manage_tags, + ds.id as sheepfold_id, + ds.sheepfold_name, + bsv.id as variety_id, + bsv.variety as variety_name, + '体尺测量' as event_type, + bst.name as sheep_type_name, + sm.measure_date, + bs.gender, + bs.parity, + bs.birth_weight as birth_weight, + bs.weaning_weight as weaning_weight, + bs.current_weight as current_weight, sm.height, sm.bust, sm.body_length, @@ -38,25 +66,43 @@ sm.rump_heignt, sm.hip_width, sm.hip_cross_height, + bbs.breed as breed_status_name, + bs.lactation_day as lactation_day, + bs.gestation_day as gestation_day, + case when bs.mating_date is not null + then DATEDIFF(NOW(), bs.mating_date) + else null + end as post_mating_day, sm.comment, sm.technician, sm.create_by, sm.create_time from sc_body_measure sm - left join bas_sheep bs on sm.sheep_id = bs.id + LEFT JOIN bas_sheep bs ON sm.sheep_id = bs.id + LEFT JOIN bas_breed_status bbs ON bs.breed_status_id = bbs.id + LEFT JOIN da_sheepfold ds ON bs.sheepfold_id = ds.id + LEFT JOIN bas_sheep_type bst ON bs.type_id = bst.id + LEFT JOIN bas_sheep_variety bsv ON bs.variety_id = bsv.id and sbs.sheep_id = #{sheepId} + and bsv.id = #{varietyId} + and bs.sheepfold_id = #{sheepfold} and sbs.datetime between #{params.beginDatetime} and #{params.endDatetime} and score = #{score} - and sheepfold = #{sheepfold} and sbs.create_time between #{params.beginCreateTime} and #{params.endCreateTime} @@ -50,6 +58,7 @@ and bs.manage_tags like concat('%', #{manageTags}, '%') + ORDER BY sbs.create_time DESC @@ -33,10 +47,16 @@ and bs.manage_tags like concat('%', #{manageTags}, '%') + and bsv.id = #{varietyId} + and sf.id = #{sheepfoldId} + + and sbr.event_date between #{params.beginEventDate} and #{params.endEventDate} + and sbr.create_time between #{params.beginCreateTime} and #{params.endCreateTime} + ORDER BY sbr.create_time DESC @@ -48,63 +54,72 @@ @@ -176,25 +191,110 @@ where plan_generate_id = #{planGenerateId} - + + + + + + + update sc_breed_plan_temp + + + ram_id = #{ramId}, + + + ram_id = null, + + + breed_type = #{breedType}, + + + breed_type = null, + + + where id = #{id} + + delete from sc_breed_plan_generate where id = #{id} @@ -205,4 +305,9 @@ #{id} + + + + delete from sc_breed_plan_temp where plan_generate_id = #{planGenerateId} + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/Breeding_records/ScBreedRecordMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedRecordMapper.xml similarity index 65% rename from zhyc-module/src/main/resources/mapper/Breeding_records/ScBreedRecordMapper.xml rename to zhyc-module/src/main/resources/mapper/produce/breed/ScBreedRecordMapper.xml index 4128a7a..c03c285 100644 --- a/zhyc-module/src/main/resources/mapper/Breeding_records/ScBreedRecordMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScBreedRecordMapper.xml @@ -11,9 +11,10 @@ + - + @@ -29,6 +30,16 @@ + + + + + + + + + + @@ -39,6 +50,7 @@ br.ewe_id, br.technician, br.breed_drugs, + br.breed_type, br.create_by, br.create_time, -- 母羊信息(从视图获取) @@ -56,13 +68,45 @@ -- 公羊信息(从视图获取) ram_view.bs_manage_tags as ram_manage_tags, ram_view.variety as ram_variety, - -- 配种方式(如果视图中没有,设为空或从其他地方获取) - '' as mating_type, + -- 配种方式显示 + CASE br.breed_type + WHEN 1 THEN '同期发情' + WHEN 2 THEN '本交' + ELSE '未知' + END as mating_type, -- 发情后配种时间(小时数) - TIMESTAMPDIFF(HOUR, br.create_time, NOW()) as time_since_planning + TIMESTAMPDIFF(HOUR, br.create_time, NOW()) as time_since_planning, + -- 孕检相关信息 + pr.datetime as pregnancy_check_date, + pr.result as pregnancy_result, + pr.way as pregnancy_way, + pr.fetus_count, + pr.technician as pregnancy_technician, + pr.remark as pregnancy_remark, + pr.id as pregnancy_record_id, + -- 配种到孕检间隔天数 + CASE + WHEN pr.datetime IS NOT NULL THEN DATEDIFF(pr.datetime, br.create_time) + ELSE NULL + END as days_to_pregnancy_check, + -- 是否已孕检 + CASE + WHEN pr.id IS NOT NULL THEN 1 + ELSE 0 + END as is_pregnancy_checked from sc_breed_record br left join sheep_file ewe_view on br.ewe_id = ewe_view.id left join sheep_file ram_view on br.ram_id = ram_view.id + left join sc_pregnancy_record pr on pr.sheep_id = br.ewe_id + and pr.is_delete = 0 + and pr.datetime >= br.create_time + and pr.datetime = ( + select min(pr2.datetime) + from sc_pregnancy_record pr2 + where pr2.sheep_id = br.ewe_id + and pr2.is_delete = 0 + and pr2.datetime >= br.create_time + ) @@ -170,19 +221,43 @@ ewe_view.bs_manage_tags as ewe_manage_tags, bp.ram_id, ram_view.bs_manage_tags as ram_manage_tags, - bp.plan_date, bp.breed_type, - bp.technician, - bp.status, - bp.create_time as plan_create_time, - TIMESTAMPDIFF(HOUR, bp.create_time, NOW()) as hours_since_plan + CASE bp.breed_type + WHEN 1 THEN '同期发情' + WHEN 2 THEN '本交' + ELSE '未知' + END as breed_type_name, + TIMESTAMPDIFF(HOUR, NOW(), NOW()) as hours_since_plan from sc_breed_plan bp left join sheep_file ewe_view on bp.ewe_id = ewe_view.id left join sheep_file ram_view on bp.ram_id = ram_view.id where ewe_view.bs_manage_tags = #{manageTags} - and bp.status = '待配种' - and bp.is_delete = 0 - order by bp.create_time desc + order by bp.id desc + limit 1 + + + + @@ -194,6 +269,7 @@ ewe_id, technician, breed_drugs, + breed_type, create_by, create_time, @@ -203,6 +279,7 @@ #{eweId}, #{technician}, #{breedDrugs}, + #{breedType}, #{createBy}, #{createTime}, @@ -216,6 +293,7 @@ ewe_id = #{eweId}, technician = #{technician}, breed_drugs = #{breedDrugs}, + breed_type = #{breedType}, create_by = #{createBy}, create_time = #{createTime}, @@ -232,4 +310,26 @@ #{id} + + + + + + + update sc_breed_record + set pregnancy_record_id = #{pregnancyRecordId} + where id = #{breedRecordId} + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/produce/breed/ScLambingRecordMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/ScLambingRecordMapper.xml index 937834b..7ed7e3b 100644 --- a/zhyc-module/src/main/resources/mapper/produce/breed/ScLambingRecordMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScLambingRecordMapper.xml @@ -15,6 +15,7 @@ + @@ -66,42 +67,47 @@ lr.id, lr.sheep_id, lr.parity, lr.lambs_born, lr.survival, lr.technician, lr.score, lr.comment, lr.create_by, lr.create_tme, - -- 从bas_sheep表获取母羊信息 - mother.manage_tags as female_ear_number, - mother.variety_id as female_breed, - TIMESTAMPDIFF(MONTH, mother.birthday, NOW()) as month_age, - mother.sheepfold_id as current_shed, - mother.ranch_id as farm, + -- 从sheep_file视图获取母羊信息 + mother.bs_manage_tags as female_ear_number, + mother.variety as female_breed, + mother.month_age as month_age, + mother.sheepfold_name as current_shed, + mother.dr_ranch as farm, -- 从sc_breed_record表获取配种信息 br.create_time as breeding_date, - DATEDIFF(lr.create_tme, br.create_time) as pregnancy_days, + DATEDIFF(CURDATE(), br.create_time) as pregnancy_days, - -- 从bas_sheep表获取公羊信息 - father.manage_tags as male_ear_number, - father.variety_id as male_breed, + -- 从sheep_file视图获取公羊信息 + father.bs_manage_tags as male_ear_number, + father.variety as male_breed, - -- 统计羔羊信息(从bas_sheep表统计,根据母羊ID) - (SELECT COUNT(*) FROM bas_sheep lamb WHERE lamb.mother_id = lr.sheep_id AND lamb.gender = 1 AND lamb.is_delete = 0) as male_count, - (SELECT COUNT(*) FROM bas_sheep lamb WHERE lamb.mother_id = lr.sheep_id AND lamb.gender = 0 AND lamb.is_delete = 0) as female_count, - (SELECT COUNT(*) FROM bas_sheep lamb WHERE lamb.mother_id = lr.sheep_id AND lamb.gender = 1 AND lamb.status_id = 1 AND lamb.is_delete = 0) as retained_male_count, - (SELECT COUNT(*) FROM bas_sheep lamb WHERE lamb.mother_id = lr.sheep_id AND lamb.gender = 0 AND lamb.status_id = 1 AND lamb.is_delete = 0) as retained_female_count, - (SELECT COUNT(*) FROM bas_sheep lamb WHERE lamb.mother_id = lr.sheep_id AND lamb.gender = 1 AND lamb.status_id != 1 AND lamb.is_delete = 0) as unretained_male_count, - (SELECT COUNT(*) FROM bas_sheep lamb WHERE lamb.mother_id = lr.sheep_id AND lamb.gender = 0 AND lamb.status_id != 1 AND lamb.is_delete = 0) as unretained_female_count + -- 统计羔羊信息(从sc_lamb_detail表统计) + (SELECT COUNT(*) FROM sc_lamb_detail sld WHERE sld.lambing_record_id = lr.id AND sld.gender = 1) as male_count, + (SELECT COUNT(*) FROM sc_lamb_detail sld WHERE sld.lambing_record_id = lr.id AND sld.gender = 0) as female_count, + (SELECT COUNT(*) FROM sc_lamb_detail sld WHERE sld.lambing_record_id = lr.id AND sld.gender = 1 AND sld.is_retained = 1) as retained_male_count, + (SELECT COUNT(*) FROM sc_lamb_detail sld WHERE sld.lambing_record_id = lr.id AND sld.gender = 0 AND sld.is_retained = 1) as retained_female_count, + (SELECT COUNT(*) FROM sc_lamb_detail sld WHERE sld.lambing_record_id = lr.id AND sld.gender = 1 AND sld.is_retained = 0) as unretained_male_count, + (SELECT COUNT(*) FROM sc_lamb_detail sld WHERE sld.lambing_record_id = lr.id AND sld.gender = 0 AND sld.is_retained = 0) as unretained_female_count FROM sc_lambing_record lr - LEFT JOIN bas_sheep mother ON lr.sheep_id = mother.id - LEFT JOIN sc_breed_record br ON lr.sheep_id = br.ewe_id AND lr.parity = mother.parity - LEFT JOIN bas_sheep father ON br.ram_id = father.id + LEFT JOIN sheep_file mother ON lr.sheep_id = mother.id + LEFT JOIN sc_breed_record br ON lr.sheep_id = br.ewe_id AND br.create_time = ( + SELECT MAX(br2.create_time) + FROM sc_breed_record br2 + WHERE br2.ewe_id = lr.sheep_id + AND br2.create_time <= lr.create_tme + ) + LEFT JOIN sheep_file father ON br.ram_id = father.id - - SELECT - id, - lambing_record_id as lambingRecordId, - lamb_ear_number as lambEarNumber, - lamb_breed as lambBreed, - gender, - birth_weight as birthWeight, - is_retained as isRetained, - lineage, - birthday, - create_by as createBy, - create_time as createTime - FROM sc_lamb_detail - WHERE lambing_record_id = #{lambingRecordId} - ORDER BY create_time ASC + sf.id as sheep_id, + sf.bs_manage_tags as female_ear_number, + sf.variety as female_breed, + sf.parity as parity, + br.ram_id as ram_id, + ram.bs_manage_tags as male_ear_number, + ram.variety as male_breed, + br.create_time as breeding_date, + DATEDIFF(CURDATE(), br.create_time) as pregnancy_days, + br.technician as technician + FROM sheep_file sf + LEFT JOIN sc_breed_record br ON sf.id = br.ewe_id + LEFT JOIN sheep_file ram ON br.ram_id = ram.id + WHERE sf.bs_manage_tags = #{earNumber} + AND sf.is_delete = 0 + AND br.create_time = ( + SELECT MAX(br2.create_time) + FROM sc_breed_record br2 + WHERE br2.ewe_id = sf.id + ) @@ -191,8 +203,8 @@ technician = #{technician}, score = #{score}, comment = #{comment}, - create_by = #{createBy}, - create_tme = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, where id = #{id} 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 3017f1a..c6a34a3 100644 --- a/zhyc-module/src/main/resources/mapper/produce/breed/ScPregnancyRecordMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScPregnancyRecordMapper.xml @@ -16,8 +16,6 @@ - - @@ -32,6 +30,7 @@ + @@ -46,8 +45,6 @@ pr.remark, pr.create_by, pr.create_time, - pr.create_by, - pr.create_time, sf.bs_manage_tags as manage_tags, sf.variety, sf.month_age, @@ -55,18 +52,37 @@ sf.mating_counts, sf.sheepfold_name, sf.breed, - sf.father_manage_tags, - father_sf.variety as father_variety, - mating_type.dict_label as mating_type_name, - sf.mating_date, sf.expected_date, sf.lambing_date as last_event_date, - r.ranch as ranch + sf.dr_ranch as ranch, + -- 关联配种信息 + 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 from sc_pregnancy_record pr left join sheep_file sf on pr.sheep_id = sf.id - 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' - left join da_ranch r on sf.ranch_id = r.id - left join sheep_file father_sf on sf.bs_father_id = father_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 + and mating_type.dict_type = 'breed_type' and mating_type.status = '0' + + + insert into sc_pregnancy_record @@ -153,8 +191,6 @@ technician = #{technician}, way = #{way}, remark = #{remark}, - create_by = #{updateBy}, - create_time = #{updateTime}, where id = #{id} @@ -178,7 +214,6 @@ breed_status_id = #{breedStatusId}, expected_date = #{expectedDate}, gestation_day = #{gestationDay}, - create_time = now() where id = #{sheepId} diff --git a/zhyc-module/src/main/resources/mapper/sheep_death/ScSheepDeathMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/ScSheepDeathMapper.xml similarity index 89% rename from zhyc-module/src/main/resources/mapper/sheep_death/ScSheepDeathMapper.xml rename to zhyc-module/src/main/resources/mapper/produce/breed/ScSheepDeathMapper.xml index baedeeb..1444e04 100644 --- a/zhyc-module/src/main/resources/mapper/sheep_death/ScSheepDeathMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScSheepDeathMapper.xml @@ -44,6 +44,7 @@ and comment = #{comment} and is_delete = #{isDelete} + order by create_time desc - select id as sheepId, variety, name as sheepType, gender, day_age as dayAge, parity, sheepfold_name as sheepfoldName, breed as breedStatus, post_lambing_day as postLambingDay, lactation_day as lactationDay, gestation_day as gestationDay + select + id as sheepId, + variety, + name as sheepType, + gender, + day_age as dayAge, + parity, + sheepfold_name as sheepfoldName, + breed as breedStatus, + post_lambing_day as postLambingDay, + lactation_day as lactationDay, + gestation_day as gestationDay from sheep_file where bs_manage_tags = #{manageTags} and is_delete = 0 + limit 1 @@ -131,4 +144,23 @@ #{id} + + + + UPDATE sheep_file + SET breed = #{status}, + update_time = NOW() + WHERE id = #{sheepId} + AND is_delete = 0 + + + + + UPDATE sheep_file + SET status = #{status}, + update_time = NOW() + WHERE id = #{sheepId} + AND is_delete = 0 + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScAddSheepMapper.xml b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScAddSheepMapper.xml index a679f11..6c0b7b9 100644 --- a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScAddSheepMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScAddSheepMapper.xml @@ -18,6 +18,8 @@ + + @@ -29,10 +31,12 @@ SELECT sas.*, sf.sheepfold_name AS sheepfoldName, - bv.variety AS varietyName + bv.variety AS varietyName, + st.type_name AS typeName FROM sc_add_sheep sas LEFT JOIN da_sheepfold sf ON sas.sheepfold = sf.id LEFT JOIN bas_sheep_variety bv ON sas.variety_id = bv.id + LEFT JOIN bas_sheep_type st ON sas.type_id = st.id AND sas.ear_number LIKE CONCAT('%', #{earNumber}, '%') @@ -43,6 +47,9 @@ AND sas.variety_id = #{varietyId} + + AND sas.type_id = #{typeId} + @@ -54,18 +61,19 @@ INSERT INTO sc_add_sheep - (ear_number, sheepfold, father, mother, born_weight, birthday, - gender, parity, variety_id, join_date, comment, technician, - create_by, create_time) - VALUES (#{earNumber}, #{sheepfold}, #{father}, #{mother}, #{bornWeight}, - #{birthday}, #{gender}, #{parity}, #{varietyId}, #{joinDate}, - #{comment}, #{technician}, #{createBy}, #{createTime}) + (ear_number, sheepfold, ranch_id, father, mother, born_weight, birthday, + gender, parity, variety_id, type_id, join_date, comment, technician, + create_by, create_time) + VALUES (#{earNumber}, #{sheepfold}, #{ranchId}, #{father}, #{mother}, #{bornWeight}, + #{birthday}, #{gender}, #{parity}, #{varietyId}, #{typeId}, #{joinDate}, + #{comment}, #{technician}, #{createBy}, #{createTime}) UPDATE sc_add_sheep ear_number = #{earNumber}, + ranch_id = #{ranchId}, sheepfold = #{sheepfold}, father = #{father}, mother = #{mother}, @@ -74,6 +82,7 @@ gender = #{gender}, parity = #{parity}, variety_id = #{varietyId}, + type_id = #{typeId}, join_date = #{joinDate}, comment = #{comment}, technician = #{technician}, 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 df4eaa6..64a5b09 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 @@ -8,6 +8,8 @@ + + @@ -17,13 +19,16 @@ select scc.id, scc.sheep_id, - bs.manage_tags as manage_tags, + bs.manage_tags as manage_tags, + sf.sheepfold_name as sheepfold_name, + '改备注' as event_type, scc.new_comment, scc.old_comment, scc.create_by, scc.create_time from sc_change_comment scc left join bas_sheep bs on scc.sheep_id = bs.id + left join da_sheepfold sf on bs.sheepfold_id = sf.id @@ -37,6 +46,10 @@ and bs.manage_tags LIKE CONCAT('%', #{manageTags}, '%') + and bs.sheepfold_id = #{sheepfoldId} + + and sf.sheepfold_name LIKE CONCAT('%', #{sheepfoldName}, '%') + and sce.ear_type = #{earType} and sce.newTag LIKE CONCAT('%', #{newTag}, '%') @@ -48,6 +61,7 @@ and sce.create_time between #{params.beginCreateTime} and #{params.endCreateTime} + ORDER BY sce.create_time DESC @@ -35,6 +40,7 @@ and bs.manage_tags like concat('%', #{manageTags}, '%') + and bs.sheepfold_id = #{sheepfoldId} and scv.variety_old like concat('%', #{varietyOld}, '%') @@ -46,6 +52,7 @@ and scv.create_time between #{params.beginCreateTime} and #{params.endCreateTime} + ORDER BY scv.create_time DESC @@ -75,6 +85,8 @@ insert into sc_trans_group sheep_id, + event_type, + trans_date, fold_to, fold_from, variety_id, @@ -87,6 +99,8 @@ #{sheepId}, + #{eventType}, + #{transDate}, #{foldTo}, #{foldFrom}, #{varietyId}, @@ -103,6 +117,8 @@ update sc_trans_group sheep_id = #{sheepId}, + event_type = #{eventType}, + trans_date = #{transDate}, fold_to = #{foldTo}, fold_from = #{foldFrom}, variety_id = #{varietyId}, 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 4905687..66d18ca 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 @@ -6,12 +6,14 @@ + + @@ -21,23 +23,25 @@ SELECT t.*, - bv.variety AS varietyName, - bs.manage_tags AS manageTags, + bv.variety AS varietyName, + bs.manage_tags AS manageTags, + t.event_type AS eventType, + t.transition_date AS transitionDate, CASE t.trans_type WHEN 0 THEN '内部调拨' WHEN 1 THEN '内部销售' WHEN 2 THEN '育肥调拨' ELSE '未知' - END AS transTypeText, + END AS transTypeText, CASE t.status WHEN 0 THEN '待审批' WHEN 1 THEN '已通过' WHEN 2 THEN '已驳回' ELSE '未知状态' - END AS statusText + END AS statusText FROM sc_transition_info t - LEFT JOIN bas_sheep_variety bv ON t.variety_id = bv.id LEFT JOIN bas_sheep bs ON t.sheep_id = bs.id + LEFT JOIN bas_sheep_variety bv ON bs.variety_id = bv.id @@ -42,14 +44,15 @@ and bs.manage_tags like concat('%', #{manageTags}, '%') - and sc.sheepfold = #{sheepfold} - and sc.variety_id = #{varietyId} + and bs.sheepfold_id = #{sheepfold} + and bs.variety_id = #{varietyId} and sc.technician like concat('%', #{technician}, '%') and sc.create_time between #{params.beginCreateTime} and #{params.endCreateTime} + ORDER BY sc.create_time DESC and sheep_id = #{sheepId} - and sheepfold = #{sheepfold} - - and fh.variety_id = #{varietyId} - + and bs.sheepfold_id = #{sheepfold} + and bs.variety_id = #{varietyId} and fh.create_time between #{params.beginCreateTime} and #{params.endCreateTime} @@ -48,6 +48,7 @@ and bs.manage_tags like concat('%', #{manageTags}, '%') + ORDER BY fh.create_time DESC