Explorar el Código

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper into master

seyason hace 1 año
padre
commit
4cd30733e3

+ 15 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectApprovalController.java

@@ -123,7 +123,9 @@ public class ProjectApprovalController {
                     p.setUserName(first.get().getName());
                 }
             });
-            participationApprovalService.saveBatch(participationApprovalList);
+            if(participationApprovalList.size()>0){
+                participationApprovalService.saveBatch(participationApprovalList);
+            }
         }
         if(projectApproval.getProjectApprovalBasecostList()!=null&&projectApproval.getProjectApprovalBasecostList().size()>0){
             List<ProjectApprovalBasecost> projectApprovalBasecostList = projectApproval.getProjectApprovalBasecostList();
@@ -141,7 +143,9 @@ public class ProjectApprovalController {
                     p.setAuditorName(first.get().getName());
                 }
             });
-            projectApprovalAuditorService.saveBatch(projectApprovalAuditorList);
+            if(projectApprovalAuditorList.size()>0){
+                projectApprovalAuditorService.saveBatch(projectApprovalAuditorList);
+            }
         }
         if(projectApproval.getProjectApprovalCheckList()!=null&&projectApproval.getProjectApprovalCheckList().size()>0){
             List<ProjectApprovalCheck> projectApprovalCheckList = projectApproval.getProjectApprovalCheckList();
@@ -152,7 +156,9 @@ public class ProjectApprovalController {
             for (int i = 0; i < projectApprovalCheckList.size(); i++) {
                 projectApprovalCheckList.get(i).setSeq(i+1);
             }
-            projectApprovalCheckService.saveOrUpdateBatch(projectApprovalCheckList);
+            if(projectApprovalCheckList.size()>0){
+                projectApprovalCheckService.saveOrUpdateBatch(projectApprovalCheckList);
+            }
         }
         //新增操作记录数据
         ProjectApprovalLog projectApprovalLog=new ProjectApprovalLog();
@@ -324,10 +330,15 @@ public class ProjectApprovalController {
         return msg;
     }
 
-
     @RequestMapping("/importData")
     public HttpRespMsg importData(MultipartFile multipartFile){
         return projectApprovalService.importData(multipartFile);
     }
+
+    @RequestMapping("/exportData")
+    public HttpRespMsg exportData( String keyword,
+                                  @RequestParam(required = false, defaultValue = "1") Integer searchField,@RequestParam(defaultValue = "3") String statuses,Integer category,Integer viewId){
+        return projectApprovalService.exportData(keyword,searchField,statuses,category,viewId);
+    }
 }
 

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectApprovalService.java

@@ -21,4 +21,6 @@ public interface ProjectApprovalService extends IService<ProjectApproval> {
     HttpRespMsg listByPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField, String statuses, Integer category,Integer viewId, HttpServletRequest request);
 
     HttpRespMsg importData(MultipartFile multipartFile);
+
+    HttpRespMsg exportData(String keyword, Integer searchField, String statuses, Integer category, Integer viewId);
 }

+ 509 - 21
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectApprovalServiceImpl.java

@@ -1,27 +1,35 @@
 package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.management.platform.entity.*;
-import com.management.platform.mapper.ProjectApprovalMapper;
-import com.management.platform.mapper.ProjectMapper;
-import com.management.platform.mapper.UserMapper;
+import com.management.platform.mapper.*;
 import com.management.platform.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.MessageUtils;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.multipart.MultipartFile;
+import sun.misc.Request;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -44,6 +52,30 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
     private SysFunctionService sysFunctionService;
     @Resource
     private ProjectApprovalCheckService projectApprovalCheckService;
+    @Resource
+    private WxCorpInfoService wxCorpInfoService;
+    @Resource
+    private TimeTypeMapper timeTypeMapper;
+    @Resource
+    private CompanyMapper companyMapper;
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    private ProjectCategoryMapper projectCategoryMapper;
+    @Resource
+    private ParticipationApprovalMapper participationApprovalMapper;
+    @Resource
+    private ParticipationApprovalService participationApprovalService;
+    @Resource
+    private ProjectApprovalAuditorMapper projectApprovalAuditorMapper;
+    @Resource
+    private ProjectApprovalAuditorService projectApprovalAuditorService;
+    @Resource
+    private ProjectMapper projectMapper;
+    @Resource
+    private ExcelExportService excelExportService;
+    @Value(value = "${upload.path}")
+    private String path;
 
 
 
@@ -101,26 +133,26 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
             if(optional.isPresent()){
                 r.setInchargerName(optional.get().getName());
             }
-            Integer canCheck=0;
+//            Integer canCheck=0;
             List<ProjectApprovalCheck> checkList = approvalCheckList.stream().filter(a -> a.getProjectApprovalId().equals(r.getId())).collect(Collectors.toList());
             Optional<ProjectApprovalCheck> first = checkList.stream().filter(c -> c.getUserId().equals(user.getId())&&c.getStatus()==0).findFirst();
-            if(first.isPresent()){
-                //针对当前登录人员 作为审核人检查是否有审核权限
-                boolean anyMatch = checkList.stream().anyMatch(c -> c.getSeq() < first.get().getSeq() && c.getStatus() == 0);
-                if(!anyMatch){
-                    canCheck=1;
-                }
-            }
+//            if(first.isPresent()){
+//                //针对当前登录人员 作为审核人检查是否有审核权限
+//                boolean anyMatch = checkList.stream().anyMatch(c -> c.getSeq() < first.get().getSeq() && c.getStatus() == 0);
+//                if(!anyMatch){
+//                    canCheck=1;
+//                }
+//            }
             //有权限可编辑
