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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
package com.ruoyi.manage.service.impl;
 
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.system.mapper.UserMapper;
 
 
import com.ruoyi.manage.mapper.ManageDocumentCancelMapper;
import com.ruoyi.manage.mapper.ManageDocumentListMapper;
import com.ruoyi.manage.mapper.ManageRecordAuditMapper;
import com.ruoyi.manage.mapper.ManageRecordCancelMapper;
import com.ruoyi.manage.mapper.ManageRecordCheckMapper;
import com.ruoyi.manage.pojo.ManageDocumentCancel;
import com.ruoyi.manage.pojo.ManageDocumentList;
import com.ruoyi.manage.pojo.ManageRecordAudit;
import com.ruoyi.manage.pojo.ManageRecordCancel;
import com.ruoyi.manage.pojo.ManageRecordCheck;
import com.ruoyi.manage.service.ManageDocumentCancelService;
 
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * <p>
 * 文件作废 服务实现类
 * </p>
 *
 * @author
 * @since 2024-11-09 02:37:35
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class ManageDocumentCancelServiceImpl extends ServiceImpl<ManageDocumentCancelMapper, ManageDocumentCancel> implements ManageDocumentCancelService {
 
    @Resource
    private ManageDocumentCancelMapper manageDocumentCancelMapper;
 
    @Resource
    private ManageRecordCheckMapper manageRecordCheckMapper;
 
    @Resource
    private ManageRecordAuditMapper manageRecordAuditMapper;
 
    @Resource
    private ManageRecordCancelMapper manageRecordCancelMapper;
 
    @Resource
    private ManageDocumentListMapper manageDocumentListMapper;
 
    @Resource
    private UserMapper userMapper;
 
    @Override
    public IPage<ManageDocumentCancel> pageManageDocumentCancel(Page page, ManageDocumentCancel manageDocumentCancel) {
        return manageDocumentCancelMapper.pageManageDocumentCancel(page, QueryWrappers.queryWrappers(manageDocumentCancel));
    }
 
    @Override
    public int addManageDocumentCancel(ManageDocumentCancel manageDocumentCancel) {
        manageDocumentCancel.setState("待审核");
        /*新增8.4的文件修订申请审批记录*/
        ManageRecordAudit manageRecordAudit = new ManageRecordAudit();
        manageRecordAudit.setDocumentCode(manageDocumentCancel.getDocumentCode());
        manageRecordAudit.setDocumentName(manageDocumentCancel.getName());
        manageRecordAudit.setAlterThing("作废");
        manageRecordAudit.setMethod("作废");
        manageRecordAudit.setAlterUser(SecurityUtils.getUserId().intValue());
        manageRecordAudit.setCreateTime(LocalDate.now());
        manageRecordAuditMapper.insert(manageRecordAudit);
        return manageDocumentCancelMapper.insert(manageDocumentCancel);
    }
 
    @Override
    public int checkManageDocumentCancel(Integer id, String state) {
        ManageDocumentCancel manageDocumentCancel = manageDocumentCancelMapper.selectById(id);
        if (manageDocumentCancel == null) {
            throw new ErrorException("申请记录不存在");
        }
        if ("通过".equals(state)){
            //删除文件清单对应数据
            manageDocumentListMapper.delete(Wrappers.<ManageDocumentList>lambdaQuery().eq(ManageDocumentList::getDocumentCode,manageDocumentCancel.getDocumentCode()));
            // 作废通过后自动生成销毁台账,保证“文件作废申请”和“作废文件销毁记录”的数据联动
            createRecordCancelIfAbsent(manageDocumentCancel);
        }
        manageDocumentCancel.setState(state);
        /*新增8.4的文件审批记录*/
        ManageRecordCheck manageRecordCheck = new ManageRecordCheck();
        manageRecordCheck.setDocumentCode(manageDocumentCancel.getDocumentCode());
        manageRecordCheck.setDocumentName(manageDocumentCancel.getName());
        manageRecordCheck.setDocumentVersion(manageDocumentCancel.getVersion());
        manageRecordCheck.setWriteUser(manageDocumentCancel.getCreateUser());
        manageRecordCheck.setCheckUser(manageDocumentCancel.getCheckUser());
        manageRecordCheck.setCheckState(manageDocumentCancel.getState());
        manageRecordCheck.setRemark(manageDocumentCancel.getCancelNote());
        manageRecordCheckMapper.insert(manageRecordCheck);
        return manageDocumentCancelMapper.updateById(manageDocumentCancel);
    }
 
    @Override
    public ManageDocumentCancel getManageDocumentCancel(Integer id) {
        ManageDocumentCancel manageDocumentCancel = manageDocumentCancelMapper.getManageDocumentCancel(id);
        String limsName = userMapper.selectUserDepartmentLimsName(manageDocumentCancel.getCreateUser());
        manageDocumentCancel.setCreateUserDepartLims(limsName);
        return manageDocumentCancel;
    }
 
    @Override
    public void exportManageDocumentCancel(ManageDocumentCancel manageDocumentCancel, HttpServletResponse response) throws Exception{
        List<ManageDocumentCancel> data = manageDocumentCancelMapper.pageManageDocumentCancel(new Page(-1, -1), QueryWrappers.queryWrappers(manageDocumentCancel)).getRecords();
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        String fileName = URLEncoder.encode("文件作废列表导出", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        try {
            // 新建ExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            WriteSheet mainSheet = EasyExcel.writerSheet(0, "文件作废列表导出").head(ManageDocumentCancel.class).build();
            excelWriter.write(data, mainSheet);
            // 关闭流
            excelWriter.finish();
        } catch (IOException e) {
            throw new RuntimeException("导出失败");
        }
    }
 
    @Override
    public int delManageDocumentCancel(Integer id) {
        ManageDocumentCancel manageDocumentCancel = manageDocumentCancelMapper.selectById(id);
        /*删除8.4的文件修订申请审批记录*/
        manageRecordAuditMapper.delete(Wrappers.<ManageRecordAudit>lambdaQuery()
        .eq(ManageRecordAudit::getDocumentCode,manageDocumentCancel.getDocumentCode())
        .eq(ManageRecordAudit::getDocumentName,manageDocumentCancel.getName())
        .eq(ManageRecordAudit::getMethod,"作废"));
        return manageDocumentCancelMapper.deleteById(id);
    }
 
    @Override
    public int doManageDocumentCancel(ManageDocumentCancel manageDocumentCancel) {
        return manageDocumentCancelMapper.updateById(manageDocumentCancel);
    }
 
    // 作废申请通过后,在“作废文件销毁记录”生成一条待补全的台账记录
    private void createRecordCancelIfAbsent(ManageDocumentCancel manageDocumentCancel) {
        ManageRecordCancel existing = manageRecordCancelMapper.selectOne(Wrappers.<ManageRecordCancel>lambdaQuery()
                .eq(ObjectUtils.isNotEmpty(manageDocumentCancel.getDocumentCode()), ManageRecordCancel::getDocumentCode, manageDocumentCancel.getDocumentCode())
                .eq(ObjectUtils.isNotEmpty(manageDocumentCancel.getName()), ManageRecordCancel::getDocumentName, manageDocumentCancel.getName())
                .orderByDesc(ManageRecordCancel::getId)
                .last("limit 1"));
        if (existing != null) {
            return;
        }
        ManageRecordCancel manageRecordCancel = new ManageRecordCancel();
        manageRecordCancel.setDocumentCode(manageDocumentCancel.getDocumentCode());
        manageRecordCancel.setDocumentName(manageDocumentCancel.getName());
        manageRecordCancel.setReason(ObjectUtils.isNotEmpty(manageDocumentCancel.getCancelNote())
                ? manageDocumentCancel.getCancelNote() : "文件作废");
        manageRecordCancel.setRemark("由文件作废申请自动生成,请补充销毁数量后批准");
        manageRecordCancel.setCreateUser(manageDocumentCancel.getCreateUser());
        manageRecordCancelMapper.insert(manageRecordCancel);
    }
}