package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.config.EnumWorksheetType; import com.whyc.dto.MailDTO; import com.whyc.dto.Response; import com.whyc.dto.WorksheetMainDTO; import com.whyc.dto.WorksheetMainDTO2; import com.whyc.mapper.DocUserMapper; import com.whyc.mapper.WorksheetLinkMapper; import com.whyc.mapper.WorksheetMainMapper; import com.whyc.pojo.*; import com.whyc.util.CommonUtil; import com.whyc.util.Word2PdfAsposeUtil; import com.whyc.util.WordUtil; import com.whyc.util.Zip4jUtil; import org.aspectj.util.FileUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.mail.MessagingException; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Service public class WorksheetMainService { @Resource private WorksheetMainMapper mainMapper; @Resource private WorksheetLinkMapper linkMapper; @Autowired @Lazy private WorksheetLinkService linkService; @Resource private DocUserMapper userMapper; @Autowired @Lazy private ProductBomApprovingService approvingService; @Autowired private ProductApprovingService paService; @Autowired private MaterialProductApprovingService cpApprovingService; @Autowired private MaterialApprovingService mApprovingService; @Autowired private MaterialService mService; @Autowired private ProductBomService pbService; @Autowired private MaterialProductHistoryService cphService; @Autowired private ProductSoftwareApprovingService psaService; @Autowired private ProductSoftwareService productSoftwareService; @Autowired private ProductService productService; @Autowired private ProductHistoryService productHistoryService; @Autowired private MailService mailService; @Autowired private ProcedureDocApprovingService procedureDocApprovingService; @Transactional public boolean submit(WorksheetMain main, DocUser user) throws IOException { main.setType(1); ProductApproving productApproving = main.getProductApproving(); List bomList = productApproving.getBomApprovingList(); //提交主表 main.setCreateUserId(user.getId()); //提交人角色来判断工作流层级 if(user.getRoleId().equals("1001")){ if(main.getId()==null) { main.setLevel(2); main.setStatus(1); mainMapper.insert(main); } //提交子表 WorksheetLink link =new WorksheetLink(); link.setMainId(main.getId()); link.setParentId(0); link.setDealUserId(main.getNextUser()); link.setDealType(1); link.setDealDesc(main.getDealDesc()); link.setLinkStatus(0); link.setEnableArchive(0); linkMapper.insert(link); } else if(user.getRoleId().equals("1002")){ if(main.getId()==null) { main.setLevel(1); main.setStatus(2); mainMapper.insert(main); } //提交子表 WorksheetLink link =new WorksheetLink(); link.setMainId(main.getId()); link.setParentId(0); link.setDealUserId(main.getNextUser()); link.setDealType(2); link.setDealDesc(main.getDealDesc()); link.setLinkStatus(0); link.setEnableArchive(1); linkMapper.insert(link); } else if(user.getRoleId().equals("1003")){ main.setLevel(0); main.setStatus(5); mainMapper.insert(main); }else{ return false; } //产品bom/图纸图片提交 if(productApproving.getCustomCode()!=null && bomList.get(0).getId()!=null) { //与前端约定 定制表单号关联产品,则关联的产品id写入id Product product = productService.getById(bomList.get(0).getId()); List productBomList = pbService.getBomByProductId(bomList.get(0).getId()); //product下的图纸复制到新的审批路径 String rootFile = CommonUtil.getRootFile(); String dateFormat = new SimpleDateFormat("YYYY-MM").format(new Date()); long timeStamp = System.currentTimeMillis(); String filePath = rootFile + "product_approving" + File.separator + user.getName() + File.separator + dateFormat+ File.separator + timeStamp; String inFilePath = rootFile + "product" + File.separator + product.getParentModel() + File.separator + "standard"+ File.separator + product.getVersion(); File parentFile = new File(filePath); //FileCopyUtils.copy(new File(inFilePath),parentFile); FileUtil.copyDir(new File(inFilePath),parentFile); productApproving.setFileUrl(filePath); bomList.clear(); productBomList.forEach(bom->{ ProductBomApproving approving = new ProductBomApproving(); approving.setCategory(bom.getCategory()); approving.setSubCode(bom.getSubCode()); approving.setSubName(bom.getSubName()); approving.setSubModel(bom.getSubModel()); approving.setUnit(bom.getUnit()); approving.setQuantity(bom.getQuantity()); approving.setProducer(bom.getProducer()); approving.setMaterial(bom.getMaterial()); approving.setThickness(bom.getThickness()); approving.setSurfaceDetail(bom.getSurfaceDetail()); approving.setNotes(bom.getNotes()); bomList.add(approving); }); } //冻结(不启用)已存在的产品编码+定制保单号 productService.deleteByParentCodeAndCustomCode(productApproving.getParentCode(),productApproving.getCustomCode()); productHistoryService.updateEnabledStatus(productApproving.getParentCode(),productApproving.getCustomCode(),0); productApproving.setMainId(main.getId()); productApproving.setCreateTime(new Date()); paService.insert(productApproving); bomList.forEach(bom->{ //bom.setMainId(main.getId()); bom.setProductApprovingId(productApproving.getId()); bom.setUpUserId(user.getId()); bom.setCreateDate(new Date()); if(bom.getDwgUrl()==null){ bom.setDwgUrl(""); }else { bom.setDwgUrl(bom.getDwgUrl()); } if(bom.getFileUrl()==null){ bom.setFileUrl(""); }else { bom.setFileUrl(bom.getFileUrl()); } if(bom.getPictureUrl()==null){ bom.setPictureUrl(""); }else{ bom.setPictureUrl(bom.getPictureUrl()); } }); approvingService.insert(bomList); return true; } public boolean MaterialProductSubmit(WorksheetMainDTO mainDTO, DocUser user) { List approvingList = new LinkedList<>(); WorksheetMain main = mainDTO.getMain(); List addedList = mainDTO.getAddedList(); //List replacedList = mainDTO.getReplacedList(); List removedList = mainDTO.getRemovedList(); main.setType(EnumWorksheetType.MaterialProduct.getType()); //提交主表 main.setCreateUserId(user.getId()); //提交人角色来判断工作流层级 if(user.getRoleId().equals("1001")){ if(main.getId()==null) { main.setLevel(2); main.setStatus(1); mainMapper.insert(main); } //提交子表 WorksheetLink link =new WorksheetLink(); link.setMainId(main.getId()); link.setParentId(0); link.setDealUserId(main.getNextUser()); link.setDealType(1); link.setDealDesc(main.getDealDesc()); link.setLinkStatus(0); link.setEnableArchive(0); linkMapper.insert(link); } else if(user.getRoleId().equals("1002")){ if(main.getId()==null) { main.setLevel(1); main.setStatus(2); mainMapper.insert(main); } //提交子表 WorksheetLink link =new WorksheetLink(); link.setMainId(main.getId()); link.setParentId(0); link.setDealUserId(main.getNextUser()); link.setDealType(2); link.setDealDesc(main.getDealDesc()); link.setLinkStatus(0); link.setEnableArchive(1); linkMapper.insert(link); } else if(user.getRoleId().equals("1003")){ main.setLevel(0); main.setStatus(5); mainMapper.insert(main); }else{ return false; } //物料-产品审批提交 if(addedList!=null && addedList.size()!=0){ addedList.forEach(item->{ item.setMainId(main.getId()); item.setLinkType(1); }); approvingList.addAll(addedList); } /*if(replacedList!=null && replacedList.size()!=0){ replacedList.forEach(item->{ item.setMainId(main.getId()); item.setLinkType(2); }); approvingList.addAll(replacedList); }*/ if(removedList!=null && removedList.size()!=0){ removedList.forEach(item->{ item.setMainId(main.getId()); item.setLinkType(-1); }); approvingList.addAll(removedList); } cpApprovingService.insert(approvingList); return true; } public Response materialSubmit(WorksheetMain main, DocUser user) { Response response = new Response<>(); List mApprovingList = main.getMApprovingList(); //判断是新增还是删除 boolean isAdded = mApprovingList.get(0).getSubName()!=null; if(isAdded) { //新增 //查询是否有 已生效或者已提交审批的 相同的物料 List existMaterialList = new LinkedList<>(); List existCAList = new LinkedList<>(); List materialList = mService.getList(); List cAList = mApprovingService.getListByStatus(1); for (int i = 0; i < mApprovingList.size(); i++) { MaterialApproving materialApproving = mApprovingList.get(i); for (int j = 0; j < materialList.size(); j++) { if (materialApproving.getSubCode().equals(materialList.get(j).getSubCode()) && materialApproving.getSubName().equals(materialList.get(j).getSubName()) && materialApproving.getSubModel().equals(materialList.get(j).getSubModel()) ) { existMaterialList.add(materialList.get(j)); } } for (int j = 0; j < cAList.size(); j++) { if (materialApproving.getSubCode().equals(cAList.get(j).getSubCode()) && materialApproving.getSubName().equals(cAList.get(j).getSubName()) && materialApproving.getSubModel().equals(cAList.get(j).getSubModel()) ) { existCAList.add(cAList.get(j)); } } } int existCASize = existCAList.size(); int existMaterialSize = existMaterialList.size(); if (existCASize != 0) { if (existMaterialSize != 0) { response.setII(21, existCAList, existMaterialList, "重复提交:现有物料及正在进行审批的物料中,存在当前提交上传的物料"); } else { response.set(22, existCAList, "重复提交:正在进行审批的物料中,存在当前提交上传的物料"); } return response; } else { if (existMaterialSize != 0) { return response.setII(23, null, existMaterialList, "重复提交:现有物料中,存在当前提交上传的物料"); } } }else{ //删除 //判断是否在物料审批删除中,是否存在产品关联及关联审批 MaterialApproving deleteApproving = new MaterialApproving(); List existMaterialProducts = new LinkedList<>(); List existMaterialProductApprovingList = new LinkedList<>(); deleteApproving = mApprovingService.getListByMaterialId(mApprovingList.get(0).getMaterialId()); //查看产品关联 List cphLatestExistList = cphService.getLatestExistListByMaterialId(mApprovingList.get(0).getMaterialId()); //查看产品关联审批 List cpaLatestExistList = cpApprovingService.getLatestExistListByMaterialId(mApprovingList.get(0).getMaterialId()); if(deleteApproving!=null){ return response.set(31,deleteApproving,"拒绝本次删除申请,当前物料正在进行删除审批"); } if(cphLatestExistList!=null && cphLatestExistList.size()!=0){ if(cpaLatestExistList!=null && cpaLatestExistList.size()!=0){ return response.setII(32,cpaLatestExistList,cphLatestExistList,"拒绝本次删除申请,当前散装已经关联产品及在产品关联审批"); }else{ return response.setII(33,null,cphLatestExistList,"拒绝本次删除申请,当前物料在产品关联审批"); } }else{ if(cpaLatestExistList!=null && cpaLatestExistList.size()!=0){ return response.set(34,cpaLatestExistList,"拒绝本次删除申请,当前物料已经关联产品"); } } } main.setType(EnumWorksheetType.Material.getType()); //提交主表 main.setCreateUserId(user.getId()); //提交人角色来判断工作流层级 if(user.getRoleId().equals("1001")){ if(main.getId()==null) { main.setLevel(2); main.setStatus(1); mainMapper.insert(main); } //提交子表 WorksheetLink link =new WorksheetLink(); link.setMainId(main.getId()); link.setParentId(0); link.setDealUserId(main.getNextUser()); link.setDealType(1); link.setDealDesc(main.getDealDesc()); link.setLinkStatus(0); link.setEnableArchive(0); linkMapper.insert(link); } else if(user.getRoleId().equals("1002")){ if(main.getId()==null) { main.setLevel(1); main.setStatus(2); mainMapper.insert(main); } //提交子表 WorksheetLink link =new WorksheetLink(); link.setMainId(main.getId()); link.setParentId(0); link.setDealUserId(main.getNextUser()); link.setDealType(2); link.setDealDesc(main.getDealDesc()); link.setLinkStatus(0); link.setEnableArchive(1); linkMapper.insert(link); } else if(user.getRoleId().equals("1003")){ main.setLevel(0); main.setStatus(5); mainMapper.insert(main); }else{ return response.set(3); } //物料-审批提交 mApprovingList.forEach(cApproving->{ cApproving.setCreateDate(new Date()); cApproving.setMainId(main.getId()); cApproving.setStatus(1); }); mApprovingService.insert(mApprovingList); return response.set(1); } public Response productSoftwareSubmit(MultipartFile file, WorksheetMainDTO2 mainDTO, DocUser user) throws IOException { Response response = new Response(); WorksheetMain main = mainDTO.getMain(); ProductSoftwareApproving approving = mainDTO.getApproving(); //首先校验文件名是否已存在 String filename = file.getOriginalFilename(); List softwareApprovingList = psaService.getAll(); List softwareList = productSoftwareService.getAll(); List existApprovingList = softwareApprovingList.stream().map(ProductSoftwareApproving::getSoftwareName).collect(Collectors.toList()); List existList = softwareList.stream().map(ProductSoftware::getSoftwareName).collect(Collectors.toList()); for (String existFilename:existList){ if(filename.equals(existFilename)){ return response.set(1,false,"软件文件名已存在"); } } for (String existFilename:existApprovingList){ if(filename.equals(existFilename)){ return response.set(1,false,"软件文件名在审批列表中已存在"); } } main.setType(1); //提交主表 main.setCreateUserId(user.getId()); //提交人角色来判断工作流层级 if(user.getRoleId().equals("1001")){ if(main.getId()==null) { main.setLevel(2); main.setStatus(1); mainMapper.insert(main); } //提交子表 WorksheetLink link =new WorksheetLink(); link.setMainId(main.getId()); link.setParentId(0); link.setDealUserId(main.getNextUser()); link.setDealType(1); link.setDealDesc(main.getDealDesc()); link.setLinkStatus(0); link.setEnableArchive(0); linkMapper.insert(link); } else if(user.getRoleId().equals("1002")){ if(main.getId()==null) { main.setLevel(1); main.setStatus(2); mainMapper.insert(main); } //提交子表 WorksheetLink link =new WorksheetLink(); link.setMainId(main.getId()); link.setParentId(0); link.setDealUserId(main.getNextUser()); link.setDealType(2); link.setDealDesc(main.getDealDesc()); link.setLinkStatus(0); link.setEnableArchive(1); linkMapper.insert(link); } else if(user.getRoleId().equals("1003")){ main.setLevel(0); main.setStatus(5); mainMapper.insert(main); }else{ return response.set(1,false,"角色无法提交审批"); } //转化为审批路径 //检查是否为zip boolean isZip = Zip4jUtil.checkZipFileParam(file); if(!isZip){ return response.set(1,false,"上传的文件格式不是zip"); } //zip存储路径:doc_file/product_approving/${username}/{dateFormat}/${timeStamp} String rootFile = CommonUtil.getRootFile(); String dateFormat = new SimpleDateFormat("YYYY-MM").format(new Date()); long timeStamp = System.currentTimeMillis(); String productSoftwarePath = File.separator + "product_software" + File.separator + user.getName() + File.separator + dateFormat+ File.separator + timeStamp; String filePath = rootFile + productSoftwarePath; String originalFilename = file.getOriginalFilename(); File zipFile = new File(filePath+File.separator+ originalFilename); /*if(!zipFile.exists()){ zipFile.mkdirs(); }*/ File parentFile = new File(filePath); if (!parentFile.exists()) { parentFile.mkdirs(); } file.transferTo(zipFile); approving.setSoftwareUrl("doc_file"+productSoftwarePath+File.separator+ originalFilename); approving.setSoftwareName(originalFilename); approving.setCreateTime(new Date()); approving.setMainId(main.getId()); //产品软件提交 psaService.insert(approving); return response.set(1,true, "提交完成"); } public WorksheetMain getInfoById(Integer id) { return mainMapper.selectById(id); } public void updateStatusById(Integer id,Integer status) { WorksheetMain main = new WorksheetMain(); main.setId(id); main.setStatus(status); mainMapper.updateById(main); } public void updateEndStatusById(Integer id,String endReason,Integer status) { WorksheetMain main = new WorksheetMain(); main.setId(id); main.setStatus(status); main.setEndReason(endReason); main.setEndTime(new Date()); mainMapper.updateById(main); } /** * 用户对应的工作台数据分类 * @param user * @return*/ public Map getStatusStatistic(DocUser user) { Map map = new HashMap<>(); switch (user.getRoleId()){ //普通员工 case "1001": { //未处理(审批中)/已驳回/已审批 map.put("rejected",0); map.put("approving",0); map.put("approved",0); QueryWrapper query = Wrappers.query(); query.eq("create_user_id",user.getId()); List worksheetMainList = mainMapper.selectList(query); Map> groupingList = worksheetMainList.stream().collect(Collectors.groupingBy(WorksheetMain::getStatus)); groupingList.forEach((status,mainList)->{ switch (status){ case 0:{ map.put("rejected",mainList.size()); }break; case 1: case 2:{ Integer addedMainCount= map.get("approving"); if(addedMainCount ==0){ map.put("approving",mainList.size()); }else{ map.put("approving",addedMainCount+mainList.size()); } }break; case 5:{ map.put("approved",mainList.size()); }break; } }); } break; //项目经理 case "1002": { //待处理/已处理/属于自己-审批中/已驳回/已审批 //属于自己-审批中/已驳回/已审批 map.put("rejected",0); map.put("approving",0); map.put("approved",0); map.put("handling",0); map.put("handled",0); QueryWrapper query = Wrappers.query(); query.eq("create_user_id",user.getId()); List worksheetMainList = mainMapper.selectList(query); Map> groupingList = worksheetMainList.stream().collect(Collectors.groupingBy(WorksheetMain::getStatus)); groupingList.forEach((status,mainList)->{ switch (status){ case 0:{ map.put("rejected",mainList.size()); }break; case 2:{ map.put("approving",mainList.size()); }break; case 5:{ map.put("approved",mainList.size()); }break; } }); //待处理/已处理 List WorksheetLinkList = linkService.getInfoList(user.getId()); Map> groupingLinkList = WorksheetLinkList.stream().collect(Collectors.groupingBy(WorksheetLink::getLinkStatus)); groupingLinkList.forEach((linkStatus,linkList)->{ List mainList = new LinkedList<>(); linkList.forEach(link -> {mainList.add(link.getMain());}); switch (linkStatus){ case 0:{ map.put("handling",mainList.size()); }break; case 1: case 2:{ Integer addedMainCount= map.get("handled"); if(addedMainCount ==0){ map.put("handled",mainList.size()); }else{ map.put("handled",addedMainCount+mainList.size()); } }break; } }); } break; //总经理 case "1003": { //待处理/已审批 map.put("handling",0); map.put("approved",0); List WorksheetLinkList = linkService.getInfoList(user.getId()); Map> groupingLinkList = WorksheetLinkList.stream().collect(Collectors.groupingBy(WorksheetLink::getLinkStatus)); groupingLinkList.forEach((linkStatus,linkList)->{ List mainList = new LinkedList<>(); linkList.forEach(link -> {mainList.add(link.getMain());}); switch (linkStatus){ case 0:{ map.put("handling",mainList.size()); }break; case 1: case 2:{ Integer addedMainCount= map.get("approved"); if(addedMainCount ==0){ map.put("approved",mainList.size()); }else{ map.put("approved",addedMainCount+mainList.size()); } }break; } }); } break; } //查询我的工单数量 QueryWrapper query = Wrappers.query(); query.eq("create_user_id",user.getId()); Integer count = mainMapper.selectCount(query); map.put("my",count); return map; } public WorksheetMain getLinkList(int id) { //判断是哪种类型的审批,返回不同的类型 具体数据 Integer type = getInfoById(id).getType(); if(type.intValue() == EnumWorksheetType.ProductBom.getType()) { WorksheetMain main = mainMapper.getLinkList(id); List pbaList = approvingService.getList(main.getProductApproving().getId()); main.getProductApproving().setBomApprovingList(pbaList); return main; }else if(type.intValue() == EnumWorksheetType.Material.getType()){ return mainMapper.getLinkListWithMaterials(id); }else{ //物料-产品 return mainMapper.getLinkListWithMaterialProducts(id); } } public Response> getApprovingListPage(DocUser user, int pageNum, int pageSize) { PageHelper.startPage(pageNum,pageSize); QueryWrapper query = Wrappers.query(); query.eq("create_user_id",user.getId()).in("status",1,2).orderByDesc("id"); List worksheetMainList = mainMapper.selectList(query); //查询主表状态对应的子表 worksheetMainList.forEach(main -> { main.setApprovingUser(linkService.getApprovingUser(main.getId())); }); PageInfo pageInfo = new PageInfo<>(worksheetMainList); return new Response>().set(1,pageInfo); } public Response> getRejectedListPage(DocUser user, int pageNum, int pageSize) { PageHelper.startPage(pageNum,pageSize); QueryWrapper query = Wrappers.query(); query.eq("create_user_id",user.getId()).in("status",0).orderByDesc("id"); List worksheetMainList = mainMapper.selectList(query); PageInfo pageInfo = new PageInfo<>(worksheetMainList); return new Response>().set(1,pageInfo); } public Response> getApprovedListPage(DocUser user, int pageNum, int pageSize) { Response> response = new Response<>(); PageHelper.startPage(pageNum,pageSize); List worksheetMainList = null; //自己的工单 if(!user.getRoleId().equals("1003")){ QueryWrapper query = Wrappers.query(); query.eq("create_user_id",user.getId()).in("status",5).orderByDesc("id"); worksheetMainList = mainMapper.selectList(query); }else{ //总经理,节点审批人为自己 worksheetMainList = linkService.getInfoList2(user.getId(),1); } PageInfo pageInfo = new PageInfo<>(worksheetMainList); return response.set(1,pageInfo); } public Response> getHandlingListPage(DocUser user, int pageNum, int pageSize) { PageHelper.startPage(pageNum,pageSize); List worksheetMainList = linkService.getInfoList3(user.getId(),0); PageInfo pageInfo = new PageInfo<>(worksheetMainList); return new Response>().set(1,pageInfo); } public Response> getHandledListPage(DocUser user, int pageNum, int pageSize) { PageHelper.startPage(pageNum,pageSize); List worksheetMainList = linkService.getInfoList3(user.getId(),1); PageInfo pageInfo = new PageInfo<>(worksheetMainList); return new Response>().set(1,pageInfo); } public WorksheetMain getInfo(int id) { return mainMapper.selectById(id); } public Response> getMyList(int pageNum, int pageSize, DocUser user) { PageHelper.startPage(pageNum,pageSize); QueryWrapper query = Wrappers.query(); query.eq("create_user_id",user.getId()).orderByDesc("id"); List worksheetMainList = mainMapper.selectList(query); PageInfo pageInfo = new PageInfo<>(worksheetMainList); return new Response>().set(1,pageInfo); } public Response addProductProcedureAndSOP(ProcedureDocApproving approving, DocUser user) throws IOException, MessagingException { WorksheetMain main = new WorksheetMain(); //存储上传信息到主表,节点表 //文件保存在/doc_file/procedure_approving/xxx_时间戳.doc MultipartFile multipartFile = approving.getMultipartFile(); String originalFilename = multipartFile.getOriginalFilename(); String rootFile = CommonUtil.getRootFile(); Date date = new Date(); String filename = originalFilename.replace(".doc","_"+date.getTime()+".doc"); String suffixFilePath = "procedure_approving" + File.separator + filename; String outFilePath = rootFile + suffixFilePath; File outFile = new File(outFilePath); multipartFile.transferTo(outFile); main.setTitle(approving.getName()); main.setDescription(approving.getDescription()); main.setCreateUserId(user.getId()); main.setBeginTime(date); main.setStatus(1); if(approving.getType()==1){ main.setType(EnumWorksheetType.ProductProcedure.getType()); }else{ main.setType(EnumWorksheetType.SOP.getType()); } mainMapper.insert(main); List links = new LinkedList<>(); WorksheetLink baseLink = new WorksheetLink(); WorksheetLink linkFzr = new WorksheetLink(); WorksheetLink linkBz = new WorksheetLink(); WorksheetLink linkZz = new WorksheetLink(); WorksheetLink linkPb = new WorksheetLink(); baseLink.setMainId(main.getId()); baseLink.setLinkStatus(0); baseLink.setCreateTime(date); BeanUtils.copyProperties(baseLink,linkFzr); BeanUtils.copyProperties(baseLink,linkBz); BeanUtils.copyProperties(baseLink,linkZz); BeanUtils.copyProperties(baseLink,linkPb); linkFzr.setDealUserId(approving.getFzr()); linkBz.setDealUserId(approving.getBz()); linkZz.setDealUserId(approving.getZz()); linkPb.setDealUserId(approving.getPb()); links.add(linkFzr); links.add(linkBz); links.add(linkZz); links.add(linkPb); linkMapper.insertBatchSomeColumn(links); //流程文档审批子表存入 approving.setFile("doc_file"+ File.separator + suffixFilePath); approving.setMainId(main.getId()); procedureDocApprovingService.insert(approving); //发送邮件给四个确认人 QueryWrapper query = Wrappers.query(); query.select("mail").in("id",approving.getFzr(),approving.getBz(),approving.getZz(),approving.getPb()); List docUsers = userMapper.selectList(query); List userMailList = docUsers.stream().map(DocUser::getMail).collect(Collectors.toList()); MailDTO mailDTO = new MailDTO(); mailDTO.setMailList(userMailList); if(approving.getType()==1){ mailDTO.setTitle("【流程卡确认】"+main.getTitle()); mailDTO.setContent(user.getName()+"在文档管理平台上传了产品流程卡,请及时确认"); }else{ mailDTO.setTitle("【SOP确认】"+main.getTitle()); mailDTO.setContent(user.getName()+"在文档管理平台上传了SOP,请及时确认"); } mailService.sendMail(mailDTO); return new Response().setII(1,"上传完成"); } /** * 统计数量: * 我的提交 * 待处理 * 已处理 * @param user * @return */ public Map getProcedureDocApprovingStatusStatistic(DocUser user) { Map map = new HashMap<>(); //我的提交 QueryWrapper query = Wrappers.query(); query.eq("create_user_id",user.getId()).in("type",EnumWorksheetType.ProductProcedure.getType(),EnumWorksheetType.SOP.getType()); List worksheetMains = mainMapper.selectList(query); map.put("mySubmit",worksheetMains.size()); //待处理|已处理 int handlingCount = 0; int handledCount = 0; List links = linkMapper.getProcedureDocApprovingByUserId(user.getId()); for (WorksheetLink link : links) { //dealType的值为主表的状态 if(link.getDealType() == 1 && link.getLinkStatus() == 0){ //未处理且审批未结束 handlingCount++; }else if(link.getLinkStatus() == 1 || link.getLinkStatus() ==2){ //已确认或已拒绝 handledCount++; } } map.put("handling",handlingCount); map.put("handled",handledCount); return map; } public Response procedurePreview(HttpServletResponse response, int mainId) throws IOException { //查询当前单据审批人的确认状态 ProcedureDocApproving approving = procedureDocApprovingService.getByMainId(mainId); List linkList = linkMapper.getList(mainId); String fzr = linkList.get(0).getLinkStatus() == 1 ? linkList.get(0).getDealUsername():""; String bz = linkList.get(1).getLinkStatus() == 1 ? linkList.get(1).getDealUsername():""; String zz = linkList.get(2).getLinkStatus() == 1 ? linkList.get(2).getDealUsername():""; String pb = linkList.get(3).getLinkStatus() == 1 ? linkList.get(3).getDealUsername():""; List list = new LinkedList(); list.add(fzr); list.add(bz); list.add(zz); list.add(pb); //获取word模板具体文件 long currentTimeMillis = System.currentTimeMillis(); String projectDir = CommonUtil.getProjectDir(); String fileRelativePath = approving.getFile(); String inFilePath = projectDir + File.separator + fileRelativePath; String outFilePath = inFilePath.replace(".doc","_"+currentTimeMillis+".doc"); WordUtil.fillValue(inFilePath,outFilePath,list); //pdf带水印的地址 /doc_file/procedure_approving/xxx.doc String suffixOutPdfFilePath = "doc_file" + File.separator + "procedure_approving" + File.separator + outFilePath.substring(outFilePath.lastIndexOf(File.separator)+1,outFilePath.lastIndexOf(".")) + ".pdf"; String outPdfFilePath = projectDir + File.separator + suffixOutPdfFilePath; Word2PdfAsposeUtil.doc2pdfWithWaterMark(outFilePath,outPdfFilePath,true); return new Response().setII(1,suffixOutPdfFilePath); /*try { // 转码防止乱码 //resp.addHeader("Content-Disposition", "attachment;filename=" + new String(softwareName.getBytes("UTF-8"), "ISO8859-1")); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode ( fileRelativePath.substring(fileRelativePath.lastIndexOf(File.separator+1)), "utf-8")); OutputStream out = response.getOutputStream(); FileInputStream in = new FileInputStream(outFilePath); 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(); }*/ } /** * 查询所有的工单,所有人可见 * @param param * @return */ public Response getAllPage(WorksheetMain param) { Integer pageNum = param.getPageNum(); Integer pageSize = param.getPageSize(); PageHelper.startPage(pageNum,pageSize); int createUserId = param.getCreateUserId().intValue(); Date beginTime = param.getBeginTime(); Date endTime = param.getEndTime(); Integer type = param.getType(); QueryWrapper query = Wrappers.query(); if(createUserId>0){ query.eq("create_user_id",createUserId); } query.ge("begin_time",beginTime); query.le("begin_time",endTime); if(type!=null && type>=0){ query.eq("type",type); } List worksheetMains = mainMapper.selectList(query); PageInfo pageInfo = new PageInfo(worksheetMains); return new Response().set(1,pageInfo); } }