diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorCategoryVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorCategoryVO.java
index 92050a6a..a01735f4 100644
--- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorCategoryVO.java
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorCategoryVO.java
@@ -9,7 +9,7 @@ import lombok.Data;
public class QmsQualityInspectorCategoryVO {
/**
- * 关联记录ID(qms_quality_inspector.id)
+ * 关联记录ID(qms_inspector_material_category_item.id)
*/
private Long id;
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorMaterialVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorMaterialVO.java
index 5dad66d7..1efdfc05 100644
--- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorMaterialVO.java
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorMaterialVO.java
@@ -9,7 +9,7 @@ import lombok.Data;
public class QmsQualityInspectorMaterialVO {
/**
- * 关联记录ID(qms_quality_inspector.id)
+ * 关联记录ID(qms_inspector_material_item.id)
*/
private Long id;
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsInspectorMaterialCategoryItem.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsInspectorMaterialCategoryItem.java
new file mode 100644
index 00000000..ad67c36d
--- /dev/null
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsInspectorMaterialCategoryItem.java
@@ -0,0 +1,63 @@
+package com.nflg.wms.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 质检员物料类别表
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+@TableName("qms_inspector_material_category_item")
+public class QmsInspectorMaterialCategoryItem implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 质检员ID (qms_quality_inspector.id)
+ */
+ private Long inspectorId;
+
+ /**
+ * 物料类别ID (qms_qc_material_category.id)
+ */
+ private Long materialCategoryId;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 修改人
+ */
+ private String updateBy;
+
+ /**
+ * 修改时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsInspectorMaterialItem.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsInspectorMaterialItem.java
new file mode 100644
index 00000000..b561f791
--- /dev/null
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsInspectorMaterialItem.java
@@ -0,0 +1,63 @@
+package com.nflg.wms.repository.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 质检员物料明细表
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+@TableName("qms_inspector_material_item")
+public class QmsInspectorMaterialItem implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 质检员ID (qms_quality_inspector.id)
+ */
+ private Long inspectorId;
+
+ /**
+ * 物料ID (qms_qc_material.id)
+ */
+ private Long materialId;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 修改人
+ */
+ private String updateBy;
+
+ /**
+ * 修改时间
+ */
+ private LocalDateTime updateTime;
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsQualityInspector.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsQualityInspector.java
index 2afa67c2..7382364a 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsQualityInspector.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsQualityInspector.java
@@ -36,11 +36,6 @@ public class QmsQualityInspector implements Serializable {
*/
private Long userId;
- /**
- * 物料ID (qms_qc_material.id),可为空
- */
- private Long materialId;
-
/**
* 启用状态:true=启用,false=禁用
*/
@@ -75,9 +70,4 @@ public class QmsQualityInspector implements Serializable {
* 修改时间
*/
private LocalDateTime updateTime;
-
- /**
- * 物料类别编码
- */
- private String materialCategoryCode;
}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectorMaterialCategoryItemMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectorMaterialCategoryItemMapper.java
new file mode 100644
index 00000000..c41a8672
--- /dev/null
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectorMaterialCategoryItemMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.wms.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.wms.repository.entity.QmsInspectorMaterialCategoryItem;
+
+/**
+ *
+ * 质检员物料类别明细 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface QmsInspectorMaterialCategoryItemMapper extends BaseMapper {
+
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectorMaterialItemMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectorMaterialItemMapper.java
new file mode 100644
index 00000000..a47c3d09
--- /dev/null
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectorMaterialItemMapper.java
@@ -0,0 +1,16 @@
+package com.nflg.wms.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.nflg.wms.repository.entity.QmsInspectorMaterialItem;
+
+/**
+ *
+ * 质检员物料明细 Mapper 接口
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface QmsInspectorMaterialItemMapper extends BaseMapper {
+
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectorMaterialCategoryItemService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectorMaterialCategoryItemService.java
new file mode 100644
index 00000000..e8ae945b
--- /dev/null
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectorMaterialCategoryItemService.java
@@ -0,0 +1,16 @@
+package com.nflg.wms.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.wms.repository.entity.QmsInspectorMaterialCategoryItem;
+
+/**
+ *
+ * 质检员物料类别明细 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IQmsInspectorMaterialCategoryItemService extends IService {
+
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectorMaterialItemService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectorMaterialItemService.java
new file mode 100644
index 00000000..64d01e07
--- /dev/null
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectorMaterialItemService.java
@@ -0,0 +1,16 @@
+package com.nflg.wms.repository.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.nflg.wms.repository.entity.QmsInspectorMaterialItem;
+
+/**
+ *
+ * 质检员物料明细 服务类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+public interface IQmsInspectorMaterialItemService extends IService {
+
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectorMaterialCategoryItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectorMaterialCategoryItemServiceImpl.java
new file mode 100644
index 00000000..95266728
--- /dev/null
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectorMaterialCategoryItemServiceImpl.java
@@ -0,0 +1,22 @@
+package com.nflg.wms.repository.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.wms.repository.entity.QmsInspectorMaterialCategoryItem;
+import com.nflg.wms.repository.mapper.QmsInspectorMaterialCategoryItemMapper;
+import com.nflg.wms.repository.service.IQmsInspectorMaterialCategoryItemService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 质检员物料类别明细 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class QmsInspectorMaterialCategoryItemServiceImpl
+ extends ServiceImpl
+ implements IQmsInspectorMaterialCategoryItemService {
+
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectorMaterialItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectorMaterialItemServiceImpl.java
new file mode 100644
index 00000000..d3cb3ee6
--- /dev/null
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectorMaterialItemServiceImpl.java
@@ -0,0 +1,22 @@
+package com.nflg.wms.repository.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nflg.wms.repository.entity.QmsInspectorMaterialItem;
+import com.nflg.wms.repository.mapper.QmsInspectorMaterialItemMapper;
+import com.nflg.wms.repository.service.IQmsInspectorMaterialItemService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 质检员物料明细 服务实现类
+ *
+ *
+ * @author 代码生成器生成
+ * @since 2025
+ */
+@Service
+public class QmsInspectorMaterialItemServiceImpl
+ extends ServiceImpl
+ implements IQmsInspectorMaterialItemService {
+
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQualityInspectorServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQualityInspectorServiceImpl.java
index b89092b7..7806c8ce 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQualityInspectorServiceImpl.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQualityInspectorServiceImpl.java
@@ -16,9 +16,15 @@ import com.nflg.wms.common.pojo.vo.QmsQualityInspectorDetailVO;
import com.nflg.wms.common.pojo.vo.QmsQualityInspectorMaterialVO;
import com.nflg.wms.common.pojo.vo.QmsQualityInspectorVO;
import com.nflg.wms.common.util.UserUtil;
+import com.nflg.wms.repository.entity.QmsInspectorMaterialCategoryItem;
+import com.nflg.wms.repository.entity.QmsInspectorMaterialItem;
+import com.nflg.wms.repository.entity.QmsQcMaterialCategory;
import com.nflg.wms.repository.entity.QmsQualityInspector;
import com.nflg.wms.repository.entity.User;
import com.nflg.wms.repository.mapper.QmsQualityInspectorMapper;
+import com.nflg.wms.repository.service.IQmsInspectorMaterialCategoryItemService;
+import com.nflg.wms.repository.service.IQmsInspectorMaterialItemService;
+import com.nflg.wms.repository.service.IQmsQcMaterialCategoryService;
import com.nflg.wms.repository.service.IQmsQualityInspectorService;
import com.nflg.wms.repository.service.IUserService;
import jakarta.annotation.Resource;
@@ -29,8 +35,8 @@ import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
-import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -48,6 +54,31 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl id)
+ */
+ private Map getCategoryCodeToIdMap(List codes) {
+ if (CollectionUtils.isEmpty(codes)) {
+ return Map.of();
+ }
+ List categories = qcMaterialCategoryService.lambdaQuery()
+ .in(QmsQcMaterialCategory::getCategoryCode, codes)
+ .list();
+ return categories.stream()
+ .collect(Collectors.toMap(QmsQcMaterialCategory::getCategoryCode, QmsQcMaterialCategory::getId));
+ }
+
// ========================= 新增 =========================
@Transactional
@@ -55,99 +86,76 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl records = new ArrayList<>();
- boolean hasMaterial = !CollectionUtils.isEmpty(request.getMaterialIds());
- boolean hasCategory = !CollectionUtils.isEmpty(request.getMaterialCategoryCodes());
-
- if (hasMaterial) {
- for (Long materialId : request.getMaterialIds()) {
- records.add(buildRecord(request.getUserId(), request.getInspectionType(),
- materialId, null, operator, now));
+ // 校验物料ID是否已被其他质检员绑定
+ if (!CollectionUtils.isEmpty(request.getMaterialIds())) {
+ List conflictMaterials = materialItemService.lambdaQuery()
+ .in(QmsInspectorMaterialItem::getMaterialId, request.getMaterialIds())
+ .list();
+ if (!conflictMaterials.isEmpty()) {
+ throw new NflgException(STATE.BusinessError, "物料ID已被其他质检员绑定,不允许重复新增");
}
}
- if (hasCategory) {
- for (String categoryCode : request.getMaterialCategoryCodes()) {
- records.add(buildRecord(request.getUserId(), request.getInspectionType(),
- null, categoryCode, operator, now));
+
+ // 校验物料类别是否已被其他质检员绑定
+ if (!CollectionUtils.isEmpty(request.getMaterialCategoryCodes())) {
+ Map codeToIdMap = getCategoryCodeToIdMap(request.getMaterialCategoryCodes());
+ List categoryIds = new ArrayList<>(codeToIdMap.values());
+ if (!categoryIds.isEmpty()) {
+ List conflictCategories = materialCategoryItemService.lambdaQuery()
+ .in(QmsInspectorMaterialCategoryItem::getMaterialCategoryId, categoryIds)
+ .list();
+ if (!conflictCategories.isEmpty()) {
+ throw new NflgException(STATE.BusinessError, "物料类别已被其他质检员绑定,不允许重复新增");
+ }
}
}
- // 物料id和物料类别都不传时,插入一条无物料关联的记录
- if (!hasMaterial && !hasCategory) {
- records.add(buildRecord(request.getUserId(), request.getInspectionType(),
- null, null, operator, now));
- }
- saveBatch(records);
- }
-
- private QmsQualityInspector buildRecord(Long userId, Integer inspectionType,
- Long materialId, String categoryCode,
- String operator, LocalDateTime now) {
- return new QmsQualityInspector()
- .setUserId(userId)
- .setInspectionType(inspectionType)
- .setMaterialId(materialId)
- .setMaterialCategoryCode(categoryCode)
+ // 插入主表
+ QmsQualityInspector inspector = new QmsQualityInspector()
+ .setUserId(request.getUserId())
+ .setInspectionType(request.getInspectionType())
.setEnable(true)
.setCreateBy(operator)
.setCreateTime(now)
.setUpdateBy(operator)
.setUpdateTime(now);
- }
+ save(inspector);
+ Long inspectorId = inspector.getId();
- /**
- * 删除物料/物料类别关联行。
- * 若删除后该 userId 下记录数归零,则保留其中一条(清空 materialId 和 materialCategoryCode),
- * 不做物理删除,确保人员记录始终存在。
- */
- private void removeMaterialOrClear(Long userId, List toRemove,
- String operator, LocalDateTime now) {
- if (CollectionUtils.isEmpty(toRemove)) {
- return;
+ // 批量插入物料明细
+ if (!CollectionUtils.isEmpty(request.getMaterialIds())) {
+ List materialItems = request.getMaterialIds().stream()
+ .map(materialId -> new QmsInspectorMaterialItem()
+ .setInspectorId(inspectorId)
+ .setMaterialId(materialId)
+ .setCreateBy(operator)
+ .setCreateTime(now)
+ .setUpdateBy(operator)
+ .setUpdateTime(now))
+ .collect(Collectors.toList());
+ materialItemService.saveBatch(materialItems);
}
- // 该用户当前全部记录
- List all = lambdaQuery()
- .eq(QmsQualityInspector::getUserId, userId)
- .list();
- long total = all.size();
-
- // 待删除的行 ID 集合
- Set removeIdSet = toRemove.stream()
- .map(QmsQualityInspector::getId)
- .collect(Collectors.toSet());
-
- // 删除后剩余条数
- long remaining = total - removeIdSet.size();
-
- if (remaining <= 0) {
- // 删完后一条不剩:从所有记录中选一条保留(优先选不在 toRemove 中的,没有则从 toRemove 中选第一条)
- QmsQualityInspector keep = all.stream()
- .filter(r -> !removeIdSet.contains(r.getId()))
- .findFirst()
- .orElse(toRemove.get(0));
-
- // 删除其余所有行(保留行除外)
- List deleteIds = all.stream()
- .map(QmsQualityInspector::getId)
- .filter(id -> !id.equals(keep.getId()))
- .collect(Collectors.toList());
- if (!deleteIds.isEmpty()) {
- removeByIds(deleteIds);
+ // 批量插入物料类别明细(按编码查 ID)
+ if (!CollectionUtils.isEmpty(request.getMaterialCategoryCodes())) {
+ Map codeToIdMap = getCategoryCodeToIdMap(request.getMaterialCategoryCodes());
+ List categoryItems = new ArrayList<>();
+ for (String code : request.getMaterialCategoryCodes()) {
+ Long categoryId = codeToIdMap.get(code);
+ if (Objects.nonNull(categoryId)) {
+ categoryItems.add(new QmsInspectorMaterialCategoryItem()
+ .setInspectorId(inspectorId)
+ .setMaterialCategoryId(categoryId)
+ .setCreateBy(operator)
+ .setCreateTime(now)
+ .setUpdateBy(operator)
+ .setUpdateTime(now));
+ }
+ }
+ if (!categoryItems.isEmpty()) {
+ materialCategoryItemService.saveBatch(categoryItems);
}
-
- // 保留行的物料字段清空
- lambdaUpdate()
- .eq(QmsQualityInspector::getId, keep.getId())
- .set(QmsQualityInspector::getMaterialId, null)
- .set(QmsQualityInspector::getMaterialCategoryCode, null)
- .set(QmsQualityInspector::getUpdateBy, operator)
- .set(QmsQualityInspector::getUpdateTime, now)
- .update();
- } else {
- // 正常物理删除
- removeByIds(new ArrayList<>(removeIdSet));
}
}
@@ -156,21 +164,27 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl records = lambdaQuery()
+ // 查询主表记录
+ QmsQualityInspector inspector = lambdaQuery()
.eq(QmsQualityInspector::getUserId, userId)
- .list();
- if (records.isEmpty()) {
+ .one();
+ if (Objects.isNull(inspector)) {
throw new NflgException(STATE.BusinessError, "该质检人员不存在");
}
// 启用状态下不允许删除
- boolean enabled = records.stream().anyMatch(r -> Boolean.TRUE.equals(r.getEnable()));
- if (enabled) {
+ if (Boolean.TRUE.equals(inspector.getEnable())) {
throw new NflgException(STATE.BusinessError, "该质检人员处于启用状态,不允许删除,请先禁用后再删除");
}
- // 删除该用户所有记录
- List ids = records.stream().map(QmsQualityInspector::getId).collect(Collectors.toList());
- removeByIds(ids);
+ Long inspectorId = inspector.getId();
+ // 删除两张明细表
+ materialItemService.lambdaUpdate()
+ .eq(QmsInspectorMaterialItem::getInspectorId, inspectorId)
+ .remove();
+ materialCategoryItemService.lambdaUpdate()
+ .eq(QmsInspectorMaterialCategoryItem::getInspectorId, inspectorId)
+ .remove();
+ // 删除主表
+ removeById(inspectorId);
}
// ========================= 修改物料/物料类别 =========================
@@ -182,49 +196,68 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl toAdd = request.getAddMaterialIds().stream()
- .map(materialId -> buildRecord(userId, inspectionType, materialId, null, operator, now))
+ List toAdd = request.getAddMaterialIds().stream()
+ .map(materialId -> new QmsInspectorMaterialItem()
+ .setInspectorId(inspectorId)
+ .setMaterialId(materialId)
+ .setCreateBy(operator)
+ .setCreateTime(now)
+ .setUpdateBy(operator)
+ .setUpdateTime(now))
.collect(Collectors.toList());
- saveBatch(toAdd);
+ materialItemService.saveBatch(toAdd);
}
- // 追加物料类别
- if (!CollectionUtils.isEmpty(request.getAddMaterialCategoryCodes())) {
- List toAdd = request.getAddMaterialCategoryCodes().stream()
- .map(code -> buildRecord(userId, inspectionType, null, code, operator, now))
- .collect(Collectors.toList());
- saveBatch(toAdd);
- }
-
- // 删除物料(按 userId + material_id)和 物料类别(按 userId + material_category_code)
- // 两者合并到一次操作,避免分步计算 total 不准确
- List toRemove = new ArrayList<>();
+ // 删除物料
if (!CollectionUtils.isEmpty(request.getRemoveMaterialIds())) {
- toRemove.addAll(lambdaQuery()
- .eq(QmsQualityInspector::getUserId, userId)
- .in(QmsQualityInspector::getMaterialId, request.getRemoveMaterialIds())
- .list());
+ materialItemService.lambdaUpdate()
+ .eq(QmsInspectorMaterialItem::getInspectorId, inspectorId)
+ .in(QmsInspectorMaterialItem::getMaterialId, request.getRemoveMaterialIds())
+ .remove();
}
+
+ // 追加物料类别(按编码查 ID)
+ if (!CollectionUtils.isEmpty(request.getAddMaterialCategoryCodes())) {
+ Map codeToIdMap = getCategoryCodeToIdMap(request.getAddMaterialCategoryCodes());
+ List toAdd = new ArrayList<>();
+ for (String code : request.getAddMaterialCategoryCodes()) {
+ Long categoryId = codeToIdMap.get(code);
+ if (Objects.nonNull(categoryId)) {
+ toAdd.add(new QmsInspectorMaterialCategoryItem()
+ .setInspectorId(inspectorId)
+ .setMaterialCategoryId(categoryId)
+ .setCreateBy(operator)
+ .setCreateTime(now)
+ .setUpdateBy(operator)
+ .setUpdateTime(now));
+ }
+ }
+ if (!toAdd.isEmpty()) {
+ materialCategoryItemService.saveBatch(toAdd);
+ }
+ }
+
+ // 删除物料类别(按编码查 ID)
if (!CollectionUtils.isEmpty(request.getRemoveMaterialCategoryCodes())) {
- toRemove.addAll(lambdaQuery()
- .eq(QmsQualityInspector::getUserId, userId)
- .in(QmsQualityInspector::getMaterialCategoryCode, request.getRemoveMaterialCategoryCodes())
- .list());
- }
- if (!toRemove.isEmpty()) {
- removeMaterialOrClear(userId, toRemove, operator, now);
+ Map codeToIdMap = getCategoryCodeToIdMap(request.getRemoveMaterialCategoryCodes());
+ List removeIds = new ArrayList<>(codeToIdMap.values());
+ if (!removeIds.isEmpty()) {
+ materialCategoryItemService.lambdaUpdate()
+ .eq(QmsInspectorMaterialCategoryItem::getInspectorId, inspectorId)
+ .in(QmsInspectorMaterialCategoryItem::getMaterialCategoryId, removeIds)
+ .remove();
+ }
}
}
@@ -237,12 +270,11 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl myMaterials = materialItemService.lambdaQuery()
+ .eq(QmsInspectorMaterialItem::getInspectorId, inspectorId)
+ .list();
+
+ // 查当前人员绑定的物料类别ID列表
+ List myCategories = materialCategoryItemService.lambdaQuery()
+ .eq(QmsInspectorMaterialCategoryItem::getInspectorId, inspectorId)
+ .list();
+
+ // 校验物料是否已被其他启用的质检员接管
+ if (!myMaterials.isEmpty()) {
+ List myMaterialIds = myMaterials.stream()
+ .map(QmsInspectorMaterialItem::getMaterialId)
+ .collect(Collectors.toList());
+ // 查其他人员中是否有相同物料绑定(排除自己)
+ List conflictItems = materialItemService.lambdaQuery()
+ .in(QmsInspectorMaterialItem::getMaterialId, myMaterialIds)
+ .ne(QmsInspectorMaterialItem::getInspectorId, inspectorId)
+ .list();
+ if (!conflictItems.isEmpty()) {
+ // 进一步判断接管人员是否处于启用状态
+ List conflictInspectorIds = conflictItems.stream()
+ .map(QmsInspectorMaterialItem::getInspectorId)
+ .distinct()
+ .collect(Collectors.toList());
+ long enabledCount = lambdaQuery()
+ .in(QmsQualityInspector::getId, conflictInspectorIds)
+ .eq(QmsQualityInspector::getEnable, true)
+ .count();
+ if (enabledCount > 0) {
+ throw new NflgException(STATE.BusinessError, "该质检员的部分物料已被其他启用的质检员接管,不允许启用");
+ }
+ }
+ }
+
+ // 校验物料类别是否已被其他启用的质检员接管
+ if (!myCategories.isEmpty()) {
+ List myCategoryIds = myCategories.stream()
+ .map(QmsInspectorMaterialCategoryItem::getMaterialCategoryId)
+ .collect(Collectors.toList());
+ List conflictItems = materialCategoryItemService.lambdaQuery()
+ .in(QmsInspectorMaterialCategoryItem::getMaterialCategoryId, myCategoryIds)
+ .ne(QmsInspectorMaterialCategoryItem::getInspectorId, inspectorId)
+ .list();
+ if (!conflictItems.isEmpty()) {
+ List conflictInspectorIds = conflictItems.stream()
+ .map(QmsInspectorMaterialCategoryItem::getInspectorId)
+ .distinct()
+ .collect(Collectors.toList());
+ long enabledCount = lambdaQuery()
+ .in(QmsQualityInspector::getId, conflictInspectorIds)
+ .eq(QmsQualityInspector::getEnable, true)
+ .count();
+ if (enabledCount > 0) {
+ throw new NflgException(STATE.BusinessError, "该质检员的部分物料类别已被其他启用的质检员接管,不允许启用");
+ }
+ }
+ }
+ }
+
lambdaUpdate()
.eq(QmsQualityInspector::getUserId, userId)
.set(QmsQualityInspector::getEnable, enable)
@@ -308,11 +410,13 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl getMaterialsByUserId(String materialNo, String materialCategoryCode, String materialDesc, Integer pageNum, Integer pageSize) {
+ public PageData getMaterialsByUserId(String materialNo, String materialCategoryCode,
+ String materialDesc, Integer pageNum, Integer pageSize) {
Long userId = UserUtil.getUserId();
Page page = new Page<>(pageNum, pageSize);
- IPage result = baseMapper.getMaterialsByUserIdWithFilter(page, userId, materialNo, materialCategoryCode, materialDesc);
-
+ IPage result = baseMapper.getMaterialsByUserIdWithFilter(
+ page, userId, materialNo, materialCategoryCode, materialDesc);
+
return new PageData()
.setPage((int) result.getCurrent())
.setPageSize((int) result.getSize())
diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsInspectorMaterialCategoryItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsInspectorMaterialCategoryItemMapper.xml
new file mode 100644
index 00000000..4d17c096
--- /dev/null
+++ b/nflg-wms-repository/src/main/resources/mapper/QmsInspectorMaterialCategoryItemMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsInspectorMaterialItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsInspectorMaterialItemMapper.xml
new file mode 100644
index 00000000..7bda46a5
--- /dev/null
+++ b/nflg-wms-repository/src/main/resources/mapper/QmsInspectorMaterialItemMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsQualityInspectorMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsQualityInspectorMapper.xml
index 7572a35e..3598fbcc 100644
--- a/nflg-wms-repository/src/main/resources/mapper/QmsQualityInspectorMapper.xml
+++ b/nflg-wms-repository/src/main/resources/mapper/QmsQualityInspectorMapper.xml
@@ -3,8 +3,7 @@
-
+
From 8448a11c057cccb404f3d65dc410c1fb5731ca2f Mon Sep 17 00:00:00 2001
From: funny <834502597@qq.com>
Date: Tue, 21 Apr 2026 10:02:43 +0800
Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B4=A8=E6=A3=80?=
=?UTF-8?q?=E4=BA=BA=E5=91=98=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../QmsQualityInspectorController.java | 2 +-
.../vo/QmsQualityInspectorCategoryVO.java | 5 ++
.../vo/QmsQualityInspectorMaterialVO.java | 1 +
.../mapper/QmsQualityInspectorMapper.java | 10 +++
.../service/IQmsQualityInspectorService.java | 2 +-
.../impl/QmsQualityInspectorServiceImpl.java | 89 +++++++++++++++----
.../mapper/QmsQualityInspectorMapper.xml | 34 +++++++
7 files changed, 126 insertions(+), 17 deletions(-)
diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQualityInspectorController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQualityInspectorController.java
index a7b51e1b..6610f841 100644
--- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQualityInspectorController.java
+++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQualityInspectorController.java
@@ -75,7 +75,7 @@ public class QmsQualityInspectorController extends BaseController {
/**
* 按员工ID查询质检人员详情(物料和物料类别分开返回,不分页)
*
- * @param userId 员工ID
+ * @param userId 员工ID(user.id)
*/
@GetMapping("detail")
public ApiResult detail(@NotNull Long userId) {
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorCategoryVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorCategoryVO.java
index a01735f4..c1a96d72 100644
--- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorCategoryVO.java
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorCategoryVO.java
@@ -13,6 +13,11 @@ public class QmsQualityInspectorCategoryVO {
*/
private Long id;
+ /**
+ * 物料类别ID(qms_qc_material_category.id)
+ */
+ private Long materialCategoryId;
+
/**
* 物料类别编码
*/
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorMaterialVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorMaterialVO.java
index 1efdfc05..5e2de9cf 100644
--- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorMaterialVO.java
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsQualityInspectorMaterialVO.java
@@ -10,6 +10,7 @@ public class QmsQualityInspectorMaterialVO {
/**
* 关联记录ID(qms_inspector_material_item.id)
+.id)
*/
private Long id;
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsQualityInspectorMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsQualityInspectorMapper.java
index d1176e23..5fbb9116 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsQualityInspectorMapper.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsQualityInspectorMapper.java
@@ -54,4 +54,14 @@ public interface QmsQualityInspectorMapper extends BaseMapper getCategoriesByUserId(@Param("userId") Long userId);
+
+ /**
+ * 按 userId(明细表 inspector_id 存的是 user.id)查询关联物料列表
+ */
+ List getMaterialsByInspectorId(@Param("inspectorId") Long inspectorId);
+
+ /**
+ * 按 userId(明细表 inspector_id 存的是 user.id)查询关联物料类别列表
+ */
+ List getCategoriesByInspectorId(@Param("inspectorId") Long inspectorId);
}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsQualityInspectorService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsQualityInspectorService.java
index b255ffae..09f7830d 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsQualityInspectorService.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsQualityInspectorService.java
@@ -46,7 +46,7 @@ public interface IQmsQualityInspectorService extends IService search(QmsQualityInspectorSearchQO request);
/**
- * 按员工ID查询质检人员详情,将物料和物料类别分开返回(不分页)
+ * 按员工ID(user_id)查询质检人员详情,物料和物料类别分开返回(不分页)
*/
QmsQualityInspectorDetailVO getDetailByUserId(Long userId);
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQualityInspectorServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQualityInspectorServiceImpl.java
index 7806c8ce..7f03534c 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQualityInspectorServiceImpl.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQualityInspectorServiceImpl.java
@@ -11,10 +11,7 @@ import com.nflg.wms.common.pojo.qo.QmsQualityInspectorAddQO;
import com.nflg.wms.common.pojo.qo.QmsQualityInspectorSearchQO;
import com.nflg.wms.common.pojo.qo.QmsQualityInspectorTransferQO;
import com.nflg.wms.common.pojo.qo.QmsQualityInspectorUpdateQO;
-import com.nflg.wms.common.pojo.vo.QmsQualityInspectorCategoryVO;
-import com.nflg.wms.common.pojo.vo.QmsQualityInspectorDetailVO;
-import com.nflg.wms.common.pojo.vo.QmsQualityInspectorMaterialVO;
-import com.nflg.wms.common.pojo.vo.QmsQualityInspectorVO;
+import com.nflg.wms.common.pojo.vo.*;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.QmsInspectorMaterialCategoryItem;
import com.nflg.wms.repository.entity.QmsInspectorMaterialItem;
@@ -24,6 +21,12 @@ import com.nflg.wms.repository.entity.User;
import com.nflg.wms.repository.mapper.QmsQualityInspectorMapper;
import com.nflg.wms.repository.service.IQmsInspectorMaterialCategoryItemService;
import com.nflg.wms.repository.service.IQmsInspectorMaterialItemService;
+import com.nflg.wms.repository.entity.Department;
+import com.nflg.wms.repository.entity.Position;
+import com.nflg.wms.repository.entity.UserInterior;
+import com.nflg.wms.repository.service.IDepartmentService;
+import com.nflg.wms.repository.service.IPositionService;
+import com.nflg.wms.repository.service.IUserInteriorService;
import com.nflg.wms.repository.service.IQmsQcMaterialCategoryService;
import com.nflg.wms.repository.service.IQmsQualityInspectorService;
import com.nflg.wms.repository.service.IUserService;
@@ -33,10 +36,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -63,6 +63,15 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl conflictMaterials = materialItemService.lambdaQuery()
@@ -121,7 +139,7 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl conflictMaterials = materialItemService.lambdaQuery()
+ .in(QmsInspectorMaterialItem::getMaterialId, request.getAddMaterialIds())
+ .list();
+ if (!conflictMaterials.isEmpty()) {
+ throw new NflgException(STATE.BusinessError, "追加的物料中存在已被质检员绑定的物料,不允许重复追加");
+ }
List toAdd = request.getAddMaterialIds().stream()
.map(materialId -> new QmsInspectorMaterialItem()
.setInspectorId(inspectorId)
@@ -230,6 +255,16 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl codeToIdMap = getCategoryCodeToIdMap(request.getAddMaterialCategoryCodes());
+ List addCategoryIds = new ArrayList<>(codeToIdMap.values());
+ // 校验这些物料类别是否已被任意质检员绑定(含自己)
+ if (!addCategoryIds.isEmpty()) {
+ List conflictCategories = materialCategoryItemService.lambdaQuery()
+ .in(QmsInspectorMaterialCategoryItem::getMaterialCategoryId, addCategoryIds)
+ .list();
+ if (!conflictCategories.isEmpty()) {
+ throw new NflgException(STATE.BusinessError, "追加的物料类别中存在已被质检员绑定的类别,不允许重复追加");
+ }
+ }
List toAdd = new ArrayList<>();
for (String code : request.getAddMaterialCategoryCodes()) {
Long categoryId = codeToIdMap.get(code);
@@ -270,7 +305,7 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl
SELECT
imci.id,
+ imci.material_category_id,
mc.category_code AS material_category_code,
mc.category_name AS material_category_name
FROM qms_inspector_material_category_item imci
@@ -147,4 +148,37 @@
ORDER BY imci.id ASC
+
+
+
+
+
+
From 60317a60f232b41a7808a75d3ef6dd70bcd2597d Mon Sep 17 00:00:00 2001
From: funny <834502597@qq.com>
Date: Tue, 21 Apr 2026 10:30:09 +0800
Subject: [PATCH 3/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BE=9B=E5=BA=94?=
=?UTF-8?q?=E5=95=86=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...msInspectionStandardControllerService.java | 1 -
.../pojo/vo/QmsSupplierSqeMapFlatVO.java | 62 +++++++++++++++++++
.../common/pojo/vo/QmsSupplierSqeMapVO.java | 5 +-
.../common/pojo/vo/QmsSupplierSqeUserVO.java | 20 ++++++
.../mapper/QmsSupplierSqeMapMapper.java | 6 ++
.../impl/QmsSupplierSqeMapServiceImpl.java | 56 ++++++++++++++++-
.../mapper/QmsSupplierSqeMapMapper.xml | 30 +++++++++
7 files changed, 176 insertions(+), 4 deletions(-)
create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeMapFlatVO.java
create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeUserVO.java
diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java
index c529fb5f..8899c0ac 100644
--- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java
+++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java
@@ -438,7 +438,6 @@ public class QmsInspectionStandardControllerService {
Long userId = UserUtil.getUserId();
String userName = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
-
// 2. 处理检测项列表
processItems(qo.getInspectionStandardId(), qo.getItems(), userId, userName, now);
}
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeMapFlatVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeMapFlatVO.java
new file mode 100644
index 00000000..4c494973
--- /dev/null
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeMapFlatVO.java
@@ -0,0 +1,62 @@
+package com.nflg.wms.common.pojo.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 供应商-用户 关联平铺 VO(每行一条关联记录,供 Service 层聚合用)
+ */
+@Data
+public class QmsSupplierSqeMapFlatVO {
+
+ /**
+ * 供应商ID
+ */
+ private Long supplierId;
+
+ /**
+ * 供应商编号
+ */
+ private String supplierCode;
+
+ /**
+ * 供应商名称
+ */
+ private String supplierName;
+
+ /**
+ * 用户ID
+ */
+ private Long userId;
+
+ /**
+ * 用户名称
+ */
+ private String userName;
+
+ /**
+ * 启用状态
+ */
+ private Boolean enable;
+
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 修改时间
+ */
+ private LocalDateTime updateTime;
+
+ /**
+ * 修改人
+ */
+ private String updateBy;
+}
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeMapVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeMapVO.java
index bb1e32bd..d073b69c 100644
--- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeMapVO.java
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeMapVO.java
@@ -3,6 +3,7 @@ package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.time.LocalDateTime;
+import java.util.List;
/**
* 供应商-用户 关联 VO(按供应商聚合,每行一个供应商)
@@ -26,9 +27,9 @@ public class QmsSupplierSqeMapVO {
private String supplierName;
/**
- * SQE用户名称(多个用逗号分隔)
+ * 关联的SQE用户列表(含 userId 和 userName)
*/
- private String userName;
+ private List users;
/**
* 统一启用状态:所有关联记录均启用时为true,否则为false
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeUserVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeUserVO.java
new file mode 100644
index 00000000..41ac7588
--- /dev/null
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsSupplierSqeUserVO.java
@@ -0,0 +1,20 @@
+package com.nflg.wms.common.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * SQE用户简要信息(用于 QmsSupplierSqeMapVO 中的 users 列表)
+ */
+@Data
+public class QmsSupplierSqeUserVO {
+
+ /**
+ * 用户ID
+ */
+ private Long userId;
+
+ /**
+ * 用户名称
+ */
+ private String userName;
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsSupplierSqeMapMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsSupplierSqeMapMapper.java
index 1c1a1e50..82cdef43 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsSupplierSqeMapMapper.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsSupplierSqeMapMapper.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.wms.common.pojo.qo.QmsSupplierSqeSearchQO;
import com.nflg.wms.common.pojo.qo.QmsUserMaterialsQO;
+import com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapFlatVO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapVO;
import com.nflg.wms.common.pojo.vo.QmsUserSupplierVO;
import com.nflg.wms.repository.entity.QmsSupplierSqeMap;
@@ -27,6 +28,11 @@ public interface QmsSupplierSqeMapMapper extends BaseMapper {
*/
IPage searchMap(@Param("request") QmsSupplierSqeSearchQO request, Page page);
+ /**
+ * 平铺查询(每行一条关联记录,含 userId/userName,供 Service 层聚合为 List)
+ */
+ List searchMapFlat(@Param("request") QmsSupplierSqeSearchQO request);
+
/**
* 按 userId 查询关联的供应商列表(支持供应商过滤,分页)
*/
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsSupplierSqeMapServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsSupplierSqeMapServiceImpl.java
index 77a938ce..02c18a50 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsSupplierSqeMapServiceImpl.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsSupplierSqeMapServiceImpl.java
@@ -7,7 +7,9 @@ import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.exception.NflgException;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.QmsSupplierSqeSearchQO;
+import com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapFlatVO;
import com.nflg.wms.common.pojo.vo.QmsSupplierSqeMapVO;
+import com.nflg.wms.common.pojo.vo.QmsSupplierSqeUserVO;
import com.nflg.wms.common.pojo.vo.QmsUserSupplierVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.QmsSupplierSqeMap;
@@ -17,7 +19,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@@ -36,7 +41,56 @@ public class QmsSupplierSqeMapServiceImpl extends ServiceImpl searchMap(QmsSupplierSqeSearchQO request) {
- return baseMapper.searchMap(request, new Page<>(request.getPage(), request.getPageSize()));
+ // 1. 查平铺列表
+ List flatList = baseMapper.searchMapFlat(request);
+
+ // 2. 按 supplierId 聚合(保持原始排序,LinkedHashMap)
+ Map grouped = new LinkedHashMap<>();
+ for (QmsSupplierSqeMapFlatVO flat : flatList) {
+ QmsSupplierSqeMapVO vo = grouped.computeIfAbsent(flat.getSupplierId(), id -> {
+ QmsSupplierSqeMapVO newVo = new QmsSupplierSqeMapVO();
+ newVo.setSupplierId(flat.getSupplierId());
+ newVo.setSupplierCode(flat.getSupplierCode());
+ newVo.setSupplierName(flat.getSupplierName());
+ newVo.setEnable(flat.getEnable());
+ newVo.setCreateTime(flat.getCreateTime());
+ newVo.setCreateBy(flat.getCreateBy());
+ newVo.setUpdateTime(flat.getUpdateTime());
+ newVo.setUpdateBy(flat.getUpdateBy());
+ newVo.setUsers(new ArrayList<>());
+ return newVo;
+ });
+ // 追加用户信息
+ if (Objects.nonNull(flat.getUserId())) {
+ QmsSupplierSqeUserVO userVO = new QmsSupplierSqeUserVO();
+ userVO.setUserId(flat.getUserId());
+ userVO.setUserName(flat.getUserName());
+ vo.getUsers().add(userVO);
+ }
+ // enable 取最严格(有一条禁用则整体禁用)
+ if (Boolean.FALSE.equals(flat.getEnable())) {
+ vo.setEnable(false);
+ }
+ // 取最晚修改时间
+ if (flat.getUpdateTime() != null && (vo.getUpdateTime() == null
+ || flat.getUpdateTime().isAfter(vo.getUpdateTime()))) {
+ vo.setUpdateTime(flat.getUpdateTime());
+ vo.setUpdateBy(flat.getUpdateBy());
+ }
+ }
+
+ // 3. 手动分页
+ List allList = new ArrayList<>(grouped.values());
+ int page = request.getPage();
+ int pageSize = request.getPageSize();
+ int total = allList.size();
+ int fromIndex = Math.min((page - 1) * pageSize, total);
+ int toIndex = Math.min(fromIndex + pageSize, total);
+ List pageList = allList.subList(fromIndex, toIndex);
+
+ Page result = new Page<>(page, pageSize, total);
+ result.setRecords(pageList);
+ return result;
}
@Transactional
diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsSupplierSqeMapMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsSupplierSqeMapMapper.xml
index 8b49cd2d..470b2f61 100644
--- a/nflg-wms-repository/src/main/resources/mapper/QmsSupplierSqeMapMapper.xml
+++ b/nflg-wms-repository/src/main/resources/mapper/QmsSupplierSqeMapMapper.xml
@@ -32,6 +32,36 @@
ORDER BY qssm.supplier_id DESC
+
+
+