龚焕茏
2024-07-19 2d928646669fe6026c7d63f6b409d9b2790aa65e
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
package com.mindskip.xzs.service.impl;
 
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.context.WebContext;
import com.mindskip.xzs.domain.Subject;
import com.mindskip.xzs.domain.SubjectDept;
import com.mindskip.xzs.domain.enums.RoleEnum;
import com.mindskip.xzs.domain.form.AddSubjectForm;
import com.mindskip.xzs.domain.form.EditSubjectForm;
import com.mindskip.xzs.repository.BaseMapper;
import com.mindskip.xzs.repository.DepartmentMapper;
import com.mindskip.xzs.repository.SubjectDeptMapper;
import com.mindskip.xzs.repository.SubjectMapper;
import com.mindskip.xzs.service.SubjectService;
import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
@Service
public class SubjectServiceImpl extends BaseServiceImpl<Subject> implements SubjectService {
 
    private final SubjectMapper subjectMapper;
    private final WebContext webContext;
    private final DepartmentMapper departmentMapper;
    private final SubjectDeptMapper subjectDeptMapper;
 
    public SubjectServiceImpl(BaseMapper<Subject> baseMapper, SubjectMapper subjectMapper, WebContext webContext, DepartmentMapper departmentMapper, SubjectDeptMapper subjectDeptMapper) {
        super(baseMapper);
        this.subjectMapper = subjectMapper;
        this.webContext = webContext;
        this.departmentMapper = departmentMapper;
        this.subjectDeptMapper = subjectDeptMapper;
    }
 
    @Override
    public Subject selectById(Integer id) {
        return super.selectById(id);
    }
 
    @Override
    public int updateByIdFilter(Subject record) {
        return super.updateByIdFilter(record);
    }
 
    @Override
    public List<Subject> getSubjectByLevel(Integer level) {
        return subjectMapper.getSubjectByLevel(level);
    }
 
    @Override
    public List<Subject> allSubject() {
        // 只查自己部门的课目
        List<Integer> deptIds = webContext.getAdminDeptIds();
        Boolean admin = RoleEnum.ADMIN.getCode().equals(webContext.getCurrentUser().getRole());
        return subjectMapper.allSubject(deptIds, admin);
    }
 
    @Override
    public Integer levelBySubjectId(Integer id) {
        return this.selectById(id).getLevel();
    }
 
    @Override
    public PageInfo<Subject> page(SubjectPageRequestVM requestVM) {
        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
                subjectMapper.page(requestVM)
        );
    }
 
    @Override
    public List<Subject> getNames(String[] names) {
        return subjectMapper.getNames(names);
    }
 
    @Override
    public List<Subject> selectByIds(Integer[] ids) {
        return subjectMapper.selectByIds(ids);
    }
 
    @Override
    public List<Subject> listByDeptId(Integer deptId) {
        return subjectMapper.listByDeptId(deptId);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public RestResponse add(AddSubjectForm form) {
        Subject subject = new Subject();
        subject.setName(form.getSubjectName());
        subject.setDeleted(false);
        try {
            subjectMapper.insert(subject);
        } catch (Exception e) {
            return RestResponse.fail(500, "科目名不能重复");
        }
 
        SubjectDept subjectDept = new SubjectDept();
        subjectDept.setDeptId(form.getDeptId());
        subjectDept.setSubjectId(subject.getId());
        List<SubjectDept> s = new ArrayList<>(1);
        s.add(subjectDept);
        subjectDeptMapper.add(s);
        return RestResponse.ok();
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void edit(EditSubjectForm form) {
        if (ObjectUtils.isNotEmpty(form.getDeptId())) {
            // 删除原先的课目,再新增
            subjectDeptMapper.deleteByDeptId(form.getDeptId());
            List<SubjectDept> toAddList = form.getSubjectIds().stream().map(subjectId -> {
                SubjectDept subjectDept = new SubjectDept();
                subjectDept.setDeptId(form.getDeptId());
                subjectDept.setSubjectId(subjectId);
                return subjectDept;
            }).collect(Collectors.toList());
            if (ObjectUtils.isNotEmpty(toAddList)) {
                subjectDeptMapper.add(toAddList);
            }
        }
    }
}