huminmin
2026-05-11 bd424ceae9e38a0a50418f71093becd1430cc83b
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
package com.ruoyi.production.service.impl;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.production.bean.dto.ProductionTeamDto;
import com.ruoyi.production.bean.vo.ProductionTeamVo;
import com.ruoyi.production.mapper.ProductionTeamMapper;
import com.ruoyi.production.pojo.ProductionTeam;
import com.ruoyi.production.pojo.ProductionTeamUserRel;
import com.ruoyi.production.service.ProductionTeamService;
import com.ruoyi.production.service.ProductionTeamUserRelService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
 
import java.util.List;
 
@Service
@RequiredArgsConstructor
public class ProductionTeamServiceImpl extends ServiceImpl<ProductionTeamMapper, ProductionTeam> implements ProductionTeamService {
 
    private final ProductionTeamUserRelService teamUserRelService;
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean createTeam(ProductionTeamDto dto) {
        // 创建班组
        ProductionTeam team = new ProductionTeam();
        team.setTeamName(dto.getTeamName());
        team.setRemark(dto.getRemark());
        this.save(team);
 
        // 保存成员关系
        saveTeamUserRel(team.getId(), dto.getLeaderId(), dto.getMemberIds());
 
        return true;
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateTeam(ProductionTeamDto dto) {
        // 更新班组
        ProductionTeam team = new ProductionTeam();
        team.setId(dto.getId());
        team.setTeamName(dto.getTeamName());
        team.setRemark(dto.getRemark());
        this.updateById(team);
 
        // 删除原有成员关系
        QueryWrapper<ProductionTeamUserRel> wrapper = new QueryWrapper<>();
        wrapper.eq("production_team_id", dto.getId());
        teamUserRelService.remove(wrapper);
 
        // 保存新的成员关系
        saveTeamUserRel(dto.getId(), dto.getLeaderId(), dto.getMemberIds());
 
        return true;
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean deleteTeam(Long id) {
        // 删除成员关系
        QueryWrapper<ProductionTeamUserRel> wrapper = new QueryWrapper<>();
        wrapper.eq("production_team_id", id);
        teamUserRelService.remove(wrapper);
 
        // 删除班组
        return this.removeById(id);
    }
 
    @Override
    public ProductionTeamVo getTeamDetail(Long id) {
        ProductionTeamVo teamVo = getBaseMapper().selectTeamDetail(id);
        if (teamVo != null) {
            // 加载成员列表
            List<ProductionTeamVo.MemberVo> members = getBaseMapper().selectTeamMembers(id);
            teamVo.setMembers(members);
        }
        return teamVo;
    }
 
    @Override
    public List<ProductionTeamVo> getTeamList(ProductionTeamDto dto) {
        List<ProductionTeamVo> teamList = getBaseMapper().selectTeamList(dto);
        // 为每个班组加载成员列表
        for (ProductionTeamVo teamVo : teamList) {
            List<ProductionTeamVo.MemberVo> members = getBaseMapper().selectTeamMembers(teamVo.getId());
            teamVo.setMembers(members);
        }
        return teamList;
    }
 
    @Override
    public IPage<ProductionTeamVo> listPage(Page<ProductionTeamDto> page, ProductionTeamDto dto) {
        IPage<ProductionTeamVo> resultPage = getBaseMapper().selectTeamPage(page, dto);
        // 为每个班组加载成员列表
        for (ProductionTeamVo teamVo : resultPage.getRecords()) {
            List<ProductionTeamVo.MemberVo> members = getBaseMapper().selectTeamMembers(teamVo.getId());
            teamVo.setMembers(members);
        }
        return resultPage;
    }
 
    /**
     * 保存班组用户关系
     */
    private void saveTeamUserRel(Long teamId, Long leaderId, List<Long> memberIds) {
        // 保存班组长
        if (leaderId != null) {
            ProductionTeamUserRel leaderRel = new ProductionTeamUserRel();
            leaderRel.setProductionTeamId(teamId);
            leaderRel.setSysUserId(leaderId);
            leaderRel.setIsLeader((byte) 1);
            teamUserRelService.save(leaderRel);
        }
 
        // 保存成员
        if (!CollectionUtils.isEmpty(memberIds)) {
            for (Long memberId : memberIds) {
                // 跳过班组长(已保存)
                if (leaderId != null && leaderId.equals(memberId)) {
                    continue;
                }
 
                ProductionTeamUserRel memberRel = new ProductionTeamUserRel();
                memberRel.setProductionTeamId(teamId);
                memberRel.setSysUserId(memberId);
                memberRel.setIsLeader((byte) 0);
                teamUserRelService.save(memberRel);
            }
        }
    }
}