lxw
2023-02-17 3a4718c6e1489ff1aa5ee4c3d7ff4c4eb1acca64
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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
package com.whyc.service;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.constant.UserOperation;
import com.whyc.dto.FileDirPath;
import com.whyc.dto.Response;
import com.whyc.mapper.BOMFeedbakMapper;
import com.whyc.mapper.DocUserMapper;
import com.whyc.pojo.BOMFeedback;
import com.whyc.pojo.DocUser;
import com.whyc.pojo.Software;
import com.whyc.util.ActionUtil;
import com.whyc.util.CommonUtil;
import com.whyc.util.MailUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
 
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
 
@Service
public class BOMFeedbakService {
    @Autowired(required = false)
    private BOMFeedbakMapper mapper;
    @Autowired
    private MailUtil mailUtil;
    @Resource
    private DocUserMapper userMapper;
    //统计
    public Map<String, Integer> getFkStatistic(DocUser user,Map<String, Integer> map) {
        int sendFk=0;
        int recevierFk=0;
        switch (user.getRoleId()){
            //普通员工
            case "1001":
                map.put("sendFk",0);
                sendFk=mapper.selectSender(user.getId());
                map.put("sendFk",sendFk);
                break;
            //项目经理
            case "1002":
                map.put("sendFk",0);
                map.put("recevierFk",0);
                sendFk=mapper.selectSender(user.getId());
                recevierFk=mapper.selectReceiver(user.getId());
                map.put("sendFk",sendFk);
                map.put("recevierFk",recevierFk);
                break;
            //总经理
            case "1003":
                map.put("sendFk",0);
                map.put("recevierFk",0);
                sendFk=mapper.selectSender(user.getId());
                recevierFk=mapper.selectReceiver(user.getId());
                map.put("sendFk",sendFk);
                map.put("recevierFk",recevierFk);
                break;
        }
        return map;
    }
    //查询发送者反馈不同状态
    public Response getSenderStatus(int flag,int pageCurr,int pageSize) {
        PageHelper.startPage(pageCurr,pageSize);
        List list=mapper.getSenderStatus(ActionUtil.getUser().getId(),flag);
        PageInfo pageInfo = new PageInfo(list);
        return new Response().setII(1,list.size()>0,pageInfo,"发送者反馈");
    }
   //查询接收者反馈不同状态
    public Response getRecevierStatus(int flag, int pageCurr, int pageSize) {
        PageHelper.startPage(pageCurr,pageSize);
        List list=mapper.getRecevierStatus(ActionUtil.getUser().getId(),flag);
        PageInfo pageInfo = new PageInfo(list);
        return new Response().setII(1,list.size()>0,pageInfo,"接收者反馈");
    }
   //接收者确认反馈
    public Response setconfirmFk(int id) {
        String msg="";
        boolean bl=true;
        //1.确认前先判断反馈是否被确认
        QueryWrapper qwrapper=new QueryWrapper();
        qwrapper.eq("id",id);
        qwrapper.eq("confirm_status",1);
        List list=mapper.selectList(qwrapper);
        if(list!=null&&list.size()>0){
            msg="该反馈已被确认";
            bl=false;
        }else{
            //2.确认反馈
            UpdateWrapper wrapper=new UpdateWrapper();
            wrapper.set("confirm_status",1);
            wrapper.set("confirm_user_name",ActionUtil.getUser().getName());
            wrapper.eq("id",id);
            int count=mapper.update(null,wrapper);
            bl=count>0;
            msg="接收者确认反馈";
        }
        return new Response().set(1,bl,msg);
    }
 
    /**
     * 提交反馈:
     * 1.记录数据库保存
     * 2.附件存储
     * 3.邮件发送
     * @param feedback bom问题反馈
     * @param multipartFile
     * @return response
     */
    public Response submitFeedback(BOMFeedback feedback, MultipartFile multipartFile) throws IOException, MessagingException {
        Date date = new Date();
        if(multipartFile!=null){
            //存储文件
            String rootFile = CommonUtil.getRootFile();
            long time = date.getTime();
            String originalFilename = multipartFile.getOriginalFilename();
            String fileName = originalFilename.substring(0, originalFilename.lastIndexOf("."));
            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            String feedbackPath = "feedback_bom" + File.separator + fileName + "_" + time + suffix;
            File file = new File(rootFile + feedbackPath);
            if (!file.exists()){
                file.mkdirs();
            }
            multipartFile.transferTo(file);
            feedback.setFile("doc_file"+File.separator+feedbackPath);
        }
        //保存
        feedback.setCreateTime(date);
        feedback.setConfirmStatus(0);
        mapper.insert(feedback);
        //发送邮件
        String receiverIds = feedback.getReceiverIds();
        String[] receiverIdsSplit = receiverIds.split(",");
        List<String> receiverMailList = new LinkedList<>();
 
        Integer senderId = feedback.getSenderId();
        String senderName = null;
 
        List<DocUser> docUsers = userMapper.selectList(null);
        for (DocUser docUser:docUsers){
            if(docUser.getId().intValue() == senderId){
                senderName = docUser.getName();
                break;
            }
        }
 
        for (String receiverId:receiverIdsSplit){
            for (DocUser docUser:docUsers){
                if(docUser.getId().intValue() == Integer.parseInt(receiverId)){
                    String mail = docUser.getMail();
                    if(mail!=null && !mail.isEmpty()) {
                        receiverMailList.add(mail);
                    }
                    break;
                }
            }
        }
 
        String subject = "Bom问题反馈-"+senderName;
        String content = feedback.getContent();
        mailUtil.sendMailBatch(senderName,receiverMailList,subject,content);
        return new Response().set(1,true,"反馈完成");
    }
    //根据文件路径下载
    public void downLoadFileByFilePath(HttpServletRequest req, HttpServletResponse resp, String filePath) {
        String fileDirName = FileDirPath.getFileDirName();
        String fileName=filePath.substring(filePath.lastIndexOf("\\")+1);
        try {
            // 转码防止乱码
            //resp.addHeader("Content-Disposition", "attachment;filename=" + new String(softwareName.getBytes("UTF-8"), "ISO8859-1"));
            resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode (fileName, "utf-8"));
            OutputStream out = resp.getOutputStream();
            FileInputStream in = new FileInputStream(fileDirName+File.separator+filePath);
            int len=0;
            byte[] buffer =new byte[1024];
            //7. 将缓冲区中的数据输出
            while ((len=in.read(buffer))>0){
                out.write(buffer,0,len);
            }
            in.close();
            out.close();
        } catch (FileNotFoundException | UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}