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.dto.DefectiveDto; import com.whyc.dto.MailDTO; import com.whyc.dto.Response; import com.whyc.mapper.DefectiveProductsMapper; import com.whyc.mapper.DocUserMapper; import com.whyc.pojo.DefectiveProducts; import com.whyc.pojo.DefectiveProductsHistory; import com.whyc.pojo.DocUser; import com.whyc.util.ActionUtil; import com.whyc.util.CommonUtil; import com.whyc.util.FileUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.LinkedList; import java.util.List; @Service public class DefectiveProductsService { @Autowired(required = false) private DefectiveProductsMapper mapper; @Autowired private MailService mailService; @Resource private DocUserMapper userMapper; @Autowired private DocLogService logService; @Autowired private DefectiveProductsHistoryService defectiveHisService; //录入不良品信息 @Transactional public Response addDefective(DefectiveProducts defective, List multipartFileList) throws IOException { //初次录入状态为0 defective.setConfirmStatus(0); //压缩包的路径及格式为: doc_file/defective/username_time.zip String senderName = ActionUtil.getUser().getName(); Integer senderId =ActionUtil.getUser().getId().intValue(); defective.setSenderId(senderId); defective.setSenderName(senderName); Date date=new Date(); defective.setRecordTime(date); defective.setRestProduct(defective.getBadProduct()); if(defective.getStartTime()==null){ //保存 defective.setStartTime(date); } String recordtime = ActionUtil.sdfwithFTP.format(defective.getRecordTime()); String rootFile = CommonUtil.getRootFile(); if(multipartFileList!=null && multipartFileList.size()!=0){ String defectiveDirSuffix = "defective" + File.separator + senderName + File.separator+ recordtime + File.separator; String feedbackDir = rootFile + defectiveDirSuffix; File fileDir = new File(feedbackDir); if (!fileDir.exists()) { fileDir.mkdirs(); } 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 = feedbackDir + fileName + suffix; File file = new File(feedbackPath); multipartFile.transferTo(file); } //ZipUtils.toZip(fileList,new FileOutputStream(new File(rootFile+feedbackZipPath))); defective.setFileUrl(defectiveDirSuffix); } mapper.insert(defective); //发送邮件 String receiverIds = defective.getReceiverIds(); String[] receiverIdsSplit = receiverIds.split(","); List receiverMailList = new LinkedList<>(); 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 = "【不良品记录】-"+senderName; String content = senderName+"上传了不良品记录,信息如下:\n厂商:"+defective.getProvideName()+"\n产品:"+defective.getProductName()+"\n型号:"+defective.getType() +"\n不良品数量:"+defective.getBadProduct()+"\n具体不良信息:"+defective.getContent(); MailDTO mailDTO = new MailDTO(); mailDTO.setTitle(subject); mailDTO.setContent(content); mailDTO.setMailList(receiverMailList); mailService.sendMail(mailDTO); //记录处理过程 defectiveHisService.addHis(defective); return new Response().set(1,true,"不良品操作完成"); } //不良品首页推送 public Response getDefectiveLimit(DefectiveDto defectiveDto) { PageHelper.startPage(defectiveDto.getPageCurr(),defectiveDto.getPageSize()); List list=mapper.getDefectiveLimit(defectiveDto); String rootFile = CommonUtil.getRootFile();//主路径 for (DefectiveProducts defective:list) { String filePath=defective.getFileUrl(); String startTimeEx=ActionUtil.sdfwithday.format(defective.getStartTime()); defective.setStartTimeEx(startTimeEx); if(filePath!=null&&!filePath.isEmpty()){ defective.setFileUrl("doc_file"+File.separator+filePath); defective.setNameList(FileUtil.getFileNameWithOutDirectory(rootFile+filePath)); } List hisList=defective.getHisList(); if(hisList!=null&&hisList.size()>0){ for (DefectiveProductsHistory his:defective.getHisList()) { String hisDelPath=his.getDelUrl(); if(hisDelPath!=null&&!hisDelPath.isEmpty()){ his.setDelUrl("doc_file"+File.separator+hisDelPath); his.setHisNameList(FileUtil.getFileNameWithOutDirectory(rootFile+hisDelPath)); } } } } PageInfo pageInfo=new PageInfo(list); return new Response().setII(1,list!=null,pageInfo,"不良品首页推送"); } //处理不良品 @Transactional public Response updateDefective(DefectiveProductsHistory defectiveHis, List multipartFileList) { //获取上一次记录信息 QueryWrapper qwrapper=new QueryWrapper(); qwrapper.eq("id",defectiveHis.getDeftId()); qwrapper.last("limit 1"); DefectiveProducts defective=mapper.selectOne(qwrapper); //获取 Integer senderId = defective.getSenderId(); String senderName = null; List docUsers = userMapper.selectList(null); for (DocUser docUser:docUsers){ if(docUser.getId().intValue() == senderId){ senderName = docUser.getName(); break; } } defective.setSenderName(senderName); //修改当前表记录 UpdateWrapper wrapper=new UpdateWrapper(); wrapper.set("receiver_ids",defectiveHis.getReceiverIds()); wrapper.set("receiver_names",defectiveHis.getReceiverNames()); int resProduct=defective.getRestProduct()-defectiveHis.getDelProduct(); defectiveHis.setRestProduct(resProduct); wrapper.set("rest_product",resProduct); if(resProduct==0){ defectiveHis.setConfirmStatus(2);//不良品数量为0结束 }else { defectiveHis.setConfirmStatus(1); } wrapper.set("confirm_status",defectiveHis.getConfirmStatus()); wrapper.set("note",defectiveHis.getNote()); wrapper.eq("id",defectiveHis.getDeftId()); mapper.update(null,wrapper); //记录处理记录 defectiveHisService.updateDefective(defective,defectiveHis,multipartFileList); //发送邮件 String receiverIds = defectiveHis.getReceiverIds(); String[] receiverIdsSplit = receiverIds.split(","); List receiverMailList = new LinkedList<>(); 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 = "【不良品处理记录】-"+senderName; String content = defectiveHis.getDelName()+"修复了不良品,记录信息如下:\n厂商:"+defective.getProvideName()+"\n产品:"+defective.getProductName()+"\n型号:"+defective.getType()+ "\n不良品数量:"+defective.getBadProduct()+"\n修复不良品个数:"+defectiveHis.getDelProduct()+"\n剩余不良品个数:"+defectiveHis.getRestProduct()+"\n" +"修复方式:"+defectiveHis.getNote(); MailDTO mailDTO = new MailDTO(); mailDTO.setTitle(subject); mailDTO.setContent(content); mailDTO.setMailList(receiverMailList); mailService.sendMail(mailDTO); return new Response().set(1,true); } //归档不良品 @Transactional public Response stopDefective(int deftId) { //修改当前表记录 UpdateWrapper wrapper=new UpdateWrapper(); wrapper.set("confirm_status",3);//归档 wrapper.set("receiver_ids",""); wrapper.set("receiver_names",""); wrapper.set("rest_product",0); wrapper.set("note",""); wrapper.eq("id",deftId); mapper.update(null,wrapper); //记录处理记录 DefectiveProductsHistory defectiveHis=new DefectiveProductsHistory(); defectiveHis.setDeftId(deftId); defectiveHis.setDelId(ActionUtil.getUser().getId().intValue()); defectiveHis.setConfirmStatus(3); defectiveHis.setDelProduct(0); defectiveHis.setDelName(ActionUtil.getUser().getName()); defectiveHis.setRestProduct(0); defectiveHisService.stopDefective(defectiveHis); return new Response().set(1,true); } }