diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java index e45e1a2c0..43d7c2bac 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java @@ -98,8 +98,15 @@ public class DictAspect { if(!"java.util.LinkedHashMap".equals(name) && !"java.util.HashMap".equals(name) && !"java.lang.String".equals(name)){ List items = new ArrayList<>(); for (Object record : (List)((Result) result).getResult()) { - JSONObject item = getJsonObject(record,cut); - items.add(item); + if("java.util.ArrayList".equals(record.getClass().getName())){ + for (Object o : (List) record) { + JSONObject item = getJsonObject(o,cut); + items.add(item); + } + }else{ + JSONObject item = getJsonObject(record,cut); + items.add(item); + } } ((Result) result).setResult(items); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectRelatedPersonnelController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectRelatedPersonnelController.java index 2d4e90fec..b01a8aebc 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectRelatedPersonnelController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectRelatedPersonnelController.java @@ -9,13 +9,16 @@ import com.jero.modules.system.entity.SysUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -158,17 +161,16 @@ public class ProjectRelatedPersonnelController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response, - @RequestParam(name="projectId",required=true) String projectId, - @RequestParam(name="cut",required=true) String cut) { - return projectRelatedPersonnelService.importExcel(request, response, ProjectRelatedPersonnel.class,projectId,cut); + public Result importExcel(MultipartFile file, + @RequestParam(name="projectId",required=true) String projectId, + @RequestParam(name="cut",required=true) String cut) throws IOException, InvalidFormatException { + String message = projectRelatedPersonnelService.importExcel(file, ProjectRelatedPersonnel.class, projectId, cut); + return Result.OK(message); } /** diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectStatusBoardController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectStatusBoardController.java new file mode 100644 index 000000000..4ae4878e1 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectStatusBoardController.java @@ -0,0 +1,53 @@ +package com.jero.modules.project.controller; + +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.service.IProjectStatusBoardService; +import com.jero.modules.project.vo.TimeNodeVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * @description + * @date 2022/5/13 9:56 + * @auth zhn + */ +@Api(tags="项目状态看板") +@RestController +@RequestMapping("/project/ProjectStatusBoardController") +@Slf4j +public class ProjectStatusBoardController { + + @Autowired + private IProjectStatusBoardService iProjectStatusBoardService; + + /** + * 时间轴列表 + * + * @param projectLibraryBase + * @return + */ + @AutoLog(value = "时间轴列表") + @ApiOperation(value="时间轴列表", notes="时间轴列表") + @GetMapping(value = "/timelineList") + public Result timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req) { + List> result = iProjectStatusBoardService.timelineList(projectLibraryBase, req); + if(result==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(result); + } + + + + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskPlanningController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskPlanningController.java index 48d0b509a..c689e44d1 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskPlanningController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskPlanningController.java @@ -69,8 +69,8 @@ public class ProjectTaskPlanningController extends JeroController queryList(@RequestParam(name="projectId",required=true) String projectId) { - ProjectTaskPlanning projectTaskPlanning = projectTaskPlanningService.queryList(projectId); - return Result.OK(projectTaskPlanning); + List projectTaskPlanning = projectTaskPlanningService.queryList(projectId); + return Result.OK(projectTaskPlanning.get(0)); } /** @@ -140,11 +140,11 @@ public class ProjectTaskPlanningController extends JeroController queryByProjectId(@RequestParam(name="projectId",required=true) String projectId, @RequestParam(name="cut",required=true) String cut) { - List projectTaskPlanning = projectTaskPlanningService.queryByProjectId(projectId,cut); - if(projectTaskPlanning==null) { + List> result = projectTaskPlanningService.queryByProjectId(projectId,cut); + if(result.size() == 0) { return Result.error("未找到对应数据"); } - return Result.OK(projectTaskPlanning); + return Result.OK(result.get(0)); } /** diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectStatusBoardMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectStatusBoardMapper.java new file mode 100644 index 000000000..287d10015 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectStatusBoardMapper.java @@ -0,0 +1,9 @@ +package com.jero.modules.project.mapper; + +/** + * @description + * @date 2022/5/13 10:00 + * @auth zhn + */ +public interface ProjectStatusBoardMapper { +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectTaskPlanningMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectTaskPlanningMapper.java index 5bcc74c21..b9658b687 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectTaskPlanningMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/ProjectTaskPlanningMapper.java @@ -2,6 +2,7 @@ package com.jero.modules.project.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.jero.modules.project.entity.ProjectTaskPlanning; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @@ -13,7 +14,8 @@ import java.util.List; * @Version: V1.0 */ public interface ProjectTaskPlanningMapper extends BaseMapper { - @Select("SELECT * FROM project_task_planning where project_id=#{projectId}") - ProjectTaskPlanning getByProjectId(String projectId); + +// @Select("SELECT * FROM project_task_planning where project_id=#{projectId}") + List getByProjectId(@Param("projectId") String projectId); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectStatusBoardMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectStatusBoardMapper.xml new file mode 100644 index 000000000..f10e92cfc --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectStatusBoardMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectTaskPlanningMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectTaskPlanningMapper.xml index c5f5cd18d..a883441db 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectTaskPlanningMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/ProjectTaskPlanningMapper.xml @@ -12,4 +12,16 @@ - \ No newline at end of file + + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectRelatedPersonnelService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectRelatedPersonnelService.java index 450fbb3f0..b1961c559 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectRelatedPersonnelService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectRelatedPersonnelService.java @@ -1,12 +1,14 @@ package com.jero.modules.project.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.jero.common.api.vo.Result; import com.jero.modules.project.entity.ProjectRelatedPersonnel; import com.jero.modules.system.entity.SysUser; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -78,10 +80,10 @@ public interface IProjectRelatedPersonnelService extends IService importExcel(HttpServletRequest request, HttpServletResponse response, Class clazz, String projectId,String cut); + String importExcel(MultipartFile file, Class clazz, String projectId, String cut) throws IOException, InvalidFormatException; - List oppositeDisposeData(List records,String projectId,String cut); + String oppositeDisposeData(List records, String projectId, String cut); ProjectRelatedPersonnel queryByProjectIdAndDutyTerritory(String projectId, String dutyTerritory); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectStatusBoardService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectStatusBoardService.java new file mode 100644 index 000000000..660c0e001 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectStatusBoardService.java @@ -0,0 +1,17 @@ +package com.jero.modules.project.service; + +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.vo.TimeNodeVO; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * @description + * @date 2022/5/13 9:59 + * @auth zhn + */ +public interface IProjectStatusBoardService { + + List> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskPlanningService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskPlanningService.java index 8cc1ff17f..441d49700 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskPlanningService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskPlanningService.java @@ -52,12 +52,12 @@ public interface IProjectTaskPlanningService extends IService queryByProjectId(String projectId,String cut); + List> queryByProjectId(String projectId,String cut); /** * 列表查询 * * @return */ - ProjectTaskPlanning queryList(String projectId); + List queryList(String projectId); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/NcrTrackServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/NcrTrackServiceImpl.java index eda632bb0..b31df7887 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/NcrTrackServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/NcrTrackServiceImpl.java @@ -24,7 +24,6 @@ import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.enmus.ExcelType; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; @@ -175,24 +174,29 @@ public class NcrTrackServiceImpl extends ServiceImpl } //待办任务id if(trackVOList.size() != 0){ - List projectTaskInventoryIdList = trackVOList.stream().map(NcrTrackVO::getId).distinct().collect(Collectors.toList()); + List projectLawsInventoryIdList = trackVOList.stream().map(NcrTrackVO::getProjectLawsInventoryId).distinct().collect(Collectors.toList()); QueryWrapper taskDetailQueryWrapper = new QueryWrapper<>(); - taskDetailQueryWrapper.lambda().in(ProjectTaskInventoryDetailEO::getProjectTaskInventoryId,projectTaskInventoryIdList); + taskDetailQueryWrapper.lambda().in(ProjectTaskInventoryDetailEO::getProjectTaskInventoryId,projectLawsInventoryIdList); + //任务清单数据 List projectTaskInventoryDetailEOList = projectTaskInventoryDetailEOService.list(taskDetailQueryWrapper); for (NcrTrackVO trackVO : trackVOList) { - String projectTaskInventoryId = trackVO.getId(); - String prcType = trackVO.getPrcType(); - if(StringUtils.isNotBlank(projectTaskInventoryId) && StringUtils.isNotBlank(prcType)){ + String projectLawsInventoryId = trackVO.getProjectLawsInventoryId();//任务清单id + String prcType = trackVO.getPrcType();//流程类型 + if(StringUtils.isNotBlank(projectLawsInventoryId) && StringUtils.isNotBlank(prcType)){ List collect = projectTaskInventoryDetailEOList.stream() - .filter(e -> projectTaskInventoryId.equals(e.getProjectTaskInventoryId()) && prcType.equals(e.getFlowType())) + .filter(e -> projectLawsInventoryId.equals(e.getProjectTaskInventoryId()) && prcType.equals(e.getFlowType())) .collect(Collectors.toList()); if(collect.size() != 0){ - trackVO.setTaskId(collect.get(0).getTaskId()); + trackVO.setTaskId(collect.get(0).getTaskId());//待办任务id + trackVO.setStatus(collect.get(0).getStatus()); + trackVO.setProjectTaskInventoryDetailId(collect.get(0).getId()); + trackVO.setTaskDefinitionKey(collect.get(0).getTaskDefinitionKey()); } } } } + List trackVOListTemp = new ArrayList<>(); String idJson = ncrTrackVO.getNcrTrackVOList(); if(StringUtils.isNotBlank(idJson)){ diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectRelatedPersonnelServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectRelatedPersonnelServiceImpl.java index 655369505..4466cbb53 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectRelatedPersonnelServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectRelatedPersonnelServiceImpl.java @@ -1,14 +1,12 @@ package com.jero.modules.project.service.impl; -import cn.afterturn.easypoi.excel.ExcelImportUtil; -import cn.afterturn.easypoi.excel.entity.ImportParams; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.jero.common.api.vo.Result; import com.jero.common.constant.enums.CutEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; +import com.jero.modules.dummy.service.impl.DummyInventoryInfoEOServiceImpl; import com.jero.modules.enums.DictCodeEnum; import com.jero.modules.project.entity.ProjectRelatedPersonnel; import com.jero.modules.project.mapper.ProjectRelatedPersonnelMapper; @@ -27,17 +25,14 @@ import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.HorizontalAlignment; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -75,6 +70,9 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl importExcel(HttpServletRequest request, HttpServletResponse response, - Class clazz,String projectId,String cut) { - Result result=new Result<>(); - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - for (Map.Entry entity : fileMap.entrySet()) { - MultipartFile file = entity.getValue();// 获取上传文件对象 - ImportParams params = new ImportParams(); - params.setTitleRows(1); - params.setHeadRows(1); - params.setNeedSave(true); - try { - //接收导入数据 - List records = ExcelImportUtil.importExcel(file.getInputStream(), clazz, params); - if(CollectionUtils.isNotEmpty(records)) { - oppositeDisposeData(records,projectId,cut); + public String importExcel(MultipartFile file, + Class clazz, String projectId, String cut) throws IOException, InvalidFormatException { - //中英切换提示语 - if(CutEnum.CN.getValue().equals(cut)) { - result.success("文件导入成功!数据行数:" + records.size()); + String explainInfo= null; + String titleOne = ""; + + if(CutEnum.CN.getValue().equals(cut)){ + titleOne = "*责任领域,*法规工程师,*工程接口人,*认证工程师,备注"; + explainInfo = "填写说明\n" + + "1.导入数据从第三行开始\n" + + "2.所有带*号的字段必须填写\n"+ + "3.认证类型,认证级别,实施类别,交付物类型,发起人,责任人,字段是单选属性,必须和系统中的对应字段选项相匹配\n" + + "4.责任领域,字段是多选属性,必须和系统中的对应字段选项相匹配,填写多个时采用英文或中文逗号分割\n" + + "5.编号,子标题,WVTA ID,备注,填写文本内容\n" + + "6.交付物模板字段为文件属性,填写时需要在本文件同级目录下以标准号为名称建立文件夹,并在文件夹下放置文件,假设在AAA标准号下放置了B.docx,则应填写AAA/B.docx"; + }else{ + titleOne = "*Responsible Field,*Regulation Engineer,*Engineering Interface,*Homologation Engineer,Comments"; + explainInfo = "filling explanation\n" + + "1.import data starts at the third line\n" + + "2.all fields marked with * must be filled in\n"+ + "3.certification type,certification level,implementation category,type of deliverables,initiator,person liable,Fields are radio attributes that must match the corresponding field option in the system\n" + + "4.area of responsibility, field is a multi-select attribute and must match the corresponding field in the system. If multiple fields are filled in, separate them by commas (,)\n" + + "5.serial number,subtitle,WVTA ID,remarks,Fill in the text\n" + + "6.deliverable template,When filling in the field, you need to create a folder in the directory of the same level as the file with the name of the standard number and place the file in the folder. If b. diocx is stored under the AAA standard number, enter AAA/B. diocx"; + } + List titleOneList = Arrays.asList(titleOne.split(",")); + + + // 获取文件名 + String fileName = file.getOriginalFilename(); + // 获取文件后缀 + String prefix = fileName.substring(fileName.lastIndexOf(".")); + File excelFile = File.createTempFile(fileName, prefix); + file.transferTo(excelFile); + + Workbook workbook = WorkbookFactory.create(excelFile); + List list = new ArrayList<>(); + if (workbook != null) { + Sheet sheet = workbook.getSheetAt(0); + if (sheet != null) { + int rowNos = sheet.getPhysicalNumberOfRows();// 得到excel的总记录条数 + + for (int i = 0; i < rowNos ; i++) { + Row row = sheet.getRow(i); + Row headerRow = sheet.getRow(i); + boolean isBlank = dummyInventoryInfoEOService.isRowEmpty(row); + + if (row != null && !isBlank) { + int columNos = headerRow.getLastCellNum();// 表头总共的列数 + if (columNos == 5) {//列数对 + for (int j = 0; j < columNos; j++) { + Cell cell = row.getCell(j,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK); + if (i == 0){ + if (i == 0 && !cell.getStringCellValue().equals(titleOneList.get(j))) {//检查表头 + if (CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("读取失败.请检查第 " + (i+1) + " 行表头,请严格按照模板文件导入数据"); + } else { + throw new JeroBootException("The data fails to be read.Please check header in line " + (i+1) + " .Import data strictly according to the template file."); + } + } + } + } + }else if((i!=1 && columNos != 5) || (i==2 && columNos !=1)){ + if (CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("导入的列数不对,请检查"); + } else { + throw new JeroBootException("The number of imported columns is wrong. Please check!"); + } + } }else{ - result.success("File import succeeded! Number of data rows:" + records.size()); + if (CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("导入的数据不能为空,请检查"); + } else { + throw new JeroBootException("The imported data of cannot be empty. Please check!"); + } } - }else{ - //中英切换提示语 - if(CutEnum.CN.getValue().equals(cut)) { - result.error500("数据为空,请检查"); - }else { - result.error500("The data is empty, please check!"); + if (i == 1) {//校验填写说明 + row = sheet.getRow(i); + int columNos = row.getLastCellNum(); + if(columNos != 1 /*|| (!row.getCell(0).getStringCellValue().equals(explainInfo))*/){ + if (CutEnum.CN.getValue().equals(cut)) { + throw new JeroBootException("填写说明列数不对,请严格按照模板文件导入数据"); + }else{ + throw new JeroBootException("The number of columns of filling explanation is wrong. Please import data strictly according to the template file."); + } + } + + } + if (i > 1) {//读取数据 + //获取每一行数据 + row = sheet.getRow(i); + ProjectRelatedPersonnel projectRelatedPersonnel = new ProjectRelatedPersonnel(); + + //责任领域不能为空 + String dutyTerritory = row.getCell(0).toString(); + if(StringUtils.isNotBlank(dutyTerritory)) { + projectRelatedPersonnel.setDutyTerritory(row.getCell(0).toString()); + }else{//责任领域不能为空,报错 + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请填写责任领域,带*的为必填.请检查第 "+ (i+1) + "行"); + }else{ + throw new JeroBootException("Please fill in the Responsible Field and those marked with * are required. .Please check line" + (i+1)); + } + } + + String lawEngineerName = row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString(); + String engineeringInterfacePersonName = row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString(); + String certificationEngineerName = row.getCell(3,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString(); + + //除了责任领域全有值->可以 + if(StringUtils.isNotBlank(lawEngineerName) && StringUtils.isNotBlank(engineeringInterfacePersonName) && StringUtils.isNotBlank(certificationEngineerName)) { + projectRelatedPersonnel.setLawEngineerName(lawEngineerName); + projectRelatedPersonnel.setEngineeringInterfacePersonName(engineeringInterfacePersonName); + projectRelatedPersonnel.setCertificationEngineerName(certificationEngineerName); + }else if(StringUtils.isBlank(lawEngineerName) && StringUtils.isBlank(engineeringInterfacePersonName) && StringUtils.isBlank(certificationEngineerName)) { + //除了责任领域,带*的全为空->可以 + projectRelatedPersonnel.setLawEngineerName(""); + projectRelatedPersonnel.setEngineeringInterfacePersonName(""); + projectRelatedPersonnel.setCertificationEngineerName(""); + }else {//除了责任领域,备注,有一个为空都报错 + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("请填写必填字段内容,带*的为必填.请检查第 "+ (i+1) + "行"); + }else{ + throw new JeroBootException("Please fill in the required fields marked with * .Please check line" + (i+1)); + } + } + + String remark = row.getCell(4, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString(); + if(StringUtils.isNotEmpty(row.getCell(4).toString())) { + projectRelatedPersonnel.setRemark(remark); + } + + list.add(projectRelatedPersonnel); } } - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500(e.getMessage()); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } + } } - return result; + workbook.close(); + //把数据翻译成id,并保存 + String message = oppositeDisposeData(list, projectId, cut); + return message; } /** - * 把导入的数据翻译成对应的id,并校验 + * 把导入的数据翻译成对应的id,校验,不存 * 若除责任领域外的导入数据不能为空 * @return */ @Override - public List oppositeDisposeData(List records,String projectId,String cut) { - int row=1; - + public String oppositeDisposeData(List records, String projectId, String cut) { + int row=3; + StringBuilder message = new StringBuilder(); for (ProjectRelatedPersonnel projectRelatedPersonnel:records) { //查标签内容里的责任领域数据 - List sysDictItemValueList = sysDictItemMapper.selectItemValueByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue()); - if(!sysDictItemValueList.contains(projectRelatedPersonnel.getDutyTerritory())){ - if (CutEnum.CN.getValue().equals(cut)) { - throw new JeroBootException("该责任领域不存在.请检查第" + row + "行"); - }else{ - throw new JeroBootException("The area of responsibility does not exist. Please check line " + row); - } + List sysDictItemList = sysDictItemMapper.selectItemsByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue()); + List dutyTerritoryValueList = new ArrayList<>(); + //按照责任领域名,查value + if (CutEnum.CN.getValue().equals(cut)) { + dutyTerritoryValueList = sysDictItemList.stream().filter(f -> f.getItemText().equals(projectRelatedPersonnel.getDutyTerritory())).map(e -> e.getItemValue()).collect(Collectors.toList()); + } else { + dutyTerritoryValueList = sysDictItemList.stream().filter(f -> f.getEnName().equals(projectRelatedPersonnel.getDutyTerritory())).map(e -> e.getItemValue()).collect(Collectors.toList()); } + //责任领域 if(!projectRelatedPersonnel.getDutyTerritory().isEmpty()) { //导入的一条数据,只能有一个责任领域 if (projectRelatedPersonnel.getDutyTerritory().contains(",")) { //中英切换提示语 if (CutEnum.CN.getValue().equals(cut)) { - throw new JeroBootException("导入的责任领域只能填一个.请检查第" + row + "行"); + message.append("导入的责任领域只能填一个.请检查第" + row + "行. "); } else { - throw new JeroBootException("Only one duty territory can be filled in for import. Please check line " + row); + message.append("Only one duty territory can be filled in for import. Please check line " + row); } } else { - String dictItemValue = sysDictService.queryDictItemByValue(DictCodeEnum.DUTY_TERRITORY.getValue(), projectRelatedPersonnel.getDutyTerritory(), cut); - - if (StringUtils.isBlank(dictItemValue)) { + if (CollectionUtils.isEmpty(dutyTerritoryValueList)) {//导入的责任领域不对 //中英切换提示语 if (CutEnum.CN.getValue().equals(cut)) { - throw new JeroBootException("导入的责任领域不存在.请检查第" + row + "行"); + message.append("导入的责任领域不存在.请检查第" + row + "行"); } else { - throw new JeroBootException("The imported duty territory does not exist. Please check line " + row); + message.append("The imported duty territory does not exist. Please check line " + row); } }else { - + projectRelatedPersonnel.setDutyTerritory(dutyTerritoryValueList.get(0)); QueryWrapper queryWrapper = new QueryWrapper<>(); - List idList = list(queryWrapper.select("id").eq("duty_territory", projectRelatedPersonnel.getDutyTerritory()).eq("project_id",projectId)); + List idList = list(queryWrapper.select("id").eq("duty_territory", dutyTerritoryValueList.get(0)).eq("project_id",projectId)); projectRelatedPersonnel.setId(idList.get(0).getId()); } } }else{ //中英切换提示语 if(CutEnum.CN.getValue().equals(cut)) { - throw new JeroBootException("导入的责任领域不能为空.请检查第" + row + "行"); + message.append("导入的责任领域不能为空.请检查第" + row + "行"); }else{ - throw new JeroBootException("The imported duty territory cannot be empty.Please check line " + row ); + message.append("The imported duty territory cannot be empty.Please check line " + row ); } } @@ -755,9 +859,9 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl records = projectRelatedPersonnelMapper.queryById(projectRelatedPersonnel.getId()); - for (ProjectRelatedPersonnel data : records) { - //法规工程师 - String lawString = projectRelatedPersonnel.getLawEngineer(); - //去重 - if(StringUtils.isNotBlank(lawString)) { - List lawList = Arrays.asList(lawString.split(",")); - String lawDistinct = lawList.stream().distinct().collect(Collectors.joining(",")); - projectRelatedPersonnel.setLawEngineer(lawDistinct); - } - - //工程接口人 - String interfaceString = projectRelatedPersonnel.getEngineeringInterfacePerson(); - //去重 - if(StringUtils.isNotBlank(interfaceString)) { - List interfaceList = Arrays.asList(interfaceString.split(",")); - String interfaceDistinct = interfaceList.stream().distinct().collect(Collectors.joining(",")); - projectRelatedPersonnel.setEngineeringInterfacePerson(interfaceDistinct); - } - -// 工程接口人 - String certificationString = projectRelatedPersonnel.getCertificationEngineer(); - //去重 - if(StringUtils.isNotBlank(certificationString)) { - List certificationList = Arrays.asList(certificationString.split(",")); - String certificationDistinct = certificationList.stream().distinct().collect(Collectors.joining(",")); - projectRelatedPersonnel.setCertificationEngineer(certificationDistinct); - } - - if (StringUtils.isBlank(data.getRemark())) {//数据库里备注是空的 - projectRelatedPersonnel.setRemark(projectRelatedPersonnel.getRemark()); - } else { - projectRelatedPersonnel.setRemark(""); - } - - Date now = new Date(); - projectRelatedPersonnel.setUpdateTime(now); - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - projectRelatedPersonnel.setUpdateBy(sysUser.getUsername()); - updateById(projectRelatedPersonnel); - } - } +// //导入-更新数据 +// private void updateDataById(List records) { +//// List records = projectRelatedPersonnelMapper.queryById(projectRelatedPersonnel.getId()); +// for (ProjectRelatedPersonnel projectRelatedPersonnel : records) { +//// //法规工程师 +//// String lawString = projectRelatedPersonnel.getLawEngineer(); +//// //去重 +//// if(StringUtils.isNotBlank(lawString)) { +//// List lawList = Arrays.asList(lawString.split(",")); +//// String lawDistinct = lawList.stream().distinct().collect(Collectors.joining(",")); +//// projectRelatedPersonnel.setLawEngineer(lawDistinct); +//// } +//// +//// //工程接口人 +//// String interfaceString = projectRelatedPersonnel.getEngineeringInterfacePerson(); +//// //去重 +//// if(StringUtils.isNotBlank(interfaceString)) { +//// List interfaceList = Arrays.asList(interfaceString.split(",")); +//// String interfaceDistinct = interfaceList.stream().distinct().collect(Collectors.joining(",")); +//// projectRelatedPersonnel.setEngineeringInterfacePerson(interfaceDistinct); +//// } +//// +////// 工程接口人 +//// String certificationString = projectRelatedPersonnel.getCertificationEngineer(); +//// //去重 +//// if(StringUtils.isNotBlank(certificationString)) { +//// List certificationList = Arrays.asList(certificationString.split(",")); +//// String certificationDistinct = certificationList.stream().distinct().collect(Collectors.joining(",")); +//// projectRelatedPersonnel.setCertificationEngineer(certificationDistinct); +//// } +//// +//// if (StringUtils.isBlank(data.getRemark())) {//数据库里备注是空的 +//// projectRelatedPersonnel.setRemark(projectRelatedPersonnel.getRemark()); +//// } else { +//// projectRelatedPersonnel.setRemark(""); +//// } +// +// Date now = new Date(); +// projectRelatedPersonnel.setUpdateTime(now); +// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); +// projectRelatedPersonnel.setUpdateBy(sysUser.getUsername()); +// updateById(projectRelatedPersonnel); +// } +// } @Override public List queryCertificationEngineer(String projectId) { diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java new file mode 100644 index 000000000..1f8aafef7 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java @@ -0,0 +1,49 @@ +package com.jero.modules.project.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.dummy.entity.DummyInventoryBaseEO; +import com.jero.modules.project.entity.ProjectLibraryBase; +import com.jero.modules.project.service.IProjectStatusBoardService; +import com.jero.modules.project.vo.TimeNodeVO; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @description + * @date 2022/5/13 9:59 + * @auth zhn + */ +@Service +public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService { + @Autowired + private ProjectTaskPlanningServiceImpl projectTaskPlanningService; + @Autowired + private ProjectLibraryBaseServiceImpl projectLibraryBaseService; + + + @Override + public List> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req) { + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(projectLibraryBase, req.getParameterMap()); + + //项目库信息 + List projectLibraryBaseList = projectLibraryBaseService.list(queryWrapper); + List> result = new ArrayList<>(); + if(projectLibraryBaseList.size() != 0){ + //项目库id + List projectLibraryBaseIdList = projectLibraryBaseList.stream().map(ProjectLibraryBase::getId).collect(Collectors.toList()); + + //时间轴数据 + result = projectTaskPlanningService.queryByProjectId(StringUtils.join(projectLibraryBaseIdList, ","), projectLibraryBase.getCut()); + } + return result; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskPlanningServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskPlanningServiceImpl.java index 4b3ecf542..16ecab092 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskPlanningServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskPlanningServiceImpl.java @@ -10,6 +10,7 @@ import com.jero.modules.project.enums.ProjectTaskPlanningNameEnum; import com.jero.modules.project.mapper.ProjectTaskPlanningMapper; import com.jero.modules.project.service.IProjectTaskPlanningService; import com.jero.modules.project.vo.TimeNodeVO; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -90,9 +91,10 @@ public class ProjectTaskPlanningServiceImpl extends ServiceImpl queryByProjectId(String projectId,String cut) { - ProjectTaskPlanning projectTaskPlanning = projectTaskPlanningMapper.getByProjectId(projectId); - List timeNodeVOS = new ArrayList<>(); + public List> queryByProjectId(String projectId,String cut) { + List projectTaskPlanningList = projectTaskPlanningMapper.getByProjectId(projectId); + List> result = new ArrayList<>(); + TimeNodeVO listConfirmationVO=null; Date now=new Date(); @@ -104,156 +106,164 @@ public class ProjectTaskPlanningServiceImpl extends ServiceImpl timeNodeVOS = new ArrayList<>(); + if(ObjectUtils.isNotEmpty(projectTaskPlanning.getListConfirmation())) { + listConfirmationVO = new TimeNodeVO(); - if(StringUtils.isNotBlank(projectTaskPlanning.getListConfirmation().toString())) { - listConfirmationVO = new TimeNodeVO(); + if(CutEnum.CN.getValue().equals(cut)){ + listConfirmationVO.setName(ProjectTaskPlanningNameEnum.LIST_CONFIRMATION.getName()); + }else{ + listConfirmationVO.setName(ProjectTaskPlanningNameEnum.LIST_CONFIRMATION.getValue()); + } - if(CutEnum.CN.getValue().equals(cut)){ - listConfirmationVO.setName(ProjectTaskPlanningNameEnum.LIST_CONFIRMATION.getName()); - }else{ - listConfirmationVO.setName(ProjectTaskPlanningNameEnum.LIST_CONFIRMATION.getValue()); + listConfirmationVO.setTime(projectTaskPlanning.getListConfirmation()); + if(projectTaskPlanning.getListConfirmation().after(trueNow)){ + listConfirmationVO.setStatus(PlanStatusEnum.LESS_THAN_TIME.getValue()); + }else if(projectTaskPlanning.getListConfirmation().before(trueNow)){ + listConfirmationVO.setStatus(PlanStatusEnum.OUT_OF_DATE.getValue()); + }else{ + listConfirmationVO.setStatus(PlanStatusEnum.ON_GOING.getValue()); + } + timeNodeVOS.add(listConfirmationVO); } - listConfirmationVO.setTime(projectTaskPlanning.getListConfirmation()); - if(projectTaskPlanning.getListConfirmation().after(trueNow)){ - listConfirmationVO.setStatus(PlanStatusEnum.LESS_THAN_TIME.getValue()); - }else if(projectTaskPlanning.getListConfirmation().before(trueNow)){ - listConfirmationVO.setStatus(PlanStatusEnum.OUT_OF_DATE.getValue()); - }else{ - listConfirmationVO.setStatus(PlanStatusEnum.ON_GOING.getValue()); + if(ObjectUtils.isNotEmpty(projectTaskPlanning.getLegalTaskConfirmation())) { + TimeNodeVO legalTaskConfirmationVO = new TimeNodeVO(); + + if(CutEnum.CN.getValue().equals(cut)){ + legalTaskConfirmationVO.setName(ProjectTaskPlanningNameEnum.LEGAL_TASK_CONFIRMATION.getName()); + }else{ + legalTaskConfirmationVO.setName(ProjectTaskPlanningNameEnum.LEGAL_TASK_CONFIRMATION.getValue()); + } + + legalTaskConfirmationVO.setTime(projectTaskPlanning.getLegalTaskConfirmation()); + if(projectTaskPlanning.getLegalTaskConfirmation().after(trueNow)){ + legalTaskConfirmationVO.setStatus(PlanStatusEnum.LESS_THAN_TIME.getValue()); + }else if(projectTaskPlanning.getLegalTaskConfirmation().before(trueNow)){ + legalTaskConfirmationVO.setStatus(PlanStatusEnum.OUT_OF_DATE.getValue()); + }else { + legalTaskConfirmationVO.setStatus(PlanStatusEnum.ON_GOING.getValue()); + } + timeNodeVOS.add(legalTaskConfirmationVO); + } + + if(ObjectUtils.isNotEmpty(projectTaskPlanning.getDesignDeadline())) { + TimeNodeVO designDeadlineVO = new TimeNodeVO(); + + if(CutEnum.CN.getValue().equals(cut)){ + designDeadlineVO.setName(ProjectTaskPlanningNameEnum.DESIGN_DEADLINE.getName()); + }else{ + designDeadlineVO.setName(ProjectTaskPlanningNameEnum.DESIGN_DEADLINE.getValue()); + } + + designDeadlineVO.setTime(projectTaskPlanning.getDesignDeadline()); + if(projectTaskPlanning.getDesignDeadline().after(trueNow)){ + designDeadlineVO.setStatus(PlanStatusEnum.LESS_THAN_TIME.getValue()); + }else if(projectTaskPlanning.getDesignDeadline().before(trueNow)){ + designDeadlineVO.setStatus(PlanStatusEnum.OUT_OF_DATE.getValue()); + }else{ + designDeadlineVO.setStatus(PlanStatusEnum.ON_GOING.getValue()); + } + timeNodeVOS.add(designDeadlineVO); + } + + if(ObjectUtils.isNotEmpty(projectTaskPlanning.getPrehomoDeadline())) { + TimeNodeVO prehomoDeadlineVO = new TimeNodeVO(); + + if(CutEnum.CN.getValue().equals(cut)){ + prehomoDeadlineVO.setName(ProjectTaskPlanningNameEnum.PREHOMO_DEADLINE.getName()); + }else{ + prehomoDeadlineVO.setName(ProjectTaskPlanningNameEnum.PREHOMO_DEADLINE.getValue()); + } + + prehomoDeadlineVO.setTime(projectTaskPlanning.getPrehomoDeadline()); + if(projectTaskPlanning.getPrehomoDeadline().after(trueNow)){ + prehomoDeadlineVO.setStatus(PlanStatusEnum.LESS_THAN_TIME.getValue()); + }else if(projectTaskPlanning.getPrehomoDeadline().before(trueNow)){ + prehomoDeadlineVO.setStatus(PlanStatusEnum.OUT_OF_DATE.getValue()); + }else{ + prehomoDeadlineVO.setStatus(PlanStatusEnum.ON_GOING.getValue()); + } + timeNodeVOS.add(prehomoDeadlineVO); + } + + if(ObjectUtils.isNotEmpty(projectTaskPlanning.getAttestationStartTime())) { + TimeNodeVO attestationStartTimeVO = new TimeNodeVO(); + + if(CutEnum.CN.getValue().equals(cut)){ + attestationStartTimeVO.setName(ProjectTaskPlanningNameEnum.ATTESTATION_START_TIME.getName()); + }else{ + attestationStartTimeVO.setName(ProjectTaskPlanningNameEnum.ATTESTATION_START_TIME.getValue()); + } + + attestationStartTimeVO.setTime(projectTaskPlanning.getAttestationStartTime()); + if(projectTaskPlanning.getAttestationStartTime().after(trueNow)){ + attestationStartTimeVO.setStatus(PlanStatusEnum.LESS_THAN_TIME.getValue()); + }else if(projectTaskPlanning.getAttestationStartTime().before(trueNow)){ + attestationStartTimeVO.setStatus(PlanStatusEnum.OUT_OF_DATE.getValue()); + }else{ + attestationStartTimeVO.setStatus(PlanStatusEnum.ON_GOING.getValue()); + } + timeNodeVOS.add(attestationStartTimeVO); + } + if(ObjectUtils.isNotEmpty(projectTaskPlanning.getAttestationEndTime())) { + TimeNodeVO attestationEndTimeVO = new TimeNodeVO(); + + if(CutEnum.CN.getValue().equals(cut)){ + attestationEndTimeVO.setName(ProjectTaskPlanningNameEnum.ATTESTATION_END_TIME.getName()); + }else{ + attestationEndTimeVO.setName(ProjectTaskPlanningNameEnum.ATTESTATION_END_TIME.getValue()); + } + + attestationEndTimeVO.setTime(projectTaskPlanning.getAttestationEndTime()); + if(projectTaskPlanning.getAttestationEndTime().after(trueNow)){ + attestationEndTimeVO.setStatus(PlanStatusEnum.LESS_THAN_TIME.getValue()); + }else if(projectTaskPlanning.getAttestationEndTime().before(trueNow)){ + attestationEndTimeVO.setStatus(PlanStatusEnum.OUT_OF_DATE.getValue()); + }else{ + attestationEndTimeVO.setStatus(PlanStatusEnum.ON_GOING.getValue()); + } + timeNodeVOS.add(attestationEndTimeVO); + } + + if(ObjectUtils.isNotEmpty(projectTaskPlanning.getVerifyDeadline())) { + TimeNodeVO verifyDeadlineVO = new TimeNodeVO(); + + if(CutEnum.CN.getValue().equals(cut)){ + verifyDeadlineVO.setName(ProjectTaskPlanningNameEnum.VERIFY_DEADLINE.getName()); + }else{ + verifyDeadlineVO.setName(ProjectTaskPlanningNameEnum.VERIFY_DEADLINE.getValue()); + } + + verifyDeadlineVO.setTime(projectTaskPlanning.getVerifyDeadline()); + if(projectTaskPlanning.getVerifyDeadline().after(trueNow)){ + verifyDeadlineVO.setStatus(PlanStatusEnum.LESS_THAN_TIME.getValue()); + }else if(projectTaskPlanning.getVerifyDeadline().before(trueNow)){ + verifyDeadlineVO.setStatus(PlanStatusEnum.OUT_OF_DATE.getValue()); + }else{ + verifyDeadlineVO.setStatus(PlanStatusEnum.ON_GOING.getValue()); + } + timeNodeVOS.add(verifyDeadlineVO); + } + // 排序 + Collections.sort(timeNodeVOS, listConfirmationVO); + //设置在已过时,和未发生之间的数据的状态为进行中 + for(int i=0;i queryList(String projectId) { + List projectTaskPlanning = projectTaskPlanningMapper.getByProjectId(projectId); return projectTaskPlanning; } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVO.java index 16338d3a5..6b463b8f0 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVO.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVO.java @@ -129,6 +129,12 @@ public class NcrTrackVO implements Serializable { private String prcId; //流程类型 private String prcType; + //状态:待办 、已办 + private String status; + //任务清单详情id + private String projectTaskInventoryDetailId; + //任务节点定义key + private String taskDefinitionKey; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/ProjectStatusBoardVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/ProjectStatusBoardVO.java new file mode 100644 index 000000000..ebb9ebb1f --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/ProjectStatusBoardVO.java @@ -0,0 +1,13 @@ +package com.jero.modules.project.vo; + +/** + * @description + * @date 2022/5/13 10:04 + * @auth zhn + */ +public class ProjectStatusBoardVO { + //项目名称 + + + //目标市场 +} diff --git a/jero-web/src/views/parameter/parameterlist/components/addModel.vue b/jero-web/src/views/parameter/parameterlist/components/addModel.vue index 82b6f9a8e..793f400d1 100644 --- a/jero-web/src/views/parameter/parameterlist/components/addModel.vue +++ b/jero-web/src/views/parameter/parameterlist/components/addModel.vue @@ -122,7 +122,9 @@ :title="$t('ParameterDescription')">{{$t('ParameterDescription')}} - @@ -168,7 +170,8 @@ - + +
{{$t('controlVerification')}} @@ -185,7 +188,8 @@
- + +
@@ -194,15 +198,18 @@ :title="$t('controlAlternatives')">{{$t('controlAlternatives')}}
-
- + +
@@ -329,11 +336,12 @@ export default { rules: { nioNumber:[ { required: true, message: this.$t('PleaseEnter')+this.$t('NiONumber'), trigger: 'change' }, - // { - // pattern: /(?!^\d+$)(?!^[a-zA-Z]+$)[0-9a-zA-Z]{1,15}/, - // message: this.$t('onlyThree'), - // trigger: 'change' - // } + { min:1, max: 15, message: this.$t('cantExeed')+'15'+this.$t('characters'), trigger: 'blur' }, + { + pattern: /^[0-9a-zA-Z-]{1,}$/, + message: this.$t('onlyThree'), + trigger: 'change' + } ], isMust: [ { required: true, message: this.$t('pleaseSelect')+this.$t('Required'), trigger: 'change' }, @@ -362,6 +370,11 @@ export default { { min:1, max: 500, message: this.$t('cantExeed')+'500'+this.$t('characters'), trigger: 'blur' }, ], }, + rulesItem: { + paramsNumber: [ + { required: true, message: this.$t('PleaseEnter')+this.$t('standard'), trigger: 'change' } + ] + }, disabled: false, projectNameList: [], title: '', @@ -398,8 +411,6 @@ export default { }, Onchangelabel(val) { let _tt = [] - console.log(val,'val,,,,') - // this.formInline.certCategoryParamsInfoEOList = [] val.forEach((item) => { _tt.push({ textVal: item.text, // tab @@ -439,6 +450,7 @@ export default { this.visible = true this.title = '新增' this.formInline = {} + this.formInline.isMust = '0' }, editModel(value) { this.visible = true @@ -446,11 +458,6 @@ export default { this.$nextTick(() => { this.formInline = value }) - // if(value.certCategoryParamsInfoEOList.length > 0 ) { - // this.contentList = value.certCategoryParamsInfoEOList - // } - console.log(this.contentList,'this.contentList') - console.log(value.certCategoryParamsInfoEOList,'lllll') }, handleCancel() { this.visible = false @@ -518,7 +525,9 @@ export default { .formAdd .ant-form-item-label { width: 130px; } - +/deep/.add-input{ + min-height: 135px!important; +} .formAdd .ant-form-item-control-wrapper { display: inline-block; width: calc(100% - 130px); diff --git a/jero-web/src/views/processCenter/processForm/handshakeProcess/index.vue b/jero-web/src/views/processCenter/processForm/handshakeProcess/index.vue index 32b50142d..8ec29c682 100644 --- a/jero-web/src/views/processCenter/processForm/handshakeProcess/index.vue +++ b/jero-web/src/views/processCenter/processForm/handshakeProcess/index.vue @@ -51,6 +51,7 @@ import circulationHistory from '../../components/circulationHistory' import { getAction, postAction, deleteAction, downloadFile } from '@/api/manage' import { mapGetters } from 'vuex' + import moment from 'moment' export default { name: 'handshakeProcess', @@ -229,11 +230,56 @@ if (res.success) { this.$message.success(this.$t('OperationSuccessful')) this.loading = false + if (value.flag == 0) { + if (this.queryProject.verifyDeliverableType) { + this.startProcessDesign(this.queryBy, 2) + } + if (this.queryProject.prehomoDeliverableType) { + this.startProcessDesign(this.queryBy, 3) + } + if (this.queryProject.designDeliverableType) { + this.startProcessDesign(this.queryBy, 4) + } + } else { + this.$router.push({ + path: '/ProcessCenter' + }) + } + } else { + this.loading = false + this.$message.warning(this.$t('operationFailed')) + } + }) + }, + startProcessDesign(value, num) { + let query = { + type: num, + msg: JSON.stringify(value).replace(/\"/g, '\'') + } + postAction('/workFlow/startProcess', query).then((res) => { + if (res.success) { + this.completeTaskDesign(value, res.result) + } + }) + }, + + completeTaskDesign(value, taskId) { + value.reviewResult = 'launch' + let operatorTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss') + value.operatorTime = operatorTime + let query = { + userid: this.userInfo().id, + taskId: taskId, + json: JSON.stringify(value).replace(/\"/g, '\'') + } + postAction('/workFlow/completeTask', query).then((res) => { + if (res.success) { + this.visible = false + this.$message.success(this.$t('OperationSuccessful')) this.$router.push({ path: '/ProcessCenter' }) } else { - this.loading = false this.$message.warning(this.$t('operationFailed')) } }) diff --git a/jero-web/src/views/processCenter/processForm/taskListProcess/index.vue b/jero-web/src/views/processCenter/processForm/taskListProcess/index.vue index 6508b8c0f..5deabac2a 100644 --- a/jero-web/src/views/processCenter/processForm/taskListProcess/index.vue +++ b/jero-web/src/views/processCenter/processForm/taskListProcess/index.vue @@ -270,7 +270,7 @@ this.edit() this.$router.push({ path: '/ProjectDetails', - query: this.$route.query.primaryKeyId + query: this.$route.query }) } else { this.loading = false diff --git a/jero-web/src/views/projectManagement/components/TaskParameterCollection.vue b/jero-web/src/views/projectManagement/components/TaskParameterCollection.vue index ec75a13e5..0f42d2479 100644 --- a/jero-web/src/views/projectManagement/components/TaskParameterCollection.vue +++ b/jero-web/src/views/projectManagement/components/TaskParameterCollection.vue @@ -284,6 +284,7 @@ }, getlist() { let query = { + projectId: this.$route.query.id, pageSize: this.pageSize, pageNo: this.pageNo, ...this.queryParam diff --git a/jero-web/src/views/projectManagement/components/listOfRegulations.vue b/jero-web/src/views/projectManagement/components/listOfRegulations.vue index ef69b9cca..af94e41c7 100644 --- a/jero-web/src/views/projectManagement/components/listOfRegulations.vue +++ b/jero-web/src/views/projectManagement/components/listOfRegulations.vue @@ -146,7 +146,7 @@ {{ $t('deleteLib') }} - 发起 + {{ text && text.length > 10 ? text.slice(0, 9) + '...' : text }} diff --git a/jero-web/src/views/projectManagement/components/nonConformance.vue b/jero-web/src/views/projectManagement/components/nonConformance.vue index 540f23467..d049141bb 100644 --- a/jero-web/src/views/projectManagement/components/nonConformance.vue +++ b/jero-web/src/views/projectManagement/components/nonConformance.vue @@ -57,6 +57,9 @@ :data-source="dataSource" :columns="columns" > + + {{text}} +
@@ -83,17 +86,19 @@ queryParam: {}, loading: false, dataSource: [], - selectedRowKeys:[], + selectedRowKeys: [], columns: [ { title: this.$t('standard'), align: 'center', - dataIndex: 'serialNumber' + dataIndex: 'serialNumber', + scopedSlots: { customRender: 'standard' } }, { title: this.$t('title'), align: 'center', - dataIndex: 'title' + dataIndex: 'title', + scopedSlots: { customRender: 'standard' } }, { title: this.$t('ProcessType'), @@ -194,6 +199,48 @@ this.loading = false } }) + }, + standardClick(val) { + let num = val.prcType + let query = { + taskIds: val.taskId, + projectTaskInventoryId: val.projectLawsInventoryId, + projectLibraryId: val.projectLibraryId, + projectName: val.projectName, + id: val.projectLibraryId, + serialNumber: val.serialNumber, + actiProcInstId: val.prcId, + primaryKeyId: val.projectTaskInventoryDetailId, + TaskKey: val.status == 'NotDone' ? val.taskDefinitionKey : 'hhhhh' + } + switch (num) { + case '2': + query.flowType = 2 + query.Sponsor = 'designInitiatorName' + query.personLiable = 'designDutyName' + query.typeOfDeliverables = 'designDeliverableType_dictText' + query.deliverableTemplate = 'designDeliverableTemplate' + break + case '3': + query.flowType = 3 + query.Sponsor = 'prehomoInitiatorName' + query.personLiable = 'prehomoDutyName' + query.typeOfDeliverables = 'prehomoDeliverableType_dictText' + query.deliverableTemplate = 'prehomoDeliverableTemplate' + break + case '4': + query.flowType = 4 + query.Sponsor = 'verifyInitiatorName' + query.personLiable = 'verifyDutyName' + query.typeOfDeliverables = 'verifyDeliverableType_dictText' + query.deliverableTemplate = 'verifyDeliverableTemplate' + break + } + let newUrl = this.$router.resolve({ + path: '/taskListProcess', + query: query + }) + window.open(newUrl.href, '_blank') } } } diff --git a/jero-web/src/views/projectManagement/projectNonConformance/index.vue b/jero-web/src/views/projectManagement/projectNonConformance/index.vue index a98310442..fb2302804 100644 --- a/jero-web/src/views/projectManagement/projectNonConformance/index.vue +++ b/jero-web/src/views/projectManagement/projectNonConformance/index.vue @@ -157,6 +157,9 @@ :data-source="dataSource" :columns="columns" > + + {{text}} +
@@ -195,13 +198,15 @@ title: this.$t('standard'), align: 'center', dataIndex: 'serialNumber', - ellipsis: true + ellipsis: true, + scopedSlots: { customRender: 'standard' } }, { title: this.$t('title'), align: 'center', dataIndex: 'title', - ellipsis: true + ellipsis: true, + scopedSlots: { customRender: 'standard' } }, { title: this.$t('ProcessType'), @@ -330,6 +335,48 @@ PersonnelSelectionChange(value, id) { this.queryParam[value] = id this.queryParam = { ...this.queryParam } + }, + standardClick(val) { + let num = val.prcType + let query = { + taskIds: val.taskId, + projectTaskInventoryId: val.projectLawsInventoryId, + projectLibraryId: val.projectLibraryId, + projectName: val.projectName, + id: val.projectLibraryId, + serialNumber: val.serialNumber, + actiProcInstId: val.prcId, + primaryKeyId: val.projectTaskInventoryDetailId, + TaskKey: val.status == 'NotDone' ? val.taskDefinitionKey : 'hhhhh' + } + switch (num) { + case '2': + query.flowType = 2 + query.Sponsor = 'designInitiatorName' + query.personLiable = 'designDutyName' + query.typeOfDeliverables = 'designDeliverableType_dictText' + query.deliverableTemplate = 'designDeliverableTemplate' + break + case '3': + query.flowType = 3 + query.Sponsor = 'prehomoInitiatorName' + query.personLiable = 'prehomoDutyName' + query.typeOfDeliverables = 'prehomoDeliverableType_dictText' + query.deliverableTemplate = 'prehomoDeliverableTemplate' + break + case '4': + query.flowType = 4 + query.Sponsor = 'verifyInitiatorName' + query.personLiable = 'verifyDutyName' + query.typeOfDeliverables = 'verifyDeliverableType_dictText' + query.deliverableTemplate = 'verifyDeliverableTemplate' + break + } + let newUrl = this.$router.resolve({ + path: '/taskListProcess', + query: query + }) + window.open(newUrl.href, '_blank') } } }