package com.ruoyi.inspect.service.impl; import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.inspect.mapper.StaffCompetencyInspectItemConfigMapper; import com.ruoyi.inspect.pojo.StaffCompetencyInspectItemConfig; import com.ruoyi.inspect.service.StaffCompetencyInspectItemConfigService; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * @author 27233 * @description 针对表【staff_competency_inspect_item_config(人员能力-检验项配置表)】的数据库操作Service实现 * @createDate 2026-03-26 17:16:51 */ @Service public class StaffCompetencyInspectItemConfigServiceImpl extends ServiceImpl implements StaffCompetencyInspectItemConfigService{ @Override public List selectConfigList(StaffCompetencyInspectItemConfig config) { return baseMapper.selectConfigList(config); } @Override public StaffCompetencyInspectItemConfig selectConfigById(Long configId) { return baseMapper.selectConfigById(configId); } @Override public boolean checkItemNameUnique(StaffCompetencyInspectItemConfig config) { Long configId = ObjectUtils.isEmpty(config.getId()) ? -1L : config.getId(); StaffCompetencyInspectItemConfig info = baseMapper.checkDeptNameUnique(config.getItemName(), config.getParentId()); if (StringUtils.isNotNull(info) && info.getId().longValue() != configId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } @Override public int insertConfig(StaffCompetencyInspectItemConfig config) { StaffCompetencyInspectItemConfig info = baseMapper.selectConfigById(config.getParentId()); if(ObjectUtils.isEmpty(config.getParentId())){ StaffCompetencyInspectItemConfig itemConfig = baseMapper.selectOne(Wrappers.lambdaQuery().orderByAsc(StaffCompetencyInspectItemConfig::getParentId).last("limit 1")); if(ObjectUtils.isNotEmpty(itemConfig)){ config.setParentId(itemConfig.getParentId()-1L); }else{ config.setParentId(0L); } } // 如果父节点不为正常状态,则不允许新增子节点 if (ObjectUtils.isNotEmpty(info) && !info.getIsEnable()) { throw new ServiceException("检验项点停用,不允许新增"); } if(Long.compare(config.getParentId(),0)<1){ config.setAncestors(config.getParentId().toString()); }else{ config.setAncestors(info.getAncestors() + "," + config.getParentId()); } return baseMapper.insertConfig(config); } @Override public int updateConfig(StaffCompetencyInspectItemConfig config) { StaffCompetencyInspectItemConfig newParentConfig = baseMapper.selectConfigById(config.getParentId()); StaffCompetencyInspectItemConfig oldConfig = baseMapper.selectConfigById(config.getId()); if (StringUtils.isNotNull(newParentConfig) && StringUtils.isNotNull(oldConfig)) { String newAncestors = newParentConfig.getAncestors() + "," + newParentConfig.getId(); String oldAncestors = oldConfig.getAncestors(); config.setAncestors(newAncestors); updateConfigChildren(config.getId(), newAncestors, oldAncestors); } int result = baseMapper.updateConfig(config); if (config.getIsEnable() && Long.compare(config.getParentId(),0)==1) { // 如果该检验项点是启用状态,则启用该检验项点的所有上级项点 updateParentConfigStatusNormal(config); } return result; } /** * 修改该检验项点的父级项点状态 * * @param config 当前检验项点 */ private void updateParentConfigStatusNormal(StaffCompetencyInspectItemConfig config) { String ancestors = config.getAncestors(); List configIds = Arrays.stream(Convert.toLongArray(ancestors)).filter(f->Long.compare(f,0)>0).collect(Collectors.toList()); baseMapper.updateConfigStatusNormal(configIds); } /** * 修改子元素关系 * * @param configId 被修改的检验项点ID * @param newAncestors 新的父ID集合 * @param oldAncestors 旧的父ID集合 */ public void updateConfigChildren(Long configId, String newAncestors, String oldAncestors) { List children = baseMapper.selectChildrenConfigById(configId); for (StaffCompetencyInspectItemConfig child : children) { child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); } if (!children.isEmpty()) { baseMapper.updateConfigChildren(children); } } @Override public boolean hasChildByConfigId(Long configId) { int result = baseMapper.hasChildByConfigId(configId); return result > 0; } @Override public int deleteConfigById(Long configId) { return baseMapper.deleteById(configId); } @Override public int selectNormalChildrenConfigById(Long configId) { return baseMapper.selectNormalChildrenConfigById(configId); } }