diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepGroupMappingController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepGroupMappingController.java index ae73bad..31196e4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepGroupMappingController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/BasSheepGroupMappingController.java @@ -18,6 +18,11 @@ import com.zhyc.module.base.service.IBasSheepGroupMappingService; import com.zhyc.common.utils.poi.ExcelUtil; import com.zhyc.common.core.page.TableDataInfo; +// 1. 导入 +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + /** * 羊只分组关联Controller * @@ -43,6 +48,10 @@ public class BasSheepGroupMappingController extends BaseController return getDataTable(list); } + // 2. 声明(放在类内部、方法外部) + private static final Logger log = LoggerFactory.getLogger(BasSheepGroupMappingController.class); + + @PreAuthorize("@ss.hasPermi('sheep_grouping:sheep_grouping:list')") @GetMapping("/listJoin") public TableDataInfo list( @@ -103,7 +112,11 @@ public class BasSheepGroupMappingController extends BaseController @PutMapping public AjaxResult edit(@RequestBody BasSheepGroupMapping basSheepGroupMapping) { - return toAjax(basSheepGroupMappingService.updateBasSheepGroupMapping(basSheepGroupMapping)); + try { + return toAjax(basSheepGroupMappingService.updateBasSheepGroupMapping(basSheepGroupMapping)); + } catch (RuntimeException e) { + return error(e.getMessage()); + } } /** @@ -116,4 +129,20 @@ public class BasSheepGroupMappingController extends BaseController { return toAjax(basSheepGroupMappingService.deleteBasSheepGroupMappingByIds(ids)); } + + + @PostMapping("/addByEarTags") + public AjaxResult addByEarTags(@RequestBody Map params) { + List earTags = (List) params.get("earTags"); + Long groupId = Long.valueOf(params.get("groupId").toString()); + + if (earTags == null || earTags.isEmpty()) { + return error("耳号列表不能为空"); + } + + return basSheepGroupMappingService.addByEarTags(earTags, groupId); + } + + + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepGroupMappingMapper.java b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepGroupMappingMapper.java index caf186e..5cabb9c 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepGroupMappingMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/BasSheepGroupMappingMapper.java @@ -76,4 +76,11 @@ public interface BasSheepGroupMappingMapper public int deleteBasSheepGroupMappingByIds(Long[] ids); + List> selectSheepIdsByEarTags(@Param("earTags") List earTags); + + int batchInsert(@Param("list") List list); + + + List selectListByGroupId(@Param("groupId") Long groupId); + } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepGroupMappingService.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepGroupMappingService.java index a9f08a1..d6b5c7a 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepGroupMappingService.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/IBasSheepGroupMappingService.java @@ -3,6 +3,7 @@ package com.zhyc.module.base.service; import java.util.List; import java.util.Map; +import com.zhyc.common.core.domain.AjaxResult; import com.zhyc.module.base.domain.BasSheepGroupMapping; /** @@ -67,4 +68,6 @@ public interface IBasSheepGroupMappingService * @return 结果 */ public int deleteBasSheepGroupMappingById(Long id); + + public AjaxResult addByEarTags(List earTags, Long groupId); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepGroupMappingServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepGroupMappingServiceImpl.java index b0b38ab..74418da 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepGroupMappingServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/base/service/impl/BasSheepGroupMappingServiceImpl.java @@ -1,8 +1,9 @@ package com.zhyc.module.base.service.impl; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; +import com.zhyc.common.core.domain.AjaxResult; import com.zhyc.module.base.domain.BasSheepGroupMapping; import com.zhyc.module.base.mapper.BasSheepGroupMappingMapper; import com.zhyc.module.base.service.IBasSheepGroupMappingService; @@ -70,9 +71,21 @@ public class BasSheepGroupMappingServiceImpl implements IBasSheepGroupMappingSer * @param basSheepGroupMapping 羊只分组关联 * @return 结果 */ +// @Override +// public int updateBasSheepGroupMapping(BasSheepGroupMapping basSheepGroupMapping) +// { +// return basSheepGroupMappingMapper.updateBasSheepGroupMapping(basSheepGroupMapping); +// } @Override - public int updateBasSheepGroupMapping(BasSheepGroupMapping basSheepGroupMapping) - { + public int updateBasSheepGroupMapping(BasSheepGroupMapping basSheepGroupMapping) { + + Long SheepId = basSheepGroupMapping.getSheepId(); + Long GroupId = basSheepGroupMapping.getGroupId(); + existsInGroup(SheepId,GroupId); + + if (existsInGroup(basSheepGroupMapping.getSheepId(), basSheepGroupMapping.getGroupId())) { + throw new RuntimeException("该羊已在此分组,无需修改"); + } return basSheepGroupMappingMapper.updateBasSheepGroupMapping(basSheepGroupMapping); } @@ -100,4 +113,77 @@ public class BasSheepGroupMappingServiceImpl implements IBasSheepGroupMappingSer return basSheepGroupMappingMapper.deleteBasSheepGroupMappingById(id); } + + + @Override + public AjaxResult addByEarTags(List earTags, Long groupId) { + // 1. 参数判空 + if (earTags == null || earTags.isEmpty()) { + return AjaxResult.error("耳号列表不能为空"); + } + + // 2. 根据耳号查询羊只(manage_tags -> id) + List> sheepList = basSheepGroupMappingMapper.selectSheepIdsByEarTags(earTags); + Map tagToId = new HashMap<>(); + for (Map s : sheepList) { + tagToId.put((String) s.get("manage_tags"), ((Number) s.get("id")).longValue()); + } + + // 3. 不存在的耳号 + List missing = new ArrayList<>(); + for (String tag : earTags) { + if (!tagToId.containsKey(tag)) { + missing.add(tag); + } + } + if (!missing.isEmpty()) { + Map res = new HashMap<>(); + res.put("success", false); + res.put("missing", missing); + return AjaxResult.success(res); + } + + // 4. 查询该分组下已存在的羊只ID + List existingRows = basSheepGroupMappingMapper.selectListByGroupId(groupId); + System.out.println("🔍 existingRows 类型 = " + existingRows.getClass()); + + Set existingIds = existingRows.stream() + .map(BasSheepGroupMapping::getSheepId) + .collect(Collectors.toSet()); + + System.out.println("🔍 existingIds = " + existingIds); + + // 5. 过滤出未在该分组的羊只 + List toInsert = new ArrayList<>(); + for (Map.Entry e : tagToId.entrySet()) { + Long sheepId = e.getValue(); + if (!existingIds.contains(sheepId)) { + BasSheepGroupMapping m = new BasSheepGroupMapping(); + m.setSheepId(sheepId); + m.setGroupId(groupId); + toInsert.add(m); + } + } + + if (toInsert.isEmpty()) { + return AjaxResult.success("所选羊只已全部在该分组中"); + } + + // 6. 批量插入 + int rows = basSheepGroupMappingMapper.batchInsert(toInsert); + Map res = new HashMap<>(); + res.put("success", true); + res.put("inserted", rows); + return AjaxResult.success(res); + } + + private boolean existsInGroup(Long sheepId, Long groupId) { + BasSheepGroupMapping param = new BasSheepGroupMapping(); + List> list = basSheepGroupMappingMapper + .selectBasSheepGroupMappingList(sheepId, groupId, null); + return !list.isEmpty(); + } + + + } diff --git a/zhyc-module/src/main/resources/mapper/base/BasSheepGroupMappingMapper.xml b/zhyc-module/src/main/resources/mapper/base/BasSheepGroupMappingMapper.xml index 7eaaf52..6fe31d8 100644 --- a/zhyc-module/src/main/resources/mapper/base/BasSheepGroupMappingMapper.xml +++ b/zhyc-module/src/main/resources/mapper/base/BasSheepGroupMappingMapper.xml @@ -52,19 +52,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND m.group_id = #{groupId} AND s.bs_manage_tags IN - - #{bsManageTag} + + #{tag} ORDER BY m.id - - - - - + SELECT id, manage_tags + FROM bas_sheep + WHERE manage_tags IN + + #{tag} + + + + + + INSERT INTO bas_sheep_group_mapping (sheep_id, group_id) + VALUES + + (#{item.sheepId}, #{item.groupId}) + + + + + \ No newline at end of file