zouyu
3 天以前 2ea3b36a810adcb639f4d3c72c860f722f601927
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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<StaffCompetencyInspectItemConfigMapper, StaffCompetencyInspectItemConfig>
    implements StaffCompetencyInspectItemConfigService{
 
 
    @Override
    public List<StaffCompetencyInspectItemConfig> 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.<StaffCompetencyInspectItemConfig>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<Long> 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<StaffCompetencyInspectItemConfig> 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);
    }
}