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 @@
-
+