-            if(hasAllPriviledge||hasCheckPriviledge){
-                canCheck=1;
-            }
-            //全部审核通过的情况不可编辑
-            boolean b = checkList.stream().allMatch(c -> c.getStatus().equals(1));
-            if(b){
-                canCheck=0;
-            }
-            r.setCanChecked(canCheck);
+//            if(hasAllPriviledge||hasCheckPriviledge){
+//                canCheck=1;
+//            }
+//            //全部审核通过的情况不可编辑
+//            boolean b = checkList.stream().allMatch(c -> c.getStatus().equals(1));
+//            if(b){
+//                canCheck=0;
+//            }
+//            r.setCanChecked(canCheck);
         });
         result.put("records",records);
         result.put("total",iPage.getTotal());
@@ -130,6 +162,10 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
 
     @Override
     public HttpRespMsg importData(MultipartFile multipartFile) {
+        HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
+        TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         String fileName = multipartFile.getOriginalFilename();
         File file = new File(fileName == null ? "file" : fileName);
         InputStream inputStream = null;
@@ -148,9 +184,24 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
             outputStream.close();
             //然后解析表格
             XSSFWorkbook workbook = new XSSFWorkbook(file);
+            //我们只需要第一个sheet
             XSSFSheet sheet = workbook.getSheetAt(0);
+            //获取全部人员
+            List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()).eq("is_active", 1));
+            Company company = companyMapper.selectById(user.getCompanyId());
+            List<Project> projectList = new ArrayList<Project>();
             //由于第一行需要指明列对应的标题
             int rowNum = sheet.getLastRowNum();
