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/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/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/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/BreedRamFileController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BreedRamFileController.java new file mode 100644 index 0000000..7274064 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BreedRamFileController.java @@ -0,0 +1,104 @@ +package com.zhyc.module.base.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.enums.BusinessType; +import com.zhyc.module.base.domain.BreedRamFile; +import com.zhyc.module.base.service.IBreedRamFileService; +import com.zhyc.common.core.controller.BaseController; +import com.zhyc.common.core.domain.AjaxResult; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 种公羊档案Controller + * + * @author zhyc + * @date 2025-07-29 + */ +@RestController +@RequestMapping("/ram_file/bas_ram_file") +public class BreedRamFileController extends BaseController +{ + @Autowired + private IBreedRamFileService breedRamFileService; + + /** + * 查询种公羊档案列表 + */ + @PreAuthorize("@ss.hasPermi('breed_ram_file:breed_ram_file:list')") + @GetMapping("/list") + public TableDataInfo list(BreedRamFile breedRamFile) + { + startPage(); + List list = breedRamFileService.selectBreedRamFileList(breedRamFile); + return getDataTable(list); + } + + /** + * 导出种公羊档案列表 + */ + @PreAuthorize("@ss.hasPermi('breed_ram_file:breed_ram_file:export')") + @Log(title = "种公羊档案", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BreedRamFile breedRamFile) + { + List list = breedRamFileService.selectBreedRamFileList(breedRamFile); + ExcelUtil util = new ExcelUtil(BreedRamFile.class); + util.exportExcel(response, list, "种公羊档案数据"); + } + + /** + * 获取种公羊档案详细信息 + */ + @PreAuthorize("@ss.hasPermi('breed_ram_file:breed_ram_file:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(breedRamFileService.selectBreedRamFileById(id)); + } + + /** + * 新增种公羊档案 + */ + @PreAuthorize("@ss.hasPermi('breed_ram_file:breed_ram_file:add')") + @Log(title = "种公羊档案", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BreedRamFile breedRamFile) + { + return toAjax(breedRamFileService.insertBreedRamFile(breedRamFile)); + } + + /** + * 修改种公羊档案 + */ + @PreAuthorize("@ss.hasPermi('breed_ram_file:breed_ram_file:edit')") + @Log(title = "种公羊档案", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BreedRamFile breedRamFile) + { + return toAjax(breedRamFileService.updateBreedRamFile(breedRamFile)); + } + + /** + * 删除种公羊档案 + */ + @PreAuthorize("@ss.hasPermi('breed_ram_file:breed_ram_file:remove')") + @Log(title = "种公羊档案", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(breedRamFileService.deleteBreedRamFileByIds(ids)); + } +} \ No newline at end of file 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/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/BasSheepGroupMapping.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BasSheepGroupMapping.java index 0b42f87..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; 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/BreedRamFile.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BreedRamFile.java new file mode 100644 index 0000000..463308d --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/BreedRamFile.java @@ -0,0 +1,890 @@ +package com.zhyc.module.base.domain; + +import java.math.BigDecimal; +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; + +/** + * 种公羊档案对象 breed_ram_file + * + * @author zhyc + * @date 2025-07-29 + */ +public class BreedRamFile extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 种公羊id */ + private Long id; + + /** 普通耳号 */ + @Excel(name = "普通耳号") + private String ordinaryEarNumber; + + /** 牧场id */ + @Excel(name = "牧场id") + private Long ranchId; + + /** 牧场名称 */ + @Excel(name = "牧场名称") + private String ranchName; + + /** 羊舍id */ + @Excel(name = "羊舍id") + private Long sheepfoldId; + + /** 羊舍名称 */ + @Excel(name = "羊舍名称") + private String sheepfoldName; + + /** 电子耳号 */ + @Excel(name = "电子耳号") + private String electronicTags; + + /** 品种id */ + @Excel(name = "品种id") + private Long varietyId; + + /** 品种 */ + @Excel(name = "品种") + private String variety; + + /** 羊只类别 */ + @Excel(name = "羊只类别") + private String sheepCategory; + + /** 当前状态 */ + @Excel(name = "当前状态") + private String currentStatus; + + /** 生日 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "生日", width = 30, dateFormat = "yyyy-MM-dd") + private Date birthday; + + /** 动态 */ + @Excel(name = "动态") + private String dynamicInfo; + + /** 月龄 */ + @Excel(name = "月龄") + private Long monthAge; + + /** 出生体重 */ + @Excel(name = "出生体重") + private BigDecimal birthWeight; + + /** 断奶日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "断奶日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date weaningDate; + + /** 断奶日龄 */ + @Excel(name = "断奶日龄") + private Long weaningDayAge; + + /** 断奶体重 */ + @Excel(name = "断奶体重") + private BigDecimal weaningWeight; + + /** 断奶日增重 */ + @Excel(name = "断奶日增重") + private BigDecimal weaningDailyGain; + + /** 断奶后日增重 */ + @Excel(name = "断奶后日增重") + private BigDecimal postWeaningDailyGain; + + /** 当前体重 */ + @Excel(name = "当前体重") + private BigDecimal currentWeight; + + /** 当前体重称重日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "当前体重称重日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date currentWeightDate; + + /** 活动量 */ + @Excel(name = "活动量") + private String activityLevel; + + /** 性欲情况 */ + @Excel(name = "性欲情况") + private String sexualStatus; + + /** 阴囊周长 */ + @Excel(name = "阴囊周长") + private BigDecimal scrotumCircumference; + + /** 采精时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "采精时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date spermCollectionTime; + + /** 精液量 */ + @Excel(name = "精液量") + private BigDecimal spermVolume; + + /** 精液活力 */ + @Excel(name = "精液活力") + private String spermVitality; + + /** 精液密度 */ + @Excel(name = "精液密度") + private String spermDensity; + + /** 精液品质 */ + @Excel(name = "精液品质") + private String spermQuality; + + /** 配种状态 */ + @Excel(name = "配种状态") + private Long breedingStatus; + + /** 上次计划时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "上次计划时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date lastPlanTime; + + /** 本次计划时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "本次计划时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date currentPlanTime; + + /** 蛋白率%EBV */ + @Excel(name = "蛋白率%EBV") + private BigDecimal proteinRateEbv; + + /** 乳脂率%EBV */ + @Excel(name = "乳脂率%EBV") + private BigDecimal milkFatRateEbv; + + /** 乳体细胞(SCS)EBV */ + @Excel(name = "乳体细胞", readConverterExp = "S=CS") + private BigDecimal scsEbv; + + /** 生长性能EBV */ + @Excel(name = "生长性能EBV") + private BigDecimal growthPerformanceEbv; + + /** 抗逆性EBV */ + @Excel(name = "抗逆性EBV") + private BigDecimal resistanceEbv; + + /** 繁殖性能EBV */ + @Excel(name = "繁殖性能EBV") + private BigDecimal reproductionPerformanceEbv; + + /** 体型性状EBV */ + @Excel(name = "体型性状EBV") + private BigDecimal bodyTypeEbv; + + /** 综合育种值 */ + @Excel(name = "综合育种值") + private BigDecimal comprehensiveBreedingValue; + + /** 父号 */ + @Excel(name = "父号") + private String fatherNumber; + + /** 母号 */ + @Excel(name = "母号") + private String motherNumber; + + /** 祖父 */ + @Excel(name = "祖父") + private String grandfatherNumber; + + /** 祖母 */ + @Excel(name = "祖母") + private String grandmotherNumber; + + /** 外祖父 */ + @Excel(name = "外祖父") + private String maternalGrandfatherNumber; + + /** 外祖母 */ + @Excel(name = "外祖母") + private String maternalGrandmotherNumber; + + /** 是否核心羊群(0否1是) */ + @Excel(name = "是否核心羊群", readConverterExp = "0=否,1=是") + private Long isCoreFlock; + + /** 是否种用(0否1是) */ + @Excel(name = "是否种用", readConverterExp = "0=否,1=是") + private Long isBreedingUse; + + /** 孕检 */ + @Excel(name = "孕检") + private String pregnancyCheck; + + /** 总配母羊数 */ + @Excel(name = "总配母羊数") + private Long totalMatedEwes; + + /** 本交孕检母羊数 */ + @Excel(name = "本交孕检母羊数") + private Long naturalPregnancyCheckEwes; + + /** 本交受孕率% */ + @Excel(name = "本交受孕率%") + private BigDecimal naturalConceptionRate; + + /** 人工孕检母羊数 */ + @Excel(name = "人工孕检母羊数") + private Long artificialPregnancyCheckEwes; + + /** 人工受孕率% */ + @Excel(name = "人工受孕率%") + private BigDecimal artificialConceptionRate; + + /** 公羊母亲奶量 */ + @Excel(name = "公羊母亲奶量") + private BigDecimal ramMotherMilkVolume; + + /** 产奶量估计育种值(Kg) */ + @Excel(name = "产奶量估计育种值", readConverterExp = "K=g") + private BigDecimal milkProductionEbv; + + /** 准确性 */ + @Excel(name = "准确性") + private BigDecimal accuracy; + + /** 信息数 */ + @Excel(name = "信息数") + private Long informationCount; + + /** 是否亲子鉴定(0否1是) */ + @Excel(name = "是否亲子鉴定", readConverterExp = "0=否,1=是") + private Long isPaternityTested; + + /** 是否删除(0否1是) */ + private Long isDelete; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setOrdinaryEarNumber(String ordinaryEarNumber) + { + this.ordinaryEarNumber = ordinaryEarNumber; + } + + public String getOrdinaryEarNumber() + { + return ordinaryEarNumber; + } + public void setRanchId(Long ranchId) + { + this.ranchId = ranchId; + } + + public Long getRanchId() + { + return ranchId; + } + public void setRanchName(String ranchName) + { + this.ranchName = ranchName; + } + + public String getRanchName() + { + return ranchName; + } + public void setSheepfoldId(Long sheepfoldId) + { + this.sheepfoldId = sheepfoldId; + } + + public Long getSheepfoldId() + { + return sheepfoldId; + } + public void setSheepfoldName(String sheepfoldName) + { + this.sheepfoldName = sheepfoldName; + } + + public String getSheepfoldName() + { + return sheepfoldName; + } + public void setElectronicTags(String electronicTags) + { + this.electronicTags = electronicTags; + } + + public String getElectronicTags() + { + return electronicTags; + } + public void setVarietyId(Long varietyId) + { + this.varietyId = varietyId; + } + + public Long getVarietyId() + { + return varietyId; + } + public void setVariety(String variety) + { + this.variety = variety; + } + + public String getVariety() + { + return variety; + } + public void setSheepCategory(String sheepCategory) + { + this.sheepCategory = sheepCategory; + } + + public String getSheepCategory() + { + return sheepCategory; + } + public void setCurrentStatus(String currentStatus) + { + this.currentStatus = currentStatus; + } + + public String getCurrentStatus() + { + return currentStatus; + } + public void setBirthday(Date birthday) + { + this.birthday = birthday; + } + + public Date getBirthday() + { + return birthday; + } + public void setDynamicInfo(String dynamicInfo) + { + this.dynamicInfo = dynamicInfo; + } + + public String getDynamicInfo() + { + return dynamicInfo; + } + public void setMonthAge(Long monthAge) + { + this.monthAge = monthAge; + } + + public Long getMonthAge() + { + return monthAge; + } + public void setBirthWeight(BigDecimal birthWeight) + { + this.birthWeight = birthWeight; + } + + public BigDecimal getBirthWeight() + { + return birthWeight; + } + public void setWeaningDate(Date weaningDate) + { + this.weaningDate = weaningDate; + } + + public Date getWeaningDate() + { + return weaningDate; + } + public void setWeaningDayAge(Long weaningDayAge) + { + this.weaningDayAge = weaningDayAge; + } + + public Long getWeaningDayAge() + { + return weaningDayAge; + } + public void setWeaningWeight(BigDecimal weaningWeight) + { + this.weaningWeight = weaningWeight; + } + + public BigDecimal getWeaningWeight() + { + return weaningWeight; + } + public void setWeaningDailyGain(BigDecimal weaningDailyGain) + { + this.weaningDailyGain = weaningDailyGain; + } + + public BigDecimal getWeaningDailyGain() + { + return weaningDailyGain; + } + public void setPostWeaningDailyGain(BigDecimal postWeaningDailyGain) + { + this.postWeaningDailyGain = postWeaningDailyGain; + } + + public BigDecimal getPostWeaningDailyGain() + { + return postWeaningDailyGain; + } + public void setCurrentWeight(BigDecimal currentWeight) + { + this.currentWeight = currentWeight; + } + + public BigDecimal getCurrentWeight() + { + return currentWeight; + } + public void setCurrentWeightDate(Date currentWeightDate) + { + this.currentWeightDate = currentWeightDate; + } + + public Date getCurrentWeightDate() + { + return currentWeightDate; + } + public void setActivityLevel(String activityLevel) + { + this.activityLevel = activityLevel; + } + + public String getActivityLevel() + { + return activityLevel; + } + public void setSexualStatus(String sexualStatus) + { + this.sexualStatus = sexualStatus; + } + + public String getSexualStatus() + { + return sexualStatus; + } + public void setScrotumCircumference(BigDecimal scrotumCircumference) + { + this.scrotumCircumference = scrotumCircumference; + } + + public BigDecimal getScrotumCircumference() + { + return scrotumCircumference; + } + public void setSpermCollectionTime(Date spermCollectionTime) + { + this.spermCollectionTime = spermCollectionTime; + } + + public Date getSpermCollectionTime() + { + return spermCollectionTime; + } + public void setSpermVolume(BigDecimal spermVolume) + { + this.spermVolume = spermVolume; + } + + public BigDecimal getSpermVolume() + { + return spermVolume; + } + public void setSpermVitality(String spermVitality) + { + this.spermVitality = spermVitality; + } + + public String getSpermVitality() + { + return spermVitality; + } + public void setSpermDensity(String spermDensity) + { + this.spermDensity = spermDensity; + } + + public String getSpermDensity() + { + return spermDensity; + } + public void setSpermQuality(String spermQuality) + { + this.spermQuality = spermQuality; + } + + public String getSpermQuality() + { + return spermQuality; + } + public void setBreedingStatus(Long breedingStatus) + { + this.breedingStatus = breedingStatus; + } + + public Long getBreedingStatus() + { + return breedingStatus; + } + public void setLastPlanTime(Date lastPlanTime) + { + this.lastPlanTime = lastPlanTime; + } + + public Date getLastPlanTime() + { + return lastPlanTime; + } + public void setCurrentPlanTime(Date currentPlanTime) + { + this.currentPlanTime = currentPlanTime; + } + + public Date getCurrentPlanTime() + { + return currentPlanTime; + } + public void setProteinRateEbv(BigDecimal proteinRateEbv) + { + this.proteinRateEbv = proteinRateEbv; + } + + public BigDecimal getProteinRateEbv() + { + return proteinRateEbv; + } + public void setMilkFatRateEbv(BigDecimal milkFatRateEbv) + { + this.milkFatRateEbv = milkFatRateEbv; + } + + public BigDecimal getMilkFatRateEbv() + { + return milkFatRateEbv; + } + public void setScsEbv(BigDecimal scsEbv) + { + this.scsEbv = scsEbv; + } + + public BigDecimal getScsEbv() + { + return scsEbv; + } + public void setGrowthPerformanceEbv(BigDecimal growthPerformanceEbv) + { + this.growthPerformanceEbv = growthPerformanceEbv; + } + + public BigDecimal getGrowthPerformanceEbv() + { + return growthPerformanceEbv; + } + public void setResistanceEbv(BigDecimal resistanceEbv) + { + this.resistanceEbv = resistanceEbv; + } + + public BigDecimal getResistanceEbv() + { + return resistanceEbv; + } + public void setReproductionPerformanceEbv(BigDecimal reproductionPerformanceEbv) + { + this.reproductionPerformanceEbv = reproductionPerformanceEbv; + } + + public BigDecimal getReproductionPerformanceEbv() + { + return reproductionPerformanceEbv; + } + public void setBodyTypeEbv(BigDecimal bodyTypeEbv) + { + this.bodyTypeEbv = bodyTypeEbv; + } + + public BigDecimal getBodyTypeEbv() + { + return bodyTypeEbv; + } + public void setComprehensiveBreedingValue(BigDecimal comprehensiveBreedingValue) + { + this.comprehensiveBreedingValue = comprehensiveBreedingValue; + } + + public BigDecimal getComprehensiveBreedingValue() + { + return comprehensiveBreedingValue; + } + public void setFatherNumber(String fatherNumber) + { + this.fatherNumber = fatherNumber; + } + + public String getFatherNumber() + { + return fatherNumber; + } + public void setMotherNumber(String motherNumber) + { + this.motherNumber = motherNumber; + } + + public String getMotherNumber() + { + return motherNumber; + } + public void setGrandfatherNumber(String grandfatherNumber) + { + this.grandfatherNumber = grandfatherNumber; + } + + public String getGrandfatherNumber() + { + return grandfatherNumber; + } + public void setGrandmotherNumber(String grandmotherNumber) + { + this.grandmotherNumber = grandmotherNumber; + } + + public String getGrandmotherNumber() + { + return grandmotherNumber; + } + public void setMaternalGrandfatherNumber(String maternalGrandfatherNumber) + { + this.maternalGrandfatherNumber = maternalGrandfatherNumber; + } + + public String getMaternalGrandfatherNumber() + { + return maternalGrandfatherNumber; + } + public void setMaternalGrandmotherNumber(String maternalGrandmotherNumber) + { + this.maternalGrandmotherNumber = maternalGrandmotherNumber; + } + + public String getMaternalGrandmotherNumber() + { + return maternalGrandmotherNumber; + } + public void setIsCoreFlock(Long isCoreFlock) + { + this.isCoreFlock = isCoreFlock; + } + + public Long getIsCoreFlock() + { + return isCoreFlock; + } + public void setIsBreedingUse(Long isBreedingUse) + { + this.isBreedingUse = isBreedingUse; + } + + public Long getIsBreedingUse() + { + return isBreedingUse; + } + public void setPregnancyCheck(String pregnancyCheck) + { + this.pregnancyCheck = pregnancyCheck; + } + + public String getPregnancyCheck() + { + return pregnancyCheck; + } + public void setTotalMatedEwes(Long totalMatedEwes) + { + this.totalMatedEwes = totalMatedEwes; + } + + public Long getTotalMatedEwes() + { + return totalMatedEwes; + } + public void setNaturalPregnancyCheckEwes(Long naturalPregnancyCheckEwes) + { + this.naturalPregnancyCheckEwes = naturalPregnancyCheckEwes; + } + + public Long getNaturalPregnancyCheckEwes() + { + return naturalPregnancyCheckEwes; + } + public void setNaturalConceptionRate(BigDecimal naturalConceptionRate) + { + this.naturalConceptionRate = naturalConceptionRate; + } + + public BigDecimal getNaturalConceptionRate() + { + return naturalConceptionRate; + } + public void setArtificialPregnancyCheckEwes(Long artificialPregnancyCheckEwes) + { + this.artificialPregnancyCheckEwes = artificialPregnancyCheckEwes; + } + + public Long getArtificialPregnancyCheckEwes() + { + return artificialPregnancyCheckEwes; + } + public void setArtificialConceptionRate(BigDecimal artificialConceptionRate) + { + this.artificialConceptionRate = artificialConceptionRate; + } + + public BigDecimal getArtificialConceptionRate() + { + return artificialConceptionRate; + } + public void setRamMotherMilkVolume(BigDecimal ramMotherMilkVolume) + { + this.ramMotherMilkVolume = ramMotherMilkVolume; + } + + public BigDecimal getRamMotherMilkVolume() + { + return ramMotherMilkVolume; + } + public void setMilkProductionEbv(BigDecimal milkProductionEbv) + { + this.milkProductionEbv = milkProductionEbv; + } + + public BigDecimal getMilkProductionEbv() + { + return milkProductionEbv; + } + public void setAccuracy(BigDecimal accuracy) + { + this.accuracy = accuracy; + } + + public BigDecimal getAccuracy() + { + return accuracy; + } + public void setInformationCount(Long informationCount) + { + this.informationCount = informationCount; + } + + public Long getInformationCount() + { + return informationCount; + } + public void setIsPaternityTested(Long isPaternityTested) + { + this.isPaternityTested = isPaternityTested; + } + + public Long getIsPaternityTested() + { + return isPaternityTested; + } + public void setIsDelete(Long isDelete) + { + this.isDelete = isDelete; + } + + public Long getIsDelete() + { + return isDelete; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("ordinaryEarNumber", getOrdinaryEarNumber()) + .append("ranchId", getRanchId()) + .append("ranchName", getRanchName()) + .append("sheepfoldId", getSheepfoldId()) + .append("sheepfoldName", getSheepfoldName()) + .append("electronicTags", getElectronicTags()) + .append("varietyId", getVarietyId()) + .append("variety", getVariety()) + .append("sheepCategory", getSheepCategory()) + .append("currentStatus", getCurrentStatus()) + .append("birthday", getBirthday()) + .append("dynamicInfo", getDynamicInfo()) + .append("monthAge", getMonthAge()) + .append("birthWeight", getBirthWeight()) + .append("weaningDate", getWeaningDate()) + .append("weaningDayAge", getWeaningDayAge()) + .append("weaningWeight", getWeaningWeight()) + .append("weaningDailyGain", getWeaningDailyGain()) + .append("postWeaningDailyGain", getPostWeaningDailyGain()) + .append("currentWeight", getCurrentWeight()) + .append("currentWeightDate", getCurrentWeightDate()) + .append("activityLevel", getActivityLevel()) + .append("sexualStatus", getSexualStatus()) + .append("scrotumCircumference", getScrotumCircumference()) + .append("spermCollectionTime", getSpermCollectionTime()) + .append("spermVolume", getSpermVolume()) + .append("spermVitality", getSpermVitality()) + .append("spermDensity", getSpermDensity()) + .append("spermQuality", getSpermQuality()) + .append("breedingStatus", getBreedingStatus()) + .append("lastPlanTime", getLastPlanTime()) + .append("currentPlanTime", getCurrentPlanTime()) + .append("remark", getRemark()) + .append("proteinRateEbv", getProteinRateEbv()) + .append("milkFatRateEbv", getMilkFatRateEbv()) + .append("scsEbv", getScsEbv()) + .append("growthPerformanceEbv", getGrowthPerformanceEbv()) + .append("resistanceEbv", getResistanceEbv()) + .append("reproductionPerformanceEbv", getReproductionPerformanceEbv()) + .append("bodyTypeEbv", getBodyTypeEbv()) + .append("comprehensiveBreedingValue", getComprehensiveBreedingValue()) + .append("fatherNumber", getFatherNumber()) + .append("motherNumber", getMotherNumber()) + .append("grandfatherNumber", getGrandfatherNumber()) + .append("grandmotherNumber", getGrandmotherNumber()) + .append("maternalGrandfatherNumber", getMaternalGrandfatherNumber()) + .append("maternalGrandmotherNumber", getMaternalGrandmotherNumber()) + .append("isCoreFlock", getIsCoreFlock()) + .append("isBreedingUse", getIsBreedingUse()) + .append("pregnancyCheck", getPregnancyCheck()) + .append("totalMatedEwes", getTotalMatedEwes()) + .append("naturalPregnancyCheckEwes", getNaturalPregnancyCheckEwes()) + .append("naturalConceptionRate", getNaturalConceptionRate()) + .append("artificialPregnancyCheckEwes", getArtificialPregnancyCheckEwes()) + .append("artificialConceptionRate", getArtificialConceptionRate()) + .append("ramMotherMilkVolume", getRamMotherMilkVolume()) + .append("milkProductionEbv", getMilkProductionEbv()) + .append("accuracy", getAccuracy()) + .append("informationCount", getInformationCount()) + .append("isPaternityTested", getIsPaternityTested()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("isDelete", getIsDelete()) + .toString(); + } +} \ No newline at end of file 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 eda9b58..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 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/BasSheepMapper.java b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepMapper.java index 1b16800..4baaf89 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 @@ -78,4 +78,6 @@ public interface BasSheepMapper //用于校验改耳号部分新管理/电子耳号 int existsByManageTag(@Param("tag") String tag); int existsByElectronicTag(@Param("tag") String tag); + + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BreedRamFileMapper.java b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BreedRamFileMapper.java new file mode 100644 index 0000000..bb6eaa2 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BreedRamFileMapper.java @@ -0,0 +1,109 @@ +package com.zhyc.module.base.mapper; + +import java.util.List; +import com.zhyc.module.base.domain.BreedRamFile; + +/** + * 种公羊档案Mapper接口 + * + * @author zhyc + * @date 2025-07-29 + */ +public interface BreedRamFileMapper +{ + /** + * 查询种公羊档案 + * + * @param id 种公羊档案主键 + * @return 种公羊档案 + */ + public BreedRamFile selectBreedRamFileById(Long id); + + /** + * 查询种公羊档案列表 + * + * @param breedRamFile 种公羊档案 + * @return 种公羊档案集合 + */ + public List selectBreedRamFileList(BreedRamFile breedRamFile); + + /** + * 新增种公羊档案 + * + * @param breedRamFile 种公羊档案 + * @return 结果 + */ + public int insertBreedRamFile(BreedRamFile breedRamFile); + + /** + * 修改种公羊档案 + * + * @param breedRamFile 种公羊档案 + * @return 结果 + */ + public int updateBreedRamFile(BreedRamFile breedRamFile); + + /** + * 删除种公羊档案 + * + * @param id 种公羊档案主键 + * @return 结果 + */ + public int deleteBreedRamFileById(Long id); + + /** + * 批量删除种公羊档案 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBreedRamFileByIds(Long[] ids); + + /** + * 根据普通耳号查询种公羊档案 + * + * @param ordinaryEarNumber 普通耳号 + * @return 种公羊档案 + */ + public BreedRamFile selectBreedRamFileByOrdinaryEarNumber(String ordinaryEarNumber); + + /** + * 根据电子耳号查询种公羊档案 + * + * @param electronicTags 电子耳号 + * @return 种公羊档案 + */ + public BreedRamFile selectBreedRamFileByElectronicTags(String electronicTags); + + /** + * 根据牧场ID查询种公羊档案列表 + * + * @param ranchId 牧场ID + * @return 种公羊档案集合 + */ + public List selectBreedRamFileListByRanchId(Long ranchId); + + /** + * 根据羊舍ID查询种公羊档案列表 + * + * @param sheepfoldId 羊舍ID + * @return 种公羊档案集合 + */ + public List selectBreedRamFileListBySheepfoldId(Long sheepfoldId); + + /** + * 查询核心羊群种公羊档案列表 + * + * @param breedRamFile 种公羊档案 + * @return 种公羊档案集合 + */ + public List selectCoreFlockBreedRamFileList(BreedRamFile breedRamFile); + + /** + * 查询种用种公羊档案列表 + * + * @param breedRamFile 种公羊档案 + * @return 种公羊档案集合 + */ + public List selectBreedingUseBreedRamFileList(BreedRamFile breedRamFile); +} \ No newline at end of file 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/IBreedRamFileService.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/IBreedRamFileService.java new file mode 100644 index 0000000..847f3b0 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/IBreedRamFileService.java @@ -0,0 +1,61 @@ +package com.zhyc.module.base.service; + +import java.util.List; +import com.zhyc.module.base.domain.BreedRamFile; + +/** + * 种公羊档案Service接口 + * + * @author zhyc + * @date 2025-07-29 + */ +public interface IBreedRamFileService +{ + /** + * 查询种公羊档案 + * + * @param id 种公羊档案主键 + * @return 种公羊档案 + */ + public BreedRamFile selectBreedRamFileById(Long id); + + /** + * 查询种公羊档案列表 + * + * @param breedRamFile 种公羊档案 + * @return 种公羊档案集合 + */ + public List selectBreedRamFileList(BreedRamFile breedRamFile); + + /** + * 新增种公羊档案 + * + * @param breedRamFile 种公羊档案 + * @return 结果 + */ + public int insertBreedRamFile(BreedRamFile breedRamFile); + + /** + * 修改种公羊档案 + * + * @param breedRamFile 种公羊档案 + * @return 结果 + */ + public int updateBreedRamFile(BreedRamFile breedRamFile); + + /** + * 批量删除种公羊档案 + * + * @param ids 需要删除的种公羊档案主键集合 + * @return 结果 + */ + public int deleteBreedRamFileByIds(Long[] ids); + + /** + * 删除种公羊档案信息 + * + * @param id 种公羊档案主键 + * @return 结果 + */ + public int deleteBreedRamFileById(Long id); +} \ No newline at end of file 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/BreedRamFileServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BreedRamFileServiceImpl.java new file mode 100644 index 0000000..7e7d8fe --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BreedRamFileServiceImpl.java @@ -0,0 +1,96 @@ +package com.zhyc.module.base.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.base.mapper.BreedRamFileMapper; +import com.zhyc.module.base.domain.BreedRamFile; +import com.zhyc.module.base.service.IBreedRamFileService; + +/** + * 种公羊档案Service业务层处理 + * + * @author zhyc + * @date 2025-07-29 + */ +@Service +public class BreedRamFileServiceImpl implements IBreedRamFileService +{ + @Autowired + private BreedRamFileMapper breedRamFileMapper; + + /** + * 查询种公羊档案 + * + * @param id 种公羊档案主键 + * @return 种公羊档案 + */ + @Override + public BreedRamFile selectBreedRamFileById(Long id) + { + return breedRamFileMapper.selectBreedRamFileById(id); + } + + /** + * 查询种公羊档案列表 + * + * @param breedRamFile 种公羊档案 + * @return 种公羊档案 + */ + @Override + public List selectBreedRamFileList(BreedRamFile breedRamFile) + { + return breedRamFileMapper.selectBreedRamFileList(breedRamFile); + } + + /** + * 新增种公羊档案 + * + * @param breedRamFile 种公羊档案 + * @return 结果 + */ + @Override + public int insertBreedRamFile(BreedRamFile breedRamFile) + { + breedRamFile.setCreateTime(DateUtils.getNowDate()); + return breedRamFileMapper.insertBreedRamFile(breedRamFile); + } + + /** + * 修改种公羊档案 + * + * @param breedRamFile 种公羊档案 + * @return 结果 + */ + @Override + public int updateBreedRamFile(BreedRamFile breedRamFile) + { + breedRamFile.setUpdateTime(DateUtils.getNowDate()); + return breedRamFileMapper.updateBreedRamFile(breedRamFile); + } + + /** + * 批量删除种公羊档案 + * + * @param ids 需要删除的种公羊档案主键 + * @return 结果 + */ + @Override + public int deleteBreedRamFileByIds(Long[] ids) + { + return breedRamFileMapper.deleteBreedRamFileByIds(ids); + } + + /** + * 删除种公羊档案信息 + * + * @param id 种公羊档案主键 + * @return 结果 + */ + @Override + public int deleteBreedRamFileById(Long id) + { + return breedRamFileMapper.deleteBreedRamFileById(id); + } +} \ No newline at end of file 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/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..6876dda 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; 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..442d76e 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 @@ -5,8 +5,6 @@ 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; 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..34e0423 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 @@ -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/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..ae2d1a0 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; 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..8972fb3 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,7 +72,7 @@ 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()); @@ -116,7 +115,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..c37895a 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 @@ -72,7 +72,7 @@ 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())){ @@ -98,7 +98,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); 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..9b5286b 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,7 +73,7 @@ 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()); @@ -116,7 +114,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..9c7cc72 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 @@ -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.Health; import com.zhyc.module.biosafety.domain.SwMedicineUsage; import com.zhyc.module.biosafety.domain.SwMedicineUsageDetails; import com.zhyc.module.biosafety.mapper.SwMedicineUsageMapper; @@ -74,7 +73,7 @@ public class HealthServiceImpl implements IHealthService @Override public int insertHealth(Health health) { - String username = SecurityUtils.getUsername(); + String username = SecurityUtils.getLoginUser().getUser().getNickName(); // 使用记录的文件 SwMedicineUsage medicineUsage = new SwMedicineUsage(); @@ -120,7 +119,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..613de0a 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,7 +75,7 @@ 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(); @@ -129,6 +128,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..1cc3711 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,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.base.service.impl.SheepFileServiceImpl; import com.zhyc.module.biosafety.domain.SwMedicineUsage; import com.zhyc.module.biosafety.domain.SwMedicineUsageDetails; import com.zhyc.module.biosafety.mapper.SwMedicineUsageMapper; @@ -74,7 +73,7 @@ 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()); @@ -135,7 +134,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()); } 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/NpSheepMilkAnalysisController.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpSheepMilkAnalysisController.java index 0c2955d..3e4f07a 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpSheepMilkAnalysisController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/NpSheepMilkAnalysisController.java @@ -8,12 +8,14 @@ import com.zhyc.common.enums.BusinessType; import com.zhyc.common.utils.poi.ExcelUtil; import com.zhyc.module.dairyProducts.domain.NpSheepMilkAnalysis; import com.zhyc.module.dairyProducts.service.INpSheepMilkAnalysisService; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; +/** + * 只保留:分页列表(只读) + 单条查询 + 导出 + */ @RestController @RequestMapping("/dairyProducts/sheepMilkAnalysis") public class NpSheepMilkAnalysisController extends BaseController { @@ -22,58 +24,33 @@ public class NpSheepMilkAnalysisController extends BaseController { private INpSheepMilkAnalysisService npSheepMilkAnalysisService; /** - * 查询奶产量分析列表 + * 查询奶产量分析列表(只读,分页) + * 支持参数 manageEarTag(耳号模糊) 和 screenDays(筛选天数) */ @GetMapping("/list") public TableDataInfo list(NpSheepMilkAnalysis analysis) { - startPage(); + startPage(); // 使用 PageHelper 分页(注意 service 中第一个 DB 调用是 distinct sheep id) List list = npSheepMilkAnalysisService.selectNpSheepMilkAnalysisList(analysis); return getDataTable(list); } /** - * 获取单个分析记录详细信息 + * 获取单个分析记录详细信息(按 sheepId) */ - @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) { - return AjaxResult.success(npSheepMilkAnalysisService.selectNpSheepMilkAnalysisById(id)); - } - /** - * 新增奶产量分析记录 - */ - @Log(title = "奶产量分析", businessType = BusinessType.INSERT) - @PostMapping - public AjaxResult add(@RequestBody NpSheepMilkAnalysis analysis) { - return toAjax(npSheepMilkAnalysisService.insertNpSheepMilkAnalysis(analysis)); + @GetMapping(value = "/{sheepId}") + public AjaxResult getInfo(@PathVariable("sheepId") String sheepId) { + return AjaxResult.success(npSheepMilkAnalysisService.selectNpSheepMilkAnalysisBySheepId(sheepId)); } /** - * 修改奶产量分析记录 + * 导出奶产量分析记录(Excel) + * 支持 manageEarTag 与 screenDays 两个查询条件 */ - @Log(title = "奶产量分析", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult edit(@RequestBody NpSheepMilkAnalysis analysis) { - return toAjax(npSheepMilkAnalysisService.updateNpSheepMilkAnalysis(analysis)); - } - - /** - * 删除奶产量分析记录 - */ - @Log(title = "奶产量分析", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(npSheepMilkAnalysisService.deleteNpSheepMilkAnalysisByIds(ids)); - } - - /** - * 导出奶产量分析记录 - */ - @Log(title = "奶产量分析", businessType = BusinessType.EXPORT) + @Log(title = "奶产量分析 导出", businessType = BusinessType.EXPORT) @GetMapping("/export") public AjaxResult export(NpSheepMilkAnalysis analysis) { List list = npSheepMilkAnalysisService.selectNpSheepMilkAnalysisList(analysis); ExcelUtil util = new ExcelUtil<>(NpSheepMilkAnalysis.class); - return util.exportExcel(list, "奶产量分析数据"); + return util.exportExcel(list, "羊奶产量分析数据"); } } - diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/RanchController.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/controller/RanchController.java 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 ee52381..b0563fe 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/NpSheepMilkAnalysis.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpSheepMilkAnalysis.java index 05972f6..0573a0d 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpSheepMilkAnalysis.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/domain/NpSheepMilkAnalysis.java @@ -1,34 +1,64 @@ package com.zhyc.module.dairyProducts.domain; import java.util.Date; + public class NpSheepMilkAnalysis { + // 唯一键(可用于前端 row-key) private String sheepId; + + // 耳号(从 sheep_file.bs_manage_tags) private String manageEarTag; + private String variety; + + // 最高校正胎次的挤奶开始时间 & 干奶时间 private Date milkingStartTime; private Date dryEndTime; + + // 挤奶天数(该胎次) private Integer milkingDays; + + // 前端传入的筛选天数(screenDays) + private Integer screenDays; + + // 分析天数(若你有不同命名,可忽略) private Integer analysisDays; + + // 校正后最大胎次(即校正奶量之和最大的胎次) private Integer maxParity; + + // 最高校正胎次区间内的系统奶量与校正奶量(按筛选窗口) private Double sumSystemMilk; private Double sumCorrectedMilk; + + // 校正日平均奶量(按 min(挤奶天数, 筛选天数)) private Double avgCorrectedDaily; + + // 各胎次总奶量(校正) private Double sumParity1Milk; private Double sumParity2Milk; private Double sumParity3Milk; private Double sumParity4Milk; + + // 各胎次日平均(按规则) private Double avgParity1Daily; private Double avgParity2Daily; private Double avgParity3Daily; private Double avgParity4Daily; + + // 泌乳天数(sheep_file.lactation_day) private Integer lactationDays; + + // 过去 7 / 14 / 30 日平均(系统奶量) private Double avgLast7Milk; - private Double avgLast7Corrected; + private Double avgLast7Corrected; // = avgLast7Milk * weightCoefficient (默认 1.0) private Double avgLast14Milk; private Double avgLast30Milk; + + // 羊只基础信息(来自 sheep_file) private String sheepCategory; private Date birthday; - private Integer parity; + private Integer parity; // 当前胎次 private Integer monthAge; private Double currentWeight; private String breedStatus; @@ -36,12 +66,16 @@ public class NpSheepMilkAnalysis { private String motherManageTags; private String ranchName; private String family; + + // 母亲相关字段(由已计算的母亲分析结果中取值) private Integer motherMilkingDays; private Double motherSumCorrected; private Integer motherMaxParity; private Double motherAvgCorrectedDaily; + private Date lastUpdate; + // getters and setters public String getSheepId() { return sheepId; } public void setSheepId(String sheepId) { this.sheepId = sheepId; } @@ -60,6 +94,9 @@ public class NpSheepMilkAnalysis { public Integer getMilkingDays() { return milkingDays; } public void setMilkingDays(Integer milkingDays) { this.milkingDays = milkingDays; } + public Integer getScreenDays() { return screenDays; } + public void setScreenDays(Integer screenDays) { this.screenDays = screenDays; } + public Integer getAnalysisDays() { return analysisDays; } public void setAnalysisDays(Integer analysisDays) { this.analysisDays = analysisDays; } @@ -159,4 +196,3 @@ public class NpSheepMilkAnalysis { public Date getLastUpdate() { return lastUpdate; } public void setLastUpdate(Date lastUpdate) { this.lastUpdate = lastUpdate; } } - 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 d1a93e6..d877065 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 @@ -3,8 +3,6 @@ package com.zhyc.module.dairyProducts.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/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/mapper/NpSheepMilkAnalysisMapper.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpSheepMilkAnalysisMapper.java index f330707..002e009 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpSheepMilkAnalysisMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/mapper/NpSheepMilkAnalysisMapper.java @@ -1,19 +1,36 @@ package com.zhyc.module.dairyProducts.mapper; import com.zhyc.module.dairyProducts.domain.NpSheepMilkAnalysis; +import org.apache.ibatis.annotations.Param; + import java.util.List; +import java.util.Map; public interface NpSheepMilkAnalysisMapper { - NpSheepMilkAnalysis selectNpSheepMilkAnalysisById(Long id); + /** + * 按筛选天数 screenDays 统计并返回所有羊只的奶产量分析 + */ + List selectAnalysisForExport(@Param("screenDays") Integer screenDays); - List selectNpSheepMilkAnalysisList(NpSheepMilkAnalysis analysis); + /** + * 根据羊只ID查询羊只奶产量分析信息,返回Map结构 + */ + Map selectNpSheepMilkAnalysisBySheepId(@Param("sheepId") String sheepId); - int insertNpSheepMilkAnalysis(NpSheepMilkAnalysis analysis); + /** + * 根据管理耳标筛选,返回distinct的sheepId列表 + */ + List selectDistinctSheepIds(@Param("manageEarTag") String manageEarTag); - int updateNpSheepMilkAnalysis(NpSheepMilkAnalysis analysis); + /** + * 根据羊只ID查询羊只档案信息,返回Map结构 + */ + Map selectSheepFileBySheepId(@Param("sheepId") String sheepId); - int deleteNpSheepMilkAnalysisById(Long id); + /** + * 根据羊只ID查询挤奶班次数据,返回List + */ + List> selectMilkRecordsBySheepId(@Param("sheepId") String sheepId); - int deleteNpSheepMilkAnalysisByIds(Long[] ids); } 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/dairyProducts/service/INpSheepMilkAnalysisService.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpSheepMilkAnalysisService.java index 7750a5f..8760789 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpSheepMilkAnalysisService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/INpSheepMilkAnalysisService.java @@ -5,16 +5,8 @@ import java.util.List; public interface INpSheepMilkAnalysisService { - NpSheepMilkAnalysis selectNpSheepMilkAnalysisById(Long id); + NpSheepMilkAnalysis selectNpSheepMilkAnalysisBySheepId(String sheepId); List selectNpSheepMilkAnalysisList(NpSheepMilkAnalysis analysis); - int insertNpSheepMilkAnalysis(NpSheepMilkAnalysis analysis); - - int updateNpSheepMilkAnalysis(NpSheepMilkAnalysis analysis); - - int deleteNpSheepMilkAnalysisById(Long id); - - int deleteNpSheepMilkAnalysisByIds(Long[] ids); } - diff --git a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpSheepMilkAnalysisServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpSheepMilkAnalysisServiceImpl.java index c2476ee..161a381 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpSheepMilkAnalysisServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/dairyProducts/service/impl/NpSheepMilkAnalysisServiceImpl.java @@ -1,12 +1,17 @@ package com.zhyc.module.dairyProducts.service.impl; -import java.util.List; - -import com.zhyc.module.dairyProducts.mapper.NpSheepMilkAnalysisMapper; import com.zhyc.module.dairyProducts.domain.NpSheepMilkAnalysis; +import com.zhyc.module.dairyProducts.mapper.NpSheepMilkAnalysisMapper; import com.zhyc.module.dairyProducts.service.INpSheepMilkAnalysisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.stream.Collectors; @Service public class NpSheepMilkAnalysisServiceImpl implements INpSheepMilkAnalysisService { @@ -14,34 +19,268 @@ public class NpSheepMilkAnalysisServiceImpl implements INpSheepMilkAnalysisServi @Autowired private NpSheepMilkAnalysisMapper npSheepMilkAnalysisMapper; + // 将 Rec 定义为静态内部类 + private static class Rec { + LocalDate date; + double systemMilk; + double correctedMilk; + int parity; + } + + // 将 ParityStat 定义为静态内部类 + private static class ParityStat { + int parity; + double sumCorrected; + double sumSystem; + LocalDate first; + LocalDate last; + long days; + } + @Override - public NpSheepMilkAnalysis selectNpSheepMilkAnalysisById(Long id) { - return npSheepMilkAnalysisMapper.selectNpSheepMilkAnalysisById(id); + public NpSheepMilkAnalysis selectNpSheepMilkAnalysisBySheepId(String sheepId) { + Map map = npSheepMilkAnalysisMapper.selectNpSheepMilkAnalysisBySheepId(sheepId); + if (map == null) return null; + NpSheepMilkAnalysis ana = new NpSheepMilkAnalysis(); + ana.setSheepId(sheepId); + ana.setManageEarTag((String) map.get("manageEarTag")); + return ana; } @Override public List selectNpSheepMilkAnalysisList(NpSheepMilkAnalysis analysis) { - return npSheepMilkAnalysisMapper.selectNpSheepMilkAnalysisList(analysis); + int screenDays = (analysis != null && analysis.getScreenDays() != null) ? analysis.getScreenDays() : 100; + String manageEarTagFilter = (analysis != null) ? analysis.getManageEarTag() : null; + + List sheepIds = npSheepMilkAnalysisMapper.selectDistinctSheepIds(manageEarTagFilter); + if (CollectionUtils.isEmpty(sheepIds)) return Collections.emptyList(); + + List resultList = new ArrayList<>(); + Map mapByManageTag = new HashMap<>(); + + for (String sheepId : sheepIds) { + Map sf = npSheepMilkAnalysisMapper.selectSheepFileBySheepId(sheepId); + List> records = npSheepMilkAnalysisMapper.selectMilkRecordsBySheepId(sheepId); + + if (records == null || records.isEmpty()) { + NpSheepMilkAnalysis emptyAna = new NpSheepMilkAnalysis(); + emptyAna.setSheepId(sheepId); + if (sf != null) { + emptyAna.setManageEarTag((String) sf.get("manageEarTag")); + emptyAna.setVariety((String) sf.get("variety")); + emptyAna.setLactationDays(toInteger(sf.get("lactationDay"))); + emptyAna.setSheepCategory((String) sf.get("sheepType")); + emptyAna.setBirthday(convertToDate(sf.get("birthday"))); + emptyAna.setParity(toInteger(sf.get("currentParity"))); + emptyAna.setMonthAge(toInteger(sf.get("monthAge"))); + emptyAna.setCurrentWeight(toDouble(sf.get("currentWeight"))); + emptyAna.setBreedStatus((String) sf.get("breedStatus")); + emptyAna.setFatherManageTags((String) sf.get("fatherManageTags")); + emptyAna.setMotherManageTags((String) sf.get("motherManageTags")); + emptyAna.setRanchName((String) sf.get("ranchName")); + emptyAna.setFamily((String) sf.get("family")); + } + resultList.add(emptyAna); + mapByManageTag.put(emptyAna.getManageEarTag(), emptyAna); + continue; + } + + // 使用静态内部类 Rec + List recs = new ArrayList<>(); + for (Map r : records) { + Rec rr = new Rec(); + rr.date = toLocalDate(r.get("classDate")); + rr.systemMilk = toDouble(r.get("systemMilk")); + rr.correctedMilk = toDouble(r.get("correctedMilk")); + rr.parity = (r.get("parity") == null) ? 0 : Integer.parseInt(String.valueOf(r.get("parity"))); + recs.add(rr); + } + + Map> byParity = recs.stream().collect(Collectors.groupingBy(r -> r.parity)); + + // 使用静态内部类 ParityStat + List parityStats = new ArrayList<>(); + for (Map.Entry> e : byParity.entrySet()) { + List list = e.getValue(); + double sumCorr = list.stream().mapToDouble(x -> x.correctedMilk).sum(); + double sumSys = list.stream().mapToDouble(x -> x.systemMilk).sum(); + LocalDate first = list.stream().map(x -> x.date).min(LocalDate::compareTo).get(); + LocalDate last = list.stream().map(x -> x.date).max(LocalDate::compareTo).get(); + long days = ChronoUnit.DAYS.between(first, last) + 1; + ParityStat ps = new ParityStat(); + ps.parity = e.getKey(); + ps.sumCorrected = sumCorr; + ps.sumSystem = sumSys; + ps.first = first; + ps.last = last; + ps.days = Math.max(days, 1); + parityStats.add(ps); + } + + parityStats.sort(Comparator.comparingDouble((ParityStat p) -> p.sumCorrected).reversed() + .thenComparingInt(p -> p.parity)); + ParityStat maxParityStat = parityStats.get(0); + + LocalDate windowStart = maxParityStat.first; + LocalDate windowEndByDays = windowStart.plusDays(screenDays - 1); + LocalDate actualWindowEnd = (maxParityStat.last.isBefore(windowEndByDays)) ? maxParityStat.last : windowEndByDays; + + double sumSystemWindow = recs.stream() + .filter(r -> r.parity == maxParityStat.parity && !r.date.isBefore(windowStart) && !r.date.isAfter(actualWindowEnd)) + .mapToDouble(r -> r.systemMilk).sum(); + + double sumCorrectedWindow = recs.stream() + .filter(r -> r.parity == maxParityStat.parity && !r.date.isBefore(windowStart) && !r.date.isAfter(actualWindowEnd)) + .mapToDouble(r -> r.correctedMilk).sum(); + + long milkingDays = maxParityStat.days; + long denominator = Math.min(milkingDays, screenDays); + double avgCorrectedDaily = (denominator > 0) ? (sumCorrectedWindow / (double) denominator) : 0.0; + + double sumParity1 = parityStats.stream().filter(p -> p.parity == 1).mapToDouble(p -> p.sumCorrected).sum(); + double sumParity2 = parityStats.stream().filter(p -> p.parity == 2).mapToDouble(p -> p.sumCorrected).sum(); + double sumParity3 = parityStats.stream().filter(p -> p.parity == 3).mapToDouble(p -> p.sumCorrected).sum(); + double sumParity4 = parityStats.stream().filter(p -> p.parity == 4).mapToDouble(p -> p.sumCorrected).sum(); + + // 你之前的 computeParityAvg 方法里没实现,保留调用0 + double avgP1 = computeParityAvg(parityStats, 1, screenDays); + double avgP2 = computeParityAvg(parityStats, 2, screenDays); + double avgP3 = computeParityAvg(parityStats, 3, screenDays); + double avgP4 = computeParityAvg(parityStats, 4, screenDays); + + LocalDate lastDate = recs.stream().map(r -> r.date).max(LocalDate::compareTo).get(); + double avgLast7 = computeLastNDaysAvg(recs, lastDate, 7); + double avgLast14 = computeLastNDaysAvg(recs, lastDate, 14); + double avgLast30 = computeLastNDaysAvg(recs, lastDate, 30); + + double weightCoefficient = 1.0; + if (sf != null && sf.get("weighCoefficient") != null) { + weightCoefficient = toDouble(sf.get("weighCoefficient")); + } + double avgLast7Corrected = avgLast7 * weightCoefficient; + + NpSheepMilkAnalysis ana = new NpSheepMilkAnalysis(); + ana.setSheepId(sheepId); + ana.setManageEarTag(sf == null ? null : (String) sf.get("manageEarTag")); + ana.setVariety(sf == null ? null : (String) sf.get("variety")); + ana.setMilkingStartTime(toDate(windowStart)); + ana.setDryEndTime(toDate(maxParityStat.last)); + ana.setMilkingDays((int) milkingDays); + ana.setScreenDays(screenDays); + ana.setMaxParity(maxParityStat.parity); + ana.setSumSystemMilk(sumSystemWindow); + ana.setSumCorrectedMilk(sumCorrectedWindow); + ana.setAvgCorrectedDaily(avgCorrectedDaily); + ana.setSumParity1Milk(sumParity1); + ana.setSumParity2Milk(sumParity2); + ana.setSumParity3Milk(sumParity3); + ana.setSumParity4Milk(sumParity4); + ana.setAvgParity1Daily(avgP1); + ana.setAvgParity2Daily(avgP2); + ana.setAvgParity3Daily(avgP3); + ana.setAvgParity4Daily(avgP4); + ana.setLactationDays(toInteger(sf == null ? null : sf.get("lactationDay"))); + ana.setAvgLast7Milk(avgLast7); + ana.setAvgLast7Corrected(avgLast7Corrected); + ana.setAvgLast14Milk(avgLast14); + ana.setAvgLast30Milk(avgLast30); + + if (sf != null) { + ana.setSheepCategory((String) sf.get("sheepType")); + ana.setBirthday(convertToDate(sf.get("birthday"))); + ana.setParity(toInteger(sf.get("currentParity"))); + ana.setMonthAge(toInteger(sf.get("monthAge"))); + ana.setCurrentWeight(toDouble(sf.get("currentWeight"))); + ana.setBreedStatus((String) sf.get("breedStatus")); + ana.setFatherManageTags((String) sf.get("fatherManageTags")); + ana.setMotherManageTags((String) sf.get("motherManageTags")); + ana.setRanchName((String) sf.get("ranchName")); + ana.setFamily((String) sf.get("family")); + } + + ana.setLastUpdate(toDate(lastDate)); + + resultList.add(ana); + mapByManageTag.put(ana.getManageEarTag(), ana); + } + + // 填充母亲相关字段 + for (NpSheepMilkAnalysis a : resultList) { + String motherTag = a.getMotherManageTags(); + if (motherTag != null && mapByManageTag.containsKey(motherTag)) { + NpSheepMilkAnalysis mom = mapByManageTag.get(motherTag); + a.setMotherMilkingDays(mom.getMilkingDays()); + a.setMotherSumCorrected(mom.getSumCorrectedMilk()); + a.setMotherMaxParity(mom.getMaxParity()); + a.setMotherAvgCorrectedDaily(mom.getAvgCorrectedDaily()); + } + } + + return resultList; } - @Override - public int insertNpSheepMilkAnalysis(NpSheepMilkAnalysis analysis) { - return npSheepMilkAnalysisMapper.insertNpSheepMilkAnalysis(analysis); + private static Date convertToDate(Object obj) { + if (obj == null) return null; + if (obj instanceof Date) { + return (Date) obj; + } + if (obj instanceof java.sql.Date) { + return new Date(((java.sql.Date) obj).getTime()); + } + return null; } - @Override - public int updateNpSheepMilkAnalysis(NpSheepMilkAnalysis analysis) { - return npSheepMilkAnalysisMapper.updateNpSheepMilkAnalysis(analysis); + private static LocalDate toLocalDate(Object obj) { + if (obj == null) return null; + if (obj instanceof java.sql.Date) { + return ((java.sql.Date) obj).toLocalDate(); + } + if (obj instanceof Date) { + return ((Date) obj).toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + } + return null; } - @Override - public int deleteNpSheepMilkAnalysisById(Long id) { - return npSheepMilkAnalysisMapper.deleteNpSheepMilkAnalysisById(id); + private static Date toDate(LocalDate ld) { + if (ld == null) return null; + return Date.from(ld.atStartOfDay(ZoneId.systemDefault()).toInstant()); } - @Override - public int deleteNpSheepMilkAnalysisByIds(Long[] ids) { - return npSheepMilkAnalysisMapper.deleteNpSheepMilkAnalysisByIds(ids); + private static Integer toInteger(Object obj) { + if (obj == null) return null; + if (obj instanceof Number) return ((Number) obj).intValue(); + try { + return Integer.parseInt(obj.toString()); + } catch (Exception e) { + return null; + } + } + + private static Double toDouble(Object obj) { + if (obj == null) return 0.0; + if (obj instanceof Number) return ((Number) obj).doubleValue(); + try { + return Double.parseDouble(obj.toString()); + } catch (Exception e) { + return 0.0; + } + } + + private double computeParityAvg(List stats, int parity, int screenDays) { + // 这里你之前实现是直接返回0,可按需完善 + return 0.0; + } + + private double computeLastNDaysAvg(List recs, LocalDate lastDate, int days) { + LocalDate startDate = lastDate.minusDays(days - 1); + double sum = 0; + int count = 0; + for (Rec r : recs) { + if (r.date != null && !r.date.isBefore(startDate) && !r.date.isAfter(lastDate)) { + sum += r.correctedMilk; + count++; + } + } + return (count > 0) ? (sum / count) : 0.0; } } - 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..446327d --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedListController.java @@ -0,0 +1,236 @@ +package com.zhyc.module.feed.controller; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.servlet.http.HttpServletResponse; + +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 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; + + private final ISgFormulaManagementService sgFormulaManagementService; + + private final ISgFeedPlanService sgFeedPlanService; + + private final Map sgFeedListMap = new HashMap<>(); + + public static boolean refresh = true; + + @Autowired + public SgFeedListController(ISgFeedListService sgFeedListService, ISgFormulaManagementService sgFormulaManagementService, ISgFeedPlanService sgFeedPlanService) { + this.sgFeedListService = sgFeedListService; + this.sgFormulaManagementService = sgFormulaManagementService; + this.sgFeedPlanService = sgFeedPlanService; + } + + /** + * 查询配料清单列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedList:list')") + @GetMapping("/list") + @Transactional(rollbackFor = Exception.class) + public TableDataInfo list(SgFeedList sgFeedList) { + /* + 刷新缓存 + 当配方管理表出现更新 或 饲喂计划表出现增删改时会将refresh置为true 通知此处进行刷新 + */ + if (refresh) { + 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 = sgFeedListMap.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)); + } + + + public void SyncFeedList() { + // 清空旧缓存 + sgFeedListMap.clear(); + // 获取配方管理和现有配料清单内容 + List formulaManagementList = sgFormulaManagementService.selectSgFormulaManagementList(new SgFormulaManagement()); + List feedLists = sgFeedListService.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) { + sgFeedListService.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/controller/SgFeedPlanController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedPlanController.java new file mode 100644 index 0000000..39bde43 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedPlanController.java @@ -0,0 +1,131 @@ +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; +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.service.ISgFeedPlanService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 饲喂计划Controller + * + * @author HashMap + * @date 2025-08-14 + */ +@RestController +@RequestMapping("/feed/FeedPlan") +public class SgFeedPlanController extends BaseController { + private final ISgFeedPlanService sgFeedPlanService; + + public SgFeedPlanController(ISgFeedPlanService sgFeedPlanService) { + this.sgFeedPlanService = sgFeedPlanService; + } + + /** + * 查询饲喂计划列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedPlan:list')") + @GetMapping("/list") + public TableDataInfo list(SgFeedPlan sgFeedPlan) { + startPage(); + List list = sgFeedPlanService.selectSgFeedPlanList(sgFeedPlan); + return getDataTable(list); + } + + /** + * 导出饲喂计划列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedPlan:export')") + @Log(title = "饲喂计划", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SgFeedPlan sgFeedPlan) { + List list = sgFeedPlanService.selectSgFeedPlanList(sgFeedPlan); + ExcelUtil util = new ExcelUtil<>(SgFeedPlan.class); + util.exportExcel(response, list, "饲喂计划数据"); + } + + /** + * 获取饲喂计划详细信息 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedPlan:query')") + @GetMapping(value = "/{createDate}") + public AjaxResult getInfo(@PathVariable("createDate") Date createDate) { + return success(sgFeedPlanService.selectSgFeedPlanByCreateDate(createDate)); + } + + /** + * 新增饲喂计划 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedPlan:add')") + @Log(title = "饲喂计划", businessType = BusinessType.INSERT) + @PostMapping + 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)); + } + + /** + * 修改饲喂计划 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedPlan:edit')") + @Log(title = "饲喂计划", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SgFeedPlan sgFeedPlan) { + // 根据修改后的值重新计算 + setPlan(sgFeedPlan); + // 通知配料清单刷新数据 + SgFeedListController.refresh = true; + return toAjax(sgFeedPlanService.updateSgFeedPlan(sgFeedPlan)); + } + + /** + * 删除饲喂计划 + */ + @PreAuthorize("@ss.hasPermi('feed:FeedPlan:remove')") + @Log(title = "饲喂计划", businessType = BusinessType.DELETE) + @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/SgFormulaListController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFormulaListController.java new file mode 100644 index 0000000..fb6a83b --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFormulaListController.java @@ -0,0 +1,106 @@ +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.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.SgFormulaList; +import com.zhyc.module.feed.service.ISgFormulaListService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 配方列表Controller + * + * @author HashMap + * @date 2025-08-09 + */ +@RestController +@RequestMapping("/feed/FormulaList") +public class SgFormulaListController extends BaseController +{ + private final ISgFormulaListService sgFormulaListService; + + public SgFormulaListController(ISgFormulaListService sgFormulaListService) { + this.sgFormulaListService = sgFormulaListService; + } + + /** + * 查询配方列表列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaList:list')") + @GetMapping("/list") + public TableDataInfo list(SgFormulaList sgFormulaList) + { + startPage(); + List list = sgFormulaListService.selectSgFormulaListList(sgFormulaList); + return getDataTable(list); + } + + /** + * 导出配方列表列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaList:export')") + @Log(title = "配方列表", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SgFormulaList sgFormulaList) + { + List list = sgFormulaListService.selectSgFormulaListList(sgFormulaList); + ExcelUtil util = new ExcelUtil<>(SgFormulaList.class); + util.exportExcel(response, list, "配方列表数据"); + } + + /** + * 获取配方列表详细信息 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaList:query')") + @GetMapping(value = "/{code}") + public AjaxResult getInfo(@PathVariable("code") Long code) + { + return success(sgFormulaListService.selectSgFormulaListByCode(code)); + } + + /** + * 新增配方列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaList:add')") + @Log(title = "配方列表", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SgFormulaList sgFormulaList) + { + return toAjax(sgFormulaListService.insertSgFormulaList(sgFormulaList)); + } + + /** + * 修改配方列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaList:edit')") + @Log(title = "配方列表", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SgFormulaList sgFormulaList) + { + return toAjax(sgFormulaListService.updateSgFormulaList(sgFormulaList)); + } + + /** + * 删除配方列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaList:remove')") + @Log(title = "配方列表", businessType = BusinessType.DELETE) + @DeleteMapping("/{codes}") + public AjaxResult remove(@PathVariable Long[] codes) + { + return toAjax(sgFormulaListService.deleteSgFormulaListByCodes(codes)); + } +} 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 new file mode 100644 index 0000000..9284c7a --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFormulaManagementController.java @@ -0,0 +1,178 @@ +package com.zhyc.module.feed.controller; + +import java.util.List; +import java.util.Objects; +import javax.servlet.http.HttpServletResponse; + +import com.zhyc.module.feed.domain.SgFormulaList; +import com.zhyc.module.feed.service.ISgFormulaListService; +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.SgFormulaManagement; +import com.zhyc.module.feed.service.ISgFormulaManagementService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 配方管理Controller + * + * @author HashMap + * @date 2025-08-09 + */ +@RestController +@RequestMapping("/feed/FormulaManagement") +public class SgFormulaManagementController extends BaseController { + private final ISgFormulaManagementService sgFormulaManagementService; + private final ISgFormulaListService sgFormulaListService; + + public SgFormulaManagementController(ISgFormulaManagementService sgFormulaManagementService, ISgFormulaListService sgFormulaListService) { + this.sgFormulaManagementService = sgFormulaManagementService; + this.sgFormulaListService = sgFormulaListService; + } + + /** + * 查询配方管理列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaManagement:list')") + @GetMapping("/list") + public TableDataInfo list(SgFormulaManagement sgFormulaManagement) { + startPage(); + // 非查询详情时设定BatchId为0查询配方模板 + if (null != sgFormulaManagement && !Objects.equals(sgFormulaManagement.getQueryType(), "query")) { + sgFormulaManagement.setBatchId("0"); + } + List FormulaManagement = sgFormulaManagementService.selectSgFormulaManagementList(sgFormulaManagement); + for (SgFormulaManagement sgFormulaManagementItem : FormulaManagement) { + SgFormulaManagement query = new SgFormulaManagement(); + query.setFormulaId(sgFormulaManagementItem.getFormulaId()); + query.setQueryType("Sub"); + List subFormula = sgFormulaManagementService.selectSgFormulaManagementList(query); + sgFormulaManagementItem.setSubFormulaList(subFormula); + } + return getDataTable(FormulaManagement); + } + + /** + * 导出配方管理列表 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaManagement:export')") + @Log(title = "配方管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SgFormulaManagement sgFormulaManagement) { + List list = sgFormulaManagementService.selectSgFormulaManagementList(sgFormulaManagement); + ExcelUtil util = new ExcelUtil<>(SgFormulaManagement.class); + util.exportExcel(response, list, "配方管理数据"); + } + + /** + * 获取配方管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaManagement:query')") + @GetMapping(value = "/{formulaId}") + public AjaxResult getInfo(@PathVariable("formulaId") String formulaId) { + return success(sgFormulaManagementService.selectSgFormulaManagementByFormulaId(formulaId)); + } + + /** + * 新增配方管理 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaManagement:add')") + @Log(title = "配方管理", businessType = BusinessType.INSERT) + @PostMapping + @Transactional(rollbackFor = Exception.class) + public AjaxResult add(@RequestBody SgFormulaManagement sgFormulaManagement) { + if (null == sgFormulaManagement) + throw new RuntimeException("ERROR: 数据为空"); + if (Objects.equals(sgFormulaManagement.getBatchId(), "0")) { + SgFormulaManagement exist = sgFormulaManagementService.selectSgFormulaManagementByFormulaId(sgFormulaManagement.getFormulaId()); + if (exist != null) { + throw new RuntimeException("WARNING: 配方编码重复,录入失败"); + } + } else { + SgFormulaManagement exist = new SgFormulaManagement(); + exist.setFormulaId(sgFormulaManagement.getFormulaId()); + exist.setBatchId(sgFormulaManagement.getBatchId()); + if (!sgFormulaManagementService.selectSgFormulaManagementList(exist).isEmpty()) { + throw new RuntimeException("WARNING: 批号重复,录入失败"); + } + } + List sgFormulaList = sgFormulaManagement.getSgFormulaList(); + for (SgFormulaList sgFormulaListItem : sgFormulaList) { + // 前端引用模板数据时会引用主键Code,在插入前置为空 + sgFormulaListItem.setCode(null); + sgFormulaListItem.setFormulaId(sgFormulaManagement.getFormulaId()); + sgFormulaListItem.setBatchId(sgFormulaManagement.getBatchId()); + sgFormulaListService.insertSgFormulaList(sgFormulaListItem); + } + return toAjax(sgFormulaManagementService.insertSgFormulaManagement(sgFormulaManagement)); + } + + /** + * 修改配方管理 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaManagement:edit')") + @Log(title = "配方管理", businessType = BusinessType.UPDATE) + @PutMapping + @Transactional(rollbackFor = Exception.class) + public AjaxResult edit(@RequestBody SgFormulaManagement sgFormulaManagement) { + List sgFormulaList = sgFormulaManagement.getSgFormulaList(); + if (null != sgFormulaManagement.getFormulaId() && null != sgFormulaManagement.getBatchId()) { + SgFormulaList delete = new SgFormulaList(); + delete.setFormulaId(sgFormulaManagement.getFormulaId()); + delete.setBatchId(sgFormulaManagement.getBatchId()); + sgFormulaListService.deleteSgFormulaListByFormulaIdAndBatchId(delete); + } else { + throw new RuntimeException("FormulaID & BatchID不能为空"); + } + + // 配方表同步更新 + for (SgFormulaList sgFormulaListItem : sgFormulaList) { + sgFormulaListItem.setBatchId(sgFormulaManagement.getBatchId()); + sgFormulaListItem.setFormulaId(sgFormulaManagement.getFormulaId()); + sgFormulaListService.insertSgFormulaList(sgFormulaListItem); + } + + // 通知配料清单刷新数据 + SgFeedListController.refresh = true; + return toAjax(sgFormulaManagementService.updateSgFormulaManagement(sgFormulaManagement)); + } + + /** + * 删除配方管理 + */ + @PreAuthorize("@ss.hasPermi('feed:FormulaManagement:remove')") + @Log(title = "配方管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{formulaId}/{batchId}") + @Transactional(rollbackFor = Exception.class) + public AjaxResult remove(@PathVariable String formulaId, @PathVariable String batchId) { + SgFormulaManagement sgFormulaManagement = new SgFormulaManagement(); + sgFormulaManagement.setFormulaId(formulaId); + sgFormulaManagement.setBatchId(batchId); + if (sgFormulaManagement.getBatchId().equals("0")) { + sgFormulaManagement.setBatchId(null); + List list = sgFormulaManagementService.selectSgFormulaManagementList(sgFormulaManagement); + if (list.size() > 1) { + throw new RuntimeException("WARNING 该配方正被使用,无法删除"); + } + sgFormulaManagement.setBatchId(batchId); + } + // 前置检查完毕 执行删除 + 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 new file mode 100644 index 0000000..b3e5ab0 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgMaterialController.java @@ -0,0 +1,106 @@ +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.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.SgMaterial; +import com.zhyc.module.feed.service.ISgMaterialService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 原料Controller + * + * @author HashMap + * @date 2025-08-11 + */ +@RestController +@RequestMapping("/feed/material") +public class SgMaterialController extends BaseController +{ + private final ISgMaterialService sgMaterialService; + + public SgMaterialController(ISgMaterialService sgMaterialService) { + this.sgMaterialService = sgMaterialService; + } + + /** + * 查询原料列表 + */ + @PreAuthorize("@ss.hasPermi('feed:material:list')") + @GetMapping("/list") + public TableDataInfo list(SgMaterial sgMaterial) + { + startPage(); + List list = sgMaterialService.selectSgMaterialList(sgMaterial); + return getDataTable(list); + } + + /** + * 导出原料列表 + */ + @PreAuthorize("@ss.hasPermi('feed:material:export')") + @Log(title = "原料", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SgMaterial sgMaterial) + { + List list = sgMaterialService.selectSgMaterialList(sgMaterial); + ExcelUtil util = new ExcelUtil<>(SgMaterial.class); + util.exportExcel(response, list, "原料数据"); + } + + /** + * 获取原料详细信息 + */ + @PreAuthorize("@ss.hasPermi('feed:material:query')") + @GetMapping(value = "/{materialId}") + public AjaxResult getInfo(@PathVariable("materialId") String materialId) + { + return success(sgMaterialService.selectSgMaterialByMaterialId(materialId)); + } + + /** + * 新增原料 + */ + @PreAuthorize("@ss.hasPermi('feed:material:add')") + @Log(title = "原料", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SgMaterial sgMaterial) + { + return toAjax(sgMaterialService.insertSgMaterial(sgMaterial)); + } + + /** + * 修改原料 + */ + @PreAuthorize("@ss.hasPermi('feed:material:edit')") + @Log(title = "原料", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SgMaterial sgMaterial) + { + return toAjax(sgMaterialService.updateSgMaterial(sgMaterial)); + } + + /** + * 删除原料 + */ + @PreAuthorize("@ss.hasPermi('feed:material:remove')") + @Log(title = "原料", businessType = BusinessType.DELETE) + @DeleteMapping("/{materialIds}") + public AjaxResult remove(@PathVariable String[] materialIds) + { + return toAjax(sgMaterialService.deleteSgMaterialByMaterialIds(materialIds)); + } +} 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 new file mode 100644 index 0000000..7d537c0 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedPlan.java @@ -0,0 +1,135 @@ +package com.zhyc.module.feed.domain; + +import java.util.Date; +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_plan + * + * @author HashMap + * @date 2025-08-14 + */ +@Getter +@Setter +public class SgFeedPlan extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 创建日期 */ + private Date createDate; + + /** 配方编码 */ + @Excel(name = "配方编码") + private String formulaId; + + /** 批号 */ + @Excel(name = "批号") + private String batchId; + + /** 羊舍 */ + @Excel(name = "羊舍") + private Integer sheepHouseId; + + /** 羊只数量 */ + @Excel(name = "羊只数量") + private Integer sheepCount; + + /** 日均计划量 */ + @Excel(name = "日均计划量") + private Double planDailySize; + + /** 饲喂比例(早) */ + @Excel(name = "饲喂比例(早)") + private Double ratioMorning; + + /** 饲喂比例(中) */ + @Excel(name = "饲喂比例(中)") + private Double ratioNoon; + + /** 饲喂比例(下) */ + @Excel(name = "饲喂比例(下)") + 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 Double planFeedTotal; + + /** 饲草班人员 */ + @Excel(name = "饲草班人员") + private String zookeeper; + + /** 饲喂计划日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "饲喂计划日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date planDate; + + @Override + public String toString() { + 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("actualMorningSize", getActualMorningSize()) + .append("planNoonSize", getPlanNoonSize()) + .append("planNoonTotal", getPlanNoonTotal()) + .append("actualNoonSize", getActualNoonSize()) + .append("planAfternoonSize", getPlanAfternoonSize()) + .append("planAfternoonTotal", getPlanAfternoonTotal()) + .append("actualAfternoonSize", getActualAfternoonSize()) + .append("planFeedTotal", getPlanFeedTotal()) + .append("zookeeper", getZookeeper()) + .append("planDate", getPlanDate()) + .append("remark", getRemark()) + .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 new file mode 100644 index 0000000..03ab542 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFormulaList.java @@ -0,0 +1,62 @@ +package com.zhyc.module.feed.domain; + +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_formula_list + * + * @author HashMap + * @date 2025-08-09 + */ +@Setter +@Getter +public class SgFormulaList extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 序号 */ + private Long code; + + /** 配方编号 */ + private String formulaId; + + /** 配方编号 */ + private String batchId; + /** 原料编号 */ + @Excel(name = "原料编号") + private String materialId; + + /** 原料名称 */ + @Excel(name = "原料名称") + private String materialName; + + /** 比例 */ + @Excel(name = "比例") + private Long ratio; + + /** 颗粒原料 */ + @Excel(name = "颗粒原料") + private String isGranular; + + /** 补饲 */ + @Excel(name = "补饲") + private String isSupplement; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("code", getCode()) + .append("formulaId", getFormulaId()) + .append("materialId", getMaterialId()) + .append("materialName", getMaterialName()) + .append("ratio", getRatio()) + .append("isGranular", getIsGranular()) + .append("isSupplement", getIsSupplement()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFormulaManagement.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFormulaManagement.java new file mode 100644 index 0000000..3fa8563 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFormulaManagement.java @@ -0,0 +1,79 @@ +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_formula_management + * + * @author HashMap + * @date 2025-08-09 + */ +@Setter +@Getter +public class SgFormulaManagement extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 配方编号 */ + private String formulaId; + + /** 饲养阶段 */ + @Excel(name = "饲养阶段") + private String feedStage; + + /** 批号 */ + @Excel(name = "批号") + private String batchId; + + /** 开始使用时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开始使用时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date useStartDate; + + /** 结束使用时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "结束使用时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date useEndDate; + + /** 使用状态 */ + @Excel(name = "使用状态") + private String useState; + + /** 备注 */ + @Excel(name = "备注") + private String remark; + + /** 配方列表 */ + private List sgFormulaList; + + /** 子配方 */ + private List subFormulaList; + + /** 查询类型 * + * Sub : 子配方查询 + * query : 类型查询 + * */ + private String queryType; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("formulaId", getFormulaId()) + .append("feedStage", getFeedStage()) + .append("batchId", getBatchId()) + .append("useStartDate", getUseStartDate()) + .append("useEndDate", getUseEndDate()) + .append("useState", getUseState()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgMaterial.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgMaterial.java new file mode 100644 index 0000000..a9634be --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgMaterial.java @@ -0,0 +1,15 @@ +package com.zhyc.module.feed.domain; + +import com.zhyc.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class SgMaterial extends BaseEntity { + private static final long serialVersionUID = 1L; + + private String materialId; + private String materialName; + private String isGranular; +} 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 new file mode 100644 index 0000000..f475ae5 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedPlanMapper.java @@ -0,0 +1,66 @@ +package com.zhyc.module.feed.mapper; + +import java.util.Date; +import java.util.List; +import com.zhyc.module.feed.domain.SgFeedPlan; +import org.apache.ibatis.annotations.Mapper; + +/** + * 饲喂计划Mapper接口 + * + * @author HashMap + * @date 2025-08-14 + */ +@Mapper +public interface SgFeedPlanMapper +{ + /** + * 查询饲喂计划 + * + * @param createDate 饲喂计划主键 + * @return 饲喂计划 + */ + public SgFeedPlan selectSgFeedPlanByCreateDate(Date createDate); + + /** + * 查询饲喂计划列表 + * + * @param sgFeedPlan 饲喂计划 + * @return 饲喂计划集合 + */ + public List selectSgFeedPlanList(SgFeedPlan sgFeedPlan); + + /** + * 新增饲喂计划 + * + * @param sgFeedPlan 饲喂计划 + * @return 结果 + */ + public int insertSgFeedPlan(SgFeedPlan sgFeedPlan); + + /** + * 修改饲喂计划 + * + * @param sgFeedPlan 饲喂计划 + * @return 结果 + */ + public int updateSgFeedPlan(SgFeedPlan sgFeedPlan); + + /** + * 删除饲喂计划 + * + * @param createDate 饲喂计划主键 + * @return 结果 + */ + public int deleteSgFeedPlanByCreateDate(Date createDate); + + /** + * 批量删除饲喂计划 + * + * @param createDates 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSgFeedPlanByCreateDates(Date[] createDates); + + int selectSheepCountByFoldId(Integer foldId); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFormulaListMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFormulaListMapper.java new file mode 100644 index 0000000..4d13b9e --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFormulaListMapper.java @@ -0,0 +1,71 @@ +package com.zhyc.module.feed.mapper; + +import java.util.List; +import com.zhyc.module.feed.domain.SgFormulaList; +import org.apache.ibatis.annotations.Mapper; + +/** + * 配方列表Mapper接口 + * + * @author HashMap + * @date 2025-08-09 + */ +@Mapper +public interface SgFormulaListMapper +{ + /** + * 查询配方列表 + * + * @param code 配方列表主键 + * @return 配方列表 + */ + SgFormulaList selectSgFormulaListByCode(Long code); + + /** + * 查询配方列表列表 + * + * @param sgFormulaList 配方列表 + * @return 配方列表集合 + */ + List selectSgFormulaListList(SgFormulaList sgFormulaList); + + /** + * 新增配方列表 + * + * @param sgFormulaList 配方列表 + * @return 结果 + */ + int insertSgFormulaList(SgFormulaList sgFormulaList); + + /** + * 修改配方列表 + * + * @param sgFormulaList 配方列表 + * @return 结果 + */ + int updateSgFormulaList(SgFormulaList sgFormulaList); + + /** + * 删除配方列表 + * + * @param code 配方列表主键 + * @return 结果 + */ + int deleteSgFormulaListByCode(Long code); + + /** + * 批量删除配方列表 + * + * @param codes 需要删除的数据主键集合 + * @return 结果 + */ + int deleteSgFormulaListByCodes(Long[] codes); + + /** + * 批量删除配方列表 + * + * @param sgFormulaList 参数实体 + * @return 结果 + */ + int deleteSgFormulaListByFormulaIdAndBatchId(SgFormulaList sgFormulaList); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFormulaManagementMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFormulaManagementMapper.java new file mode 100644 index 0000000..ff782e9 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFormulaManagementMapper.java @@ -0,0 +1,65 @@ +package com.zhyc.module.feed.mapper; + +import java.util.List; +import com.zhyc.module.feed.domain.SgFormulaManagement; +import org.apache.ibatis.annotations.Mapper; + +/** + * 配方管理Mapper接口 + * + * @author HashMap + * @date 2025-08-09 + */ +@Mapper +public interface SgFormulaManagementMapper +{ + /** + * 查询配方管理 + * + * @param formulaId 配方管理主键 + * @return 配方管理 + */ + SgFormulaManagement selectSgFormulaManagementByFormulaId(String formulaId); + + /** + * 查询配方管理列表 + * + * @param sgFormulaManagement 配方管理 + * @return 配方管理集合 + */ + List selectSgFormulaManagementList(SgFormulaManagement sgFormulaManagement); + + /** + * 新增配方管理 + * + * @param sgFormulaManagement 配方管理 + * @return 结果 + */ + int insertSgFormulaManagement(SgFormulaManagement sgFormulaManagement); + + /** + * 修改配方管理 + * + * @param sgFormulaManagement 配方管理 + * @return 结果 + */ + int updateSgFormulaManagement(SgFormulaManagement sgFormulaManagement); + + /** + * 删除配方管理 + * + * @param formulaId 配方管理主键 + * @return 结果 + */ + int deleteSgFormulaManagementByFormulaId(String formulaId); + + /** + * 批量删除配方管理 + * + * @param formulaIds 需要删除的数据主键集合 + * @return 结果 + */ + int deleteSgFormulaManagementByFormulaIds(String[] formulaIds); + + int deleteSgFormulaManagement(SgFormulaManagement sgFormulaManagement); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgMaterialMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgMaterialMapper.java new file mode 100644 index 0000000..a7a3d70 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgMaterialMapper.java @@ -0,0 +1,63 @@ +package com.zhyc.module.feed.mapper; + +import java.util.List; +import com.zhyc.module.feed.domain.SgMaterial; +import org.apache.ibatis.annotations.Mapper; + +/** + * 原料Mapper接口 + * + * @author HashMap + * @date 2025-08-11 + */ +@Mapper +public interface SgMaterialMapper +{ + /** + * 查询原料 + * + * @param materialId 原料主键 + * @return 原料 + */ + public SgMaterial selectSgMaterialByMaterialId(String materialId); + + /** + * 查询原料列表 + * + * @param sgMaterial 原料 + * @return 原料集合 + */ + public List selectSgMaterialList(SgMaterial sgMaterial); + + /** + * 新增原料 + * + * @param sgMaterial 原料 + * @return 结果 + */ + public int insertSgMaterial(SgMaterial sgMaterial); + + /** + * 修改原料 + * + * @param sgMaterial 原料 + * @return 结果 + */ + public int updateSgMaterial(SgMaterial sgMaterial); + + /** + * 删除原料 + * + * @param materialId 原料主键 + * @return 结果 + */ + public int deleteSgMaterialByMaterialId(String materialId); + + /** + * 批量删除原料 + * + * @param materialIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSgMaterialByMaterialIds(String[] materialIds); +} 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..b293d84 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedListService.java @@ -0,0 +1,61 @@ +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); +} 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 new file mode 100644 index 0000000..6ab5cf3 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFeedPlanService.java @@ -0,0 +1,64 @@ +package com.zhyc.module.feed.service; + +import java.util.Date; +import java.util.List; +import com.zhyc.module.feed.domain.SgFeedPlan; + +/** + * 饲喂计划Service接口 + * + * @author HashMap + * @date 2025-08-14 + */ +public interface ISgFeedPlanService +{ + /** + * 查询饲喂计划 + * + * @param createDate 饲喂计划主键 + * @return 饲喂计划 + */ + public SgFeedPlan selectSgFeedPlanByCreateDate(Date createDate); + + /** + * 查询饲喂计划列表 + * + * @param sgFeedPlan 饲喂计划 + * @return 饲喂计划集合 + */ + public List selectSgFeedPlanList(SgFeedPlan sgFeedPlan); + + /** + * 新增饲喂计划 + * + * @param sgFeedPlan 饲喂计划 + * @return 结果 + */ + public int insertSgFeedPlan(SgFeedPlan sgFeedPlan); + + /** + * 修改饲喂计划 + * + * @param sgFeedPlan 饲喂计划 + * @return 结果 + */ + public int updateSgFeedPlan(SgFeedPlan sgFeedPlan); + + /** + * 批量删除饲喂计划 + * + * @param createDates 需要删除的饲喂计划主键集合 + * @return 结果 + */ + public int deleteSgFeedPlanByCreateDates(Date[] createDates); + + /** + * 删除饲喂计划信息 + * + * @param createDate 饲喂计划主键 + * @return 结果 + */ + public int deleteSgFeedPlanByCreateDate(Date createDate); + + int getSheepCountByFoldId(Integer foldId); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFormulaListService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFormulaListService.java new file mode 100644 index 0000000..288308d --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFormulaListService.java @@ -0,0 +1,63 @@ +package com.zhyc.module.feed.service; + +import java.util.List; +import com.zhyc.module.feed.domain.SgFormulaList; + +/** + * 配方列表Service接口 + * + * @author HashMap + * @date 2025-08-09 + */ +public interface ISgFormulaListService +{ + /** + * 查询配方列表 + * + * @param code 配方列表主键 + * @return 配方列表 + */ + SgFormulaList selectSgFormulaListByCode(Long code); + + /** + * 查询配方列表列表 + * + * @param sgFormulaList 配方列表 + * @return 配方列表集合 + */ + List selectSgFormulaListList(SgFormulaList sgFormulaList); + + /** + * 新增配方列表 + * + * @param sgFormulaList 配方列表 + * @return 结果 + */ + int insertSgFormulaList(SgFormulaList sgFormulaList); + + /** + * 修改配方列表 + * + * @param sgFormulaList 配方列表 + * @return 结果 + */ + int updateSgFormulaList(SgFormulaList sgFormulaList); + + /** + * 批量删除配方列表 + * + * @param codes 需要删除的配方列表主键集合 + * @return 结果 + */ + int deleteSgFormulaListByCodes(Long[] codes); + + /** + * 删除配方列表信息 + * + * @param code 配方列表主键 + * @return 结果 + */ + int deleteSgFormulaListByCode(Long code); + + int deleteSgFormulaListByFormulaIdAndBatchId(SgFormulaList sgFormulaList); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFormulaManagementService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFormulaManagementService.java new file mode 100644 index 0000000..55d0156 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgFormulaManagementService.java @@ -0,0 +1,66 @@ +package com.zhyc.module.feed.service; + +import java.util.List; +import com.zhyc.module.feed.domain.SgFormulaManagement; + +/** + * 配方管理Service接口 + * + * @author HashMap + * @date 2025-08-09 + */ +public interface ISgFormulaManagementService +{ + /** + * 查询配方管理 + * + * @param formulaId 配方管理主键 + * @return 配方管理 + */ + SgFormulaManagement selectSgFormulaManagementByFormulaId(String formulaId); + + /** + * 查询配方管理列表 + * + * @param sgFormulaManagement 配方管理 + * @return 配方管理集合 + */ + List selectSgFormulaManagementList(SgFormulaManagement sgFormulaManagement); + + /** + * 新增配方管理 + * + * @param sgFormulaManagement 配方管理 + * @return 结果 + */ + int insertSgFormulaManagement(SgFormulaManagement sgFormulaManagement); + + /** + * 修改配方管理 + * + * @param sgFormulaManagement 配方管理 + * @return 结果 + */ + int updateSgFormulaManagement(SgFormulaManagement sgFormulaManagement); + + /** + * 批量删除配方管理 + * + * @param formulaIds 需要删除的配方管理主键集合 + * @return 结果 + */ + int deleteSgFormulaManagementByFormulaIds(String[] formulaIds); + + /** + * 删除配方管理信息 + * + * @param formulaId 配方管理主键 + * @return 结果 + */ + int deleteSgFormulaManagementByFormulaId(String formulaId); + + /*** + * 删除配方管理信息 + */ + int deleteSgFormulaManagement(SgFormulaManagement sgFormulaManagement); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgMaterialService.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgMaterialService.java new file mode 100644 index 0000000..ba1e6ac --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/ISgMaterialService.java @@ -0,0 +1,61 @@ +package com.zhyc.module.feed.service; + +import java.util.List; +import com.zhyc.module.feed.domain.SgMaterial; + +/** + * 原料Service接口 + * + * @author HashMap + * @date 2025-08-11 + */ +public interface ISgMaterialService +{ + /** + * 查询原料 + * + * @param materialId 原料主键 + * @return 原料 + */ + SgMaterial selectSgMaterialByMaterialId(String materialId); + + /** + * 查询原料列表 + * + * @param sgMaterial 原料 + * @return 原料集合 + */ + List selectSgMaterialList(SgMaterial sgMaterial); + + /** + * 新增原料 + * + * @param sgMaterial 原料 + * @return 结果 + */ + int insertSgMaterial(SgMaterial sgMaterial); + + /** + * 修改原料 + * + * @param sgMaterial 原料 + * @return 结果 + */ + int updateSgMaterial(SgMaterial sgMaterial); + + /** + * 批量删除原料 + * + * @param materialIds 需要删除的原料主键集合 + * @return 结果 + */ + int deleteSgMaterialByMaterialIds(String[] materialIds); + + /** + * 删除原料信息 + * + * @param materialId 原料主键 + * @return 结果 + */ + int deleteSgMaterialByMaterialId(String materialId); +} 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..704d45d --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedListServiceImpl.java @@ -0,0 +1,96 @@ +package com.zhyc.module.feed.service.impl; + +import java.util.List; + +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; + + public SgFeedListServiceImpl(SgFeedListMapper sgFeedListMapper) { + this.sgFeedListMapper = sgFeedListMapper; + } + + /** + * 查询配料清单 + * + * @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); + } +} 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 new file mode 100644 index 0000000..79bcfcc --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedPlanServiceImpl.java @@ -0,0 +1,104 @@ +package com.zhyc.module.feed.service.impl; + +import java.util.Date; +import java.util.List; + +import org.springframework.stereotype.Service; +import com.zhyc.module.feed.mapper.SgFeedPlanMapper; +import com.zhyc.module.feed.domain.SgFeedPlan; +import com.zhyc.module.feed.service.ISgFeedPlanService; +import org.springframework.transaction.annotation.Transactional; + +/** + * 饲喂计划Service业务层处理 + * + * @author HashMap + * @date 2025-08-14 + */ +@Service +@Transactional(rollbackFor=Exception.class) +public class SgFeedPlanServiceImpl implements ISgFeedPlanService +{ + private final SgFeedPlanMapper sgFeedPlanMapper; + + public SgFeedPlanServiceImpl(SgFeedPlanMapper sgFeedPlanMapper) { + this.sgFeedPlanMapper = sgFeedPlanMapper; + } + + /** + * 查询饲喂计划 + * + * @param createDate 饲喂计划主键 + * @return 饲喂计划 + */ + @Override + public SgFeedPlan selectSgFeedPlanByCreateDate(Date createDate) + { + return sgFeedPlanMapper.selectSgFeedPlanByCreateDate(createDate); + } + + /** + * 查询饲喂计划列表 + * + * @param sgFeedPlan 饲喂计划 + * @return 饲喂计划 + */ + @Override + public List selectSgFeedPlanList(SgFeedPlan sgFeedPlan) + { + return sgFeedPlanMapper.selectSgFeedPlanList(sgFeedPlan); + } + + /** + * 新增饲喂计划 + * + * @param sgFeedPlan 饲喂计划 + * @return 结果 + */ + @Override + public int insertSgFeedPlan(SgFeedPlan sgFeedPlan) + { + return sgFeedPlanMapper.insertSgFeedPlan(sgFeedPlan); + } + + /** + * 修改饲喂计划 + * + * @param sgFeedPlan 饲喂计划 + * @return 结果 + */ + @Override + public int updateSgFeedPlan(SgFeedPlan sgFeedPlan) + { + return sgFeedPlanMapper.updateSgFeedPlan(sgFeedPlan); + } + + /** + * 批量删除饲喂计划 + * + * @param createDates 需要删除的饲喂计划主键 + * @return 结果 + */ + @Override + public int deleteSgFeedPlanByCreateDates(Date[] createDates) + { + return sgFeedPlanMapper.deleteSgFeedPlanByCreateDates(createDates); + } + + /** + * 删除饲喂计划信息 + * + * @param createDate 饲喂计划主键 + * @return 结果 + */ + @Override + public int deleteSgFeedPlanByCreateDate(Date createDate) + { + 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/SgFormulaListServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFormulaListServiceImpl.java new file mode 100644 index 0000000..320a9d3 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFormulaListServiceImpl.java @@ -0,0 +1,96 @@ +package com.zhyc.module.feed.service.impl; + +import java.util.List; + +import org.springframework.stereotype.Service; +import com.zhyc.module.feed.mapper.SgFormulaListMapper; +import com.zhyc.module.feed.domain.SgFormulaList; +import com.zhyc.module.feed.service.ISgFormulaListService; +import org.springframework.transaction.annotation.Transactional; + +/** + * 配方列表Service业务层处理 + * + * @author HashMap + * @date 2025-08-09 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class SgFormulaListServiceImpl implements ISgFormulaListService { + private final SgFormulaListMapper sgFormulaListMapper; + + public SgFormulaListServiceImpl(SgFormulaListMapper sgFormulaListMapper) { + this.sgFormulaListMapper = sgFormulaListMapper; + } + + /** + * 查询配方列表 + * + * @param code 配方列表主键 + * @return 配方列表 + */ + @Override + public SgFormulaList selectSgFormulaListByCode(Long code) { + return sgFormulaListMapper.selectSgFormulaListByCode(code); + } + + /** + * 查询配方列表列表 + * + * @param sgFormulaList 配方列表 + * @return 配方列表 + */ + @Override + public List selectSgFormulaListList(SgFormulaList sgFormulaList) { + return sgFormulaListMapper.selectSgFormulaListList(sgFormulaList); + } + + /** + * 新增配方列表 + * + * @param sgFormulaList 配方列表 + * @return 结果 + */ + @Override + public int insertSgFormulaList(SgFormulaList sgFormulaList) { + return sgFormulaListMapper.insertSgFormulaList(sgFormulaList); + } + + /** + * 修改配方列表 + * + * @param sgFormulaList 配方列表 + * @return 结果 + */ + @Override + public int updateSgFormulaList(SgFormulaList sgFormulaList) { + return sgFormulaListMapper.updateSgFormulaList(sgFormulaList); + } + + /** + * 批量删除配方列表 + * + * @param codes 需要删除的配方列表主键 + * @return 结果 + */ + @Override + public int deleteSgFormulaListByCodes(Long[] codes) { + return sgFormulaListMapper.deleteSgFormulaListByCodes(codes); + } + + /** + * 删除配方列表信息 + * + * @param code 配方列表主键 + * @return 结果 + */ + @Override + public int deleteSgFormulaListByCode(Long code) { + return sgFormulaListMapper.deleteSgFormulaListByCode(code); + } + + @Override + public int deleteSgFormulaListByFormulaIdAndBatchId(SgFormulaList sgFormulaList) { + return sgFormulaListMapper.deleteSgFormulaListByFormulaIdAndBatchId(sgFormulaList); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFormulaManagementServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFormulaManagementServiceImpl.java new file mode 100644 index 0000000..b07028f --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFormulaManagementServiceImpl.java @@ -0,0 +1,135 @@ +package com.zhyc.module.feed.service.impl; + +import java.util.Iterator; +import java.util.List; +import java.util.Objects; + +import com.zhyc.module.feed.domain.SgFormulaList; +import com.zhyc.module.feed.mapper.SgFormulaListMapper; +import org.springframework.stereotype.Service; +import com.zhyc.module.feed.mapper.SgFormulaManagementMapper; +import com.zhyc.module.feed.domain.SgFormulaManagement; +import com.zhyc.module.feed.service.ISgFormulaManagementService; +import org.springframework.transaction.annotation.Transactional; + +/** + * 配方管理Service业务层处理 + * + * @author HashMap + * @date 2025-08-09 + */ +@Service +public class SgFormulaManagementServiceImpl implements ISgFormulaManagementService { + private final SgFormulaManagementMapper sgFormulaManagementMapper; + private final SgFormulaListMapper sgFormulaListMapper; + + public SgFormulaManagementServiceImpl(SgFormulaManagementMapper sgFormulaManagementMapper, SgFormulaListMapper sgFormulaListMapper) { + this.sgFormulaManagementMapper = sgFormulaManagementMapper; + this.sgFormulaListMapper = sgFormulaListMapper; + } + + /** + * 查询配方管理 + * + * @param formulaId 配方管理主键 + * @return 配方管理 + */ + @Override + public SgFormulaManagement selectSgFormulaManagementByFormulaId(String formulaId) { + return sgFormulaManagementMapper.selectSgFormulaManagementByFormulaId(formulaId); + } + + /** + * 查询配方管理列表 + * + * @param sgFormulaManagement 配方管理 + * @return 配方管理 + */ + @Override + public List selectSgFormulaManagementList(SgFormulaManagement sgFormulaManagement) { + List sgFormulaManagements = + sgFormulaManagementMapper.selectSgFormulaManagementList(sgFormulaManagement); + + Iterator iterator = sgFormulaManagements.iterator(); + while (iterator.hasNext()) { + SgFormulaManagement formulaManagement = iterator.next(); + // 子查询中去除重复的父项 + if (formulaManagement != null + && sgFormulaManagement.getQueryType() != null + && sgFormulaManagement.getQueryType().equals("Sub") + && Objects.equals(formulaManagement.getBatchId(), "0")) { + iterator.remove(); // 安全删除 + continue; // 删除后跳过本次循环 + } + // 绑定配方列表 + if (formulaManagement != null + && formulaManagement.getFormulaId() != null + && formulaManagement.getBatchId() != null) { + SgFormulaList sgFormulaList = new SgFormulaList(); + sgFormulaList.setFormulaId(formulaManagement.getFormulaId()); + sgFormulaList.setBatchId(formulaManagement.getBatchId()); + List formulaLists = + sgFormulaListMapper.selectSgFormulaListList(sgFormulaList); + formulaManagement.setSgFormulaList(formulaLists); + } + } + + return sgFormulaManagements; + } + + + /** + * 新增配方管理 + * + * @param sgFormulaManagement 配方管理 + * @return 结果 + */ + @Override + public int insertSgFormulaManagement(SgFormulaManagement sgFormulaManagement) { + return sgFormulaManagementMapper.insertSgFormulaManagement(sgFormulaManagement); + } + + /** + * 修改配方管理 + * + * @param sgFormulaManagement 配方管理 + * @return 结果 + */ + @Override + public int updateSgFormulaManagement(SgFormulaManagement sgFormulaManagement) { + return sgFormulaManagementMapper.updateSgFormulaManagement(sgFormulaManagement); + } + + /** + * 批量删除配方管理 + * + * @param formulaIds 需要删除的配方管理主键 + * @return 结果 + */ + @Override + public int deleteSgFormulaManagementByFormulaIds(String[] formulaIds) { + return sgFormulaManagementMapper.deleteSgFormulaManagementByFormulaIds(formulaIds); + } + + /** + * 删除配方管理信息 + * + * @param formulaId 配方管理主键 + * @return 结果 + */ + @Override + public int deleteSgFormulaManagementByFormulaId(String formulaId) { + return sgFormulaManagementMapper.deleteSgFormulaManagementByFormulaId(formulaId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteSgFormulaManagement(SgFormulaManagement sgFormulaManagement) { + // 删除关联配方表 + SgFormulaList sgFormulaList = new SgFormulaList(); + sgFormulaList.setFormulaId(sgFormulaManagement.getFormulaId()); + sgFormulaList.setBatchId(sgFormulaManagement.getBatchId()); + sgFormulaListMapper.deleteSgFormulaListByFormulaIdAndBatchId(sgFormulaList); + return sgFormulaManagementMapper.deleteSgFormulaManagement(sgFormulaManagement); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgMaterialServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgMaterialServiceImpl.java new file mode 100644 index 0000000..b858ae3 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgMaterialServiceImpl.java @@ -0,0 +1,96 @@ +package com.zhyc.module.feed.service.impl; + +import java.util.List; + +import org.springframework.stereotype.Service; +import com.zhyc.module.feed.mapper.SgMaterialMapper; +import com.zhyc.module.feed.domain.SgMaterial; +import com.zhyc.module.feed.service.ISgMaterialService; + +/** + * 原料Service业务层处理 + * + * @author HashMap + * @date 2025-08-11 + */ +@Service +public class SgMaterialServiceImpl implements ISgMaterialService +{ + private final SgMaterialMapper sgMaterialMapper; + + public SgMaterialServiceImpl(SgMaterialMapper sgMaterialMapper) { + this.sgMaterialMapper = sgMaterialMapper; + } + + /** + * 查询原料 + * + * @param materialId 原料主键 + * @return 原料 + */ + @Override + public SgMaterial selectSgMaterialByMaterialId(String materialId) + { + return sgMaterialMapper.selectSgMaterialByMaterialId(materialId); + } + + /** + * 查询原料列表 + * + * @param sgMaterial 原料 + * @return 原料 + */ + @Override + public List selectSgMaterialList(SgMaterial sgMaterial) + { + return sgMaterialMapper.selectSgMaterialList(sgMaterial); + } + + /** + * 新增原料 + * + * @param sgMaterial 原料 + * @return 结果 + */ + @Override + public int insertSgMaterial(SgMaterial sgMaterial) + { + return sgMaterialMapper.insertSgMaterial(sgMaterial); + } + + /** + * 修改原料 + * + * @param sgMaterial 原料 + * @return 结果 + */ + @Override + public int updateSgMaterial(SgMaterial sgMaterial) + { + return sgMaterialMapper.updateSgMaterial(sgMaterial); + } + + /** + * 批量删除原料 + * + * @param materialIds 需要删除的原料主键 + * @return 结果 + */ + @Override + public int deleteSgMaterialByMaterialIds(String[] materialIds) + { + return sgMaterialMapper.deleteSgMaterialByMaterialIds(materialIds); + } + + /** + * 删除原料信息 + * + * @param materialId 原料主键 + * @return 结果 + */ + @Override + public int deleteSgMaterialByMaterialId(String materialId) + { + return sgMaterialMapper.deleteSgMaterialByMaterialId(materialId); + } +} 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/ScSheepDeathController.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScSheepDeathController.java new file mode 100644 index 0000000..cbd1964 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/controller/ScSheepDeathController.java @@ -0,0 +1,120 @@ +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.ScSheepDeath; +import com.zhyc.module.produce.breed.service.IScSheepDeathService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; + +/** + * 羊只死淘记录Controller + * + * @author ruoyi + * @date 2025-08-06 + */ +@RestController +@RequestMapping("/sheep_death/death") +public class ScSheepDeathController extends BaseController +{ + @Autowired + private IScSheepDeathService scSheepDeathService; + + /** + * 查询羊只死淘记录列表 + */ + @PreAuthorize("@ss.hasPermi('sheep_death:death:list')") + @GetMapping("/list") + public TableDataInfo list(ScSheepDeath scSheepDeath) + { + startPage(); + List list = scSheepDeathService.selectScSheepDeathList(scSheepDeath); + return getDataTable(list); + } + + /** + * 根据管理耳号查询羊只信息 + */ + @PreAuthorize("@ss.hasPermi('sheep_death:death:query')") + @GetMapping("/sheepInfo/{manageTags}") + public AjaxResult getSheepInfo(@PathVariable("manageTags") String manageTags) + { + Map sheepInfo = scSheepDeathService.selectSheepFileByManageTags(manageTags); + if (sheepInfo != null) { + return success(sheepInfo); + } else { + return error("未找到该耳号对应的羊只信息"); + } + } + + /** + * 导出羊只死淘记录列表 + */ + @PreAuthorize("@ss.hasPermi('sheep_death:death:export')") + @Log(title = "羊只死淘记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ScSheepDeath scSheepDeath) + { + List list = scSheepDeathService.selectScSheepDeathList(scSheepDeath); + ExcelUtil util = new ExcelUtil(ScSheepDeath.class); + util.exportExcel(response, list, "羊只死淘记录数据"); + } + + /** + * 获取羊只死淘记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('sheep_death:death:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(scSheepDeathService.selectScSheepDeathById(id)); + } + + /** + * 新增羊只死淘记录 + */ + @PreAuthorize("@ss.hasPermi('sheep_death:death:add')") + @Log(title = "羊只死淘记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ScSheepDeath scSheepDeath) + { + return toAjax(scSheepDeathService.insertScSheepDeath(scSheepDeath)); + } + + /** + * 修改羊只死淘记录 + */ + @PreAuthorize("@ss.hasPermi('sheep_death:death:edit')") + @Log(title = "羊只死淘记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ScSheepDeath scSheepDeath) + { + return toAjax(scSheepDeathService.updateScSheepDeath(scSheepDeath)); + } + + /** + * 删除羊只死淘记录 + */ + @PreAuthorize("@ss.hasPermi('sheep_death:death:remove')") + @Log(title = "羊只死淘记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(scSheepDeathService.deleteScSheepDeathByIds(ids)); + } +} \ 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/ScPregnancyRecord.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScPregnancyRecord.java index f02d38f..41bcb5c 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; diff --git a/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScSheepDeath.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScSheepDeath.java new file mode 100644 index 0000000..52f04dd --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/domain/ScSheepDeath.java @@ -0,0 +1,356 @@ +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_sheep_death + * + * @author ruoyi + * @date 2025-08-06 + */ +public class ScSheepDeath extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** 羊只ID */ + @Excel(name = "羊只ID") + private Long sheepId; + + /** 管理耳号 */ + @Excel(name = "管理耳号") + private String manageTags; + + /** 事件类型 */ + @Excel(name = "事件类型") + private String eventType; + + /** 死亡日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "死亡日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date deathDate; + + /** 疾病类型ID */ + @Excel(name = "疾病类型ID") + private Long diseaseTypeId; + + /** 疾病子类型ID */ + @Excel(name = "疾病子类型ID") + private Long diseaseSubtypeId; + + /** 死淘去向 */ + @Excel(name = "死淘去向") + private String disposalDirection; + + /** 技术员 */ + @Excel(name = "技术员") + private String technician; + + /** 处理人 */ + @Excel(name = "处理人") + private String handler; + + /** 班组 */ + @Excel(name = "班组") + private String workGroup; + + /** 备注 */ + @Excel(name = "备注") + private String comment; + + /** 是否删除(0:未删除 1:已删除) */ + @Excel(name = "是否删除(0:未删除 1:已删除)") + private Long isDelete; + + // 以下字段仅用于前端显示,不存储到数据库 + /** 品种 */ + private String variety; + + /** 死亡时羊只类别 */ + private String sheepType; + + /** 性别 */ + private Integer gender; + + /** 日龄 */ + private Long dayAge; + + /** 胎次 */ + private Integer parity; + + /** 羊舍 */ + private String sheepfoldName; + + /** 繁育状态 */ + private String breedStatus; + + /** 死亡时产后天数 */ + private Integer postLambingDay; + + /** 死亡时泌乳天数 */ + private Integer lactationDay; + + /** 死亡时怀孕天数 */ + private Integer gestationDay; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public void setSheepId(Long sheepId) + { + this.sheepId = sheepId; + } + + public Long getSheepId() + { + return sheepId; + } + + public void setManageTags(String manageTags) + { + this.manageTags = manageTags; + } + + public String getManageTags() + { + return manageTags; + } + + public void setEventType(String eventType) + { + this.eventType = eventType; + } + + public String getEventType() + { + return eventType; + } + + public void setDeathDate(Date deathDate) + { + this.deathDate = deathDate; + } + + public Date getDeathDate() + { + return deathDate; + } + + public void setDiseaseTypeId(Long diseaseTypeId) + { + this.diseaseTypeId = diseaseTypeId; + } + + public Long getDiseaseTypeId() + { + return diseaseTypeId; + } + + public void setDiseaseSubtypeId(Long diseaseSubtypeId) + { + this.diseaseSubtypeId = diseaseSubtypeId; + } + + public Long getDiseaseSubtypeId() + { + return diseaseSubtypeId; + } + + public void setDisposalDirection(String disposalDirection) + { + this.disposalDirection = disposalDirection; + } + + public String getDisposalDirection() + { + return disposalDirection; + } + + public void setTechnician(String technician) + { + this.technician = technician; + } + + public String getTechnician() + { + return technician; + } + + public void setHandler(String handler) + { + this.handler = handler; + } + + public String getHandler() + { + return handler; + } + + public void setWorkGroup(String workGroup) + { + this.workGroup = workGroup; + } + + public String getWorkGroup() + { + return workGroup; + } + + public void setComment(String comment) + { + this.comment = comment; + } + + public String getComment() + { + return comment; + } + + public void setIsDelete(Long isDelete) + { + this.isDelete = isDelete; + } + + public Long getIsDelete() + { + return isDelete; + } + + // 以下为仅用于显示的字段的getter/setter + public void setVariety(String variety) + { + this.variety = variety; + } + + public String getVariety() + { + return variety; + } + + public void setSheepType(String sheepType) + { + this.sheepType = sheepType; + } + + public String getSheepType() + { + return sheepType; + } + + public void setGender(Integer gender) + { + this.gender = gender; + } + + public Integer getGender() + { + return gender; + } + + public void setDayAge(Long dayAge) + { + this.dayAge = dayAge; + } + + public Long getDayAge() + { + return dayAge; + } + + public void setParity(Integer parity) + { + this.parity = parity; + } + + public Integer getParity() + { + return parity; + } + + public void setSheepfoldName(String sheepfoldName) + { + this.sheepfoldName = sheepfoldName; + } + + public String getSheepfoldName() + { + return sheepfoldName; + } + + public void setBreedStatus(String breedStatus) + { + this.breedStatus = breedStatus; + } + + public String getBreedStatus() + { + return breedStatus; + } + + public void setPostLambingDay(Integer postLambingDay) + { + this.postLambingDay = postLambingDay; + } + + public Integer getPostLambingDay() + { + return postLambingDay; + } + + public void setLactationDay(Integer lactationDay) + { + this.lactationDay = lactationDay; + } + + public Integer getLactationDay() + { + return lactationDay; + } + + public void setGestationDay(Integer gestationDay) + { + this.gestationDay = gestationDay; + } + + public Integer getGestationDay() + { + return gestationDay; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("sheepId", getSheepId()) + .append("manageTags", getManageTags()) + .append("eventType", getEventType()) + .append("deathDate", getDeathDate()) + .append("diseaseTypeId", getDiseaseTypeId()) + .append("diseaseSubtypeId", getDiseaseSubtypeId()) + .append("disposalDirection", getDisposalDirection()) + .append("technician", getTechnician()) + .append("handler", getHandler()) + .append("workGroup", getWorkGroup()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("comment", getComment()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("isDelete", getIsDelete()) + .toString(); + } +} \ 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/ScSheepDeathMapper.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScSheepDeathMapper.java new file mode 100644 index 0000000..980d20d --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/mapper/ScSheepDeathMapper.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.ScSheepDeath; + +/** + * 羊只死淘记录Mapper接口 + * + * @author ruoyi + * @date 2025-08-06 + */ +public interface ScSheepDeathMapper +{ + /** + * 查询羊只死淘记录 + * + * @param id 羊只死淘记录主键 + * @return 羊只死淘记录 + */ + public ScSheepDeath selectScSheepDeathById(Long id); + + /** + * 查询羊只死淘记录列表 + * + * @param scSheepDeath 羊只死淘记录 + * @return 羊只死淘记录集合 + */ + public List selectScSheepDeathList(ScSheepDeath scSheepDeath); + + /** + * 根据管理耳号查询sheep_file视图信息 + * + * @param manageTags 管理耳号 + * @return 羊只信息 + */ + public Map selectSheepFileByManageTags(String manageTags); + + /** + * 新增羊只死淘记录 + * + * @param scSheepDeath 羊只死淘记录 + * @return 结果 + */ + public int insertScSheepDeath(ScSheepDeath scSheepDeath); + + /** + * 修改羊只死淘记录 + * + * @param scSheepDeath 羊只死淘记录 + * @return 结果 + */ + public int updateScSheepDeath(ScSheepDeath scSheepDeath); + + /** + * 删除羊只死淘记录 + * + * @param id 羊只死淘记录主键 + * @return 结果 + */ + public int deleteScSheepDeathById(Long id); + + /** + * 批量删除羊只死淘记录 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteScSheepDeathByIds(Long[] ids); +} \ 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/IScSheepDeathService.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScSheepDeathService.java new file mode 100644 index 0000000..e1100d5 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/IScSheepDeathService.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.ScSheepDeath; + +/** + * 羊只死淘记录Service接口 + * + * @author ruoyi + * @date 2025-08-06 + */ +public interface IScSheepDeathService +{ + /** + * 查询羊只死淘记录 + * + * @param id 羊只死淘记录主键 + * @return 羊只死淘记录 + */ + public ScSheepDeath selectScSheepDeathById(Long id); + + /** + * 查询羊只死淘记录列表 + * + * @param scSheepDeath 羊只死淘记录 + * @return 羊只死淘记录集合 + */ + public List selectScSheepDeathList(ScSheepDeath scSheepDeath); + + /** + * 根据管理耳号查询sheep_file视图信息 + * + * @param manageTags 管理耳号 + * @return 羊只信息 + */ + public Map selectSheepFileByManageTags(String manageTags); + + /** + * 新增羊只死淘记录 + * + * @param scSheepDeath 羊只死淘记录 + * @return 结果 + */ + public int insertScSheepDeath(ScSheepDeath scSheepDeath); + + /** + * 修改羊只死淘记录 + * + * @param scSheepDeath 羊只死淘记录 + * @return 结果 + */ + public int updateScSheepDeath(ScSheepDeath scSheepDeath); + + /** + * 批量删除羊只死淘记录 + * + * @param ids 需要删除的羊只死淘记录主键集合 + * @return 结果 + */ + public int deleteScSheepDeathByIds(Long[] ids); + + /** + * 删除羊只死淘记录信息 + * + * @param id 羊只死淘记录主键 + * @return 结果 + */ + public int deleteScSheepDeathById(Long id); +} \ 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/ScPregnancyRecordServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScPregnancyRecordServiceImpl.java index dde2c3d..5c329c6 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,7 +3,6 @@ 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; 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 new file mode 100644 index 0000000..12e7afd --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/produce/breed/service/impl/ScSheepDeathServiceImpl.java @@ -0,0 +1,166 @@ +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.ScSheepDeathMapper; +import com.zhyc.module.produce.breed.domain.ScSheepDeath; +import com.zhyc.module.produce.breed.service.IScSheepDeathService; + +/** + * 羊只死淘记录Service业务层处理 + * + * @author ruoyi + * @date 2025-08-06 + */ +@Service +public class ScSheepDeathServiceImpl implements IScSheepDeathService +{ + @Autowired + private ScSheepDeathMapper scSheepDeathMapper; + + /** + * 查询羊只死淘记录 + * + * @param id 羊只死淘记录主键 + * @return 羊只死淘记录 + */ + @Override + public ScSheepDeath selectScSheepDeathById(Long id) + { + ScSheepDeath scSheepDeath = scSheepDeathMapper.selectScSheepDeathById(id); + // 查询时也需要填充显示字段 + if (scSheepDeath != null && scSheepDeath.getManageTags() != null) { + Map sheepInfo = selectSheepFileByManageTags(scSheepDeath.getManageTags()); + if (sheepInfo != null) { + scSheepDeath.setVariety(sheepInfo.get("variety") != null ? sheepInfo.get("variety").toString() : null); + scSheepDeath.setSheepType(sheepInfo.get("sheepType") != null ? sheepInfo.get("sheepType").toString() : null); + scSheepDeath.setGender(sheepInfo.get("gender") != null ? Integer.valueOf(sheepInfo.get("gender").toString()) : null); + scSheepDeath.setDayAge(sheepInfo.get("dayAge") != null ? Long.valueOf(sheepInfo.get("dayAge").toString()) : null); + scSheepDeath.setParity(sheepInfo.get("parity") != null ? Integer.valueOf(sheepInfo.get("parity").toString()) : null); + scSheepDeath.setSheepfoldName(sheepInfo.get("sheepfoldName") != null ? sheepInfo.get("sheepfoldName").toString() : null); + scSheepDeath.setBreedStatus(sheepInfo.get("breedStatus") != null ? sheepInfo.get("breedStatus").toString() : null); + scSheepDeath.setPostLambingDay(sheepInfo.get("postLambingDay") != null ? Integer.valueOf(sheepInfo.get("postLambingDay").toString()) : null); + scSheepDeath.setLactationDay(sheepInfo.get("lactationDay") != null ? Integer.valueOf(sheepInfo.get("lactationDay").toString()) : null); + scSheepDeath.setGestationDay(sheepInfo.get("gestationDay") != null ? Integer.valueOf(sheepInfo.get("gestationDay").toString()) : null); + } + } + return scSheepDeath; + } + + /** + * 查询羊只死淘记录列表 + * + * @param scSheepDeath 羊只死淘记录 + * @return 羊只死淘记录 + */ + @Override + public List selectScSheepDeathList(ScSheepDeath scSheepDeath) + { + List list = scSheepDeathMapper.selectScSheepDeathList(scSheepDeath); + // 为列表中的每条记录填充显示字段 + for (ScSheepDeath death : list) { + if (death.getManageTags() != null) { + Map sheepInfo = selectSheepFileByManageTags(death.getManageTags()); + if (sheepInfo != null) { + death.setVariety(sheepInfo.get("variety") != null ? sheepInfo.get("variety").toString() : null); + death.setSheepType(sheepInfo.get("sheepType") != null ? sheepInfo.get("sheepType").toString() : null); + death.setGender(sheepInfo.get("gender") != null ? Integer.valueOf(sheepInfo.get("gender").toString()) : null); + death.setDayAge(sheepInfo.get("dayAge") != null ? Long.valueOf(sheepInfo.get("dayAge").toString()) : null); + death.setParity(sheepInfo.get("parity") != null ? Integer.valueOf(sheepInfo.get("parity").toString()) : null); + death.setSheepfoldName(sheepInfo.get("sheepfoldName") != null ? sheepInfo.get("sheepfoldName").toString() : null); + death.setBreedStatus(sheepInfo.get("breedStatus") != null ? sheepInfo.get("breedStatus").toString() : null); + death.setPostLambingDay(sheepInfo.get("postLambingDay") != null ? Integer.valueOf(sheepInfo.get("postLambingDay").toString()) : null); + death.setLactationDay(sheepInfo.get("lactationDay") != null ? Integer.valueOf(sheepInfo.get("lactationDay").toString()) : null); + death.setGestationDay(sheepInfo.get("gestationDay") != null ? Integer.valueOf(sheepInfo.get("gestationDay").toString()) : null); + } + } + } + return list; + } + + /** + * 根据管理耳号查询sheep_file视图信息 + * + * @param manageTags 管理耳号 + * @return 羊只信息 + */ + @Override + public Map selectSheepFileByManageTags(String manageTags) + { + return scSheepDeathMapper.selectSheepFileByManageTags(manageTags); + } + + /** + * 新增羊只死淘记录 + * + * @param scSheepDeath 羊只死淘记录 + * @return 结果 + */ + @Override + public int insertScSheepDeath(ScSheepDeath scSheepDeath) + { + // 设置事件类型默认为"死亡" + if (scSheepDeath.getEventType() == null || scSheepDeath.getEventType().isEmpty()) { + scSheepDeath.setEventType("死亡"); + } + + // 如果有管理耳号,查询并设置羊只ID + 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); + } + } + + scSheepDeath.setCreateTime(DateUtils.getNowDate()); + return scSheepDeathMapper.insertScSheepDeath(scSheepDeath); + } + + /** + * 修改羊只死淘记录 + * + * @param scSheepDeath 羊只死淘记录 + * @return 结果 + */ + @Override + public int updateScSheepDeath(ScSheepDeath scSheepDeath) + { + // 如果管理耳号发生变化,重新查询并设置羊只ID + 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); + } + } + + scSheepDeath.setUpdateTime(DateUtils.getNowDate()); + return scSheepDeathMapper.updateScSheepDeath(scSheepDeath); + } + + /** + * 批量删除羊只死淘记录 + * + * @param ids 需要删除的羊只死淘记录主键 + * @return 结果 + */ + @Override + public int deleteScSheepDeathByIds(Long[] ids) + { + return scSheepDeathMapper.deleteScSheepDeathByIds(ids); + } + + /** + * 删除羊只死淘记录信息 + * + * @param id 羊只死淘记录主键 + * @return 结果 + */ + @Override + public int deleteScSheepDeathById(Long id) + { + 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 278490e..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,13 +36,18 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { @Autowired private BasSheepVarietyMapper basSheepVarietyMapper; + @Autowired + private IBasSheepTypeService basSheepTypeService; + + @Autowired + private IDaRanchService daRanchService; //新增 @Override @Transactional(rollbackFor = Exception.class) public boolean insertScAddSheep(ScAddSheep scAddSheep) { - ScAddSheep exist = scAddSheepMapper.selectByEarNumber(scAddSheep.getEarNumber()); - if (exist != null) { - throw new ServiceException("添加失败,耳号重复"); + BasSheep existSheep =basSheepService.selectBasSheepByManageTags(scAddSheep.getEarNumber().trim()); + if (existSheep != null) { + throw new ServiceException("添加失败,耳号已存在"); } boolean ok = scAddSheepMapper.insert(scAddSheep) > 0; @@ -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,6 +114,23 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { for (int i = 0; i < list.size(); i++) { ScAddSheep sheep = list.get(i); try { + 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) { @@ -124,6 +154,7 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { 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++; @@ -137,6 +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("
第") @@ -145,12 +193,12 @@ public class ScAddSheepServiceImpl implements IScAddSheepService { continue; } - ScAddSheep exist = scAddSheepMapper.selectByEarNumber(sheep.getEarNumber()); - if (exist != null) { + BasSheep existSheep = basSheepService.selectBasSheepByManageTags(sheep.getEarNumber().trim()); + if (existSheep != null) { failure++; failureMsg.append("
第") .append(i + 1) - .append("行:耳号已存在【") + .append("行:耳号已存在且未删除【") .append(sheep.getEarNumber()) .append("】"); continue; 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/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java new file mode 100644 index 0000000..e1b567e --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzMaterialsManagementController.java @@ -0,0 +1,116 @@ +package com.zhyc.module.stock.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.security.access.prepost.PreAuthorize; +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.stock.domain.WzMaterialsManagement; +import com.zhyc.module.stock.service.IWzMaterialsManagementService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 物资管理Controller + * + * @author HashMap + * @date 2025-08-05 + */ +@RestController +@RequestMapping("/stock/management") +public class WzMaterialsManagementController extends BaseController { + private final IWzMaterialsManagementService wzMaterialsManagementService; + + public WzMaterialsManagementController(IWzMaterialsManagementService wzMaterialsManagementService) { + this.wzMaterialsManagementService = wzMaterialsManagementService; + } + + /** + * 查询物资管理列表 + */ + @PreAuthorize("@ss.hasPermi('stock:management:list')") + @GetMapping("/list") + public TableDataInfo list(WzMaterialsManagement wzMaterialsManagement) { + startPage(); + List list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement); + return getDataTable(list); + } + + /** + * 导出物资管理列表 + */ + @PreAuthorize("@ss.hasPermi('stock:management:export')") + @Log(title = "物资管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, WzMaterialsManagement wzMaterialsManagement) { + List list = wzMaterialsManagementService.selectWzMaterialsManagementList(wzMaterialsManagement); + ExcelUtil util = new ExcelUtil<>(WzMaterialsManagement.class); + util.exportExcel(response, list, "物资管理数据"); + } + + /** + * 获取物资管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('stock:management:query')") + @GetMapping(value = "/{materialManagementCode}") + public AjaxResult getInfo(@PathVariable("materialManagementCode") Long materialManagementCode) { + return success(wzMaterialsManagementService.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode)); + } + + /** + * 新增物资管理 + */ + @PreAuthorize("@ss.hasPermi('stock:management:add')") + @Log(title = "物资管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WzMaterialsManagement wzMaterialsManagement) { + return toAjax(wzMaterialsManagementService.insertWzMaterialsManagement(wzMaterialsManagement)); + } + + /** + * 修改物资管理 + */ + @PreAuthorize("@ss.hasPermi('stock:management:edit')") + @Log(title = "物资管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody WzMaterialsManagement wzMaterialsManagement) { + return toAjax(wzMaterialsManagementService.updateWzMaterialsManagement(wzMaterialsManagement)); + } + + /** + * 删除物资管理 + */ + @PreAuthorize("@ss.hasPermi('stock:management:remove')") + @Log(title = "物资管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{materialManagementCodes}") + public AjaxResult remove(@PathVariable Long[] materialManagementCodes) { + return toAjax(wzMaterialsManagementService.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes)); + } + + @Log(title = "物资管理", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('stock:management:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { + ExcelUtil util = new ExcelUtil<>(WzMaterialsManagement.class); + List stockInList = util.importExcel(file.getInputStream()); + for (WzMaterialsManagement wzMaterialsManagement : stockInList) { + System.out.println(wzMaterialsManagement); + } + String operName = getUsername(); + String message = wzMaterialsManagementService.importUser(stockInList, updateSupport, operName); + // String message = "OK We are testing"; + return success(message); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java new file mode 100644 index 0000000..6705202 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockInController.java @@ -0,0 +1,122 @@ +package com.zhyc.module.stock.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.security.access.prepost.PreAuthorize; +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.stock.domain.WzStockIn; +import com.zhyc.module.stock.service.IWzStockInService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 入库记录Controller + * + * @author HashMap + * @date 2025-08-05 + */ +@RestController +@RequestMapping("/stock/in") +public class WzStockInController extends BaseController +{ + private final IWzStockInService wzStockInService; + + public WzStockInController(IWzStockInService wzStockInService) { + this.wzStockInService = wzStockInService; + } + + /** + * 查询入库记录列表 + */ + @PreAuthorize("@ss.hasPermi('stock:in:list')") + @GetMapping("/list") + public TableDataInfo list(WzStockIn wzStockIn) + { + startPage(); + List list = wzStockInService.selectWzStockInList(wzStockIn); + return getDataTable(list); + } + + /** + * 导出入库记录列表 + */ + @PreAuthorize("@ss.hasPermi('stock:in:export')") + @Log(title = "入库记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, WzStockIn wzStockIn) + { + List list = wzStockInService.selectWzStockInList(wzStockIn); + ExcelUtil util = new ExcelUtil<>(WzStockIn.class); + util.exportExcel(response, list, "入库记录数据"); + } + + /** + * 获取入库记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('stock:in:query')") + @GetMapping(value = "/{stockInCode}") + public AjaxResult getInfo(@PathVariable("stockInCode") Long stockInCode) + { + return success(wzStockInService.selectWzStockInByStockInCode(stockInCode)); + } + + /** + * 新增入库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:in:add')") + @Log(title = "入库记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WzStockIn wzStockIn) + { + return toAjax(wzStockInService.insertWzStockIn(wzStockIn)); + } + + /** + * 修改入库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:in:edit')") + @Log(title = "入库记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody WzStockIn wzStockIn) + { + return toAjax(wzStockInService.updateWzStockIn(wzStockIn)); + } + + /** + * 删除入库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:in:remove')") + @Log(title = "入库记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{stockInCodes}") + public AjaxResult remove(@PathVariable Long[] stockInCodes) + { + return toAjax(wzStockInService.deleteWzStockInByStockInCodes(stockInCodes)); + } + + @Log(title = "用户管理", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('stock:in:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil<>(WzStockIn.class); + List stockInList = util.importExcel(file.getInputStream()); + stockInList.removeIf(wzStockIn -> wzStockIn.getDocDate() == null); + String operName = getUsername(); + String message = wzStockInService.importUser(stockInList, updateSupport, operName); +// String message = "OK We are testing"; + return success(message); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java new file mode 100644 index 0000000..cb80a44 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/controller/WzStockOutController.java @@ -0,0 +1,130 @@ +package com.zhyc.module.stock.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +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.stock.domain.WzStockOut; +import com.zhyc.module.stock.service.IWzStockOutService; +import com.zhyc.common.utils.poi.ExcelUtil; +import com.zhyc.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 出库记录Controller + * + * @author HashMap + * @date 2025-08-05 + */ +@RestController +@RequestMapping("/stock/out") +public class WzStockOutController extends BaseController +{ + private final IWzStockOutService wzStockOutService; + + public WzStockOutController(IWzStockOutService wzStockOutService) { + this.wzStockOutService = wzStockOutService; + } + + /** + * 查询出库记录列表 + */ + @PreAuthorize("@ss.hasPermi('stock:out:list')") + @GetMapping("/list") + public TableDataInfo list(WzStockOut wzStockOut) + { + startPage(); + List list = wzStockOutService.selectWzStockOutList(wzStockOut); + return getDataTable(list); + } + + /** + * 导出出库记录列表 + */ + @PreAuthorize("@ss.hasPermi('stock:out:export')") + @Log(title = "出库记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, WzStockOut wzStockOut) + { + List list = wzStockOutService.selectWzStockOutList(wzStockOut); + ExcelUtil util = new ExcelUtil<>(WzStockOut.class); + util.exportExcel(response, list, "出库记录数据"); + } + + /** + * 获取出库记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('stock:out:query')") + @GetMapping(value = "/{stockOutCode}") + public AjaxResult getInfo(@PathVariable("stockOutCode") Long stockOutCode) + { + return success(wzStockOutService.selectWzStockOutByStockOutCode(stockOutCode)); + } + + /** + * 新增出库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:out:add')") + @Log(title = "出库记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WzStockOut wzStockOut) + { + return toAjax(wzStockOutService.insertWzStockOut(wzStockOut)); + } + + /** + * 修改出库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:out:edit')") + @Log(title = "出库记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody WzStockOut wzStockOut) + { + return toAjax(wzStockOutService.updateWzStockOut(wzStockOut)); + } + + /** + * 删除出库记录 + */ + @PreAuthorize("@ss.hasPermi('stock:out:remove')") + @Log(title = "出库记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{stockOutCodes}") + public AjaxResult remove(@PathVariable Long[] stockOutCodes) + { + return toAjax(wzStockOutService.deleteWzStockOutByStockOutCodes(stockOutCodes)); + } + + /** + * 导入出库记录 + */ + @Log(title = "出库记录", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('stock:out:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil<>(WzStockOut.class); + List WzStockOutList = util.importExcel(file.getInputStream()); + WzStockOutList.removeIf(wzStockOut -> wzStockOut.getDocId() == null); + String operName = getUsername(); + String message; + try { + message = wzStockOutService.importUser(WzStockOutList, updateSupport, operName); + }catch (Exception e) { + message = e.getMessage(); + logger.error(e.getMessage()); + } + // String message = "OK We are testing"; + return success(message); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzMaterialsManagement.java b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzMaterialsManagement.java new file mode 100644 index 0000000..88d3a53 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzMaterialsManagement.java @@ -0,0 +1,87 @@ +package com.zhyc.module.stock.domain; + +import java.math.BigDecimal; +import java.util.Date; +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; + +/** + * 物资管理对象 wz_materials_management + * + * @author HashMap + * @date 2025-08-05 + */ +@Setter +@Getter +public class WzMaterialsManagement extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 序号 */ + @Excel(name = "序号") + private Long materialManagementCode; + + /** 存货编码 */ + @Excel(name = "存货编码") + private String materialId; + + /** 存货 */ + @Excel(name = "存货") + private String materialName; + + /** 批号 */ + @Excel(name = "批号") + private String batchId; + + /** 规格型号 */ + @Excel(name = "规格型号") + private String materialSpecification; + + /** 主计量 */ + @Excel(name = "主计量") + private String materialUnit; + + /** 现存量(主) */ + @Excel(name = "现存量(主)") + private BigDecimal currentStock; + + /** 库存预警 */ + @Excel(name = "库存预警") + private String stockAlarm; + + /** 生产日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date productionDate; + + /** 失效日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "失效日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date expirationDate; + + /** 失效预警 */ + @Excel(name = "失效预警") + private String expirationAlarm; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("materialManagementCode", getMaterialManagementCode()) + .append("materialId", getMaterialId()) + .append("materialName", getMaterialName()) + .append("batchId", getBatchId()) + .append("materialSpecification", getMaterialSpecification()) + .append("materialUnit", getMaterialUnit()) + .append("currentStock", getCurrentStock()) + .append("stockAlarm", getStockAlarm()) + .append("productionDate", getProductionDate()) + .append("expirationDate", getExpirationDate()) + .append("expirationAlarm", getExpirationAlarm()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockIn.java b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockIn.java new file mode 100644 index 0000000..cda8b08 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockIn.java @@ -0,0 +1,142 @@ +package com.zhyc.module.stock.domain; + +import java.math.BigDecimal; +import java.util.Date; +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; + +/** + * 入库记录对象 wz_stock_in + * + * @author HashMap + * @date 2025-08-05 + */ +@Setter +@Getter +public class WzStockIn extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 序号 */ + private Long stockInCode; + + /** 单据日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "单据日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date docDate; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date createDate; + + /** 单据编号 */ + @Excel(name = "单据编号") + private String docId; + + /** 业务类型 */ + @Excel(name = "业务类型") + private String businessType; + + /** 仓库编码 */ + @Excel(name = "仓库编码") + private String repositoryId; + + /** 仓库 */ + @Excel(name = "仓库") + private String repositoryName; + + /** 入库类别 */ + @Excel(name = "入库类别") + private String stockInType; + + /** 供应商编码 */ + @Excel(name = "供应商编码") + private String supplierId; + + /** 供应商 */ + @Excel(name = "供应商") + private String supplierName; + + /** 部门编码 */ + @Excel(name = "部门编码") + private String departmentId; + + /** 部门 */ + @Excel(name = "部门") + private String departmentName; + + /** 经手人编码 */ + @Excel(name = "经手人编码") + private String operatorId; + + /** 经手人 */ + @Excel(name = "经手人") + private String operatorName; + + /** 制单人 */ + @Excel(name = "制单人") + private String single; + + /** 审核人 */ + @Excel(name = "审核人") + private String reviewer; + + /** 存货编码 */ + @Excel(name = "存货编码") + private String materialId; + + /** 存货 */ + @Excel(name = "存货") + private String materialName; + + /** 规格型号 */ + @Excel(name = "规格型号") + private String materialSpecification; + + /** 计量单位 */ + @Excel(name = "计量单位") + private String materialUnit; + + /** 实收数量 */ + @Excel(name = "实收数量") + private BigDecimal count; + + /** 入库调整 */ + @Excel(name = "入库调整") + private String stockInAdjustRemark; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("stockInCode", getStockInCode()) + .append("docDate", getDocDate()) + .append("createDate", getCreateDate()) + .append("docId", getDocId()) + .append("businessType", getBusinessType()) + .append("repositoryId", getRepositoryId()) + .append("repositoryName", getRepositoryName()) + .append("stockInType", getStockInType()) + .append("supplierId", getSupplierId()) + .append("supplierName", getSupplierName()) + .append("departmentId", getDepartmentId()) + .append("departmentName", getDepartmentName()) + .append("operatorId", getOperatorId()) + .append("operatorName", getOperatorName()) + .append("remark", getRemark()) + .append("single", getSingle()) + .append("reviewer", getReviewer()) + .append("materialId", getMaterialId()) + .append("materialName", getMaterialName()) + .append("materialSpecification", getMaterialSpecification()) + .append("materialUnit", getMaterialUnit()) + .append("count", getCount()) + .append("stockInAdjustRemark", getStockInAdjustRemark()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java new file mode 100644 index 0000000..c0a84a9 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/domain/WzStockOut.java @@ -0,0 +1,251 @@ +package com.zhyc.module.stock.domain; + +import java.math.BigDecimal; +import java.util.Date; + +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; + +/** + * 出库记录对象 wz_stock_out + * + * @author HashMap + * @date 2025-08-05 + */ +@Getter +@Setter +public class WzStockOut extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 序号 + */ + private Long stockOutCode; + + /** + * 单据日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "单据日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date docDate; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date createDate; + + /** + * 单据编号 + */ + @Excel(name = "单据编号") + private String docId; + + /** + * 业务类型 + */ + @Excel(name = "业务类型") + private String businessType; + + /** + * 仓库编码 + */ + @Excel(name = "仓库编码") + private String repositoryId; + + /** + * 仓库名称 + */ + @Excel(name = "仓库") + private String repositoryName; + + /** + * 项目分类 + */ + @Excel(name = "项目分类") + private String projectClassification; + + /** + * 项目编码 + */ + @Excel(name = "项目编码") + private String projectId; + + /** + * 项目 + */ + @Excel(name = "项目") + private String projectName; + + /** + * 生产车间编码 + */ + @Excel(name = "生产车间编码") + private String departmentId; + + /** + * 生产车间 + */ + @Excel(name = "生产车间") + private String departmentName; + + /** + * 领用人编码 + */ + @Excel(name = "领用人编码") + private String receiverId; + + /** + * 领用人 + */ + @Excel(name = "领用人") + private String receiver; + + /** + * 制单人 + */ + @Excel(name = "制单人") + private String single; + + /** + * 审核人 + */ + @Excel(name = "审核人") + private String reviewer; + + /** + * 审核时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date reviewDate; + + /** + * 修改人 + */ + @Excel(name = "修改人") + private String modifier; + + /** + * 材料分类编码 + */ + @Excel(name = "材料分类编码") + private String materialClassId; + + /** + * 材料分类 + */ + @Excel(name = "材料分类") + private String materialClassName; + + /** + * 材料编码 + */ + @Excel(name = "材料编码") + private String materialId; + + /** + * 材料名称 + */ + @Excel(name = "材料名称") + private String materialName; + + /** + * 材料规格 + */ + @Excel(name = "材料规格") + private String materialSpecification; + + /** + * 计量单位 + */ + @Excel(name = "计量单位") + private String materialUnit; + + /** + * 数量 + */ + @Excel(name = "数量") + private BigDecimal count; + + /** + * 批号 + */ + @Excel(name = "批号") + private Long batchId; + + /** + * 生产日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date productionDate; + + /** + * 保质期 + */ + @Excel(name = "保质期") + private Long shelfLife; + + /** + * 保质期单位 + */ + @Excel(name = "保质期单位") + private String shelfLifeUnit; + + /** + * 失效日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "失效日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date expirationDate; + + /** + * 代理人 + */ + @Excel(name = "代理人") + private String agent; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("stockOutCode", getStockOutCode()) + .append("docDate", getDocDate()) + .append("createDate", getCreateDate()) + .append("docId", getDocId()) + .append("businessType", getBusinessType()) + .append("repositoryId", getRepositoryId()) + .append("repositoryName", getRepositoryName()) + .append("projectClassification", getProjectClassification()) + .append("projectId", getProjectId()) + .append("projectName", getProjectName()) + .append("departmentId", getDepartmentId()) + .append("departmentName", getDepartmentName()) + .append("receiverId", getReceiverId()) + .append("receiver", getReceiver()) + .append("single", getSingle()) + .append("reviewer", getReviewer()) + .append("reviewDate", getReviewDate()) + .append("modifier", getModifier()) + .append("materialClassId", getMaterialClassId()) + .append("materialClassName", getMaterialClassName()) + .append("materialId", getMaterialId()) + .append("materialName", getMaterialName()) + .append("materialSpecification", getMaterialSpecification()) + .append("materialUnit", getMaterialUnit()) + .append("count", getCount()) + .append("batchId", getBatchId()) + .append("productionDate", getProductionDate()) + .append("shelfLife", getShelfLife()) + .append("shelfLifeUnit", getShelfLifeUnit()) + .append("expirationDate", getExpirationDate()) + .append("agent", getAgent()) + .toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java new file mode 100644 index 0000000..a1c75a9 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzMaterialsManagementMapper.java @@ -0,0 +1,71 @@ +package com.zhyc.module.stock.mapper; + +import java.util.List; +import com.zhyc.module.stock.domain.WzMaterialsManagement; +import org.apache.ibatis.annotations.Mapper; + +/** + * 物资管理Mapper接口 + * + * @author HashMap + * @date 2025-08-05 + */ +@Mapper +public interface WzMaterialsManagementMapper +{ + /** + * 查询物资管理 + * + * @param materialManagementCode 物资管理主键 + * @return 物资管理 + */ + WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode); + + /** + * 查询物资管理列表 + * + * @param wzMaterialsManagement 物资管理 + * @return 物资管理集合 + */ + List selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement); + + /** + * 新增物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement); + + /** + * 修改物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement); + + /** + * 删除物资管理 + * + * @param materialManagementCode 物资管理主键 + * @return 结果 + */ + int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode); + + /** + * 批量删除物资管理 + * + * @param materialManagementCodes 需要删除的数据主键集合 + * @return 结果 + */ + int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes); + + /** + * 以物资编码获取记录 + * + * @param materialID 物资编码 + * @return 结果 + */ + WzMaterialsManagement selectWzMaterialsManagementByMaterialID(String materialID); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockInMapper.java b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockInMapper.java new file mode 100644 index 0000000..ed2fda8 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockInMapper.java @@ -0,0 +1,70 @@ +package com.zhyc.module.stock.mapper; + +import java.util.List; +import com.zhyc.module.stock.domain.WzStockIn; +import org.apache.ibatis.annotations.Mapper; + +/** + * 入库记录Mapper接口 + * + * @author HashMap + * @date 2025-08-05 + */ +@Mapper +public interface WzStockInMapper +{ + /** + * 查询入库记录 + * + * @param stockInCode 入库记录主键 + * @return 入库记录 + */ + WzStockIn selectWzStockInByStockInCode(Long stockInCode); + + /** + * 查询入库记录列表 + * + * @param wzStockIn 入库记录 + * @return 入库记录集合 + */ + List selectWzStockInList(WzStockIn wzStockIn); + + /** + * 新增入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + int insertWzStockIn(WzStockIn wzStockIn); + + /** + * 修改入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + int updateWzStockIn(WzStockIn wzStockIn); + + /** + * 删除入库记录 + * + * @param stockInCode 入库记录主键 + * @return 结果 + */ + int deleteWzStockInByStockInCode(Long stockInCode); + + /** + * 批量删除入库记录 + * + * @param stockInCodes 需要删除的数据主键集合 + * @return 结果 + */ + int deleteWzStockInByStockInCodes(Long[] stockInCodes); + + /** + * 查询最近的入库记录 + * + * @return 数据库中最近的入库记录 + */ + WzStockIn getEarliestStockIn(); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java new file mode 100644 index 0000000..a9ae9ce --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/mapper/WzStockOutMapper.java @@ -0,0 +1,70 @@ +package com.zhyc.module.stock.mapper; + +import java.util.List; +import com.zhyc.module.stock.domain.WzStockOut; +import org.apache.ibatis.annotations.Mapper; + +/** + * 出库记录Mapper接口 + * + * @author HashMap + * @date 2025-08-05 + */ +@Mapper +public interface WzStockOutMapper +{ + /** + * 查询出库记录 + * + * @param stockOutCode 出库记录主键 + * @return 出库记录 + */ + WzStockOut selectWzStockOutByStockOutCode(Long stockOutCode); + + /** + * 查询出库记录列表 + * + * @param wzStockOut 出库记录 + * @return 出库记录集合 + */ + List selectWzStockOutList(WzStockOut wzStockOut); + + /** + * 新增出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + int insertWzStockOut(WzStockOut wzStockOut); + + /** + * 修改出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + int updateWzStockOut(WzStockOut wzStockOut); + + /** + * 删除出库记录 + * + * @param stockOutCode 出库记录主键 + * @return 结果 + */ + int deleteWzStockOutByStockOutCode(Long stockOutCode); + + /** + * 批量删除出库记录 + * + * @param stockOutCodes 需要删除的数据主键集合 + * @return 结果 + */ + int deleteWzStockOutByStockOutCodes(Long[] stockOutCodes); + + /** + * 查询最近的记录 + * + * @return 结果 + */ + WzStockOut getEarliestStockOut(); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java new file mode 100644 index 0000000..46e71dc --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzMaterialsManagementService.java @@ -0,0 +1,71 @@ +package com.zhyc.module.stock.service; + +import java.util.List; +import com.zhyc.module.stock.domain.WzMaterialsManagement; + +/** + * 物资管理Service接口 + * + * @author HashMap + * @date 2025-08-05 + */ +public interface IWzMaterialsManagementService +{ + /** + * 查询物资管理 + * + * @param materialManagementCode 物资管理主键 + * @return 物资管理 + */ + WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode); + + /** + * 查询物资管理列表 + * + * @param wzMaterialsManagement 物资管理 + * @return 物资管理集合 + */ + List selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement); + + /** + * 新增物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement); + + /** + * 修改物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement); + + /** + * 批量删除物资管理 + * + * @param materialManagementCodes 需要删除的物资管理主键集合 + * @return 结果 + */ + int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes); + + /** + * 删除物资管理信息 + * + * @param materialManagementCode 物资管理主键 + * @return 结果 + */ + int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode); + + /** + * 导入入库数据 + * + * @param MaterialsManagementList 物资数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + String importUser(List MaterialsManagementList, Boolean isUpdateSupport, String operName); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java new file mode 100644 index 0000000..8d986a0 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockInService.java @@ -0,0 +1,72 @@ +package com.zhyc.module.stock.service; + +import java.util.List; + +import com.zhyc.module.stock.domain.WzStockIn; + +/** + * 入库记录Service接口 + * + * @author HashMap + * @date 2025-08-05 + */ +public interface IWzStockInService +{ + /** + * 查询入库记录 + * + * @param stockInCode 入库记录主键 + * @return 入库记录 + */ + WzStockIn selectWzStockInByStockInCode(Long stockInCode); + + /** + * 查询入库记录列表 + * + * @param wzStockIn 入库记录 + * @return 入库记录集合 + */ + List selectWzStockInList(WzStockIn wzStockIn); + + /** + * 新增入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + int insertWzStockIn(WzStockIn wzStockIn); + + /** + * 修改入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + int updateWzStockIn(WzStockIn wzStockIn); + + /** + * 批量删除入库记录 + * + * @param stockInCodes 需要删除的入库记录主键集合 + * @return 结果 + */ + int deleteWzStockInByStockInCodes(Long[] stockInCodes); + + /** + * 删除入库记录信息 + * + * @param stockInCode 入库记录主键 + * @return 结果 + */ + int deleteWzStockInByStockInCode(Long stockInCode); + + /** + * 导入入库数据 + * + * @param StockInList 入库数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + String importUser(List StockInList, Boolean isUpdateSupport, String operName); +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java new file mode 100644 index 0000000..6e4c75b --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/IWzStockOutService.java @@ -0,0 +1,72 @@ +package com.zhyc.module.stock.service; + +import java.util.List; + +import com.zhyc.module.stock.domain.WzStockOut; + +/** + * 出库记录Service接口 + * + * @author HashMap + * @date 2025-08-05 + */ +public interface IWzStockOutService +{ + /** + * 查询出库记录 + * + * @param stockOutCode 出库记录主键 + * @return 出库记录 + */ + WzStockOut selectWzStockOutByStockOutCode(Long stockOutCode); + + /** + * 查询出库记录列表 + * + * @param wzStockOut 出库记录 + * @return 出库记录集合 + */ + List selectWzStockOutList(WzStockOut wzStockOut); + + /** + * 新增出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + int insertWzStockOut(WzStockOut wzStockOut); + + /** + * 修改出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + int updateWzStockOut(WzStockOut wzStockOut); + + /** + * 批量删除出库记录 + * + * @param stockOutCodes 需要删除的出库记录主键集合 + * @return 结果 + */ + int deleteWzStockOutByStockOutCodes(Long[] stockOutCodes); + + /** + * 删除出库记录信息 + * + * @param stockOutCode 出库记录主键 + * @return 结果 + */ + int deleteWzStockOutByStockOutCode(Long stockOutCode); + + /** + * 导入入库数据 + * + * @param WzStockOutList 入库数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + String importUser(List WzStockOutList, Boolean isUpdateSupport, String operName) throws Exception; +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java new file mode 100644 index 0000000..ab6d272 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzMaterialsManagementServiceImpl.java @@ -0,0 +1,132 @@ +package com.zhyc.module.stock.service.impl; + +import java.util.List; + +import com.zhyc.common.exception.ServiceException; +import com.zhyc.common.utils.StringUtils; +import org.springframework.stereotype.Service; +import com.zhyc.module.stock.mapper.WzMaterialsManagementMapper; +import com.zhyc.module.stock.domain.WzMaterialsManagement; +import com.zhyc.module.stock.service.IWzMaterialsManagementService; +import org.springframework.transaction.annotation.Transactional; + +/** + * 物资管理Service业务层处理 + * + * @author HashMap + * @date 2025-08-05 + */ +@Service +public class WzMaterialsManagementServiceImpl implements IWzMaterialsManagementService { + private final WzMaterialsManagementMapper wzMaterialsManagementMapper; + + public WzMaterialsManagementServiceImpl(WzMaterialsManagementMapper wzMaterialsManagementMapper) { + this.wzMaterialsManagementMapper = wzMaterialsManagementMapper; + } + + /** + * 查询物资管理 + * + * @param materialManagementCode 物资管理主键 + * @return 物资管理 + */ + @Override + public WzMaterialsManagement selectWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) { + return wzMaterialsManagementMapper.selectWzMaterialsManagementByMaterialManagementCode(materialManagementCode); + } + + /** + * 查询物资管理列表 + * + * @param wzMaterialsManagement 物资管理 + * @return 物资管理 + */ + @Override + public List selectWzMaterialsManagementList(WzMaterialsManagement wzMaterialsManagement) { + return wzMaterialsManagementMapper.selectWzMaterialsManagementList(wzMaterialsManagement); + } + + /** + * 新增物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + @Override + public int insertWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) { + return wzMaterialsManagementMapper.insertWzMaterialsManagement(wzMaterialsManagement); + } + + /** + * 修改物资管理 + * + * @param wzMaterialsManagement 物资管理 + * @return 结果 + */ + @Override + public int updateWzMaterialsManagement(WzMaterialsManagement wzMaterialsManagement) { + return wzMaterialsManagementMapper.updateWzMaterialsManagement(wzMaterialsManagement); + } + + /** + * 批量删除物资管理 + * + * @param materialManagementCodes 需要删除的物资管理主键 + * @return 结果 + */ + @Override + public int deleteWzMaterialsManagementByMaterialManagementCodes(Long[] materialManagementCodes) { + return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCodes(materialManagementCodes); + } + + /** + * 删除物资管理信息 + * + * @param materialManagementCode 物资管理主键 + * @return 结果 + */ + @Override + public int deleteWzMaterialsManagementByMaterialManagementCode(Long materialManagementCode) { + return wzMaterialsManagementMapper.deleteWzMaterialsManagementByMaterialManagementCode(materialManagementCode); + } + + /** + * 导入用户数据 + * + * @param MaterialsManagementList 物资数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String importUser(List MaterialsManagementList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(MaterialsManagementList) || MaterialsManagementList.isEmpty()) { + throw new ServiceException("导入用户数据不能为空!"); + } + int successNum = 0; + int sameNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try { + for (WzMaterialsManagement wzMaterialsManagement : MaterialsManagementList) { + if (wzMaterialsManagement.getMaterialId() != null) { + WzMaterialsManagement isExist = wzMaterialsManagementMapper.selectWzMaterialsManagementByMaterialID(wzMaterialsManagement.getMaterialId()); + // 存在则更新 + if (isExist != null) { + sameNum++; + wzMaterialsManagementMapper.updateWzMaterialsManagement(wzMaterialsManagement); + continue; + } + } + int result = wzMaterialsManagementMapper.insertWzMaterialsManagement(wzMaterialsManagement); + if (result > 0) successNum++; + } + } catch (Exception e) { + return failureMsg.append("导入出错:").append(e.getMessage()).toString(); + } + successMsg.append("导入完成 : 导入 ").append(successNum).append(" 条\n更新 ").append(sameNum).append(" 条(已存在记录)"); + return successMsg.toString(); + } + +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockInServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockInServiceImpl.java new file mode 100644 index 0000000..7af887f --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockInServiceImpl.java @@ -0,0 +1,139 @@ +package com.zhyc.module.stock.service.impl; + +import java.util.List; + +import com.zhyc.common.exception.ServiceException; +import com.zhyc.common.utils.StringUtils; +import org.springframework.stereotype.Service; +import com.zhyc.module.stock.mapper.WzStockInMapper; +import com.zhyc.module.stock.domain.WzStockIn; +import com.zhyc.module.stock.service.IWzStockInService; +import org.springframework.transaction.annotation.Transactional; + +/** + * 入库记录Service业务层处理 + * + * @author HashMap + * @date 2025-08-05 + */ +@Service +public class WzStockInServiceImpl implements IWzStockInService { + private final WzStockInMapper wzStockInMapper; + + public WzStockInServiceImpl(WzStockInMapper wzStockInMapper) { + this.wzStockInMapper = wzStockInMapper; + } + + /** + * 查询入库记录 + * + * @param stockInCode 入库记录主键 + * @return 入库记录 + */ + @Override + public WzStockIn selectWzStockInByStockInCode(Long stockInCode) { + return wzStockInMapper.selectWzStockInByStockInCode(stockInCode); + } + + /** + * 查询入库记录列表 + * + * @param wzStockIn 入库记录 + * @return 入库记录 + */ + @Override + public List selectWzStockInList(WzStockIn wzStockIn) { + return wzStockInMapper.selectWzStockInList(wzStockIn); + } + + /** + * 新增入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + @Override + public int insertWzStockIn(WzStockIn wzStockIn) { + return wzStockInMapper.insertWzStockIn(wzStockIn); + } + + /** + * 修改入库记录 + * + * @param wzStockIn 入库记录 + * @return 结果 + */ + @Override + public int updateWzStockIn(WzStockIn wzStockIn) { + return wzStockInMapper.updateWzStockIn(wzStockIn); + } + + /** + * 批量删除入库记录 + * + * @param stockInCodes 需要删除的入库记录主键 + * @return 结果 + */ + @Override + public int deleteWzStockInByStockInCodes(Long[] stockInCodes) { + return wzStockInMapper.deleteWzStockInByStockInCodes(stockInCodes); + } + + /** + * 删除入库记录信息 + * + * @param stockInCode 入库记录主键 + * @return 结果 + */ + @Override + public int deleteWzStockInByStockInCode(Long stockInCode) { + return wzStockInMapper.deleteWzStockInByStockInCode(stockInCode); + } + + /** + * 导入用户数据 + * + * @param StockInList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String importUser(List StockInList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(StockInList) || StockInList.isEmpty()) { + throw new ServiceException("导入用户数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + int sameNum = 0; + boolean emptyTable = true; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try { + WzStockIn earliestStockIn = wzStockInMapper.getEarliestStockIn(); + if (null != earliestStockIn) emptyTable = false; + System.out.println(earliestStockIn); + for (WzStockIn wzStockIn : StockInList) { + if (!emptyTable && earliestStockIn.getDocDate().getTime() >= wzStockIn.getDocDate().getTime()) { + sameNum++; + continue; + } + int result = wzStockInMapper.insertWzStockIn(wzStockIn); + if (result == 0) { + failureNum++; + failureMsg.append("失败的项:").append(wzStockIn.getDocId()).append("\n"); + } + else successNum++; + } + + } catch (Exception e) { + failureNum++; + } + if (failureNum > 0) { + return failureMsg.toString(); + } + successMsg.append("导入完成 : 导入 ").append(successNum).append(" 条\n跳过 ").append(sameNum).append(" 条(重复记录)"); + return successMsg.toString(); + } +} diff --git a/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java new file mode 100644 index 0000000..5fb6c36 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/stock/service/impl/WzStockOutServiceImpl.java @@ -0,0 +1,136 @@ +package com.zhyc.module.stock.service.impl; + +import java.util.Date; +import java.util.List; + +import com.zhyc.common.exception.ServiceException; +import com.zhyc.common.utils.StringUtils; +import org.springframework.stereotype.Service; +import com.zhyc.module.stock.mapper.WzStockOutMapper; +import com.zhyc.module.stock.domain.WzStockOut; +import com.zhyc.module.stock.service.IWzStockOutService; +import org.springframework.transaction.annotation.Transactional; + +/** + * 出库记录Service业务层处理 + * + * @author HashMap + * @date 2025-08-05 + */ +@Service +public class WzStockOutServiceImpl implements IWzStockOutService { + private final WzStockOutMapper wzStockOutMapper; + + public WzStockOutServiceImpl(WzStockOutMapper wzStockOutMapper) { + this.wzStockOutMapper = wzStockOutMapper; + } + + /** + * 查询出库记录 + * + * @param stockOutCode 出库记录主键 + * @return 出库记录 + */ + @Override + public WzStockOut selectWzStockOutByStockOutCode(Long stockOutCode) { + return wzStockOutMapper.selectWzStockOutByStockOutCode(stockOutCode); + } + + /** + * 查询出库记录列表 + * + * @param wzStockOut 出库记录 + * @return 出库记录 + */ + @Override + public List selectWzStockOutList(WzStockOut wzStockOut) { + return wzStockOutMapper.selectWzStockOutList(wzStockOut); + } + + /** + * 新增出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + @Override + public int insertWzStockOut(WzStockOut wzStockOut) { + return wzStockOutMapper.insertWzStockOut(wzStockOut); + } + + /** + * 修改出库记录 + * + * @param wzStockOut 出库记录 + * @return 结果 + */ + @Override + public int updateWzStockOut(WzStockOut wzStockOut) { + return wzStockOutMapper.updateWzStockOut(wzStockOut); + } + + /** + * 批量删除出库记录 + * + * @param stockOutCodes 需要删除的出库记录主键 + * @return 结果 + */ + @Override + public int deleteWzStockOutByStockOutCodes(Long[] stockOutCodes) { + return wzStockOutMapper.deleteWzStockOutByStockOutCodes(stockOutCodes); + } + + /** + * 删除出库记录信息 + * + * @param stockOutCode 出库记录主键 + * @return 结果 + */ + @Override + public int deleteWzStockOutByStockOutCode(Long stockOutCode) { + return wzStockOutMapper.deleteWzStockOutByStockOutCode(stockOutCode); + } + + /** + * 导入用户数据 + * + * @param WzStockOutList 入库数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String importUser(List WzStockOutList, Boolean isUpdateSupport, String operName) throws Exception { + if (StringUtils.isNull(WzStockOutList) || WzStockOutList.isEmpty()) { + throw new ServiceException("导入入库数据不能为空!"); + } + int successNum = 0; + int sameNum = 0; + StringBuilder successMsg = new StringBuilder(); + WzStockOut earliestStockOut = wzStockOutMapper.getEarliestStockOut(); + // 确保最近记录有值 + if (null == earliestStockOut || earliestStockOut.getCreateDate() == null) { + if (earliestStockOut != null) { + earliestStockOut.setCreateDate(new Date(0)); + } else { + earliestStockOut = new WzStockOut(); + earliestStockOut.setCreateDate(new Date(0)); + } + } + for (WzStockOut wzStockOut : WzStockOutList) { + if (null != wzStockOut && null != wzStockOut.getCreateDate()) { + if (earliestStockOut.getCreateDate().getTime() >= wzStockOut.getCreateDate().getTime()) { + sameNum++; + continue; + } + } else { + continue; + } + int result = wzStockOutMapper.insertWzStockOut(wzStockOut); + if (result > 0) successNum++; + } + successMsg.append("导入完成 : 导入 ").append(successNum).append(" 条\n跳过 ").append(sameNum).append(" 条(重复记录)"); + return successMsg.toString(); + } +} diff --git a/zhyc-module/src/main/resources/mapper/base/BasSheepMapper.xml b/zhyc-module/src/main/resources/mapper/base/BasSheepMapper.xml index c39e3a5..a035e60 100644 --- a/zhyc-module/src/main/resources/mapper/base/BasSheepMapper.xml +++ b/zhyc-module/src/main/resources/mapper/base/BasSheepMapper.xml @@ -128,7 +128,8 @@ and source_date = #{sourceDate} and source_ranch_id = #{sourceRanchId} and comment = #{comment} - and is_delete = #{isDelete} + and is_delete = 0 + and is_delete = #{isDelete} @@ -151,20 +152,24 @@ bv.variety AS varietyName FROM bas_sheep s LEFT JOIN bas_sheep_variety bv ON s.variety_id = bv.id - WHERE s.manage_tags = #{manageTags} LIMIT 1 + WHERE s.manage_tags = #{manageTags} + AND s.is_delete = 0 LIMIT 1 - SELECT COUNT(*) FROM bas_sheep WHERE manage_tags = #{tag} AND is_delete = 0 + SELECT COUNT(*) + FROM bas_sheep + WHERE manage_tags = #{tag} + AND is_delete = 0 \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/base/BreedRamFileMapper.xml b/zhyc-module/src/main/resources/mapper/base/BreedRamFileMapper.xml new file mode 100644 index 0000000..6f666ee --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/base/BreedRamFileMapper.xml @@ -0,0 +1,417 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, ordinary_ear_number, ranch_id, ranch_name, sheepfold_id, sheepfold_name, electronic_tags, variety_id, variety, sheep_category, current_status, birthday, dynamic_info, month_age, birth_weight, weaning_date, weaning_day_age, weaning_weight, weaning_daily_gain, post_weaning_daily_gain, current_weight, current_weight_date, activity_level, sexual_status, scrotum_circumference, sperm_collection_time, sperm_volume, sperm_vitality, sperm_density, sperm_quality, breeding_status, last_plan_time, current_plan_time, comment, protein_rate_ebv, milk_fat_rate_ebv, scs_ebv, growth_performance_ebv, resistance_ebv, reproduction_performance_ebv, body_type_ebv, comprehensive_breeding_value, father_number, mother_number, grandfather_number, grandmother_number, maternal_grandfather_number, maternal_grandmother_number, is_core_flock, is_breeding_use, pregnancy_check, total_mated_ewes, natural_pregnancy_check_ewes, natural_conception_rate, artificial_pregnancy_check_ewes, artificial_conception_rate, ram_mother_milk_volume, milk_production_ebv, accuracy, information_count, is_paternity_tested, create_by, create_time, update_by, update_time, is_delete from breed_ram_file + + + + + + + + + + + + + + + + + + + + insert into breed_ram_file + + ordinary_ear_number, + ranch_id, + ranch_name, + sheepfold_id, + sheepfold_name, + electronic_tags, + variety_id, + variety, + sheep_category, + current_status, + birthday, + dynamic_info, + month_age, + birth_weight, + weaning_date, + weaning_day_age, + weaning_weight, + weaning_daily_gain, + post_weaning_daily_gain, + current_weight, + current_weight_date, + activity_level, + sexual_status, + scrotum_circumference, + sperm_collection_time, + sperm_volume, + sperm_vitality, + sperm_density, + sperm_quality, + breeding_status, + last_plan_time, + current_plan_time, + comment, + protein_rate_ebv, + milk_fat_rate_ebv, + scs_ebv, + growth_performance_ebv, + resistance_ebv, + reproduction_performance_ebv, + body_type_ebv, + comprehensive_breeding_value, + father_number, + mother_number, + grandfather_number, + grandmother_number, + maternal_grandfather_number, + maternal_grandmother_number, + is_core_flock, + is_breeding_use, + pregnancy_check, + total_mated_ewes, + natural_pregnancy_check_ewes, + natural_conception_rate, + artificial_pregnancy_check_ewes, + artificial_conception_rate, + ram_mother_milk_volume, + milk_production_ebv, + accuracy, + information_count, + is_paternity_tested, + create_by, + create_time, + update_by, + update_time, + is_delete, + + + #{ordinaryEarNumber}, + #{ranchId}, + #{ranchName}, + #{sheepfoldId}, + #{sheepfoldName}, + #{electronicTags}, + #{varietyId}, + #{variety}, + #{sheepCategory}, + #{currentStatus}, + #{birthday}, + #{dynamicInfo}, + #{monthAge}, + #{birthWeight}, + #{weaningDate}, + #{weaningDayAge}, + #{weaningWeight}, + #{weaningDailyGain}, + #{postWeaningDailyGain}, + #{currentWeight}, + #{currentWeightDate}, + #{activityLevel}, + #{sexualStatus}, + #{scrotumCircumference}, + #{spermCollectionTime}, + #{spermVolume}, + #{spermVitality}, + #{spermDensity}, + #{spermQuality}, + #{breedingStatus}, + #{lastPlanTime}, + #{currentPlanTime}, + #{remark}, + #{proteinRateEbv}, + #{milkFatRateEbv}, + #{scsEbv}, + #{growthPerformanceEbv}, + #{resistanceEbv}, + #{reproductionPerformanceEbv}, + #{bodyTypeEbv}, + #{comprehensiveBreedingValue}, + #{fatherNumber}, + #{motherNumber}, + #{grandfatherNumber}, + #{grandmotherNumber}, + #{maternalGrandfatherNumber}, + #{maternalGrandmotherNumber}, + #{isCoreFlock}, + #{isBreedingUse}, + #{pregnancyCheck}, + #{totalMatedEwes}, + #{naturalPregnancyCheckEwes}, + #{naturalConceptionRate}, + #{artificialPregnancyCheckEwes}, + #{artificialConceptionRate}, + #{ramMotherMilkVolume}, + #{milkProductionEbv}, + #{accuracy}, + #{informationCount}, + #{isPaternityTested}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{isDelete}, + + + + + update breed_ram_file + + ordinary_ear_number = #{ordinaryEarNumber}, + ranch_id = #{ranchId}, + ranch_name = #{ranchName}, + sheepfold_id = #{sheepfoldId}, + sheepfold_name = #{sheepfoldName}, + electronic_tags = #{electronicTags}, + variety_id = #{varietyId}, + variety = #{variety}, + sheep_category = #{sheepCategory}, + current_status = #{currentStatus}, + birthday = #{birthday}, + dynamic_info = #{dynamicInfo}, + month_age = #{monthAge}, + birth_weight = #{birthWeight}, + weaning_date = #{weaningDate}, + weaning_day_age = #{weaningDayAge}, + weaning_weight = #{weaningWeight}, + weaning_daily_gain = #{weaningDailyGain}, + post_weaning_daily_gain = #{postWeaningDailyGain}, + current_weight = #{currentWeight}, + current_weight_date = #{currentWeightDate}, + activity_level = #{activityLevel}, + sexual_status = #{sexualStatus}, + scrotum_circumference = #{scrotumCircumference}, + sperm_collection_time = #{spermCollectionTime}, + sperm_volume = #{spermVolume}, + sperm_vitality = #{spermVitality}, + sperm_density = #{spermDensity}, + sperm_quality = #{spermQuality}, + breeding_status = #{breedingStatus}, + last_plan_time = #{lastPlanTime}, + current_plan_time = #{currentPlanTime}, + comment = #{remark}, + protein_rate_ebv = #{proteinRateEbv}, + milk_fat_rate_ebv = #{milkFatRateEbv}, + scs_ebv = #{scsEbv}, + growth_performance_ebv = #{growthPerformanceEbv}, + resistance_ebv = #{resistanceEbv}, + reproduction_performance_ebv = #{reproductionPerformanceEbv}, + body_type_ebv = #{bodyTypeEbv}, + comprehensive_breeding_value = #{comprehensiveBreedingValue}, + father_number = #{fatherNumber}, + mother_number = #{motherNumber}, + grandfather_number = #{grandfatherNumber}, + grandmother_number = #{grandmotherNumber}, + maternal_grandfather_number = #{maternalGrandfatherNumber}, + maternal_grandmother_number = #{maternalGrandmotherNumber}, + is_core_flock = #{isCoreFlock}, + is_breeding_use = #{isBreedingUse}, + pregnancy_check = #{pregnancyCheck}, + total_mated_ewes = #{totalMatedEwes}, + natural_pregnancy_check_ewes = #{naturalPregnancyCheckEwes}, + natural_conception_rate = #{naturalConceptionRate}, + artificial_pregnancy_check_ewes = #{artificialPregnancyCheckEwes}, + artificial_conception_rate = #{artificialConceptionRate}, + ram_mother_milk_volume = #{ramMotherMilkVolume}, + milk_production_ebv = #{milkProductionEbv}, + accuracy = #{accuracy}, + information_count = #{informationCount}, + is_paternity_tested = #{isPaternityTested}, + update_by = #{updateBy}, + update_time = #{updateTime}, + is_delete = #{isDelete}, + + where id = #{id} + + + + delete from breed_ram_file where id = #{id} + + + + delete from breed_ram_file where id in + + #{id} + + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/biosafety/DisinfectMapper.xml b/zhyc-module/src/main/resources/mapper/biosafety/DisinfectMapper.xml index 0269e82..2d00f31 100644 --- a/zhyc-module/src/main/resources/mapper/biosafety/DisinfectMapper.xml +++ b/zhyc-module/src/main/resources/mapper/biosafety/DisinfectMapper.xml @@ -28,16 +28,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 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/dairyProducts/NpSheepMilkAnalysisMapper.xml b/zhyc-module/src/main/resources/mapper/dairyProducts/NpSheepMilkAnalysisMapper.xml index 34e4ba2..8069e16 100644 --- a/zhyc-module/src/main/resources/mapper/dairyProducts/NpSheepMilkAnalysisMapper.xml +++ b/zhyc-module/src/main/resources/mapper/dairyProducts/NpSheepMilkAnalysisMapper.xml @@ -2,151 +2,61 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - id, manage_ear_tag, variety, milking_date, dry_date, milking_days, - screen_days, max_parity, total_milk, total_corrected_milk, - avg_daily_corrected_milk, parity1_total_milk, parity2_total_milk, - parity3_total_milk, parity4_total_milk, parity1_avg_milk, - parity2_avg_milk, parity3_avg_milk, parity4_avg_milk, - lactation_days, last_7_avg_milk, last_7_corrected_milk, - last_14_avg_milk, last_30_avg_milk, sheep_type, birthday, - current_parity, month_age, current_weight, breed_status, - father_tag, mother_tag, ranch, family, mother_milking_days, - mother_total_corrected_milk, mother_max_parity, - mother_avg_corrected - - - - - + SELECT DISTINCT a.sheep_id + FROM np_milk_prod_classes a + LEFT JOIN sheep_file sf ON a.sheep_id = sf.id - AND manage_ear_tag LIKE CONCAT('%', #{manageEarTag}, '%') + AND sf.bs_manage_tags LIKE CONCAT('%', #{manageEarTag}, '%') - - ORDER BY milking_date DESC + ORDER BY a.sheep_id - - INSERT INTO np_sheep_milk_analysis ( - - ) VALUES ( - #{id}, #{manageEarTag}, #{variety}, #{milkingDate}, #{dryDate}, - #{milkingDays}, #{screenDays}, #{maxParity}, #{totalMilk}, - #{totalCorrectedMilk}, #{avgDailyCorrectedMilk}, #{parity1TotalMilk}, - #{parity2TotalMilk}, #{parity3TotalMilk}, #{parity4TotalMilk}, - #{parity1AvgMilk}, #{parity2AvgMilk}, #{parity3AvgMilk}, - #{parity4AvgMilk}, #{lactationDays}, #{last7AvgMilk}, - #{last7CorrectedMilk}, #{last14AvgMilk}, #{last30AvgMilk}, - #{sheepType}, #{birthday}, #{currentParity}, #{monthAge}, - #{currentWeight}, #{breedStatus}, #{fatherTag}, #{motherTag}, - #{ranch}, #{family}, #{motherMilkingDays}, - #{motherTotalCorrectedMilk}, #{motherMaxParity}, - #{motherAvgCorrected} - ) - + + + - - UPDATE np_sheep_milk_analysis - SET manage_ear_tag = #{manageEarTag}, - variety = #{variety}, - milking_date = #{milkingDate}, - dry_date = #{dryDate}, - milking_days = #{milkingDays}, - screen_days = #{screenDays}, - max_parity = #{maxParity}, - total_milk = #{totalMilk}, - total_corrected_milk = #{totalCorrectedMilk}, - avg_daily_corrected_milk = #{avgDailyCorrectedMilk}, - parity1_total_milk = #{parity1TotalMilk}, - parity2_total_milk = #{parity2TotalMilk}, - parity3_total_milk = #{parity3TotalMilk}, - parity4_total_milk = #{parity4TotalMilk}, - parity1_avg_milk = #{parity1AvgMilk}, - parity2_avg_milk = #{parity2AvgMilk}, - parity3_avg_milk = #{parity3AvgMilk}, - parity4_avg_milk = #{parity4AvgMilk}, - lactation_days = #{lactationDays}, - last_7_avg_milk = #{last7AvgMilk}, - last_7_corrected_milk = #{last7CorrectedMilk}, - last_14_avg_milk = #{last14AvgMilk}, - last_30_avg_milk = #{last30AvgMilk}, - sheep_type = #{sheepType}, - birthday = #{birthday}, - current_parity = #{currentParity}, - month_age = #{monthAge}, - current_weight = #{currentWeight}, - breed_status = #{breedStatus}, - father_tag = #{fatherTag}, - mother_tag = #{motherTag}, - ranch = #{ranch}, - family = #{family}, - mother_milking_days = #{motherMilkingDays}, - mother_total_corrected_milk = #{motherTotalCorrectedMilk}, - mother_max_parity = #{motherMaxParity}, - mother_avg_corrected = #{motherAvgCorrected} - WHERE id = #{id} - - - DELETE FROM np_sheep_milk_analysis WHERE id = #{id} - + + + - - DELETE FROM np_sheep_milk_analysis WHERE id IN - - #{id} - - + + 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..25e0143 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/feed/SgFeedListMapper.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + 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 new file mode 100644 index 0000000..b67f3df --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/feed/SgFeedPlanMapper.xml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + + + + insert into sg_feed_plan + + 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, + + + #{createDate}, + #{formulaId}, + #{batchId}, + #{sheepHouseId}, + #{sheepCount}, + #{planDailySize}, + #{ratioMorning}, + #{ratioNoon}, + #{ratioAfternoon}, + #{planMorningSize}, + #{planMorningTotal}, + #{actualMorningSize}, + #{planNoonSize}, + #{planNoonTotal}, + #{actualNoonSize}, + #{planAfternoonSize}, + #{planAfternoonTotal}, + #{actualAfternoonSize}, + #{planFeedTotal}, + #{zookeeper}, + #{planDate}, + #{remark}, + + + + + update sg_feed_plan + + formula_id = #{formulaId}, + batch_id = #{batchId}, + sheep_house_id = #{sheepHouseId}, + sheep_count = #{sheepCount}, + plan_daily_size = #{planDailySize}, + ratio_morning = #{ratioMorning}, + ratio_noon = #{ratioNoon}, + ratio_afternoon = #{ratioAfternoon}, + plan_morning_size = #{planMorningSize}, + plan_morning_total = #{planMorningTotal}, + actual_morning_size = #{actualMorningSize}, + plan_noon_size = #{planNoonSize}, + plan_noon_total = #{planNoonTotal}, + actual_noon_size = #{actualNoonSize}, + plan_afternoon_size = #{planAfternoonSize}, + plan_afternoon_total = #{planAfternoonTotal}, + actual_afternoon_size = #{actualAfternoonSize}, + plan_feed_total = #{planFeedTotal}, + zookeeper = #{zookeeper}, + plan_date = #{planDate}, + remark = #{remark}, + + where create_date = #{createDate} + + + + delete from sg_feed_plan where create_date = #{createDate} + + + + delete from sg_feed_plan where create_date in + + #{createDate} + + + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFormulaListMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFormulaListMapper.xml new file mode 100644 index 0000000..f422ccb --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/feed/SgFormulaListMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + select code, formula_id, material_id, material_name, ratio, is_granular, is_supplement from sg_formula_list + + + + + + + + insert into sg_formula_list + + code, + formula_id, + batch_id, + material_id, + material_name, + ratio, + is_granular, + is_supplement, + + + #{code}, + #{formulaId}, + #{batchId}, + #{materialId}, + #{materialName}, + #{ratio}, + #{isGranular}, + #{isSupplement}, + + + + + update sg_formula_list + + formula_id = #{formulaId}, + material_id = #{materialId}, + material_name = #{materialName}, + ratio = #{ratio}, + is_granular = #{isGranular}, + is_supplement = #{isSupplement}, + + where code = #{code} + + + + delete from sg_formula_list where code = #{code} + + + + delete from sg_formula_list where code in + + #{code} + + + + + DELETE FROM sg_formula_list WHERE formula_id = #{formulaId} AND batch_id = #{batchId} + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFormulaManagementMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFormulaManagementMapper.xml new file mode 100644 index 0000000..17602f1 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/feed/SgFormulaManagementMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + select formula_id, feed_stage, batch_id, use_start_date, use_end_date, use_state, remark from sg_formula_management + + + + + + + + insert into sg_formula_management + + formula_id, + feed_stage, + batch_id, + use_start_date, + use_end_date, + use_state, + remark, + + + #{formulaId}, + #{feedStage}, + #{batchId}, + #{useStartDate}, + #{useEndDate}, + #{useState}, + #{remark}, + + + + + update sg_formula_management + + feed_stage = #{feedStage}, + use_start_date = #{useStartDate}, + use_end_date = #{useEndDate}, + use_state = #{useState}, + remark = #{remark}, + + where formula_id = #{formulaId} AND batch_id = #{batchId} + + + + delete from sg_formula_management where formula_id = #{formulaId} + + + + delete from sg_formula_management where formula_id in + + #{formulaId} + + + + delete from sg_formula_management where formula_id = #{formulaId} and batch_id = #{batchId} + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/feed/SgMaterialMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgMaterialMapper.xml new file mode 100644 index 0000000..f4960c9 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/feed/SgMaterialMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + select material_id, material_name, is_granular from sg_material + + + + + + + + insert into sg_material + + material_id, + material_name, + is_granular, + + + #{materialId}, + #{materialName}, + #{isGranular}, + + + + + update sg_material + + material_name = #{materialName}, + is_granular = #{isGranular}, + + where material_id = #{materialId} + + + + delete from sg_material where material_id = #{materialId} + + + + delete from sg_material where material_id in + + #{materialId} + + + \ 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..5265e5f 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,21 +66,38 @@ 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} diff --git a/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBreastRatingMapper.xml b/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBreastRatingMapper.xml index f1b6f53..2fc7e25 100644 --- a/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBreastRatingMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/bodyManage/ScBreastRatingMapper.xml @@ -8,6 +8,12 @@ + + + + + + @@ -22,9 +28,17 @@ select sbr.*, - bs.manage_tags as manageTags + bs.manage_tags as manageTags, + bsv.id as varietyId, + bsv.variety as varietyName, + '乳房评分' as event_type, + sf.id as sheepfoldId, + sf.sheepfold_name as sheepfoldName, + sbr.event_date from sc_breast_rating sbr left join bas_sheep bs on sbr.sheep_id = bs.id + left join bas_sheep_variety bsv on bs.variety_id = bsv.id + left join da_sheepfold sf on bs.sheepfold_id = sf.id @@ -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/ScSheepDeathMapper.xml b/zhyc-module/src/main/resources/mapper/produce/breed/ScSheepDeathMapper.xml new file mode 100644 index 0000000..baedeeb --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/produce/breed/ScSheepDeathMapper.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select id, sheep_id, manage_tags, event_type, death_date, disease_type_id, disease_subtype_id, disposal_direction, technician, handler, work_group, create_by, create_time, comment, update_by, update_time, is_delete from sc_sheep_death + + + + + + + + + + + insert into sc_sheep_death + + sheep_id, + manage_tags, + event_type, + death_date, + disease_type_id, + disease_subtype_id, + disposal_direction, + technician, + handler, + work_group, + create_by, + create_time, + comment, + update_by, + update_time, + is_delete, + + + #{sheepId}, + #{manageTags}, + #{eventType}, + #{deathDate}, + #{diseaseTypeId}, + #{diseaseSubtypeId}, + #{disposalDirection}, + #{technician}, + #{handler}, + #{workGroup}, + #{createBy}, + #{createTime}, + #{comment}, + #{updateBy}, + #{updateTime}, + #{isDelete}, + + + + + update sc_sheep_death + + sheep_id = #{sheepId}, + manage_tags = #{manageTags}, + event_type = #{eventType}, + death_date = #{deathDate}, + disease_type_id = #{diseaseTypeId}, + disease_subtype_id = #{diseaseSubtypeId}, + disposal_direction = #{disposalDirection}, + technician = #{technician}, + handler = #{handler}, + work_group = #{workGroup}, + create_by = #{createBy}, + create_time = #{createTime}, + comment = #{comment}, + update_by = #{updateBy}, + update_time = #{updateTime}, + is_delete = #{isDelete}, + + where id = #{id} + + + + delete from sc_sheep_death where id = #{id} + + + + delete from sc_sheep_death where id in + + #{id} + + + \ 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..e931054 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}, '%') diff --git a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeVarietyMapper.xml b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeVarietyMapper.xml index 77cf67f..680ce6d 100644 --- a/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeVarietyMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/manage_sheep/ScChangeVarietyMapper.xml @@ -8,6 +8,8 @@ + + @@ -18,7 +20,9 @@ select scv.id, scv.sheep_id, - bs.manage_tags as manage_tags, + bs.manage_tags as manage_tags, + sf.sheepfold_name as sheepfold_name, + '改品种' as event_type, scv.variety_old, scv.variety_new, scv.comment, @@ -26,6 +30,7 @@ scv.create_time from sc_change_variety scv left join bas_sheep bs on scv.sheep_id = bs.id + left join da_sheepfold sf on bs.sheepfold_id = sf.id @@ -47,7 +51,15 @@ and bs.manage_tags LIKE CONCAT('%', #{manageTags}, '%') - and t.variety_id = #{varietyId} + + and t.event_type = #{eventType} + + and t.trans_type = #{transType} + + and t.transition_date between #{params.beginTransitionDate} and #{params.endTransitionDate} + + and bs.variety_id = #{varietyId} and trans_to = #{transTo} and trans_from = #{transFrom} and status = #{status} @@ -69,7 +81,9 @@ variety_id, trans_to, trans_from, + event_type, trans_type, + transition_date, technician, status, comment, @@ -81,7 +95,9 @@ #{varietyId}, #{transTo}, #{transFrom}, + #{eventType}, #{transType}, + #{transitionDate}, #{technician}, #{status}, #{comment}, @@ -93,13 +109,13 @@ INSERT INTO sc_transition_info ( sheep_id, variety_id, trans_to, trans_from, - trans_type, technician, status, comment, + event_type,trans_type, transition_date, technician, status, comment, create_by, create_time ) VALUES ( - #{item.sheepId}, #{item.varietyId}, #{item.transTo}, #{item.transFrom}, - #{item.transType}, #{item.technician}, #{item.status}, #{item.comment}, + #{item.sheepId}, #{item.varietyId}, #{item.transTo}, #{item.transFrom}, #{item.eventType}, + #{item.transType},#{item.transitionDate}, #{item.technician}, #{item.status}, #{item.comment}, #{item.createBy}, now() ) @@ -110,9 +126,12 @@ sheep_id = #{sheepId}, variety_id = #{varietyId}, + sheepfold_id = #{sheepfoldId}, trans_to = #{transTo}, trans_from = #{transFrom}, + event_type = #{eventType}, trans_type = #{transType}, + transition_date = #{transitionDate}, technician = #{technician}, status = #{status}, comment = #{comment}, diff --git a/zhyc-module/src/main/resources/mapper/produce/other/ScCastrateMapper.xml b/zhyc-module/src/main/resources/mapper/produce/other/ScCastrateMapper.xml index d52dd84..fc712b3 100644 --- a/zhyc-module/src/main/resources/mapper/produce/other/ScCastrateMapper.xml +++ b/zhyc-module/src/main/resources/mapper/produce/other/ScCastrateMapper.xml @@ -4,10 +4,11 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + + @@ -21,19 +22,20 @@ select sc.id, sc.sheep_id, - bs.manage_tags as manageTags, - sc.sheepfold, + bs.manage_tags as manageTags, + '去势' as event_type, + bs.sheepfold_id as sheepfold, sf.sheepfold_name as sheepfoldName, - sc.variety_id, - bv.variety as varietyName, + bs.variety_id as varietyId, + bv.variety as varietyName, sc.comment, sc.technician, sc.create_by, sc.create_time from sc_castrate sc left join bas_sheep bs on sc.sheep_id = bs.id - left join da_sheepfold sf on sc.sheepfold = sf.id - left join bas_sheep_variety bv on sc.variety_id = bv.id + left join da_sheepfold sf on bs.sheepfold_id = sf.id + left join bas_sheep_variety bv on bs.variety_id = bv.id 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} diff --git a/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml b/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml new file mode 100644 index 0000000..d2347c4 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/stock/WzMaterialsManagementMapper.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + select material_management_code, material_id, material_name, batch_id, material_specification, material_unit, current_stock, stock_alarm, production_date, expiration_date, expiration_alarm from wz_materials_management + + + + + + + + insert into wz_materials_management + + material_id, + material_name, + batch_id, + material_specification, + material_unit, + current_stock, + stock_alarm, + production_date, + expiration_date, + expiration_alarm, + + + #{materialId}, + #{materialName}, + #{batchId}, + #{materialSpecification}, + #{materialUnit}, + #{currentStock}, + #{stockAlarm}, + #{productionDate}, + #{expirationDate}, + #{expirationAlarm}, + + + + + update wz_materials_management + + material_id = #{materialId}, + material_name = #{materialName}, + batch_id = #{batchId}, + material_specification = #{materialSpecification}, + material_unit = #{materialUnit}, + current_stock = #{currentStock}, + stock_alarm = #{stockAlarm}, + production_date = #{productionDate}, + expiration_date = #{expirationDate}, + expiration_alarm = #{expirationAlarm}, + + where material_id = #{materialId} + + + + delete from wz_materials_management where material_management_code = #{materialManagementCode} + + + + delete from wz_materials_management where material_management_code in + + #{materialManagementCode} + + + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/stock/WzStockInMapper.xml b/zhyc-module/src/main/resources/mapper/stock/WzStockInMapper.xml new file mode 100644 index 0000000..55c5c1e --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/stock/WzStockInMapper.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select stock_in_code, doc_date, create_date, doc_id, business_type, repository_id, repository_name, stock_in_type, supplier_id, supplier_name, department_id, department_name, operator_id, operator_name, remark, single, reviewer, material_id, material_name, material_specification, material_unit, count, stock_in_adjust_remark from wz_stock_in + + + + + + + + insert into wz_stock_in + + doc_date, + create_date, + doc_id, + business_type, + repository_id, + repository_name, + stock_in_type, + supplier_id, + supplier_name, + department_id, + department_name, + operator_id, + operator_name, + remark, + single, + reviewer, + material_id, + material_name, + material_specification, + material_unit, + count, + stock_in_adjust_remark, + + + #{docDate}, + #{createDate}, + #{docId}, + #{businessType}, + #{repositoryId}, + #{repositoryName}, + #{stockInType}, + #{supplierId}, + #{supplierName}, + #{departmentId}, + #{departmentName}, + #{operatorId}, + #{operatorName}, + #{remark}, + #{single}, + #{reviewer}, + #{materialId}, + #{materialName}, + #{materialSpecification}, + #{materialUnit}, + #{count}, + #{stockInAdjustRemark}, + + + + + update wz_stock_in + + doc_date = #{docDate}, + create_date = #{createDate}, + doc_id = #{docId}, + business_type = #{businessType}, + repository_id = #{repositoryId}, + repository_name = #{repositoryName}, + stock_in_type = #{stockInType}, + supplier_id = #{supplierId}, + supplier_name = #{supplierName}, + department_id = #{departmentId}, + department_name = #{departmentName}, + operator_id = #{operatorId}, + operator_name = #{operatorName}, + remark = #{remark}, + single = #{single}, + reviewer = #{reviewer}, + material_id = #{materialId}, + material_name = #{materialName}, + material_specification = #{materialSpecification}, + material_unit = #{materialUnit}, + count = #{count}, + stock_in_adjust_remark = #{stockInAdjustRemark}, + + where stock_in_code = #{stockInCode} + + + + delete from wz_stock_in where stock_in_code = #{stockInCode} + + + + delete from wz_stock_in where stock_in_code in + + #{stockInCode} + + + + + \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml b/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml new file mode 100644 index 0000000..5df3b87 --- /dev/null +++ b/zhyc-module/src/main/resources/mapper/stock/WzStockOutMapper.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select stock_out_code, doc_date, create_date, doc_id, business_type, repository_id, repository_name, project_classification, project_id, project_name, department_id, department_name,receiver_id, receiver, single, reviewer, review_date, modifier, material_class_id, material_class_name, material_id,material_name, material_specification, material_unit, count, batch_id, production_date, shelf_life, shelf_life_unit, expiration_date, agent from wz_stock_out + + + + + + + + insert into wz_stock_out + + doc_date, + create_date, + doc_id, + business_type, + repository_id, + repository_name, + project_classification, + project_id, + project_name, + department_id, + department_name, + receiver_id, + receiver, + single, + reviewer, + review_date, + modifier, + material_class_id, + material_class_name, + material_id, + material_name, + material_specification, + material_unit, + count, + batch_id, + production_date, + shelf_life, + shelf_life_unit, + expiration_date, + agent, + + + #{docDate}, + #{createDate}, + #{docId}, + #{businessType}, + #{repositoryId}, + #{repositoryName}, + #{projectClassification}, + #{projectId}, + #{projectName}, + #{departmentId}, + #{departmentName}, + #{receiverId}, + #{receiver}, + #{single}, + #{reviewer}, + #{reviewDate}, + #{modifier}, + #{materialClassId}, + #{materialClassName}, + #{materialId}, + #{materialName}, + #{materialSpecification}, + #{materialUnit}, + #{count}, + #{batchId}, + #{productionDate}, + #{shelfLife}, + #{shelfLifeUnit}, + #{expirationDate}, + #{agent}, + + + + + update wz_stock_out + + doc_date = #{docDate}, + create_date = #{createDate}, + doc_id = #{docId}, + business_type = #{businessType}, + repository_id = #{repositoryId}, + repository_name = #{repositoryName}, + project_classification = #{projectClassification}, + project_id = #{projectId}, + project_name = #{projectName}, + department_id = #{departmentId}, + department_name = #{departmentName}, + receiver_id = #{receiverId}, + receiver = #{receiver}, + single = #{single}, + reviewer = #{reviewer}, + review_date = #{reviewDate}, + modifier = #{modifier}, + material_class_id = #{materialClassId}, + material_class_name = #{materialClassName}, + material_id = #{materialId}, + material_name = #{materialName}, + material_specification = #{materialSpecification}, + material_unit = #{materialUnit}, + count = #{count}, + batch_id = #{batchId}, + production_date = #{productionDate}, + shelf_life = #{shelfLife}, + shelf_life_unit = #{shelfLifeUnit}, + expiration_date = #{expirationDate}, + agent = #{agent}, + + where stock_out_code = #{stockOutCode} + + + + delete from wz_stock_out where stock_out_code = #{stockOutCode} + + + + delete from wz_stock_out where stock_out_code in + + #{stockOutCode} + + + + + \ No newline at end of file