xiangpei
2024-09-24 02ba23adb5897029dc898ae5e2549a3fab067a93
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
143
144
145
146
147
148
149
150
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.Objects;
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);
    }
 
    public List<Subject> studentSubList() {
        // 只查自己部门的课目
        List<Integer> deptIds = webContext.getAdminDeptIds();
        return subjectMapper.allSubject(deptIds, Boolean.FALSE);
    }
 
    @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);
            }
        }
    }
 
    /**
     * 检查名称是否存在
     *
     * @param id
     * @param name
     * @return
     */
    @Override
    public Boolean selectByName(Integer id, String name) {
        Subject subject = subjectMapper.selectByName(id,name);
        return Objects.nonNull(subject);
    }
}