+            HashMap<String, Integer> projectLevelMap = new HashMap<>();
+            projectLevelMap.put(MessageUtils.message("excel.normal"), 1);
+            projectLevelMap.put(MessageUtils.message("excel.urgent"), 2);
+            projectLevelMap.put(MessageUtils.message("excel.important"), 3);
+            projectLevelMap.put(MessageUtils.message("excel.impAndUrg"), 4);
+            projectLevelMap.put(MessageUtils.message("excel.lowRisk"), 5);
+            projectLevelMap.put(MessageUtils.message("excel.MedRisk"), 6);
+            projectLevelMap.put(MessageUtils.message("excel.highRisk"), 7);
+            List<String> existCodeList = new ArrayList<>();
+            List<String> userNameList=new ArrayList<>();
             for (int rowIndex = 0; rowIndex <= rowNum; rowIndex++) {
                 XSSFRow row = sheet.getRow(rowIndex);
                 if (row == null) {
@@ -160,10 +211,447 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
                 if (ExcelUtil.isRowEmpty(row)) {
                     continue;
                 }
+                XSSFCell participatorCell = row.getCell(6);
+                XSSFCell inchargerCell = row.getCell(7);
+
+                String part = "";
+                String inchargerName = "";
+                if (participatorCell!=null) {
+                    participatorCell.setCellType(CellType.STRING);
+                    part = participatorCell.getStringCellValue().trim();
+                }
+                if (inchargerCell != null) {
+                    inchargerCell.setCellType(CellType.STRING);
+                    inchargerName = inchargerCell.getStringCellValue().trim();
+                }
+                //兼容繁体
+                if(part.equals("参与人") || part.equals("參與人")){
+                    continue;
+                }
+                String[] partSplit = part.split("\\,|\\,");
+                for (String s : partSplit) {
+                    if(!userNameList.contains(s)&&!s.equals("")){
+                        userNameList.add(s);
+                    }
+                }
+                if(!userNameList.contains(inchargerName)&&!inchargerName.equals("")){
+                    userNameList.add(inchargerName);
+                }
             }
+            HttpRespMsg respMsg=new HttpRespMsg();
+            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1&&userNameList.size()>0){
+                System.out.println("参与搜素的人员列表"+userNameList + userNameList.size());
+                respMsg = wxCorpInfoService.getBatchSearchUserInfo(wxCorpInfo, userNameList,null);
+                if(respMsg.code.equals("0")){
+                    msg.setError("姓名为["+String.valueOf(respMsg.data)+"]的人员存在重复,请使用工号!");
+                    return msg;
+                }
+            }
+            List<User> targetUserList= (List<User>) respMsg.data;
+            int importCount = 0;
+            for (int rowIndex = 0; rowIndex <= rowNum; rowIndex++) {
+                XSSFRow row = sheet.getRow(rowIndex);
+                if (row == null) {
+                    continue;
+                }
+                //跳过空行
+                if (ExcelUtil.isRowEmpty(row)) {
+                    continue;
+                }
+                //项目编号 项目分类	项目名称 参与人 负责人 级别 开始日期 截止日期 合同金额
+                XSSFCell codeCell = row.getCell(0);
+                XSSFCell categoryCell = row.getCell(1);
+                XSSFCell isPublicCell = row.getCell(2);
+                XSSFCell nameCell = row.getCell(3);
+                XSSFCell descCell = row.getCell(4);
+                XSSFCell participatorCell = row.getCell(5);
+                XSSFCell inchargerCell = row.getCell(6);
+                XSSFCell reportAuditorsCell=null;
+                XSSFCell reportCcCell=null;
+                int i=0;
+                if(timeType.getReportAuditType()==0||timeType.getReportAuditType()==4||timeType.getReportAuditType()==6){
+                    i++;
+                    reportAuditorsCell = row.getCell(6+i);
+                }
+                if(timeType.getReportAuditType()==6){
+                    i++;
+                    reportCcCell=row.getCell(6+i);
+                }
+                XSSFCell levelCell = row.getCell(7+i);
+                XSSFCell startDateCell = row.getCell(8+i);
+                XSSFCell endDateCell = row.getCell(9+i);
+                XSSFCell amountCell = row.getCell(10+i);
+
+
+                if (codeCell != null)codeCell.setCellType(CellType.STRING);
+                if (nameCell != null)nameCell.setCellType(CellType.STRING);
+                if (categoryCell != null)categoryCell.setCellType(CellType.STRING);
+                if (isPublicCell != null)isPublicCell.setCellType(CellType.STRING);
+                if (descCell != null)descCell.setCellType(CellType.STRING);
+                if (participatorCell != null)participatorCell.setCellType(CellType.STRING);
+                if (inchargerCell != null)inchargerCell.setCellType(CellType.STRING);
+                if (reportAuditorsCell != null)reportAuditorsCell.setCellType(CellType.STRING);
+                if (reportCcCell != null)reportCcCell.setCellType(CellType.STRING);
+                if (levelCell != null)levelCell.setCellType(CellType.STRING);
+                if (startDateCell != null)startDateCell.setCellType(CellType.NUMERIC);
+                if (endDateCell != null)endDateCell.setCellType(CellType.NUMERIC);
+                if (amountCell != null)amountCell.setCellType(CellType.STRING);
+                if (descCell != null)descCell.setCellType(CellType.STRING);
+                if (nameCell == null) {//项目名称为空的直接跳过
+                    throw new Exception("项目名称不能为空");
+                }
+                ProjectApproval project = new ProjectApproval();
+                boolean exists=false;
+                if (codeCell != null) {
+                    String code = codeCell.getStringCellValue().trim().replaceAll("\\u00a0", "");
+                    if ((code.equals("项目编号") || code.equals("項目編號") || code.equals("project No")) && rowIndex == 0) {
+                        //跳过第一行标题
+                        continue;
+                    }
+                    //检查编号是否已经存在
+                    if (!StringUtils.isEmpty(code)) {
+                        int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("project_code", code).eq("company_id", user.getCompanyId()));
+                        if (cnt > 0) {
+//                            throw new Exception("项目编号存在重复: " + code);
+                            existCodeList.add(code);
+                            //跳过编号重复的数据
+                            exists=true;
+                            continue;
+                        }
+                    }
+                    project.setProjectCode(code);
+                }
+                //检查项目分类是否存在
+                List<ProjectCategory> projectCategoryList = projectCategoryMapper.selectList(new QueryWrapper<ProjectCategory>().eq("company_id", user.getCompanyId()));
+                if (categoryCell != null && !StringUtils.isEmpty(categoryCell.getStringCellValue())) {
+                    Optional<ProjectCategory> category = projectCategoryList.stream().filter(pc -> pc.getName().equals(categoryCell.getStringCellValue())).findFirst();
+                    if(!category.isPresent()){
+                        throw  new Exception("项目分类["+categoryCell.getStringCellValue()+"]不存在");
+                    }
+                    project.setCategory(category.get().getId());
+                    project.setCategoryName(categoryCell.getStringCellValue());
+                }
+                String name = nameCell.getStringCellValue().trim().replaceAll("\\u00a0", "");
+                project.setCompanyId(user.getCompanyId());
+                project.setCreatorId(user.getId());
+                project.setCreatorName(user.getName());
+                project.setProjectName(name);
+                project.setCreateDate(LocalDate.now());
+                //处理人员
+                if (inchargerCell != null) {
+                    String inchargerName = inchargerCell.getStringCellValue().trim();
+                    if (!StringUtils.isEmpty(inchargerName)) {
+                        String s1;
+                        if(inchargerName.startsWith("/")){
+                            s1=inchargerName.substring(1,inchargerName.length());
+                        }else s1=inchargerName;
+                        String s2;
+                        if(s1.endsWith("/")){
+                            s2=s1.substring(0,s1.length()-1);
+                        }else s2=s1;
+                        String[] split = s2.split("/");
+                        Optional<User> first;
+                        Integer exception=null;
+                        if(split.length==1){
+                            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(split[0])).findFirst();
+                                first= userList.stream().filter(u ->(u.getJobNumber()!=null&&u.getJobNumber().equals(split[0]))||(optional.isPresent()&&u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))).findFirst();
+                            }else {
+                                first= userList.stream().filter(u -> u.getName().equals(split[0])||(u.getJobNumber()!=null&&u.getJobNumber().equals(split[0]))).findFirst();
+                            }
+                            exception=0;
+                        }else {
+                            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(split[1])).findFirst();
+                                first= userList.stream().filter(u ->(u.getJobNumber()!=null&&u.getJobNumber().equals(split[1]))||(optional.isPresent()&&u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))).findFirst();
+                                exception=1;
+                            }else {
+                                first= userList.stream().filter(u -> u.getName().equals(split[1])&&(u.getJobNumber()!=null&&u.getJobNumber().equals(split[1]))).findFirst();
+                            }
+                        }
+                        if (first.isPresent()) {
+                            project.setInchargerId(first.get().getId());
+                            project.setInchargerName(first.get().getName());
+                        } else {
+                            switch (exception){
+                                case 0:throw new Exception("["+split[0]+"]在系统中不存在");
+                                case 1:throw new Exception("["+split[1]+"]在系统中不存在");
+                            }
+                        }
+                    }
+                }
+
+
+                if (levelCell != null) {
+                    String levelStr = levelCell.getStringCellValue();
+                    if (!StringUtils.isEmpty(levelStr)) {
+                        project.setLevel(projectLevelMap.get(levelStr));
+                    }
+                }
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                if (startDateCell !=null && !StringUtils.isEmpty(startDateCell.getDateCellValue())) {
+                    project.setPlanStartDate(LocalDate.parse(sdf.format(startDateCell.getDateCellValue()), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                }
+                if (endDateCell !=null && !StringUtils.isEmpty(endDateCell.getDateCellValue())) {
+                    project.setPlanEndDate(LocalDate.parse(sdf.format(endDateCell.getDateCellValue()), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                }
+                if (amountCell !=null && !StringUtils.isEmpty(amountCell.getStringCellValue())) {
+                    project.setContractAmount(Double.parseDouble(amountCell.getStringCellValue()));
+                }
+                if(descCell!=null&&!StringUtils.isEmpty(descCell.getStringCellValue())){
+                    project.setProjectDesc(descCell.getStringCellValue());
+                }
+                if (isPublicCell != null && !StringUtils.isEmpty(isPublicCell.getStringCellValue())) {
+                    project.setIsPublic(MessageUtils.message("excel.yes").equals(isPublicCell.getStringCellValue())?1:0);
+                }
+                if(exists){
+                    ProjectApproval updateProject = projectApprovalMapper.selectList(new QueryWrapper<ProjectApproval>().eq("project_code", project.getProjectCode()).eq("company_id", user.getCompanyId())).get(0);
+                    project.setId(updateProject.getId());
+                    projectApprovalMapper.updateById(project);
+                }else {
+                    projectApprovalMapper.insert(project);
+                }
+                importCount++;
+                //导入项目参与人,遵守只增不减的原则, 避免误删
+                List<ParticipationApproval> oldPartList = new ArrayList<>();
+                List<ProjectApprovalAuditor> oldAuditorList = new ArrayList<>();
+                if (exists) {
+                    //更新的项目,检查已经存在的项目参与人
+                    oldPartList = participationApprovalMapper.selectList(new QueryWrapper<ParticipationApproval>().eq("project_id", project.getId()));
+                    oldAuditorList = projectApprovalAuditorMapper.selectList(new QueryWrapper<ProjectApprovalAuditor>().eq("project_id", project.getId()));
+                }
+                List<ParticipationApproval> participationList = new ArrayList<>();
+                if(inchargerCell!=null){
+                    String value = inchargerCell.getStringCellValue().trim();
+                    if (!StringUtils.isEmpty(value)) {
+                        //有项目经理
+                        String s1;
+                        if(value.startsWith("/")){
+                            s1=value.substring(1,value.length());
+                        }else {
+                            s1=value;
+                        }
+                        String s2;
+                        if(s1.endsWith("/")){
+                            s2=s1.substring(0,s1.length()-1);
+                        }else {
+                            s2=s1;
+                        }
+                        String[] split = s2.split("/");
+                        Optional<User> first;
+                        Integer exception=null;
+                        if(split.length==1){
+                            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(split[0])).findFirst();
+                                first= userList.stream().filter(u ->(u.getJobNumber()!=null&&u.getJobNumber().equals(split[0]))||(optional.isPresent()&&u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))).findFirst();
+                            }else {
+                                first= userList.stream().filter(u -> u.getName().equals(split[0])||(u.getJobNumber()!=null&&u.getJobNumber().equals(split[0]))).findFirst();
+                            }
+                            exception=0;
+                        }else {
+                            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(split[1])).findFirst();
+                                first= userList.stream().filter(u ->(u.getJobNumber()!=null&&u.getJobNumber().equals(split[1]))||(optional.isPresent()&&u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))).findFirst();
+                                exception=1;
+                            }else {
+                                first= userList.stream().filter(u -> u.getName().equals(split[1])&&(u.getJobNumber()!=null&&u.getJobNumber().equals(split[1]))).findFirst();
+                            }
+                        }
+                        ParticipationApproval p = new ParticipationApproval();
+                        if (first.isPresent()) {
+                            p.setUserId(first.get().getId());
+                            p.setProjectApprovalId(project.getId());
+                            participationList.add(p);
+                        } else {
+                            switch (exception){
+                                case 0:throw new Exception("["+split[0]+"]在系统中不存在");
+                                case 1:throw new Exception("["+split[1]+"]在系统中不存在");
+                            }
+                        }
+                    }
+                }
+                if (participatorCell != null) {
+                    String part = participatorCell.getStringCellValue().trim();
+                    if (!StringUtils.isEmpty(part)) {
+                        String[] partSplit = part.split("\\,|\\,");
+                        for (String str : partSplit) {
+                            ParticipationApproval p = new ParticipationApproval();
+                            String s1;
+                            if(str.startsWith("/")){
+                                s1=str.substring(1,str.length());
+                            }else s1=str;
+                            String s2;
+                            if(s1.endsWith("/")){
+                                s2=s1.substring(0,s1.length()-1);
+                            }else s2=s1;
+                            String[] split = str.split("/");
+                            Optional<User> first;
+                            Integer exception=null;
+                            if(split.length==1){
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(split[0])).findFirst();
+                                    first= userList.stream().filter(u ->(u.getJobNumber()!=null&&u.getJobNumber().equals(split[0]))||(optional.isPresent()&&u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))).findFirst();
+                                }else {
+                                    first= userList.stream().filter(u -> u.getName().equals(split[0])||(u.getJobNumber()!=null&&u.getJobNumber().equals(split[0]))).findFirst();
+                                }
+                                exception=0;
+                            }else {
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(split[1])).findFirst();
+                                    first= userList.stream().filter(u ->(u.getJobNumber()!=null&&u.getJobNumber().equals(split[1]))||(optional.isPresent()&&u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))).findFirst();
+                                    exception=1;
+                                }else {
+                                    first= userList.stream().filter(u -> u.getName().equals(split[1])&&(u.getJobNumber()!=null&&u.getJobNumber().equals(split[1]))).findFirst();
+                                }
+                            }
+                            if (first.isPresent()) {
+                                User partMemb = first.get();
+//                                    System.out.println("参与人:"+partMemb.getName());
+                                if (!participationList.stream().anyMatch(partOne->partOne.getUserId().equals(partMemb.getId()))) {
+                                    p.setUserId(partMemb.getId());
+                                    p.setProjectApprovalId(project.getId());
+                                    participationList.add(p);
+                                }
+                            } else {
+                                switch (exception){
+                                    case 0:throw new Exception("["+split[0]+"]在系统中不存在");
+                                    case 1:throw new Exception("["+split[1]+"]在系统中不存在");
+                                }
+                            }
+                        }
+                    }
+                }
+                if (participationList.size() > 0) {
+                    //批量保存
+                    List<ParticipationApproval> finalOldPartList = oldPartList;
+                    List<ParticipationApproval> addPartList = participationList.stream().filter(newP-> !finalOldPartList.stream().anyMatch(oldP->oldP.getUserId().equals(newP.getUserId()))).collect(Collectors.toList());
+                    if (addPartList.size() > 0) {
+                        participationApprovalService.saveBatch(addPartList);
+                    }
+                }
+                List<ProjectApprovalAuditor> projectAuditorList = new ArrayList<>();
+                if (reportAuditorsCell != null) {
+                    String part = reportAuditorsCell.getStringCellValue().trim();
+                    if (!StringUtils.isEmpty(part)) {
+                        String[] partSplit = part.split("\\,|\\,");
+                        for (String str : partSplit) {
+                            if(str.equals(inchargerCell.getStringCellValue())){
+                                continue;
+                            }
+                            ProjectApprovalAuditor projectAuditor = new ProjectApprovalAuditor();
+                            String s1;
+                            if(str.startsWith("/")){
+                                s1=str.substring(1,str.length());
+                            }else s1=str;
+                            String s2;
+                            if(s1.endsWith("/")){
+                                s2=s1.substring(0,s1.length()-1);
+                            }else s2=s1;
+                            String[] split = str.split("/");
+                            Optional<User> first;
+                            Integer exception=null;
+                            if(split.length==1){
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(split[0])).findFirst();
+                                    first= userList.stream().filter(u ->(u.getJobNumber()!=null&&u.getJobNumber().equals(split[0]))||(optional.isPresent()&&u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))).findFirst();
+                                }else {
+                                    first= userList.stream().filter(u -> u.getName().equals(split[0])||(u.getJobNumber()!=null&&u.getJobNumber().equals(split[0]))).findFirst();
+                                }
+                                exception=0;
+                            }else {
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(split[1])).findFirst();
+                                    first= userList.stream().filter(u ->(u.getJobNumber()!=null&&u.getJobNumber().equals(split[1]))||(optional.isPresent()&&u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))).findFirst();
+                                    exception=1;
+                                }else {
+                                    first= userList.stream().filter(u -> u.getName().equals(split[1])&&(u.getJobNumber()!=null&&u.getJobNumber().equals(split[1]))).findFirst();
+                                }
+                            }
+                            if (first.isPresent()) {
+                                User partMemb = first.get();
+//                                    System.out.println("参与人:"+partMemb.getName());
+                                if (!projectAuditorList.stream().anyMatch(partOne->partOne.getAuditorId().equals(partMemb.getId()))) {
+                                    projectAuditor.setAuditorId(partMemb.getId());
+                                    projectAuditor.setAuditorName(partMemb.getName());
+                                    projectAuditor.setProjectApprovalId(project.getId());
+                                    projectAuditorList.add(projectAuditor);
+                                }
+                            } else {
+                                switch (exception){
+                                    case 0:throw new Exception("["+split[0]+"]在系统中不存在");
+                                    case 1:throw new Exception("["+split[1]+"]在系统中不存在");
+                                }
+                            }
+                        }
+                    }
+                } else {
+                    ProjectApprovalAuditor projectAuditor=new ProjectApprovalAuditor();
+                    projectAuditor.setAuditorId(project.getInchargerId());
+                    projectAuditor.setAuditorName(project.getInchargerName());
+                    projectAuditor.setProjectApprovalId(project.getId());
+                    projectApprovalAuditorMapper.insert(projectAuditor);
+                }
+                if (projectAuditorList.size() > 0) {
+                    //批量保存
+                    List<ProjectApprovalAuditor> finalOldAuditorList = oldAuditorList;
+                    List<ProjectApprovalAuditor> addAuditorList = projectAuditorList.stream().filter(newP-> !finalOldAuditorList.stream().anyMatch(oldP->oldP.getAuditorId().equals(newP.getAuditorId()))).collect(Collectors.toList());
+                    if (addAuditorList.size() > 0) {
+                        projectApprovalAuditorService.saveBatch(addAuditorList);
+                    }
+                }
+            }
+            //msg.data = "成功导入"+importCount+"条数据。";
+            msg.data = MessageUtils.message("data.importSucRow",importCount);
+            if (existCodeList.size() > 0) {
+                String collect = existCodeList.stream().collect(Collectors.joining(","));
+                msg.data += MessageUtils.message("data.upSkip",existCodeList.size(),collect);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg exportData(String keyword, Integer searchField, String statuses, Integer category, Integer viewId) {
+        HttpRespMsg msg=new HttpRespMsg();
+        List<String> titleList=new ArrayList<>();
+        String[] arr=new String[]{"正常","紧急","重要","重要且紧急","低风险","中风险","高风险"};
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, companyId));
+        titleList.add("项目编号");
+        titleList.add("项目名称");
+        titleList.add("项目分类");
+        titleList.add("项目类型");
+        titleList.add("项目经理");
+        titleList.add("级别");
+        titleList.add("审核状态");
+        List<List<String>> dataList=new ArrayList<>();
+        dataList.add(titleList);
+        HttpRespMsg respMsg = listByPage(-1, -1, keyword, searchField, statuses, category, viewId, request);
+        Map<String, Object> msgData = (Map<String, Object>) respMsg.getData();
+        List<ProjectApproval> records = (List<ProjectApproval>) msgData.get("records");
+        for (ProjectApproval record : records) {
+            List<String> item=new ArrayList<>();
+            item.add(record.getProjectCode()==null?"":record.getProjectCode());
+            item.add(record.getProjectName());
+            item.add(record.getCategoryName());
+            item.add(record.getIsPublic()==0?"正式项目":"非项目");
+            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                item.add("$userName="+(record.getInchargerName()==null?"":record.getInchargerName())+"$");
+            }else {
+                item.add(record.getInchargerName()==null?"":record.getInchargerName());
+            }
+            item.add(arr[record.getLevel()-1]);
+            item.add(record.getStatus()==0?"待审核":record.getStatus()==1?"已通过":"已驳回");
+            dataList.add(item);
+        }
+        String title="立项导出_"+System.currentTimeMillis();
+        try {
+            return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,title,dataList,path);
         } catch (Exception e) {
             e.printStackTrace();
         }
