修改质检人员管理功能

This commit is contained in:
funny 2026-04-21 10:02:43 +08:00
parent 486f17278f
commit 8448a11c05
7 changed files with 126 additions and 17 deletions

View File

@ -75,7 +75,7 @@ public class QmsQualityInspectorController extends BaseController {
/**
* 按员工ID查询质检人员详情物料和物料类别分开返回不分页
*
* @param userId 员工ID
* @param userId 员工IDuser.id
*/
@GetMapping("detail")
public ApiResult<QmsQualityInspectorDetailVO> detail(@NotNull Long userId) {

View File

@ -13,6 +13,11 @@ public class QmsQualityInspectorCategoryVO {
*/
private Long id;
/**
* 物料类别IDqms_qc_material_category.id
*/
private Long materialCategoryId;
/**
* 物料类别编码
*/

View File

@ -10,6 +10,7 @@ public class QmsQualityInspectorMaterialVO {
/**
* 关联记录IDqms_inspector_material_item.id
.id
*/
private Long id;

View File

@ -54,4 +54,14 @@ public interface QmsQualityInspectorMapper extends BaseMapper<QmsQualityInspecto
* userId 查询关联物料类别列表
*/
List<QmsQualityInspectorCategoryVO> getCategoriesByUserId(@Param("userId") Long userId);
/**
* userId明细表 inspector_id 存的是 user.id查询关联物料列表
*/
List<QmsQualityInspectorMaterialVO> getMaterialsByInspectorId(@Param("inspectorId") Long inspectorId);
/**
* userId明细表 inspector_id 存的是 user.id查询关联物料类别列表
*/
List<QmsQualityInspectorCategoryVO> getCategoriesByInspectorId(@Param("inspectorId") Long inspectorId);
}

View File

@ -46,7 +46,7 @@ public interface IQmsQualityInspectorService extends IService<QmsQualityInspecto
IPage<QmsQualityInspectorVO> search(QmsQualityInspectorSearchQO request);
/**
* 按员工ID查询质检人员详情物料和物料类别分开返回不分页
* 按员工IDuser_id查询质检人员详情物料和物料类别分开返回不分页
*/
QmsQualityInspectorDetailVO getDetailByUserId(Long userId);

View File

@ -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<QmsQualityInspec
@Resource
private IQmsQcMaterialCategoryService qcMaterialCategoryService;
@Resource
private IUserInteriorService userInteriorService;
@Resource
private IDepartmentService departmentService;
@Resource
private IPositionService positionService;
// ========================= 工具方法 =========================
/**
@ -87,6 +96,15 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl<QmsQualityInspec
String operator = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
// 校验同一 userId + inspectionType 是否已存在
boolean exists = lambdaQuery()
.eq(QmsQualityInspector::getUserId, request.getUserId())
.eq(QmsQualityInspector::getInspectionType, request.getInspectionType())
.exists();
if (exists) {
throw new NflgException(STATE.BusinessError, "该质检人员已存在相同质检类型,不允许重复新增");
}
// 校验物料ID是否已被其他质检员绑定
if (!CollectionUtils.isEmpty(request.getMaterialIds())) {
List<QmsInspectorMaterialItem> conflictMaterials = materialItemService.lambdaQuery()
@ -121,7 +139,7 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl<QmsQualityInspec
.setUpdateBy(operator)
.setUpdateTime(now);
save(inspector);
Long inspectorId = inspector.getId();
Long inspectorId = inspector.getUserId();
// 批量插入物料明细
if (!CollectionUtils.isEmpty(request.getMaterialIds())) {
@ -203,10 +221,17 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl<QmsQualityInspec
if (Objects.isNull(inspector)) {
throw new NflgException(STATE.BusinessError, "该质检人员不存在");
}
Long inspectorId = inspector.getId();
Long inspectorId = inspector.getUserId();
// 追加物料
if (!CollectionUtils.isEmpty(request.getAddMaterialIds())) {
// 校验这些物料是否已被任意质检员绑定含自己
List<QmsInspectorMaterialItem> conflictMaterials = materialItemService.lambdaQuery()
.in(QmsInspectorMaterialItem::getMaterialId, request.getAddMaterialIds())
.list();
if (!conflictMaterials.isEmpty()) {
throw new NflgException(STATE.BusinessError, "追加的物料中存在已被质检员绑定的物料,不允许重复追加");
}
List<QmsInspectorMaterialItem> toAdd = request.getAddMaterialIds().stream()
.map(materialId -> new QmsInspectorMaterialItem()
.setInspectorId(inspectorId)
@ -230,6 +255,16 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl<QmsQualityInspec
// 追加物料类别按编码查 ID
if (!CollectionUtils.isEmpty(request.getAddMaterialCategoryCodes())) {
Map<String, Long> codeToIdMap = getCategoryCodeToIdMap(request.getAddMaterialCategoryCodes());
List<Long> addCategoryIds = new ArrayList<>(codeToIdMap.values());
// 校验这些物料类别是否已被任意质检员绑定含自己
if (!addCategoryIds.isEmpty()) {
List<QmsInspectorMaterialCategoryItem> conflictCategories = materialCategoryItemService.lambdaQuery()
.in(QmsInspectorMaterialCategoryItem::getMaterialCategoryId, addCategoryIds)
.list();
if (!conflictCategories.isEmpty()) {
throw new NflgException(STATE.BusinessError, "追加的物料类别中存在已被质检员绑定的类别,不允许重复追加");
}
}
List<QmsInspectorMaterialCategoryItem> toAdd = new ArrayList<>();
for (String code : request.getAddMaterialCategoryCodes()) {
Long categoryId = codeToIdMap.get(code);
@ -270,7 +305,7 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl<QmsQualityInspec
@Override
public QmsQualityInspectorDetailVO getDetailByUserId(Long userId) {
// 查主表
// user_id 查主表取到 inspector.id 后再查两张明细表
QmsQualityInspector inspector = lambdaQuery()
.eq(QmsQualityInspector::getUserId, userId)
.one();
@ -281,6 +316,29 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl<QmsQualityInspec
// user 信息
User user = userService.getById(userId);
// user_interior获取 deptId positionId
UserInterior userInterior = userInteriorService.lambdaQuery()
.eq(UserInterior::getUserId, userId)
.one();
// 查部门名称
String deptName = null;
String positionName = null;
if (Objects.nonNull(userInterior)) {
if (Objects.nonNull(userInterior.getDeptId())) {
Department department = departmentService.getById(userInterior.getDeptId());
if (Objects.nonNull(department)) {
deptName = department.getName();
}
}
if (Objects.nonNull(userInterior.getPositionId())) {
Position position = positionService.getById(userInterior.getPositionId());
if (Objects.nonNull(position)) {
positionName = position.getName();
}
}
}
QmsQualityInspectorDetailVO detail = new QmsQualityInspectorDetailVO();
detail.setUserId(userId);
detail.setInspectionType(inspector.getInspectionType());
@ -289,12 +347,13 @@ public class QmsQualityInspectorServiceImpl extends ServiceImpl<QmsQualityInspec
detail.setUserCode(user.getUserCode());
detail.setUserName(user.getUserName());
}
detail.setDeptName(deptName);
detail.setDeptLeaderName(null);
detail.setPositionName(positionName);
// 查物料列表
detail.setMaterials(baseMapper.getMaterialsByUserId(userId));
// 查物料类别列表
detail.setCategories(baseMapper.getCategoriesByUserId(userId));
// userId 查物料列表和物料类别列表明细表 inspector_id 存的是 user.id
detail.setMaterials(baseMapper.getMaterialsByInspectorId(userId));
detail.setCategories(baseMapper.getCategoriesByInspectorId(userId));
return detail;
}

View File

@ -137,6 +137,7 @@
<select id="getCategoriesByUserId" resultType="com.nflg.wms.common.pojo.vo.QmsQualityInspectorCategoryVO">
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
</select>
<!-- 按 inspectorId 直接查询关联物料列表 -->
<select id="getMaterialsByInspectorId" resultType="com.nflg.wms.common.pojo.vo.QmsQualityInspectorMaterialVO">
SELECT
imi.id,
imi.material_id,
m.material_no,
m.drawing_no,
m.drawing_no_ver,
m.material_category_code,
m.material_category_code_path_name AS material_category_name,
m.material_name,
m.material_specifications,
m.material_texture,
m.is_standard_maintained AS material_status
FROM qms_inspector_material_item imi
LEFT JOIN qms_qc_material m ON m.id = imi.material_id
WHERE imi.inspector_id = #{inspectorId}
ORDER BY imi.id ASC
</select>
<!-- 按 inspectorId 直接查询关联物料类别列表(通过 material_category_id JOIN qms_qc_material_category -->
<select id="getCategoriesByInspectorId" resultType="com.nflg.wms.common.pojo.vo.QmsQualityInspectorCategoryVO">
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
LEFT JOIN qms_qc_material_category mc ON mc.id = imci.material_category_id
WHERE imci.inspector_id = #{inspectorId}
ORDER BY imci.id ASC
</select>
</mapper>