kongzy
2024-07-12 28aaf2ffa1dbb860a292ba330a7e9362e60e7832
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
package com.gkhy.assess.system.service.impl;
 
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.assess.common.api.CommonPage;
import com.gkhy.assess.common.enums.UserIdentityEnum;
import com.gkhy.assess.common.exception.ApiException;
import com.gkhy.assess.common.utils.PageUtil;
import com.gkhy.assess.system.domain.AssProjectSupplement;
import com.gkhy.assess.system.domain.AssProjectSupplementFile;
import com.gkhy.assess.system.domain.SysAttach;
import com.gkhy.assess.system.domain.SysUser;
import com.gkhy.assess.system.mapper.AssProjectSupplementFileMapper;
import com.gkhy.assess.system.mapper.AssProjectSupplementMapper;
import com.gkhy.assess.system.service.AssProjectSupplementFileService;
import com.gkhy.assess.system.service.AssProjectSupplementService;
import com.gkhy.assess.system.service.SysCommonService;
import com.gkhy.assess.system.utils.ShiroUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * <p>
 * 项目补录表 服务实现类
 * </p>
 *
 * @author kzy
 * @since 2024-06-11 15:44:14
 */
@Service
public class AssProjectSupplementServiceImpl extends ServiceImpl<AssProjectSupplementMapper, AssProjectSupplement> implements AssProjectSupplementService {
    @Autowired
    private AssProjectSupplementFileService projectSupplementFileService;
    @Autowired
    private SysCommonService commonService;
 
    @Override
    @Transactional(rollbackFor = RuntimeException.class)
    public int addProjectSupplement(AssProjectSupplement projectSupplement) {
        if(!checkNameUnique(projectSupplement)){
            throw new ApiException("补录的项目名称已存在");
        }
        projectSupplement.setCreateBy(ShiroUtils.getSysUser().getUsername());
        int row =baseMapper.insert(projectSupplement);
        if(row<1){
            throw new ApiException("新增项目失败");
        }
        List<AssProjectSupplementFile> fileList=projectSupplement.getFiles();
        if(ObjectUtil.isNotEmpty(fileList)) {
            for (AssProjectSupplementFile file : fileList) {
                file.setProjectId(projectSupplement.getId());
            }
            projectSupplementFileService.saveBatch(fileList);
        }
        return row;
    }
 
    @Override
    @Transactional(rollbackFor = RuntimeException.class)
    public int editProjectSupplement(AssProjectSupplement projectSupplement) {
        if(!checkNameUnique(projectSupplement)){
            throw new ApiException("补录的项目名称已存在");
        }
        projectSupplement.setUpdateBy(ShiroUtils.getSysUser().getUsername());
        int row =baseMapper.updateById(projectSupplement);
        if(row<1){
            throw new ApiException("编辑项目失败");
        }
        List<AssProjectSupplementFile> fileList=projectSupplement.getFiles();
        List<AssProjectSupplementFile> existFileList=projectSupplementFileService.getSupplementFileByProjectId(projectSupplement.getId());
        if(ObjectUtil.isNotEmpty(fileList)) {
            for (AssProjectSupplementFile psf : fileList) {
                psf.setProjectId(projectSupplement.getId());
            }
            projectSupplementFileService.saveOrUpdateBatch(fileList);
        }
        //删除附件
        List<Long> newIds=fileList.stream().map(AssProjectSupplementFile::getId).collect(Collectors.toList());
        List<Long> delIds = new ArrayList<>();
        for(AssProjectSupplementFile psf:existFileList){
            if(!newIds.contains(psf.getId())){
                delIds.add(psf.getId());
            }
        }
        if(!delIds.isEmpty()){
            projectSupplementFileService.removeBatchByIds(delIds);
        }
        return row;
    }
 
    @Override
    public AssProjectSupplement getProjectSupplementById(Long projectSupplementId) {
        return baseMapper.getProjectSupplementById(projectSupplementId);
    }
 
    @Override
    public CommonPage projectSupplementList(AssProjectSupplement projectSupplement) {
        SysUser user= ShiroUtils.getSysUser();
        if(!user.getIdentity().equals(UserIdentityEnum.MONITOR.getCode())){
            //机构用户只能查看本机构的项目
            if(user.getAgencyId()==null){
                throw new ApiException("用户机构id为空");
            }
            projectSupplement.setAgencyId(user.getAgencyId());
        }
        PageUtil.startPage();
        List<AssProjectSupplement> projects=baseMapper.projectList(projectSupplement);
        return CommonPage.restPage(projects);
    }
 
    @Override
    public int deleteProjectSupplement(Long projectSupplementId) {
        //删除附件
        List<AssProjectSupplementFile> fileList=projectSupplementFileService.getSupplementFileByProjectId(projectSupplementId);
        if(fileList.size()>0){
            for(AssProjectSupplementFile file:fileList){
                commonService.removeFile(file.getPath());
                projectSupplementFileService.removeById(file.getId());
            }
        }
        return baseMapper.deleteById(projectSupplementId);
    }
 
    @Override
    public Boolean checkNameUnique(AssProjectSupplement projectSupplement) {
        Long projectId = projectSupplement.getId()==null? -1L : projectSupplement.getId();
        AssProjectSupplement pro = baseMapper.getProjectByName(projectSupplement.getName(),projectSupplement.getAgencyId());
        if (pro!=null && pro.getId().longValue() != projectId.longValue())
        {
            return false;
        }
        return true;
    }
}