-        return null;
+        return msg;
     }
 }

+ 6 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -12821,13 +12821,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 List<Map<String, Object>> mapList = resultList.stream().filter(r -> Integer.valueOf(String.valueOf(r.get("projectId"))).equals(project.getId())
                                         && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId())).collect(Collectors.toList());
                                 if(mapList!=null&&mapList.size()>0){
-                                    item.put("planHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("planHour")))).sum());
+                                    item.put("planHour",mapList.get(0).get("planHour"));
                                     item.put("realHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realHour")))).sum());
                                     item.put("realCost",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realCost")))).sum());
                                     item.put("overHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum());
                                     item.put("normalHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("normalHour")))).sum());
                                     double realHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("realHour")))).sum();
-                                    double planHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("planHour")))).sum();
+                                    double planHour =  Double.valueOf(String.valueOf( mapList.get(0).get("planHour"))).doubleValue();
                                     item.put("process",percentFormat.format(realHour/planHour));
                                 }else {
                                     item.put("planHour",0);
@@ -12868,13 +12868,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 List<Map<String, Object>> mapList = resultList.stream().filter(r -> Integer.valueOf(String.valueOf(r.get("projectId"))).equals(project.getId())
                                         && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId())).collect(Collectors.toList());
                                 if(mapList!=null&&mapList.size()>0){
-                                    item.put("planHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("planHour")))).sum());
+                                    item.put("planHour",mapList.get(0).get("planHour"));
                                     item.put("realHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realHour")))).sum());
                                     item.put("realCost",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realCost")))).sum());
                                     item.put("overHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum());
                                     item.put("normalHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("normalHour")))).sum());
                                     double realHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("realHour")))).sum();
