diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaSheepfoldController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaSheepfoldController.java index 0af047c..de91c69 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaSheepfoldController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/DaSheepfoldController.java @@ -8,6 +8,7 @@ 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.DaSheepfold; +import com.zhyc.module.base.domain.DaSheepfoldSummaryExportVO; import com.zhyc.module.base.service.IDaSheepfoldService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -80,6 +81,73 @@ public class DaSheepfoldController extends BaseController util.exportExcel(response, list, "羊舍管理数据"); } + + /** + * 导出羊舍管理汇总列表(主表格数据)- 新增方法 + */ + @PreAuthorize("@ss.hasPermi('sheepfold_management:sheepfold_management:export')") + @Log(title = "羊舍管理汇总导出", businessType = BusinessType.EXPORT) + @PostMapping("/exportSummary") + public void exportSummary(HttpServletResponse response, DaSheepfold daSheepfold) { + // 1. 查询汇总数据 + List list = daSheepfoldService.selectDaSheepfoldSummaryList(daSheepfold); + + // 2. 转换为导出VO + List exportList = convertToExportVO(list); + + // 3. 使用VO类导出Excel + ExcelUtil util = new ExcelUtil<>(DaSheepfoldSummaryExportVO.class); + util.exportExcel(response, exportList, "羊舍管理汇总数据"); + } + + + /** + * 将DaSheepfold列表转换为导出VO列表 + */ + private List convertToExportVO(List daSheepfoldList) { + List voList = new ArrayList<>(); + + for (DaSheepfold entity : daSheepfoldList) { + DaSheepfoldSummaryExportVO vo = new DaSheepfoldSummaryExportVO(); + + // 字典翻译:牧场ID -> 牧场名称 + if (entity.getRanchId() != null) { + String ranchName = DictUtils.getDictLabel("da_ranch", entity.getRanchId().toString()); + vo.setRanchName(ranchName != null ? ranchName : entity.getRanchId().toString()); + } else { + vo.setRanchName(""); + } + + // 使用汇总查询中的羊舍名称 + vo.setSheepfoldName(entity.getSheepfoldName() != null ? entity.getSheepfoldName() : ""); + + // 字典翻译:羊舍类型ID -> 羊舍类型名称 + if (entity.getSheepfoldTypeId() != null) { + String typeName = DictUtils.getDictLabel("bas_sheepfold_type", entity.getSheepfoldTypeId().toString()); + vo.setSheepfoldTypeName(typeName != null ? typeName : entity.getSheepfoldTypeId().toString()); + } else { + vo.setSheepfoldTypeName(""); + } + + // 羊舍编号 + vo.setSheepfoldNo(entity.getSheepfoldNo() != null ? entity.getSheepfoldNo() : ""); + + // 羊数(确保不为空) + vo.setTotalSheepCount(entity.getTotalSheepCount() != null ? entity.getTotalSheepCount() : 0); + + // 备注 + vo.setComment(entity.getComment() != null ? entity.getComment() : ""); + + voList.add(vo); + } + + return voList; + } + + + + + /** * 获取羊舍管理详细信息 */ @@ -112,16 +180,74 @@ public class DaSheepfoldController extends BaseController return toAjax(daSheepfoldService.updateDaSheepfold(daSheepfold)); } +// /** +// * 删除羊舍管理 +// */ +// @PreAuthorize("@ss.hasPermi('sheepfold_management:sheepfold_management:remove')") +// @Log(title = "羊舍管理", businessType = BusinessType.DELETE) +// @DeleteMapping("/{ids}") +// public AjaxResult remove(@PathVariable Long[] ids) +// { +// return toAjax(daSheepfoldService.deleteDaSheepfoldByIds(ids)); +// } + /** - * 删除羊舍管理 + * 修改后:根据组合条件删除羊圈信息(单条) + * 接收ranch_id/sheepfold_no/sheepfold_type_id/sheepfold_name组合条件 */ - @PreAuthorize("@ss.hasPermi('sheepfold_management:sheepfold_management:remove')") - @Log(title = "羊舍管理", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { - return toAjax(daSheepfoldService.deleteDaSheepfoldByIds(ids)); + @PreAuthorize("@ss.hasPermi('sheep:sheepfold:remove')") + @DeleteMapping("/deleteByCondition") + public AjaxResult removeByCondition(@RequestBody DaSheepfold sheepfold) { + // 1. 校验核心条件非空(避免条件缺失导致误删) + if (sheepfold.getRanchId() == null + || sheepfold.getSheepfoldNo() == null || sheepfold.getSheepfoldNo().isEmpty() + || sheepfold.getSheepfoldTypeId() == null) { + return AjaxResult.error("删除失败:核心条件(牧场ID/羊圈编号/羊圈类型ID)不能为空"); + } + // 2. 调用Service执行组合条件删除 + boolean deleteResult = daSheepfoldService.deleteSheepfoldByCondition(sheepfold); + if (deleteResult) { + return AjaxResult.success("删除成功"); + } else { + return AjaxResult.error("删除失败:未找到匹配条件的记录"); + } } + + /** + * 【扩展】批量删除:接收多条组合条件数据,循环删除 + */ + @PreAuthorize("@ss.hasPermi('sheep:sheepfold:remove')") + @DeleteMapping("/batchDeleteByCondition") + public AjaxResult batchRemoveByCondition(@RequestBody List sheepfoldList) { + if (sheepfoldList == null || sheepfoldList.isEmpty()) { + return AjaxResult.error("删除失败:请选择要删除的羊圈数据"); + } + // 统计成功删除的数量 + int successCount = 0; + for (DaSheepfold sheepfold : sheepfoldList) { + // 跳过条件不全的记录 + if (sheepfold.getRanchId() == null + || sheepfold.getSheepfoldNo() == null || sheepfold.getSheepfoldNo().isEmpty() + || sheepfold.getSheepfoldTypeId() == null) { + continue; + } + if (daSheepfoldService.deleteSheepfoldByCondition(sheepfold)) { + successCount++; + } + } + if (successCount == 0) { + return AjaxResult.error("批量删除失败:无符合条件的记录可删除"); + } else { + return AjaxResult.success("批量删除成功,共删除" + successCount + "条记录"); + } + } + + + + + + + /** * 检查羊舍编号是否已存在 */ diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaSheepfoldSummaryExportVO.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaSheepfoldSummaryExportVO.java new file mode 100644 index 0000000..14b6829 --- /dev/null +++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/DaSheepfoldSummaryExportVO.java @@ -0,0 +1,55 @@ +package com.zhyc.module.base.domain; + +import com.zhyc.common.annotation.Excel; +import com.zhyc.common.core.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * 羊舍汇总导出VO + */ +@Data +public class DaSheepfoldSummaryExportVO { + + /** 牧场名称 */ + @Excel(name = "牧场") + private String ranchName; + + /** 羊舍名称 */ + @Excel(name = "羊舍名称") + private String sheepfoldName; + + /** 羊舍类型名称 */ + @Excel(name = "羊舍类型") + + private String sheepfoldTypeName; + + /** 羊舍编号 */ + @Excel(name = "羊舍编号") + private String sheepfoldNo; + + /** 羊舍总羊数 */ + @Excel(name = "羊数") + private Integer totalSheepCount; + + /** 备注 */ + @Excel(name = "备注") + private String comment; + + // 构造函数 + public DaSheepfoldSummaryExportVO() { + } + + public DaSheepfoldSummaryExportVO(String ranchName, String sheepfoldName, + String sheepfoldTypeName, String sheepfoldNo, + Integer totalSheepCount, String comment) { + this.ranchName = ranchName; + this.sheepfoldName = sheepfoldName; + this.sheepfoldTypeName = sheepfoldTypeName; + this.sheepfoldNo = sheepfoldNo; + this.totalSheepCount = totalSheepCount; + this.comment = comment; + } +} \ No newline at end of file diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/DaSheepfoldMapper.java b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/DaSheepfoldMapper.java index caa0a2c..afca568 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/DaSheepfoldMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/DaSheepfoldMapper.java @@ -2,6 +2,7 @@ package com.zhyc.module.base.mapper; import com.zhyc.module.base.domain.DaSheepfold; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -69,5 +70,13 @@ public interface DaSheepfoldMapper public int deleteDaSheepfoldByIds(Long[] ids); public int selectCount(DaSheepfold daSheepfold); + + // 新增:按组合条件删除的自定义方法(核心) + int deleteSheepfoldByCondition( + @Param("ranchId") Long ranchId, + @Param("sheepfoldNo") String sheepfoldNo, + @Param("sheepfoldTypeId") Long sheepfoldTypeId + + ); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/service/IDaSheepfoldService.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/IDaSheepfoldService.java index 54a38e5..c0bcaf9 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/service/IDaSheepfoldService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/IDaSheepfoldService.java @@ -75,4 +75,8 @@ public interface IDaSheepfoldService // 根据羊舍id获取该羊舍的羊 List sheepListById(String id); + + + /** 新增:根据组合条件删除羊圈记录 */ + boolean deleteSheepfoldByCondition(DaSheepfold sheepfold); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/DaSheepfoldServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/DaSheepfoldServiceImpl.java index dc303ed..389cacf 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/DaSheepfoldServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/DaSheepfoldServiceImpl.java @@ -1,39 +1,40 @@ package com.zhyc.module.base.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zhyc.module.base.domain.BasSheep; import com.zhyc.module.base.domain.DaSheepfold; import com.zhyc.module.base.mapper.BasSheepMapper; import com.zhyc.module.base.mapper.DaSheepfoldMapper; import com.zhyc.module.base.service.IDaSheepfoldService; -import org.slf4j.Logger; // 核心修正:导入SLF4J的Logger -import org.slf4j.LoggerFactory; // 核心修正:导入SLF4J的LoggerFactory +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; import java.util.List; /** * 羊舍管理Service业务层处理 - * + * * @author wyt * @date 2025-07-11 */ @Service -public class DaSheepfoldServiceImpl implements IDaSheepfoldService +public class DaSheepfoldServiceImpl implements IDaSheepfoldService { @Autowired private DaSheepfoldMapper daSheepfoldMapper; @Autowired private BasSheepMapper basSheepMapper; - - // 新增:创建日志对象 + // 日志对象 private static final Logger log = LoggerFactory.getLogger(DaSheepfoldServiceImpl.class); - /** * 查询羊舍管理 - * + * * @param id 羊舍管理主键 * @return 羊舍管理 */ @@ -45,54 +46,27 @@ public class DaSheepfoldServiceImpl implements IDaSheepfoldService /** * 查询羊舍管理列表 - * + * * @param daSheepfold 羊舍管理 * @return 羊舍管理 */ @Override public List selectDaSheepfoldList(DaSheepfold daSheepfold) { - List sheepfoldList = daSheepfoldMapper.selectDaSheepfoldList(daSheepfold); - - // 新增调试打印:输出每个栏位的羊数 - log.info("===== 栏位羊数调试 ====="); - log.info("查询条件:牧场ID={}, 羊舍类型ID={}, 羊舍编号={}", - daSheepfold.getRanchId(), daSheepfold.getSheepfoldTypeId(), daSheepfold.getSheepfoldNo()); - log.info("共查询到{}个栏位", sheepfoldList.size()); - - for (DaSheepfold fold : sheepfoldList) { - log.info("栏位ID={}, 羊舍编号={}, 排号={}, 栏数={}, 羊数={}", - fold.getId(), fold.getSheepfoldNo(), fold.getRowNo(), fold.getColumns(), fold.getSheepCount()); - } - log.info("===== 调试结束 =====\n"); - return daSheepfoldMapper.selectDaSheepfoldList(daSheepfold); + return sheepfoldList; // 修复:原代码重复调用Mapper,改为返回已查询的列表 } - /** * 羊舍级别汇总查询(主表格) */ public List selectDaSheepfoldSummaryList(DaSheepfold daSheepfold) { -// List summaryList = daSheepfoldMapper.selectDaSheepfoldSummaryList(daSheepfold); -// -// // 新增调试打印:输出羊舍汇总羊数 -// log.info("===== 羊舍汇总羊数调试 ====="); -// log.info("查询条件:牧场ID={}, 羊舍类型ID={}", -// daSheepfold.getRanchId(), daSheepfold.getSheepfoldTypeId()); -// log.info("共查询到{}个羊舍", summaryList.size()); -// -// for (DaSheepfold fold : summaryList) { -// log.info("羊舍编号={}, 羊舍名称={}, 总羊数={}", -// fold.getSheepfoldNo(), fold.getSheepfoldName(), fold.getTotalSheepCount()); -// } -// log.info("===== 汇总调试结束 =====\n"); return daSheepfoldMapper.selectDaSheepfoldSummaryList(daSheepfold); } /** * 新增羊舍管理 - * + * * @param daSheepfold 羊舍管理 * @return 结果 */ @@ -104,7 +78,7 @@ public class DaSheepfoldServiceImpl implements IDaSheepfoldService /** * 修改羊舍管理 - * + * * @param daSheepfold 羊舍管理 * @return 结果 */ @@ -116,7 +90,7 @@ public class DaSheepfoldServiceImpl implements IDaSheepfoldService /** * 批量删除羊舍管理 - * + * * @param ids 需要删除的羊舍管理主键 * @return 结果 */ @@ -128,7 +102,7 @@ public class DaSheepfoldServiceImpl implements IDaSheepfoldService /** * 删除羊舍管理信息 - * + * * @param id 羊舍管理主键 * @return 结果 */ @@ -138,7 +112,6 @@ public class DaSheepfoldServiceImpl implements IDaSheepfoldService return daSheepfoldMapper.deleteDaSheepfoldById(id); } - @Override public boolean checkSheepfoldNoExist(Long ranchId, Long sheepfoldTypeId, String sheepfoldNo) { DaSheepfold query = new DaSheepfold(); @@ -153,4 +126,40 @@ public class DaSheepfoldServiceImpl implements IDaSheepfoldService List basSheep = basSheepMapper.selectBasSheepBySheepfold(id); return basSheep; } -} + + /** + * 核心实现:根据组合条件删除(完全自定义,无MP依赖) + * 条件:ranch_id = ? AND sheepfold_no = ? AND sheepfold_type_id = ? + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean deleteSheepfoldByCondition(DaSheepfold sheepfold) { + // 1. 前置校验:仅校验3个核心字段(移除sheepfoldName的校验) + if (sheepfold.getRanchId() == null + || !StringUtils.hasText(sheepfold.getSheepfoldNo()) + || sheepfold.getSheepfoldTypeId() == null) { + log.error("删除失败:核心条件不能为空!牧场ID={}, 羊舍编号={}, 羊舍类型ID={}", + sheepfold.getRanchId(), sheepfold.getSheepfoldNo(), sheepfold.getSheepfoldTypeId()); + throw new IllegalArgumentException("删除失败:牧场ID、羊舍编号、羊舍类型ID不能为空"); + } + + // 2. 调用Mapper方法:仅传递3个核心字段(移除sheepfoldName) + int deleteCount = daSheepfoldMapper.deleteSheepfoldByCondition( + sheepfold.getRanchId(), + sheepfold.getSheepfoldNo(), + sheepfold.getSheepfoldTypeId() + ); + boolean isSuccess = deleteCount > 0; + + // 3. 日志打印:移除sheepfoldName相关内容 + if (isSuccess) { + log.info("成功删除羊舍记录:牧场ID={}, 羊舍编号={}, 羊舍类型ID={}", + sheepfold.getRanchId(), sheepfold.getSheepfoldNo(), sheepfold.getSheepfoldTypeId()); + } else { + log.warn("未找到匹配条件的羊舍记录:牧场ID={}, 羊舍编号={}, 羊舍类型ID={}", + sheepfold.getRanchId(), sheepfold.getSheepfoldNo(), sheepfold.getSheepfoldTypeId()); + } + + return isSuccess; + } +} \ No newline at end of file diff --git a/zhyc-module/src/main/resources/mapper/base/DaSheepfoldMapper.xml b/zhyc-module/src/main/resources/mapper/base/DaSheepfoldMapper.xml index df7ae76..902e4af 100644 --- a/zhyc-module/src/main/resources/mapper/base/DaSheepfoldMapper.xml +++ b/zhyc-module/src/main/resources/mapper/base/DaSheepfoldMapper.xml @@ -17,6 +17,16 @@ + + + + + + + + + + SELECT @@ -31,7 +41,6 @@ FROM da_sheepfold ds - - - - - - - - - - - - - + + + + DELETE FROM da_sheepfold + WHERE ranch_id = #{ranchId} + AND sheepfold_no = #{sheepfoldNo} + AND sheepfold_type_id = #{sheepfoldTypeId} + \ No newline at end of file