package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.dto.FileDirPath; import com.whyc.dto.Response; import com.whyc.dto.ZipUtils; import com.whyc.mapper.BOMFeedbakMapper; import com.whyc.mapper.DocUserMapper; import com.whyc.pojo.BOMFeedback; import com.whyc.pojo.DocUser; 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.*; @Service public class BOMFeedbakService { @Autowired(required = false) private BOMFeedbakMapper mapper; @Autowired private MailUtil mailUtil; @Resource private DocUserMapper userMapper; //统计 public Map getFkStatistic(DocUser user,Map 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[] flags,int pageCurr,int pageSize) { PageHelper.startPage(pageCurr,pageSize); List list=mapper.getSenderStatus(ActionUtil.getUser().getId(),flags); PageInfo pageInfo = new PageInfo(list); return new Response().setII(1,list.size()>0,pageInfo,"发送者反馈"); } //查询接收者反馈不同状态 public Response getRecevierStatus(int[] flags, int pageCurr, int pageSize) { PageHelper.startPage(pageCurr,pageSize); String name=ActionUtil.getUser().getName(); long id=ActionUtil.getUser().getId(); List list=new ArrayList(); if(name.equals("杨红兰")){ //当是杨红兰查看时,只有杨红兰的排在最前面 list=mapper.getRecevierYHL(id,name,flags); }else{ list=mapper.getRecevierStatus(id,flags); } PageInfo pageInfo = new PageInfo(list); return new Response().setII(1,list.size()>0,pageInfo,"接收者反馈"); } /** * 接收者确认反馈 * * @param feedback * @return */ public Response confirmFeedback(BOMFeedback feedback) { String msg=""; boolean bl=true; int id = feedback.getId(); Integer confirmStatus = feedback.getConfirmStatus(); String replyContent = feedback.getReplyContent(); Date now = new Date(); if(confirmStatus == 1){ //与我无关 feedback.setReplyContent("系统默认生成回复:与我无关"); } //1.确认前先判断反馈是否被确认 QueryWrapper queryWrapper=new QueryWrapper<>(); queryWrapper.eq("id",id); queryWrapper.ne("confirm_status",0); List list=mapper.selectList(queryWrapper); if(list!=null&&list.size()>0){ msg="该反馈已被确认"; bl=false; }else{ //2.确认反馈 UpdateWrapper wrapper=new UpdateWrapper<>(); wrapper.set("confirm_status",confirmStatus); wrapper.set("confirm_user_name",ActionUtil.getUser().getName()); wrapper.set("reply_content",replyContent); wrapper.set("reply_time",now); 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 multipartFileList * @return response */ public Response submitFeedback(BOMFeedback feedback, List multipartFileList) throws IOException, MessagingException { Date date = new Date(); //压缩包的路径及格式为: doc_file/feedback_bom/username_time.zip String username = ActionUtil.getUser().getName(); long time = date.getTime(); String feedbackZipPath = "feedback_bom" + File.separator + username + "_" + time+".zip"; List fileList = new LinkedList<>(); String rootFile = CommonUtil.getRootFile(); if(multipartFileList!=null && multipartFileList.size()!=0){ for (int i = 0; i < multipartFileList.size(); i++) { MultipartFile multipartFile = multipartFileList.get(i); //存储文件 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); fileList.add(file); } } ZipUtils.toZip(fileList,new FileOutputStream(new File(rootFile+feedbackZipPath))); //删除已经被压缩的文件 for (File file : fileList) { file.delete(); } feedback.setFile("doc_file" + File.separator + feedbackZipPath); //保存 feedback.setCreateTime(date); feedback.setConfirmStatus(0); mapper.insert(feedback); //发送邮件 String receiverIds = feedback.getReceiverIds(); String[] receiverIdsSplit = receiverIds.split(","); List receiverMailList = new LinkedList<>(); Integer senderId = feedback.getSenderId(); String senderName = null; List 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(); } } public Response updateEcrNumber(int id, String ecrNumber) { UpdateWrapper update = Wrappers.update(); update.set("ecr_number",ecrNumber).set("confirm_status",4).eq("id",id); mapper.update(null, update); return new Response().set(1,true,"上传完成"); } }