-                                    double planHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("planHour")))).sum();
+                                    double planHour =  Double.valueOf(String.valueOf( mapList.get(0).get("planHour"))).doubleValue();
                                     item.put("process",percentFormat.format(realHour/planHour));
                                 }else {
                                     item.put("planHour",0);
@@ -12919,13 +12919,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 List<Map<String, Object>> mapList = resultList.stream().filter(r -> Integer.valueOf(String.valueOf(r.get("projectId"))).equals(project.getId())
                                         && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId())).collect(Collectors.toList());
                                 if(mapList!=null&&mapList.size()>0){
-                                    item.put("planHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("planHour")))).sum());
+                                    item.put("planHour",mapList.get(0).get("planHour"));
                                     item.put("realHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realHour")))).sum());
                                     item.put("realCost",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realCost")))).sum());
                                     item.put("overHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum());
                                     item.put("normalHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("normalHour")))).sum());
                                     double realHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("realHour")))).sum();
-                                    double planHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("planHour")))).sum();
+                                    double planHour =  Double.valueOf(String.valueOf( mapList.get(0).get("planHour"))).doubleValue();
                                     item.put("process",percentFormat.format(realHour/planHour));
                                 }else {
                                     item.put("planHour",0);

+ 3 - 15
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -1896,7 +1896,7 @@
     <select id="groupExpendProcessList" resultType="java.util.Map">
         SELECT p.project_name AS projectName,p.id AS projectId,tg.id AS groupId,d.department_name,d.department_id AS deptId,d.corpwx_deptid AS corpwxDeptId,tg.name AS groupName,
         IFNULL(r.realHour,0) AS realHour,IFNULL(r.realCost,0) AS realCost,IFNULL(r.normalHour,0) as normalHour,IFNULL(r.overHour,0) as overHour,
-        IFNULL(SUM(te.plan_hours),0) AS planHour
+        IFNULL(tg.man_day*8,0) AS planHour
         FROM task_executor te
         LEFT JOIN task t ON t.id=te.task_id
         LEFT JOIN user u ON te.executor_id=u.id
@@ -1904,25 +1904,13 @@
         LEFT JOIN project p ON p.id=tg.project_id
         LEFT JOIN department d ON d.department_id=u.department_id
         LEFT JOIN (
-        SELECT SUM(working_time) AS realHour,SUM(cost) AS realCost,(SUM(working_time)-SUM(overtime_hours)) AS normalHour,SUM(overtime_hours) AS overHour,group_id
-        FROM report  WHERE create_date BETWEEN #{startDate} AND #{endDate} AND state=1 AND project_id IS NOT NULL AND company_id=#{companyId} GROUP BY group_id) r ON r.group_id=tg.`id`
+        SELECT SUM(working_time) AS realHour,SUM(cost) AS realCost,(SUM(working_time)-SUM(overtime_hours)) AS normalHour,SUM(overtime_hours) AS overHour,group_id,dept_id
+        FROM report  WHERE create_date BETWEEN #{startDate} AND #{endDate} AND state=1 AND project_id IS NOT NULL AND company_id=#{companyId} GROUP BY group_id,dept_id) r ON r.group_id=tg.`id` and r.dept_id=u.department_id
         WHERE u.company_id=#{companyId}
         AND tg.name IN ('生产部电气','生产部车间','工程部现场安装施工','工程部配合调试','研发部工艺设计','研发部结构设计','研发部BIM设计','研发部电气设计','研发部工艺调试验收','研发部电气调试验收')
         <if test="userId!=null and userId!=''">
             and t.executor_id=#{userId}
         </if>
-<!--        <if test="list!=null and list.size()>0">-->
-<!--            and d.department_id in-->
-<!--            <foreach collection="list" open="(" close=")" item="item" separator=",">-->
-<!--                #{item}-->
-<!--            </foreach>-->
-<!--        </if>-->
-<!--        <if test="listSecond!=null and listSecond.size()>0">-->
-<!--            and d.department_id in-->
-<!--            <foreach collection="listSecond" open="(" close=")" item="item" separator=",">-->
-<!--                #{item}-->
-<!--            </foreach>-->
-<!--        </if>-->
         GROUP BY p.id,tg.id,d.department_id ORDER BY p.id,d.department_id
     </select>
 

BIN
fhKeeper/formulahousekeeper/management-platform/src/main/resources/upload/立项导入模板.xlsx


+ 95 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/projectApproval/projectApproval.vue

@@ -24,6 +24,8 @@
                 </el-form-item>
                 <el-form-item style="float:right;">
                     <el-link type="primary" :underline="false" @click="handleAdd(-1,null)">{{'新增'}}</el-link>
+                    <el-link type="primary" v-if="permissions.projectApprovalEdit||permissions.projectApprocalImport" style="margin-right:10px;" :underline="false" @click="importDialog=true">{{'导入'}}</el-link>
+                    <el-link type="primary" v-if="permissions.projectApprovalEdit||permissions.projectApprocalExport" style="margin-right:10px;" :underline="false" @click="exportData()">{{'导出'}}</el-link>
                 </el-form-item>
             </el-form>
         </el-col>
@@ -78,9 +80,9 @@
                         </el-table-column>
                         <el-table-column :label="$t('operation')" :width="300" align="left" fixed="right">
                             <template slot-scope="scope">
-                                <el-button size="mini" type="primary" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck)&&scope.row.status==2&&scope.row.canChecked==1" @click="handleAdd(scope.$index, scope.row)">{{'编辑'}}</el-button>
-                                <el-button size="mini" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status==0 &&scope.row.canChecked==1 "  @click="check(scope.row,1)">{{'通过'}}</el-button>
-                                <el-button size="mini" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status==0 &&scope.row.canChecked==1" @click="check(scope.row,2)">{{'驳回'}}</el-button>
+                                <el-button size="mini" type="primary" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck)&&scope.row.status!=1" @click="handleAdd(scope.$index, scope.row)">{{'编辑'}}</el-button>
+                                <el-button size="mini" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status==0"  @click="check(scope.row,1)">{{'通过'}}</el-button>
+                                <el-button size="mini" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status==0" @click="check(scope.row,2)">{{'驳回'}}</el-button>
                                 <el-button size="mini" v-if="(permissions.projectApprovalEdit ||permissions.projectApprovalCheck) && scope.row.status==1" @click="check(scope.row)">{{'撤销'}}</el-button>
                             </template>
                         </el-table-column>
@@ -327,6 +329,17 @@
                             <el-button type="primary" @click="projectApprovalDetailVisible = false" >{{'关闭'}}</el-button>
                         </div>
                     </el-dialog>
+                    <el-dialog :title="$t('other.Batchimportofworkinghours')" v-if="importDialog" :visible.sync="importDialog" customClass="customWidth" width="500px">
+                    <p>1. {{$t('other.download')}}
+                    <el-link type="primary" style="margin-left:5px;" :underline="false" :href="'./upload/立项导入模板.xlsx'" :download="'立项导入模板.xlsx'">{{'立项导入模板.xlsx'}}</el-link>
+                    </p>
+                    <p>2. {{$t('other.projectsAndPeopleInThetemplate')}}。</p>
+                    <p style="display: flex;justify-content: center;">
+                        <el-upload ref="upload"  action="#" :limit="1" :http-request="batchImportData" :show-file-list="false">
+                        <el-button type="primary" :underline="false" :loading="importingData">{{$t("other.startImporting")}}</el-button>
+                    </el-upload>
+                    </p>
+                    </el-dialog>
             </div>
         </div>
     </section>
@@ -396,6 +409,7 @@ return {
     tableHeight: 0,
     projectApprovalDetailVisible:false,
     projectApprocalDetail:{},
+    importDialog:false,
 }
 },
 computed: {},
@@ -668,6 +682,7 @@ methods: {
             this.participator=theData.participationApprovalList
             this.changeParticipator();
             this.getProjectBaseData(item.id);
+            console.log("===========",this.projectBaseCostData)
             this.getProjectCheckerData(item.id);
             });
         }
@@ -999,10 +1014,18 @@ methods: {
         }
     },
     getProjectBaseData(projectId) {
-        this.http.post('//project-approval-basecost/get',{projectId: projectId},
+        this.http.post('/project-approval-basecost/get',{projectId: projectId},
                 res => {
                     if (res.code == "ok") {
-                        this.projectBaseCostData = res.data;
+                        if(res.data.length>0){
+                            this.projectBaseCostData = res.data;
+                        }else{
+                            this.projectBaseCostData = [];
+                            for (var m=0;m<this.baseCostItemList.length; m++) {
+                                this.projectBaseCostData.push({baseId: this.baseCostItemList[m].id, baseName:this.baseCostItemList[m].name, baseAmount:0});
+                            }
+                        }
+                        
                     } else {
                         this.$message({
                             message: res.msg,
@@ -1188,7 +1211,74 @@ methods: {
             this.projectApprocalDetail=res.data
         }
         });
+    },
+    batchImportData(item) {
+    //首先判断文件类型
+    let str = item.file.name.split(".");
+    let format = str[str.length - 1];
+    if (format != "xls" && format != "xlsx") {
+        this.$message({
+            message: this.$t('other.PleaseselecttheXLSorXLSXfile'),
+            type: "error"
+        });
+    } else {
+        this.importingData = true;
+        let formData = new FormData();
+        formData.append("multipartFile", item.file);
+        formData.append("companyId", this.user.companyId)
+        this.http.uploadFile('/project-approval/importData', formData,
+        res => {
+            this.$refs.upload.clearFiles();
+            this.importingData = false;
+            if (res.code == "ok") {
+                //换成弹出框,以免有人等了半天回来啥也没看到
+                this.importResultMsg = "成功导入"+res.data+'立项数据'+(res.msg?res.msg:"");;
+                this.getList();
+                this.importDialog = false;
+            } else {
+                this.importResultMsg = this.$t('export.Importfailure')+":"+res.msg;
+            }
+        },
+        error => {
+            this.$refs.upload.clearFiles();
+            this.importingData = false;
+            this.$message({
+                message: error,
+                type: "error"
+            });
+        });
     }
+    },
+    exportData(){
+        let parameter = {
+            keyword:this.keyword,
+            searchField: this.searchField,
+            category:this.statusClf,
+            status: this.status,
+            viewId:this.idx
+        }
+        this.http.post("/project-approval/exportData", parameter,
+        res => {
+            if (res.code == "ok") {
+                const a = document.createElement("a"); // 创建a标签
+                a.setAttribute("download", "立项导出.xlsx"); // download属性
+                a.setAttribute("href", res.data); // href链接
+                a.click(); // 自执行点击事件
+                a.remove();
+            } else {
+                this.$message({
+                message: res.msg,
+                type: "error"
+                });
+            }
+        },
+        error => {
+            this.$message({
+                message: error,
+                type: "error"
+            });
+        });
+    },
 },
 }
 </script>